From 3f8d868110b426e40e09ece8b305fd84c1dde60c Mon Sep 17 00:00:00 2001 From: Winson Chung Date: Tue, 4 Aug 2020 14:01:27 -0700 Subject: [PATCH] Defer recreation until resumed - Temporarily work around issue with activity recreation while started but not resumed by deferring recreating the activity on theme change until after launcher has resumed. Bug: 162812884 Test: Switch dark mode via QuickSettings, Settings Test: Change system theme Change-Id: Ifbc0d538907a30d6b23176cd67353a81b6f8c617 --- src/com/android/launcher3/BaseDraggingActivity.java | 13 ++++++++++++- src/com/android/launcher3/Launcher.java | 1 + 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/src/com/android/launcher3/BaseDraggingActivity.java b/src/com/android/launcher3/BaseDraggingActivity.java index f2a5c656ff..833ce1501d 100644 --- a/src/com/android/launcher3/BaseDraggingActivity.java +++ b/src/com/android/launcher3/BaseDraggingActivity.java @@ -42,6 +42,7 @@ import android.widget.Toast; import androidx.annotation.Nullable; +import com.android.launcher3.Launcher.OnResumeCallback; import com.android.launcher3.LauncherSettings.Favorites; import com.android.launcher3.logging.InstanceId; import com.android.launcher3.logging.InstanceIdSequence; @@ -108,10 +109,20 @@ public abstract class BaseDraggingActivity extends BaseActivity private void updateTheme() { if (mThemeRes != Themes.getActivityThemeRes(this)) { - recreate(); + // Workaround (b/162812884): The system currently doesn't allow recreating an activity + // when it is not resumed, in such a case defer recreation until it is possible + if (hasBeenResumed()) { + recreate(); + } else { + addOnResumeCallback(this::recreate); + } } } + protected void addOnResumeCallback(OnResumeCallback callback) { + // To be overridden + } + @Override public void onActionModeStarted(ActionMode mode) { super.onActionModeStarted(mode); diff --git a/src/com/android/launcher3/Launcher.java b/src/com/android/launcher3/Launcher.java index 4675362f64..03e4b06f8f 100644 --- a/src/com/android/launcher3/Launcher.java +++ b/src/com/android/launcher3/Launcher.java @@ -1943,6 +1943,7 @@ public class Launcher extends StatefulActivity implements Launche return result; } + @Override public void addOnResumeCallback(OnResumeCallback callback) { mOnResumeCallbacks.add(callback); }