Merge "Add overlayable_icons_test.xml for Settings." into qt-dev
diff --git a/res/values/strings.xml b/res/values/strings.xml
index 63003d2..2eae4df 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -7652,19 +7652,19 @@
<string name="zen_mode_sound_summary_on">On</string>
<!-- Do not disturb: Summary for zen mode duration setting indicating user will be prompted to set dnd duration whenever dnd is manually toggled on [CHAR LIMIT=NONE]-->
- <string name="zen_mode_duration_summary_always_prompt">Ask every time (unless turned on automatically)</string>
+ <string name="zen_mode_duration_summary_always_prompt">Ask every time</string>
<!-- Do not disturb: Summary for zen mode duration setting indicating how long dnd will last when dnd is manually toggled on [CHAR LIMIT=NONE] -->
- <string name="zen_mode_duration_summary_forever">Until you turn off (unless turned on automatically)</string>
+ <string name="zen_mode_duration_summary_forever">Until you turn off</string>
<!-- Do not disturb: Summary for zen mode duration setting indicating how long dnd will last when dnd is manually toggled on [CHAR LIMIT=NONE] -->
<plurals name="zen_mode_duration_summary_time_hours">
- <item quantity="one">1 hour (unless turned on automatically)</item>
- <item quantity="other"><xliff:g id="num_hours" example="3">%d</xliff:g> hours (unless turned on automatically)</item>
+ <item quantity="one">1 hour</item>
+ <item quantity="other"><xliff:g id="num_hours" example="3">%d</xliff:g> hours</item>
</plurals>
<!-- Do not disturb: Summary for zen mode duration setting indicating how long dnd will last when toggled on -->
- <string name="zen_mode_duration_summary_time_minutes"><xliff:g id="num_minutes" example="5">%d</xliff:g> minutes (unless turned on automatically)</string>
+ <string name="zen_mode_duration_summary_time_minutes"><xliff:g id="num_minutes" example="5">%d</xliff:g> minutes</string>
<!-- Summary for the Sound Do not Disturb option when at least one automatic rules is enabled. [CHAR LIMIT=NONE]-->
<plurals name="zen_mode_sound_summary_summary_off_info">
diff --git a/src/com/android/settings/development/SystemServerHeapDumpPreferenceController.java b/src/com/android/settings/development/SystemServerHeapDumpPreferenceController.java
index 599162e..e6701ce 100644
--- a/src/com/android/settings/development/SystemServerHeapDumpPreferenceController.java
+++ b/src/com/android/settings/development/SystemServerHeapDumpPreferenceController.java
@@ -20,6 +20,7 @@
import android.content.Context;
import android.os.Build;
import android.os.Handler;
+import android.os.Looper;
import android.os.RemoteException;
import android.os.UserManager;
import android.util.Log;
@@ -47,7 +48,7 @@
super(context);
mUserManager = context.getSystemService(UserManager.class);
- mHandler = new Handler();
+ mHandler = new Handler(Looper.getMainLooper());
}
@Override
diff --git a/src/com/android/settings/gestures/SystemNavigationPreferenceController.java b/src/com/android/settings/gestures/SystemNavigationPreferenceController.java
index 5f58fcf..f2c8252 100644
--- a/src/com/android/settings/gestures/SystemNavigationPreferenceController.java
+++ b/src/com/android/settings/gestures/SystemNavigationPreferenceController.java
@@ -139,12 +139,11 @@
* Enables the specified overlay package.
*/
static void setNavBarInteractionMode(IOverlayManager overlayManager, String overlayPackage) {
- setOverlayEnabled(overlayManager, NAV_BAR_MODE_3BUTTON_OVERLAY,
- overlayPackage == NAV_BAR_MODE_3BUTTON_OVERLAY);
- setOverlayEnabled(overlayManager, NAV_BAR_MODE_2BUTTON_OVERLAY,
- overlayPackage == NAV_BAR_MODE_2BUTTON_OVERLAY);
- setOverlayEnabled(overlayManager, NAV_BAR_MODE_GESTURAL_OVERLAY,
- overlayPackage == NAV_BAR_MODE_GESTURAL_OVERLAY);
+ try {
+ overlayManager.setEnabledExclusiveInCategory(overlayPackage, USER_CURRENT);
+ } catch (RemoteException e) {
+ throw e.rethrowFromSystemServer();
+ }
}
static boolean isSwipeUpEnabled(Context context) {
@@ -159,12 +158,4 @@
return NAV_BAR_MODE_GESTURAL == context.getResources().getInteger(
com.android.internal.R.integer.config_navBarInteractionMode);
}
-
- static void setOverlayEnabled(IOverlayManager overlayManager, String pkg, boolean enabled) {
- try {
- overlayManager.setEnabled(pkg, enabled, USER_CURRENT);
- } catch (RemoteException e) {
- throw e.rethrowFromSystemServer();
- }
- }
}
diff --git a/src/com/android/settings/homepage/contextualcards/ContextualCard.java b/src/com/android/settings/homepage/contextualcards/ContextualCard.java
index ede12fb..ccfb22d 100644
--- a/src/com/android/settings/homepage/contextualcards/ContextualCard.java
+++ b/src/com/android/settings/homepage/contextualcards/ContextualCard.java
@@ -72,6 +72,7 @@
@LayoutRes
private final int mViewType;
private final boolean mIsPendingDismiss;
+ private final boolean mHasInlineAction;
public String getName() {
return mName;
@@ -161,6 +162,10 @@
return mIsPendingDismiss;
}
+ public boolean hasInlineAction() {
+ return mHasInlineAction;
+ }
+
public Builder mutate() {
return mBuilder;
}
@@ -187,6 +192,7 @@
mIsLargeCard = builder.mIsLargeCard;
mViewType = builder.mViewType;
mIsPendingDismiss = builder.mIsPendingDismiss;
+ mHasInlineAction = builder.mHasInlineAction;
}
ContextualCard(Cursor c) {
@@ -234,6 +240,8 @@
mBuilder.setViewType(mViewType);
mIsPendingDismiss = false;
mBuilder.setIsPendingDismiss(mIsPendingDismiss);
+ mHasInlineAction = false;
+ mBuilder.setHasInlineAction(mHasInlineAction);
}
@Override
@@ -286,6 +294,7 @@
@LayoutRes
private int mViewType;
private boolean mIsPendingDismiss;
+ private boolean mHasInlineAction;
public Builder setName(String name) {
mName = name;
@@ -387,6 +396,11 @@
return this;
}
+ public Builder setHasInlineAction(boolean hasInlineAction) {
+ mHasInlineAction = hasInlineAction;
+ return this;
+ }
+
public ContextualCard build() {
return new ContextualCard(this);
}
diff --git a/src/com/android/settings/homepage/contextualcards/ContextualCardsDiffCallback.java b/src/com/android/settings/homepage/contextualcards/ContextualCardsDiffCallback.java
index d1623cd..58d6a41 100644
--- a/src/com/android/settings/homepage/contextualcards/ContextualCardsDiffCallback.java
+++ b/src/com/android/settings/homepage/contextualcards/ContextualCardsDiffCallback.java
@@ -20,7 +20,6 @@
import java.util.List;
-//TODO(b/117816826): add test cases for DiffUtil.
/**
* A DiffCallback to calculate the difference between old and new {@link ContextualCard} List.
*/
@@ -53,6 +52,11 @@
@Override
public boolean areContentsTheSame(int oldCardPosition, int newCardPosition) {
+ // Slices with toggles needs to be updated continuously, which means their contents may
+ // change. So here we assume the content will always be different to force view rebinding.
+ if (mNewCards.get(newCardPosition).hasInlineAction()) {
+ return false;
+ }
return mOldCards.get(oldCardPosition).equals(mNewCards.get(newCardPosition));
}
}
\ No newline at end of file
diff --git a/src/com/android/settings/homepage/contextualcards/EligibleCardChecker.java b/src/com/android/settings/homepage/contextualcards/EligibleCardChecker.java
index 811aaa2..8558ee7 100644
--- a/src/com/android/settings/homepage/contextualcards/EligibleCardChecker.java
+++ b/src/com/android/settings/homepage/contextualcards/EligibleCardChecker.java
@@ -26,11 +26,14 @@
import androidx.annotation.VisibleForTesting;
import androidx.slice.Slice;
+import androidx.slice.SliceMetadata;
import androidx.slice.SliceViewManager;
+import androidx.slice.core.SliceAction;
import com.android.settings.overlay.FeatureFactory;
import com.android.settingslib.core.instrumentation.MetricsFeatureProvider;
+import java.util.List;
import java.util.concurrent.Callable;
import java.util.concurrent.CountDownLatch;
import java.util.concurrent.TimeUnit;
@@ -41,7 +44,9 @@
private static final long LATCH_TIMEOUT_MS = 200;
private final Context mContext;
- private final ContextualCard mCard;
+
+ @VisibleForTesting
+ ContextualCard mCard;
EligibleCardChecker(Context context, ContextualCard card) {
mContext = context;
@@ -93,6 +98,11 @@
}
final Slice slice = bindSlice(uri);
+
+ if (isSliceToggleable(slice)) {
+ mCard = card.mutate().setHasInlineAction(true).build();
+ }
+
if (slice == null || slice.hasHint(HINT_ERROR)) {
Log.w(TAG, "Failed to bind slice, not eligible for display " + uri);
return false;
@@ -133,4 +143,12 @@
}
return returnSlice[0];
}
+
+ @VisibleForTesting
+ boolean isSliceToggleable(Slice slice) {
+ final SliceMetadata metadata = SliceMetadata.from(mContext, slice);
+ final List<SliceAction> toggles = metadata.getToggles();
+
+ return !toggles.isEmpty();
+ }
}
diff --git a/src/com/android/settings/network/MobileNetworkListController.java b/src/com/android/settings/network/MobileNetworkListController.java
index a2e4116..d0e14ce 100644
--- a/src/com/android/settings/network/MobileNetworkListController.java
+++ b/src/com/android/settings/network/MobileNetworkListController.java
@@ -98,7 +98,7 @@
mPreferences = new ArrayMap<>();
final List<SubscriptionInfo> subscriptions = SubscriptionUtil.getAvailableSubscriptions(
- mSubscriptionManager);
+ mContext);
for (SubscriptionInfo info : subscriptions) {
final int subId = info.getSubscriptionId();
Preference pref = existingPreferences.remove(subId);
diff --git a/src/com/android/settings/network/MobileNetworkSummaryController.java b/src/com/android/settings/network/MobileNetworkSummaryController.java
index ae115eb..9498c4e 100644
--- a/src/com/android/settings/network/MobileNetworkSummaryController.java
+++ b/src/com/android/settings/network/MobileNetworkSummaryController.java
@@ -22,6 +22,7 @@
import android.content.Context;
import android.content.Intent;
import android.os.UserManager;
+import android.provider.Settings;
import android.telephony.SubscriptionInfo;
import android.telephony.SubscriptionManager;
import android.telephony.euicc.EuiccManager;
@@ -99,7 +100,7 @@
@Override
public CharSequence getSummary() {
final List<SubscriptionInfo> subs = SubscriptionUtil.getAvailableSubscriptions(
- mSubscriptionManager);
+ mContext);
if (subs.isEmpty()) {
if (MobileNetworkUtils.showEuiccSettings(mContext)) {
return mContext.getResources().getString(
@@ -132,7 +133,7 @@
mPreference.setEnabled(!mChangeListener.isAirplaneModeOn());
final List<SubscriptionInfo> subs = SubscriptionUtil.getAvailableSubscriptions(
- mSubscriptionManager);
+ mContext);
if (subs.isEmpty()) {
if (MobileNetworkUtils.showEuiccSettings(mContext)) {
@@ -154,6 +155,7 @@
if (subs.size() == 1) {
mPreference.setOnPreferenceClickListener((Preference pref) -> {
final Intent intent = new Intent(mContext, MobileNetworkActivity.class);
+ intent.putExtra(Settings.EXTRA_SUB_ID, subs.get(0).getSubscriptionId());
mContext.startActivity(intent);
return true;
});
diff --git a/src/com/android/settings/network/SubscriptionUtil.java b/src/com/android/settings/network/SubscriptionUtil.java
index 5f1beca..86655d4 100644
--- a/src/com/android/settings/network/SubscriptionUtil.java
+++ b/src/com/android/settings/network/SubscriptionUtil.java
@@ -16,8 +16,15 @@
package com.android.settings.network;
+import static android.telephony.UiccSlotInfo.CARD_STATE_INFO_PRESENT;
+
+import static com.android.internal.util.CollectionUtils.emptyIfNull;
+
+import android.content.Context;
import android.telephony.SubscriptionInfo;
import android.telephony.SubscriptionManager;
+import android.telephony.TelephonyManager;
+import android.telephony.UiccSlotInfo;
import android.text.TextUtils;
import androidx.annotation.VisibleForTesting;
@@ -27,6 +34,7 @@
import java.util.List;
public class SubscriptionUtil {
+ private static final String TAG = "SubscriptionUtil";
private static List<SubscriptionInfo> sAvailableResultsForTesting;
private static List<SubscriptionInfo> sActiveResultsForTesting;
@@ -44,21 +52,56 @@
if (sActiveResultsForTesting != null) {
return sActiveResultsForTesting;
}
- List<SubscriptionInfo> subscriptions = manager.getActiveSubscriptionInfoList(true);
+ final List<SubscriptionInfo> subscriptions = manager.getActiveSubscriptionInfoList(true);
if (subscriptions == null) {
return new ArrayList<>();
}
return subscriptions;
}
- public static List<SubscriptionInfo> getAvailableSubscriptions(SubscriptionManager manager) {
+ private static boolean isInactiveInsertedPSim(UiccSlotInfo slotInfo) {
+ return !slotInfo.getIsEuicc() && !slotInfo.getIsActive() &&
+ slotInfo.getCardStateInfo() == CARD_STATE_INFO_PRESENT;
+ }
+
+ public static List<SubscriptionInfo> getAvailableSubscriptions(Context context) {
if (sAvailableResultsForTesting != null) {
return sAvailableResultsForTesting;
}
- List<SubscriptionInfo> subscriptions = manager.getSelectableSubscriptionInfoList();
- if (subscriptions == null) {
- subscriptions = new ArrayList<>();
+ final SubscriptionManager subMgr = context.getSystemService(SubscriptionManager.class);
+ final TelephonyManager telMgr = context.getSystemService(TelephonyManager.class);
+
+ List<SubscriptionInfo> subscriptions =
+ new ArrayList<>(emptyIfNull(subMgr.getSelectableSubscriptionInfoList()));
+
+ // Look for inactive but present physical SIMs that are missing from the selectable list.
+ final List<UiccSlotInfo> missing = new ArrayList<>();
+ UiccSlotInfo[] slotsInfo = telMgr.getUiccSlotsInfo();
+ for (int i = 0; slotsInfo != null && i < slotsInfo.length; i++) {
+ final UiccSlotInfo slotInfo = slotsInfo[i];
+ if (isInactiveInsertedPSim(slotInfo)) {
+ final int index = slotInfo.getLogicalSlotIdx();
+ final String cardId = slotInfo.getCardId();
+
+ final boolean found = subscriptions.stream().anyMatch(info ->
+ index == info.getSimSlotIndex() && cardId.equals(info.getCardString()));
+ if (!found) {
+ missing.add(slotInfo);
+ }
+ }
}
+ if (!missing.isEmpty()) {
+ for (SubscriptionInfo info : subMgr.getAllSubscriptionInfoList()) {
+ for (UiccSlotInfo slotInfo : missing) {
+ if (info.getSimSlotIndex() == slotInfo.getLogicalSlotIdx() &&
+ info.getCardString().equals(slotInfo.getCardId())) {
+ subscriptions.add(info);
+ break;
+ }
+ }
+ }
+ }
+
// With some carriers such as Google Fi which provide a sort of virtual service that spans
// across multiple underlying networks, we end up with subscription entries for the
// underlying networks that need to be hidden from the user in the UI.
diff --git a/src/com/android/settings/network/telephony/MobileNetworkActivity.java b/src/com/android/settings/network/telephony/MobileNetworkActivity.java
index 47eb66b..b8ed31f 100644
--- a/src/com/android/settings/network/telephony/MobileNetworkActivity.java
+++ b/src/com/android/settings/network/telephony/MobileNetworkActivity.java
@@ -40,6 +40,7 @@
import com.android.settings.core.FeatureFlags;
import com.android.settings.core.SettingsBaseActivity;
import com.android.settings.development.featureflags.FeatureFlagPersistent;
+import com.android.settings.network.SubscriptionUtil;
import com.google.android.material.bottomnavigation.BottomNavigationView;
@@ -165,7 +166,7 @@
final int subId = intent.getIntExtra(Settings.EXTRA_SUB_ID, SUB_ID_NULL);
if (subId != SUB_ID_NULL) {
for (SubscriptionInfo subscription :
- mSubscriptionManager.getSelectableSubscriptionInfoList()) {
+ SubscriptionUtil.getAvailableSubscriptions(this)) {
if (subscription.getSubscriptionId() == subId) {
return subscription;
}
diff --git a/src/com/android/settings/network/telephony/MobileNetworkSwitchController.java b/src/com/android/settings/network/telephony/MobileNetworkSwitchController.java
index fd296ec..2037adc 100644
--- a/src/com/android/settings/network/telephony/MobileNetworkSwitchController.java
+++ b/src/com/android/settings/network/telephony/MobileNetworkSwitchController.java
@@ -94,8 +94,9 @@
return;
}
final List<SubscriptionInfo> subs = SubscriptionUtil.getAvailableSubscriptions(
- mSubscriptionManager);
- if (mSubId == SubscriptionManager.INVALID_SUBSCRIPTION_ID || subs.size() < 2) {
+ mContext);
+ if (mSubId == SubscriptionManager.INVALID_SUBSCRIPTION_ID ||
+ mSubscriptionManager.isSubscriptionEnabled(mSubId) && subs.size() < 2) {
mSwitchBar.hide();
return;
}
diff --git a/src/com/android/settings/wifi/details/WifiDetailPreferenceController.java b/src/com/android/settings/wifi/details/WifiDetailPreferenceController.java
index eaf3678..f98dc58 100644
--- a/src/com/android/settings/wifi/details/WifiDetailPreferenceController.java
+++ b/src/com/android/settings/wifi/details/WifiDetailPreferenceController.java
@@ -885,13 +885,19 @@
/**
* Show QR code to share the network represented by this preference.
*/
- public void launchWifiDppConfiguratorActivity() {
+ private void launchWifiDppConfiguratorActivity() {
final Intent intent = WifiDppUtils.getConfiguratorQrCodeGeneratorIntentOrNull(mContext,
mWifiManager, mAccessPoint);
if (intent == null) {
Log.e(TAG, "Launch Wi-Fi DPP QR code generator with a wrong Wi-Fi network!");
} else {
+ mMetricsFeatureProvider.action(SettingsEnums.PAGE_UNKNOWN,
+ SettingsEnums.ACTION_SETTINGS_SHARE_WIFI_QR_CODE,
+ SettingsEnums.SETTINGS_WIFI_DPP_CONFIGURATOR,
+ /* key */ null,
+ /* value */ Integer.MIN_VALUE);
+
mContext.startActivity(intent);
}
}
diff --git a/src/com/android/settings/wifi/dpp/WifiDppQrCodeScannerFragment.java b/src/com/android/settings/wifi/dpp/WifiDppQrCodeScannerFragment.java
index d0322b7..0cd7f09 100644
--- a/src/com/android/settings/wifi/dpp/WifiDppQrCodeScannerFragment.java
+++ b/src/com/android/settings/wifi/dpp/WifiDppQrCodeScannerFragment.java
@@ -193,6 +193,13 @@
return;
}
+ mMetricsFeatureProvider.action(
+ mMetricsFeatureProvider.getAttribution(getActivity()),
+ SettingsEnums.ACTION_SETTINGS_ENROLL_WIFI_QR_CODE,
+ SettingsEnums.SETTINGS_WIFI_DPP_ENROLLEE,
+ /* key */ null,
+ /* value */ Integer.MIN_VALUE);
+
notifyUserForQrCodeRecognition();
break;
diff --git a/src/com/android/settings/wifi/tether/WifiTetherSSIDPreferenceController.java b/src/com/android/settings/wifi/tether/WifiTetherSSIDPreferenceController.java
index b7ddcae..1197db4 100644
--- a/src/com/android/settings/wifi/tether/WifiTetherSSIDPreferenceController.java
+++ b/src/com/android/settings/wifi/tether/WifiTetherSSIDPreferenceController.java
@@ -16,6 +16,7 @@
package com.android.settings.wifi.tether;
+import android.app.settings.SettingsEnums;
import android.content.Context;
import android.content.Intent;
import android.net.wifi.WifiConfiguration;
@@ -27,9 +28,12 @@
import androidx.preference.Preference;
import com.android.settings.R;
+import com.android.settings.overlay.FeatureFactory;
import com.android.settings.widget.ValidatedEditTextPreference;
import com.android.settings.wifi.dpp.WifiDppUtils;
+import com.android.settingslib.core.instrumentation.MetricsFeatureProvider;
+
public class WifiTetherSSIDPreferenceController extends WifiTetherBasePreferenceController
implements ValidatedEditTextPreference.Validator {
@@ -41,10 +45,14 @@
private String mSSID;
private WifiDeviceNameTextValidator mWifiDeviceNameTextValidator;
+ private final MetricsFeatureProvider mMetricsFeatureProvider;
+
public WifiTetherSSIDPreferenceController(Context context,
OnTetherConfigUpdateListener listener) {
super(context, listener);
+
mWifiDeviceNameTextValidator = new WifiDeviceNameTextValidator();
+ mMetricsFeatureProvider = FeatureFactory.getFactory(context).getMetricsFeatureProvider();
}
@Override
@@ -104,7 +112,15 @@
}
private void shareHotspotNetwork(Intent intent) {
- WifiDppUtils.showLockScreen(mContext, () -> mContext.startActivity(intent));
+ WifiDppUtils.showLockScreen(mContext, () -> {
+ mMetricsFeatureProvider.action(SettingsEnums.PAGE_UNKNOWN,
+ SettingsEnums.ACTION_SETTINGS_SHARE_WIFI_HOTSPOT_QR_CODE,
+ SettingsEnums.SETTINGS_WIFI_DPP_CONFIGURATOR,
+ /* key */ null,
+ /* value */ Integer.MIN_VALUE);
+
+ mContext.startActivity(intent);
+ });
}
@VisibleForTesting
diff --git a/tests/robotests/src/com/android/settings/homepage/contextualcards/ContextualCardLoaderTest.java b/tests/robotests/src/com/android/settings/homepage/contextualcards/ContextualCardLoaderTest.java
index f025ee8..c2a3aa9 100644
--- a/tests/robotests/src/com/android/settings/homepage/contextualcards/ContextualCardLoaderTest.java
+++ b/tests/robotests/src/com/android/settings/homepage/contextualcards/ContextualCardLoaderTest.java
@@ -16,8 +16,6 @@
package com.android.settings.homepage.contextualcards;
-import static android.app.slice.Slice.HINT_ERROR;
-
import static com.android.settings.homepage.contextualcards.ContextualCardLoader.DEFAULT_CARD_COUNT;
import static com.google.common.truth.Truth.assertThat;
@@ -34,8 +32,6 @@
import android.content.Context;
import android.net.Uri;
-import androidx.slice.Slice;
-
import com.android.settings.R;
import com.android.settings.slices.CustomSliceRegistry;
import com.android.settings.testutils.FakeFeatureFactory;
@@ -53,74 +49,18 @@
@RunWith(RobolectricTestRunner.class)
public class ContextualCardLoaderTest {
- private static final String TEST_SLICE_URI = "content://test/test";
-
private Context mContext;
private ContextualCardLoader mContextualCardLoader;
- private EligibleCardChecker mEligibleCardChecker;
private FakeFeatureFactory mFakeFeatureFactory;
@Before
public void setUp() {
mContext = RuntimeEnvironment.application;
mContextualCardLoader = spy(new ContextualCardLoader(mContext));
- mEligibleCardChecker =
- spy(new EligibleCardChecker(mContext, getContextualCard(TEST_SLICE_URI)));
mFakeFeatureFactory = FakeFeatureFactory.setupForTest();
}
@Test
- public void isCardEligibleToDisplay_customCard_returnTrue() {
- final ContextualCard customCard = new ContextualCard.Builder()
- .setName("custom_card")
- .setCardType(ContextualCard.CardType.DEFAULT)
- .setTitleText("custom_title")
- .setSummaryText("custom_summary")
- .build();
-
- assertThat(mEligibleCardChecker.isCardEligibleToDisplay(customCard)).isTrue();
- }
-
- @Test
- public void isCardEligibleToDisplay_invalidScheme_returnFalse() {
- final String sliceUri = "contet://com.android.settings.slices/action/flashlight";
-
- assertThat(mEligibleCardChecker.isCardEligibleToDisplay(getContextualCard(sliceUri)))
- .isFalse();
- }
-
- @Test
- public void isCardEligibleToDisplay_invalidRankingScore_returnFalse() {
- final ContextualCard card = new ContextualCard.Builder()
- .setName("test_card")
- .setCardType(ContextualCard.CardType.SLICE)
- .setSliceUri(CustomSliceRegistry.FLASHLIGHT_SLICE_URI)
- .setRankingScore(-1)
- .build();
-
- assertThat(mEligibleCardChecker.isCardEligibleToDisplay(card))
- .isFalse();
- }
-
- @Test
- public void isCardEligibleToDisplay_nullSlice_returnFalse() {
- doReturn(null).when(mEligibleCardChecker).bindSlice(Uri.parse(TEST_SLICE_URI));
-
- assertThat(mEligibleCardChecker.isCardEligibleToDisplay(getContextualCard(TEST_SLICE_URI)))
- .isFalse();
- }
-
- @Test
- public void isCardEligibleToDisplay_errorSlice_returnFalse() {
- final Slice slice = new Slice.Builder(Uri.parse(TEST_SLICE_URI))
- .addHints(HINT_ERROR).build();
- doReturn(slice).when(mEligibleCardChecker).bindSlice(Uri.parse(TEST_SLICE_URI));
-
- assertThat(mEligibleCardChecker.isCardEligibleToDisplay(getContextualCard(TEST_SLICE_URI)))
- .isFalse();
- }
-
- @Test
public void getDisplayableCards_twoEligibleCards_shouldShowAll() {
final List<ContextualCard> cards = getContextualCardList().stream().limit(2)
.collect(Collectors.toList());
@@ -201,15 +141,6 @@
eq(SettingsEnums.ACTION_CONTEXTUAL_CARD_SHOW), any(String.class));
}
- private ContextualCard getContextualCard(String sliceUri) {
- return new ContextualCard.Builder()
- .setName("test_card")
- .setRankingScore(0.5)
- .setCardType(ContextualCard.CardType.SLICE)
- .setSliceUri(Uri.parse(sliceUri))
- .build();
- }
-
private List<ContextualCard> getContextualCardList() {
final List<ContextualCard> cards = new ArrayList<>();
cards.add(new ContextualCard.Builder()
diff --git a/tests/robotests/src/com/android/settings/homepage/contextualcards/ContextualCardsDiffCallbackTest.java b/tests/robotests/src/com/android/settings/homepage/contextualcards/ContextualCardsDiffCallbackTest.java
new file mode 100644
index 0000000..eb95f71
--- /dev/null
+++ b/tests/robotests/src/com/android/settings/homepage/contextualcards/ContextualCardsDiffCallbackTest.java
@@ -0,0 +1,95 @@
+/*
+ * Copyright (C) 2019 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.homepage.contextualcards;
+
+import static com.google.common.truth.Truth.assertThat;
+
+import android.net.Uri;
+
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.robolectric.RobolectricTestRunner;
+import org.robolectric.RuntimeEnvironment;
+
+import java.util.ArrayList;
+import java.util.List;
+
+@RunWith(RobolectricTestRunner.class)
+public class ContextualCardsDiffCallbackTest {
+
+ private static final Uri TEST_SLICE_URI = Uri.parse("content://test/test");
+
+ private ContextualCardsDiffCallback mDiffCallback;
+ private List<ContextualCard> mOldCards;
+ private List<ContextualCard> mNewCards;
+
+ @Before
+ public void setUp() {
+ mOldCards = new ArrayList<>();
+ mNewCards = new ArrayList<>();
+ mOldCards.add(getContextualCard("test1"));
+ mNewCards.add(getContextualCard("test1"));
+ mNewCards.add(getContextualCard("test2"));
+ mDiffCallback = new ContextualCardsDiffCallback(mOldCards, mNewCards);
+ }
+
+ @Test
+ public void getOldListSize_oneCard_returnOne() {
+ assertThat(mDiffCallback.getOldListSize()).isEqualTo(1);
+ }
+
+ @Test
+ public void getNewListSize_twoCards_returnTwo() {
+ assertThat(mDiffCallback.getNewListSize()).isEqualTo(2);
+ }
+
+ @Test
+ public void areItemsTheSame_sameItems_returnTrue() {
+ assertThat(mDiffCallback.areItemsTheSame(0, 0)).isTrue();
+ }
+
+ @Test
+ public void areItemsTheSame_differentItems_returnFalse() {
+ mOldCards.add(getContextualCard("test3"));
+
+ assertThat(mDiffCallback.areItemsTheSame(1, 1)).isFalse();
+ }
+
+ @Test
+ public void areContentsTheSame_sameContents_returnTrue() {
+ assertThat(mDiffCallback.areContentsTheSame(0, 0)).isTrue();
+ }
+
+ @Test
+ public void areContentsTheSame_sliceWithToggle_returnFalse() {
+ final ContextualCard card = getContextualCard("test1").mutate()
+ .setHasInlineAction(true).build();
+ mNewCards.add(0, card);
+
+ assertThat(mDiffCallback.areContentsTheSame(0, 0)).isFalse();
+ }
+
+ private ContextualCard getContextualCard(String name) {
+ return new ContextualCard.Builder()
+ .setName(name)
+ .setRankingScore(0.5)
+ .setCardType(ContextualCard.CardType.SLICE)
+ .setSliceUri(TEST_SLICE_URI)
+ .build();
+ }
+}
diff --git a/tests/robotests/src/com/android/settings/homepage/contextualcards/EligibleCardCheckerTest.java b/tests/robotests/src/com/android/settings/homepage/contextualcards/EligibleCardCheckerTest.java
new file mode 100644
index 0000000..7b70dad
--- /dev/null
+++ b/tests/robotests/src/com/android/settings/homepage/contextualcards/EligibleCardCheckerTest.java
@@ -0,0 +1,157 @@
+/*
+ * Copyright (C) 2019 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.homepage.contextualcards;
+
+import static android.app.slice.Slice.HINT_ERROR;
+
+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 android.content.Context;
+import android.net.Uri;
+
+import androidx.slice.Slice;
+import androidx.slice.SliceProvider;
+import androidx.slice.widget.SliceLiveData;
+
+import com.android.settings.homepage.contextualcards.deviceinfo.EmergencyInfoSlice;
+import com.android.settings.slices.CustomSliceRegistry;
+import com.android.settings.wifi.slice.ContextualWifiSlice;
+
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.robolectric.RobolectricTestRunner;
+import org.robolectric.RuntimeEnvironment;
+
+@RunWith(RobolectricTestRunner.class)
+public class EligibleCardCheckerTest {
+
+ private static final Uri TEST_SLICE_URI = Uri.parse("content://test/test");
+
+ private Context mContext;
+ private EligibleCardChecker mEligibleCardChecker;
+
+ @Before
+ public void setUp() {
+ mContext = RuntimeEnvironment.application;
+ mEligibleCardChecker =
+ spy(new EligibleCardChecker(mContext, getContextualCard(TEST_SLICE_URI)));
+ SliceProvider.setSpecs(SliceLiveData.SUPPORTED_SPECS);
+ }
+
+ @Test
+ public void isSliceToggleable_cardWithToggle_returnTrue() {
+ final ContextualWifiSlice wifiSlice = new ContextualWifiSlice(mContext);
+ final Slice slice = wifiSlice.getSlice();
+
+ assertThat(mEligibleCardChecker.isSliceToggleable(slice)).isTrue();
+ }
+
+ @Test
+ public void isSliceToggleable_cardWithoutToggle_returnFalse() {
+ final EmergencyInfoSlice emergencyInfoSlice = new EmergencyInfoSlice(mContext);
+ final Slice slice = emergencyInfoSlice.getSlice();
+
+ assertThat(mEligibleCardChecker.isSliceToggleable(slice)).isFalse();
+ }
+
+ @Test
+ public void isCardEligibleToDisplay_toggleSlice_hasInlineActionShouldBeTrue() {
+ final ContextualWifiSlice wifiSlice = new ContextualWifiSlice(mContext);
+ final Slice slice = wifiSlice.getSlice();
+ doReturn(slice).when(mEligibleCardChecker).bindSlice(any(Uri.class));
+
+ mEligibleCardChecker.isCardEligibleToDisplay(getContextualCard(TEST_SLICE_URI));
+
+ assertThat(mEligibleCardChecker.mCard.hasInlineAction()).isTrue();
+ }
+
+ @Test
+ public void isCardEligibleToDisplay_notToggleSlice_hasInlineActionShouldBeFalse() {
+ final EmergencyInfoSlice emergencyInfoSlice = new EmergencyInfoSlice(mContext);
+ final Slice slice = emergencyInfoSlice.getSlice();
+ doReturn(slice).when(mEligibleCardChecker).bindSlice(any(Uri.class));
+
+ mEligibleCardChecker.isCardEligibleToDisplay(getContextualCard(TEST_SLICE_URI));
+
+ assertThat(mEligibleCardChecker.mCard.hasInlineAction()).isFalse();
+ }
+
+ @Test
+ public void isCardEligibleToDisplay_customCard_returnTrue() {
+ final ContextualCard customCard = new ContextualCard.Builder()
+ .setName("custom_card")
+ .setCardType(ContextualCard.CardType.DEFAULT)
+ .setTitleText("custom_title")
+ .setSummaryText("custom_summary")
+ .build();
+
+ assertThat(mEligibleCardChecker.isCardEligibleToDisplay(customCard)).isTrue();
+ }
+
+ @Test
+ public void isCardEligibleToDisplay_invalidScheme_returnFalse() {
+ final Uri sliceUri = Uri.parse("contet://com.android.settings.slices/action/flashlight");
+
+ assertThat(mEligibleCardChecker.isCardEligibleToDisplay(getContextualCard(sliceUri)))
+ .isFalse();
+ }
+
+ @Test
+ public void isCardEligibleToDisplay_invalidRankingScore_returnFalse() {
+ final ContextualCard card = new ContextualCard.Builder()
+ .setName("test_card")
+ .setCardType(ContextualCard.CardType.SLICE)
+ .setSliceUri(CustomSliceRegistry.FLASHLIGHT_SLICE_URI)
+ .setRankingScore(-1)
+ .build();
+
+ assertThat(mEligibleCardChecker.isCardEligibleToDisplay(card))
+ .isFalse();
+ }
+
+ @Test
+ public void isCardEligibleToDisplay_nullSlice_returnFalse() {
+ doReturn(null).when(mEligibleCardChecker).bindSlice(any(Uri.class));
+
+ assertThat(mEligibleCardChecker.isCardEligibleToDisplay(getContextualCard(TEST_SLICE_URI)))
+ .isFalse();
+ }
+
+ @Test
+ public void isCardEligibleToDisplay_errorSlice_returnFalse() {
+ final Slice slice = new Slice.Builder(TEST_SLICE_URI)
+ .addHints(HINT_ERROR).build();
+ doReturn(slice).when(mEligibleCardChecker).bindSlice(any(Uri.class));
+
+ assertThat(mEligibleCardChecker.isCardEligibleToDisplay(getContextualCard(TEST_SLICE_URI)))
+ .isFalse();
+ }
+
+ private ContextualCard getContextualCard(Uri sliceUri) {
+ return new ContextualCard.Builder()
+ .setName("test_card")
+ .setRankingScore(0.5)
+ .setCardType(ContextualCard.CardType.SLICE)
+ .setSliceUri(sliceUri)
+ .build();
+ }
+}
diff --git a/tests/robotests/src/com/android/settings/network/MobileNetworkSummaryControllerTest.java b/tests/robotests/src/com/android/settings/network/MobileNetworkSummaryControllerTest.java
index b8ba63c..a623850 100644
--- a/tests/robotests/src/com/android/settings/network/MobileNetworkSummaryControllerTest.java
+++ b/tests/robotests/src/com/android/settings/network/MobileNetworkSummaryControllerTest.java
@@ -34,6 +34,7 @@
import android.os.UserManager;
import android.provider.Settings;
import android.telephony.SubscriptionInfo;
+import android.telephony.SubscriptionManager;
import android.telephony.TelephonyManager;
import android.telephony.euicc.EuiccManager;
import android.text.TextUtils;
@@ -151,8 +152,11 @@
mPreference.getOnPreferenceClickListener().onPreferenceClick(mPreference);
final ArgumentCaptor<Intent> intentCaptor = ArgumentCaptor.forClass(Intent.class);
verify(mContext).startActivity(intentCaptor.capture());
- assertThat(intentCaptor.getValue().getComponent().getClassName()).isEqualTo(
+ Intent intent = intentCaptor.getValue();
+ assertThat(intent.getComponent().getClassName()).isEqualTo(
MobileNetworkActivity.class.getName());
+ assertThat(intent.getIntExtra(Settings.EXTRA_SUB_ID,
+ SubscriptionManager.INVALID_SUBSCRIPTION_ID)).isEqualTo(sub1.getSubscriptionId());
}
@Test
diff --git a/tests/robotests/src/com/android/settings/network/SubscriptionUtilTest.java b/tests/robotests/src/com/android/settings/network/SubscriptionUtilTest.java
index c074466..28a390d 100644
--- a/tests/robotests/src/com/android/settings/network/SubscriptionUtilTest.java
+++ b/tests/robotests/src/com/android/settings/network/SubscriptionUtilTest.java
@@ -16,14 +16,21 @@
package com.android.settings.network;
+import static android.telephony.UiccSlotInfo.CARD_STATE_INFO_ABSENT;
+import static android.telephony.UiccSlotInfo.CARD_STATE_INFO_PRESENT;
+
import static com.google.common.truth.Truth.assertThat;
import static org.mockito.ArgumentMatchers.anyBoolean;
+import static org.mockito.Mockito.doReturn;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;
+import android.content.Context;
import android.telephony.SubscriptionInfo;
import android.telephony.SubscriptionManager;
+import android.telephony.TelephonyManager;
+import android.telephony.UiccSlotInfo;
import org.junit.Before;
import org.junit.Test;
@@ -39,17 +46,25 @@
@RunWith(RobolectricTestRunner.class)
public class SubscriptionUtilTest {
@Mock
- private SubscriptionManager mManager;
+ private Context mContext;
+ @Mock
+ private SubscriptionManager mSubMgr;
+ @Mock
+ private TelephonyManager mTelMgr;
+
@Before
public void setUp() {
MockitoAnnotations.initMocks(this);
+ doReturn(mSubMgr).when(mContext).getSystemService(SubscriptionManager.class);
+ doReturn(mTelMgr).when(mContext).getSystemService(TelephonyManager.class);
+ when(mTelMgr.getUiccSlotsInfo()).thenReturn(null);
}
@Test
public void getAvailableSubscriptions_nullInfoFromSubscriptionManager_nonNullResult() {
- when(mManager.getSelectableSubscriptionInfoList()).thenReturn(null);
- final List<SubscriptionInfo> subs = SubscriptionUtil.getAvailableSubscriptions(mManager);
+ when(mSubMgr.getSelectableSubscriptionInfoList()).thenReturn(null);
+ final List<SubscriptionInfo> subs = SubscriptionUtil.getAvailableSubscriptions(mContext);
assertThat(subs).isNotNull();
assertThat(subs).isEmpty();
}
@@ -58,8 +73,8 @@
public void getAvailableSubscriptions_oneSubscription_oneResult() {
final SubscriptionInfo info = mock(SubscriptionInfo.class);
when(info.getMncString()).thenReturn("fake1234");
- when(mManager.getSelectableSubscriptionInfoList()).thenReturn(Arrays.asList(info));
- final List<SubscriptionInfo> subs = SubscriptionUtil.getAvailableSubscriptions(mManager);
+ when(mSubMgr.getSelectableSubscriptionInfoList()).thenReturn(Arrays.asList(info));
+ final List<SubscriptionInfo> subs = SubscriptionUtil.getAvailableSubscriptions(mContext);
assertThat(subs).isNotNull();
assertThat(subs).hasSize(1);
}
@@ -70,8 +85,8 @@
final SubscriptionInfo info2 = mock(SubscriptionInfo.class);
when(info1.getMncString()).thenReturn("fake1234");
when(info2.getMncString()).thenReturn("fake5678");
- when(mManager.getSelectableSubscriptionInfoList()).thenReturn(Arrays.asList(info1, info2));
- final List<SubscriptionInfo> subs = SubscriptionUtil.getAvailableSubscriptions(mManager);
+ when(mSubMgr.getSelectableSubscriptionInfoList()).thenReturn(Arrays.asList(info1, info2));
+ final List<SubscriptionInfo> subs = SubscriptionUtil.getAvailableSubscriptions(mContext);
assertThat(subs).isNotNull();
assertThat(subs).hasSize(2);
}
@@ -83,9 +98,9 @@
final SubscriptionInfo info3 = mock(SubscriptionInfo.class);
when(info1.getSubscriptionId()).thenReturn(1);
when(info1.getMncString()).thenReturn("fake1234");
- when(mManager.getSelectableSubscriptionInfoList()).thenReturn(
+ when(mSubMgr.getSelectableSubscriptionInfoList()).thenReturn(
new ArrayList<>(Arrays.asList(info1, info2, info3)));
- final List<SubscriptionInfo> subs = SubscriptionUtil.getAvailableSubscriptions(mManager);
+ final List<SubscriptionInfo> subs = SubscriptionUtil.getAvailableSubscriptions(mContext);
assertThat(subs).isNotNull();
assertThat(subs).hasSize(1);
assertThat(subs.get(0).getSubscriptionId()).isEqualTo(1);
@@ -101,9 +116,9 @@
when(info1.getMncString()).thenReturn("fake1234");
when(info4.getSubscriptionId()).thenReturn(4);
when(info4.getMncString()).thenReturn("fake5678");
- when(mManager.getSelectableSubscriptionInfoList()).thenReturn(new ArrayList<>(
+ when(mSubMgr.getSelectableSubscriptionInfoList()).thenReturn(new ArrayList<>(
Arrays.asList(info1, info2, info3, info4)));
- final List<SubscriptionInfo> subs = SubscriptionUtil.getAvailableSubscriptions(mManager);
+ final List<SubscriptionInfo> subs = SubscriptionUtil.getAvailableSubscriptions(mContext);
assertThat(subs).isNotNull();
assertThat(subs).hasSize(2);
assertThat(subs.get(0).getSubscriptionId()).isEqualTo(1);
@@ -111,9 +126,86 @@
}
@Test
+ public void getAvailableSubscriptions_oneSelectableOneDisabledPSim_twoResults() {
+ final SubscriptionInfo info1 = mock(SubscriptionInfo.class);
+ final SubscriptionInfo info2 = mock(SubscriptionInfo.class);
+
+ when(info1.getSubscriptionId()).thenReturn(111);
+ when(info1.getMncString()).thenReturn("fake111");
+ when(info1.getSimSlotIndex()).thenReturn(-1);
+ when(info1.getCardString()).thenReturn("info1_cardid");
+
+ when(info2.getSubscriptionId()).thenReturn(222);
+ when(info2.getMncString()).thenReturn("fake222");
+ when(info2.getSimSlotIndex()).thenReturn(0);
+ when(info2.getCardString()).thenReturn("info2_cardid");
+
+ when(mSubMgr.getSelectableSubscriptionInfoList()).thenReturn(Arrays.asList(info1));
+ when(mSubMgr.getAllSubscriptionInfoList()).thenReturn(Arrays.asList(info1, info2));
+
+ final UiccSlotInfo info2slot = mock(UiccSlotInfo.class);
+ when(info2slot.getCardStateInfo()).thenReturn(CARD_STATE_INFO_PRESENT);
+ when(info2slot.getLogicalSlotIdx()).thenReturn(0);
+ when(info2slot.getCardId()).thenReturn("info2_cardid");
+
+ final UiccSlotInfo[] slotInfos = {info2slot};
+ when(mTelMgr.getUiccSlotsInfo()).thenReturn(slotInfos);
+
+ final List<SubscriptionInfo> subs = SubscriptionUtil.getAvailableSubscriptions(mContext);
+ assertThat(subs).hasSize(2);
+ assertThat(subs.get(0).getSubscriptionId()).isEqualTo(111);
+ assertThat(subs.get(1).getSubscriptionId()).isEqualTo(222);
+ }
+
+
+ @Test
+ public void getAvailableSubscriptions_oneSelectableTwoDisabledPSimsOneAbsent_twoResults() {
+ final SubscriptionInfo info1 = mock(SubscriptionInfo.class);
+ final SubscriptionInfo info2 = mock(SubscriptionInfo.class);
+ final SubscriptionInfo info3 = mock(SubscriptionInfo.class);
+
+ when(info1.getSubscriptionId()).thenReturn(111);
+ when(info1.getMncString()).thenReturn("fake111");
+ when(info1.getSimSlotIndex()).thenReturn(-1);
+ when(info1.getCardString()).thenReturn("info1_cardid");
+
+ when(info2.getSubscriptionId()).thenReturn(222);
+ when(info2.getMncString()).thenReturn("fake222");
+ when(info2.getSimSlotIndex()).thenReturn(-1);
+ when(info2.getCardString()).thenReturn("info2_cardid");
+
+ when(info3.getSubscriptionId()).thenReturn(333);
+ when(info3.getMncString()).thenReturn("fake333");
+ when(info3.getSimSlotIndex()).thenReturn(0);
+ when(info3.getCardString()).thenReturn("info3_cardid");
+
+ when(mSubMgr.getSelectableSubscriptionInfoList()).thenReturn(Arrays.asList(info1));
+ when(mSubMgr.getAllSubscriptionInfoList()).thenReturn(Arrays.asList(info1, info2, info3));
+
+ final UiccSlotInfo info2slot = mock(UiccSlotInfo.class);
+ final UiccSlotInfo info3slot = mock(UiccSlotInfo.class);
+
+ when(info2slot.getLogicalSlotIdx()).thenReturn(-1);
+ when(info2slot.getCardStateInfo()).thenReturn(CARD_STATE_INFO_ABSENT);
+ when(info2slot.getCardId()).thenReturn("info2_cardid");
+
+ when(info3slot.getLogicalSlotIdx()).thenReturn(0);
+ when(info3slot.getCardStateInfo()).thenReturn(CARD_STATE_INFO_PRESENT);
+ when(info3slot.getCardId()).thenReturn("info3_cardid");
+
+ final UiccSlotInfo[] slotInfos = {info2slot, info3slot};
+ when(mTelMgr.getUiccSlotsInfo()).thenReturn(slotInfos);
+
+ final List<SubscriptionInfo> subs = SubscriptionUtil.getAvailableSubscriptions(mContext);
+ assertThat(subs).hasSize(2);
+ assertThat(subs.get(0).getSubscriptionId()).isEqualTo(111);
+ assertThat(subs.get(1).getSubscriptionId()).isEqualTo(333);
+ }
+
+ @Test
public void getActiveSubscriptions_nullInfoFromSubscriptionManager_nonNullResult() {
- when(mManager.getActiveSubscriptionInfoList(anyBoolean())).thenReturn(null);
- final List<SubscriptionInfo> subs = SubscriptionUtil.getActiveSubscriptions(mManager);
+ when(mSubMgr.getActiveSubscriptionInfoList(anyBoolean())).thenReturn(null);
+ final List<SubscriptionInfo> subs = SubscriptionUtil.getActiveSubscriptions(mSubMgr);
assertThat(subs).isNotNull();
assertThat(subs).isEmpty();
}
@@ -121,8 +213,8 @@
@Test
public void getActiveSubscriptions_oneSubscription_oneResult() {
final SubscriptionInfo info = mock(SubscriptionInfo.class);
- when(mManager.getActiveSubscriptionInfoList(anyBoolean())).thenReturn(Arrays.asList(info));
- final List<SubscriptionInfo> subs = SubscriptionUtil.getActiveSubscriptions(mManager);
+ when(mSubMgr.getActiveSubscriptionInfoList(anyBoolean())).thenReturn(Arrays.asList(info));
+ final List<SubscriptionInfo> subs = SubscriptionUtil.getActiveSubscriptions(mSubMgr);
assertThat(subs).isNotNull();
assertThat(subs).hasSize(1);
}
@@ -131,9 +223,9 @@
public void getActiveSubscriptions_twoSubscriptions_twoResults() {
final SubscriptionInfo info1 = mock(SubscriptionInfo.class);
final SubscriptionInfo info2 = mock(SubscriptionInfo.class);
- when(mManager.getActiveSubscriptionInfoList(anyBoolean())).thenReturn(
+ when(mSubMgr.getActiveSubscriptionInfoList(anyBoolean())).thenReturn(
Arrays.asList(info1, info2));
- final List<SubscriptionInfo> subs = SubscriptionUtil.getActiveSubscriptions(mManager);
+ final List<SubscriptionInfo> subs = SubscriptionUtil.getActiveSubscriptions(mSubMgr);
assertThat(subs).isNotNull();
assertThat(subs).hasSize(2);
}
diff --git a/tests/robotests/src/com/android/settings/network/telephony/MobileNetworkActivityTest.java b/tests/robotests/src/com/android/settings/network/telephony/MobileNetworkActivityTest.java
index 68f8c91..f38f2a2 100644
--- a/tests/robotests/src/com/android/settings/network/telephony/MobileNetworkActivityTest.java
+++ b/tests/robotests/src/com/android/settings/network/telephony/MobileNetworkActivityTest.java
@@ -33,15 +33,18 @@
import android.provider.Settings;
import android.telephony.SubscriptionInfo;
import android.telephony.SubscriptionManager;
+import android.telephony.TelephonyManager;
import android.view.Menu;
import android.view.View;
import com.android.internal.telephony.TelephonyIntents;
import com.android.internal.view.menu.ContextMenuBuilder;
import com.android.settings.R;
+import com.android.settings.network.SubscriptionUtil;
import com.google.android.material.bottomnavigation.BottomNavigationView;
+import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
@@ -52,6 +55,7 @@
import org.robolectric.RuntimeEnvironment;
import java.util.ArrayList;
+import java.util.Arrays;
import java.util.List;
import androidx.fragment.app.Fragment;
@@ -73,6 +77,8 @@
@Mock
private SubscriptionManager mSubscriptionManager;
@Mock
+ private TelephonyManager mTelephonyManager;
+ @Mock
private SubscriptionInfo mSubscriptionInfo;
@Mock
private SubscriptionInfo mSubscriptionInfo2;
@@ -99,6 +105,8 @@
doReturn(mSubscriptionManager).when(mMobileNetworkActivity).getSystemService(
SubscriptionManager.class);
+ doReturn(mTelephonyManager).when(mMobileNetworkActivity).getSystemService(
+ TelephonyManager.class);
doReturn(mBottomNavigationView).when(mMobileNetworkActivity).findViewById(R.id.bottom_nav);
doReturn(mFragmentManager).when(mMobileNetworkActivity).getSupportFragmentManager();
doReturn(mFragmentTransaction).when(mFragmentManager).beginTransaction();
@@ -108,6 +116,11 @@
MOBILE_SETTINGS_TAG + CURRENT_SUB_ID);
}
+ @After
+ public void tearDown() {
+ SubscriptionUtil.setAvailableSubscriptionsForTesting(null);
+ }
+
@Test
public void updateBottomNavigationView_oneSubscription_shouldBeGone() {
mSubscriptionInfos.add(mSubscriptionInfo);
@@ -169,7 +182,7 @@
doReturn(intent).when(mMobileNetworkActivity).getIntent();
mSubscriptionInfos.add(mSubscriptionInfo);
mSubscriptionInfos.add(mSubscriptionInfo2);
- doReturn(mSubscriptionInfos).when(mSubscriptionManager).getSelectableSubscriptionInfoList();
+ SubscriptionUtil.setAvailableSubscriptionsForTesting(mSubscriptionInfos);
doReturn(true).when(mSubscriptionManager).isActiveSubscriptionId(CURRENT_SUB_ID);
assertThat(mMobileNetworkActivity.getSubscriptionId()).isEqualTo(CURRENT_SUB_ID);
diff --git a/tests/robotests/src/com/android/settings/network/telephony/MobileNetworkSwitchControllerTest.java b/tests/robotests/src/com/android/settings/network/telephony/MobileNetworkSwitchControllerTest.java
index 6d85826..a10227f 100644
--- a/tests/robotests/src/com/android/settings/network/telephony/MobileNetworkSwitchControllerTest.java
+++ b/tests/robotests/src/com/android/settings/network/telephony/MobileNetworkSwitchControllerTest.java
@@ -20,6 +20,7 @@
import static org.mockito.ArgumentMatchers.anyBoolean;
import static org.mockito.ArgumentMatchers.eq;
+import static org.mockito.Mockito.doReturn;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.spy;
import static org.mockito.Mockito.verify;
@@ -99,13 +100,22 @@
}
@Test
- public void displayPreference_onlyOneSubscription_switchBarHidden() {
+ public void displayPreference_oneEnabledSubscription_switchBarHidden() {
+ doReturn(true).when(mSubscriptionManager).isSubscriptionEnabled(mSubId);
SubscriptionUtil.setAvailableSubscriptionsForTesting(Arrays.asList(mSubscription));
mController.displayPreference(mScreen);
assertThat(mSwitchBar.isShowing()).isFalse();
}
@Test
+ public void displayPreference_oneDisabledSubscription_switchBarNotHidden() {
+ doReturn(false).when(mSubscriptionManager).isSubscriptionEnabled(mSubId);
+ SubscriptionUtil.setAvailableSubscriptionsForTesting(Arrays.asList(mSubscription));
+ mController.displayPreference(mScreen);
+ assertThat(mSwitchBar.isShowing()).isTrue();
+ }
+
+ @Test
public void displayPreference_subscriptionEnabled_switchIsOn() {
when(mSubscriptionManager.isSubscriptionEnabled(mSubId)).thenReturn(true);
mController.displayPreference(mScreen);
diff --git a/tests/robotests/src/com/android/settings/wifi/details/WifiDetailPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/wifi/details/WifiDetailPreferenceControllerTest.java
index 904fdd8..d4ce481 100644
--- a/tests/robotests/src/com/android/settings/wifi/details/WifiDetailPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/wifi/details/WifiDetailPreferenceControllerTest.java
@@ -1653,7 +1653,7 @@
displayAndResume();
// change as not in range
- when(mockAccessPoint.matches(any(WifiConfiguration.class))).thenReturn(false);
+ when(mockAccessPoint.matches(any(AccessPoint.class))).thenReturn(false);
boolean changed = mController.updateAccessPoint();
assertThat(changed).isTrue();
@@ -1666,7 +1666,7 @@
displayAndResume();
// change as in range
- when(mockAccessPoint.matches(any(WifiConfiguration.class))).thenReturn(true);
+ when(mockAccessPoint.matches(any(AccessPoint.class))).thenReturn(true);
boolean changed = mController.updateAccessPoint();
assertThat(changed).isTrue();