Validate that Handler being cleared is the one currently registered.
The BaseCommands.unsetOnXXX(Handler h) cleared the current singleton
registrant without validating that it was the same Handler used in the
argument. Out-of-order set/unset would cause a problem.
Bug: 17436226
Change-Id: I53a264e517f7cbef9e243c628102817a376da29d
diff --git a/src/java/com/android/internal/telephony/BaseCommands.java b/src/java/com/android/internal/telephony/BaseCommands.java
index 795ecba..bccabda 100644
--- a/src/java/com/android/internal/telephony/BaseCommands.java
+++ b/src/java/com/android/internal/telephony/BaseCommands.java
@@ -279,7 +279,10 @@
@Override
public void unSetOnNewGsmSms(Handler h) {
- mGsmSmsRegistrant.clear();
+ if (mGsmSmsRegistrant != null && mGsmSmsRegistrant.getHandler() == h) {
+ mGsmSmsRegistrant.clear();
+ mGsmSmsRegistrant = null;
+ }
}
@Override
@@ -289,7 +292,10 @@
@Override
public void unSetOnNewCdmaSms(Handler h) {
- mCdmaSmsRegistrant.clear();
+ if (mCdmaSmsRegistrant != null && mCdmaSmsRegistrant.getHandler() == h) {
+ mCdmaSmsRegistrant.clear();
+ mCdmaSmsRegistrant = null;
+ }
}
@Override
@@ -299,7 +305,10 @@
@Override
public void unSetOnNewGsmBroadcastSms(Handler h) {
- mGsmBroadcastSmsRegistrant.clear();
+ if (mGsmBroadcastSmsRegistrant != null && mGsmBroadcastSmsRegistrant.getHandler() == h) {
+ mGsmBroadcastSmsRegistrant.clear();
+ mGsmBroadcastSmsRegistrant = null;
+ }
}
@Override
@@ -309,7 +318,10 @@
@Override
public void unSetOnSmsOnSim(Handler h) {
- mSmsOnSimRegistrant.clear();
+ if (mSmsOnSimRegistrant != null && mSmsOnSimRegistrant.getHandler() == h) {
+ mSmsOnSimRegistrant.clear();
+ mSmsOnSimRegistrant = null;
+ }
}
@Override
@@ -319,7 +331,10 @@
@Override
public void unSetOnSmsStatus(Handler h) {
- mSmsStatusRegistrant.clear();
+ if (mSmsStatusRegistrant != null && mSmsStatusRegistrant.getHandler() == h) {
+ mSmsStatusRegistrant.clear();
+ mSmsStatusRegistrant = null;
+ }
}
@Override
@@ -329,7 +344,10 @@
@Override
public void unSetOnSignalStrengthUpdate(Handler h) {
- mSignalStrengthRegistrant.clear();
+ if (mSignalStrengthRegistrant != null && mSignalStrengthRegistrant.getHandler() == h) {
+ mSignalStrengthRegistrant.clear();
+ mSignalStrengthRegistrant = null;
+ }
}
@Override
@@ -339,7 +357,10 @@
@Override
public void unSetOnNITZTime(Handler h) {
- mNITZTimeRegistrant.clear();
+ if (mNITZTimeRegistrant != null && mNITZTimeRegistrant.getHandler() == h) {
+ mNITZTimeRegistrant.clear();
+ mNITZTimeRegistrant = null;
+ }
}
@Override
@@ -349,7 +370,10 @@
@Override
public void unSetOnUSSD(Handler h) {
- mUSSDRegistrant.clear();
+ if (mUSSDRegistrant != null && mUSSDRegistrant.getHandler() == h) {
+ mUSSDRegistrant.clear();
+ mUSSDRegistrant = null;
+ }
}
@Override
@@ -359,7 +383,10 @@
@Override
public void unSetOnSuppServiceNotification(Handler h) {
- mSsnRegistrant.clear();
+ if (mSsnRegistrant != null && mSsnRegistrant.getHandler() == h) {
+ mSsnRegistrant.clear();
+ mSsnRegistrant = null;
+ }
}
@Override
@@ -369,7 +396,10 @@
@Override
public void unSetOnCatSessionEnd(Handler h) {
- mCatSessionEndRegistrant.clear();
+ if (mCatSessionEndRegistrant != null && mCatSessionEndRegistrant.getHandler() == h) {
+ mCatSessionEndRegistrant.clear();
+ mCatSessionEndRegistrant = null;
+ }
}
@Override
@@ -379,7 +409,10 @@
@Override
public void unSetOnCatProactiveCmd(Handler h) {
- mCatProCmdRegistrant.clear();
+ if (mCatProCmdRegistrant != null && mCatProCmdRegistrant.getHandler() == h) {
+ mCatProCmdRegistrant.clear();
+ mCatProCmdRegistrant = null;
+ }
}
@Override
@@ -389,7 +422,10 @@
@Override
public void unSetOnCatEvent(Handler h) {
- mCatEventRegistrant.clear();
+ if (mCatEventRegistrant != null && mCatEventRegistrant.getHandler() == h) {
+ mCatEventRegistrant.clear();
+ mCatEventRegistrant = null;
+ }
}
@Override
@@ -399,7 +435,10 @@
@Override
public void unSetOnCatCallSetUp(Handler h) {
- mCatCallSetUpRegistrant.clear();
+ if (mCatCallSetUpRegistrant != null && mCatCallSetUpRegistrant.getHandler() == h) {
+ mCatCallSetUpRegistrant.clear();
+ mCatCallSetUpRegistrant = null;
+ }
}
@Override
@@ -409,7 +448,10 @@
@Override
public void unSetOnIccSmsFull(Handler h) {
- mIccSmsFullRegistrant.clear();
+ if (mIccSmsFullRegistrant != null && mIccSmsFullRegistrant.getHandler() == h) {
+ mIccSmsFullRegistrant.clear();
+ mIccSmsFullRegistrant = null;
+ }
}
@Override
@@ -443,7 +485,10 @@
@Override
public void unSetOnCallRing(Handler h) {
- mRingRegistrant.clear();
+ if (mRingRegistrant != null && mRingRegistrant.getHandler() == h) {
+ mRingRegistrant.clear();
+ mRingRegistrant = null;
+ }
}
@Override
@@ -475,7 +520,10 @@
@Override
public void unSetOnRestrictedStateChanged(Handler h) {
- mRestrictedStateRegistrant.clear();
+ if (mRestrictedStateRegistrant != null && mRestrictedStateRegistrant.getHandler() != h) {
+ mRestrictedStateRegistrant.clear();
+ mRestrictedStateRegistrant = null;
+ }
}
@Override
@@ -511,7 +559,10 @@
}
public void unSetOnUnsolOemHookRaw(Handler h) {
- mUnsolOemHookRawRegistrant.clear();
+ if (mUnsolOemHookRawRegistrant != null && mUnsolOemHookRawRegistrant.getHandler() == h) {
+ mUnsolOemHookRawRegistrant.clear();
+ mUnsolOemHookRawRegistrant = null;
+ }
}
@Override