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); }