Merge "Add edu for apps being stopped when PS is locked" into main
diff --git a/res/values/strings.xml b/res/values/strings.xml
index e6d7f01..de34d8d 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -2366,6 +2366,8 @@
<!-- Wifi Network Details -->
<!-- Wifi details title-->
<string name="wifi_details_title">Network details</string>
+ <!-- WEP network less secure warning title -->
+ <string name="wep_network_less_secure_warning_title">This network uses an older security protocol called WEP, which is less secure</string>
<!-- Wifi details preference title to display router IP subnet mask -->
<string name="wifi_details_subnet_mask">Subnet mask</string>
<!-- Server name title-->
diff --git a/src/com/android/settings/SettingsInitialize.java b/src/com/android/settings/SettingsInitialize.java
index 297bad7..4887e26 100644
--- a/src/com/android/settings/SettingsInitialize.java
+++ b/src/com/android/settings/SettingsInitialize.java
@@ -32,14 +32,12 @@
import android.content.pm.ShortcutInfo;
import android.content.pm.ShortcutManager;
import android.content.pm.UserInfo;
-import android.os.Flags;
import android.os.UserHandle;
import android.os.UserManager;
import android.util.Log;
import androidx.annotation.VisibleForTesting;
-import com.android.settings.Settings.CreateShortcutActivity;
import com.android.settings.activityembedding.ActivityEmbeddingUtils;
import com.android.settings.homepage.DeepLinkHomepageActivity;
import com.android.settings.search.SearchStateReceiver;
@@ -49,7 +47,7 @@
import java.util.List;
/**
- * Listens to {@link Intent.ACTION_PRE_BOOT_COMPLETED} and {@link Intent.ACTION_USER_INITIALIZED}
+ * Listens to {@link Intent.ACTION_PRE_BOOT_COMPLETED} and {@link Intent.ACTION_USER_INITIALIZE}
* performs setup steps for a managed profile (disables the launcher icon of the Settings app,
* adds cross-profile intent filters for the appropriate Settings activities), disables the
* webview setting for non-admin users, updates the intent flags for any existing shortcuts and
@@ -68,7 +66,6 @@
final PackageManager pm = context.getPackageManager();
managedProfileSetup(context, pm, broadcast, userInfo);
cloneProfileSetup(context, pm, userInfo);
- privateProfileSetup(context, pm, userInfo);
webviewSettingSetup(context, pm, userInfo);
ThreadUtils.postOnBackgroundThread(() -> refreshExistingShortcuts(context));
enableTwoPaneDeepLinkActivityIfNecessary(pm, context);
@@ -106,7 +103,7 @@
}
}
- disableComponentsToHideSettings(context, pm);
+ Utils.disableComponentsToHideSettings(context, pm);
}
private void cloneProfileSetup(Context context, PackageManager pm, UserInfo userInfo) {
@@ -114,31 +111,7 @@
return;
}
- disableComponentsToHideSettings(context, pm);
- }
-
- private void privateProfileSetup(Context context, PackageManager pm, UserInfo userInfo) {
- if (Flags.allowPrivateProfile()
- && android.multiuser.Flags.enablePrivateSpaceFeatures()) {
- if (userInfo == null || !userInfo.isPrivateProfile()) {
- return;
- }
-
- disableComponentsToHideSettings(context, pm);
- }
- }
-
- private void disableComponentsToHideSettings(Context context, PackageManager pm) {
- // Disable settings app launcher icon
- disableComponent(pm, new ComponentName(context, Settings.class));
-
- //Disable Shortcut picker
- disableComponent(pm, new ComponentName(context, CreateShortcutActivity.class));
- }
-
- private void disableComponent(PackageManager pm, ComponentName componentName) {
- pm.setComponentEnabledSetting(componentName,
- PackageManager.COMPONENT_ENABLED_STATE_DISABLED, PackageManager.DONT_KILL_APP);
+ Utils.disableComponentsToHideSettings(context, pm);
}
// Disable WebView Setting if the current user is not an admin
diff --git a/src/com/android/settings/Utils.java b/src/com/android/settings/Utils.java
index 145f3a4..7ed6ba0 100644
--- a/src/com/android/settings/Utils.java
+++ b/src/com/android/settings/Utils.java
@@ -1464,4 +1464,22 @@
}
};
}
+
+ /**
+ * Disables the launcher icon and shortcut picker component for the Settings app corresponding
+ * to the context user.
+ */
+ public static void disableComponentsToHideSettings(@NonNull Context context,
+ @NonNull PackageManager pm) {
+ // Disable settings app launcher icon
+ disableComponent(pm, new ComponentName(context, Settings.class));
+
+ //Disable Shortcut picker
+ disableComponent(pm, new ComponentName(context, Settings.CreateShortcutActivity.class));
+ }
+
+ private static void disableComponent(PackageManager pm, ComponentName componentName) {
+ pm.setComponentEnabledSetting(componentName,
+ PackageManager.COMPONENT_ENABLED_STATE_DISABLED, PackageManager.DONT_KILL_APP);
+ }
}
diff --git a/src/com/android/settings/network/telephony/NetworkSelectSettings.java b/src/com/android/settings/network/telephony/NetworkSelectSettings.java
index 9455b70..a16f4b5 100644
--- a/src/com/android/settings/network/telephony/NetworkSelectSettings.java
+++ b/src/com/android/settings/network/telephony/NetworkSelectSettings.java
@@ -56,6 +56,8 @@
import kotlin.Unit;
+import kotlinx.coroutines.Job;
+
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
@@ -96,6 +98,8 @@
private AtomicBoolean mShouldFilterOutSatellitePlmn = new AtomicBoolean();
private NetworkScanRepository mNetworkScanRepository;
+ @Nullable
+ private Job mNetworkScanJob = null;
private NetworkSelectRepository mNetworkSelectRepository;
@@ -213,13 +217,14 @@
private void launchNetworkScan() {
setProgressBarVisible(true);
- mNetworkScanRepository.launchNetworkScan(getViewLifecycleOwner(), (networkScanResult) -> {
- if (isPreferenceScreenEnabled()) {
- scanResultHandler(networkScanResult);
- }
+ mNetworkScanJob = mNetworkScanRepository.launchNetworkScan(getViewLifecycleOwner(),
+ (networkScanResult) -> {
+ if (isPreferenceScreenEnabled()) {
+ scanResultHandler(networkScanResult);
+ }
- return Unit.INSTANCE;
- });
+ return Unit.INSTANCE;
+ });
}
/**
@@ -245,6 +250,12 @@
return false;
}
+ // Need stop network scan before manual select network.
+ if (mNetworkScanJob != null) {
+ mNetworkScanJob.cancel(null);
+ mNetworkScanJob = null;
+ }
+
// Refresh the last selected item in case users reselect network.
clearPreferenceSummary();
if (mSelectedPreference != null) {
diff --git a/src/com/android/settings/network/telephony/scan/NetworkScanRepository.kt b/src/com/android/settings/network/telephony/scan/NetworkScanRepository.kt
index 4ae5842..0e15033 100644
--- a/src/com/android/settings/network/telephony/scan/NetworkScanRepository.kt
+++ b/src/com/android/settings/network/telephony/scan/NetworkScanRepository.kt
@@ -52,9 +52,8 @@
private val telephonyManager = context.telephonyManager(subId)
/** TODO: Move this to UI layer, when UI layer migrated to Kotlin. */
- fun launchNetworkScan(lifecycleOwner: LifecycleOwner, onResult: (NetworkScanResult) -> Unit) {
+ fun launchNetworkScan(lifecycleOwner: LifecycleOwner, onResult: (NetworkScanResult) -> Unit) =
networkScanFlow().collectLatestWithLifecycle(lifecycleOwner, action = onResult)
- }
data class CellInfoScanKey(
val title: String?,
@@ -101,7 +100,10 @@
callback,
)
- awaitClose { networkScan.stopScan() }
+ awaitClose {
+ networkScan.stopScan()
+ Log.d(TAG, "network scan stopped")
+ }
}.conflate().onEach { Log.d(TAG, "networkScanFlow: $it") }.flowOn(Dispatchers.Default)
/** Create network scan for allowed network types. */
diff --git a/src/com/android/settings/privatespace/PrivateSpaceMaintainer.java b/src/com/android/settings/privatespace/PrivateSpaceMaintainer.java
index bdbe993..6b7a347 100644
--- a/src/com/android/settings/privatespace/PrivateSpaceMaintainer.java
+++ b/src/com/android/settings/privatespace/PrivateSpaceMaintainer.java
@@ -31,6 +31,7 @@
import android.content.Intent;
import android.content.IntentFilter;
import android.content.IntentSender;
+import android.content.pm.PackageManager;
import android.content.pm.UserInfo;
import android.os.Flags;
import android.os.UserHandle;
@@ -44,6 +45,7 @@
import androidx.annotation.VisibleForTesting;
import com.android.internal.annotations.GuardedBy;
+import com.android.settings.Utils;
import java.util.List;
@@ -129,6 +131,7 @@
resetPrivateSpaceSettings();
setUserSetupComplete();
setSkipFirstUseHints();
+ disableComponentsToHidePrivateSpaceSettings();
}
return true;
}
@@ -357,6 +360,24 @@
}
/**
+ * Disables the launcher icon and shortcut picker component for the Settings app instance
+ * inside the private space
+ */
+ @GuardedBy("this")
+ private void disableComponentsToHidePrivateSpaceSettings() {
+ if (mUserHandle == null) {
+ Log.e(TAG, "User handle null while hiding settings icon");
+ return;
+ }
+
+ Context privateSpaceUserContext = mContext.createContextAsUser(mUserHandle, /* flags */ 0);
+ PackageManager packageManager = privateSpaceUserContext.getPackageManager();
+
+ Log.d(TAG, "Hiding settings app launcher icon for " + mUserHandle);
+ Utils.disableComponentsToHideSettings(privateSpaceUserContext, packageManager);
+ }
+
+ /**
* Sets the SKIP_FIRST_USE_HINTS for private profile so that the first launch of an app in
* private space will not display introductory hints.
*/
diff --git a/tests/unit/src/com/android/settings/privatespace/PrivateSpaceMaintainerTest.java b/tests/unit/src/com/android/settings/privatespace/PrivateSpaceMaintainerTest.java
index 36edfa0..2463d4c 100644
--- a/tests/unit/src/com/android/settings/privatespace/PrivateSpaceMaintainerTest.java
+++ b/tests/unit/src/com/android/settings/privatespace/PrivateSpaceMaintainerTest.java
@@ -33,8 +33,10 @@
import android.app.ActivityManager;
import android.app.IActivityManager;
+import android.content.ComponentName;
import android.content.ContentResolver;
import android.content.Context;
+import android.content.pm.PackageManager;
import android.os.Flags;
import android.os.RemoteException;
import android.os.UserManager;
@@ -433,6 +435,36 @@
}
@Test
+ public void createPrivateSpace_psDoesNotExist_setsPrivateSpaceSettingsComponentDisabled() {
+ mSetFlagsRule.enableFlags(
+ android.multiuser.Flags.FLAG_ENABLE_PRIVATE_SPACE_FEATURES);
+ assumeTrue(mContext.getSystemService(UserManager.class).canAddPrivateProfile());
+ PrivateSpaceMaintainer privateSpaceMaintainer =
+ PrivateSpaceMaintainer.getInstance(mContext);
+ privateSpaceMaintainer.createPrivateSpace();
+ assertThat(privateSpaceMaintainer.getPrivateProfileHandle()).isNotNull();
+ Context privateSpaceUserContext = mContext.createContextAsUser(
+ privateSpaceMaintainer.getPrivateProfileHandle(),
+ /* flags */ 0);
+
+ // Assert that private space settings launcher app icon is disabled
+ ComponentName settingsComponentName = new ComponentName(privateSpaceUserContext,
+ com.android.settings.Settings.class);
+ int settingsComponentEnabledSetting = privateSpaceUserContext.getPackageManager()
+ .getComponentEnabledSetting(settingsComponentName);
+ assertThat(settingsComponentEnabledSetting)
+ .isEqualTo(PackageManager.COMPONENT_ENABLED_STATE_DISABLED);
+
+ // Assert that private space settings create shortcut activity is disabled
+ ComponentName shortcutPickerComponentName = new ComponentName(privateSpaceUserContext,
+ com.android.settings.Settings.CreateShortcutActivity.class);
+ int settingsShortcutPickerEnabledSetting = privateSpaceUserContext.getPackageManager()
+ .getComponentEnabledSetting(shortcutPickerComponentName);
+ assertThat(settingsShortcutPickerEnabledSetting)
+ .isEqualTo(PackageManager.COMPONENT_ENABLED_STATE_DISABLED);
+ }
+
+ @Test
public void createPrivateSpace_pSExists_doesNotChangeSkipFirstUseHints() {
mSetFlagsRule.enableFlags(
android.multiuser.Flags.FLAG_ENABLE_PRIVATE_SPACE_FEATURES);