diff --git a/app-android/app/src/main/AndroidManifest.xml b/app-android/app/src/main/AndroidManifest.xml
index 6ac0cc9..8e883cb 100644
--- a/app-android/app/src/main/AndroidManifest.xml
+++ b/app-android/app/src/main/AndroidManifest.xml
@@ -9,6 +9,8 @@
android:targetSdkVersion="22" />
+
+
diff --git a/app-android/app/src/main/java/at/bitfire/gfxtablet/CanvasActivity.java b/app-android/app/src/main/java/at/bitfire/gfxtablet/CanvasActivity.java
index ce92d14..0461779 100644
--- a/app-android/app/src/main/java/at/bitfire/gfxtablet/CanvasActivity.java
+++ b/app-android/app/src/main/java/at/bitfire/gfxtablet/CanvasActivity.java
@@ -1,15 +1,18 @@
package at.bitfire.gfxtablet;
-import android.app.Activity;
import android.content.Intent;
import android.content.SharedPreferences;
+import android.database.Cursor;
+import android.graphics.drawable.BitmapDrawable;
+import android.graphics.drawable.Drawable;
import android.net.Uri;
import android.os.AsyncTask;
import android.os.Build;
import android.os.Bundle;
import android.preference.PreferenceManager;
+import android.provider.MediaStore;
import android.support.v7.app.ActionBarActivity;
-import android.util.Log;
+import android.support.v7.widget.PopupMenu;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
@@ -17,15 +20,20 @@ import android.view.WindowManager;
import android.widget.Toast;
public class CanvasActivity extends ActionBarActivity implements View.OnSystemUiVisibilityChangeListener {
+ private static int RESULT_LOAD_IMAGE = 1;
+
NetworkClient netClient;
CanvasView canvas;
+ SharedPreferences preferences;
boolean fullScreen = false;
@Override
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
+ protected void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+
+ preferences = PreferenceManager.getDefaultSharedPreferences(this);
netClient = new NetworkClient(PreferenceManager.getDefaultSharedPreferences(this));
new Thread(netClient).start();
@@ -44,24 +52,25 @@ public class CanvasActivity extends ActionBarActivity implements View.OnSystemUi
protected void onResume() {
super.onResume();
- SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);
- if (prefs.getBoolean(SettingsActivity.KEY_KEEP_DISPLAY_ACTIVE, true))
+ if (preferences.getBoolean(SettingsActivity.KEY_KEEP_DISPLAY_ACTIVE, true))
getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
else
getWindow().clearFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
+
+ showTemplateImage();
}
- @Override
- protected void onStop() {
- netClient.getQueue().add(new NetEvent(NetEvent.Type.TYPE_DISCONNECT));
+ @Override
+ protected void onStop() {
+ netClient.getQueue().add(new NetEvent(NetEvent.Type.TYPE_DISCONNECT));
super.onStop();
- }
-
- @Override
- public boolean onCreateOptionsMenu(Menu menu) {
- getMenuInflater().inflate(R.menu.activity_canvas, menu);
- return true;
- }
+ }
+
+ @Override
+ public boolean onCreateOptionsMenu(Menu menu) {
+ getMenuInflater().inflate(R.menu.activity_canvas, menu);
+ return true;
+ }
@Override
public void onBackPressed() {
@@ -72,12 +81,12 @@ public class CanvasActivity extends ActionBarActivity implements View.OnSystemUi
}
public void showAbout(MenuItem item) {
- startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse(("https://rfc2822.github.io/GfxTablet/"))));
- }
-
- public void showSettings(MenuItem item) {
- startActivityForResult(new Intent(this, SettingsActivity.class), 0);
- }
+ startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse(("https://rfc2822.github.io/GfxTablet/"))));
+ }
+
+ public void showSettings(MenuItem item) {
+ startActivityForResult(new Intent(this, SettingsActivity.class), 0);
+ }
public void switchFullScreen(MenuItem item) {
@@ -107,6 +116,63 @@ public class CanvasActivity extends ActionBarActivity implements View.OnSystemUi
}
+ private String getTemplateImagePath() {
+ return preferences.getString(SettingsActivity.KEY_TEMPLATE_IMAGE, null);
+ }
+
+ public void setTemplateImage(MenuItem item) {
+ if (getTemplateImagePath() == null)
+ selectTemplateImage(item);
+ else {
+ // template image already set, show popup
+ PopupMenu popup = new PopupMenu(this, findViewById(R.id.menu_set_template_image));
+ popup.getMenuInflater().inflate(R.menu.set_template_image, popup.getMenu());
+ popup.show();
+ }
+ }
+
+ public void selectTemplateImage(MenuItem item) {
+ Intent i = new Intent(Intent.ACTION_PICK, android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
+ startActivityForResult(i, RESULT_LOAD_IMAGE);
+ }
+
+ public void clearTemplateImage(MenuItem item) {
+ preferences.edit().remove(SettingsActivity.KEY_TEMPLATE_IMAGE).commit();
+ showTemplateImage();
+ }
+
+ @Override
+ protected void onActivityResult(int requestCode, int resultCode, Intent data) {
+ if (requestCode == RESULT_LOAD_IMAGE && resultCode == RESULT_OK && data != null) {
+ Uri selectedImage = data.getData();
+ String[] filePathColumn = { MediaStore.Images.Media.DATA };
+
+ Cursor cursor = getContentResolver().query(selectedImage, filePathColumn, null, null, null);
+ try {
+ cursor.moveToFirst();
+
+ int columnIndex = cursor.getColumnIndex(filePathColumn[0]);
+ String picturePath = cursor.getString(columnIndex);
+
+ preferences.edit().putString(SettingsActivity.KEY_TEMPLATE_IMAGE, picturePath).commit();
+ showTemplateImage();
+ } finally {
+ cursor.close();
+ }
+ } else
+ super.onActivityResult(requestCode, resultCode, data);
+ }
+
+ public void showTemplateImage() {
+ String picturePath = preferences.getString(SettingsActivity.KEY_TEMPLATE_IMAGE, null);
+ if (picturePath != null) {
+ Drawable drawable = BitmapDrawable.createFromPath(picturePath);
+ getWindow().setBackgroundDrawable(drawable);
+ } else
+ getWindow().setBackgroundDrawableResource(android.R.drawable.screen_background_light);
+ }
+
+
private class ConfigureNetworkingTask extends AsyncTask {
@Override
protected Boolean doInBackground(Void... params) {
diff --git a/app-android/app/src/main/java/at/bitfire/gfxtablet/SettingsActivity.java b/app-android/app/src/main/java/at/bitfire/gfxtablet/SettingsActivity.java
index 2203072..29baea8 100644
--- a/app-android/app/src/main/java/at/bitfire/gfxtablet/SettingsActivity.java
+++ b/app-android/app/src/main/java/at/bitfire/gfxtablet/SettingsActivity.java
@@ -9,7 +9,8 @@ public class SettingsActivity extends ActionBarActivity {
KEY_PREF_HOST = "host_preference",
KEY_PREF_STYLUS_ONLY = "stylus_only_preference",
KEY_DARK_CANVAS = "dark_canvas_preference",
- KEY_KEEP_DISPLAY_ACTIVE = "keep_display_active_preference";
+ KEY_KEEP_DISPLAY_ACTIVE = "keep_display_active_preference",
+ KEY_TEMPLATE_IMAGE = "key_template_image";
@Override
protected void onCreate(Bundle savedInstanceState) {
diff --git a/app-android/app/src/main/res/drawable-mdpi/ic_action_picture.png b/app-android/app/src/main/res/drawable-mdpi/ic_action_picture.png
new file mode 100644
index 0000000..3fb1134
Binary files /dev/null and b/app-android/app/src/main/res/drawable-mdpi/ic_action_picture.png differ
diff --git a/app-android/app/src/main/res/drawable-xhdpi/ic_action_picture.png b/app-android/app/src/main/res/drawable-xhdpi/ic_action_picture.png
new file mode 100644
index 0000000..a41fb71
Binary files /dev/null and b/app-android/app/src/main/res/drawable-xhdpi/ic_action_picture.png differ
diff --git a/app-android/app/src/main/res/drawable-xxhdpi/ic_action_picture.png b/app-android/app/src/main/res/drawable-xxhdpi/ic_action_picture.png
new file mode 100644
index 0000000..eeb5a8f
Binary files /dev/null and b/app-android/app/src/main/res/drawable-xxhdpi/ic_action_picture.png differ
diff --git a/app-android/app/src/main/res/menu/activity_canvas.xml b/app-android/app/src/main/res/menu/activity_canvas.xml
index ac5cfb5..01a1e19 100644
--- a/app-android/app/src/main/res/menu/activity_canvas.xml
+++ b/app-android/app/src/main/res/menu/activity_canvas.xml
@@ -1,6 +1,14 @@
-