Move Styles & wallpapers to the homepage group

- Add Styles & wallpapers to the homepage group.
- Create a new display settings xml for the silky home.
- Remove Styles & wallpapers from new display settings xml.
- Apply the RestrictedTopLevelPreference to remove the restricted icon.

Bug: 168166015
Bug: 174964139
Test: robotest & visual with turning on/off silky home
Change-Id: Ib495b39bc62413242247f7e767c0e44bacc6e937
This commit is contained in:
Yanting Yang
2020-11-20 04:08:10 +08:00
parent d3c7666770
commit 3932b07365
5 changed files with 519 additions and 12 deletions

View File

@@ -0,0 +1,143 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Copyright (C) 2020 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.
-->
<PreferenceScreen
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:settings="http://schemas.android.com/apk/res-auto"
android:key="display_settings_screen"
android:title="@string/display_settings"
settings:keywords="@string/keywords_display"
settings:initialExpandedChildrenCount="5">
<com.android.settingslib.RestrictedPreference
android:key="brightness"
android:title="@string/brightness"
settings:keywords="@string/keywords_display_brightness_level"
settings:useAdminDisabledSummary="true"
settings:userRestriction="no_config_brightness">
<intent android:action="com.android.intent.action.SHOW_BRIGHTNESS_DIALOG" />
</com.android.settingslib.RestrictedPreference>
<com.android.settings.display.darkmode.DarkModePreference
android:key="dark_ui_mode"
android:title="@string/dark_ui_mode"
android:fragment="com.android.settings.display.darkmode.DarkModeSettingsFragment"
android:widgetLayout="@null"
settings:widgetLayout="@null"
settings:controller="com.android.settings.display.DarkUIPreferenceController"
settings:keywords="@string/keywords_dark_ui_mode"/>
<com.android.settings.display.NightDisplayPreference
android:key="night_display"
android:title="@string/night_display_title"
android:fragment="com.android.settings.display.NightDisplaySettings"
android:widgetLayout="@null"
settings:widgetLayout="@null"/>
<Preference
android:key="auto_brightness_entry"
android:title="@string/auto_brightness_title"
android:summary="@string/summary_placeholder"
android:fragment="com.android.settings.display.AutoBrightnessSettings"
settings:controller="com.android.settings.display.AutoBrightnessPreferenceController"/>
<!-- Cross-listed item, if you change this, also change it in power_usage_summary.xml -->
<Preference
android:key="screen_timeout"
android:title="@string/screen_timeout"
android:summary="@string/summary_placeholder"
android:fragment="com.android.settings.display.ScreenTimeoutSettings"
settings:controller="com.android.settings.display.ScreenTimeoutPreferenceController" />
<SwitchPreference
android:key="auto_rotate"
android:title="@string/accelerometer_title"
settings:keywords="@string/keywords_auto_rotate"
settings:controller="com.android.settings.display.AutoRotatePreferenceController" />
<Preference
android:key="color_mode"
android:title="@string/color_mode_title"
android:fragment="com.android.settings.display.ColorModePreferenceFragment"
settings:controller="com.android.settings.display.ColorModePreferenceController"
settings:keywords="@string/keywords_color_mode" />
<SwitchPreference
android:key="display_white_balance"
android:title="@string/display_white_balance_title"
android:summary="@string/display_white_balance_summary"
settings:controller="com.android.settings.display.DisplayWhiteBalancePreferenceController" />
<SwitchPreference
android:key="peak_refresh_rate"
android:title="@string/peak_refresh_rate_title"
android:summary="@string/peak_refresh_rate_summary"
settings:controller="com.android.settings.display.PeakRefreshRatePreferenceController" />
<Preference
android:key="font_size"
android:title="@string/title_font_size"
android:fragment="com.android.settings.display.ToggleFontSizePreferenceFragment"
settings:controller="com.android.settings.display.FontSizePreferenceController"
settings:keywords="@string/keywords_font_size" />
<com.android.settings.display.ScreenZoomPreference
android:key="display_settings_screen_zoom"
android:title="@string/screen_zoom_title"
android:fragment="com.android.settings.display.ScreenZoomSettings"/>
<SwitchPreference
android:key="show_operator_name"
android:title="@string/show_operator_name_title"
android:summary="@string/show_operator_name_summary" />
<Preference
android:key="screensaver"
android:title="@string/screensaver_settings_title"
android:fragment="com.android.settings.dream.DreamSettings" />
<Preference
android:key="lockscreen_from_display_settings"
android:title="@string/lockscreen_settings_title"
android:fragment="com.android.settings.security.LockscreenDashboardFragment"
settings:keywords="@string/keywords_ambient_display_screen"
settings:controller="com.android.settings.security.screenlock.LockScreenPreferenceController" />
<SwitchPreference
android:key="camera_gesture"
android:title="@string/camera_gesture_title"
android:summary="@string/camera_gesture_desc" />
<SwitchPreference
android:key="lift_to_wake"
android:title="@string/lift_to_wake_title" />
<SwitchPreference
android:key="tap_to_wake"
android:title="@string/tap_to_wake"
android:summary="@string/tap_to_wake_summary" />
<ListPreference
android:key="theme"
android:title="@string/device_theme"
android:summary="@string/summary_placeholder" />
<Preference
android:key="vr_display_pref"
android:title="@string/display_vr_pref_title"
android:fragment="com.android.settings.display.VrDisplayPreferencePicker" />
</PreferenceScreen>

