From fb20c3f5d25b4cb0402827703efae523a91e9198 Mon Sep 17 00:00:00 2001 From: Ricki Hirner Date: Sun, 28 Jun 2015 18:57:36 +0200 Subject: [PATCH] First version of template image support --- app-android/app/src/main/AndroidManifest.xml | 2 + .../at/bitfire/gfxtablet/CanvasActivity.java | 110 ++++++++++++++---- .../bitfire/gfxtablet/SettingsActivity.java | 3 +- .../res/drawable-mdpi/ic_action_picture.png | Bin 0 -> 411 bytes .../res/drawable-xhdpi/ic_action_picture.png | Bin 0 -> 715 bytes .../res/drawable-xxhdpi/ic_action_picture.png | Bin 0 -> 929 bytes .../app/src/main/res/menu/activity_canvas.xml | 12 +- .../src/main/res/menu/set_template_image.xml | 14 +++ .../app/src/main/res/values/styles.xml | 4 +- 9 files changed, 118 insertions(+), 27 deletions(-) create mode 100644 app-android/app/src/main/res/drawable-mdpi/ic_action_picture.png create mode 100644 app-android/app/src/main/res/drawable-xhdpi/ic_action_picture.png create mode 100644 app-android/app/src/main/res/drawable-xxhdpi/ic_action_picture.png create mode 100644 app-android/app/src/main/res/menu/set_template_image.xml 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 0000000000000000000000000000000000000000..3fb113454f2e3100649a70a2e13a4674725f92a4 GIT binary patch literal 411 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdzmSQK*5Dp-y;YjHK@;M7UB8!3Q zuY)k7lg8`{prB-lYeY$Kep*R+Vo@qXd3m{BW?pu2a$-TMUVc&f>~}U&3=E7Co-U3d z5v^~pZ_GMuAi(zExBoKJr2@|FmnJP`%x_Eb+_sEQ?fr$7*_CL8o?ZEt73~cub=BbAE$GpZ?UK^-dk>3`_@dW3NkV zKK=X8ieb&xX|91^>SFuZTmruwJo77BxLBnn;(4W=vXa+jlQ6GbMx9lwqB7U2H#2s; zc<1o8bg=d#Wzp$PzC Co2EMe literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..a41fb71b74e7b3f87113c7b22db99abf1da6a4b8 GIT binary patch literal 715 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=EX7WqAsj$Z!;#Vf2?p zUk71ECym(^Ktah8*NBqf{Irtt#G+J&^73-M%)IR4 zb5}{u{6pL17MJL%HLrYoTUBK8s&yase%pBQubX#FZH?V^u}z6R3)K!^V!HH$0h3@U z^}iBTe`{Gsw%g*1sdGO|*)#U?2UK&f2`b-Hc2@27mXE>@m_4{X9up=uUld+wb)-;c z+wHg08Q!T)J}JI=`ToQCsZ3LX?rL=9&G^aLusm~C91mOb+N0YJRyNq2|9xzRw9>18 zJ2^Jb@>_oWZ=HQnt!?xi){e&(XEwd*HGF1j+|J+6Y%%w2+TpnM*-twkifa#~#35gk{U#{$=O#X0oIM!vm%BpWTnmkoQ_ytn`X$h0Xk#)~BC-(mK5ZEeu2BV}uwc^q6= z9!MMr$gWM>eC{CIj^(Z{>vO~`zA#)vL{h|k&Udfxr@p%MgEOP1p?BMXg?}@PWP9f~ t9AiH)&u;BK$=>-4@(xiBQmDkN`zuZtrTl%{;R#H544$rjF6*2UngI0CK1Tom literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..eeb5a8fb91803c4ec496fd7c2f7939d38b68bc70 GIT binary patch literal 929 zcmeAS@N?(olHy`uVBq!ia0vp^2_VeD1|%QND7OGoEX7WqAsj$Z!;#Vf2?p zUk71ECym(^Ktah8*NBqf{Irtt#G+J&^73-M%)IR4PjbB0O)tu_NsW;sgUyS&APk(WG7pK&Mt69F0+4ien6^Du@_Xtkx zE6%G;O*S+7?=XQ#}E!%x*KbO|(Zw$}x7Im$7b=Ky*ePs50p6Z-g%O>CZz18OY_Rz1X z+i%~^*%}qR_)K7X6f@86r#uGBR=q#}JMv()y_nOBFI9WzD{Z>)eM;&2n>p_+p36;} zvs`E^n?&kqO(msU875)Q9P7K{p3f;hHsk%V8L5Ih>rPdw^%%-KbI1y6{ywI$^cutB zJj>@Bp6rbmp7{US_G|Y_&*iRq6)iYZ&+6bu(TzE4|328eKk)J#=GYa|mkeA|4q8q> zbMD+bHBY0wfBSCF=i7aCWtR5oO>a$n>)*b8`*&UDoz2(#_a;nrc~Uq@<$jN${jcvo z6IZ@kyLjXPzoOKlxX@~U0$=0x}YTv7FsIm9 + + + + + + + + + \ No newline at end of file diff --git a/app-android/app/src/main/res/values/styles.xml b/app-android/app/src/main/res/values/styles.xml index a5343bf..2bccbc3 100644 --- a/app-android/app/src/main/res/values/styles.xml +++ b/app-android/app/src/main/res/values/styles.xml @@ -1,8 +1,8 @@