Merge "Add a boolean flag to show or hide the device name in About device."
diff --git a/Android.mk b/Android.mk
index a573378..6b0d077 100644
--- a/Android.mk
+++ b/Android.mk
@@ -25,13 +25,10 @@
androidx.slice_slice-core \
androidx.slice_slice-view \
androidx.core_core \
- androidx.legacy_legacy-support-v4 \
- androidx.legacy_legacy-support-v13 \
androidx.appcompat_appcompat \
androidx.cardview_cardview \
androidx.preference_preference \
androidx.recyclerview_recyclerview \
- androidx.legacy_legacy-preference-v14 \
com.google.android.material_material \
LOCAL_JAVA_LIBRARIES := \
diff --git a/res/xml/my_device_info.xml b/res/xml/my_device_info.xml
index b70b613..22c1844 100644
--- a/res/xml/my_device_info.xml
+++ b/res/xml/my_device_info.xml
@@ -133,6 +133,14 @@
android:summary="@string/summary_placeholder"
android:selectable="false"/>
+ <!-- Device up time -->
+ <Preference
+ android:key="up_time"
+ android:order="37"
+ android:title="@string/status_up_time"
+ android:summary="@string/summary_placeholder"
+ android:selectable="false" />
+
<!-- Safety & regulatory manual -->
<Preference
android:key="safety_info"
diff --git a/src/com/android/settings/dashboard/CategoryManager.java b/src/com/android/settings/dashboard/CategoryManager.java
index f000458..4072072 100644
--- a/src/com/android/settings/dashboard/CategoryManager.java
+++ b/src/com/android/settings/dashboard/CategoryManager.java
@@ -39,8 +39,6 @@
public class CategoryManager {
- public static final String SETTING_PKG = "com.android.settings";
-
private static final String TAG = "CategoryManager";
private static CategoryManager sInstance;
diff --git a/src/com/android/settings/dashboard/DashboardAdapter.java b/src/com/android/settings/dashboard/DashboardAdapter.java
index a76414d..d93f2ed 100644
--- a/src/com/android/settings/dashboard/DashboardAdapter.java
+++ b/src/com/android/settings/dashboard/DashboardAdapter.java
@@ -19,6 +19,7 @@
import android.content.Context;
import android.content.pm.PackageManager;
import android.graphics.drawable.Drawable;
+import android.graphics.drawable.Icon;
import android.os.Bundle;
import android.service.settings.suggestions.Suggestion;
import android.text.TextUtils;
@@ -314,8 +315,9 @@
@VisibleForTesting
void onBindTile(DashboardItemHolder holder, Tile tile) {
- Drawable icon = mCache.getIcon(tile.icon);
- if (!TextUtils.equals(tile.icon.getResPackage(), mContext.getPackageName())
+ Icon tileIcon = tile.getIcon();
+ Drawable icon = mCache.getIcon(tileIcon);
+ if (!TextUtils.equals(tileIcon.getResPackage(), mContext.getPackageName())
&& !(icon instanceof RoundedHomepageIcon)) {
icon = new RoundedHomepageIcon(mContext, icon);
try {
@@ -324,7 +326,7 @@
TileUtils.META_DATA_PREFERENCE_ICON_BACKGROUND_HINT, 0 /* default */);
if (colorRes != 0) {
final int bgColor = mContext.getPackageManager()
- .getResourcesForApplication(tile.icon.getResPackage())
+ .getResourcesForApplication(tileIcon.getResPackage())
.getColor(colorRes, null /* theme */);
((RoundedHomepageIcon) icon).setBackgroundColor(bgColor);
}
@@ -332,7 +334,7 @@
} catch (PackageManager.NameNotFoundException e) {
Log.e(TAG, "Failed to set background color for " + tile.intent.getPackage());
}
- mCache.updateIcon(tile.icon, icon);
+ mCache.updateIcon(tileIcon, icon);
}
holder.icon.setImageDrawable(icon);
holder.title.setText(tile.title);
diff --git a/src/com/android/settings/dashboard/DashboardFeatureProviderImpl.java b/src/com/android/settings/dashboard/DashboardFeatureProviderImpl.java
index 46beac4..1f7a011 100644
--- a/src/com/android/settings/dashboard/DashboardFeatureProviderImpl.java
+++ b/src/com/android/settings/dashboard/DashboardFeatureProviderImpl.java
@@ -238,8 +238,9 @@
@VisibleForTesting
void bindIcon(Preference preference, Tile tile) {
- if (tile.icon != null) {
- preference.setIcon(tile.icon.loadDrawable(preference.getContext()));
+ final Icon tileIcon = tile.getIcon();
+ if (tileIcon != null) {
+ preference.setIcon(tileIcon.loadDrawable(preference.getContext()));
} else if (tile.metaData != null
&& tile.metaData.containsKey(META_DATA_PREFERENCE_ICON_URI)) {
ThreadUtils.postOnBackgroundThread(() -> {
diff --git a/src/com/android/settings/dashboard/DashboardFragment.java b/src/com/android/settings/dashboard/DashboardFragment.java
index 2a962c1..aa91b2f 100644
--- a/src/com/android/settings/dashboard/DashboardFragment.java
+++ b/src/com/android/settings/dashboard/DashboardFragment.java
@@ -256,7 +256,7 @@
@VisibleForTesting
boolean tintTileIcon(Tile tile) {
- if (tile.icon == null) {
+ if (tile.getIcon() == null) {
return false;
}
// First check if the tile has set the icon tintable metadata.
@@ -330,7 +330,7 @@
/**
* Refresh preference items backed by DashboardCategory.
*/
- @VisibleForTesting(otherwise = VisibleForTesting.PRIVATE)
+ @VisibleForTesting
void refreshDashboardTiles(final String TAG) {
final PreferenceScreen screen = getPreferenceScreen();
@@ -370,7 +370,7 @@
continue;
}
if (tintTileIcon(tile)) {
- tile.icon.setTint(tintColor);
+ tile.getIcon().setTint(tintColor);
}
if (mDashboardTilePrefKeys.contains(key)) {
// Have the key already, will rebind.
diff --git a/src/com/android/settings/deviceinfo/UptimePreferenceController.java b/src/com/android/settings/deviceinfo/UptimePreferenceController.java
new file mode 100644
index 0000000..4f02594
--- /dev/null
+++ b/src/com/android/settings/deviceinfo/UptimePreferenceController.java
@@ -0,0 +1,35 @@
+/*
+ * Copyright (C) 2018 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.deviceinfo;
+
+import android.content.Context;
+
+import com.android.settings.core.PreferenceControllerMixin;
+import com.android.settingslib.core.lifecycle.Lifecycle;
+import com.android.settingslib.deviceinfo.AbstractUptimePreferenceController;
+
+/**
+ * Concrete subclass of uptime preference controller
+ */
+public class UptimePreferenceController extends AbstractUptimePreferenceController
+ implements PreferenceControllerMixin {
+ public UptimePreferenceController(Context context, Lifecycle lifecycle) {
+ super(context, lifecycle);
+ }
+
+ // This space intentionally left blank
+}
\ No newline at end of file
diff --git a/src/com/android/settings/deviceinfo/aboutphone/MyDeviceInfoFragment.java b/src/com/android/settings/deviceinfo/aboutphone/MyDeviceInfoFragment.java
index 976a254..29acf45 100644
--- a/src/com/android/settings/deviceinfo/aboutphone/MyDeviceInfoFragment.java
+++ b/src/com/android/settings/deviceinfo/aboutphone/MyDeviceInfoFragment.java
@@ -46,6 +46,7 @@
import com.android.settings.deviceinfo.PhoneNumberPreferenceController;
import com.android.settings.deviceinfo.RegulatoryInfoPreferenceController;
import com.android.settings.deviceinfo.SafetyInfoPreferenceController;
+import com.android.settings.deviceinfo.UptimePreferenceController;
import com.android.settings.deviceinfo.WifiMacAddressPreferenceController;
import com.android.settings.deviceinfo.firmwareversion.FirmwareVersionPreferenceController;
import com.android.settings.deviceinfo.imei.ImeiInfoPreferenceController;
@@ -134,6 +135,7 @@
controllers.add(new FccEquipmentIdPreferenceController(context));
controllers.add(
new BuildNumberPreferenceController(context, activity, fragment, lifecycle));
+ controllers.add(new UptimePreferenceController(context, lifecycle));
return controllers;
}
diff --git a/src/com/android/settings/network/NetworkDashboardFragment.java b/src/com/android/settings/network/NetworkDashboardFragment.java
index 27e1a98..d5ef9aa 100644
--- a/src/com/android/settings/network/NetworkDashboardFragment.java
+++ b/src/com/android/settings/network/NetworkDashboardFragment.java
@@ -24,6 +24,7 @@
import android.icu.text.ListFormatter;
import android.provider.SearchIndexableResource;
import android.text.BidiFormatter;
+import android.text.TextUtils;
import android.util.Log;
import com.android.internal.logging.nano.MetricsProto;
@@ -153,21 +154,25 @@
private final Context mContext;
private final SummaryLoader mSummaryLoader;
+ private final WifiMasterSwitchPreferenceController mWifiPreferenceController;
private final MobileNetworkPreferenceController mMobileNetworkPreferenceController;
private final TetherPreferenceController mTetherPreferenceController;
public SummaryProvider(Context context, SummaryLoader summaryLoader) {
this(context, summaryLoader,
+ new WifiMasterSwitchPreferenceController(context, null),
new MobileNetworkPreferenceController(context),
new TetherPreferenceController(context, null /* lifecycle */));
}
@VisibleForTesting(otherwise = VisibleForTesting.NONE)
SummaryProvider(Context context, SummaryLoader summaryLoader,
+ WifiMasterSwitchPreferenceController wifiPreferenceController,
MobileNetworkPreferenceController mobileNetworkPreferenceController,
TetherPreferenceController tetherPreferenceController) {
mContext = context;
mSummaryLoader = summaryLoader;
+ mWifiPreferenceController = wifiPreferenceController;
mMobileNetworkPreferenceController = mobileNetworkPreferenceController;
mTetherPreferenceController = tetherPreferenceController;
}
@@ -176,20 +181,27 @@
@Override
public void setListening(boolean listening) {
if (listening) {
- final List<String> summaries = new ArrayList<>();
+ final String wifiSummary = BidiFormatter.getInstance()
+ .unicodeWrap(mContext.getString(R.string.wifi_settings_title));
+ final String mobileSummary = mContext.getString(
+ R.string.network_dashboard_summary_mobile);
+ final String dataUsageSummary = mContext.getString(
+ R.string.network_dashboard_summary_data_usage);
+ final String hotspotSummary = mContext.getString(
+ R.string.network_dashboard_summary_hotspot);
- summaries.add(BidiFormatter.getInstance()
- .unicodeWrap(mContext.getString(R.string.wifi_settings_title)));
- if (mMobileNetworkPreferenceController.isAvailable()) {
- summaries.add(mContext.getString(
- R.string.network_dashboard_summary_mobile));
+ final List<String> summaries = new ArrayList<>();
+ if (mWifiPreferenceController.isAvailable() && !TextUtils.isEmpty(wifiSummary)) {
+ summaries.add(wifiSummary);
}
- final String dataUsageSettingSummary = mContext.getString(
- R.string.network_dashboard_summary_data_usage);
- summaries.add(dataUsageSettingSummary);
- if (mTetherPreferenceController.isAvailable()) {
- summaries.add(mContext.getString(
- R.string.network_dashboard_summary_hotspot));
+ if (mMobileNetworkPreferenceController.isAvailable() && !TextUtils.isEmpty(mobileSummary)) {
+ summaries.add(mobileSummary);
+ }
+ if (!TextUtils.isEmpty(dataUsageSummary)) {
+ summaries.add(dataUsageSummary);
+ }
+ if (mTetherPreferenceController.isAvailable() && !TextUtils.isEmpty(hotspotSummary)) {
+ summaries.add(hotspotSummary);
}
mSummaryLoader.setSummary(this, ListFormatter.getInstance().format(summaries));
}
diff --git a/src/com/android/settings/security/ChangeScreenLockPreferenceController.java b/src/com/android/settings/security/ChangeScreenLockPreferenceController.java
index 156e230..1284b6a 100644
--- a/src/com/android/settings/security/ChangeScreenLockPreferenceController.java
+++ b/src/com/android/settings/security/ChangeScreenLockPreferenceController.java
@@ -84,8 +84,7 @@
@Override
public void updateState(Preference preference) {
if (mPreference != null && mPreference instanceof GearPreference) {
- if (mLockPatternUtils.isSecure(mUserId)
- || !mLockPatternUtils.isLockScreenDisabled(mUserId)) {
+ if (mLockPatternUtils.isSecure(mUserId)) {
((GearPreference) mPreference).setOnGearClickListener(this);
} else {
((GearPreference) mPreference).setOnGearClickListener(null);
diff --git a/tests/robotests/src/com/android/settings/accounts/AccountDetailDashboardFragmentTest.java b/tests/robotests/src/com/android/settings/accounts/AccountDetailDashboardFragmentTest.java
index 36b6b80..33ac5b6 100644
--- a/tests/robotests/src/com/android/settings/accounts/AccountDetailDashboardFragmentTest.java
+++ b/tests/robotests/src/com/android/settings/accounts/AccountDetailDashboardFragmentTest.java
@@ -16,6 +16,7 @@
package com.android.settings.accounts;
import static com.google.common.truth.Truth.assertThat;
+
import static org.mockito.Matchers.any;
import static org.mockito.Matchers.anyInt;
import static org.mockito.Mockito.mock;
@@ -25,11 +26,14 @@
import android.app.Activity;
import android.content.Context;
import android.content.Intent;
+import android.content.pm.ActivityInfo;
import android.content.pm.PackageManager;
import android.content.pm.ResolveInfo;
import android.os.Bundle;
import android.os.UserHandle;
+import androidx.preference.Preference;
+
import com.android.internal.logging.nano.MetricsProto;
import com.android.settings.dashboard.DashboardFeatureProviderImpl;
import com.android.settings.testutils.SettingsRobolectricTestRunner;
@@ -44,8 +48,6 @@
import org.robolectric.Shadows;
import org.robolectric.util.ReflectionHelpers;
-import androidx.preference.Preference;
-
@RunWith(SettingsRobolectricTestRunner.class)
public class AccountDetailDashboardFragmentTest {
@@ -72,12 +74,12 @@
@Test
public void testCategory_isAccountDetail() {
assertThat(new AccountDetailDashboardFragment().getCategoryKey())
- .isEqualTo(CategoryKey.CATEGORY_ACCOUNT_DETAIL);
+ .isEqualTo(CategoryKey.CATEGORY_ACCOUNT_DETAIL);
}
@Test
public void refreshDashboardTiles_HasAccountType_shouldDisplay() {
- final Tile tile = new Tile();
+ final Tile tile = new Tile(new ActivityInfo());
final Bundle metaData = new Bundle();
metaData.putString(METADATA_CATEGORY, CategoryKey.CATEGORY_ACCOUNT_DETAIL);
metaData.putString(METADATA_ACCOUNT_TYPE, "com.abc");
@@ -88,7 +90,7 @@
@Test
public void refreshDashboardTiles_NoAccountType_shouldNotDisplay() {
- final Tile tile = new Tile();
+ final Tile tile = new Tile(new ActivityInfo());
final Bundle metaData = new Bundle();
metaData.putString(METADATA_CATEGORY, CategoryKey.CATEGORY_ACCOUNT_DETAIL);
tile.metaData = metaData;
@@ -98,7 +100,7 @@
@Test
public void refreshDashboardTiles_OtherAccountType_shouldNotDisplay() {
- final Tile tile = new Tile();
+ final Tile tile = new Tile(new ActivityInfo());
final Bundle metaData = new Bundle();
metaData.putString(METADATA_CATEGORY, CategoryKey.CATEGORY_ACCOUNT_DETAIL);
metaData.putString(METADATA_ACCOUNT_TYPE, "com.other");
@@ -114,9 +116,9 @@
final PackageManager packageManager = mock(PackageManager.class);
ReflectionHelpers.setField(dashboardFeatureProvider, "mPackageManager", packageManager);
when(packageManager.resolveActivity(any(Intent.class), anyInt()))
- .thenReturn(mock(ResolveInfo.class));
+ .thenReturn(mock(ResolveInfo.class));
- final Tile tile = new Tile();
+ final Tile tile = new Tile(new ActivityInfo());
tile.key = "key";
tile.metaData = new Bundle();
tile.metaData.putString(METADATA_CATEGORY, CategoryKey.CATEGORY_ACCOUNT);
diff --git a/tests/robotests/src/com/android/settings/dashboard/CategoryManagerTest.java b/tests/robotests/src/com/android/settings/dashboard/CategoryManagerTest.java
index e22f07d..3bb4a65 100644
--- a/tests/robotests/src/com/android/settings/dashboard/CategoryManagerTest.java
+++ b/tests/robotests/src/com/android/settings/dashboard/CategoryManagerTest.java
@@ -21,6 +21,8 @@
import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
+import android.content.pm.ActivityInfo;
+import android.content.pm.ApplicationInfo;
import android.util.Pair;
import com.android.settings.testutils.SettingsRobolectricTestRunner;
@@ -31,6 +33,7 @@
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
+import org.robolectric.RuntimeEnvironment;
import org.robolectric.shadows.ShadowApplication;
import java.util.HashMap;
@@ -39,6 +42,7 @@
@RunWith(SettingsRobolectricTestRunner.class)
public class CategoryManagerTest {
+ private ActivityInfo mActivityInfo;
private Context mContext;
private CategoryManager mCategoryManager;
private Map<Pair<String, String>, Tile> mTileByComponentCache;
@@ -46,7 +50,9 @@
@Before
public void setUp() {
- mContext = ShadowApplication.getInstance().getApplicationContext();
+ mContext = RuntimeEnvironment.application;
+ mActivityInfo = new ActivityInfo();
+ mActivityInfo.applicationInfo = new ApplicationInfo();
mTileByComponentCache = new HashMap<>();
mCategoryByKeyMap = new HashMap<>();
mCategoryManager = CategoryManager.get(mContext);
@@ -59,8 +65,8 @@
@Test
public void backwardCompatCleanupForCategory_shouldNotChangeCategoryForNewKeys() {
- final Tile tile1 = new Tile();
- final Tile tile2 = new Tile();
+ final Tile tile1 = new Tile(mActivityInfo);
+ final Tile tile2 = new Tile(mActivityInfo);
tile1.category = CategoryKey.CATEGORY_ACCOUNT;
tile2.category = CategoryKey.CATEGORY_ACCOUNT;
final DashboardCategory category = new DashboardCategory();
@@ -78,8 +84,8 @@
@Test
public void backwardCompatCleanupForCategory_shouldNotChangeCategoryForMixedKeys() {
- final Tile tile1 = new Tile();
- final Tile tile2 = new Tile();
+ final Tile tile1 = new Tile(mActivityInfo);
+ final Tile tile2 = new Tile(mActivityInfo);
final String oldCategory = "com.android.settings.category.wireless";
tile1.category = CategoryKey.CATEGORY_ACCOUNT;
tile2.category = oldCategory;
@@ -102,7 +108,7 @@
@Test
public void backwardCompatCleanupForCategory_shouldChangeCategoryForOldKeys() {
- final Tile tile1 = new Tile();
+ final Tile tile1 = new Tile(mActivityInfo);
final String oldCategory = "com.android.settings.category.wireless";
tile1.category = oldCategory;
final DashboardCategory category1 = new DashboardCategory();
@@ -126,15 +132,15 @@
// Create some fake tiles that are not sorted.
final String testPackage = "com.android.test";
final DashboardCategory category = new DashboardCategory();
- final Tile tile1 = new Tile();
+ final Tile tile1 = new Tile(mActivityInfo);
tile1.intent =
new Intent().setComponent(new ComponentName(testPackage, "class1"));
tile1.priority = 100;
- final Tile tile2 = new Tile();
+ final Tile tile2 = new Tile(mActivityInfo);
tile2.intent =
new Intent().setComponent(new ComponentName(testPackage, "class2"));
tile2.priority = 50;
- final Tile tile3 = new Tile();
+ final Tile tile3 = new Tile(mActivityInfo);
tile3.intent =
new Intent().setComponent(new ComponentName(testPackage, "class3"));
tile3.priority = 200;
@@ -159,15 +165,15 @@
final String testPackage1 = "com.android.test1";
final String testPackage2 = "com.android.test2";
final DashboardCategory category = new DashboardCategory();
- final Tile tile1 = new Tile();
+ final Tile tile1 = new Tile(mActivityInfo);
tile1.intent =
new Intent().setComponent(new ComponentName(testPackage2, "class1"));
tile1.priority = 100;
- final Tile tile2 = new Tile();
+ final Tile tile2 = new Tile(mActivityInfo);
tile2.intent =
new Intent().setComponent(new ComponentName(testPackage1, "class2"));
tile2.priority = 100;
- final Tile tile3 = new Tile();
+ final Tile tile3 = new Tile(mActivityInfo);
tile3.intent =
new Intent().setComponent(new ComponentName(testPackage1, "class3"));
tile3.priority = 50;
@@ -177,8 +183,7 @@
mCategoryByKeyMap.put(CategoryKey.CATEGORY_HOMEPAGE, category);
// Sort their priorities
- mCategoryManager.sortCategories(ShadowApplication.getInstance().getApplicationContext(),
- mCategoryByKeyMap);
+ mCategoryManager.sortCategories(mContext, mCategoryByKeyMap);
// Verify they are now sorted.
assertThat(category.getTile(0)).isSameAs(tile2);
@@ -189,18 +194,17 @@
@Test
public void sortCategories_internalPackageTiles_shouldSkipTileForInternalPackage() {
// Create some fake tiles that are not sorted.
- final String testPackage =
- ShadowApplication.getInstance().getApplicationContext().getPackageName();
+ final String testPackage = mContext.getPackageName();
final DashboardCategory category = new DashboardCategory();
- final Tile tile1 = new Tile();
+ final Tile tile1 = new Tile(mActivityInfo);
tile1.intent =
new Intent().setComponent(new ComponentName(testPackage, "class1"));
tile1.priority = 100;
- final Tile tile2 = new Tile();
+ final Tile tile2 = new Tile(mActivityInfo);
tile2.intent =
new Intent().setComponent(new ComponentName(testPackage, "class2"));
tile2.priority = 100;
- final Tile tile3 = new Tile();
+ final Tile tile3 = new Tile(mActivityInfo);
tile3.intent =
new Intent().setComponent(new ComponentName(testPackage, "class3"));
tile3.priority = 50;
@@ -210,8 +214,7 @@
mCategoryByKeyMap.put(CategoryKey.CATEGORY_HOMEPAGE, category);
// Sort their priorities
- mCategoryManager.sortCategories(ShadowApplication.getInstance().getApplicationContext(),
- mCategoryByKeyMap);
+ mCategoryManager.sortCategories(mContext, mCategoryByKeyMap);
// Verify the sorting order is not changed
assertThat(category.getTile(0)).isSameAs(tile1);
@@ -222,20 +225,19 @@
@Test
public void sortCategories_internalAndExternalPackageTiles_shouldRetainPriorityOrdering() {
// Inject one external tile among internal tiles.
- final String testPackage =
- ShadowApplication.getInstance().getApplicationContext().getPackageName();
+ final String testPackage = mContext.getPackageName();
final String testPackage2 = "com.google.test2";
final DashboardCategory category = new DashboardCategory();
- final Tile tile1 = new Tile();
+ final Tile tile1 = new Tile(mActivityInfo);
tile1.intent = new Intent().setComponent(new ComponentName(testPackage, "class1"));
tile1.priority = 2;
- final Tile tile2 = new Tile();
+ final Tile tile2 = new Tile(mActivityInfo);
tile2.intent = new Intent().setComponent(new ComponentName(testPackage, "class2"));
tile2.priority = 1;
- final Tile tile3 = new Tile();
+ final Tile tile3 = new Tile(mActivityInfo);
tile3.intent = new Intent().setComponent(new ComponentName(testPackage2, "class0"));
tile3.priority = 0;
- final Tile tile4 = new Tile();
+ final Tile tile4 = new Tile(mActivityInfo);
tile4.intent = new Intent().setComponent(new ComponentName(testPackage, "class3"));
tile4.priority = -1;
category.addTile(tile1);
@@ -245,8 +247,7 @@
mCategoryByKeyMap.put(CategoryKey.CATEGORY_HOMEPAGE, category);
// Sort their priorities
- mCategoryManager.sortCategories(ShadowApplication.getInstance().getApplicationContext(),
- mCategoryByKeyMap);
+ mCategoryManager.sortCategories(mContext, mCategoryByKeyMap);
// Verify the sorting order is not changed
assertThat(category.getTile(0)).isSameAs(tile1);
@@ -258,18 +259,17 @@
@Test
public void sortCategories_samePriority_internalPackageTileShouldTakePrecedence() {
// Inject one external tile among internal tiles with same priority.
- final String testPackage =
- ShadowApplication.getInstance().getApplicationContext().getPackageName();
+ final String testPackage = mContext.getPackageName();
final String testPackage2 = "com.google.test2";
final String testPackage3 = "com.abcde.test3";
final DashboardCategory category = new DashboardCategory();
- final Tile tile1 = new Tile();
+ final Tile tile1 = new Tile(mActivityInfo);
tile1.intent = new Intent().setComponent(new ComponentName(testPackage2, "class1"));
tile1.priority = 1;
- final Tile tile2 = new Tile();
+ final Tile tile2 = new Tile(mActivityInfo);
tile2.intent = new Intent().setComponent(new ComponentName(testPackage, "class2"));
tile2.priority = 1;
- final Tile tile3 = new Tile();
+ final Tile tile3 = new Tile(mActivityInfo);
tile3.intent = new Intent().setComponent(new ComponentName(testPackage3, "class3"));
tile3.priority = 1;
category.addTile(tile1);
@@ -278,8 +278,7 @@
mCategoryByKeyMap.put(CategoryKey.CATEGORY_HOMEPAGE, category);
// Sort their priorities
- mCategoryManager.sortCategories(ShadowApplication.getInstance().getApplicationContext(),
- mCategoryByKeyMap);
+ mCategoryManager.sortCategories(mContext, mCategoryByKeyMap);
// Verify the sorting order is internal first, follow by package name ordering
assertThat(category.getTile(0)).isSameAs(tile2);
@@ -290,18 +289,17 @@
@Test
public void filterTiles_noDuplicate_noChange() {
// Create some unique tiles
- final String testPackage =
- ShadowApplication.getInstance().getApplicationContext().getPackageName();
+ final String testPackage = mContext.getPackageName();
final DashboardCategory category = new DashboardCategory();
- final Tile tile1 = new Tile();
+ final Tile tile1 = new Tile(mActivityInfo);
tile1.intent =
new Intent().setComponent(new ComponentName(testPackage, "class1"));
tile1.priority = 100;
- final Tile tile2 = new Tile();
+ final Tile tile2 = new Tile(mActivityInfo);
tile2.intent =
new Intent().setComponent(new ComponentName(testPackage, "class2"));
tile2.priority = 100;
- final Tile tile3 = new Tile();
+ final Tile tile3 = new Tile(mActivityInfo);
tile3.intent =
new Intent().setComponent(new ComponentName(testPackage, "class3"));
tile3.priority = 50;
@@ -318,18 +316,17 @@
@Test
public void filterTiles_hasDuplicate_shouldOnlyKeepUniqueTiles() {
// Create tiles pointing to same intent.
- final String testPackage =
- ShadowApplication.getInstance().getApplicationContext().getPackageName();
+ final String testPackage = mContext.getPackageName();
final DashboardCategory category = new DashboardCategory();
- final Tile tile1 = new Tile();
+ final Tile tile1 = new Tile(mActivityInfo);
tile1.intent =
new Intent().setComponent(new ComponentName(testPackage, "class1"));
tile1.priority = 100;
- final Tile tile2 = new Tile();
+ final Tile tile2 = new Tile(mActivityInfo);
tile2.intent =
new Intent().setComponent(new ComponentName(testPackage, "class1"));
tile2.priority = 100;
- final Tile tile3 = new Tile();
+ final Tile tile3 = new Tile(mActivityInfo);
tile3.intent =
new Intent().setComponent(new ComponentName(testPackage, "class1"));
tile3.priority = 50;
diff --git a/tests/robotests/src/com/android/settings/dashboard/DashboardAdapterTest.java b/tests/robotests/src/com/android/settings/dashboard/DashboardAdapterTest.java
index f6786b8..79be6cf 100644
--- a/tests/robotests/src/com/android/settings/dashboard/DashboardAdapterTest.java
+++ b/tests/robotests/src/com/android/settings/dashboard/DashboardAdapterTest.java
@@ -16,6 +16,7 @@
package com.android.settings.dashboard;
import static com.google.common.truth.Truth.assertThat;
+
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.ArgumentMatchers.eq;
import static org.mockito.Mockito.doReturn;
@@ -28,6 +29,7 @@
import android.app.PendingIntent;
import android.content.Context;
+import android.content.pm.ActivityInfo;
import android.content.res.Resources;
import android.graphics.drawable.Drawable;
import android.graphics.drawable.Icon;
@@ -39,6 +41,8 @@
import android.view.WindowManager;
import android.widget.TextView;
+import androidx.recyclerview.widget.RecyclerView;
+
import com.android.settings.R;
import com.android.settings.SettingsActivity;
import com.android.settings.dashboard.conditional.Condition;
@@ -63,8 +67,6 @@
import java.util.ArrayList;
import java.util.List;
-import androidx.recyclerview.widget.RecyclerView;
-
@RunWith(SettingsRobolectricTestRunner.class)
@Config(shadows = SettingsShadowResources.SettingsShadowTheme.class)
public class DashboardAdapterTest {
@@ -79,6 +81,7 @@
private Resources mResources;
@Mock
private WindowManager mWindowManager;
+ private ActivityInfo mActivityInfo;
private FakeFeatureFactory mFactory;
private DashboardAdapter mDashboardAdapter;
private List<Condition> mConditionList;
@@ -87,6 +90,7 @@
public void setUp() {
MockitoAnnotations.initMocks(this);
mFactory = FakeFeatureFactory.setupForTest();
+ mActivityInfo = new ActivityInfo();
when(mFactory.dashboardFeatureProvider.shouldTintIcon()).thenReturn(true);
when(mContext.getSystemService(Context.WINDOW_SERVICE)).thenReturn(mWindowManager);
@@ -123,7 +127,6 @@
adapter.onBindSuggestion(holder, 0);
- final DashboardData dashboardData = adapter.mDashboardData;
reset(adapter); // clear interactions tracking
final Suggestion suggestionToRemove = suggestions.get(1);
@@ -154,12 +157,12 @@
@Test
public void onSuggestionClosed_notInSuggestionList_shouldNotUpdateSuggestionList() {
final DashboardAdapter adapter =
- spy(new DashboardAdapter(mContext, null /* savedInstanceState */,
- null /* conditions */, null /* suggestionControllerMixin */,
- null /* lifecycle */));
+ spy(new DashboardAdapter(mContext, null /* savedInstanceState */,
+ null /* conditions */, null /* suggestionControllerMixin */,
+ null /* lifecycle */));
final List<Suggestion> suggestions = makeSuggestionsV2("pkg1");
adapter.setSuggestions(suggestions);
- final DashboardData dashboardData = adapter.mDashboardData;
+
reset(adapter); // clear interactions tracking
adapter.onSuggestionClosed(mock(Suggestion.class));
@@ -198,10 +201,12 @@
final View view = LayoutInflater.from(context).inflate(R.layout.dashboard_tile, null);
final DashboardAdapter.DashboardItemHolder holder =
new DashboardAdapter.DashboardItemHolder(view);
- final Tile tile = new Tile();
- tile.icon = Icon.createWithResource(context, R.drawable.ic_settings);
+ final Tile tile = spy(new Tile(mActivityInfo));
+ doReturn(Icon.createWithResource(context, R.drawable.ic_settings))
+ .when(tile).getIcon();
final IconCache iconCache = mock(IconCache.class);
- when(iconCache.getIcon(tile.icon)).thenReturn(context.getDrawable(R.drawable.ic_settings));
+ when(iconCache.getIcon(tile.getIcon()))
+ .thenReturn(context.getDrawable(R.drawable.ic_settings));
mDashboardAdapter = new DashboardAdapter(context, null /* savedInstanceState */,
null /* conditions */, null /* suggestionControllerMixin */, null /* lifecycle */);
@@ -217,9 +222,9 @@
final View view = LayoutInflater.from(context).inflate(R.layout.dashboard_tile, null);
final DashboardAdapter.DashboardItemHolder holder =
new DashboardAdapter.DashboardItemHolder(view);
- final Tile tile = new Tile();
- tile.icon = Icon.createWithResource(context, R.drawable.ic_settings);
- when(tile.icon.getResPackage()).thenReturn("another.package");
+ final Tile tile = spy(new Tile(mActivityInfo));
+ final Icon icon = Icon.createWithResource(context, R.drawable.ic_settings);
+ doReturn(icon).when(tile).getIcon();
final IconCache iconCache = new IconCache(context);
@@ -230,7 +235,7 @@
doReturn("another.package").when(context).getPackageName();
mDashboardAdapter.onBindTile(holder, tile);
- assertThat(iconCache.getIcon(tile.icon)).isInstanceOf(RoundedHomepageIcon.class);
+ assertThat(iconCache.getIcon(tile.getIcon())).isInstanceOf(RoundedHomepageIcon.class);
}
@Test
@@ -239,11 +244,12 @@
final View view = LayoutInflater.from(context).inflate(R.layout.dashboard_tile, null);
final DashboardAdapter.DashboardItemHolder holder =
new DashboardAdapter.DashboardItemHolder(view);
- final Tile tile = new Tile();
+ final Tile tile = spy(new Tile(mActivityInfo));
tile.metaData = new Bundle();
tile.metaData.putInt(TileUtils.META_DATA_PREFERENCE_ICON_BACKGROUND_HINT,
R.color.memory_critical);
- tile.icon = Icon.createWithResource(context, R.drawable.ic_settings);
+ doReturn(Icon.createWithResource(context, R.drawable.ic_settings))
+ .when(tile).getIcon();
final IconCache iconCache = new IconCache(context);
mDashboardAdapter = new DashboardAdapter(context, null /* savedInstanceState */,
null /* conditions */, null /* suggestionControllerMixin */, null /* lifecycle */);
@@ -252,7 +258,8 @@
doReturn("another.package").when(context).getPackageName();
mDashboardAdapter.onBindTile(holder, tile);
- final RoundedHomepageIcon homepageIcon = (RoundedHomepageIcon) iconCache.getIcon(tile.icon);
+ final RoundedHomepageIcon homepageIcon = (RoundedHomepageIcon) iconCache.getIcon(
+ tile.getIcon());
assertThat(homepageIcon.mBackgroundColor)
.isEqualTo(RuntimeEnvironment.application.getColor(R.color.memory_critical));
}
@@ -263,12 +270,12 @@
final View view = LayoutInflater.from(context).inflate(R.layout.dashboard_tile, null);
final DashboardAdapter.DashboardItemHolder holder =
new DashboardAdapter.DashboardItemHolder(view);
- final Tile tile = new Tile();
- tile.icon = mock(Icon.class);
- when(tile.icon.getResPackage()).thenReturn("another.package");
+ final Tile tile = spy(new Tile(mActivityInfo));
+ doReturn(mock(Icon.class)).when(tile).getIcon();
+ when(tile.getIcon().getResPackage()).thenReturn("another.package");
final IconCache iconCache = mock(IconCache.class);
- when(iconCache.getIcon(tile.icon)).thenReturn(mock(RoundedHomepageIcon.class));
+ when(iconCache.getIcon(tile.getIcon())).thenReturn(mock(RoundedHomepageIcon.class));
mDashboardAdapter = new DashboardAdapter(context, null /* savedInstanceState */,
null /* conditions */, null /* suggestionControllerMixin */, null /* lifecycle */);
@@ -276,7 +283,7 @@
mDashboardAdapter.onBindTile(holder, tile);
- verify(iconCache, never()).updateIcon(eq(tile.icon), any(RoundedHomepageIcon.class));
+ verify(iconCache, never()).updateIcon(eq(tile.getIcon()), any(RoundedHomepageIcon.class));
}
private List<Suggestion> makeSuggestionsV2(String... pkgNames) {
diff --git a/tests/robotests/src/com/android/settings/dashboard/DashboardFeatureProviderImplTest.java b/tests/robotests/src/com/android/settings/dashboard/DashboardFeatureProviderImplTest.java
index e541b9f..e677119 100644
--- a/tests/robotests/src/com/android/settings/dashboard/DashboardFeatureProviderImplTest.java
+++ b/tests/robotests/src/com/android/settings/dashboard/DashboardFeatureProviderImplTest.java
@@ -19,7 +19,9 @@
import static com.android.settingslib.drawer.TileUtils.META_DATA_KEY_PROFILE;
import static com.android.settingslib.drawer.TileUtils.PROFILE_ALL;
import static com.android.settingslib.drawer.TileUtils.PROFILE_PRIMARY;
+
import static com.google.common.truth.Truth.assertThat;
+
import static org.mockito.Matchers.any;
import static org.mockito.Matchers.anyInt;
import static org.mockito.Matchers.eq;
@@ -35,6 +37,7 @@
import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
+import android.content.pm.ActivityInfo;
import android.content.pm.PackageManager;
import android.content.pm.ResolveInfo;
import android.graphics.Bitmap;
@@ -43,6 +46,8 @@
import android.os.UserHandle;
import android.os.UserManager;
+import androidx.preference.Preference;
+
import com.android.internal.logging.nano.MetricsProto;
import com.android.settings.R;
import com.android.settings.SettingsActivity;
@@ -73,8 +78,6 @@
import java.util.ArrayList;
-import androidx.preference.Preference;
-
@RunWith(SettingsRobolectricTestRunner.class)
@Config(shadows = ShadowUserManager.class)
public class DashboardFeatureProviderImplTest {
@@ -90,15 +93,17 @@
private FakeFeatureFactory mFeatureFactory;
private Context mContext;
+ private ActivityInfo mActivityInfo;
private DashboardFeatureProviderImpl mImpl;
@Before
public void setUp() {
MockitoAnnotations.initMocks(this);
mContext = spy(RuntimeEnvironment.application);
+ mActivityInfo = new ActivityInfo();
doReturn(mPackageManager).when(mContext).getPackageManager();
when(mPackageManager.resolveActivity(any(Intent.class), anyInt()))
- .thenReturn(new ResolveInfo());
+ .thenReturn(new ResolveInfo());
mFeatureFactory = FakeFeatureFactory.setupForTest();
mImpl = new DashboardFeatureProviderImpl(mContext);
}
@@ -111,10 +116,11 @@
@Test
public void bindPreference_shouldBindAllData() {
final Preference preference = new Preference(RuntimeEnvironment.application);
- final Tile tile = new Tile();
+ final Tile tile = spy(new Tile(mActivityInfo));
tile.title = "title";
tile.summary = "summary";
- tile.icon = Icon.createWithBitmap(Bitmap.createBitmap(1, 1, Bitmap.Config.RGB_565));
+ doReturn(Icon.createWithBitmap(Bitmap.createBitmap(1, 1, Bitmap.Config.RGB_565)))
+ .when(tile).getIcon();
tile.metaData = new Bundle();
tile.metaData.putString(SettingsActivity.META_DATA_KEY_FRAGMENT_CLASS, "HI");
tile.priority = 10;
@@ -132,7 +138,7 @@
@Test
public void bindPreference_noFragmentMetadata_shouldBindIntent() {
final Preference preference = new Preference(RuntimeEnvironment.application);
- final Tile tile = new Tile();
+ final Tile tile = new Tile(mActivityInfo);
tile.metaData = new Bundle();
tile.priority = 10;
tile.intent = new Intent();
@@ -149,7 +155,7 @@
@Test
public void bindPreference_noFragmentMetadata_shouldBindToProfileSelector() {
final Preference preference = new Preference(RuntimeEnvironment.application);
- final Tile tile = new Tile();
+ final Tile tile = new Tile(mActivityInfo);
tile.metaData = new Bundle();
tile.userHandle = new ArrayList<>();
tile.userHandle.add(mock(UserHandle.class));
@@ -170,7 +176,7 @@
@Test
public void bindPreference_noFragmentMetadataSingleUser_shouldBindToDirectLaunchIntent() {
final Preference preference = new Preference(RuntimeEnvironment.application);
- final Tile tile = new Tile();
+ final Tile tile = new Tile(mActivityInfo);
tile.metaData = new Bundle();
tile.userHandle = new ArrayList<>();
tile.userHandle.add(mock(UserHandle.class));
@@ -195,7 +201,7 @@
@Test
public void bindPreference_toInternalSettingActivity_shouldBindToDirectLaunchIntentAndNotLog() {
final Preference preference = new Preference(RuntimeEnvironment.application);
- final Tile tile = new Tile();
+ final Tile tile = new Tile(mActivityInfo);
tile.metaData = new Bundle();
tile.userHandle = new ArrayList<>();
tile.userHandle.add(mock(UserHandle.class));
@@ -231,7 +237,7 @@
@Test
public void bindPreference_withNullKeyNullPriority_shouldGenerateKeyAndPriority() {
final Preference preference = new Preference(RuntimeEnvironment.application);
- final Tile tile = new Tile();
+ final Tile tile = new Tile(mActivityInfo);
tile.intent = new Intent();
tile.intent.setComponent(new ComponentName("pkg", "class"));
mImpl.bindPreferenceToTile(mActivity, MetricsProto.MetricsEvent.VIEW_UNKNOWN,
@@ -244,7 +250,7 @@
@Test
public void bindPreference_noSummary_shouldSetSummaryToPlaceholder() {
final Preference preference = new Preference(RuntimeEnvironment.application);
- final Tile tile = new Tile();
+ final Tile tile = new Tile(mActivityInfo);
tile.intent = new Intent();
tile.intent.setComponent(new ComponentName("pkg", "class"));
mImpl.bindPreferenceToTile(mActivity, MetricsProto.MetricsEvent.VIEW_UNKNOWN,
@@ -257,7 +263,7 @@
@Test
public void bindPreference_hasSummary_shouldSetSummary() {
final Preference preference = new Preference(RuntimeEnvironment.application);
- final Tile tile = new Tile();
+ final Tile tile = new Tile(mActivityInfo);
tile.summary = "test";
tile.intent = new Intent();
tile.intent.setComponent(new ComponentName("pkg", "class"));
@@ -271,7 +277,7 @@
@Config(shadows = {ShadowTileUtils.class, ShadowThreadUtils.class})
public void bindPreference_hasSummaryUri_shouldLoadSummaryFromContentProvider() {
final Preference preference = new Preference(RuntimeEnvironment.application);
- final Tile tile = new Tile();
+ final Tile tile = new Tile(mActivityInfo);
tile.intent = new Intent();
tile.intent.setComponent(new ComponentName("pkg", "class"));
tile.metaData = new Bundle();
@@ -287,7 +293,7 @@
@Test
public void bindPreference_withNullKeyTileKey_shouldUseTileKey() {
final Preference preference = new Preference(RuntimeEnvironment.application);
- final Tile tile = new Tile();
+ final Tile tile = new Tile(mActivityInfo);
tile.key = "key";
tile.intent = new Intent();
tile.intent.setComponent(new ComponentName("pkg", "class"));
@@ -301,7 +307,7 @@
@Config(shadows = {ShadowTileUtils.class, ShadowThreadUtils.class})
public void bindPreference_withIconUri_shouldLoadIconFromContentProvider() {
final Preference preference = new Preference(RuntimeEnvironment.application);
- final Tile tile = new Tile();
+ final Tile tile = new Tile(mActivityInfo);
tile.key = "key";
tile.intent = new Intent();
tile.intent.setComponent(
@@ -318,7 +324,7 @@
public void bindPreference_withBaseOrder_shouldOffsetPriority() {
final int baseOrder = 100;
final Preference preference = new Preference(RuntimeEnvironment.application);
- final Tile tile = new Tile();
+ final Tile tile = new Tile(mActivityInfo);
tile.metaData = new Bundle();
tile.priority = 10;
mImpl.bindPreferenceToTile(mActivity, MetricsProto.MetricsEvent.VIEW_UNKNOWN,
@@ -331,7 +337,7 @@
public void bindPreference_withOrderMetadata_shouldUseOrderInMetadata() {
final Preference preference = new Preference(RuntimeEnvironment.application);
final int testOrder = -30;
- final Tile tile = new Tile();
+ final Tile tile = new Tile(mActivityInfo);
tile.metaData = new Bundle();
tile.metaData.putInt(mImpl.META_DATA_KEY_ORDER, testOrder);
tile.priority = 10;
@@ -344,7 +350,7 @@
@Test
public void bindPreference_invalidOrderMetadata_shouldIgnore() {
final Preference preference = new Preference(RuntimeEnvironment.application);
- final Tile tile = new Tile();
+ final Tile tile = new Tile(mActivityInfo);
tile.metaData = new Bundle();
tile.metaData.putString(mImpl.META_DATA_KEY_ORDER, "hello");
tile.priority = 10;
@@ -358,7 +364,7 @@
public void bindPreference_withIntentActionMetadata_shouldSetLaunchAction() {
Activity activity = Robolectric.buildActivity(Activity.class).get();
final Preference preference = new Preference(RuntimeEnvironment.application);
- final Tile tile = new Tile();
+ final Tile tile = new Tile(mActivityInfo);
tile.key = "key";
tile.intent = new Intent();
tile.intent.setComponent(new ComponentName("pkg", "class"));
@@ -384,7 +390,7 @@
Activity activity = Robolectric.buildActivity(Activity.class).get();
final ShadowApplication application = ShadowApplication.getInstance();
final Preference preference = new Preference(application.getApplicationContext());
- final Tile tile = new Tile();
+ final Tile tile = new Tile(mActivityInfo);
tile.key = "key";
tile.intent = new Intent();
tile.intent.setComponent(new ComponentName("pkg", "class"));
@@ -431,7 +437,7 @@
mImpl = new DashboardFeatureProviderImpl(mActivity);
ReflectionHelpers.setField(mImpl, "mCategoryManager", mCategoryManager);
final DashboardCategory category = new DashboardCategory();
- category.addTile(new Tile());
+ category.addTile(new Tile(mActivityInfo));
when(mCategoryManager
.getTilesByCategory(any(Context.class), eq(CategoryKey.CATEGORY_HOMEPAGE)))
.thenReturn(category);
@@ -461,7 +467,7 @@
@Test
public void openTileIntent_profileSelectionDialog_shouldShow() {
- final Tile tile = new Tile();
+ final Tile tile = new Tile(mActivityInfo);
tile.metaData = new Bundle();
tile.intent = new Intent();
tile.intent.setComponent(new ComponentName("pkg", "class"));
@@ -472,13 +478,13 @@
mImpl.openTileIntent(mActivity, tile);
verify(mActivity, never())
- .startActivityForResult(any(Intent.class), eq(0));
+ .startActivityForResult(any(Intent.class), eq(0));
verify(mActivity).getFragmentManager();
}
@Test
public void openTileIntent_profileSelectionDialog_explicitMetadataShouldShow() {
- final Tile tile = new Tile();
+ final Tile tile = new Tile(mActivityInfo);
tile.metaData = new Bundle();
tile.metaData.putString(META_DATA_KEY_PROFILE, PROFILE_ALL);
tile.intent = new Intent();
@@ -490,12 +496,13 @@
mImpl.openTileIntent(mActivity, tile);
verify(mActivity, never())
- .startActivityForResult(any(Intent.class), eq(0));
+ .startActivityForResult(any(Intent.class), eq(0));
verify(mActivity).getFragmentManager();
}
+
@Test
public void openTileIntent_profileSelectionDialog_shouldNotShow() {
- final Tile tile = new Tile();
+ final Tile tile = new Tile(mActivityInfo);
tile.metaData = new Bundle();
tile.metaData.putString(META_DATA_KEY_PROFILE, PROFILE_PRIMARY);
tile.intent = new Intent();
@@ -507,7 +514,7 @@
mImpl.openTileIntent(mActivity, tile);
verify(mActivity)
- .startActivityForResult(any(Intent.class), eq(0));
+ .startActivityForResult(any(Intent.class), eq(0));
verify(mActivity, never()).getFragmentManager();
}
}
diff --git a/tests/robotests/src/com/android/settings/dashboard/DashboardFragmentTest.java b/tests/robotests/src/com/android/settings/dashboard/DashboardFragmentTest.java
index 3a2f00f..e7453fa 100644
--- a/tests/robotests/src/com/android/settings/dashboard/DashboardFragmentTest.java
+++ b/tests/robotests/src/com/android/settings/dashboard/DashboardFragmentTest.java
@@ -16,7 +16,9 @@
package com.android.settings.dashboard;
import static com.google.common.truth.Truth.assertThat;
+
import static org.mockito.ArgumentMatchers.nullable;
+import static org.mockito.Mockito.doReturn;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.never;
import static org.mockito.Mockito.spy;
@@ -27,9 +29,14 @@
import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
+import android.content.pm.ActivityInfo;
import android.graphics.drawable.Icon;
import android.os.Bundle;
+import androidx.preference.Preference;
+import androidx.preference.PreferenceManager;
+import androidx.preference.PreferenceScreen;
+
import com.android.settings.core.PreferenceControllerMixin;
import com.android.settings.testutils.FakeFeatureFactory;
import com.android.settings.testutils.SettingsRobolectricTestRunner;
@@ -50,15 +57,12 @@
import java.util.ArrayList;
import java.util.List;
-import androidx.preference.Preference;
-import androidx.preference.PreferenceManager;
-import androidx.preference.PreferenceScreen;
-
@RunWith(SettingsRobolectricTestRunner.class)
public class DashboardFragmentTest {
@Mock
private FakeFeatureFactory mFakeFeatureFactory;
+ private ActivityInfo mActivityInfo;
private DashboardCategory mDashboardCategory;
private Context mContext;
private TestFragment mTestFragment;
@@ -67,9 +71,10 @@
public void setUp() {
MockitoAnnotations.initMocks(this);
mContext = spy(RuntimeEnvironment.application);
+ mActivityInfo = new ActivityInfo();
mFakeFeatureFactory = FakeFeatureFactory.setupForTest();
mDashboardCategory = new DashboardCategory();
- mDashboardCategory.addTile(new Tile());
+ mDashboardCategory.addTile(new Tile(mActivityInfo));
mTestFragment = new TestFragment(RuntimeEnvironment.application);
when(mFakeFeatureFactory.dashboardFeatureProvider
.getTilesForCategory(nullable(String.class)))
@@ -177,8 +182,8 @@
@Test
public void tintTileIcon_hasMetadata_shouldReturnIconTintableMetadata() {
- final Tile tile = new Tile();
- tile.icon = mock(Icon.class);
+ final Tile tile = spy(new Tile(mActivityInfo));
+ doReturn(mock(Icon.class)).when(tile).getIcon();
final Bundle metaData = new Bundle();
tile.metaData = metaData;
@@ -191,7 +196,7 @@
@Test
public void tintTileIcon_noIcon_shouldReturnFalse() {
- final Tile tile = new Tile();
+ final Tile tile = new Tile(mActivityInfo);
tile.metaData = new Bundle();
assertThat(mTestFragment.tintTileIcon(tile)).isFalse();
@@ -199,12 +204,12 @@
@Test
public void tintTileIcon_noMetadata_shouldReturnPackageNameCheck() {
- final Tile tile = new Tile();
- tile.icon = mock(Icon.class);
+ final Tile tile = spy(new Tile(mActivityInfo));
+ doReturn(mock(Icon.class)).when(tile).getIcon();
final Intent intent = new Intent();
tile.intent = intent;
intent.setComponent(
- new ComponentName(RuntimeEnvironment.application.getPackageName(), "TestClass"));
+ new ComponentName(RuntimeEnvironment.application.getPackageName(), "TestClass"));
assertThat(mTestFragment.tintTileIcon(tile)).isFalse();
intent.setComponent(new ComponentName("OtherPackage", "TestClass"));
diff --git a/tests/robotests/src/com/android/settings/dashboard/DashboardItemAnimatorTest.java b/tests/robotests/src/com/android/settings/dashboard/DashboardItemAnimatorTest.java
index ee19654..b1d2031 100644
--- a/tests/robotests/src/com/android/settings/dashboard/DashboardItemAnimatorTest.java
+++ b/tests/robotests/src/com/android/settings/dashboard/DashboardItemAnimatorTest.java
@@ -18,9 +18,12 @@
import static com.google.common.truth.Truth.assertThat;
+import android.content.pm.ActivityInfo;
import android.view.View;
import android.widget.TextView;
+import androidx.recyclerview.widget.RecyclerView;
+
import com.android.settings.testutils.SettingsRobolectricTestRunner;
import com.android.settingslib.drawer.Tile;
@@ -29,8 +32,6 @@
import org.junit.runner.RunWith;
import org.robolectric.RuntimeEnvironment;
-import androidx.recyclerview.widget.RecyclerView;
-
@RunWith(SettingsRobolectricTestRunner.class)
public class DashboardItemAnimatorTest {
@@ -41,20 +42,20 @@
public void SetUp() {
mDashboardItemAnimator = new DashboardItemAnimator();
mViewHolder = new ViewHolder(new TextView(RuntimeEnvironment.application));
- mViewHolder.itemView.setTag(new Tile());
+ mViewHolder.itemView.setTag(new Tile(new ActivityInfo()));
}
@Test
public void testAnimateChange_NoPositionChange_NoPendingAnimation() {
final boolean hasPendingAnimation =
- mDashboardItemAnimator.animateChange(mViewHolder, mViewHolder, 0, 1, 0, 1);
+ mDashboardItemAnimator.animateChange(mViewHolder, mViewHolder, 0, 1, 0, 1);
assertThat(hasPendingAnimation).isFalse();
}
@Test
public void testAnimateChange_HasPositionChange_HasPendingAnimation() {
final boolean hasPendingAnimation =
- mDashboardItemAnimator.animateChange(mViewHolder, mViewHolder, 0, 0, 1, 1);
+ mDashboardItemAnimator.animateChange(mViewHolder, mViewHolder, 0, 0, 1, 1);
assertThat(hasPendingAnimation).isTrue();
}
@@ -64,7 +65,7 @@
mDashboardItemAnimator.animateMove(mViewHolder, 0, 0, 1, 1);
final boolean hasPendingAnimation =
- mDashboardItemAnimator.animateChange(mViewHolder, mViewHolder, 0, 1, 0, 1);
+ mDashboardItemAnimator.animateChange(mViewHolder, mViewHolder, 0, 1, 0, 1);
assertThat(hasPendingAnimation).isFalse();
}
diff --git a/tests/robotests/src/com/android/settings/dashboard/SummaryLoaderTest.java b/tests/robotests/src/com/android/settings/dashboard/SummaryLoaderTest.java
index 0fac2fc..053bc9c 100644
--- a/tests/robotests/src/com/android/settings/dashboard/SummaryLoaderTest.java
+++ b/tests/robotests/src/com/android/settings/dashboard/SummaryLoaderTest.java
@@ -17,11 +17,13 @@
package com.android.settings.dashboard;
import static com.google.common.truth.Truth.assertThat;
+
import static org.mockito.Mockito.verifyZeroInteractions;
import static org.mockito.Mockito.when;
import android.app.Activity;
import android.content.Intent;
+import android.content.pm.ActivityInfo;
import com.android.settings.testutils.FakeFeatureFactory;
import com.android.settings.testutils.SettingsRobolectricTestRunner;
@@ -51,7 +53,7 @@
MockitoAnnotations.initMocks(this);
mFeatureFactory = FakeFeatureFactory.setupForTest();
- mTile = new Tile();
+ mTile = new Tile(new ActivityInfo());
mTile.summary = SUMMARY_1;
mCallbackInvoked = false;
@@ -84,7 +86,7 @@
public void testUpdateSummaryToCache_hasCache_shouldUpdate() {
final String testSummary = "test_summary";
final DashboardCategory category = new DashboardCategory();
- final Tile tile = new Tile();
+ final Tile tile = new Tile(new ActivityInfo());
tile.key = "123";
tile.intent = new Intent();
category.addTile(tile);
diff --git a/tests/robotests/src/com/android/settings/dashboard/suggestions/SuggestionFeatureProviderImplTest.java b/tests/robotests/src/com/android/settings/dashboard/suggestions/SuggestionFeatureProviderImplTest.java
index b1c256f..70fc9d4 100644
--- a/tests/robotests/src/com/android/settings/dashboard/suggestions/SuggestionFeatureProviderImplTest.java
+++ b/tests/robotests/src/com/android/settings/dashboard/suggestions/SuggestionFeatureProviderImplTest.java
@@ -17,6 +17,7 @@
package com.android.settings.dashboard.suggestions;
import static com.google.common.truth.Truth.assertThat;
+
import static org.mockito.Matchers.any;
import static org.mockito.Matchers.anyString;
import static org.mockito.Matchers.eq;
@@ -27,6 +28,7 @@
import android.app.ActivityManager;
import android.content.Context;
+import android.content.pm.ActivityInfo;
import android.content.pm.PackageManager;
import android.hardware.fingerprint.FingerprintManager;
import android.service.settings.suggestions.Suggestion;
@@ -45,7 +47,6 @@
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
-import org.mockito.Answers;
import org.mockito.Mock;
import org.mockito.MockitoAnnotations;
import org.robolectric.RuntimeEnvironment;
@@ -58,7 +59,7 @@
@Config(shadows = ShadowSecureSettings.class)
public class SuggestionFeatureProviderImplTest {
- @Mock(answer = Answers.RETURNS_DEEP_STUBS)
+ @Mock
private Context mContext;
@Mock
private SuggestionControllerMixinCompat mSuggestionControllerMixin;
@@ -71,6 +72,7 @@
@Mock
private FingerprintManager mFingerprintManager;
+ private ActivityInfo mActivityInfo;
private FakeFeatureFactory mFactory;
private SuggestionFeatureProviderImpl mProvider;
@@ -78,6 +80,7 @@
public void setUp() {
MockitoAnnotations.initMocks(this);
mFactory = FakeFeatureFactory.setupForTest();
+ mActivityInfo = new ActivityInfo();
when(mContext.getPackageManager()).thenReturn(mPackageManager);
// Explicit casting to object due to MockitoCast bug
when((Object) mContext.getSystemService(FingerprintManager.class))
@@ -145,13 +148,13 @@
@Test
public void filterExclusiveSuggestions_shouldOnlyKeepFirst3() {
final List<Tile> suggestions = new ArrayList<>();
- suggestions.add(new Tile());
- suggestions.add(new Tile());
- suggestions.add(new Tile());
- suggestions.add(new Tile());
- suggestions.add(new Tile());
- suggestions.add(new Tile());
- suggestions.add(new Tile());
+ suggestions.add(new Tile(mActivityInfo));
+ suggestions.add(new Tile(mActivityInfo));
+ suggestions.add(new Tile(mActivityInfo));
+ suggestions.add(new Tile(mActivityInfo));
+ suggestions.add(new Tile(mActivityInfo));
+ suggestions.add(new Tile(mActivityInfo));
+ suggestions.add(new Tile(mActivityInfo));
mProvider.filterExclusiveSuggestions(suggestions);
diff --git a/tests/robotests/src/com/android/settings/network/NetworkDashboardFragmentTest.java b/tests/robotests/src/com/android/settings/network/NetworkDashboardFragmentTest.java
index 187f0dc..d6310ab 100644
--- a/tests/robotests/src/com/android/settings/network/NetworkDashboardFragmentTest.java
+++ b/tests/robotests/src/com/android/settings/network/NetworkDashboardFragmentTest.java
@@ -26,6 +26,7 @@
import com.android.settings.dashboard.SummaryLoader;
import com.android.settings.testutils.SettingsRobolectricTestRunner;
+import com.android.settings.wifi.WifiMasterSwitchPreferenceController;
import com.android.settingslib.drawer.CategoryKey;
import org.junit.Before;
@@ -66,6 +67,8 @@
@Test
public void summaryProviderSetListening_hasMobileAndHotspot_shouldReturnMobileSummary() {
+ final WifiMasterSwitchPreferenceController wifiPreferenceController =
+ mock(WifiMasterSwitchPreferenceController.class);
final MobileNetworkPreferenceController mobileNetworkPreferenceController =
mock(MobileNetworkPreferenceController.class);
final TetherPreferenceController tetherPreferenceController =
@@ -74,12 +77,14 @@
final SummaryLoader summaryLoader = mock(SummaryLoader.class);
final SummaryLoader.SummaryProvider provider =
new NetworkDashboardFragment.SummaryProvider(mContext, summaryLoader,
- mobileNetworkPreferenceController, tetherPreferenceController);
+ wifiPreferenceController, mobileNetworkPreferenceController,
+ tetherPreferenceController);
provider.setListening(false);
verifyZeroInteractions(summaryLoader);
+ when(wifiPreferenceController.isAvailable()).thenReturn(true);
when(mobileNetworkPreferenceController.isAvailable()).thenReturn(true);
when(tetherPreferenceController.isAvailable()).thenReturn(true);
@@ -90,6 +95,8 @@
@Test
public void summaryProviderSetListening_noMobileOrHotspot_shouldReturnSimpleSummary() {
+ final WifiMasterSwitchPreferenceController wifiPreferenceController =
+ mock(WifiMasterSwitchPreferenceController.class);
final MobileNetworkPreferenceController mobileNetworkPreferenceController =
mock(MobileNetworkPreferenceController.class);
final TetherPreferenceController tetherPreferenceController =
@@ -98,12 +105,14 @@
final SummaryLoader summaryLoader = mock(SummaryLoader.class);
final SummaryLoader.SummaryProvider provider =
new NetworkDashboardFragment.SummaryProvider(mContext, summaryLoader,
- mobileNetworkPreferenceController, tetherPreferenceController);
+ wifiPreferenceController, mobileNetworkPreferenceController,
+ tetherPreferenceController);
provider.setListening(false);
verifyZeroInteractions(summaryLoader);
+ when(wifiPreferenceController.isAvailable()).thenReturn(true);
when(mobileNetworkPreferenceController.isAvailable()).thenReturn(false);
when(tetherPreferenceController.isAvailable()).thenReturn(false);
diff --git a/tests/robotests/src/com/android/settings/security/ChangeScreenLockPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/security/ChangeScreenLockPreferenceControllerTest.java
index 6cc1704..fda5942 100644
--- a/tests/robotests/src/com/android/settings/security/ChangeScreenLockPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/security/ChangeScreenLockPreferenceControllerTest.java
@@ -17,17 +17,28 @@
package com.android.settings.security;
import static com.google.common.truth.Truth.assertThat;
+
+import static org.mockito.ArgumentMatchers.anyInt;
+import static org.mockito.ArgumentMatchers.anyString;
+import static org.mockito.Mockito.doReturn;
import static org.mockito.Mockito.spy;
import static org.mockito.Mockito.when;
import android.app.admin.DevicePolicyManager;
import android.content.Context;
import android.os.UserManager;
+import android.view.LayoutInflater;
+import android.view.View;
+
+import androidx.preference.PreferenceScreen;
+import androidx.preference.PreferenceViewHolder;
import com.android.internal.widget.LockPatternUtils;
+import com.android.settings.R;
import com.android.settings.testutils.FakeFeatureFactory;
import com.android.settings.testutils.SettingsRobolectricTestRunner;
import com.android.settings.testutils.shadow.ShadowUtils;
+import com.android.settings.widget.GearPreference;
import org.junit.Before;
import org.junit.Test;
@@ -47,10 +58,15 @@
private UserManager mUserManager;
@Mock
private DevicePolicyManager mDevicePolicyManager;
+ @Mock
+ private PreferenceScreen mPreferenceScreen;
private Context mContext;
private FakeFeatureFactory mFeatureFactory;
private ChangeScreenLockPreferenceController mController;
+ private View mGearView;
+ private GearPreference mGearPreference;
+ private PreferenceViewHolder mPreferenceViewHolder;
@Before
public void setUp() {
@@ -75,4 +91,149 @@
public void testDeviceAdministrators_ifDisabled_shouldNotBeShown() {
assertThat(mController.isAvailable()).isFalse();
}
+
+ @Test
+ public void updateState_notSecureDisableKeyguard_shouldNotShowGear() {
+ when(mLockPatternUtils.isSecure(anyInt())).thenReturn(false);
+ when(mLockPatternUtils.isLockScreenDisabled(anyInt())).thenReturn(true);
+ mockGearPreferenceAndViewHolder();
+
+ showPreference();
+
+ assertThat(mGearView.getVisibility()).isEqualTo(View.GONE);
+ }
+
+ @Test
+ public void updateState_notSecureDisableKeyguard_summaryShouldShowOff() {
+ when(mLockPatternUtils.isSecure(anyInt())).thenReturn(false);
+ when(mLockPatternUtils.isLockScreenDisabled(anyInt())).thenReturn(true);
+ mockGearPreferenceAndViewHolder();
+
+ showPreference();
+
+ assertThat(mGearPreference.getSummary())
+ .isEqualTo(mContext.getString(R.string.unlock_set_unlock_mode_off));
+ }
+
+ @Test
+ public void updateState_notSecureWithSwipeKeyguard_shouldNotShowGear() {
+ when(mLockPatternUtils.isSecure(anyInt())).thenReturn(false);
+ when(mLockPatternUtils.isLockScreenDisabled(anyInt())).thenReturn(false);
+ mockGearPreferenceAndViewHolder();
+
+ showPreference();
+
+ assertThat(mGearView.getVisibility()).isEqualTo(View.GONE);
+ }
+
+ @Test
+ public void updateState_notSecureWithSwipeKeyguard_summaryShouldShowSwipe() {
+ when(mLockPatternUtils.isSecure(anyInt())).thenReturn(false);
+ when(mLockPatternUtils.isLockScreenDisabled(anyInt())).thenReturn(false);
+ mockGearPreferenceAndViewHolder();
+
+ showPreference();
+
+ assertThat(mGearPreference.getSummary())
+ .isEqualTo(mContext.getString(R.string.unlock_set_unlock_mode_none));
+ }
+
+ @Test
+ public void updateState_secureWithPinKeyguard_shouldShowGear() {
+ when(mLockPatternUtils.isSecure(anyInt())).thenReturn(true);
+ when(mLockPatternUtils.isLockScreenDisabled(anyInt())).thenReturn(false);
+ doReturn(DevicePolicyManager.PASSWORD_QUALITY_NUMERIC_COMPLEX).when(mLockPatternUtils)
+ .getKeyguardStoredPasswordQuality(anyInt());
+ mockGearPreferenceAndViewHolder();
+
+ showPreference();
+
+ assertThat(mGearView.getVisibility()).isEqualTo(View.VISIBLE);
+ }
+
+ @Test
+ public void updateState_secureWithPinKeyguard_summaryShouldShowPin() {
+ when(mLockPatternUtils.isSecure(anyInt())).thenReturn(true);
+ when(mLockPatternUtils.isLockScreenDisabled(anyInt())).thenReturn(false);
+ doReturn(DevicePolicyManager.PASSWORD_QUALITY_NUMERIC_COMPLEX).when(mLockPatternUtils)
+ .getKeyguardStoredPasswordQuality(anyInt());
+
+ mockGearPreferenceAndViewHolder();
+
+ showPreference();
+
+ assertThat(mGearPreference.getSummary())
+ .isEqualTo(mContext.getString(R.string.unlock_set_unlock_mode_pin));
+ }
+
+ @Test
+ public void updateState_secureWithPasswordKeyguard_shouldShowGear() {
+ when(mLockPatternUtils.isSecure(anyInt())).thenReturn(true);
+ when(mLockPatternUtils.isLockScreenDisabled(anyInt())).thenReturn(false);
+ doReturn(DevicePolicyManager.PASSWORD_QUALITY_COMPLEX).when(mLockPatternUtils)
+ .getKeyguardStoredPasswordQuality(anyInt());
+ mockGearPreferenceAndViewHolder();
+
+ showPreference();
+
+ assertThat(mGearView.getVisibility()).isEqualTo(View.VISIBLE);
+ }
+
+ @Test
+ public void updateState_secureWithPasswordKeyguard_summaryShouldShowPassword() {
+ when(mLockPatternUtils.isSecure(anyInt())).thenReturn(true);
+ when(mLockPatternUtils.isLockScreenDisabled(anyInt())).thenReturn(false);
+ doReturn(DevicePolicyManager.PASSWORD_QUALITY_COMPLEX).when(mLockPatternUtils)
+ .getKeyguardStoredPasswordQuality(anyInt());
+ mockGearPreferenceAndViewHolder();
+
+ showPreference();
+
+ assertThat(mGearPreference.getSummary())
+ .isEqualTo(mContext.getString(R.string.unlock_set_unlock_mode_password));
+ }
+
+ @Test
+ public void updateState_secureWithPatternKeyguard_shouldShowGear() {
+ when(mLockPatternUtils.isSecure(anyInt())).thenReturn(true);
+ when(mLockPatternUtils.isLockScreenDisabled(anyInt())).thenReturn(false);
+ doReturn(DevicePolicyManager.PASSWORD_QUALITY_SOMETHING).when(mLockPatternUtils)
+ .getKeyguardStoredPasswordQuality(anyInt());
+ mockGearPreferenceAndViewHolder();
+
+ showPreference();
+
+ assertThat(mGearView.getVisibility()).isEqualTo(View.VISIBLE);
+ }
+
+ @Test
+ public void updateState_secureWithPatternKeyguard_summaryShouldShowPattern() {
+ when(mLockPatternUtils.isSecure(anyInt())).thenReturn(true);
+ when(mLockPatternUtils.isLockScreenDisabled(anyInt())).thenReturn(false);
+ doReturn(DevicePolicyManager.PASSWORD_QUALITY_SOMETHING).when(mLockPatternUtils)
+ .getKeyguardStoredPasswordQuality(anyInt());
+ mockGearPreferenceAndViewHolder();
+
+ showPreference();
+
+ assertThat(mGearPreference.getSummary())
+ .isEqualTo(mContext.getString(R.string.unlock_set_unlock_mode_pattern));
+ }
+
+ private void mockGearPreferenceAndViewHolder() {
+ mGearPreference = new GearPreference(mContext, null);
+ mGearView = new View(mContext);
+ PreferenceViewHolder viewHolder = PreferenceViewHolder.createInstanceForTests(
+ LayoutInflater.from(mContext).inflate(
+ mGearPreference.getLayoutResource(), null, false));
+ mPreferenceViewHolder = spy(viewHolder);
+ doReturn(mGearView).when(mPreferenceViewHolder).findViewById(R.id.settings_button);
+ when(mPreferenceScreen.findPreference(anyString())).thenReturn(mGearPreference);
+ }
+
+ private void showPreference() {
+ mController.displayPreference(mPreferenceScreen);
+ mController.updateState(mGearPreference);
+ mGearPreference.onBindViewHolder(mPreferenceViewHolder);
+ }
}
\ No newline at end of file