diff options
author | zachh <zachh@google.com> | 2017-12-20 14:32:47 -0800 |
---|---|---|
committer | Eric Erfanian <erfanian@google.com> | 2017-12-22 08:55:15 -0800 |
commit | 128d859aa0e678971c85d00d4417c9ca79a8b702 (patch) | |
tree | a321c959b6c0042126f6f44d95a4b7fc8cd4789f /java/com/android/dialer/common | |
parent | 6456d8302885e9c6f24d678fca798b730d101a17 (diff) | |
download | android_packages_apps_Dialer-128d859aa0e678971c85d00d4417c9ca79a8b702.tar.gz android_packages_apps_Dialer-128d859aa0e678971c85d00d4417c9ca79a8b702.tar.bz2 android_packages_apps_Dialer-128d859aa0e678971c85d00d4417c9ca79a8b702.zip |
Fixed crash in UiListener when launching activity with screen off.
When launching MainActivity with the screen off (e.g. from Android Studio) the application would crash due to:
java.lang.IllegalStateException: Can not perform this action after onSaveInstanceState
Also use FragmentPagerAdapter in MainPagerAdapter as the number of tabs is small and can be stored in memory.
Test: manual
PiperOrigin-RevId: 179734952
Change-Id: Ib2ca9674f3174493da55bbbf0ef4053fcf73ab47
Diffstat (limited to 'java/com/android/dialer/common')
-rw-r--r-- | java/com/android/dialer/common/concurrent/UiListener.java | 8 |
1 files changed, 7 insertions, 1 deletions
diff --git a/java/com/android/dialer/common/concurrent/UiListener.java b/java/com/android/dialer/common/concurrent/UiListener.java index 9541dbc0c..df791301f 100644 --- a/java/com/android/dialer/common/concurrent/UiListener.java +++ b/java/com/android/dialer/common/concurrent/UiListener.java @@ -71,7 +71,10 @@ public class UiListener<OutputT> extends Fragment { if (uiListener == null) { LogUtil.i("UiListener.create", "creating new UiListener for " + taskId); uiListener = new UiListener<>(); - fragmentManager.beginTransaction().add(uiListener, taskId).commit(); + // When launching an activity with the screen off, its onSaveInstanceState() is called before + // its fragments are created, which means we can't use commit() and need to use + // commitAllowingStateLoss(). This is not a problem for UiListener which saves no state. + fragmentManager.beginTransaction().add(uiListener, taskId).commitAllowingStateLoss(); } return uiListener; } @@ -130,6 +133,9 @@ public class UiListener<OutputT> extends Fragment { public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setRetainInstance(true); + // Note: We use commitAllowingStateLoss when attaching the fragment so it may not be safe to + // read savedInstanceState in all situations. (But it's not anticipated that this fragment + // should need to rely on saved state.) } @Override |