summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--packages/SystemUI/src/com/android/systemui/fragments/FragmentHostManager.java24
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/events/SystemEventChipAnimationController.kt6
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/layout/StatusBarContentInsetsProvider.kt3
3 files changed, 25 insertions, 8 deletions
diff --git a/packages/SystemUI/src/com/android/systemui/fragments/FragmentHostManager.java b/packages/SystemUI/src/com/android/systemui/fragments/FragmentHostManager.java
index 81a520661cfe..643f3bb917d1 100644
--- a/packages/SystemUI/src/com/android/systemui/fragments/FragmentHostManager.java
+++ b/packages/SystemUI/src/com/android/systemui/fragments/FragmentHostManager.java
@@ -30,6 +30,7 @@ import android.os.Looper;
import android.os.Parcelable;
import android.os.Trace;
import android.util.ArrayMap;
+import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
@@ -52,6 +53,8 @@ import javax.inject.Provider;
public class FragmentHostManager {
+ private static final String TAG = "FragmentHostManager";
+
private final Handler mHandler = new Handler(Looper.getMainLooper());
private final Context mContext;
private final HashMap<String, ArrayList<FragmentListener>> mListeners = new HashMap<>();
@@ -84,7 +87,7 @@ public class FragmentHostManager {
FragmentHostManager create(View rootView);
}
- private void createFragmentHost(Parcelable savedState) {
+ private void createFragmentHost(@Nullable Parcelable savedState) {
mFragments = FragmentController.createController(new HostCallbacks());
mFragments.attachHost(null);
mLifecycleCallbacks = new FragmentLifecycleCallbacks() {
@@ -115,12 +118,21 @@ public class FragmentHostManager {
mFragments.dispatchResume();
}
+ @Nullable
private Parcelable destroyFragmentHost() {
- mFragments.dispatchPause();
- Parcelable p = mFragments.saveAllState();
- mFragments.dispatchStop();
- mFragments.dispatchDestroy();
- mFragments.getFragmentManager().unregisterFragmentLifecycleCallbacks(mLifecycleCallbacks);
+ Parcelable p = null;
+ try {
+ mFragments.dispatchPause();
+ p = mFragments.saveAllState();
+ mFragments.dispatchStop();
+ mFragments.dispatchDestroy();
+ mFragments
+ .getFragmentManager()
+ .unregisterFragmentLifecycleCallbacks(mLifecycleCallbacks);
+ } catch (IllegalStateException e) {
+ Log.e(TAG, "Failed to destroy fragment host. This is expected to happen only in "
+ + "tests when displays are added and removed quickly");
+ }
return p;
}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/events/SystemEventChipAnimationController.kt b/packages/SystemUI/src/com/android/systemui/statusbar/events/SystemEventChipAnimationController.kt
index 70632b33f532..c748e28e60b4 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/events/SystemEventChipAnimationController.kt
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/events/SystemEventChipAnimationController.kt
@@ -188,7 +188,11 @@ constructor(
finish.addListener(
object : AnimatorListenerAdapter() {
override fun onAnimationEnd(animation: Animator) {
- animationWindowView.removeView(currentAnimatedView!!.view)
+ if (!::animationWindowView.isInitialized) {
+ return
+ }
+ val animatedView = currentAnimatedView ?: return
+ animationWindowView.removeView(animatedView.view)
}
}
)
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/layout/StatusBarContentInsetsProvider.kt b/packages/SystemUI/src/com/android/systemui/statusbar/layout/StatusBarContentInsetsProvider.kt
index f7a9094e0337..7358c513eaff 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/layout/StatusBarContentInsetsProvider.kt
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/layout/StatusBarContentInsetsProvider.kt
@@ -53,6 +53,7 @@ import dagger.assisted.AssistedFactory
import dagger.assisted.AssistedInject
import java.io.PrintWriter
import java.lang.Math.max
+import java.util.concurrent.CopyOnWriteArraySet
/**
* Encapsulates logic that can solve for the left/right insets required for the status bar contents.
@@ -163,7 +164,7 @@ constructor(
// Limit cache size as potentially we may connect large number of displays
// (e.g. network displays)
private val insetsCache = LruCache<CacheKey, Rect>(MAX_CACHE_SIZE)
- private val listeners = mutableSetOf<StatusBarContentInsetsChangedListener>()
+ private val listeners = CopyOnWriteArraySet<StatusBarContentInsetsChangedListener>()
private val isPrivacyDotEnabled: Boolean by
lazy(LazyThreadSafetyMode.PUBLICATION) {
context.resources.getBoolean(R.bool.config_enablePrivacyDot)