[Settings] Support pure switch of inline toggle of Settings Injection v2
Bug: 132808482 Test: robotest Change-Id: Ib24614fb46fe990925edad721e3b7d5d032854fc
This commit is contained in:
@@ -18,18 +18,21 @@ package com.android.settings.dashboard;
|
||||
|
||||
import static com.android.settingslib.drawer.CategoryKey.CATEGORY_HOMEPAGE;
|
||||
import static com.android.settingslib.drawer.TileUtils.META_DATA_KEY_ORDER;
|
||||
import static com.android.settingslib.drawer.TileUtils.META_DATA_PREFERENCE_KEYHINT;
|
||||
|
||||
import static com.google.common.truth.Truth.assertThat;
|
||||
|
||||
import android.content.Context;
|
||||
import android.content.pm.ActivityInfo;
|
||||
import android.content.pm.ApplicationInfo;
|
||||
import android.content.pm.ProviderInfo;
|
||||
import android.os.Bundle;
|
||||
import android.util.Pair;
|
||||
|
||||
import com.android.settingslib.drawer.ActivityTile;
|
||||
import com.android.settingslib.drawer.CategoryKey;
|
||||
import com.android.settingslib.drawer.DashboardCategory;
|
||||
import com.android.settingslib.drawer.ProviderTile;
|
||||
import com.android.settingslib.drawer.Tile;
|
||||
|
||||
import org.junit.Before;
|
||||
@@ -132,25 +135,9 @@ public class CategoryManagerTest {
|
||||
// Create some fake tiles that are not sorted.
|
||||
final String testPackage = "com.android.test";
|
||||
final DashboardCategory category = new DashboardCategory(CATEGORY_HOMEPAGE);
|
||||
final ActivityInfo activityInfo1 = new ActivityInfo();
|
||||
activityInfo1.metaData = new Bundle();
|
||||
activityInfo1.metaData.putInt(META_DATA_KEY_ORDER, 100);
|
||||
activityInfo1.packageName = testPackage;
|
||||
activityInfo1.name = "class1";
|
||||
final ActivityInfo activityInfo2 = new ActivityInfo();
|
||||
activityInfo2.metaData = new Bundle();
|
||||
activityInfo2.metaData.putInt(META_DATA_KEY_ORDER, 50);
|
||||
activityInfo2.packageName = testPackage;
|
||||
activityInfo2.name = "class2";
|
||||
final ActivityInfo activityInfo3 = new ActivityInfo();
|
||||
activityInfo3.metaData = new Bundle();
|
||||
activityInfo3.metaData.putInt(META_DATA_KEY_ORDER, 200);
|
||||
activityInfo3.packageName = testPackage;
|
||||
activityInfo3.name = "class3";
|
||||
final Tile tile1 = new ActivityTile(activityInfo1, category.key);
|
||||
final Tile tile2 = new ActivityTile(activityInfo2, category.key);
|
||||
final Tile tile3 = new ActivityTile(activityInfo3, category.key);
|
||||
|
||||
final Tile tile1 = createActivityTile(category.key, testPackage, "class1", 100);
|
||||
final Tile tile2 = createActivityTile(category.key, testPackage, "class2", 50);
|
||||
final Tile tile3 = createActivityTile(category.key, testPackage, "class3", 200);
|
||||
category.addTile(tile1);
|
||||
category.addTile(tile2);
|
||||
category.addTile(tile3);
|
||||
@@ -171,25 +158,9 @@ public class CategoryManagerTest {
|
||||
final String testPackage1 = "com.android.test1";
|
||||
final String testPackage2 = "com.android.test2";
|
||||
final DashboardCategory category = new DashboardCategory(CATEGORY_HOMEPAGE);
|
||||
final ActivityInfo activityInfo1 = new ActivityInfo();
|
||||
activityInfo1.metaData = new Bundle();
|
||||
activityInfo1.metaData.putInt(META_DATA_KEY_ORDER, 100);
|
||||
activityInfo1.packageName = testPackage2;
|
||||
activityInfo1.name = "class1";
|
||||
final ActivityInfo activityInfo2 = new ActivityInfo();
|
||||
activityInfo2.metaData = new Bundle();
|
||||
activityInfo2.metaData.putInt(META_DATA_KEY_ORDER, 100);
|
||||
activityInfo2.packageName = testPackage1;
|
||||
activityInfo2.name = "class2";
|
||||
final ActivityInfo activityInfo3 = new ActivityInfo();
|
||||
activityInfo3.metaData = new Bundle();
|
||||
activityInfo3.metaData.putInt(META_DATA_KEY_ORDER, 50);
|
||||
activityInfo3.packageName = testPackage1;
|
||||
activityInfo3.name = "class3";
|
||||
|
||||
final Tile tile1 = new ActivityTile(activityInfo1, category.key);
|
||||
final Tile tile2 = new ActivityTile(activityInfo2, category.key);
|
||||
final Tile tile3 = new ActivityTile(activityInfo3, category.key);
|
||||
final Tile tile1 = createActivityTile(category.key, testPackage2, "class1", 100);
|
||||
final Tile tile2 = createActivityTile(category.key, testPackage1, "class2", 100);
|
||||
final Tile tile3 = createActivityTile(category.key, testPackage1, "class3", 50);
|
||||
category.addTile(tile1);
|
||||
category.addTile(tile2);
|
||||
category.addTile(tile3);
|
||||
@@ -209,24 +180,9 @@ public class CategoryManagerTest {
|
||||
// Create some fake tiles that are not sorted.
|
||||
final String testPackage = mContext.getPackageName();
|
||||
final DashboardCategory category = new DashboardCategory(CATEGORY_HOMEPAGE);
|
||||
final ActivityInfo activityInfo1 = new ActivityInfo();
|
||||
activityInfo1.packageName = testPackage;
|
||||
activityInfo1.name = "class1";
|
||||
activityInfo1.metaData = new Bundle();
|
||||
activityInfo1.metaData.putInt(META_DATA_KEY_ORDER, 100);
|
||||
final ActivityInfo activityInfo2 = new ActivityInfo();
|
||||
activityInfo2.packageName = testPackage;
|
||||
activityInfo2.name = "class2";
|
||||
activityInfo2.metaData = new Bundle();
|
||||
activityInfo2.metaData.putInt(META_DATA_KEY_ORDER, 100);
|
||||
final ActivityInfo activityInfo3 = new ActivityInfo();
|
||||
activityInfo3.packageName = testPackage;
|
||||
activityInfo3.name = "class3";
|
||||
activityInfo3.metaData = new Bundle();
|
||||
activityInfo3.metaData.putInt(META_DATA_KEY_ORDER, 50);
|
||||
final Tile tile1 = new ActivityTile(activityInfo1, category.key);
|
||||
final Tile tile2 = new ActivityTile(activityInfo2, category.key);
|
||||
final Tile tile3 = new ActivityTile(activityInfo3, category.key);
|
||||
final Tile tile1 = createActivityTile(category.key, testPackage, "class1", 100);
|
||||
final Tile tile2 = createActivityTile(category.key, testPackage, "class2", 100);
|
||||
final Tile tile3 = createActivityTile(category.key, testPackage, "class3", 50);
|
||||
category.addTile(tile1);
|
||||
category.addTile(tile2);
|
||||
category.addTile(tile3);
|
||||
@@ -247,32 +203,10 @@ public class CategoryManagerTest {
|
||||
final String testPackage = mContext.getPackageName();
|
||||
final String testPackage2 = "com.google.test2";
|
||||
final DashboardCategory category = new DashboardCategory(CATEGORY_HOMEPAGE);
|
||||
|
||||
final ActivityInfo activityInfo1 = new ActivityInfo();
|
||||
activityInfo1.packageName = testPackage;
|
||||
activityInfo1.name = "class1";
|
||||
activityInfo1.metaData = new Bundle();
|
||||
activityInfo1.metaData.putInt(META_DATA_KEY_ORDER, 2);
|
||||
final ActivityInfo activityInfo2 = new ActivityInfo();
|
||||
activityInfo2.packageName = testPackage;
|
||||
activityInfo2.name = "class2";
|
||||
activityInfo2.metaData = new Bundle();
|
||||
activityInfo2.metaData.putInt(META_DATA_KEY_ORDER, 1);
|
||||
final ActivityInfo activityInfo3 = new ActivityInfo();
|
||||
activityInfo3.packageName = testPackage2;
|
||||
activityInfo3.name = "class0";
|
||||
activityInfo3.metaData = new Bundle();
|
||||
activityInfo3.metaData.putInt(META_DATA_KEY_ORDER, 0);
|
||||
final ActivityInfo activityInfo4 = new ActivityInfo();
|
||||
activityInfo4.packageName = testPackage;
|
||||
activityInfo4.name = "class3";
|
||||
activityInfo4.metaData = new Bundle();
|
||||
activityInfo4.metaData.putInt(META_DATA_KEY_ORDER, -1);
|
||||
|
||||
final Tile tile1 = new ActivityTile(activityInfo1, category.key);
|
||||
final Tile tile2 = new ActivityTile(activityInfo2, category.key);
|
||||
final Tile tile4 = new ActivityTile(activityInfo4, category.key);
|
||||
final Tile tile3 = new ActivityTile(activityInfo3, category.key);
|
||||
final Tile tile1 = createActivityTile(category.key, testPackage, "class1", 2);
|
||||
final Tile tile2 = createActivityTile(category.key, testPackage, "class2", 1);
|
||||
final Tile tile3 = createActivityTile(category.key, testPackage2, "class0", 0);
|
||||
final Tile tile4 = createActivityTile(category.key, testPackage, "class3", -1);
|
||||
category.addTile(tile1);
|
||||
category.addTile(tile2);
|
||||
category.addTile(tile3);
|
||||
@@ -296,24 +230,9 @@ public class CategoryManagerTest {
|
||||
final String testPackage2 = "com.google.test2";
|
||||
final String testPackage3 = "com.abcde.test3";
|
||||
final DashboardCategory category = new DashboardCategory(CATEGORY_HOMEPAGE);
|
||||
final ActivityInfo activityInfo1 = new ActivityInfo();
|
||||
activityInfo1.packageName = testPackage2;
|
||||
activityInfo1.name = "class1";
|
||||
activityInfo1.metaData = new Bundle();
|
||||
activityInfo1.metaData.putInt(META_DATA_KEY_ORDER, 1);
|
||||
final ActivityInfo activityInfo2 = new ActivityInfo();
|
||||
activityInfo2.packageName = testPackage;
|
||||
activityInfo2.name = "class2";
|
||||
activityInfo2.metaData = new Bundle();
|
||||
activityInfo2.metaData.putInt(META_DATA_KEY_ORDER, 1);
|
||||
final ActivityInfo activityInfo3 = new ActivityInfo();
|
||||
activityInfo3.packageName = testPackage3;
|
||||
activityInfo3.name = "class3";
|
||||
activityInfo3.metaData = new Bundle();
|
||||
activityInfo3.metaData.putInt(META_DATA_KEY_ORDER, 1);
|
||||
final Tile tile1 = new ActivityTile(activityInfo1, category.key);
|
||||
final Tile tile2 = new ActivityTile(activityInfo2, category.key);
|
||||
final Tile tile3 = new ActivityTile(activityInfo3, category.key);
|
||||
final Tile tile1 = createActivityTile(category.key, testPackage2, "class1", 1);
|
||||
final Tile tile2 = createActivityTile(category.key, testPackage, "class2", 1);
|
||||
final Tile tile3 = createActivityTile(category.key, testPackage3, "class3", 1);
|
||||
category.addTile(tile1);
|
||||
category.addTile(tile2);
|
||||
category.addTile(tile3);
|
||||
@@ -333,58 +252,36 @@ public class CategoryManagerTest {
|
||||
// Create some unique tiles
|
||||
final String testPackage = mContext.getPackageName();
|
||||
final DashboardCategory category = new DashboardCategory(CATEGORY_HOMEPAGE);
|
||||
final ActivityInfo activityInfo1 = new ActivityInfo();
|
||||
activityInfo1.packageName = testPackage;
|
||||
activityInfo1.name = "class1";
|
||||
activityInfo1.metaData = new Bundle();
|
||||
activityInfo1.metaData.putInt(META_DATA_KEY_ORDER, 100);
|
||||
final ActivityInfo activityInfo2 = new ActivityInfo();
|
||||
activityInfo2.packageName = testPackage;
|
||||
activityInfo2.name = "class2";
|
||||
activityInfo2.metaData = new Bundle();
|
||||
activityInfo2.metaData.putInt(META_DATA_KEY_ORDER, 100);
|
||||
final ActivityInfo activityInfo3 = new ActivityInfo();
|
||||
activityInfo3.packageName = testPackage;
|
||||
activityInfo3.name = "class3";
|
||||
activityInfo3.metaData = new Bundle();
|
||||
activityInfo3.metaData.putInt(META_DATA_KEY_ORDER, 50);
|
||||
final Tile tile1 = new ActivityTile(activityInfo1, category.key);
|
||||
final Tile tile2 = new ActivityTile(activityInfo2, category.key);
|
||||
final Tile tile3 = new ActivityTile(activityInfo3, category.key);
|
||||
final Tile tile1 = createActivityTile(category.key, testPackage, "class1", 100);
|
||||
final Tile tile2 = createActivityTile(category.key, testPackage, "class2", 100);
|
||||
final Tile tile3 = createActivityTile(category.key, testPackage, "class3", 50);
|
||||
final Tile tile4 = createProviderTile(category.key, testPackage, "class1", "authority1",
|
||||
"key1", 100);
|
||||
final Tile tile5 = createProviderTile(category.key, testPackage, "class1", "authority2",
|
||||
"key2", 100);
|
||||
final Tile tile6 = createProviderTile(category.key, testPackage, "class1", "authority1",
|
||||
"key2", 50);
|
||||
category.addTile(tile1);
|
||||
category.addTile(tile2);
|
||||
category.addTile(tile3);
|
||||
category.addTile(tile4);
|
||||
category.addTile(tile5);
|
||||
category.addTile(tile6);
|
||||
mCategoryByKeyMap.put(CATEGORY_HOMEPAGE, category);
|
||||
|
||||
mCategoryManager.filterDuplicateTiles(mCategoryByKeyMap);
|
||||
|
||||
assertThat(category.getTilesCount()).isEqualTo(3);
|
||||
assertThat(category.getTilesCount()).isEqualTo(6);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void filterTiles_hasDuplicate_shouldOnlyKeepUniqueTiles() {
|
||||
public void filterTiles_hasDuplicateActivityTiles_shouldOnlyKeepUniqueTiles() {
|
||||
// Create tiles pointing to same intent.
|
||||
final String testPackage = mContext.getPackageName();
|
||||
final DashboardCategory category = new DashboardCategory(CATEGORY_HOMEPAGE);
|
||||
final ActivityInfo activityInfo1 = new ActivityInfo();
|
||||
activityInfo1.packageName = testPackage;
|
||||
activityInfo1.name = "class1";
|
||||
activityInfo1.metaData = new Bundle();
|
||||
activityInfo1.metaData.putInt(META_DATA_KEY_ORDER, 100);
|
||||
final ActivityInfo activityInfo2 = new ActivityInfo();
|
||||
activityInfo2.packageName = testPackage;
|
||||
activityInfo2.name = "class1";
|
||||
activityInfo2.metaData = new Bundle();
|
||||
activityInfo2.metaData.putInt(META_DATA_KEY_ORDER, 100);
|
||||
final ActivityInfo activityInfo3 = new ActivityInfo();
|
||||
activityInfo3.packageName = testPackage;
|
||||
activityInfo3.name = "class1";
|
||||
activityInfo3.metaData = new Bundle();
|
||||
activityInfo3.metaData.putInt(META_DATA_KEY_ORDER, 50);
|
||||
|
||||
final Tile tile1 = new ActivityTile(activityInfo1, category.key);
|
||||
final Tile tile2 = new ActivityTile(activityInfo2, category.key);
|
||||
final Tile tile3 = new ActivityTile(activityInfo3, category.key);
|
||||
final Tile tile1 = createActivityTile(category.key, testPackage, "class1", 100);
|
||||
final Tile tile2 = createActivityTile(category.key, testPackage, "class1", 100);
|
||||
final Tile tile3 = createActivityTile(category.key, testPackage, "class1", 50);
|
||||
category.addTile(tile1);
|
||||
category.addTile(tile2);
|
||||
category.addTile(tile3);
|
||||
@@ -394,4 +291,47 @@ public class CategoryManagerTest {
|
||||
|
||||
assertThat(category.getTilesCount()).isEqualTo(1);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void filterTiles_hasDuplicateProviderTiles_shouldOnlyKeepUniqueTiles() {
|
||||
// Create tiles pointing to same authority and key.
|
||||
final String testPackage = mContext.getPackageName();
|
||||
final DashboardCategory category = new DashboardCategory(CATEGORY_HOMEPAGE);
|
||||
final Tile tile1 = createProviderTile(category.key, testPackage, "class1", "authority1",
|
||||
"key1", 100);
|
||||
final Tile tile2 = createProviderTile(category.key, testPackage, "class2", "authority1",
|
||||
"key1", 100);
|
||||
final Tile tile3 = createProviderTile(category.key, testPackage, "class3", "authority1",
|
||||
"key1", 50);
|
||||
category.addTile(tile1);
|
||||
category.addTile(tile2);
|
||||
category.addTile(tile3);
|
||||
mCategoryByKeyMap.put(CATEGORY_HOMEPAGE, category);
|
||||
|
||||
mCategoryManager.filterDuplicateTiles(mCategoryByKeyMap);
|
||||
|
||||
assertThat(category.getTilesCount()).isEqualTo(1);
|
||||
}
|
||||
|
||||
private Tile createActivityTile(String categoryKey, String packageName, String className,
|
||||
int order) {
|
||||
final ActivityInfo activityInfo = new ActivityInfo();
|
||||
activityInfo.packageName = packageName;
|
||||
activityInfo.name = className;
|
||||
activityInfo.metaData = new Bundle();
|
||||
activityInfo.metaData.putInt(META_DATA_KEY_ORDER, order);
|
||||
return new ActivityTile(activityInfo, categoryKey);
|
||||
}
|
||||
|
||||
private Tile createProviderTile(String categoryKey, String packageName, String className,
|
||||
String authority, String key, int order) {
|
||||
final ProviderInfo providerInfo = new ProviderInfo();
|
||||
final Bundle metaData = new Bundle();
|
||||
providerInfo.packageName = packageName;
|
||||
providerInfo.name = className;
|
||||
providerInfo.authority = authority;
|
||||
metaData.putString(META_DATA_PREFERENCE_KEYHINT, key);
|
||||
metaData.putInt(META_DATA_KEY_ORDER, order);
|
||||
return new ProviderTile(providerInfo, categoryKey, metaData);
|
||||
}
|
||||
}
|
||||
|
@@ -18,10 +18,12 @@ package com.android.settings.dashboard;
|
||||
|
||||
import static android.content.Intent.EXTRA_USER;
|
||||
|
||||
import static com.android.settingslib.drawer.SwitchesProvider.EXTRA_SWITCH_SET_CHECKED_ERROR;
|
||||
import static com.android.settingslib.drawer.TileUtils.META_DATA_KEY_ORDER;
|
||||
import static com.android.settingslib.drawer.TileUtils.META_DATA_KEY_PROFILE;
|
||||
import static com.android.settingslib.drawer.TileUtils.META_DATA_PREFERENCE_KEYHINT;
|
||||
import static com.android.settingslib.drawer.TileUtils.META_DATA_PREFERENCE_SUMMARY;
|
||||
import static com.android.settingslib.drawer.TileUtils.META_DATA_PREFERENCE_SWITCH_URI;
|
||||
import static com.android.settingslib.drawer.TileUtils.META_DATA_PREFERENCE_TITLE;
|
||||
import static com.android.settingslib.drawer.TileUtils.PROFILE_ALL;
|
||||
import static com.android.settingslib.drawer.TileUtils.PROFILE_PRIMARY;
|
||||
@@ -43,6 +45,7 @@ import android.content.Context;
|
||||
import android.content.Intent;
|
||||
import android.content.pm.ActivityInfo;
|
||||
import android.content.pm.PackageManager;
|
||||
import android.content.pm.ProviderInfo;
|
||||
import android.content.pm.ResolveInfo;
|
||||
import android.graphics.Bitmap;
|
||||
import android.graphics.drawable.Icon;
|
||||
@@ -52,6 +55,7 @@ import android.os.UserManager;
|
||||
|
||||
import androidx.fragment.app.FragmentActivity;
|
||||
import androidx.preference.Preference;
|
||||
import androidx.preference.SwitchPreference;
|
||||
|
||||
import com.android.internal.logging.nano.MetricsProto.MetricsEvent;
|
||||
import com.android.settings.R;
|
||||
@@ -62,6 +66,7 @@ import com.android.settings.testutils.shadow.ShadowUserManager;
|
||||
import com.android.settingslib.core.instrumentation.MetricsFeatureProvider;
|
||||
import com.android.settingslib.drawer.ActivityTile;
|
||||
import com.android.settingslib.drawer.CategoryKey;
|
||||
import com.android.settingslib.drawer.ProviderTile;
|
||||
import com.android.settingslib.drawer.Tile;
|
||||
import com.android.settingslib.drawer.TileUtils;
|
||||
|
||||
@@ -81,11 +86,15 @@ import org.robolectric.shadows.ShadowActivity;
|
||||
import org.robolectric.util.ReflectionHelpers;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
@RunWith(RobolectricTestRunner.class)
|
||||
@Config(shadows = ShadowUserManager.class)
|
||||
public class DashboardFeatureProviderImplTest {
|
||||
|
||||
private static final String KEY = "key";
|
||||
private static final String SWITCH_URI = "content://com.android.settings/tile_switch";
|
||||
|
||||
@Mock(answer = Answers.RETURNS_DEEP_STUBS)
|
||||
private FragmentActivity mActivity;
|
||||
@Mock(answer = Answers.RETURNS_DEEP_STUBS)
|
||||
@@ -96,6 +105,8 @@ public class DashboardFeatureProviderImplTest {
|
||||
|
||||
private Context mContext;
|
||||
private ActivityInfo mActivityInfo;
|
||||
private ProviderInfo mProviderInfo;
|
||||
private Bundle mSwitchMetaData;
|
||||
private DashboardFeatureProviderImpl mImpl;
|
||||
private boolean mForceRoundedIcon;
|
||||
|
||||
@@ -112,6 +123,17 @@ public class DashboardFeatureProviderImplTest {
|
||||
mActivityInfo.metaData.putInt(META_DATA_PREFERENCE_TITLE, R.string.settings_label);
|
||||
mActivityInfo.metaData.putInt(META_DATA_PREFERENCE_SUMMARY,
|
||||
R.string.about_settings_summary);
|
||||
|
||||
mProviderInfo = new ProviderInfo();
|
||||
mProviderInfo.packageName = mContext.getPackageName();
|
||||
mProviderInfo.name = "provider";
|
||||
mProviderInfo.authority = "com.android.settings";
|
||||
mSwitchMetaData = new Bundle();
|
||||
mSwitchMetaData.putInt(META_DATA_PREFERENCE_TITLE, R.string.settings_label);
|
||||
mSwitchMetaData.putInt(META_DATA_PREFERENCE_SUMMARY, R.string.about_settings_summary);
|
||||
mSwitchMetaData.putString(META_DATA_PREFERENCE_KEYHINT, KEY);
|
||||
mSwitchMetaData.putString(META_DATA_PREFERENCE_SWITCH_URI, SWITCH_URI);
|
||||
|
||||
doReturn(mPackageManager).when(mContext).getPackageManager();
|
||||
when(mPackageManager.resolveActivity(any(Intent.class), anyInt()))
|
||||
.thenReturn(new ResolveInfo());
|
||||
@@ -132,8 +154,8 @@ public class DashboardFeatureProviderImplTest {
|
||||
doReturn(Icon.createWithBitmap(Bitmap.createBitmap(1, 1, Bitmap.Config.RGB_565)))
|
||||
.when(tile).getIcon(any(Context.class));
|
||||
mActivityInfo.metaData.putString(SettingsActivity.META_DATA_KEY_FRAGMENT_CLASS, "HI");
|
||||
mImpl.bindPreferenceToTile(mActivity, mForceRoundedIcon, MetricsEvent.SETTINGS_GESTURES,
|
||||
preference, tile, "123", Preference.DEFAULT_ORDER);
|
||||
mImpl.bindPreferenceToTileAndGetObservers(mActivity, mForceRoundedIcon,
|
||||
MetricsEvent.SETTINGS_GESTURES, preference, tile, "123", Preference.DEFAULT_ORDER);
|
||||
|
||||
assertThat(preference.getTitle()).isEqualTo(mContext.getText(R.string.settings_label));
|
||||
assertThat(preference.getSummary())
|
||||
@@ -144,14 +166,35 @@ public class DashboardFeatureProviderImplTest {
|
||||
assertThat(preference.getOrder()).isEqualTo(tile.getOrder());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void bindPreference_shouldBindAllSwitchData() {
|
||||
final Preference preference = new SwitchPreference(RuntimeEnvironment.application);
|
||||
final Tile tile = spy(new ProviderTile(mProviderInfo, CategoryKey.CATEGORY_HOMEPAGE,
|
||||
mSwitchMetaData));
|
||||
mSwitchMetaData.putInt(META_DATA_KEY_ORDER, 10);
|
||||
doReturn(Icon.createWithBitmap(Bitmap.createBitmap(1, 1, Bitmap.Config.RGB_565)))
|
||||
.when(tile).getIcon(any(Context.class));
|
||||
final List<DynamicDataObserver> observers = mImpl.bindPreferenceToTileAndGetObservers(
|
||||
mActivity, mForceRoundedIcon, MetricsEvent.SETTINGS_GESTURES, preference, tile,
|
||||
null /* key*/, Preference.DEFAULT_ORDER);
|
||||
|
||||
assertThat(preference.getTitle()).isEqualTo(mContext.getText(R.string.settings_label));
|
||||
assertThat(preference.getSummary())
|
||||
.isEqualTo(mContext.getText(R.string.about_settings_summary));
|
||||
assertThat(preference.getKey()).isEqualTo(KEY);
|
||||
assertThat(preference.getIcon()).isNotNull();
|
||||
assertThat(preference.getOrder()).isEqualTo(tile.getOrder());
|
||||
assertThat(observers.get(0).getUri().toString()).isEqualTo(SWITCH_URI);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void bindPreference_noFragmentMetadata_shouldBindIntent() {
|
||||
final Preference preference = new Preference(RuntimeEnvironment.application);
|
||||
mActivityInfo.metaData.putInt(META_DATA_KEY_ORDER, 10);
|
||||
final Tile tile = new ActivityTile(mActivityInfo, CategoryKey.CATEGORY_HOMEPAGE);
|
||||
|
||||
mImpl.bindPreferenceToTile(mActivity, mForceRoundedIcon, MetricsEvent.SETTINGS_GESTURES,
|
||||
preference, tile, "123", Preference.DEFAULT_ORDER);
|
||||
mImpl.bindPreferenceToTileAndGetObservers(mActivity, mForceRoundedIcon,
|
||||
MetricsEvent.SETTINGS_GESTURES, preference, tile, "123", Preference.DEFAULT_ORDER);
|
||||
|
||||
assertThat(preference.getFragment()).isNull();
|
||||
assertThat(preference.getOnPreferenceClickListener()).isNotNull();
|
||||
@@ -166,8 +209,8 @@ public class DashboardFeatureProviderImplTest {
|
||||
tile.userHandle.add(mock(UserHandle.class));
|
||||
tile.userHandle.add(mock(UserHandle.class));
|
||||
|
||||
mImpl.bindPreferenceToTile(mActivity, mForceRoundedIcon, MetricsEvent.SETTINGS_GESTURES,
|
||||
preference, tile, "123", Preference.DEFAULT_ORDER);
|
||||
mImpl.bindPreferenceToTileAndGetObservers(mActivity, mForceRoundedIcon,
|
||||
MetricsEvent.SETTINGS_GESTURES, preference, tile, "123", Preference.DEFAULT_ORDER);
|
||||
preference.getOnPreferenceClickListener().onPreferenceClick(null);
|
||||
|
||||
verify(mActivity).getSupportFragmentManager();
|
||||
@@ -183,8 +226,8 @@ public class DashboardFeatureProviderImplTest {
|
||||
when(mActivity.getSystemService(Context.USER_SERVICE))
|
||||
.thenReturn(mUserManager);
|
||||
|
||||
mImpl.bindPreferenceToTile(mActivity, mForceRoundedIcon, MetricsEvent.SETTINGS_GESTURES,
|
||||
preference, tile, "123", Preference.DEFAULT_ORDER);
|
||||
mImpl.bindPreferenceToTileAndGetObservers(mActivity, mForceRoundedIcon,
|
||||
MetricsEvent.SETTINGS_GESTURES, preference, tile, "123", Preference.DEFAULT_ORDER);
|
||||
preference.getOnPreferenceClickListener().onPreferenceClick(null);
|
||||
|
||||
verify(mFeatureFactory.metricsFeatureProvider).logDashboardStartIntent(
|
||||
@@ -203,8 +246,8 @@ public class DashboardFeatureProviderImplTest {
|
||||
tile.userHandle = new ArrayList<>();
|
||||
tile.userHandle.add(mock(UserHandle.class));
|
||||
|
||||
mImpl.bindPreferenceToTile(mActivity, mForceRoundedIcon, MetricsEvent.SETTINGS_GESTURES,
|
||||
preference, tile, "123", Preference.DEFAULT_ORDER);
|
||||
mImpl.bindPreferenceToTileAndGetObservers(mActivity, mForceRoundedIcon,
|
||||
MetricsEvent.SETTINGS_GESTURES, preference, tile, "123", Preference.DEFAULT_ORDER);
|
||||
preference.getOnPreferenceClickListener().onPreferenceClick(null);
|
||||
verify(mFeatureFactory.metricsFeatureProvider).logDashboardStartIntent(
|
||||
any(Context.class),
|
||||
@@ -217,8 +260,8 @@ public class DashboardFeatureProviderImplTest {
|
||||
@Test
|
||||
public void bindPreference_nullPreference_shouldIgnore() {
|
||||
final Tile tile = mock(Tile.class);
|
||||
mImpl.bindPreferenceToTile(mActivity, mForceRoundedIcon, MetricsEvent.VIEW_UNKNOWN,
|
||||
null, tile, "123", Preference.DEFAULT_ORDER);
|
||||
mImpl.bindPreferenceToTileAndGetObservers(mActivity, mForceRoundedIcon,
|
||||
MetricsEvent.VIEW_UNKNOWN, null, tile, "123", Preference.DEFAULT_ORDER);
|
||||
|
||||
verifyZeroInteractions(tile);
|
||||
}
|
||||
@@ -227,8 +270,9 @@ public class DashboardFeatureProviderImplTest {
|
||||
public void bindPreference_withNullKeyNullPriority_shouldGenerateKeyAndPriority() {
|
||||
final Preference preference = new Preference(RuntimeEnvironment.application);
|
||||
final Tile tile = new ActivityTile(mActivityInfo, CategoryKey.CATEGORY_HOMEPAGE);
|
||||
mImpl.bindPreferenceToTile(mActivity, mForceRoundedIcon, MetricsEvent.VIEW_UNKNOWN,
|
||||
preference, tile, null /*key */, Preference.DEFAULT_ORDER);
|
||||
mImpl.bindPreferenceToTileAndGetObservers(mActivity, mForceRoundedIcon,
|
||||
MetricsEvent.VIEW_UNKNOWN, preference, tile, null /*key */,
|
||||
Preference.DEFAULT_ORDER);
|
||||
|
||||
assertThat(preference.getKey()).isNotNull();
|
||||
assertThat(preference.getOrder()).isEqualTo(Preference.DEFAULT_ORDER);
|
||||
@@ -241,8 +285,9 @@ public class DashboardFeatureProviderImplTest {
|
||||
|
||||
final Tile tile = new ActivityTile(mActivityInfo, CategoryKey.CATEGORY_HOMEPAGE);
|
||||
|
||||
mImpl.bindPreferenceToTile(mActivity, mForceRoundedIcon, MetricsEvent.VIEW_UNKNOWN,
|
||||
preference, tile, null /*key */, Preference.DEFAULT_ORDER);
|
||||
mImpl.bindPreferenceToTileAndGetObservers(mActivity, mForceRoundedIcon,
|
||||
MetricsEvent.VIEW_UNKNOWN, preference, tile, null /*key */,
|
||||
Preference.DEFAULT_ORDER);
|
||||
|
||||
assertThat(preference.getSummary())
|
||||
.isEqualTo(RuntimeEnvironment.application.getString(R.string.summary_placeholder));
|
||||
@@ -250,30 +295,99 @@ public class DashboardFeatureProviderImplTest {
|
||||
|
||||
@Test
|
||||
@Config(shadows = {ShadowTileUtils.class})
|
||||
public void bindPreference_hasSummaryUri_shouldLoadSummaryFromContentProvider() {
|
||||
public void bindPreference_hasSummaryUri_shouldLoadSummaryFromContentProviderAndHaveObserver() {
|
||||
final Preference preference = new Preference(RuntimeEnvironment.application);
|
||||
final Tile tile = new ActivityTile(mActivityInfo, CategoryKey.CATEGORY_HOMEPAGE);
|
||||
mActivityInfo.metaData.putString(TileUtils.META_DATA_PREFERENCE_SUMMARY_URI,
|
||||
"content://com.android.settings/tile_summary");
|
||||
final String uriString = "content://com.android.settings/tile_summary";
|
||||
mActivityInfo.metaData.putString(TileUtils.META_DATA_PREFERENCE_SUMMARY_URI, uriString);
|
||||
|
||||
mImpl.bindPreferenceToTile(mActivity, mForceRoundedIcon, MetricsEvent.VIEW_UNKNOWN,
|
||||
preference, tile, null /*key */, Preference.DEFAULT_ORDER);
|
||||
final List<DynamicDataObserver> observers = mImpl.bindPreferenceToTileAndGetObservers(
|
||||
mActivity, mForceRoundedIcon, MetricsEvent.VIEW_UNKNOWN, preference, tile,
|
||||
null /*key */, Preference.DEFAULT_ORDER);
|
||||
|
||||
assertThat(preference.getSummary()).isEqualTo(ShadowTileUtils.MOCK_SUMMARY);
|
||||
assertThat(observers.get(0).getUri().toString()).isEqualTo(uriString);
|
||||
}
|
||||
|
||||
@Test
|
||||
@Config(shadows = {ShadowTileUtils.class})
|
||||
public void bindPreference_hasTitleUri_shouldLoadFromContentProvider() {
|
||||
public void bindPreference_hasTitleUri_shouldLoadFromContentProviderAndHaveObserver() {
|
||||
final Preference preference = new Preference(RuntimeEnvironment.application);
|
||||
final Tile tile = new ActivityTile(mActivityInfo, CategoryKey.CATEGORY_HOMEPAGE);
|
||||
mActivityInfo.metaData.putString(TileUtils.META_DATA_PREFERENCE_TITLE_URI,
|
||||
"content://com.android.settings/tile_title");
|
||||
final String uriString = "content://com.android.settings/tile_title";
|
||||
mActivityInfo.metaData.putString(TileUtils.META_DATA_PREFERENCE_TITLE_URI, uriString);
|
||||
|
||||
mImpl.bindPreferenceToTile(mActivity, mForceRoundedIcon, MetricsEvent.VIEW_UNKNOWN,
|
||||
preference, tile, null /*key */, Preference.DEFAULT_ORDER);
|
||||
final List<DynamicDataObserver> observers = mImpl.bindPreferenceToTileAndGetObservers(
|
||||
mActivity, mForceRoundedIcon, MetricsEvent.VIEW_UNKNOWN, preference, tile,
|
||||
null /*key */, Preference.DEFAULT_ORDER);
|
||||
|
||||
assertThat(preference.getTitle()).isEqualTo(ShadowTileUtils.MOCK_SUMMARY);
|
||||
assertThat(observers.get(0).getUri().toString()).isEqualTo(uriString);
|
||||
}
|
||||
|
||||
@Test
|
||||
@Config(shadows = {ShadowTileUtils.class})
|
||||
public void bindPreference_onCheckedChanged_shouldPutStateToContentProvider() {
|
||||
final SwitchPreference preference = new SwitchPreference(RuntimeEnvironment.application);
|
||||
final Tile tile = new ProviderTile(mProviderInfo, CategoryKey.CATEGORY_HOMEPAGE,
|
||||
mSwitchMetaData);
|
||||
final Bundle bundle = new Bundle();
|
||||
bundle.putBoolean(EXTRA_SWITCH_SET_CHECKED_ERROR, false);
|
||||
ShadowTileUtils.setResultBundle(bundle);
|
||||
mImpl.bindPreferenceToTileAndGetObservers(mActivity, mForceRoundedIcon,
|
||||
MetricsEvent.VIEW_UNKNOWN, preference, tile, null /*key */,
|
||||
Preference.DEFAULT_ORDER);
|
||||
|
||||
preference.callChangeListener(false);
|
||||
|
||||
assertThat(ShadowTileUtils.getProviderChecked()).isFalse();
|
||||
|
||||
preference.callChangeListener(true);
|
||||
|
||||
assertThat(ShadowTileUtils.getProviderChecked()).isTrue();
|
||||
}
|
||||
|
||||
@Test
|
||||
@Config(shadows = {ShadowTileUtils.class})
|
||||
public void bindPreference_onCheckedChangedError_shouldRevertCheckedState() {
|
||||
final SwitchPreference preference = new SwitchPreference(RuntimeEnvironment.application);
|
||||
final Tile tile = new ProviderTile(mProviderInfo, CategoryKey.CATEGORY_HOMEPAGE,
|
||||
mSwitchMetaData);
|
||||
final Bundle bundle = new Bundle();
|
||||
bundle.putBoolean(EXTRA_SWITCH_SET_CHECKED_ERROR, true);
|
||||
ShadowTileUtils.setResultBundle(bundle);
|
||||
mImpl.bindPreferenceToTileAndGetObservers(mActivity, mForceRoundedIcon,
|
||||
MetricsEvent.VIEW_UNKNOWN, preference, tile, null /*key */,
|
||||
Preference.DEFAULT_ORDER);
|
||||
|
||||
preference.callChangeListener(true);
|
||||
|
||||
assertThat(preference.isChecked()).isFalse();
|
||||
|
||||
preference.callChangeListener(false);
|
||||
|
||||
assertThat(preference.isChecked()).isTrue();
|
||||
}
|
||||
|
||||
@Test
|
||||
@Config(shadows = {ShadowTileUtils.class})
|
||||
public void bindPreference_callbackOnChanged_shouldLoadFromContentProvider() {
|
||||
final SwitchPreference preference = new SwitchPreference(RuntimeEnvironment.application);
|
||||
final Tile tile = new ProviderTile(mProviderInfo, CategoryKey.CATEGORY_HOMEPAGE,
|
||||
mSwitchMetaData);
|
||||
final List<DynamicDataObserver> observers = mImpl.bindPreferenceToTileAndGetObservers(
|
||||
mActivity, mForceRoundedIcon, MetricsEvent.VIEW_UNKNOWN, preference, tile,
|
||||
null /*key */, Preference.DEFAULT_ORDER);
|
||||
|
||||
ShadowTileUtils.setProviderChecked(false);
|
||||
observers.get(0).onDataChanged();
|
||||
|
||||
assertThat(preference.isChecked()).isFalse();
|
||||
|
||||
ShadowTileUtils.setProviderChecked(true);
|
||||
observers.get(0).onDataChanged();
|
||||
|
||||
assertThat(preference.isChecked()).isTrue();
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -281,8 +395,9 @@ public class DashboardFeatureProviderImplTest {
|
||||
final Preference preference = new Preference(RuntimeEnvironment.application);
|
||||
mActivityInfo.metaData.putString(META_DATA_PREFERENCE_KEYHINT, "key");
|
||||
final Tile tile = new ActivityTile(mActivityInfo, CategoryKey.CATEGORY_HOMEPAGE);
|
||||
mImpl.bindPreferenceToTile(mActivity, mForceRoundedIcon, MetricsEvent.VIEW_UNKNOWN,
|
||||
preference, tile, null /* key */, Preference.DEFAULT_ORDER);
|
||||
mImpl.bindPreferenceToTileAndGetObservers(mActivity, mForceRoundedIcon,
|
||||
MetricsEvent.VIEW_UNKNOWN, preference, tile, null /* key */,
|
||||
Preference.DEFAULT_ORDER);
|
||||
|
||||
assertThat(preference.getKey()).isEqualTo(tile.getKey(mContext));
|
||||
}
|
||||
@@ -308,8 +423,8 @@ public class DashboardFeatureProviderImplTest {
|
||||
mActivityInfo.metaData.putInt(META_DATA_KEY_ORDER, 10);
|
||||
final Tile tile = new ActivityTile(mActivityInfo, CategoryKey.CATEGORY_HOMEPAGE);
|
||||
|
||||
mImpl.bindPreferenceToTile(mActivity, mForceRoundedIcon, MetricsEvent.VIEW_UNKNOWN,
|
||||
preference, tile, "123", baseOrder);
|
||||
mImpl.bindPreferenceToTileAndGetObservers(mActivity, mForceRoundedIcon,
|
||||
MetricsEvent.VIEW_UNKNOWN, preference, tile, "123", baseOrder);
|
||||
|
||||
assertThat(preference.getOrder()).isEqualTo(tile.getOrder() + baseOrder);
|
||||
}
|
||||
@@ -321,8 +436,8 @@ public class DashboardFeatureProviderImplTest {
|
||||
mActivityInfo.metaData.putInt(META_DATA_KEY_ORDER, 10);
|
||||
final Tile tile = new ActivityTile(mActivityInfo, CategoryKey.CATEGORY_HOMEPAGE);
|
||||
mActivityInfo.metaData.putInt(META_DATA_KEY_ORDER, testOrder);
|
||||
mImpl.bindPreferenceToTile(mActivity, mForceRoundedIcon, MetricsEvent.VIEW_UNKNOWN,
|
||||
preference, tile, "123", Preference.DEFAULT_ORDER);
|
||||
mImpl.bindPreferenceToTileAndGetObservers(mActivity, mForceRoundedIcon,
|
||||
MetricsEvent.VIEW_UNKNOWN, preference, tile, "123", Preference.DEFAULT_ORDER);
|
||||
|
||||
assertThat(preference.getOrder()).isEqualTo(testOrder);
|
||||
}
|
||||
@@ -333,8 +448,8 @@ public class DashboardFeatureProviderImplTest {
|
||||
final Tile tile = new ActivityTile(mActivityInfo, CategoryKey.CATEGORY_HOMEPAGE);
|
||||
mActivityInfo.metaData.putString(META_DATA_KEY_ORDER, "hello");
|
||||
|
||||
mImpl.bindPreferenceToTile(mActivity, mForceRoundedIcon, MetricsEvent.VIEW_UNKNOWN,
|
||||
preference, tile, "123", Preference.DEFAULT_ORDER);
|
||||
mImpl.bindPreferenceToTileAndGetObservers(mActivity, mForceRoundedIcon,
|
||||
MetricsEvent.VIEW_UNKNOWN, preference, tile, "123", Preference.DEFAULT_ORDER);
|
||||
|
||||
assertThat(preference.getOrder()).isEqualTo(Preference.DEFAULT_ORDER);
|
||||
}
|
||||
@@ -347,8 +462,8 @@ public class DashboardFeatureProviderImplTest {
|
||||
mActivityInfo.metaData.putString(META_DATA_PREFERENCE_KEYHINT, "key");
|
||||
mActivityInfo.metaData.putString("com.android.settings.intent.action", "TestAction");
|
||||
tile.userHandle = null;
|
||||
mImpl.bindPreferenceToTile(activity, mForceRoundedIcon, MetricsEvent.SETTINGS_GESTURES,
|
||||
preference, tile, "123", Preference.DEFAULT_ORDER);
|
||||
mImpl.bindPreferenceToTileAndGetObservers(activity, mForceRoundedIcon,
|
||||
MetricsEvent.SETTINGS_GESTURES, preference, tile, "123", Preference.DEFAULT_ORDER);
|
||||
preference.performClick();
|
||||
ShadowActivity shadowActivity = Shadows.shadowOf(activity);
|
||||
|
||||
@@ -371,8 +486,8 @@ public class DashboardFeatureProviderImplTest {
|
||||
mActivityInfo.metaData.putString("com.android.settings.intent.action", "TestAction");
|
||||
tile.userHandle = null;
|
||||
|
||||
mImpl.bindPreferenceToTile(activity, mForceRoundedIcon, MetricsEvent.SETTINGS_GESTURES,
|
||||
preference, tile, "123", Preference.DEFAULT_ORDER);
|
||||
mImpl.bindPreferenceToTileAndGetObservers(activity, mForceRoundedIcon,
|
||||
MetricsEvent.SETTINGS_GESTURES, preference, tile, "123", Preference.DEFAULT_ORDER);
|
||||
preference.performClick();
|
||||
|
||||
final ShadowActivity.IntentForResult launchIntent =
|
||||
|
@@ -17,9 +17,11 @@ package com.android.settings.dashboard;
|
||||
|
||||
import static com.android.internal.logging.nano.MetricsProto.MetricsEvent.DASHBOARD_CONTAINER;
|
||||
import static com.android.settingslib.drawer.TileUtils.META_DATA_PREFERENCE_KEYHINT;
|
||||
import static com.android.settingslib.drawer.TileUtils.META_DATA_PREFERENCE_SWITCH_URI;
|
||||
|
||||
import static com.google.common.truth.Truth.assertThat;
|
||||
|
||||
import static org.mockito.ArgumentMatchers.any;
|
||||
import static org.mockito.ArgumentMatchers.nullable;
|
||||
import static org.mockito.Mockito.mock;
|
||||
import static org.mockito.Mockito.never;
|
||||
@@ -29,14 +31,18 @@ import static org.mockito.Mockito.verify;
|
||||
import static org.mockito.Mockito.when;
|
||||
|
||||
import android.app.settings.SettingsEnums;
|
||||
import android.content.ContentResolver;
|
||||
import android.content.Context;
|
||||
import android.content.pm.ActivityInfo;
|
||||
import android.content.pm.ProviderInfo;
|
||||
import android.net.Uri;
|
||||
import android.os.Bundle;
|
||||
|
||||
import androidx.preference.Preference;
|
||||
import androidx.preference.PreferenceFragmentCompat;
|
||||
import androidx.preference.PreferenceManager;
|
||||
import androidx.preference.PreferenceScreen;
|
||||
import androidx.preference.SwitchPreference;
|
||||
|
||||
import com.android.internal.logging.nano.MetricsProto.MetricsEvent;
|
||||
import com.android.settings.core.PreferenceControllerMixin;
|
||||
@@ -47,7 +53,7 @@ import com.android.settingslib.core.instrumentation.MetricsFeatureProvider;
|
||||
import com.android.settingslib.core.instrumentation.VisibilityLoggerMixin;
|
||||
import com.android.settingslib.drawer.ActivityTile;
|
||||
import com.android.settingslib.drawer.DashboardCategory;
|
||||
import com.android.settingslib.drawer.Tile;
|
||||
import com.android.settingslib.drawer.ProviderTile;
|
||||
|
||||
import org.junit.Before;
|
||||
import org.junit.Test;
|
||||
@@ -57,6 +63,8 @@ import org.mockito.MockitoAnnotations;
|
||||
import org.robolectric.RobolectricTestRunner;
|
||||
import org.robolectric.RuntimeEnvironment;
|
||||
import org.robolectric.annotation.Config;
|
||||
import org.robolectric.annotation.Implementation;
|
||||
import org.robolectric.annotation.Implements;
|
||||
import org.robolectric.util.ReflectionHelpers;
|
||||
|
||||
import java.util.ArrayList;
|
||||
@@ -70,24 +78,37 @@ public class DashboardFragmentTest {
|
||||
|
||||
@Mock
|
||||
private FakeFeatureFactory mFakeFeatureFactory;
|
||||
private ActivityInfo mActivityInfo;
|
||||
private DashboardCategory mDashboardCategory;
|
||||
private Context mContext;
|
||||
private TestFragment mTestFragment;
|
||||
private List<AbstractPreferenceController> mControllers;
|
||||
private ActivityTile mActivityTile;
|
||||
private ProviderTile mProviderTile;
|
||||
|
||||
@Before
|
||||
public void setUp() {
|
||||
MockitoAnnotations.initMocks(this);
|
||||
mContext = spy(RuntimeEnvironment.application);
|
||||
mActivityInfo = new ActivityInfo();
|
||||
mActivityInfo.packageName = "pkg";
|
||||
mActivityInfo.name = "class";
|
||||
mActivityInfo.metaData = new Bundle();
|
||||
mActivityInfo.metaData.putString(META_DATA_PREFERENCE_KEYHINT, "injected_tile_key");
|
||||
final ActivityInfo activityInfo = new ActivityInfo();
|
||||
activityInfo.packageName = "pkg";
|
||||
activityInfo.name = "class";
|
||||
activityInfo.metaData = new Bundle();
|
||||
activityInfo.metaData.putString(META_DATA_PREFERENCE_KEYHINT, "injected_tile_key");
|
||||
mFakeFeatureFactory = FakeFeatureFactory.setupForTest();
|
||||
mDashboardCategory = new DashboardCategory("key");
|
||||
mDashboardCategory.addTile(new ActivityTile(mActivityInfo, mDashboardCategory.key));
|
||||
mActivityTile = new ActivityTile(activityInfo, mDashboardCategory.key);
|
||||
mDashboardCategory.addTile(mActivityTile);
|
||||
|
||||
final ProviderInfo providerInfo = new ProviderInfo();
|
||||
providerInfo.packageName = "pkg";
|
||||
providerInfo.name = "provider";
|
||||
providerInfo.authority = "authority";
|
||||
final Bundle metaData = new Bundle();
|
||||
metaData.putString(META_DATA_PREFERENCE_KEYHINT, "injected_tile_key2");
|
||||
metaData.putString(META_DATA_PREFERENCE_SWITCH_URI, "uri");
|
||||
mProviderTile = new ProviderTile(providerInfo, mDashboardCategory.key, metaData);
|
||||
mDashboardCategory.addTile(mProviderTile);
|
||||
|
||||
mTestFragment = new TestFragment(RuntimeEnvironment.application);
|
||||
when(mFakeFeatureFactory.dashboardFeatureProvider
|
||||
.getTilesForCategory(nullable(String.class)))
|
||||
@@ -127,11 +148,14 @@ public class DashboardFragmentTest {
|
||||
.getTilesForCategory(nullable(String.class)))
|
||||
.thenReturn(mDashboardCategory);
|
||||
when(mFakeFeatureFactory.dashboardFeatureProvider
|
||||
.getDashboardKeyForTile(nullable(Tile.class)))
|
||||
.getDashboardKeyForTile(any(ActivityTile.class)))
|
||||
.thenReturn("test_key");
|
||||
when(mFakeFeatureFactory.dashboardFeatureProvider
|
||||
.getDashboardKeyForTile(any(ProviderTile.class)))
|
||||
.thenReturn("test_key2");
|
||||
mTestFragment.onCreatePreferences(new Bundle(), "rootKey");
|
||||
|
||||
verify(mTestFragment.mScreen).addPreference(nullable(Preference.class));
|
||||
verify(mTestFragment.mScreen, times(2)).addPreference(nullable(Preference.class));
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -156,8 +180,11 @@ public class DashboardFragmentTest {
|
||||
.getTilesForCategory(nullable(String.class)))
|
||||
.thenReturn(mDashboardCategory);
|
||||
when(mFakeFeatureFactory.dashboardFeatureProvider
|
||||
.getDashboardKeyForTile(nullable(Tile.class)))
|
||||
.getDashboardKeyForTile(any(ActivityTile.class)))
|
||||
.thenReturn("test_key");
|
||||
when(mFakeFeatureFactory.dashboardFeatureProvider
|
||||
.getDashboardKeyForTile(any(ProviderTile.class)))
|
||||
.thenReturn("test_key2");
|
||||
mTestFragment.onCreatePreferences(new Bundle(), "rootKey");
|
||||
|
||||
verify(mTestFragment.mScreen, never()).addPreference(nullable(Preference.class));
|
||||
@@ -171,6 +198,29 @@ public class DashboardFragmentTest {
|
||||
assertThat(controller).isNotNull();
|
||||
}
|
||||
|
||||
@Test
|
||||
@Config(shadows = ShadowPreferenceFragmentCompat.class)
|
||||
public void onStart_shouldRegisterDynamicDataObservers() {
|
||||
final DynamicDataObserver observer = new TestDynamicDataObserver();
|
||||
mTestFragment.mDashboardTilePrefKeys.put("key", Arrays.asList(observer));
|
||||
|
||||
mTestFragment.onStart();
|
||||
|
||||
verify(mTestFragment.getContentResolver()).registerContentObserver(observer.getUri(), false,
|
||||
observer);
|
||||
}
|
||||
|
||||
@Test
|
||||
@Config(shadows = ShadowPreferenceFragmentCompat.class)
|
||||
public void onStop_shouldUnregisterDynamicDataObservers() {
|
||||
final DynamicDataObserver observer = new TestDynamicDataObserver();
|
||||
mTestFragment.registerDynamicDataObservers(Arrays.asList(observer));
|
||||
|
||||
mTestFragment.onStop();
|
||||
|
||||
verify(mTestFragment.getContentResolver()).unregisterContentObserver(observer);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void updateState_skipUnavailablePrefs() {
|
||||
final List<AbstractPreferenceController> preferenceControllers = mTestFragment.mControllers;
|
||||
@@ -266,7 +316,14 @@ public class DashboardFragmentTest {
|
||||
assertThat(mTestFragment.mBlockerController).isNull();
|
||||
}
|
||||
|
||||
public static class TestPreferenceController extends AbstractPreferenceController
|
||||
@Test
|
||||
public void createPreference_isProviderTile_returnSwitchPreference() {
|
||||
final Preference pref = mTestFragment.createPreference(mProviderTile);
|
||||
|
||||
assertThat(pref).isInstanceOf(SwitchPreference.class);
|
||||
}
|
||||
|
||||
private static class TestPreferenceController extends AbstractPreferenceController
|
||||
implements PreferenceControllerMixin {
|
||||
|
||||
private TestPreferenceController(Context context) {
|
||||
@@ -293,18 +350,20 @@ public class DashboardFragmentTest {
|
||||
}
|
||||
}
|
||||
|
||||
public static class TestFragment extends DashboardFragment {
|
||||
private static class TestFragment extends DashboardFragment {
|
||||
|
||||
public final PreferenceScreen mScreen;
|
||||
|
||||
private final PreferenceManager mPreferenceManager;
|
||||
private final Context mContext;
|
||||
private final List<AbstractPreferenceController> mControllers;
|
||||
|
||||
public final PreferenceScreen mScreen;
|
||||
private final ContentResolver mContentResolver;
|
||||
|
||||
public TestFragment(Context context) {
|
||||
mContext = context;
|
||||
mPreferenceManager = mock(PreferenceManager.class);
|
||||
mScreen = mock(PreferenceScreen.class);
|
||||
mContentResolver = mock(ContentResolver.class);
|
||||
mControllers = new ArrayList<>();
|
||||
|
||||
when(mPreferenceManager.getContext()).thenReturn(mContext);
|
||||
@@ -346,5 +405,36 @@ public class DashboardFragmentTest {
|
||||
public PreferenceManager getPreferenceManager() {
|
||||
return mPreferenceManager;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected ContentResolver getContentResolver() {
|
||||
return mContentResolver;
|
||||
}
|
||||
}
|
||||
|
||||
private static class TestDynamicDataObserver extends DynamicDataObserver {
|
||||
|
||||
@Override
|
||||
public Uri getUri() {
|
||||
return Uri.parse("content://abc");
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onDataChanged() {
|
||||
}
|
||||
}
|
||||
|
||||
@Implements(PreferenceFragmentCompat.class)
|
||||
public static class ShadowPreferenceFragmentCompat {
|
||||
|
||||
@Implementation
|
||||
public void onStart() {
|
||||
// do nothing
|
||||
}
|
||||
|
||||
@Implementation
|
||||
public void onStop() {
|
||||
// do nothing
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user