View File

@@ -22,13 +22,13 @@
<PreferenceCategory <PreferenceCategory
android:key="connectivity" android:key="connectivity"
android:order="-130" android:order="-140"
settings:allowDividerAbove="false"> settings:allowDividerAbove="false">
<Preference <Preference
android:fragment="com.android.settings.network.NetworkDashboardFragment" android:fragment="com.android.settings.network.NetworkDashboardFragment"
android:icon="@drawable/ic_homepage_network" android:icon="@drawable/ic_homepage_network"
android:key="top_level_network" android:key="top_level_network"
android:order="-130" android:order="-140"
android:title="@string/network_dashboard_title" android:title="@string/network_dashboard_title"
settings:controller="com.android.settings.network.TopLevelNetworkEntryPreferenceController"/> settings:controller="com.android.settings.network.TopLevelNetworkEntryPreferenceController"/>
@@ -36,27 +36,27 @@
android:fragment="com.android.settings.connecteddevice.ConnectedDeviceDashboardFragment" android:fragment="com.android.settings.connecteddevice.ConnectedDeviceDashboardFragment"
android:icon="@drawable/ic_homepage_connected_device" android:icon="@drawable/ic_homepage_connected_device"
android:key="top_level_connected_devices" android:key="top_level_connected_devices"
android:order="-120" android:order="-130"
android:title="@string/connected_devices_dashboard_title" android:title="@string/connected_devices_dashboard_title"
settings:controller="com.android.settings.connecteddevice.TopLevelConnectedDevicesPreferenceController"/> settings:controller="com.android.settings.connecteddevice.TopLevelConnectedDevicesPreferenceController"/>
</PreferenceCategory> </PreferenceCategory>
<PreferenceCategory <PreferenceCategory
android:key="apps" android:key="apps"
android:order="-110" android:order="-120"
settings:allowDividerAbove="false"> settings:allowDividerAbove="false">
<Preference <Preference
android:fragment="com.android.settings.applications.AppAndNotificationDashboardFragment" android:fragment="com.android.settings.applications.AppAndNotificationDashboardFragment"
android:icon="@drawable/ic_homepage_apps" android:icon="@drawable/ic_homepage_apps"
android:key="top_level_apps_and_notifs" android:key="top_level_apps_and_notifs"
android:order="-110" android:order="-120"
android:title="@string/apps_dashboard_title"/> android:title="@string/apps_dashboard_title"/>
<Preference <Preference
android:fragment="com.android.settings.notification.ConfigureNotificationSettings" android:fragment="com.android.settings.notification.ConfigureNotificationSettings"
android:icon="@drawable/ic_homepage_notification" android:icon="@drawable/ic_homepage_notification"
android:key="top_level_notification" android:key="top_level_notification"
android:order="-100" android:order="-110"
android:title="@string/configure_notification_settings"/> android:title="@string/configure_notification_settings"/>
@@ -64,13 +64,13 @@
<PreferenceCategory <PreferenceCategory
android:key="phone_essential" android:key="phone_essential"
android:order="-90" android:order="-100"
settings:allowDividerAbove="false"> settings:allowDividerAbove="false">
<Preference <Preference
android:fragment="com.android.settings.fuelgauge.PowerUsageSummary" android:fragment="com.android.settings.fuelgauge.PowerUsageSummary"
android:icon="@drawable/ic_homepage_battery" android:icon="@drawable/ic_homepage_battery"
android:key="top_level_battery" android:key="top_level_battery"
android:order="-90" android:order="-100"
android:title="@string/power_usage_summary_title" android:title="@string/power_usage_summary_title"
settings:controller="com.android.settings.fuelgauge.TopLevelBatteryPreferenceController"/> settings:controller="com.android.settings.fuelgauge.TopLevelBatteryPreferenceController"/>
@@ -78,7 +78,7 @@
android:fragment="com.android.settings.deviceinfo.StorageSettings" android:fragment="com.android.settings.deviceinfo.StorageSettings"
android:icon="@drawable/ic_homepage_storage" android:icon="@drawable/ic_homepage_storage"
android:key="top_level_storage" android:key="top_level_storage"
android:order="-80" android:order="-90"
android:title="@string/storage_settings" android:title="@string/storage_settings"
settings:controller="com.android.settings.deviceinfo.TopLevelStoragePreferenceController"/> settings:controller="com.android.settings.deviceinfo.TopLevelStoragePreferenceController"/>
@@ -86,17 +86,24 @@
android:fragment="com.android.settings.notification.SoundSettings" android:fragment="com.android.settings.notification.SoundSettings"
android:icon="@drawable/ic_homepage_sound" android:icon="@drawable/ic_homepage_sound"
android:key="top_level_sound" android:key="top_level_sound"
android:order="-70" android:order="-80"
android:title="@string/sound_settings"/> android:title="@string/sound_settings"/>
<Preference <Preference
android:fragment="com.android.settings.DisplaySettings" android:fragment="com.android.settings.DisplaySettings"
android:icon="@drawable/ic_homepage_display" android:icon="@drawable/ic_homepage_display"
android:key="top_level_display" android:key="top_level_display"
android:order="-60" android:order="-70"
android:title="@string/display_settings" android:title="@string/display_settings"
settings:controller="com.android.settings.display.TopLevelDisplayPreferenceController"/> settings:controller="com.android.settings.display.TopLevelDisplayPreferenceController"/>
<com.android.settingslib.RestrictedTopLevelPreference
android:icon="@drawable/ic_homepage_display"
android:key="top_level_wallpaper"
android:order="-60"
android:title="@string/wallpaper_settings_title"
settings:controller="com.android.settings.display.TopLevelWallpaperPreferenceController"/>
<Preference <Preference
android:fragment="com.android.settings.accessibility.AccessibilitySettings" android:fragment="com.android.settings.accessibility.AccessibilitySettings"
android:icon="@drawable/ic_homepage_accessibility" android:icon="@drawable/ic_homepage_accessibility"

