diff --git a/app-android/app/build.gradle b/app-android/app/build.gradle index 4e0897f..bab7253 100644 --- a/app-android/app/build.gradle +++ b/app-android/app/build.gradle @@ -7,7 +7,7 @@ android { defaultConfig { applicationId "at.bitfire.gfxtablet" minSdkVersion 14 - targetSdkVersion 14 + targetSdkVersion 22 } buildTypes { @@ -19,5 +19,5 @@ android { } dependencies { - compile "com.android.support:appcompat-v7:21.0.0" + compile "com.android.support:appcompat-v7:21.0.+" } diff --git a/app-android/app/src/main/AndroidManifest.xml b/app-android/app/src/main/AndroidManifest.xml index b7ad3a2..6ac0cc9 100644 --- a/app-android/app/src/main/AndroidManifest.xml +++ b/app-android/app/src/main/AndroidManifest.xml @@ -6,7 +6,7 @@ + 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 76c6d99..ce92d14 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,5 +1,6 @@ package at.bitfire.gfxtablet; +import android.app.Activity; import android.content.Intent; import android.content.SharedPreferences; import android.net.Uri; @@ -8,20 +9,35 @@ import android.os.Build; import android.os.Bundle; import android.preference.PreferenceManager; import android.support.v7.app.ActionBarActivity; +import android.util.Log; import android.view.Menu; import android.view.MenuItem; import android.view.View; import android.view.WindowManager; import android.widget.Toast; -public class CanvasActivity extends ActionBarActivity { +public class CanvasActivity extends ActionBarActivity implements View.OnSystemUiVisibilityChangeListener { NetworkClient netClient; + CanvasView canvas; + + boolean fullScreen = false; + @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); netClient = new NetworkClient(PreferenceManager.getDefaultSharedPreferences(this)); + new Thread(netClient).start(); + + canvas = new CanvasView(CanvasActivity.this, netClient); + } + + @Override + protected void onStart() { + super.onStart(); + + new ConfigureNetworkingTask().execute(); } @Override @@ -29,16 +45,16 @@ public class CanvasActivity extends ActionBarActivity { super.onResume(); SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this); - if (prefs.getBoolean(SettingsActivity.KEY_KEEP_DISPLAY_ACTIVE, false)) + if (prefs.getBoolean(SettingsActivity.KEY_KEEP_DISPLAY_ACTIVE, true)) getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON); - - new ConfigureNetworkingTask().execute(); + else + getWindow().clearFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON); } @Override - protected void onDestroy() { - super.onDestroy(); + protected void onStop() { netClient.getQueue().add(new NetEvent(NetEvent.Type.TYPE_DISCONNECT)); + super.onStop(); } @Override @@ -48,12 +64,14 @@ public class CanvasActivity extends ActionBarActivity { } @Override - public boolean onPrepareOptionsMenu(Menu menu) { - menu.findItem(R.id.menu_fullscreen).setVisible(Build.VERSION.SDK_INT >= 19); - return true; + public void onBackPressed() { + if (fullScreen) + switchFullScreen(null); + else + super.onBackPressed(); } - public void showAbout(MenuItem item) { + public void showAbout(MenuItem item) { startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse(("https://rfc2822.github.io/GfxTablet/")))); } @@ -61,16 +79,31 @@ public class CanvasActivity extends ActionBarActivity { startActivityForResult(new Intent(this, SettingsActivity.class), 0); } + public void switchFullScreen(MenuItem item) { final View decorView = getWindow().getDecorView(); - decorView.setSystemUiVisibility( - View.SYSTEM_UI_FLAG_LAYOUT_STABLE | - View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION | - View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN | - View.SYSTEM_UI_FLAG_HIDE_NAVIGATION | // hide nav bar - View.SYSTEM_UI_FLAG_FULLSCREEN | // hide status bar - View.SYSTEM_UI_FLAG_IMMERSIVE - ); + int uiFlags = decorView.getSystemUiVisibility(); + + if (Build.VERSION.SDK_INT >= 14) + uiFlags ^= View.SYSTEM_UI_FLAG_HIDE_NAVIGATION; + if (Build.VERSION.SDK_INT >= 16) + uiFlags ^= View.SYSTEM_UI_FLAG_FULLSCREEN; + if (Build.VERSION.SDK_INT >= 18) + uiFlags ^= View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY; + + decorView.setOnSystemUiVisibilityChangeListener(this); + decorView.setSystemUiVisibility(uiFlags); + } + + @Override + public void onSystemUiVisibilityChange(int visibility) { + // show/hide action bar according to full-screen mode + if ((visibility & View.SYSTEM_UI_FLAG_FULLSCREEN) != 0) { + CanvasActivity.this.getSupportActionBar().hide(); + fullScreen = true; + Toast.makeText(CanvasActivity.this, "Press Back button to leave full-screen mode.", Toast.LENGTH_LONG).show(); + } else + CanvasActivity.this.getSupportActionBar().show(); } @@ -82,9 +115,7 @@ public class CanvasActivity extends ActionBarActivity { protected void onPostExecute(Boolean success) { if (success) { - setContentView(new CanvasView(CanvasActivity.this, netClient)); - new Thread(netClient).start(); - + setContentView(canvas); Toast.makeText(CanvasActivity.this, "Touch events will be sent to " + netClient.destAddress.getHostAddress() + ":" + NetworkClient.GFXTABLET_PORT, Toast.LENGTH_LONG).show(); } else setContentView(R.layout.activity_no_host); diff --git a/app-android/app/src/main/java/at/bitfire/gfxtablet/CanvasView.java b/app-android/app/src/main/java/at/bitfire/gfxtablet/CanvasView.java index ad68071..a1866b8 100644 --- a/app-android/app/src/main/java/at/bitfire/gfxtablet/CanvasView.java +++ b/app-android/app/src/main/java/at/bitfire/gfxtablet/CanvasView.java @@ -5,6 +5,7 @@ import android.content.Context; import android.content.SharedPreferences; import android.graphics.Color; import android.preference.PreferenceManager; +import android.util.AttributeSet; import android.util.Log; import android.view.MotionEvent; import android.view.View; @@ -22,21 +23,29 @@ public class CanvasView extends View { public CanvasView(Context context, NetworkClient networkClient) { super(context); - - netClient = networkClient; + this.netClient = networkClient; // process preferences settings = PreferenceManager.getDefaultSharedPreferences(context); acceptStylusOnly = settings.getBoolean(SettingsActivity.KEY_PREF_STYLUS_ONLY, false); - setBackgroundColor(settings.getBoolean(SettingsActivity.KEY_DARK_CANVAS, false) ? Color.BLACK : Color.WHITE); - } + } - @Override + @Override + protected void onAttachedToWindow() { + super.onAttachedToWindow(); + if (settings.getBoolean(SettingsActivity.KEY_DARK_CANVAS, false)) + setBackgroundColor(Color.BLACK); + else + setBackgroundResource(R.drawable.bg_grid_pattern); + } + + @Override protected void onSizeChanged(int w, int h, int oldw, int oldh) { + Log.i(TAG, "Canvas size changed: " + w + "x" + h + " (before: " + oldw + "x" + oldh + ")"); maxX = w; maxY = h; } - + @Override public boolean onGenericMotionEvent(MotionEvent event) { if (isEnabled()) { 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 3587e7e..2203072 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 @@ -1,5 +1,6 @@ package at.bitfire.gfxtablet; +import android.app.Activity; import android.os.Bundle; import android.support.v7.app.ActionBarActivity; diff --git a/app-android/app/src/main/res/drawable/bg_grid.png b/app-android/app/src/main/res/drawable/bg_grid.png new file mode 100644 index 0000000..03e0b25 Binary files /dev/null and b/app-android/app/src/main/res/drawable/bg_grid.png differ diff --git a/app-android/app/src/main/res/drawable/bg_grid_pattern.xml b/app-android/app/src/main/res/drawable/bg_grid_pattern.xml new file mode 100644 index 0000000..5719a5a --- /dev/null +++ b/app-android/app/src/main/res/drawable/bg_grid_pattern.xml @@ -0,0 +1,5 @@ + + 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 e2f216c..ac5cfb5 100644 --- a/app-android/app/src/main/res/menu/activity_canvas.xml +++ b/app-android/app/src/main/res/menu/activity_canvas.xml @@ -1,22 +1,22 @@ + xmlns:app="http://schemas.android.com/apk/res-auto"> + android:onClick="switchFullScreen" + app:showAsAction="always" + android:title="Fullscreen"/> + android:onClick="showSettings" + app:showAsAction="ifRoom" + android:title="@string/menu_settings"/> + app:showAsAction="never" + android:title="@string/menu_about"/> \ 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 7d0903b..a5343bf 100644 --- a/app-android/app/src/main/res/values/styles.xml +++ b/app-android/app/src/main/res/values/styles.xml @@ -1,10 +1,12 @@ - - + + \ No newline at end of file diff --git a/app-android/app/src/main/res/xml/preferences.xml b/app-android/app/src/main/res/xml/preferences.xml index 85b781f..88c4254 100644 --- a/app-android/app/src/main/res/xml/preferences.xml +++ b/app-android/app/src/main/res/xml/preferences.xml @@ -11,7 +11,7 @@