summaryrefslogtreecommitdiff
path: root/java
diff options
context:
space:
mode:
authorzachh <zachh@google.com>2017-12-20 14:32:47 -0800
committerEric Erfanian <erfanian@google.com>2017-12-22 08:55:15 -0800
commit128d859aa0e678971c85d00d4417c9ca79a8b702 (patch)
treea321c959b6c0042126f6f44d95a4b7fc8cd4789f /java
parent6456d8302885e9c6f24d678fca798b730d101a17 (diff)
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')
-rw-r--r--java/com/android/dialer/calllog/ui/NewCallLogFragment.java6
-rw-r--r--java/com/android/dialer/common/concurrent/UiListener.java8
-rw-r--r--java/com/android/dialer/main/impl/MainPagerAdapter.java4
3 files changed, 12 insertions, 6 deletions
diff --git a/java/com/android/dialer/calllog/ui/NewCallLogFragment.java b/java/com/android/dialer/calllog/ui/NewCallLogFragment.java
index c10b52123..719878cec 100644
--- a/java/com/android/dialer/calllog/ui/NewCallLogFragment.java
+++ b/java/com/android/dialer/calllog/ui/NewCallLogFragment.java
@@ -58,10 +58,10 @@ public final class NewCallLogFragment extends Fragment
}
@Override
- public void onCreate(Bundle state) {
- super.onCreate(state);
+ public void onActivityCreated(@Nullable Bundle savedInstanceState) {
+ super.onActivityCreated(savedInstanceState);
- LogUtil.enterBlock("NewCallLogFragment.onCreate");
+ LogUtil.enterBlock("NewCallLogFragment.onActivityCreated");
CallLogComponent component = CallLogComponent.get(getContext());
CallLogFramework callLogFramework = component.callLogFramework();
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
diff --git a/java/com/android/dialer/main/impl/MainPagerAdapter.java b/java/com/android/dialer/main/impl/MainPagerAdapter.java
index 2d224f69c..d294640ee 100644
--- a/java/com/android/dialer/main/impl/MainPagerAdapter.java
+++ b/java/com/android/dialer/main/impl/MainPagerAdapter.java
@@ -20,7 +20,7 @@ import android.content.Context;
import android.support.annotation.IntDef;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
-import android.support.v4.app.FragmentStatePagerAdapter;
+import android.support.v4.app.FragmentPagerAdapter;
import com.android.dialer.calllog.ui.NewCallLogFragment;
import com.android.dialer.common.Assert;
import com.android.dialer.voicemail.listui.NewVoicemailFragment;
@@ -28,7 +28,7 @@ import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
/** Adapter for {@link MainActivity} ViewPager. */
-final class MainPagerAdapter extends FragmentStatePagerAdapter {
+final class MainPagerAdapter extends FragmentPagerAdapter {
@Retention(RetentionPolicy.SOURCE)
@IntDef({