diff options
author | Chuck Liao <chuckliao@google.com> | 2020-09-07 21:55:30 +0800 |
---|---|---|
committer | Chuck Liao <chuckliao@google.com> | 2020-09-07 22:12:51 +0800 |
commit | b17d15044c5f81b49ae094167bc49c940acb17f0 (patch) | |
tree | ac192f40b87ec1ebd52abeb534d2239f07080fde | |
parent | cb187dbd62b7bdcb405252f4ae864d3e273376a0 (diff) | |
download | WallpaperPicker2-b17d15044c5f81b49ae094167bc49c940acb17f0.tar.gz |
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: I497620f86f5309392761ce11e19bc183a70178cb
3 files changed, 33 insertions, 2 deletions
diff --git a/src/com/android/wallpaper/picker/BaseActivity.java b/src/com/android/wallpaper/picker/BaseActivity.java index 7f2ea604..25a2b2ac 100755 --- a/src/com/android/wallpaper/picker/BaseActivity.java +++ b/src/com/android/wallpaper/picker/BaseActivity.java @@ -21,7 +21,7 @@ import androidx.appcompat.app.AppCompatActivity; * Base activity that keeps track of whether fragment transactions are safe to commit given the * activity's current lifecycle state. */ -public class BaseActivity extends AppCompatActivity { +public class BaseActivity extends AppCompatActivity implements FragmentTransactionChecker { private boolean mIsSafeToCommitFragmentTransaction; @@ -37,6 +37,7 @@ public class BaseActivity extends AppCompatActivity { mIsSafeToCommitFragmentTransaction = false; } + @Override public boolean isSafeToCommitFragmentTransaction() { return mIsSafeToCommitFragmentTransaction; } diff --git a/src/com/android/wallpaper/picker/FragmentTransactionChecker.java b/src/com/android/wallpaper/picker/FragmentTransactionChecker.java new file mode 100644 index 00000000..c25a41ff --- /dev/null +++ b/src/com/android/wallpaper/picker/FragmentTransactionChecker.java @@ -0,0 +1,29 @@ +/* + * Copyright (C) 2020 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.android.wallpaper.picker; + +/** + * An interface for a class to keep track of whether fragment transactions are safe to commit given + * the activity's current lifecycle state. + */ +public interface FragmentTransactionChecker { + /** + * Checks if the fragment transactions are safe to commit + * + * @return {@code true} if it is safe; {@code false} otherwise. + */ + boolean isSafeToCommitFragmentTransaction(); +} diff --git a/src/com/android/wallpaper/picker/individual/IndividualPickerFragment.java b/src/com/android/wallpaper/picker/individual/IndividualPickerFragment.java index 5fd0e7ac..260d121f 100755 --- a/src/com/android/wallpaper/picker/individual/IndividualPickerFragment.java +++ b/src/com/android/wallpaper/picker/individual/IndividualPickerFragment.java @@ -78,6 +78,7 @@ import com.android.wallpaper.module.WallpaperSetter; import com.android.wallpaper.picker.BaseActivity; import com.android.wallpaper.picker.BottomActionBarFragment; import com.android.wallpaper.picker.CurrentWallpaperBottomSheetPresenter; +import com.android.wallpaper.picker.FragmentTransactionChecker; import com.android.wallpaper.picker.MyPhotosStarter.MyPhotosStarterProvider; import com.android.wallpaper.picker.PreviewActivity; import com.android.wallpaper.picker.RotationStarter; @@ -816,7 +817,7 @@ public class IndividualPickerFragment extends BottomActionBarFragment } private void showStartRotationErrorDialog(@NetworkPreference int networkPreference) { - BaseActivity activity = (BaseActivity) getActivity(); + FragmentTransactionChecker activity = (FragmentTransactionChecker) getActivity(); if (activity != null) { StartRotationErrorDialogFragment startRotationErrorDialogFragment = StartRotationErrorDialogFragment.newInstance(networkPreference); |