From 1c3a4de93dc1a1a69c50714582faad441e4a626f Mon Sep 17 00:00:00 2001 From: Fan Zhang Date: Sat, 28 Oct 2017 15:11:49 -0700 Subject: [PATCH] Switch to use small icon for most app related pages - Renamed AppProgressPreference to AppPreference to handle most app related prefs - Add ed AppSwitchPreference - the same layout as AppPreference except it's a SwitchPreference - Use above 2 prefs in most app related pages. - Everything under special access pages - Recent app list in App & notifications - App data usage detail page - Default app picker pages Bug: 65182905 Test: robotests Change-Id: I96c980ba1db49e36dabe25b5eade1197215aad11 --- res/layout/device_admin_item.xml | 14 ++-- res/layout/preference_app.xml | 33 +++++--- res/layout/widget_progress_bar.xml | 23 ------ res/values/dimens.xml | 1 + res/xml/app_default_settings.xml | 28 +++---- .../android/settings/DeviceAdminSettings.java | 12 +-- .../PictureInPictureSettings.java | 3 +- .../applications/ProcessStatsPreference.java | 5 +- .../RecentAppsPreferenceController.java | 4 +- .../defaultapps/DefaultAppPickerFragment.java | 5 ++ .../DefaultAppPreferenceController.java | 7 ++ .../datausage/AppDataUsagePreference.java | 8 +- .../datausage/UnrestrictedDataAccess.java | 11 +-- .../ApplicationListPreferenceController.java | 5 +- .../notification/ZenAccessSettings.java | 3 +- .../utils/ManagedServiceSettings.java | 4 +- .../AppPreference.java} | 29 +++++-- .../settings/widget/AppSwitchPreference.java | 41 ++++++++++ .../widget/RadioButtonPickerFragment.java | 8 +- .../DefaultAppPickerFragmentTest.java | 24 ++++-- .../DefaultAppPreferenceControllerTest.java | 13 +++- ...plicationListPreferenceControllerTest.java | 24 +++--- .../settings/widget/AppPreferenceTest.java | 78 +++++++++++++++++++ .../widget/AppSwitchPreferenceTest.java | 69 ++++++++++++++++ .../widget/RadioButtonPickerFragmentTest.java | 19 +++-- 25 files changed, 350 insertions(+), 121 deletions(-) delete mode 100644 res/layout/widget_progress_bar.xml rename src/com/android/settings/{AppProgressPreference.java => widget/AppPreference.java} (59%) create mode 100644 src/com/android/settings/widget/AppSwitchPreference.java create mode 100644 tests/robotests/src/com/android/settings/widget/AppPreferenceTest.java create mode 100644 tests/robotests/src/com/android/settings/widget/AppSwitchPreferenceTest.java diff --git a/res/layout/device_admin_item.xml b/res/layout/device_admin_item.xml index 0420bb57a6f..875c7349344 100644 --- a/res/layout/device_admin_item.xml +++ b/res/layout/device_admin_item.xml @@ -29,13 +29,17 @@ + android:gravity="start|center_vertical" + android:minWidth="60dp" + android:orientation="horizontal" + android:paddingEnd="12dp" + android:paddingTop="4dp" + android:paddingBottom="4dp"> @@ -70,7 +74,7 @@ - + settings:maxWidth="@dimen/secondary_app_icon_size" + settings:maxHeight="@dimen/secondary_app_icon_size" /> @@ -60,15 +61,14 @@ + android:layout_height="wrap_content" + android:visibility="gone"> + android:textColor="?android:attr/textColorSecondary" /> - + android:layout_height="wrap_content" + android:layout_marginTop="4dp" + android:max="100" + android:visibility="gone" /> + + + diff --git a/res/layout/widget_progress_bar.xml b/res/layout/widget_progress_bar.xml deleted file mode 100644 index a2a51543f46..00000000000 --- a/res/layout/widget_progress_bar.xml +++ /dev/null @@ -1,23 +0,0 @@ - - - - diff --git a/res/values/dimens.xml b/res/values/dimens.xml index fdb9c32dafb..0d4289a83b9 100755 --- a/res/values/dimens.xml +++ b/res/values/dimens.xml @@ -22,6 +22,7 @@ 16dip 40dip + 24dp 48dp 64dip 72dip diff --git a/res/xml/app_default_settings.xml b/res/xml/app_default_settings.xml index 3a8c997aac1..0204c644899 100644 --- a/res/xml/app_default_settings.xml +++ b/res/xml/app_default_settings.xml @@ -21,56 +21,56 @@ android:key="app_default_settings_screen" android:title="@string/app_default_dashboard_title"> - - - + - - - - - - @@ -79,20 +79,20 @@ android:key="work_app_defaults" android:title="@string/default_for_work"> - - + - - + diff --git a/src/com/android/settings/DeviceAdminSettings.java b/src/com/android/settings/DeviceAdminSettings.java index 00f4d9cbec3..350d73132ed 100644 --- a/src/com/android/settings/DeviceAdminSettings.java +++ b/src/com/android/settings/DeviceAdminSettings.java @@ -43,9 +43,9 @@ import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.BaseAdapter; -import android.widget.CheckBox; import android.widget.ImageView; import android.widget.ListView; +import android.widget.Switch; import android.widget.TextView; import com.android.internal.logging.nano.MetricsProto; @@ -205,7 +205,7 @@ public class DeviceAdminSettings extends ListFragment implements Instrumentable static class ViewHolder { ImageView icon; TextView name; - CheckBox checkbox; + Switch checkbox; TextView description; } @@ -291,10 +291,10 @@ public class DeviceAdminSettings extends ListFragment implements Instrumentable private View newDeviceAdminView(ViewGroup parent) { View v = mInflater.inflate(R.layout.device_admin_item, parent, false); ViewHolder h = new ViewHolder(); - h.icon = (ImageView) v.findViewById(R.id.icon); - h.name = (TextView) v.findViewById(R.id.name); - h.checkbox = (CheckBox) v.findViewById(R.id.checkbox); - h.description = (TextView) v.findViewById(R.id.description); + h.icon = v.findViewById(R.id.icon); + h.name = v.findViewById(R.id.name); + h.checkbox = v.findViewById(R.id.checkbox); + h.description = v.findViewById(R.id.description); v.setTag(h); return v; } diff --git a/src/com/android/settings/applications/PictureInPictureSettings.java b/src/com/android/settings/applications/PictureInPictureSettings.java index 9b8a897ee12..3dc8ab3e09a 100644 --- a/src/com/android/settings/applications/PictureInPictureSettings.java +++ b/src/com/android/settings/applications/PictureInPictureSettings.java @@ -38,6 +38,7 @@ import com.android.internal.annotations.VisibleForTesting; import com.android.internal.logging.nano.MetricsProto.MetricsEvent; import com.android.settings.R; import com.android.settings.notification.EmptyTextSettings; +import com.android.settings.widget.AppPreference; import com.android.settings.wrapper.ActivityInfoWrapper; import com.android.settings.wrapper.UserManagerWrapper; import com.android.settingslib.wrapper.PackageManagerWrapper; @@ -176,7 +177,7 @@ public class PictureInPictureSettings extends EmptyTextSettings { final String packageName = appInfo.packageName; final CharSequence label = appInfo.loadLabel(pm); - final Preference pref = new Preference(prefContext); + final Preference pref = new AppPreference(prefContext); pref.setIcon(mIconDrawableFactory.getBadgedIcon(appInfo, userId)); pref.setTitle(pm.getUserBadgedLabel(label, user)); pref.setSummary(PictureInPictureDetails.getPreferenceSummary(prefContext, diff --git a/src/com/android/settings/applications/ProcessStatsPreference.java b/src/com/android/settings/applications/ProcessStatsPreference.java index 4ee0a041b4d..034a68dd69b 100644 --- a/src/com/android/settings/applications/ProcessStatsPreference.java +++ b/src/com/android/settings/applications/ProcessStatsPreference.java @@ -18,14 +18,13 @@ package com.android.settings.applications; import android.content.Context; import android.content.pm.PackageManager; -import android.graphics.drawable.ColorDrawable; import android.text.TextUtils; import android.text.format.Formatter; import android.util.Log; -import com.android.settings.AppProgressPreference; +import com.android.settings.widget.AppPreference; -public class ProcessStatsPreference extends AppProgressPreference { +public class ProcessStatsPreference extends AppPreference { static final String TAG = "ProcessStatsPreference"; private ProcStatsPackageEntry mEntry; diff --git a/src/com/android/settings/applications/RecentAppsPreferenceController.java b/src/com/android/settings/applications/RecentAppsPreferenceController.java index 205fedb1327..090a5a786fc 100644 --- a/src/com/android/settings/applications/RecentAppsPreferenceController.java +++ b/src/com/android/settings/applications/RecentAppsPreferenceController.java @@ -40,6 +40,7 @@ import android.util.Log; import com.android.settings.R; import com.android.settings.Utils; import com.android.settings.core.PreferenceControllerMixin; +import com.android.settings.widget.AppPreference; import com.android.settingslib.applications.ApplicationsState; import com.android.settingslib.core.AbstractPreferenceController; import com.android.settingslib.wrapper.PackageManagerWrapper; @@ -230,8 +231,7 @@ public class RecentAppsPreferenceController extends AbstractPreferenceController boolean rebindPref = true; Preference pref = appPreferences.remove(pkgName); if (pref == null) { - pref = new Preference(prefContext); - pref.setLayoutResource(R.layout.preference_app); + pref = new AppPreference(prefContext); rebindPref = false; } pref.setKey(pkgName); diff --git a/src/com/android/settings/applications/defaultapps/DefaultAppPickerFragment.java b/src/com/android/settings/applications/defaultapps/DefaultAppPickerFragment.java index 6eb1ad81b57..7b275168e48 100644 --- a/src/com/android/settings/applications/defaultapps/DefaultAppPickerFragment.java +++ b/src/com/android/settings/applications/defaultapps/DefaultAppPickerFragment.java @@ -84,6 +84,11 @@ public abstract class DefaultAppPickerFragment extends RadioButtonPickerFragment } } + @Override + protected int getRadioButtonPreferenceCustomLayoutResId() { + return R.layout.preference_app; + } + protected ConfirmationDialogFragment newConfirmationDialogFragment(String selectedKey, CharSequence confirmationMessage) { final ConfirmationDialogFragment fragment = new ConfirmationDialogFragment(); diff --git a/src/com/android/settings/applications/defaultapps/DefaultAppPreferenceController.java b/src/com/android/settings/applications/defaultapps/DefaultAppPreferenceController.java index 91143b1d59d..d0165674396 100644 --- a/src/com/android/settings/applications/defaultapps/DefaultAppPreferenceController.java +++ b/src/com/android/settings/applications/defaultapps/DefaultAppPreferenceController.java @@ -29,6 +29,7 @@ import com.android.settings.R; import com.android.settings.Utils; import com.android.settings.core.PreferenceControllerMixin; import com.android.settings.widget.GearPreference; +import com.android.settingslib.TwoTargetPreference; import com.android.settingslib.core.AbstractPreferenceController; import com.android.settingslib.wrapper.PackageManagerWrapper; @@ -53,6 +54,12 @@ public abstract class DefaultAppPreferenceController extends AbstractPreferenceC public void updateState(Preference preference) { final DefaultAppInfo app = getDefaultAppInfo(); CharSequence defaultAppLabel = getDefaultAppLabel(); + if (preference instanceof TwoTargetPreference) { + // For use small icon because we are displaying an app preference. + // We only need to do this for TwoTargetPreference because the other prefs are + // already using AppPreference so their icon is already normalized. + ((TwoTargetPreference) preference).setUseSmallIcon(true); + } if (!TextUtils.isEmpty(defaultAppLabel)) { preference.setSummary(defaultAppLabel); Utils.setSafeIcon(preference, getDefaultAppIcon()); diff --git a/src/com/android/settings/datausage/AppDataUsagePreference.java b/src/com/android/settings/datausage/AppDataUsagePreference.java index 14b057d4dfe..f0fd755f617 100644 --- a/src/com/android/settings/datausage/AppDataUsagePreference.java +++ b/src/com/android/settings/datausage/AppDataUsagePreference.java @@ -15,19 +15,18 @@ package com.android.settings.datausage; import android.content.Context; -import android.support.v7.preference.Preference; import android.support.v7.preference.PreferenceViewHolder; import android.text.format.Formatter; import android.view.View; import android.widget.ProgressBar; -import com.android.settings.R; +import com.android.settings.widget.AppPreference; import com.android.settingslib.AppItem; import com.android.settingslib.net.UidDetail; import com.android.settingslib.net.UidDetailProvider; import com.android.settingslib.utils.ThreadUtils; -public class AppDataUsagePreference extends Preference { +public class AppDataUsagePreference extends AppPreference { private final AppItem mItem; private final int mPercent; @@ -38,8 +37,6 @@ public class AppDataUsagePreference extends Preference { super(context); mItem = item; mPercent = percent; - setLayoutResource(R.layout.preference_app); - setWidgetLayoutResource(R.layout.widget_progress_bar); if (item.restricted && item.total <= 0) { setSummary(com.android.settings.R.string.data_usage_app_restricted); @@ -60,7 +57,6 @@ public class AppDataUsagePreference extends Preference { @Override public void onBindViewHolder(PreferenceViewHolder holder) { super.onBindViewHolder(holder); - final ProgressBar progress = (ProgressBar) holder.findViewById( android.R.id.progress); diff --git a/src/com/android/settings/datausage/UnrestrictedDataAccess.java b/src/com/android/settings/datausage/UnrestrictedDataAccess.java index 8fad9864b15..6771abc6dde 100644 --- a/src/com/android/settings/datausage/UnrestrictedDataAccess.java +++ b/src/com/android/settings/datausage/UnrestrictedDataAccess.java @@ -18,7 +18,6 @@ import android.app.Application; import android.content.Context; import android.os.Bundle; import android.os.UserHandle; -import android.support.v14.preference.SwitchPreference; import android.support.v7.preference.Preference; import android.support.v7.preference.PreferenceViewHolder; import android.view.Menu; @@ -34,6 +33,7 @@ import com.android.settings.applications.AppStateBaseBridge; import com.android.settings.applications.InstalledAppDetails; import com.android.settings.datausage.AppStateDataUsageBridge.DataUsageState; import com.android.settings.overlay.FeatureFactory; +import com.android.settings.widget.AppSwitchPreference; import com.android.settingslib.applications.ApplicationsState; import com.android.settingslib.applications.ApplicationsState.AppEntry; import com.android.settingslib.applications.ApplicationsState.AppFilter; @@ -59,11 +59,7 @@ public class UnrestrictedDataAccess extends SettingsPreferenceFragment public void onCreate(Bundle icicle) { super.onCreate(icicle); setAnimationAllowed(true); - if (usePreferenceScreenTitle()) { - addPreferencesFromResource(R.xml.unrestricted_data_access_settings); - } else { - setPreferenceScreen(getPreferenceManager().createPreferenceScreen(getContext())); - } + addPreferencesFromResource(R.xml.unrestricted_data_access_settings); mApplicationsState = ApplicationsState.getInstance( (Application) getContext().getApplicationContext()); mDataSaverBackend = new DataSaverBackend(getContext()); @@ -239,7 +235,8 @@ public class UnrestrictedDataAccess extends SettingsPreferenceFragment return app != null && UserHandle.isApp(app.info.uid); } - private class AccessPreference extends SwitchPreference implements DataSaverBackend.Listener { + private class AccessPreference extends AppSwitchPreference + implements DataSaverBackend.Listener { private final AppEntry mEntry; private final DataUsageState mState; diff --git a/src/com/android/settings/enterprise/ApplicationListPreferenceController.java b/src/com/android/settings/enterprise/ApplicationListPreferenceController.java index dce6f570eca..8be7944162d 100644 --- a/src/com/android/settings/enterprise/ApplicationListPreferenceController.java +++ b/src/com/android/settings/enterprise/ApplicationListPreferenceController.java @@ -22,11 +22,11 @@ import android.support.v7.preference.Preference; import android.support.v7.preference.PreferenceScreen; import android.util.IconDrawableFactory; -import com.android.settings.R; import com.android.settings.SettingsPreferenceFragment; import com.android.settings.applications.ApplicationFeatureProvider; import com.android.settings.applications.UserAppInfo; import com.android.settings.core.PreferenceControllerMixin; +import com.android.settings.widget.AppPreference; import com.android.settingslib.core.AbstractPreferenceController; import java.util.List; @@ -68,8 +68,7 @@ public class ApplicationListPreferenceController extends AbstractPreferenceContr final Context prefContext = mParent.getPreferenceManager().getContext(); for (int position = 0; position < result.size(); position++) { final UserAppInfo item = result.get(position); - final Preference preference = new Preference(prefContext); - preference.setLayoutResource(R.layout.preference_app); + final Preference preference = new AppPreference(prefContext); preference.setTitle(item.appInfo.loadLabel(mPm)); preference.setIcon(iconDrawableFactory.getBadgedIcon(item.appInfo)); preference.setOrder(position); diff --git a/src/com/android/settings/notification/ZenAccessSettings.java b/src/com/android/settings/notification/ZenAccessSettings.java index 44052b10e55..0a4915ad02c 100644 --- a/src/com/android/settings/notification/ZenAccessSettings.java +++ b/src/com/android/settings/notification/ZenAccessSettings.java @@ -51,6 +51,7 @@ import com.android.internal.logging.nano.MetricsProto.MetricsEvent; import com.android.settings.R; import com.android.settings.core.instrumentation.InstrumentedDialogFragment; import com.android.settings.overlay.FeatureFactory; +import com.android.settings.widget.AppSwitchPreference; import java.util.ArrayList; import java.util.Collections; @@ -138,7 +139,7 @@ public class ZenAccessSettings extends EmptyTextSettings { for (ApplicationInfo app : apps) { final String pkg = app.packageName; final CharSequence label = app.loadLabel(mPkgMan); - final SwitchPreference pref = new SwitchPreference(getPrefContext()); + final SwitchPreference pref = new AppSwitchPreference(getPrefContext()); pref.setPersistent(false); pref.setIcon(app.loadIcon(mPkgMan)); pref.setTitle(label); diff --git a/src/com/android/settings/utils/ManagedServiceSettings.java b/src/com/android/settings/utils/ManagedServiceSettings.java index 7a888dbabda..d488dfe3ca2 100644 --- a/src/com/android/settings/utils/ManagedServiceSettings.java +++ b/src/com/android/settings/utils/ManagedServiceSettings.java @@ -21,7 +21,6 @@ import android.app.ActivityManager; import android.app.AlertDialog; import android.app.Dialog; import android.app.Fragment; -import android.app.Notification; import android.app.NotificationManager; import android.app.admin.DevicePolicyManager; import android.content.ComponentName; @@ -46,6 +45,7 @@ import com.android.settings.R; import com.android.settings.Utils; import com.android.settings.core.instrumentation.InstrumentedDialogFragment; import com.android.settings.notification.EmptyTextSettings; +import com.android.settings.widget.AppSwitchPreference; import java.util.Collections; import java.util.List; @@ -127,7 +127,7 @@ public abstract class ManagedServiceSettings extends EmptyTextSettings { Log.e(TAG, "can't find package name", e); } final String summary = service.loadLabel(mPm).toString(); - final SwitchPreference pref = new SwitchPreference(getPrefContext()); + final SwitchPreference pref = new AppSwitchPreference(getPrefContext()); pref.setPersistent(false); pref.setIcon(mIconDrawableFactory.getBadgedIcon(service, service.applicationInfo, UserHandle.getUserId(service.applicationInfo.uid))); diff --git a/src/com/android/settings/AppProgressPreference.java b/src/com/android/settings/widget/AppPreference.java similarity index 59% rename from src/com/android/settings/AppProgressPreference.java rename to src/com/android/settings/widget/AppPreference.java index 5822d8d8722..8a0e6a10ea1 100644 --- a/src/com/android/settings/AppProgressPreference.java +++ b/src/com/android/settings/widget/AppPreference.java @@ -1,5 +1,5 @@ /* - * Copyright (C) 2015 The Android Open Source Project + * Copyright (C) 2017 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. @@ -13,26 +13,36 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.android.settings; +package com.android.settings.widget; import android.content.Context; import android.support.v7.preference.Preference; import android.support.v7.preference.PreferenceViewHolder; +import android.text.TextUtils; import android.util.AttributeSet; +import android.view.View; import android.widget.ProgressBar; -public class AppProgressPreference extends Preference { +import com.android.settings.R; + +public class AppPreference extends Preference { private int mProgress; + private boolean mProgressVisible; - public AppProgressPreference(Context context, AttributeSet attrs) { + public AppPreference(Context context) { + super(context); + setLayoutResource(R.layout.preference_app); + } + + public AppPreference(Context context, AttributeSet attrs) { super(context, attrs); setLayoutResource(R.layout.preference_app); - setWidgetLayoutResource(R.layout.widget_progress_bar); } public void setProgress(int amount) { mProgress = amount; + mProgressVisible = true; notifyChanged(); } @@ -40,7 +50,14 @@ public class AppProgressPreference extends Preference { public void onBindViewHolder(PreferenceViewHolder view) { super.onBindViewHolder(view); + view.findViewById(R.id.summary_container) + .setVisibility(TextUtils.isEmpty(getSummary()) ? View.GONE : View.VISIBLE); final ProgressBar progress = (ProgressBar) view.findViewById(android.R.id.progress); - progress.setProgress(mProgress); + if (mProgressVisible) { + progress.setProgress(mProgress); + progress.setVisibility(View.VISIBLE); + } else { + progress.setVisibility(View.GONE); + } } } diff --git a/src/com/android/settings/widget/AppSwitchPreference.java b/src/com/android/settings/widget/AppSwitchPreference.java new file mode 100644 index 00000000000..d67e895766a --- /dev/null +++ b/src/com/android/settings/widget/AppSwitchPreference.java @@ -0,0 +1,41 @@ +/* + * Copyright (C) 2017 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.widget; + +import android.content.Context; +import android.support.v14.preference.SwitchPreference; +import android.support.v7.preference.PreferenceViewHolder; +import android.text.TextUtils; +import android.view.View; + +import com.android.settings.R; + +public class AppSwitchPreference extends SwitchPreference { + + public AppSwitchPreference(Context context) { + super(context); + setLayoutResource(R.layout.preference_app); + } + + @Override + public void onBindViewHolder(PreferenceViewHolder view) { + super.onBindViewHolder(view); + + view.findViewById(R.id.summary_container) + .setVisibility(TextUtils.isEmpty(getSummary()) ? View.GONE : View.VISIBLE); + } +} diff --git a/src/com/android/settings/widget/RadioButtonPickerFragment.java b/src/com/android/settings/widget/RadioButtonPickerFragment.java index 53bb7d99966..7489a772c5c 100644 --- a/src/com/android/settings/widget/RadioButtonPickerFragment.java +++ b/src/com/android/settings/widget/RadioButtonPickerFragment.java @@ -21,8 +21,8 @@ import android.graphics.drawable.Drawable; import android.os.Bundle; import android.os.UserHandle; import android.os.UserManager; +import android.support.annotation.LayoutRes; import android.support.annotation.VisibleForTesting; -import android.support.annotation.XmlRes; import android.support.v7.preference.Preference; import android.support.v7.preference.PreferenceScreen; import android.text.TextUtils; @@ -135,7 +135,7 @@ public abstract class RadioButtonPickerFragment extends InstrumentedPreferenceFr final PreferenceScreen screen = getPreferenceScreen(); screen.removeAll(); - final int customLayoutResId = getRadioButtomPreferenceCustomLayoutResId(); + final int customLayoutResId = getRadioButtonPreferenceCustomLayoutResId(); if (shouldShowItemNone()) { final RadioButtonPreference nonePref = new RadioButtonPreference(getPrefContext()); if (customLayoutResId > 0) { @@ -218,8 +218,8 @@ public abstract class RadioButtonPickerFragment extends InstrumentedPreferenceFr /** * Provides a custom layout for each candidate row. */ - @XmlRes - protected int getRadioButtomPreferenceCustomLayoutResId() { + @LayoutRes + protected int getRadioButtonPreferenceCustomLayoutResId() { return 0; } diff --git a/tests/robotests/src/com/android/settings/applications/defaultapps/DefaultAppPickerFragmentTest.java b/tests/robotests/src/com/android/settings/applications/defaultapps/DefaultAppPickerFragmentTest.java index 66ec80a26c8..3621edd3645 100644 --- a/tests/robotests/src/com/android/settings/applications/defaultapps/DefaultAppPickerFragmentTest.java +++ b/tests/robotests/src/com/android/settings/applications/defaultapps/DefaultAppPickerFragmentTest.java @@ -17,6 +17,14 @@ package com.android.settings.applications.defaultapps; +import static com.google.common.truth.Truth.assertThat; +import static org.mockito.Matchers.any; +import static org.mockito.Matchers.eq; +import static org.mockito.Mockito.doReturn; +import static org.mockito.Mockito.spy; +import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.when; + import android.app.Activity; import android.content.Context; import android.os.UserManager; @@ -24,9 +32,10 @@ import android.support.v7.preference.PreferenceScreen; import android.util.Pair; import com.android.internal.logging.nano.MetricsProto; -import com.android.settings.testutils.SettingsRobolectricTestRunner; +import com.android.settings.R; import com.android.settings.TestConfig; import com.android.settings.testutils.FakeFeatureFactory; +import com.android.settings.testutils.SettingsRobolectricTestRunner; import com.android.settings.widget.RadioButtonPreference; import org.junit.Before; @@ -41,13 +50,6 @@ import org.robolectric.annotation.Config; import java.util.ArrayList; import java.util.List; -import static org.mockito.Matchers.any; -import static org.mockito.Matchers.eq; -import static org.mockito.Mockito.doReturn; -import static org.mockito.Mockito.spy; -import static org.mockito.Mockito.verify; -import static org.mockito.Mockito.when; - @RunWith(SettingsRobolectricTestRunner.class) @Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION) public class DefaultAppPickerFragmentTest { @@ -97,6 +99,12 @@ public class DefaultAppPickerFragmentTest { any(Pair.class)); } + @Test + public void shouldHaveAppPreferenceLayout() { + assertThat(mFragment.getRadioButtonPreferenceCustomLayoutResId()) + .isEqualTo(R.layout.preference_app); + } + public static class TestFragment extends DefaultAppPickerFragment { boolean setDefaultAppKeyCalled; diff --git a/tests/robotests/src/com/android/settings/applications/defaultapps/DefaultAppPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/applications/defaultapps/DefaultAppPreferenceControllerTest.java index 120f3ae94e0..a02a2de57ac 100644 --- a/tests/robotests/src/com/android/settings/applications/defaultapps/DefaultAppPreferenceControllerTest.java +++ b/tests/robotests/src/com/android/settings/applications/defaultapps/DefaultAppPreferenceControllerTest.java @@ -26,8 +26,9 @@ import android.os.UserManager; import android.support.v7.preference.Preference; import com.android.settings.R; -import com.android.settings.testutils.SettingsRobolectricTestRunner; import com.android.settings.TestConfig; +import com.android.settings.testutils.SettingsRobolectricTestRunner; +import com.android.settingslib.TwoTargetPreference; import org.junit.Before; import org.junit.Test; @@ -79,6 +80,16 @@ public class DefaultAppPreferenceControllerTest { verify(mPreference).setSummary(R.string.app_list_preference_none); } + @Test + public void updateState_twoTargetPref_shouldUseSmallIcon() { + final TwoTargetPreference pref = mock(TwoTargetPreference.class); + mController = new TestPreferenceController(mContext); + + mController.updateState(pref); + + verify(pref).setUseSmallIcon(true); + } + private static class TestPreferenceController extends DefaultAppPreferenceController { private DefaultAppInfo mAppInfo; diff --git a/tests/robotests/src/com/android/settings/enterprise/ApplicationListPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/enterprise/ApplicationListPreferenceControllerTest.java index 0d22d2e64a2..81223a5aa79 100644 --- a/tests/robotests/src/com/android/settings/enterprise/ApplicationListPreferenceControllerTest.java +++ b/tests/robotests/src/com/android/settings/enterprise/ApplicationListPreferenceControllerTest.java @@ -16,6 +16,16 @@ package com.android.settings.enterprise; +import static com.android.settings.testutils.ApplicationTestUtils.buildInfo; +import static com.google.common.truth.Truth.assertThat; +import static org.mockito.Answers.RETURNS_DEEP_STUBS; +import static org.mockito.Matchers.any; +import static org.mockito.Matchers.anyInt; +import static org.mockito.Matchers.eq; +import static org.mockito.Mockito.times; +import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.when; + import android.content.Context; import android.content.pm.PackageManager; import android.content.pm.UserInfo; @@ -23,10 +33,10 @@ import android.support.v7.preference.Preference; import android.support.v7.preference.PreferenceScreen; import com.android.settings.SettingsPreferenceFragment; -import com.android.settings.testutils.SettingsRobolectricTestRunner; import com.android.settings.TestConfig; import com.android.settings.applications.ApplicationFeatureProvider; import com.android.settings.applications.UserAppInfo; +import com.android.settings.testutils.SettingsRobolectricTestRunner; import org.junit.Before; import org.junit.Test; @@ -43,16 +53,6 @@ import java.util.HashSet; import java.util.List; import java.util.Set; -import static com.android.settings.testutils.ApplicationTestUtils.buildInfo; -import static com.google.common.truth.Truth.assertThat; -import static org.mockito.Answers.RETURNS_DEEP_STUBS; -import static org.mockito.Matchers.any; -import static org.mockito.Matchers.anyInt; -import static org.mockito.Matchers.eq; -import static org.mockito.Mockito.times; -import static org.mockito.Mockito.verify; -import static org.mockito.Mockito.when; - @RunWith(SettingsRobolectricTestRunner.class) @Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION) public class ApplicationListPreferenceControllerTest { @@ -120,7 +120,7 @@ public class ApplicationListPreferenceControllerTest { implements ApplicationListPreferenceController.ApplicationListBuilder { @Override public void buildApplicationList(Context context, - ApplicationFeatureProvider.ListOfAppsCallback callback) { + ApplicationFeatureProvider.ListOfAppsCallback callback) { final List apps = new ArrayList<>(); final UserInfo user = new UserInfo(MAIN_USER_ID, "main", UserInfo.FLAG_ADMIN); apps.add(new UserAppInfo(user, buildInfo(MAIN_USER_APP_UID, APP_1, 0, 0))); diff --git a/tests/robotests/src/com/android/settings/widget/AppPreferenceTest.java b/tests/robotests/src/com/android/settings/widget/AppPreferenceTest.java new file mode 100644 index 00000000000..d4890942c6d --- /dev/null +++ b/tests/robotests/src/com/android/settings/widget/AppPreferenceTest.java @@ -0,0 +1,78 @@ +/* + * Copyright (C) 2017 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.widget; + +import static com.google.common.truth.Truth.assertThat; + +import android.content.Context; +import android.support.v7.preference.PreferenceViewHolder; +import android.view.View; + +import com.android.settings.R; +import com.android.settings.TestConfig; +import com.android.settings.testutils.SettingsRobolectricTestRunner; + +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.robolectric.RuntimeEnvironment; +import org.robolectric.annotation.Config; + +@RunWith(SettingsRobolectricTestRunner.class) +@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION) +public class AppPreferenceTest { + + private Context mContext; + private View mRootView; + private AppPreference mPref; + private PreferenceViewHolder mHolder; + + @Before + public void setUp() { + mContext = RuntimeEnvironment.application; + mRootView = View.inflate(mContext, R.layout.preference_app, null /* parent */); + mHolder = PreferenceViewHolder.createInstanceForTests(mRootView); + mPref = new AppPreference(mContext); + } + + @Test + public void setProgress_showProgress() { + mPref.setProgress(1); + mPref.onBindViewHolder(mHolder); + + assertThat(mHolder.findViewById(android.R.id.progress).getVisibility()) + .isEqualTo(View.VISIBLE); + } + + @Test + public void setSummary_showSummaryContainer() { + mPref.setSummary("test"); + mPref.onBindViewHolder(mHolder); + + assertThat(mHolder.findViewById(R.id.summary_container).getVisibility()) + .isEqualTo(View.VISIBLE); + } + + @Test + public void noSummary_hideSummaryContainer() { + mPref.setSummary(null); + mPref.onBindViewHolder(mHolder); + + assertThat(mHolder.findViewById(R.id.summary_container).getVisibility()) + .isEqualTo(View.GONE); + } +} diff --git a/tests/robotests/src/com/android/settings/widget/AppSwitchPreferenceTest.java b/tests/robotests/src/com/android/settings/widget/AppSwitchPreferenceTest.java new file mode 100644 index 00000000000..a7c8d7cdd90 --- /dev/null +++ b/tests/robotests/src/com/android/settings/widget/AppSwitchPreferenceTest.java @@ -0,0 +1,69 @@ +/* + * Copyright (C) 2017 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.widget; + +import static com.google.common.truth.Truth.assertThat; + +import android.content.Context; +import android.support.v7.preference.PreferenceViewHolder; +import android.view.View; + +import com.android.settings.R; +import com.android.settings.TestConfig; +import com.android.settings.testutils.SettingsRobolectricTestRunner; + +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.robolectric.RuntimeEnvironment; +import org.robolectric.annotation.Config; + +@RunWith(SettingsRobolectricTestRunner.class) +@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION) +public class AppSwitchPreferenceTest { + + private Context mContext; + private View mRootView; + private AppSwitchPreference mPref; + private PreferenceViewHolder mHolder; + + @Before + public void setUp() { + mContext = RuntimeEnvironment.application; + mRootView = View.inflate(mContext, R.layout.preference_app, null /* parent */); + mHolder = PreferenceViewHolder.createInstanceForTests(mRootView); + mPref = new AppSwitchPreference(mContext); + } + + @Test + public void setSummary_showSummaryContainer() { + mPref.setSummary("test"); + mPref.onBindViewHolder(mHolder); + + assertThat(mHolder.findViewById(R.id.summary_container).getVisibility()) + .isEqualTo(View.VISIBLE); + } + + @Test + public void noSummary_hideSummaryContainer() { + mPref.setSummary(null); + mPref.onBindViewHolder(mHolder); + + assertThat(mHolder.findViewById(R.id.summary_container).getVisibility()) + .isEqualTo(View.GONE); + } +} diff --git a/tests/robotests/src/com/android/settings/widget/RadioButtonPickerFragmentTest.java b/tests/robotests/src/com/android/settings/widget/RadioButtonPickerFragmentTest.java index e314ef36270..40d73eb327a 100644 --- a/tests/robotests/src/com/android/settings/widget/RadioButtonPickerFragmentTest.java +++ b/tests/robotests/src/com/android/settings/widget/RadioButtonPickerFragmentTest.java @@ -16,15 +16,21 @@ package com.android.settings.widget; +import static com.google.common.truth.Truth.assertThat; +import static org.mockito.Mockito.doReturn; +import static org.mockito.Mockito.spy; +import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.when; + import android.app.Activity; import android.content.Context; import android.os.UserManager; import android.support.v7.preference.PreferenceScreen; -import com.android.settings.testutils.SettingsRobolectricTestRunner; import com.android.settings.TestConfig; import com.android.settings.applications.defaultapps.DefaultAppInfo; import com.android.settings.testutils.FakeFeatureFactory; +import com.android.settings.testutils.SettingsRobolectricTestRunner; import org.junit.Before; import org.junit.Test; @@ -38,12 +44,6 @@ import org.robolectric.annotation.Config; import java.util.ArrayList; import java.util.List; -import static com.google.common.truth.Truth.assertThat; -import static org.mockito.Mockito.doReturn; -import static org.mockito.Mockito.spy; -import static org.mockito.Mockito.verify; -import static org.mockito.Mockito.when; - @RunWith(SettingsRobolectricTestRunner.class) @Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION) public class RadioButtonPickerFragmentTest { @@ -99,6 +99,11 @@ public class RadioButtonPickerFragmentTest { assertThat(mFragment.setDefaultKeyCalled).isTrue(); } + @Test + public void shouldHaveNoCustomPreferenceLayout() { + assertThat(mFragment.getRadioButtonPreferenceCustomLayoutResId()).isEqualTo(0); + } + public static class TestFragment extends RadioButtonPickerFragment { boolean setDefaultKeyCalled;