"Add logic to update the notification whenever the satellite availaibility changes."
This reverts commit 30e3e06f3e18201a1ca097b9bad8d5c860d2a1b7.
Reason for revert: fix bug: b/380597255
Test: SatelliteAccessControllerTest
Change-Id: I1a9fe93a1b7cedd11be935f3235327dde3433681
diff --git a/src/com/android/phone/satellite/accesscontrol/SatelliteAccessController.java b/src/com/android/phone/satellite/accesscontrol/SatelliteAccessController.java
index fa56cd0..f295575 100644
--- a/src/com/android/phone/satellite/accesscontrol/SatelliteAccessController.java
+++ b/src/com/android/phone/satellite/accesscontrol/SatelliteAccessController.java
@@ -184,7 +184,8 @@
private static final String KEY_AVAILABLE_NOTIFICATION_SHOWN = "available_notification_shown";
private static final String KEY_UNAVAILABLE_NOTIFICATION_SHOWN =
"unavailable_notification_shown";
- private static final String NOTIFICATION_TAG = "SatelliteAccessController";
+ private static final String AVAILABLE_NOTIFICATION_TAG = "available_notification_tag";
+ private static final String UNAVAILABLE_NOTIFICATION_TAG = "unavailable_notification_tag";
private static final int NOTIFICATION_ID = 1;
private static final String NOTIFICATION_CHANNEL = "satelliteChannel";
private static final String NOTIFICATION_CHANNEL_ID = "satellite";
@@ -471,6 +472,7 @@
mControllerMetricsStats = ControllerMetricsStats.getInstance();
mAccessControllerMetricsStats = AccessControllerMetricsStats.getInstance();
initSharedPreferences(context);
+ checkSharedPreference();
loadOverlayConfigs(context);
// loadConfigUpdaterConfigs has to be called after loadOverlayConfigs
// since config updater config has higher priority and thus can override overlay config
@@ -1500,44 +1502,59 @@
}
if (mSatelliteDisallowedReasons.isEmpty()) {
- if (!hasAlreadyNotified(KEY_AVAILABLE_NOTIFICATION_SHOWN, 0)) {
+ mNotificationManager.cancel(UNAVAILABLE_NOTIFICATION_TAG, NOTIFICATION_ID);
+ if (!hasAlreadyNotified(KEY_AVAILABLE_NOTIFICATION_SHOWN)) {
mNotificationManager.notifyAsUser(
- NOTIFICATION_TAG,
+ AVAILABLE_NOTIFICATION_TAG,
NOTIFICATION_ID,
mSatelliteAvailableNotification,
UserHandle.ALL
);
- markAsNotified(KEY_AVAILABLE_NOTIFICATION_SHOWN, 0);
+ markAsNotified(KEY_AVAILABLE_NOTIFICATION_SHOWN, true);
+ markAsNotified(KEY_UNAVAILABLE_NOTIFICATION_SHOWN, false);
}
} else {
+ mNotificationManager.cancel(AVAILABLE_NOTIFICATION_TAG, NOTIFICATION_ID);
for (Integer reason : mSatelliteDisallowedReasons) {
- if (!hasAlreadyNotified(KEY_UNAVAILABLE_NOTIFICATION_SHOWN, reason)) {
+ if (!hasAlreadyNotified(KEY_UNAVAILABLE_NOTIFICATION_SHOWN)) {
mNotificationManager.notifyAsUser(
- NOTIFICATION_TAG,
+ UNAVAILABLE_NOTIFICATION_TAG,
NOTIFICATION_ID,
mSatelliteUnAvailableNotifications.get(reason),
UserHandle.ALL
);
- markAsNotified(KEY_UNAVAILABLE_NOTIFICATION_SHOWN, reason);
+ markAsNotified(KEY_UNAVAILABLE_NOTIFICATION_SHOWN, true);
+ markAsNotified(KEY_AVAILABLE_NOTIFICATION_SHOWN, false);
break;
}
}
}
}
- private boolean hasAlreadyNotified(String key, int reason) {
- Set<String> reasons = mSharedPreferences.getStringSet(key, new HashSet<>());
- return reasons.contains(String.valueOf(reason));
+ private boolean hasAlreadyNotified(String key) {
+ return mSharedPreferences.getBoolean(key, false);
}
- private void markAsNotified(String key, int reason) {
- Set<String> reasons = mSharedPreferences.getStringSet(key, new HashSet<>());
- if (!reasons.contains(String.valueOf(reason))) {
- reasons.add(String.valueOf(reason));
- SharedPreferences.Editor editor = mSharedPreferences.edit();
- editor.putStringSet(key, reasons);
- editor.apply();
- }
+ private void markAsNotified(String key, boolean notified) {
+ mSharedPreferences.edit().putBoolean(key, notified).apply();
+ }
+
+ private void checkSharedPreference() {
+ String[] keys = {
+ CONFIG_UPDATER_SATELLITE_IS_ALLOW_ACCESS_CONTROL_KEY,
+ LATEST_SATELLITE_COMMUNICATION_ALLOWED_KEY,
+ KEY_AVAILABLE_NOTIFICATION_SHOWN,
+ KEY_UNAVAILABLE_NOTIFICATION_SHOWN
+ };
+ // An Exception may occur if the initial value is set to HashSet while attempting to obtain
+ // a boolean value. If an exception occurs, the SharedPreferences will be removed with Keys.
+ Arrays.stream(keys).forEach(key -> {
+ try {
+ mSharedPreferences.getBoolean(key, false);
+ } catch (ClassCastException e) {
+ mSharedPreferences.edit().remove(key).apply();
+ }
+ });
}
/**
diff --git a/tests/src/com/android/phone/satellite/accesscontrol/SatelliteAccessControllerTest.java b/tests/src/com/android/phone/satellite/accesscontrol/SatelliteAccessControllerTest.java
index a47095d..0d0899e 100644
--- a/tests/src/com/android/phone/satellite/accesscontrol/SatelliteAccessControllerTest.java
+++ b/tests/src/com/android/phone/satellite/accesscontrol/SatelliteAccessControllerTest.java
@@ -65,6 +65,7 @@
import static org.mockito.Mockito.doAnswer;
import static org.mockito.Mockito.doNothing;
import static org.mockito.Mockito.doReturn;
+import static org.mockito.Mockito.doThrow;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.never;
import static org.mockito.Mockito.spy;
@@ -1476,7 +1477,7 @@
// These APIs are executed during loadRemoteConfigs
verify(mMockSharedPreferences, times(1)).getStringSet(anyString(), any());
- verify(mMockSharedPreferences, times(1)).getBoolean(anyString(), anyBoolean());
+ verify(mMockSharedPreferences, times(5)).getBoolean(anyString(), anyBoolean());
// satelliteConfig is null
SatelliteConfigParser spyConfigParser =
@@ -2040,6 +2041,20 @@
mSatelliteAccessControllerUT.resetSatelliteAccessConfigMap();
}
+ @Test
+ public void testCheckSharedPreferenceException() {
+ doReturn(mMockSharedPreferencesEditor).when(mMockSharedPreferencesEditor)
+ .remove(anyString());
+ doThrow(new ClassCastException()).when(mMockSharedPreferences)
+ .getBoolean(anyString(), eq(false));
+
+ mSatelliteAccessControllerUT = new TestSatelliteAccessController(mMockContext,
+ mMockFeatureFlags, mTestableLooper.getLooper(), mMockLocationManager,
+ mMockTelecomManager, mMockSatelliteOnDeviceAccessController, mMockSatS2File);
+
+ verify(mMockSharedPreferencesEditor, times(4)).remove(anyString());
+ }
+
private void sendSatelliteCommunicationAllowedEvent() {
Pair<Integer, ResultReceiver> requestPair =
new Pair<>(DEFAULT_SUBSCRIPTION_ID,