View File

@@ -19,7 +19,10 @@ package com.android.settings;
import android.app.settings.SettingsEnums; import android.app.settings.SettingsEnums;
import android.content.Context; import android.content.Context;
import android.os.Bundle; import android.os.Bundle;
import android.provider.SearchIndexableResource;
import android.util.FeatureFlagUtils;
import com.android.settings.core.FeatureFlags;
import com.android.settings.dashboard.DashboardFragment; import com.android.settings.dashboard.DashboardFragment;
import com.android.settings.display.BrightnessLevelPreferenceController; import com.android.settings.display.BrightnessLevelPreferenceController;
import com.android.settings.display.CameraGesturePreferenceController; import com.android.settings.display.CameraGesturePreferenceController;
@@ -37,6 +40,7 @@ import com.android.settingslib.core.lifecycle.Lifecycle;
import com.android.settingslib.search.SearchIndexable; import com.android.settingslib.search.SearchIndexable;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Arrays;
import java.util.List; import java.util.List;
@SearchIndexable(forTarget = SearchIndexable.ALL & ~SearchIndexable.ARC) @SearchIndexable(forTarget = SearchIndexable.ALL & ~SearchIndexable.ARC)
@@ -55,6 +59,9 @@ public class DisplaySettings extends DashboardFragment {
@Override @Override
protected int getPreferenceScreenResId() { protected int getPreferenceScreenResId() {
if (FeatureFlagUtils.isEnabled(getContext(), FeatureFlags.SILKY_HOME)) {
return R.xml.display_settings_v2;
}
return R.xml.display_settings; return R.xml.display_settings;
} }
@@ -90,7 +97,16 @@ public class DisplaySettings extends DashboardFragment {
} }
public static final BaseSearchIndexProvider SEARCH_INDEX_DATA_PROVIDER = public static final BaseSearchIndexProvider SEARCH_INDEX_DATA_PROVIDER =
new BaseSearchIndexProvider(R.xml.display_settings) { new BaseSearchIndexProvider() {
@Override
public List<SearchIndexableResource> getXmlResourcesToIndex(
Context context, boolean enabled) {
final SearchIndexableResource sir = new SearchIndexableResource(context);
sir.xmlResId = FeatureFlagUtils.isEnabled(context, FeatureFlags.SILKY_HOME)
? R.xml.display_settings_v2 : R.xml.display_settings;
return Arrays.asList(sir);
}
@Override @Override
public List<AbstractPreferenceController> createPreferenceControllers( public List<AbstractPreferenceController> createPreferenceControllers(

View File

@@ -0,0 +1,136 @@
/*
* Copyright (C) 2020 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.display;
import static android.os.UserManager.DISALLOW_SET_WALLPAPER;
import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.content.pm.ResolveInfo;
import android.os.UserHandle;
import android.text.TextUtils;
import android.util.Log;
import androidx.preference.Preference;
import androidx.preference.PreferenceScreen;
import com.android.settings.R;
import com.android.settings.core.BasePreferenceController;
import com.android.settingslib.RestrictedLockUtilsInternal;
import com.android.settingslib.RestrictedTopLevelPreference;
import java.util.List;
/** This controller manages the wallpaper preference of the top level page. */
public class TopLevelWallpaperPreferenceController extends BasePreferenceController {
private static final String TAG = "TopLevelWallpaperPreferenceController";
private static final String LAUNCHED_SETTINGS = "app_launched_settings";
private final String mWallpaperPackage;
private final String mWallpaperClass;
private final String mStylesAndWallpaperClass;
private final String mWallpaperLaunchExtra;
public TopLevelWallpaperPreferenceController(Context context, String key) {
super(context, key);
mWallpaperPackage = mContext.getString(R.string.config_wallpaper_picker_package);
mWallpaperClass = mContext.getString(R.string.config_wallpaper_picker_class);
mStylesAndWallpaperClass =
mContext.getString(R.string.config_styles_and_wallpaper_picker_class);
mWallpaperLaunchExtra = mContext.getString(R.string.config_wallpaper_picker_launch_extra);
}
@Override
public void displayPreference(PreferenceScreen screen) {
super.displayPreference(screen);
Preference preference = screen.findPreference(getPreferenceKey());
preference.setTitle(getTitle());
}
public String getTitle() {
return mContext.getString(areStylesAvailable()
? R.string.style_and_wallpaper_settings_title : R.string.wallpaper_settings_title);
}
public ComponentName getComponentName() {
return new ComponentName(mWallpaperPackage, getComponentClassString());
}
public String getComponentClassString() {
return areStylesAvailable() ? mStylesAndWallpaperClass : mWallpaperClass;
}
@Override
public int getAvailabilityStatus() {
if ((TextUtils.isEmpty(mWallpaperClass) && TextUtils.isEmpty(mStylesAndWallpaperClass))
|| TextUtils.isEmpty(mWallpaperPackage)) {
Log.e(TAG, "No Wallpaper picker specified!");
return UNSUPPORTED_ON_DEVICE;
}
return canResolveWallpaperComponent(getComponentClassString())
? AVAILABLE_UNSEARCHABLE : CONDITIONALLY_UNAVAILABLE;
}
@Override
public void updateState(Preference preference) {
disablePreferenceIfManaged((RestrictedTopLevelPreference) preference);
}
@Override
public boolean handlePreferenceTreeClick(Preference preference) {
if (getPreferenceKey().equals(preference.getKey())) {
final Intent intent = new Intent().setComponent(
getComponentName()).putExtra(mWallpaperLaunchExtra, LAUNCHED_SETTINGS);
if (areStylesAvailable()) {
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
}
preference.getContext().startActivity(intent);
return true;
}
return super.handlePreferenceTreeClick(preference);
}
/** Returns whether Styles & Wallpaper is enabled and available. */
public boolean areStylesAvailable() {
return !TextUtils.isEmpty(mStylesAndWallpaperClass)
&& canResolveWallpaperComponent(mStylesAndWallpaperClass);
}
private boolean canResolveWallpaperComponent(String className) {
final ComponentName componentName = new ComponentName(mWallpaperPackage, className);
final PackageManager pm = mContext.getPackageManager();
final Intent intent = new Intent().setComponent(componentName);
final List<ResolveInfo> resolveInfos = pm.queryIntentActivities(intent, 0 /* flags */);
return resolveInfos != null && !resolveInfos.isEmpty();
}
private void disablePreferenceIfManaged(RestrictedTopLevelPreference pref) {
final String restriction = DISALLOW_SET_WALLPAPER;
if (pref != null) {
pref.setDisabledByAdmin(null);
if (RestrictedLockUtilsInternal.hasBaseUserRestriction(mContext,
restriction, UserHandle.myUserId())) {
// Do not show the admin dialog for system restriction.
pref.setEnabled(false);
} else {
pref.checkRestrictionAndSetDisabled(restriction);
}
}
}
}

View File

@@ -0,0 +1,205 @@
/*
* Copyright (C) 2020 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.display;
import static com.google.common.truth.Truth.assertThat;
import static org.mockito.Mockito.mock;
import android.content.ComponentName;
import android.content.Intent;
import android.content.pm.ResolveInfo;
import androidx.fragment.app.FragmentActivity;
import androidx.preference.Preference;
import com.android.settings.R;
import com.android.settings.testutils.shadow.SettingsShadowResources;
import com.google.common.collect.Lists;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.MockitoAnnotations;
import org.robolectric.Robolectric;
import org.robolectric.RobolectricTestRunner;
import org.robolectric.Shadows;
import org.robolectric.annotation.Config;
import org.robolectric.shadows.ShadowPackageManager;
@RunWith(RobolectricTestRunner.class)
@Config(shadows = {SettingsShadowResources.class})
public class TopLevelWallpaperPreferenceControllerTest {
private static final String TEST_KEY = "test_key";
private Intent mWallpaperIntent;
private Intent mStylesAndWallpaperIntent;
private FragmentActivity mContext;
private ShadowPackageManager mShadowPackageManager;
private TopLevelWallpaperPreferenceController mController;
@Before
public void setUp() {
MockitoAnnotations.initMocks(this);
mContext = Robolectric.buildActivity(FragmentActivity.class).get();
SettingsShadowResources.overrideResource(
R.string.config_wallpaper_picker_package, "bogus.package.for.testing");
SettingsShadowResources.overrideResource(
R.string.config_styles_and_wallpaper_picker_class, "bogus.package.class");
mWallpaperIntent = new Intent().setComponent(new ComponentName(
mContext.getString(R.string.config_wallpaper_picker_package),
mContext.getString(R.string.config_wallpaper_picker_class)));
mStylesAndWallpaperIntent = new Intent().setComponent(new ComponentName(
mContext.getString(R.string.config_wallpaper_picker_package),
mContext.getString(R.string.config_styles_and_wallpaper_picker_class)));
mShadowPackageManager = Shadows.shadowOf(mContext.getPackageManager());
mController = new TopLevelWallpaperPreferenceController(mContext, TEST_KEY);
}
@Test
public void isAvailable_wallpaperPickerEnabledAndStylePickerEnabled_returnsTrue() {
mShadowPackageManager.setResolveInfosForIntent(
mWallpaperIntent, Lists.newArrayList(mock(ResolveInfo.class)));
mShadowPackageManager.setResolveInfosForIntent(
mStylesAndWallpaperIntent, Lists.newArrayList(mock(ResolveInfo.class)));
assertThat(mController.isAvailable()).isTrue();
}
@Test
public void isAvailable_wallpaperPickerEnabledAndStylePickerDisabled_returnsTrue() {
mShadowPackageManager.setResolveInfosForIntent(
mWallpaperIntent, Lists.newArrayList(mock(ResolveInfo.class)));
mShadowPackageManager.setResolveInfosForIntent(
mStylesAndWallpaperIntent, Lists.newArrayList());
assertThat(mController.isAvailable()).isTrue();
}
@Test
public void isAvailable_wallpaperPickerDisabledAndStylePickerEnabled_returnsTrue() {
mShadowPackageManager.setResolveInfosForIntent(
mWallpaperIntent, Lists.newArrayList());
mShadowPackageManager.setResolveInfosForIntent(
mStylesAndWallpaperIntent, Lists.newArrayList(mock(ResolveInfo.class)));
assertThat(mController.isAvailable()).isTrue();
}
@Test
public void isAvailable_wallpaperPickerDisabledAndStylePickerDisabled_returnsFalse() {
mShadowPackageManager.setResolveInfosForIntent(
mWallpaperIntent, Lists.newArrayList());
mShadowPackageManager.setResolveInfosForIntent(
mStylesAndWallpaperIntent, Lists.newArrayList());
assertThat(mController.isAvailable()).isFalse();
}
@Test
public void getComponentClassString_stylesAvailable_returnsStylePickerClassString() {
mShadowPackageManager.setResolveInfosForIntent(
mStylesAndWallpaperIntent,
Lists.newArrayList(mock(ResolveInfo.class)));
assertThat(mController.getComponentClassString())
.isEqualTo(mContext.getString(R.string.config_styles_and_wallpaper_picker_class));
}
@Test
public void getComponentClassString_stylesUnavailable_returnsWallpaperPickerClassString() {
mShadowPackageManager.setResolveInfosForIntent(
mStylesAndWallpaperIntent, Lists.newArrayList());
assertThat(mController.getComponentClassString())
.isEqualTo(mContext.getString(R.string.config_wallpaper_picker_class));
}
@Test
public void areStylesAvailable_noComponentSpecified() {
SettingsShadowResources.overrideResource(
R.string.config_styles_and_wallpaper_picker_class, "");
mShadowPackageManager.setResolveInfosForIntent(
mStylesAndWallpaperIntent, Lists.newArrayList());
assertThat(mController.areStylesAvailable()).isFalse();
}
@Test
public void areStylesAvailable_componentUnresolveable() {
mShadowPackageManager.setResolveInfosForIntent(
mStylesAndWallpaperIntent, Lists.newArrayList());
assertThat(mController.areStylesAvailable()).isFalse();
}
@Test
public void areStylesAvailable_componentResolved() {
mShadowPackageManager.setResolveInfosForIntent(
mStylesAndWallpaperIntent,
Lists.newArrayList(mock(ResolveInfo.class)));
assertThat(mController.areStylesAvailable()).isTrue();
}
@Test
public void handlePreferenceTreeClick_wallpaperOnly() {
mShadowPackageManager.setResolveInfosForIntent(
mWallpaperIntent, Lists.newArrayList(mock(ResolveInfo.class)));
mShadowPackageManager.setResolveInfosForIntent(
mStylesAndWallpaperIntent, Lists.newArrayList());
Preference preference = new Preference(mContext);
preference.setKey(TEST_KEY);
mController.handlePreferenceTreeClick(preference);
assertThat(Shadows.shadowOf(mContext)
.getNextStartedActivityForResult().intent.getComponent().getClassName())
.isEqualTo(mContext.getString(R.string.config_wallpaper_picker_class));
}
@Test
public void handlePreferenceTreeClick_stylesAndWallpaper() {
mShadowPackageManager.setResolveInfosForIntent(
mWallpaperIntent, Lists.newArrayList());
mShadowPackageManager.setResolveInfosForIntent(
mStylesAndWallpaperIntent, Lists.newArrayList(mock(ResolveInfo.class)));
Preference preference = new Preference(mContext);
preference.setKey(TEST_KEY);
mController.handlePreferenceTreeClick(preference);
assertThat(Shadows.shadowOf(mContext)
.getNextStartedActivityForResult().intent.getComponent().getClassName())
.isEqualTo(mContext.getString(R.string.config_styles_and_wallpaper_picker_class));
}
@Test
public void handlePreferenceTreeClick_launchSourceExtra() {
mShadowPackageManager.setResolveInfosForIntent(
mWallpaperIntent, Lists.newArrayList());
mShadowPackageManager.setResolveInfosForIntent(
mStylesAndWallpaperIntent, Lists.newArrayList());
Preference preference = new Preference(mContext);
preference.setKey(TEST_KEY);
mController.handlePreferenceTreeClick(preference);
assertThat(Shadows.shadowOf(mContext).getNextStartedActivityForResult()
.intent.hasExtra("com.android.wallpaper.LAUNCH_SOURCE")).isTrue();
}
}