From 2dbb7395a45f4ed0c268316a160e737c0d429ffb Mon Sep 17 00:00:00 2001 From: Cameron Gutman Date: Tue, 19 Apr 2016 20:38:05 -0400 Subject: [PATCH] Restart the app view activity when configuration changes are made that could require the grid to be resized. This is much simpler than handling all of the fine edge cases here. --- app/src/main/AndroidManifest.xml | 2 +- app/src/main/java/com/limelight/AppView.java | 33 +++++++++++--------- 2 files changed, 20 insertions(+), 15 deletions(-) diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 2352c3bb..82336653 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -37,7 +37,7 @@ + android:configChanges="mcc|mnc|locale|touchscreen|keyboard|keyboardHidden|navigation|fontScale|uiMode" > diff --git a/app/src/main/java/com/limelight/AppView.java b/app/src/main/java/com/limelight/AppView.java index 92fd4c3b..f567cfe5 100644 --- a/app/src/main/java/com/limelight/AppView.java +++ b/app/src/main/java/com/limelight/AppView.java @@ -96,9 +96,25 @@ public class AppView extends Activity implements AdapterFragmentCallbacks { // Load the app grid with cached data (if possible) populateAppGridWithCache(); - getFragmentManager().beginTransaction() - .replace(R.id.appFragmentContainer, new AdapterFragment()) - .commitAllowingStateLoss(); + runOnUiThread(new Runnable() { + @Override + public void run() { + if (isFinishing() || isChangingConfigurations()) { + return; + } + + // Despite my best efforts to catch all conditions that could + // cause the activity to be destroyed when we try to commit + // I haven't been able to, so we have this try-catch block. + try { + getFragmentManager().beginTransaction() + .replace(R.id.appFragmentContainer, new AdapterFragment()) + .commitAllowingStateLoss(); + } catch (IllegalStateException e) { + e.printStackTrace(); + } + } + }); } }.start(); } @@ -108,17 +124,6 @@ public class AppView extends Activity implements AdapterFragmentCallbacks { } }; - @Override - public void onConfigurationChanged(Configuration newConfig) { - super.onConfigurationChanged(newConfig); - - getFragmentManager().beginTransaction() - .replace(R.id.appFragmentContainer, new AdapterFragment()) - .commitAllowingStateLoss(); - - appGridAdapter.notifyDataSetChanged(); - } - private void startComputerUpdates() { // Don't start polling if we're not bound or in the foreground if (managerBinder == null || !inForeground) {