Fix the crash when applying daily wallpaper without network connection
It's because CustomizationPickerActivity is cast to BaseActivity to call isSafeToCommitFragmentTransaction(), but it is not a BaseActivity.
Extract isSafeToCommitFragmentTransaction() to an interface to let CustomizationPickerActivity to implement it.
Bug: 167943713
Change-Id: Idd392fbd2fbadf3d8f4d69fb68ba1ccec948306a
diff --git a/src/com/android/customization/picker/CustomizationPickerActivity.java b/src/com/android/customization/picker/CustomizationPickerActivity.java
index 382a63c..86845fc 100644
--- a/src/com/android/customization/picker/CustomizationPickerActivity.java
+++ b/src/com/android/customization/picker/CustomizationPickerActivity.java
@@ -70,6 +70,7 @@
import com.android.wallpaper.picker.BottomActionBarFragment;
import com.android.wallpaper.picker.CategoryFragment;
import com.android.wallpaper.picker.CategoryFragment.CategoryFragmentHost;
+import com.android.wallpaper.picker.FragmentTransactionChecker;
import com.android.wallpaper.picker.MyPhotosStarter;
import com.android.wallpaper.picker.MyPhotosStarter.PermissionChangedListener;
import com.android.wallpaper.picker.TopLevelPickerActivity;
@@ -90,7 +91,7 @@
*/
public class CustomizationPickerActivity extends FragmentActivity implements WallpapersUiContainer,
CategoryFragmentHost, ThemeFragmentHost, GridFragmentHost, ClockFragmentHost,
- BottomActionBarHost {
+ BottomActionBarHost, FragmentTransactionChecker {
public static final String WALLPAPER_FLAVOR_EXTRA =
"com.android.launcher3.WALLPAPER_FLAVOR";
@@ -105,6 +106,7 @@
private static final Map<Integer, CustomizationSection> mSections = new HashMap<>();
private CategoryFragment mWallpaperCategoryFragment;
private BottomActionBar mBottomActionBar;
+ private boolean mIsSafeToCommitFragmentTransaction;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
@@ -155,6 +157,7 @@
@Override
protected void onResume() {
super.onResume();
+ mIsSafeToCommitFragmentTransaction = true;
boolean wallpaperOnly =
WALLPAPER_ONLY.equals(getIntent().getStringExtra(WALLPAPER_FLAVOR_EXTRA));
boolean provisioned = Settings.Global.getInt(getContentResolver(),
@@ -178,6 +181,12 @@
}
@Override
+ protected void onPause() {
+ super.onPause();
+ mIsSafeToCommitFragmentTransaction = false;
+ }
+
+ @Override
protected void onNewIntent(Intent intent) {
super.onNewIntent(intent);
if (WALLPAPER_ONLY.equals(intent.getStringExtra(WALLPAPER_FLAVOR_EXTRA))) {
@@ -447,6 +456,11 @@
return mBottomActionBar;
}
+ @Override
+ public boolean isSafeToCommitFragmentTransaction() {
+ return mIsSafeToCommitFragmentTransaction;
+ }
+
/**
* Represents a section of the Picker (eg "ThemeBundle", "Clock", etc).
* There should be a concrete subclass per available section, providing the corresponding