diff options
author | Rambo Wang <rambowang@google.com> | 2022-05-20 20:59:34 +0000 |
---|---|---|
committer | Rambo Wang <rambowang@google.com> | 2022-05-20 22:48:48 +0000 |
commit | 360cb9341331050fbb698940d123a6c684224917 (patch) | |
tree | 28262ff0ec9f6a09d8c8295c543c93a11c5bbed1 | |
parent | 3497e7d707ac874f16c62672dc37d453e50bf447 (diff) | |
download | telephony-360cb9341331050fbb698940d123a6c684224917.tar.gz |
CPT: build carrier privileges cache when AccessRules are loaded
This change builds carrier privileges cache immediately when
knows UiccAccessRule in the profile has been loaded.
Previously CarrierPrivilegesTracker builds the CP cache only
when received SIM_STATE_LOADED. This removes the dependency
from CPT to UiccProfile but brings a tiny delay for clients
like SUW which needs to get carrier packages in the first
place.
Bug: 227809916
Test: atest CarrierPrivilegesTrackerTest
Test: Telephony sanity(Activation, call, sms, data, switching)
Change-Id: Ia6bab2383f106e9033e7e77fc507b53580c4d25f
-rw-r--r-- | src/java/com/android/internal/telephony/CarrierPrivilegesTracker.java | 52 | ||||
-rw-r--r-- | src/java/com/android/internal/telephony/uicc/UiccProfile.java | 8 |
2 files changed, 44 insertions, 16 deletions
diff --git a/src/java/com/android/internal/telephony/CarrierPrivilegesTracker.java b/src/java/com/android/internal/telephony/CarrierPrivilegesTracker.java index dd9faa81ab..ae6b1a0e01 100644 --- a/src/java/com/android/internal/telephony/CarrierPrivilegesTracker.java +++ b/src/java/com/android/internal/telephony/CarrierPrivilegesTracker.java @@ -178,6 +178,11 @@ public class CarrierPrivilegesTracker extends Handler { */ private static final int ACTION_CLEAR_UICC_RULES = 9; + /** + * Action to handle the case when UiccAccessRules has been loaded. + */ + private static final int ACTION_UICC_ACCESS_RULES_LOADED = 10; + private final Context mContext; private final Phone mPhone; private final PackageManager mPackageManager; @@ -430,6 +435,9 @@ public class CarrierPrivilegesTracker extends Handler { handleClearUiccRules(); break; } + case ACTION_UICC_ACCESS_RULES_LOADED: { + handleUiccAccessRulesLoaded(); + } default: { Rlog.e(TAG, "Received unknown msg type: " + msg.what); break; @@ -502,16 +510,8 @@ public class CarrierPrivilegesTracker extends Handler { // Only include the UICC rules if the SIM is fully loaded if (simState == SIM_STATE_LOADED) { - mClearUiccRulesUptimeMillis = CLEAR_UICC_RULE_NOT_SCHEDULED; - removeMessages(ACTION_CLEAR_UICC_RULES); - - updatedUiccRules = getSimRules(); - - mLocalLog.log("SIM fully loaded:" - + " slotId=" + slotId - + " simState=" + simState - + " updated SIM-loaded rules=" + updatedUiccRules); - maybeUpdateRulesAndNotifyRegistrants(mUiccRules, updatedUiccRules); + mLocalLog.log("SIM fully loaded, handleUiccAccessRulesLoaded."); + handleUiccAccessRulesLoaded(); } else { if (!mUiccRules.isEmpty() && mClearUiccRulesUptimeMillis == CLEAR_UICC_RULE_NOT_SCHEDULED) { @@ -519,8 +519,9 @@ public class CarrierPrivilegesTracker extends Handler { SystemClock.uptimeMillis() + CLEAR_UICC_RULES_DELAY_MILLIS; sendMessageAtTime(obtainMessage(ACTION_CLEAR_UICC_RULES), mClearUiccRulesUptimeMillis); - mLocalLog.log("SIM is gone. Delay " + TimeUnit.MILLISECONDS.toSeconds( - CLEAR_UICC_RULES_DELAY_MILLIS) + " seconds to clear UICC rules."); + mLocalLog.log("SIM is gone, simState=" + simState + ". Delay " + + TimeUnit.MILLISECONDS.toSeconds(CLEAR_UICC_RULES_DELAY_MILLIS) + + " seconds to clear UICC rules."); } else { mLocalLog.log( "Ignore SIM gone event while UiccRules is empty or waiting to be emptied."); @@ -528,6 +529,21 @@ public class CarrierPrivilegesTracker extends Handler { } } + private void handleUiccAccessRulesLoaded() { + mClearUiccRulesUptimeMillis = CLEAR_UICC_RULE_NOT_SCHEDULED; + removeMessages(ACTION_CLEAR_UICC_RULES); + + List<UiccAccessRule> updatedUiccRules = getSimRules(); + mLocalLog.log("UiccAccessRules loaded:" + + " updated SIM-loaded rules=" + updatedUiccRules); + maybeUpdateRulesAndNotifyRegistrants(mUiccRules, updatedUiccRules); + } + + /** Called when UiccAccessRules has been loaded */ + public void onUiccAccessRulesLoaded() { + sendEmptyMessage(ACTION_UICC_ACCESS_RULES_LOADED); + } + private void handleClearUiccRules() { mClearUiccRulesUptimeMillis = CLEAR_UICC_RULE_NOT_SCHEDULED; removeMessages(ACTION_CLEAR_UICC_RULES); @@ -574,9 +590,11 @@ public class CarrierPrivilegesTracker extends Handler { // installed for a user it wasn't installed in before, which means there will be an // additional UID. getUidsForPackage(pkg.packageName, /* invalidateCache= */ true); - mLocalLog.log("Package added/replaced/changed:" - + " pkg=" + Rlog.pii(TAG, pkgName) - + " cert hashes=" + mInstalledPackageCerts.get(pkgName)); + if (VDBG) { + Rlog.d(TAG, "Package added/replaced/changed:" + + " pkg=" + Rlog.pii(TAG, pkgName) + + " cert hashes=" + mInstalledPackageCerts.get(pkgName)); + } maybeUpdatePrivilegedPackagesAndNotifyRegistrants(); } @@ -603,7 +621,9 @@ public class CarrierPrivilegesTracker extends Handler { return; } - mLocalLog.log("Package removed or disabled by user: pkg=" + Rlog.pii(TAG, pkgName)); + if (VDBG) { + Rlog.d(TAG, "Package removed or disabled by user: pkg=" + Rlog.pii(TAG, pkgName)); + } maybeUpdatePrivilegedPackagesAndNotifyRegistrants(); } diff --git a/src/java/com/android/internal/telephony/uicc/UiccProfile.java b/src/java/com/android/internal/telephony/uicc/UiccProfile.java index 864b3cdc2d..2809895309 100644 --- a/src/java/com/android/internal/telephony/uicc/UiccProfile.java +++ b/src/java/com/android/internal/telephony/uicc/UiccProfile.java @@ -53,6 +53,7 @@ import android.util.ArraySet; import com.android.internal.annotations.VisibleForTesting; import com.android.internal.telephony.CarrierAppUtils; +import com.android.internal.telephony.CarrierPrivilegesTracker; import com.android.internal.telephony.CommandsInterface; import com.android.internal.telephony.IccCard; import com.android.internal.telephony.IccCardConstants; @@ -238,6 +239,13 @@ public class UiccProfile extends IccCard { case EVENT_CARRIER_PRIVILEGES_LOADED: if (VDBG) log("handleMessage: EVENT_CARRIER_PRIVILEGES_LOADED"); + Phone phone = PhoneFactory.getPhone(mPhoneId); + if (phone != null) { + CarrierPrivilegesTracker cpt = phone.getCarrierPrivilegesTracker(); + if (cpt != null) { + cpt.onUiccAccessRulesLoaded(); + } + } onCarrierPrivilegesLoadedMessage(); updateExternalState(); break; |