Merge "Adjust padding on SIM onboarding screens" into main
diff --git a/src/com/android/settings/network/MobileNetworkSummaryStatus.java b/src/com/android/settings/network/MobileNetworkSummaryStatus.java
deleted file mode 100644
index b22e48e..0000000
--- a/src/com/android/settings/network/MobileNetworkSummaryStatus.java
+++ /dev/null
@@ -1,176 +0,0 @@
-/*
- * Copyright (C) 2021 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.settings.network;
-
-import android.content.Context;
-import android.telephony.SubscriptionManager;
-import android.util.Log;
-
-import com.android.settings.network.SubscriptionUtil;
-import com.android.settings.network.helper.SelectableSubscriptions;
-import com.android.settings.network.helper.SubscriptionAnnotation;
-import com.android.settings.network.helper.SubscriptionGrouping;
-import com.android.settings.network.telephony.MobileNetworkUtils;
-import com.android.settingslib.utils.ThreadUtils;
-
-import java.util.List;
-import java.util.Map;
-import java.util.concurrent.Future;
-import java.util.function.Consumer;
-import java.util.stream.Collectors;
-
-/**
- * This one keeps the information required by MobileNetworkSummaryController.
- */
-public class MobileNetworkSummaryStatus {
- private static final String LOG_TAG = "MobileNetworkSummaryStatus";
-
- private Future<Map<Integer, CharSequence>> mUniqueNameMapping;
- private Map<Integer, CharSequence> mUniqueNameMappingCache;
-
- private Future<Boolean> mIsEuiccConfiguable;
- private Boolean mIsEuiccConfiguableCache;
-
- private Future<Boolean> mIsPsimDisableSupported;
- private Boolean mIsPsimDisableSupportedCache;
-
- private List<SubscriptionAnnotation> mSubscriptionList;
-
- private boolean mDisableReEntranceUpdate;
-
- // Constructor
- public MobileNetworkSummaryStatus() {}
-
- /**
- * Update the status
- * @param context
- * @param andThen Consumer which always performed by the end of #update()
- * and avoid from repeated queries.
- */
- public void update(Context context, Consumer<MobileNetworkSummaryStatus> andThen) {
- if (mDisableReEntranceUpdate) {
- Log.d(LOG_TAG, "network summary query ignored");
- if (andThen != null) {
- andThen.accept(this);
- }
- return;
- }
- mDisableReEntranceUpdate = true;
- Log.d(LOG_TAG, "network summary query");
-
- // Query Euicc in background
- mIsEuiccConfiguable = (Future<Boolean>)
- ThreadUtils.postOnBackgroundThread(() -> isEuiccConfiguable(context));
-
- // Query display name in background
- mUniqueNameMapping = (Future<Map<Integer, CharSequence>>)
- ThreadUtils.postOnBackgroundThread(() -> getUniqueNameForDisplay(context));
-
- // Query support status of pSIM disable feature
- mIsPsimDisableSupported = (Future<Boolean>) ThreadUtils.postOnBackgroundThread(()
- -> isPhysicalSimDisableSupported(context));
-
- // Query subscription
- mSubscriptionList = getSubscriptions(context);
-
- if (andThen != null) {
- andThen.accept(this);
- }
- mDisableReEntranceUpdate = false;
- }
-
- /**
- * Get the subscription information
- * @return a list of SubscriptionAnnotation
- */
- public List<SubscriptionAnnotation> getSubscriptionList() {
- return mSubscriptionList;
- }
-
- /**
- * Get unique display name for a specific subscription
- * @param subscriptionId subscription ID
- * @return display name for that subscription
- */
- public CharSequence getDisplayName(int subscriptionId) {
- if (mUniqueNameMapping != null) {
- try {
- mUniqueNameMappingCache = mUniqueNameMapping.get();
- } catch (Exception exception) {
- Log.w(LOG_TAG, "Fail to get display names", exception);
- }
- mUniqueNameMapping = null;
- }
- if (mUniqueNameMappingCache == null) {
- return null;
- }
- return mUniqueNameMappingCache.get(subscriptionId);
- }
-
- // Check if Euicc is currently available
- public boolean isEuiccConfigSupport() {
- if (mIsEuiccConfiguable != null) {
- try {
- mIsEuiccConfiguableCache = mIsEuiccConfiguable.get();
- } catch (Exception exception) {
- Log.w(LOG_TAG, "Fail to get euicc config status", exception);
- }
- mIsEuiccConfiguable = null;
- }
- return (mIsEuiccConfiguableCache == null) ?
- false : mIsEuiccConfiguableCache.booleanValue();
- }
-
- // Check if disable physical SIM is supported
- public boolean isPhysicalSimDisableSupport() {
- if (mIsPsimDisableSupported != null) {
- try {
- mIsPsimDisableSupportedCache = mIsPsimDisableSupported.get();
- } catch (Exception exception) {
- Log.w(LOG_TAG, "Fail to get pSIM disable support", exception);
- }
- mIsPsimDisableSupported = null;
- }
- return (mIsPsimDisableSupportedCache == null) ?
- false : mIsPsimDisableSupportedCache.booleanValue();
- }
-
- private List<SubscriptionAnnotation> getSubscriptions(Context context) {
- return (new SelectableSubscriptions(context, true))
-
- // To maintain the consistency with SubscriptionUtil#getAvailableSubscriptions().
- .addFinisher(new SubscriptionGrouping())
-
- .call()
- .stream()
- .filter(SubscriptionAnnotation::isDisplayAllowed)
- .collect(Collectors.toList());
- }
-
- private Map<Integer, CharSequence> getUniqueNameForDisplay(Context context) {
- return SubscriptionUtil.getUniqueSubscriptionDisplayNames(context);
- }
-
- private boolean isPhysicalSimDisableSupported(Context context) {
- SubscriptionManager subMgr = context.getSystemService(SubscriptionManager.class);
- return SubscriptionUtil.showToggleForPhysicalSim(subMgr);
- }
-
- private boolean isEuiccConfiguable(Context context) {
- return MobileNetworkUtils.showEuiccSettingsDetecting(context);
- }
-}
diff --git a/src/com/android/settings/network/helper/SubscriptionGrouping.java b/src/com/android/settings/network/helper/SubscriptionGrouping.java
deleted file mode 100644
index c4e0fd7..0000000
--- a/src/com/android/settings/network/helper/SubscriptionGrouping.java
+++ /dev/null
@@ -1,100 +0,0 @@
-/*
- * Copyright (C) 2021 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package com.android.settings.network.helper;
-
-import android.os.ParcelUuid;
-import android.util.Log;
-
-import androidx.annotation.Keep;
-import androidx.annotation.VisibleForTesting;
-
-import com.android.settings.network.helper.SubscriptionAnnotation;
-
-import java.util.Collections;
-import java.util.Comparator;
-import java.util.List;
-import java.util.Map;
-import java.util.Objects;
-import java.util.function.UnaryOperator;
-import java.util.stream.Collectors;
-
-/**
- * A UnaryOperator for converting a list of SubscriptionAnnotation into
- * another list of SubscriptionAnnotation based on group UUID.
- * Only one SubscriptionAnnotation with entries with same (valid) group UUID would be kept.
- *
- * Here's an example when applying this operation as a finisher of SelectableSubscriptions:
- *
- * Callable<SubscriptionAnnotation> callable = (new SelectableSubscriptions(context, true))
- * .addFinisher(new SubscriptionGrouping());
- *
- * List<SubscriptionAnnotation> result = ExecutorService.submit(callable).get()
- */
-public class SubscriptionGrouping
- implements UnaryOperator<List<SubscriptionAnnotation>> {
- private static final String LOG_TAG = "SubscriptionGrouping";
-
- // implementation of UnaryOperator
- public List<SubscriptionAnnotation> apply(List<SubscriptionAnnotation> listOfSubscriptions) {
- Log.d(LOG_TAG, "Grouping " + listOfSubscriptions);
-
- // group by GUID
- Map<ParcelUuid, List<SubscriptionAnnotation>> groupedSubInfoList =
- listOfSubscriptions.stream()
- .filter(Objects::nonNull)
- .collect(Collectors.groupingBy(subAnno -> getGroupUuid(subAnno)));
-
- // select best one from subscription(s) within the same group
- groupedSubInfoList.replaceAll((uuid, annoList) -> {
- if ((uuid == SubscriptionAnnotation.EMPTY_UUID) || (annoList.size() <= 1)) {
- return annoList;
- }
- return Collections.singletonList(selectBestFromList(annoList));
- });
-
- // build a stream of subscriptions
- return groupedSubInfoList.values()
- .stream().flatMap(List::stream).collect(Collectors.toList());
- }
-
- @Keep
- @VisibleForTesting
- protected ParcelUuid getGroupUuid(SubscriptionAnnotation subAnno) {
- ParcelUuid groupUuid = subAnno.getGroupUuid();
- return (groupUuid == null) ? SubscriptionAnnotation.EMPTY_UUID : groupUuid;
- }
-
- protected SubscriptionAnnotation selectBestFromList(List<SubscriptionAnnotation> annoList) {
- Comparator<SubscriptionAnnotation> annoSelector = (anno1, anno2) -> {
- if (anno1.isDisplayAllowed() != anno2.isDisplayAllowed()) {
- return anno1.isDisplayAllowed() ? -1 : 1;
- }
- if (anno1.isActive() != anno2.isActive()) {
- return anno1.isActive() ? -1 : 1;
- }
- if (anno1.isExisted() != anno2.isExisted()) {
- return anno1.isExisted() ? -1 : 1;
- }
- return 0;
- };
- annoSelector = annoSelector
- // eSIM in front of pSIM
- .thenComparingInt(anno -> -anno.getType())
- // maintain the ordering given within constructor
- .thenComparingInt(anno -> annoList.indexOf(anno));
- return annoList.stream().sorted(annoSelector).findFirst().orElse(null);
- }
-}
diff --git a/src/com/android/settings/wifi/WifiDialog2.kt b/src/com/android/settings/wifi/WifiDialog2.kt
index a0d215a..2b89e4b 100644
--- a/src/com/android/settings/wifi/WifiDialog2.kt
+++ b/src/com/android/settings/wifi/WifiDialog2.kt
@@ -44,6 +44,7 @@
@StyleRes style: Int = 0,
private val hideSubmitButton: Boolean = mode == WifiConfigUiBase2.MODE_VIEW,
private val hideMeteredAndPrivacy: Boolean = false,
+ private val isSysUiCaller: Boolean = false,
) : AlertDialog(context, style), WifiConfigUiBase2, DialogInterface.OnClickListener {
/**
* Host UI component of WifiDialog2 can receive callbacks by this interface.
@@ -71,7 +72,9 @@
override fun getController(): WifiConfigController2 = controller
override fun onCreate(savedInstanceState: Bundle?) {
- setWindowsOverlay()
+ if (isSysUiCaller) {
+ setWindowsOverlay()
+ }
view = layoutInflater.inflate(R.layout.wifi_dialog, null)
setView(view)
controller = WifiConfigController2(this, view, wifiEntry, mode, hideMeteredAndPrivacy)
diff --git a/src/com/android/settings/wifi/WifiDialogActivity.java b/src/com/android/settings/wifi/WifiDialogActivity.java
index eb3d88a..951277a 100644
--- a/src/com/android/settings/wifi/WifiDialogActivity.java
+++ b/src/com/android/settings/wifi/WifiDialogActivity.java
@@ -43,6 +43,7 @@
import com.android.settings.R;
import com.android.settings.SetupWizardUtils;
+import com.android.settings.Utils;
import com.android.settings.overlay.FeatureFactory;
import com.android.settings.wifi.dpp.WifiDppUtils;
import com.android.settingslib.core.lifecycle.ObservableActivity;
@@ -172,7 +173,10 @@
} else {
if (mIsWifiTrackerLib) {
mDialog2 = new WifiDialog2(this, this,
- mNetworkDetailsTracker.getWifiEntry(), WifiConfigUiBase2.MODE_CONNECT);
+ mNetworkDetailsTracker.getWifiEntry(), WifiConfigUiBase2.MODE_CONNECT,
+ 0 /* style */, false /* hideSubmitButton */,
+ false /* hideMeteredAndPrivacy */,
+ Utils.SYSTEMUI_PACKAGE_NAME.equals(getLaunchedFromPackage()));
} else {
mDialog = WifiDialog.createModal(
this, this, mAccessPoint, WifiConfigUiBase.MODE_CONNECT);
diff --git a/tests/robotests/src/com/android/settings/network/MobileNetworkSummaryControllerTest.java b/tests/robotests/src/com/android/settings/network/MobileNetworkSummaryControllerTest.java
index bf866b2..8d6d2d9 100644
--- a/tests/robotests/src/com/android/settings/network/MobileNetworkSummaryControllerTest.java
+++ b/tests/robotests/src/com/android/settings/network/MobileNetworkSummaryControllerTest.java
@@ -44,8 +44,6 @@
import androidx.preference.PreferenceScreen;
import com.android.settings.Settings.MobileNetworkActivity;
-import com.android.settings.network.helper.SubscriptionAnnotation;
-import com.android.settings.network.helper.SubscriptionGrouping;
import com.android.settings.widget.AddPreference;
import com.android.settingslib.RestrictedLockUtils;
import com.android.settingslib.core.lifecycle.Lifecycle;
diff --git a/tests/unit/src/com/android/settings/network/helper/SubscriptionGroupingTest.java b/tests/unit/src/com/android/settings/network/helper/SubscriptionGroupingTest.java
deleted file mode 100644
index bea7209..0000000
--- a/tests/unit/src/com/android/settings/network/helper/SubscriptionGroupingTest.java
+++ /dev/null
@@ -1,137 +0,0 @@
-/*
- * Copyright (C) 2021 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package com.android.settings.network.helper;
-
-import static com.google.common.truth.Truth.assertThat;
-
-import static org.mockito.ArgumentMatchers.any;
-import static org.mockito.Mockito.doReturn;
-import static org.mockito.Mockito.spy;
-import static org.mockito.Mockito.when;
-
-import android.content.Context;
-import android.os.ParcelUuid;
-
-import androidx.test.core.app.ApplicationProvider;
-import androidx.test.ext.junit.runners.AndroidJUnit4;
-
-import com.android.settings.network.helper.SubscriptionAnnotation;
-
-import org.junit.Before;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.mockito.MockitoAnnotations;
-
-import java.util.Arrays;
-import java.util.List;
-
-@RunWith(AndroidJUnit4.class)
-public class SubscriptionGroupingTest {
-
- private ParcelUuid mMockUuid;
-
- private Context mContext;
- private SubscriptionGrouping mTarget;
-
- @Before
- public void setUp() {
- MockitoAnnotations.initMocks(this);
-
- mContext = spy(ApplicationProvider.getApplicationContext());
- mMockUuid = ParcelUuid.fromString("1-1-1-1-1");
- mTarget = spy(new SubscriptionGrouping());
- }
-
- @Test
- public void apply_multipleEntriesWithSameGroupUuid_onlyOneLeft() {
- SubscriptionAnnotation subAnno1 = new TestSubAnnotation(1,
- SubscriptionAnnotation.TYPE_ESIM, true, true, mMockUuid);
- SubscriptionAnnotation subAnno2 = new TestSubAnnotation(2,
- SubscriptionAnnotation.TYPE_PSIM, true, true, mMockUuid);
- SubscriptionAnnotation subAnno3 = new TestSubAnnotation(3,
- SubscriptionAnnotation.TYPE_ESIM, true, true, mMockUuid);
- doReturn(mMockUuid).when(mTarget).getGroupUuid(any());
-
- List<SubscriptionAnnotation> result = mTarget
- .apply(Arrays.asList(subAnno2, subAnno1, subAnno3));
- assertThat(result.size()).isEqualTo(1);
- assertThat(result.get(0)).isEqualTo(subAnno1);
- }
-
- @Test
- public void apply_multipleEntriesWithSameGroupUuid_disabledOneIsAvoided() {
- SubscriptionAnnotation subAnno1 = new TestSubAnnotation(1,
- SubscriptionAnnotation.TYPE_ESIM, true, true, mMockUuid);
- SubscriptionAnnotation subAnno2 = new TestSubAnnotation(2,
- SubscriptionAnnotation.TYPE_PSIM, true, true, mMockUuid);
- SubscriptionAnnotation subAnno3 = new TestSubAnnotation(3,
- SubscriptionAnnotation.TYPE_ESIM, false, false, mMockUuid);
- doReturn(mMockUuid).when(mTarget).getGroupUuid(any());
-
- List<SubscriptionAnnotation> result = mTarget
- .apply(Arrays.asList(subAnno2, subAnno1, subAnno3));
- assertThat(result.size()).isEqualTo(1);
- assertThat(result.get(0)).isEqualTo(subAnno1);
- }
-
- private class TestSubAnnotation extends SubscriptionAnnotation {
- private int mSubId;
- private int mSimType;
- private boolean mIsActive;
- private boolean mIsDisplayAllowed;
- private ParcelUuid mUuid;
-
- private TestSubAnnotation(int subId, int simType,
- boolean isActive, boolean isDisplayAllowed, ParcelUuid guuid) {
- super(null, -1, null, null, null, null);
- mSubId = subId;
- mSimType = simType;
- mIsActive = isActive;
- mIsDisplayAllowed = isDisplayAllowed;
- mUuid = guuid;
- }
-
- @Override
- public int getSubscriptionId() {
- return mSubId;
- }
-
- @Override
- public int getType() {
- return mSimType;
- }
-
- @Override
- public boolean isExisted() {
- return true;
- }
-
- @Override
- public boolean isActive() {
- return mIsActive;
- }
-
- @Override
- public boolean isDisplayAllowed() {
- return mIsDisplayAllowed;
- }
-
- @Override
- public ParcelUuid getGroupUuid() {
- return mUuid;
- }
- }
-}