Merge "Fix the work profile's deep link problem" into tm-dev
diff --git a/src/com/android/settings/applications/AppLocaleUtil.java b/src/com/android/settings/applications/AppLocaleUtil.java
index 3135796..8c3671e 100644
--- a/src/com/android/settings/applications/AppLocaleUtil.java
+++ b/src/com/android/settings/applications/AppLocaleUtil.java
@@ -49,17 +49,17 @@
boolean isDisallowedPackage = isDisallowedPackage(context, packageName);
boolean hasLauncherEntry = hasLauncherEntry(packageName, infos);
boolean isSignedWithPlatformKey = isSignedWithPlatformKey(context, packageName);
- boolean isAppLocaleSupported = isAppLocaleSupported(context, packageName);
+ boolean canDisplay = !isDisallowedPackage
+ && !isSignedWithPlatformKey
+ && hasLauncherEntry
+ && isAppLocaleSupported(context, packageName);
+
Log.i(TAG, "Can display preference - [" + packageName + "] :"
+ " isDisallowedPackage : " + isDisallowedPackage
+ " / isSignedWithPlatformKey : " + isSignedWithPlatformKey
+ " / hasLauncherEntry : " + hasLauncherEntry
- + " / isAppLocaleSupported : " + isAppLocaleSupported);
-
- return !isDisallowedPackage
- && !isSignedWithPlatformKey
- && hasLauncherEntry
- && isAppLocaleSupported;
+ + " / canDisplay : " + canDisplay);
+ return canDisplay;
}
private static boolean isDisallowedPackage(Context context, String packageName) {
diff --git a/src/com/android/settings/core/SettingsBaseActivity.java b/src/com/android/settings/core/SettingsBaseActivity.java
index 7842459..322b971 100644
--- a/src/com/android/settings/core/SettingsBaseActivity.java
+++ b/src/com/android/settings/core/SettingsBaseActivity.java
@@ -260,6 +260,9 @@
}
private int getTransitionType(Intent intent) {
+ if (intent == null) {
+ return TransitionType.TRANSITION_NONE;
+ }
return intent.getIntExtra(EXTRA_PAGE_TRANSITION_TYPE, TransitionType.TRANSITION_NONE);
}
}
diff --git a/src/com/android/settings/network/SubscriptionsPreferenceController.java b/src/com/android/settings/network/SubscriptionsPreferenceController.java
index 44ad411..7ba16e3 100644
--- a/src/com/android/settings/network/SubscriptionsPreferenceController.java
+++ b/src/com/android/settings/network/SubscriptionsPreferenceController.java
@@ -456,7 +456,11 @@
}
@Override
- public void onTelephonyDisplayInfoChanged(TelephonyDisplayInfo telephonyDisplayInfo) {
+ public void onTelephonyDisplayInfoChanged(int subId,
+ TelephonyDisplayInfo telephonyDisplayInfo) {
+ if (subId != mSubsPrefCtrlInjector.getDefaultDataSubscriptionId()) {
+ return;
+ }
mTelephonyDisplayInfo = telephonyDisplayInfo;
update();
}
diff --git a/src/com/android/settings/network/telephony/TelephonyDisplayInfoListener.java b/src/com/android/settings/network/telephony/TelephonyDisplayInfoListener.java
index 334da3c..57a012c 100644
--- a/src/com/android/settings/network/telephony/TelephonyDisplayInfoListener.java
+++ b/src/com/android/settings/network/telephony/TelephonyDisplayInfoListener.java
@@ -37,8 +37,9 @@
private TelephonyManager mBaseTelephonyManager;
private Callback mCallback;
private Map<Integer, PhoneStateListener> mListeners;
+ private Map<Integer, TelephonyDisplayInfo> mDisplayInfos;
- private TelephonyDisplayInfo mTelephonyDisplayInfo =
+ private static final TelephonyDisplayInfo mDefaultTelephonyDisplayInfo =
new TelephonyDisplayInfo(TelephonyManager.NETWORK_TYPE_UNKNOWN,
TelephonyDisplayInfo.OVERRIDE_NETWORK_TYPE_NONE);
/**
@@ -48,19 +49,20 @@
/**
* Used to notify TelephonyDisplayInfo change.
*/
- void onTelephonyDisplayInfoChanged(TelephonyDisplayInfo telephonyDisplayInfo);
+ void onTelephonyDisplayInfoChanged(int subId, TelephonyDisplayInfo telephonyDisplayInfo);
}
public TelephonyDisplayInfoListener(Context context, Callback callback) {
mBaseTelephonyManager = context.getSystemService(TelephonyManager.class);
mCallback = callback;
mListeners = new HashMap<>();
+ mDisplayInfos = new HashMap<>();
}
/**
* Get TelephonyDisplayInfo.
*/
- public TelephonyDisplayInfo getTelephonyDisplayInfo() {
- return mTelephonyDisplayInfo;
+ public TelephonyDisplayInfo getTelephonyDisplayInfo(int subId) {
+ return mDisplayInfos.get(subId);
}
/** Resumes listening telephony display info changes to the set of ids from the last call to
@@ -85,15 +87,17 @@
for (int idToRemove : Sets.difference(currentIds, ids)) {
stopListening(idToRemove);
mListeners.remove(idToRemove);
+ mDisplayInfos.remove(idToRemove);
}
for (int idToAdd : Sets.difference(ids, currentIds)) {
PhoneStateListener listener = new PhoneStateListener() {
@Override
public void onDisplayInfoChanged(TelephonyDisplayInfo telephonyDisplayInfo) {
- mTelephonyDisplayInfo = telephonyDisplayInfo;
- mCallback.onTelephonyDisplayInfoChanged(telephonyDisplayInfo);
+ mDisplayInfos.put(idToAdd, telephonyDisplayInfo);
+ mCallback.onTelephonyDisplayInfoChanged(idToAdd, telephonyDisplayInfo);
}
};
+ mDisplayInfos.put(idToAdd, mDefaultTelephonyDisplayInfo);
mListeners.put(idToAdd, listener);
startListening(idToAdd);
}
diff --git a/src/com/android/settings/network/telephony/ToggleSubscriptionDialogActivity.java b/src/com/android/settings/network/telephony/ToggleSubscriptionDialogActivity.java
index d348b24..f5f18b4 100644
--- a/src/com/android/settings/network/telephony/ToggleSubscriptionDialogActivity.java
+++ b/src/com/android/settings/network/telephony/ToggleSubscriptionDialogActivity.java
@@ -460,13 +460,10 @@
switchDialogMsg.append(
getString(R.string.sim_action_switch_sub_dialog_mep_text, displayName));
if (isRtlMode) {
- /* There are two lines of message in the dialog, and the RTL symbols must be added
- * before and after each sentence, so use the line break symbol to find the position.
+ /* The RTL symbols must be added before and after each sentence.
* (Each message are all with two line break symbols)
*/
switchDialogMsg.insert(0, RTL_MARK)
- .insert(switchDialogMsg.indexOf(LINE_BREAK) - LINE_BREAK_OFFSET_ONE, RTL_MARK)
- .insert(switchDialogMsg.indexOf(LINE_BREAK) + LINE_BREAK_OFFSET_TWO, RTL_MARK)
.insert(switchDialogMsg.length(), RTL_MARK);
}
ConfirmDialogFragment.show(
diff --git a/src/com/android/settings/network/telephony/gsm/AutoSelectPreferenceController.java b/src/com/android/settings/network/telephony/gsm/AutoSelectPreferenceController.java
index 58afeb0..ed8dc24 100644
--- a/src/com/android/settings/network/telephony/gsm/AutoSelectPreferenceController.java
+++ b/src/com/android/settings/network/telephony/gsm/AutoSelectPreferenceController.java
@@ -52,6 +52,8 @@
import java.util.List;
import java.util.concurrent.Future;
import java.util.concurrent.TimeUnit;
+import java.util.concurrent.atomic.AtomicBoolean;
+import java.util.concurrent.atomic.AtomicLong;
/**
* Preference controller for "Auto Select Network"
@@ -70,11 +72,17 @@
ProgressDialog mProgressDialog;
@VisibleForTesting
SwitchPreference mSwitchPreference;
+ private AtomicBoolean mUpdatingConfig;
+ private int mCacheOfModeStatus;
+ private AtomicLong mRecursiveUpdate;
public AutoSelectPreferenceController(Context context, String key) {
super(context, key);
mTelephonyManager = context.getSystemService(TelephonyManager.class);
mSubId = SubscriptionManager.INVALID_SUBSCRIPTION_ID;
+ mRecursiveUpdate = new AtomicLong();
+ mUpdatingConfig = new AtomicBoolean();
+ mCacheOfModeStatus = TelephonyManager.NETWORK_SELECTION_MODE_UNKNOWN;
mListeners = new ArrayList<>();
mUiHandler = new Handler(Looper.getMainLooper());
mAllowedNetworkTypesListener = new AllowedNetworkTypesListener(
@@ -88,7 +96,9 @@
displayPreference(mPreferenceScreen);
}
if (mSwitchPreference != null) {
+ mRecursiveUpdate.getAndIncrement();
updateState(mSwitchPreference);
+ mRecursiveUpdate.decrementAndGet();
}
}
@@ -118,8 +128,13 @@
@Override
public boolean isChecked() {
- return mTelephonyManager.getNetworkSelectionMode()
- == TelephonyManager.NETWORK_SELECTION_MODE_AUTO;
+ if (!mUpdatingConfig.get()) {
+ mCacheOfModeStatus = mTelephonyManager.getNetworkSelectionMode();
+ for (OnNetworkSelectModeListener lsn : mListeners) {
+ lsn.onNetworkSelectModeUpdated(mCacheOfModeStatus);
+ }
+ }
+ return mCacheOfModeStatus == TelephonyManager.NETWORK_SELECTION_MODE_AUTO;
}
@Override
@@ -147,6 +162,10 @@
@Override
public boolean setChecked(boolean isChecked) {
+ if (mRecursiveUpdate.get() != 0) {
+ // Changing from software are allowed and changing presentation only.
+ return true;
+ }
if (isChecked) {
setAutomaticSelectionMode();
} else {
@@ -171,18 +190,17 @@
}
return ThreadUtils.postOnBackgroundThread(() -> {
// set network selection mode in background
+ mUpdatingConfig.set(true);
mTelephonyManager.setNetworkSelectionModeAutomatic();
- final int mode = mTelephonyManager.getNetworkSelectionMode();
+ mUpdatingConfig.set(false);
//Update UI in UI thread
final long durationMillis = SystemClock.elapsedRealtime() - startMillis;
mUiHandler.postDelayed(() -> {
+ mRecursiveUpdate.getAndIncrement();
mSwitchPreference.setEnabled(true);
- mSwitchPreference.setChecked(
- mode == TelephonyManager.NETWORK_SELECTION_MODE_AUTO);
- for (OnNetworkSelectModeListener lsn : mListeners) {
- lsn.onNetworkSelectModeChanged();
- }
+ mSwitchPreference.setChecked(isChecked());
+ mRecursiveUpdate.decrementAndGet();
dismissProgressBar();
}, Math.max(MINIMUM_DIALOG_TIME_MILLIS - durationMillis, 0));
});
@@ -232,11 +250,11 @@
}
/**
- * Callback when network select mode is changed
+ * Callback when network select mode might get updated
*
* @see TelephonyManager#getNetworkSelectionMode()
*/
public interface OnNetworkSelectModeListener {
- void onNetworkSelectModeChanged();
+ void onNetworkSelectModeUpdated(int mode);
}
}
diff --git a/src/com/android/settings/network/telephony/gsm/OpenNetworkSelectPagePreferenceController.java b/src/com/android/settings/network/telephony/gsm/OpenNetworkSelectPagePreferenceController.java
index 54f5ce1..4c5dd95 100644
--- a/src/com/android/settings/network/telephony/gsm/OpenNetworkSelectPagePreferenceController.java
+++ b/src/com/android/settings/network/telephony/gsm/OpenNetworkSelectPagePreferenceController.java
@@ -48,11 +48,13 @@
private Preference mPreference;
private PreferenceScreen mPreferenceScreen;
private AllowedNetworkTypesListener mAllowedNetworkTypesListener;
+ private int mCacheOfModeStatus;
public OpenNetworkSelectPagePreferenceController(Context context, String key) {
super(context, key);
mTelephonyManager = context.getSystemService(TelephonyManager.class);
mSubId = SubscriptionManager.INVALID_SUBSCRIPTION_ID;
+ mCacheOfModeStatus = TelephonyManager.NETWORK_SELECTION_MODE_UNKNOWN;
mAllowedNetworkTypesListener = new AllowedNetworkTypesListener(
context.getMainExecutor());
mAllowedNetworkTypesListener.setAllowedNetworkTypesListener(
@@ -96,7 +98,7 @@
@Override
public void updateState(Preference preference) {
super.updateState(preference);
- preference.setEnabled(mTelephonyManager.getNetworkSelectionMode()
+ preference.setEnabled(mCacheOfModeStatus
!= TelephonyManager.NETWORK_SELECTION_MODE_AUTO);
Intent intent = new Intent();
@@ -125,7 +127,10 @@
}
@Override
- public void onNetworkSelectModeChanged() {
- updateState(mPreference);
+ public void onNetworkSelectModeUpdated(int mode) {
+ mCacheOfModeStatus = mode;
+ if (mPreference != null) {
+ updateState(mPreference);
+ }
}
}
diff --git a/tests/unit/src/com/android/settings/network/SubscriptionsPreferenceControllerTest.java b/tests/unit/src/com/android/settings/network/SubscriptionsPreferenceControllerTest.java
index 3bcfcb4..8ebd2b5 100644
--- a/tests/unit/src/com/android/settings/network/SubscriptionsPreferenceControllerTest.java
+++ b/tests/unit/src/com/android/settings/network/SubscriptionsPreferenceControllerTest.java
@@ -364,7 +364,8 @@
mController.onResume();
mController.displayPreference(mPreferenceScreen);
- mController.onTelephonyDisplayInfoChanged(telephonyDisplayInfo);
+ mController.onTelephonyDisplayInfoChanged(sub.get(0).getSubscriptionId(),
+ telephonyDisplayInfo);
assertThat(mPreferenceCategory.getPreference(0).getSummary()).isEqualTo(expectedSummary);
}
@@ -388,7 +389,8 @@
mController.onResume();
mController.displayPreference(mPreferenceScreen);
- mController.onTelephonyDisplayInfoChanged(telephonyDisplayInfo);
+ mController.onTelephonyDisplayInfoChanged(sub.get(0).getSubscriptionId(),
+ telephonyDisplayInfo);
assertThat(mPreferenceCategory.getPreference(0).getSummary()).isEqualTo(expectedSummary);
}
@@ -414,7 +416,8 @@
mController.onResume();
mController.displayPreference(mPreferenceScreen);
- mController.onTelephonyDisplayInfoChanged(telephonyDisplayInfo);
+ mController.onTelephonyDisplayInfoChanged(sub.get(0).getSubscriptionId(),
+ telephonyDisplayInfo);
assertThat(mPreferenceCategory.getPreference(0).getSummary()).isEqualTo(expectedSummary);
}
diff --git a/tests/unit/src/com/android/settings/network/telephony/gsm/OpenNetworkSelectPagePreferenceControllerTest.java b/tests/unit/src/com/android/settings/network/telephony/gsm/OpenNetworkSelectPagePreferenceControllerTest.java
index f7e3111..53ae1b9 100644
--- a/tests/unit/src/com/android/settings/network/telephony/gsm/OpenNetworkSelectPagePreferenceControllerTest.java
+++ b/tests/unit/src/com/android/settings/network/telephony/gsm/OpenNetworkSelectPagePreferenceControllerTest.java
@@ -93,15 +93,18 @@
mPreference = new Preference(mContext);
mController = new OpenNetworkSelectPagePreferenceController(mContext,
- "open_network_select");
+ "open_network_select") {
+ @Override
+ public void updateState(Preference preference) {
+ super.updateState(mPreference);
+ }
+ };
mController.init(mLifecycle, SUB_ID);
}
@Test
public void updateState_modeAuto_disabled() {
- when(mTelephonyManager.getNetworkSelectionMode()).thenReturn(
- TelephonyManager.NETWORK_SELECTION_MODE_AUTO);
-
+ mController.onNetworkSelectModeUpdated(TelephonyManager.NETWORK_SELECTION_MODE_AUTO);
mController.updateState(mPreference);
assertThat(mPreference.isEnabled()).isFalse();