Merge "Fix some QSFragment leaks" into udc-qpr-dev

This commit is contained in:
Fabian Kozynski
2023-06-14 15:48:01 +00:00
committed by Android (Google) Code Review
4 changed files with 38 additions and 3 deletions

View File

@@ -130,6 +130,11 @@ public class QSIconViewImpl extends QSIconView {
d.setLayoutDirection(getLayoutDirection());
}
final Drawable lastDrawable = iv.getDrawable();
if (lastDrawable instanceof Animatable2) {
((Animatable2) lastDrawable).clearAnimationCallbacks();
}
if (iv instanceof SlashImageView) {
((SlashImageView) iv).setAnimationEnabled(shouldAnimate);
((SlashImageView) iv).setState(null, d);

View File

@@ -172,7 +172,8 @@ public class InternetDialogController implements AccessPointController.AccessPoi
private Executor mExecutor;
private AccessPointController mAccessPointController;
private IntentFilter mConnectionStateFilter;
private InternetDialogCallback mCallback;
@VisibleForTesting
InternetDialogCallback mCallback;
private UiEventLogger mUiEventLogger;
private BroadcastDispatcher mBroadcastDispatcher;
private KeyguardUpdateMonitor mKeyguardUpdateMonitor;
@@ -215,12 +216,16 @@ public class InternetDialogController implements AccessPointController.AccessPoi
new KeyguardUpdateMonitorCallback() {
@Override
public void onRefreshCarrierInfo() {
mCallback.onRefreshCarrierInfo();
if (mCallback != null) {
mCallback.onRefreshCarrierInfo();
}
}
@Override
public void onSimStateChanged(int subId, int slotId, int simState) {
mCallback.onSimStateChanged();
if (mCallback != null) {
mCallback.onSimStateChanged();
}
}
};
@@ -331,6 +336,7 @@ public class InternetDialogController implements AccessPointController.AccessPoi
mKeyguardUpdateMonitor.removeCallback(mKeyguardUpdateCallback);
mConnectivityManager.unregisterNetworkCallback(mConnectivityManagerNetworkCallback);
mConnectedWifiInternetMonitor.unregisterCallback();
mCallback = null;
}
@VisibleForTesting

View File

@@ -155,6 +155,28 @@ public class QSIconViewImplTest extends SysuiTestCase {
inOrder.verify(d).stop();
}
@Test
public void testAnimatorCallbackRemovedOnOldDrawable() {
ImageView iv = new ImageView(mContext);
AnimatedVectorDrawable d1 = mock(AnimatedVectorDrawable.class);
when(d1.getConstantState()).thenReturn(fakeConstantState(d1));
AnimatedVectorDrawable d2 = mock(AnimatedVectorDrawable.class);
when(d2.getConstantState()).thenReturn(fakeConstantState(d2));
State s = new State();
s.isTransient = true;
// When set Animatable2 d1
s.icon = new QSTileImpl.DrawableIcon(d1);
mIconView.updateIcon(iv, s, true);
// And then set Animatable2 d2
s.icon = new QSTileImpl.DrawableIcon(d2);
mIconView.updateIcon(iv, s, true);
// Then d1 has its callback cleared
verify(d1).clearAnimationCallbacks();
}
private static Drawable.ConstantState fakeConstantState(Drawable otherDrawable) {
return new Drawable.ConstantState() {
@Override

View File

@@ -968,6 +968,7 @@ public class InternetDialogControllerTest extends SysuiTestCase {
assertThat(mInternetDialogController.mSubIdTelephonyManagerMap.get(SUB_ID)).isEqualTo(
mTelephonyManager);
assertThat(mInternetDialogController.mSubIdTelephonyCallbackMap.get(SUB_ID)).isNotNull();
assertThat(mInternetDialogController.mCallback).isNotNull();
mInternetDialogController.onStop();
@@ -980,6 +981,7 @@ public class InternetDialogControllerTest extends SysuiTestCase {
verify(mAccessPointController).removeAccessPointCallback(mInternetDialogController);
verify(mConnectivityManager).unregisterNetworkCallback(
any(ConnectivityManager.NetworkCallback.class));
assertThat(mInternetDialogController.mCallback).isNull();
}
private String getResourcesString(String name) {