From 2ea67003364d8f4a79d6afd624d56709839151ee Mon Sep 17 00:00:00 2001 From: Fan Zhang Date: Tue, 11 Jul 2017 16:26:58 -0700 Subject: [PATCH] Show default app icon in default app screen. - Renamed AdvancedAppSettings to DefaultAppSettings. - Add logic to DefaultAppPreferenceController to also display icon. - Modified DefautlAssistPrefController to suppress gear icon, and use the controller in default app setting UI to display icon. - Remove dynamic injected payment setting activity and create the setting statically in xml. - Add DefaultPaymentSettingsPreference to display default payment app title (no icon because we can't get it) Change-Id: I6b8c768da0bafe5ec9a85ba9c79c7993b449be25 Fix: 36458534 Test: robotests --- AndroidManifest.xml | 7 +- res/xml/app_default_settings.xml | 34 +++---- src/com/android/settings/SettingsActivity.java | 7 -- ...cedAppSettings.java => DefaultAppSettings.java} | 14 ++- .../settings/applications/InstalledAppDetails.java | 10 +- .../settings/applications/ManageApplications.java | 2 +- .../assist/DefaultAssistPreferenceController.java | 18 ++-- .../settings/applications/assist/ManageAssist.java | 4 +- .../applications/defaultapps/DefaultAppInfo.java | 1 - .../DefaultAppPreferenceController.java | 14 +++ .../DefaultBrowserPreferenceController.java | 25 +++++ .../DefaultHomePreferenceController.java | 29 ++---- ...DefaultPaymentSettingsPreferenceController.java | 79 ++++++++++++++++ .../settings/core/gateway/SettingsGateway.java | 5 +- .../dashboard/DashboardFragmentRegistry.java | 4 +- src/com/android/settings/nfc/PaymentBackend.java | 2 +- src/com/android/settings/nfc/PaymentSettings.java | 38 -------- .../settings/search/SearchIndexableResources.java | 12 +-- .../security/SecurityFeatureProviderImpl.java | 15 ++- .../webview/WebViewAppPreferenceController.java | 2 - ...ttingsTest.java => DefaultAppSettingsTest.java} | 2 +- ...ttingsTest.java => DefaultAppSettingsTest.java} | 40 ++++---- .../DefaultAssistPreferenceControllerTest.java | 57 +++++++---- .../DefaultHomePreferenceControllerTest.java | 23 +++-- ...ultPaymentSettingsPreferenceControllerTest.java | 105 +++++++++++++++++++++ 25 files changed, 372 insertions(+), 177 deletions(-) rename src/com/android/settings/applications/{AdvancedAppSettings.java => DefaultAppSettings.java} (91%) create mode 100644 src/com/android/settings/applications/defaultapps/DefaultPaymentSettingsPreferenceController.java rename tests/app/src/com/android/settings/applications/{AdvancedAppSettingsTest.java => DefaultAppSettingsTest.java} (97%) rename tests/robotests/src/com/android/settings/applications/{AdvancedAppSettingsTest.java => DefaultAppSettingsTest.java} (93%) create mode 100644 tests/robotests/src/com/android/settings/applications/defaultapps/DefaultPaymentSettingsPreferenceControllerTest.java diff --git a/AndroidManifest.xml b/AndroidManifest.xml index 6bf3d402d1..48edd1907f 100644 --- a/AndroidManifest.xml +++ b/AndroidManifest.xml @@ -2495,11 +2495,6 @@ - - - - + android:value="com.android.settings.applications.DefaultAppSettings" /> + android:fragment="com.android.settings.applications.assist.ManageAssist" /> - + android:fragment="com.android.settings.applications.defaultapps.DefaultBrowserPicker"> + + settings:keywords="@string/keywords_home" /> + settings:keywords="@string/keywords_default_phone_app" /> + settings:keywords="@string/keywords_more_default_sms_app" /> + + + settings:keywords="@string/keywords_emergency_app" /> + android:fragment="com.android.settings.applications.ManageDomainUrls" /> - + - + diff --git a/src/com/android/settings/SettingsActivity.java b/src/com/android/settings/SettingsActivity.java index a7d9afc03b..225c5ea51b 100644 --- a/src/com/android/settings/SettingsActivity.java +++ b/src/com/android/settings/SettingsActivity.java @@ -813,13 +813,6 @@ public class SettingsActivity extends SettingsDrawerActivity Settings.DateTimeSettingsActivity.class.getName()), !UserManager.isDeviceInDemoMode(this), isAdmin) || somethingChanged; - NfcAdapter adapter = NfcAdapter.getDefaultAdapter(this); - somethingChanged = setTileEnabled(new ComponentName(packageName, - Settings.PaymentSettingsActivity.class.getName()), - pm.hasSystemFeature(PackageManager.FEATURE_NFC) - && pm.hasSystemFeature(PackageManager.FEATURE_NFC_HOST_CARD_EMULATION) - && adapter != null && adapter.isEnabled(), isAdmin) - || somethingChanged; somethingChanged = setTileEnabled(new ComponentName(packageName, Settings.PrintSettingsActivity.class.getName()), diff --git a/src/com/android/settings/applications/AdvancedAppSettings.java b/src/com/android/settings/applications/DefaultAppSettings.java similarity index 91% rename from src/com/android/settings/applications/AdvancedAppSettings.java rename to src/com/android/settings/applications/DefaultAppSettings.java index a237bb85a5..5b15e516a5 100644 --- a/src/com/android/settings/applications/AdvancedAppSettings.java +++ b/src/com/android/settings/applications/DefaultAppSettings.java @@ -22,6 +22,7 @@ import android.text.TextUtils; import com.android.internal.logging.nano.MetricsProto.MetricsEvent; import com.android.settings.R; +import com.android.settings.applications.assist.DefaultAssistPreferenceController; import com.android.settings.applications.defaultapps.DefaultBrowserPreferenceController; import com.android.settings.applications.defaultapps.DefaultEmergencyPreferenceController; import com.android.settings.applications.defaultapps.DefaultHomePreferenceController; @@ -29,6 +30,7 @@ import com.android.settings.applications.defaultapps.DefaultPhonePreferenceContr import com.android.settings.applications.defaultapps.DefaultSmsPreferenceController; import com.android.settings.applications.defaultapps.DefaultWorkBrowserPreferenceController; import com.android.settings.applications.defaultapps.DefaultWorkPhonePreferenceController; +import com.android.settings.applications.defaultapps.DefaultPaymentSettingsPreferenceController; import com.android.settings.dashboard.DashboardFragment; import com.android.settings.dashboard.SummaryLoader; import com.android.settings.search.BaseSearchIndexProvider; @@ -39,9 +41,9 @@ import java.util.ArrayList; import java.util.Arrays; import java.util.List; -public class AdvancedAppSettings extends DashboardFragment { +public class DefaultAppSettings extends DashboardFragment { - static final String TAG = "AdvancedAppSettings"; + static final String TAG = "DefaultAppSettings"; private static final String KEY_ASSIST_VOICE_INPUT = "assist_and_voice_input"; @@ -67,6 +69,8 @@ public class AdvancedAppSettings extends DashboardFragment { private static List buildPreferenceControllers(Context context) { final List controllers = new ArrayList<>(); + controllers.add(new DefaultAssistPreferenceController(context, KEY_ASSIST_VOICE_INPUT, + false /* showSetting */)); controllers.add(new DefaultBrowserPreferenceController(context)); controllers.add(new DefaultWorkBrowserPreferenceController(context)); controllers.add(new DefaultPhonePreferenceController(context)); @@ -74,6 +78,7 @@ public class AdvancedAppSettings extends DashboardFragment { controllers.add(new DefaultSmsPreferenceController(context)); controllers.add(new DefaultEmergencyPreferenceController(context)); controllers.add(new DefaultHomePreferenceController(context)); + controllers.add(new DefaultPaymentSettingsPreferenceController(context)); return controllers; } @@ -100,7 +105,8 @@ public class AdvancedAppSettings extends DashboardFragment { } @Override - public List getPreferenceControllers(Context context) { + public List getPreferenceControllers( + Context context) { return buildPreferenceControllers(context); } }; @@ -152,7 +158,7 @@ public class AdvancedAppSettings extends DashboardFragment { @Override public SummaryLoader.SummaryProvider createSummaryProvider(Activity activity, SummaryLoader summaryLoader) { - return new AdvancedAppSettings.SummaryProvider(activity, summaryLoader); + return new DefaultAppSettings.SummaryProvider(activity, summaryLoader); } }; } diff --git a/src/com/android/settings/applications/InstalledAppDetails.java b/src/com/android/settings/applications/InstalledAppDetails.java index d12fcf844d..f339c58599 100755 --- a/src/com/android/settings/applications/InstalledAppDetails.java +++ b/src/com/android/settings/applications/InstalledAppDetails.java @@ -1070,27 +1070,27 @@ public class InstalledAppDetails extends AppInfoBase final Context context = getContext(); if (DefaultHomePreferenceController.hasHomePreference(mPackageName, context)) { screen.addPreference(new ShortcutPreference(getPrefContext(), - AdvancedAppSettings.class, "default_home", R.string.home_app, + DefaultAppSettings.class, "default_home", R.string.home_app, R.string.configure_apps)); } if (DefaultBrowserPreferenceController.hasBrowserPreference(mPackageName, context)) { screen.addPreference(new ShortcutPreference(getPrefContext(), - AdvancedAppSettings.class, "default_browser", R.string.default_browser_title, + DefaultAppSettings.class, "default_browser", R.string.default_browser_title, R.string.configure_apps)); } if (DefaultPhonePreferenceController.hasPhonePreference(mPackageName, context)) { screen.addPreference(new ShortcutPreference(getPrefContext(), - AdvancedAppSettings.class, "default_phone_app", R.string.default_phone_title, + DefaultAppSettings.class, "default_phone_app", R.string.default_phone_title, R.string.configure_apps)); } if (DefaultEmergencyPreferenceController.hasEmergencyPreference(mPackageName, context)) { screen.addPreference(new ShortcutPreference(getPrefContext(), - AdvancedAppSettings.class, "default_emergency_app", + DefaultAppSettings.class, "default_emergency_app", R.string.default_emergency_app, R.string.configure_apps)); } if (DefaultSmsPreferenceController.hasSmsPreference(mPackageName, context)) { screen.addPreference(new ShortcutPreference(getPrefContext(), - AdvancedAppSettings.class, "default_sms_app", R.string.sms_application_title, + DefaultAppSettings.class, "default_sms_app", R.string.sms_application_title, R.string.configure_apps)); } diff --git a/src/com/android/settings/applications/ManageApplications.java b/src/com/android/settings/applications/ManageApplications.java index 720f8267ec..b5e8db7296 100644 --- a/src/com/android/settings/applications/ManageApplications.java +++ b/src/com/android/settings/applications/ManageApplications.java @@ -687,7 +687,7 @@ public class ManageApplications extends InstrumentedPreferenceFragment ADVANCED_SETTINGS); } else { ((SettingsActivity) getActivity()).startPreferencePanel(this, - AdvancedAppSettings.class.getName(), null, R.string.configure_apps, + DefaultAppSettings.class.getName(), null, R.string.configure_apps, null, this, ADVANCED_SETTINGS); } return true; diff --git a/src/com/android/settings/applications/assist/DefaultAssistPreferenceController.java b/src/com/android/settings/applications/assist/DefaultAssistPreferenceController.java index b8d6a87c94..7520155099 100644 --- a/src/com/android/settings/applications/assist/DefaultAssistPreferenceController.java +++ b/src/com/android/settings/applications/assist/DefaultAssistPreferenceController.java @@ -23,8 +23,8 @@ import android.content.pm.PackageManager; import android.content.pm.ResolveInfo; import android.service.voice.VoiceInteractionService; import android.service.voice.VoiceInteractionServiceInfo; - import android.support.annotation.VisibleForTesting; + import com.android.internal.app.AssistUtils; import com.android.settings.applications.defaultapps.DefaultAppInfo; import com.android.settings.applications.defaultapps.DefaultAppPreferenceController; @@ -33,17 +33,23 @@ import java.util.List; public class DefaultAssistPreferenceController extends DefaultAppPreferenceController { - private static final String KEY_DEFAULT_ASSIST = "default_assist"; - - private AssistUtils mAssistUtils; + private final AssistUtils mAssistUtils; + private final boolean mShowSetting; + private final String mPrefKey; - public DefaultAssistPreferenceController(Context context) { + public DefaultAssistPreferenceController(Context context, String prefKey, + boolean showSetting) { super(context); + mPrefKey = prefKey; + mShowSetting = showSetting; mAssistUtils = new AssistUtils(context); } @Override protected Intent getSettingIntent(DefaultAppInfo info) { + if (!mShowSetting) { + return null; + } final ComponentName cn = mAssistUtils.getAssistComponentForUser(mUserId); if (cn == null) { return null; @@ -72,7 +78,7 @@ public class DefaultAssistPreferenceController extends DefaultAppPreferenceContr @Override public String getPreferenceKey() { - return KEY_DEFAULT_ASSIST; + return mPrefKey; } @Override diff --git a/src/com/android/settings/applications/assist/ManageAssist.java b/src/com/android/settings/applications/assist/ManageAssist.java index a34d3f19da..eb14ea1caf 100644 --- a/src/com/android/settings/applications/assist/ManageAssist.java +++ b/src/com/android/settings/applications/assist/ManageAssist.java @@ -71,7 +71,8 @@ public class ManageAssist extends DashboardFragment { private static List buildPreferenceControllers(Context context, Lifecycle lifecycle) { final List controllers = new ArrayList<>(); - controllers.add(new DefaultAssistPreferenceController(context)); + controllers.add(new DefaultAssistPreferenceController(context, "default_assist", + true /* showSetting */)); controllers.add(new AssistGesturePreferenceController(context, lifecycle, KEY_ASSIST, true /* assistOnly */)); controllers.add(new AssistContextPreferenceController(context, lifecycle)); @@ -81,7 +82,6 @@ public class ManageAssist extends DashboardFragment { return controllers; } - public static final Indexable.SearchIndexProvider SEARCH_INDEX_DATA_PROVIDER = new BaseSearchIndexProvider() { @Override diff --git a/src/com/android/settings/applications/defaultapps/DefaultAppInfo.java b/src/com/android/settings/applications/defaultapps/DefaultAppInfo.java index b40943ff54..12470eb3ab 100644 --- a/src/com/android/settings/applications/defaultapps/DefaultAppInfo.java +++ b/src/com/android/settings/applications/defaultapps/DefaultAppInfo.java @@ -18,7 +18,6 @@ package com.android.settings.applications.defaultapps; import android.app.AppGlobals; import android.content.ComponentName; -import android.content.pm.ActivityInfo; import android.content.pm.ApplicationInfo; import android.content.pm.ComponentInfo; import android.content.pm.PackageItemInfo; diff --git a/src/com/android/settings/applications/defaultapps/DefaultAppPreferenceController.java b/src/com/android/settings/applications/defaultapps/DefaultAppPreferenceController.java index 6b60abcc16..c7b450e00d 100644 --- a/src/com/android/settings/applications/defaultapps/DefaultAppPreferenceController.java +++ b/src/com/android/settings/applications/defaultapps/DefaultAppPreferenceController.java @@ -18,6 +18,7 @@ package com.android.settings.applications.defaultapps; import android.content.Context; import android.content.Intent; +import android.graphics.drawable.Drawable; import android.os.UserHandle; import android.os.UserManager; import android.support.v7.preference.Preference; @@ -54,9 +55,11 @@ public abstract class DefaultAppPreferenceController extends AbstractPreferenceC CharSequence defaultAppLabel = getDefaultAppLabel(); if (!TextUtils.isEmpty(defaultAppLabel)) { preference.setSummary(defaultAppLabel); + preference.setIcon(getDefaultAppIcon()); } else { Log.d(TAG, "No default app"); preference.setSummary(R.string.app_list_preference_none); + preference.setIcon(null); } mayUpdateGearIcon(app, preference); } @@ -84,6 +87,17 @@ public abstract class DefaultAppPreferenceController extends AbstractPreferenceC return null; } + public Drawable getDefaultAppIcon() { + if (!isAvailable()) { + return null; + } + final DefaultAppInfo app = getDefaultAppInfo(); + if (app != null) { + return app.loadIcon(); + } + return null; + } + public CharSequence getDefaultAppLabel() { if (!isAvailable()) { return null; diff --git a/src/com/android/settings/applications/defaultapps/DefaultBrowserPreferenceController.java b/src/com/android/settings/applications/defaultapps/DefaultBrowserPreferenceController.java index 219ce0fe09..a0bf0caf42 100644 --- a/src/com/android/settings/applications/defaultapps/DefaultBrowserPreferenceController.java +++ b/src/com/android/settings/applications/defaultapps/DefaultBrowserPreferenceController.java @@ -21,6 +21,7 @@ import android.content.Intent; import android.content.pm.ComponentInfo; import android.content.pm.PackageManager; import android.content.pm.ResolveInfo; +import android.graphics.drawable.Drawable; import android.net.Uri; import android.support.v7.preference.Preference; import android.text.TextUtils; @@ -86,6 +87,18 @@ public class DefaultBrowserPreferenceController extends DefaultAppPreferenceCont return getOnlyAppLabel(); } + @Override + public Drawable getDefaultAppIcon() { + if (!isAvailable()) { + return null; + } + final DefaultAppInfo defaultApp = getDefaultAppInfo(); + if (defaultApp != null) { + return defaultApp.loadIcon(); + } + return getOnlyAppIcon(); + } + private List getCandidates() { return mPackageManager.queryIntentActivitiesAsUser(BROWSE_PROBE, PackageManager.MATCH_ALL, mUserId); @@ -105,6 +118,18 @@ public class DefaultBrowserPreferenceController extends DefaultAppPreferenceCont return null; } + private Drawable getOnlyAppIcon() { + final List list = getCandidates(); + if (list != null && list.size() == 1) { + final ResolveInfo info = list.get(0); + final ComponentInfo cn = info.getComponentInfo(); + final String packageName = cn == null ? null : cn.packageName; + Log.d(TAG, "Getting icon for the only browser app: " + packageName); + return info.loadIcon(mPackageManager.getPackageManager()); + } + return null; + } + /** * Whether or not the pkg contains browser capability */ diff --git a/src/com/android/settings/applications/defaultapps/DefaultHomePreferenceController.java b/src/com/android/settings/applications/defaultapps/DefaultHomePreferenceController.java index a89766f214..88b36b25dd 100644 --- a/src/com/android/settings/applications/defaultapps/DefaultHomePreferenceController.java +++ b/src/com/android/settings/applications/defaultapps/DefaultHomePreferenceController.java @@ -23,8 +23,6 @@ import android.content.IntentFilter; import android.content.pm.ActivityInfo; import android.content.pm.PackageManager; import android.content.pm.ResolveInfo; -import android.support.v7.preference.Preference; -import android.text.TextUtils; import com.android.settings.applications.PackageManagerWrapper; @@ -59,27 +57,20 @@ public class DefaultHomePreferenceController extends DefaultAppPreferenceControl } @Override - public void updateState(Preference preference) { - super.updateState(preference); - final DefaultAppInfo defaultApp = getDefaultAppInfo(); - final CharSequence defaultAppLabel = defaultApp != null ? defaultApp.loadLabel() : null; - if (TextUtils.isEmpty(defaultAppLabel)) { - final String onlyAppLabel = getOnlyAppLabel(); - if (!TextUtils.isEmpty(onlyAppLabel)) { - preference.setSummary(onlyAppLabel); - } - } - } - - @Override protected DefaultAppInfo getDefaultAppInfo() { final ArrayList homeActivities = new ArrayList<>(); final ComponentName currentDefaultHome = mPackageManager.getHomeActivities(homeActivities); - - return new DefaultAppInfo(mPackageManager, mUserId, currentDefaultHome); + if (currentDefaultHome != null) { + return new DefaultAppInfo(mPackageManager, mUserId, currentDefaultHome); + } + final ActivityInfo onlyAppInfo = getOnlyAppInfo(); + if (onlyAppInfo != null) { + return new DefaultAppInfo(mPackageManager, mUserId, onlyAppInfo.getComponentName()); + } + return null; } - private String getOnlyAppLabel() { + private ActivityInfo getOnlyAppInfo() { final List homeActivities = new ArrayList<>(); final List appLabels = new ArrayList<>(); @@ -92,7 +83,7 @@ public class DefaultHomePreferenceController extends DefaultAppPreferenceControl appLabels.add(info); } return appLabels.size() == 1 - ? appLabels.get(0).loadLabel(mPackageManager.getPackageManager()).toString() + ? appLabels.get(0) : null; } diff --git a/src/com/android/settings/applications/defaultapps/DefaultPaymentSettingsPreferenceController.java b/src/com/android/settings/applications/defaultapps/DefaultPaymentSettingsPreferenceController.java new file mode 100644 index 0000000000..413e1d5904 --- /dev/null +++ b/src/com/android/settings/applications/defaultapps/DefaultPaymentSettingsPreferenceController.java @@ -0,0 +1,79 @@ +/* + * 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.applications.defaultapps; + +import android.content.Context; +import android.content.pm.PackageManager; +import android.nfc.NfcAdapter; +import android.os.UserManager; +import android.support.v7.preference.Preference; + +import com.android.settings.R; +import com.android.settings.core.PreferenceControllerMixin; +import com.android.settings.nfc.PaymentBackend; +import com.android.settingslib.core.AbstractPreferenceController; + +public class DefaultPaymentSettingsPreferenceController extends AbstractPreferenceController + implements PreferenceControllerMixin { + + private final NfcAdapter mNfcAdapter; + private final PackageManager mPackageManager; + private final UserManager mUserManager; + private PaymentBackend mPaymentBackend; + + public DefaultPaymentSettingsPreferenceController(Context context) { + super(context); + mPackageManager = context.getPackageManager(); + mUserManager = (UserManager) context.getSystemService(Context.USER_SERVICE); + mNfcAdapter = NfcAdapter.getDefaultAdapter(mContext); + } + + @Override + public boolean isAvailable() { + return mPackageManager.hasSystemFeature(PackageManager.FEATURE_NFC) + && mPackageManager.hasSystemFeature(PackageManager.FEATURE_NFC_HOST_CARD_EMULATION) + && mUserManager.isAdminUser() + && mNfcAdapter != null + && mNfcAdapter.isEnabled(); + } + + @Override + public void updateState(Preference preference) { + if (mPaymentBackend == null) { + if (mNfcAdapter != null) { + mPaymentBackend = new PaymentBackend(mContext); + } else { + mPaymentBackend = null; + } + } + if (mPaymentBackend == null) { + return; + } + mPaymentBackend.refresh(); + final PaymentBackend.PaymentAppInfo app = mPaymentBackend.getDefaultApp(); + if (app != null) { + preference.setSummary(app.label); + } else { + preference.setSummary(R.string.app_list_preference_none); + } + } + + @Override + public String getPreferenceKey() { + return "default_payment_app"; + } +} diff --git a/src/com/android/settings/core/gateway/SettingsGateway.java b/src/com/android/settings/core/gateway/SettingsGateway.java index 273c313f92..da92c3b70d 100644 --- a/src/com/android/settings/core/gateway/SettingsGateway.java +++ b/src/com/android/settings/core/gateway/SettingsGateway.java @@ -41,7 +41,7 @@ import com.android.settings.accounts.AccountSyncSettings; import com.android.settings.accounts.ChooseAccountActivity; import com.android.settings.accounts.ManagedProfileSettings; import com.android.settings.accounts.UserAndAccountDashboardFragment; -import com.android.settings.applications.AdvancedAppSettings; +import com.android.settings.applications.DefaultAppSettings; import com.android.settings.applications.AppAndNotificationDashboardFragment; import com.android.settings.applications.DrawOverlayDetails; import com.android.settings.applications.ExternalSourcesDetails; @@ -220,7 +220,7 @@ public class SettingsGateway { DrawOverlayDetails.class.getName(), WriteSettingsDetails.class.getName(), ExternalSourcesDetails.class.getName(), - AdvancedAppSettings.class.getName(), + DefaultAppSettings.class.getName(), WallpaperTypeSettings.class.getName(), VrListenerSettings.class.getName(), PictureInPictureSettings.class.getName(), @@ -254,7 +254,6 @@ public class SettingsGateway { }; public static final String[] SETTINGS_FOR_RESTRICTED = { - // New IA // Home page Settings.NetworkDashboardActivity.class.getName(), Settings.ConnectedDeviceDashboardActivity.class.getName(), diff --git a/src/com/android/settings/dashboard/DashboardFragmentRegistry.java b/src/com/android/settings/dashboard/DashboardFragmentRegistry.java index 7c8c8f16cc..fddd5220dc 100644 --- a/src/com/android/settings/dashboard/DashboardFragmentRegistry.java +++ b/src/com/android/settings/dashboard/DashboardFragmentRegistry.java @@ -22,8 +22,8 @@ import com.android.settings.DisplaySettings; import com.android.settings.SecuritySettings; import com.android.settings.accounts.AccountDetailDashboardFragment; import com.android.settings.accounts.UserAndAccountDashboardFragment; -import com.android.settings.applications.AdvancedAppSettings; import com.android.settings.applications.AppAndNotificationDashboardFragment; +import com.android.settings.applications.DefaultAppSettings; import com.android.settings.connecteddevice.ConnectedDeviceDashboardFragment; import com.android.settings.development.DevelopmentSettings; import com.android.settings.deviceinfo.StorageDashboardFragment; @@ -65,7 +65,7 @@ public class DashboardFragmentRegistry { CategoryKey.CATEGORY_APPS); PARENT_TO_CATEGORY_KEY_MAP.put(PowerUsageSummary.class.getName(), CategoryKey.CATEGORY_BATTERY); - PARENT_TO_CATEGORY_KEY_MAP.put(AdvancedAppSettings.class.getName(), + PARENT_TO_CATEGORY_KEY_MAP.put(DefaultAppSettings.class.getName(), CategoryKey.CATEGORY_APPS_DEFAULT); PARENT_TO_CATEGORY_KEY_MAP.put(DisplaySettings.class.getName(), CategoryKey.CATEGORY_DISPLAY); diff --git a/src/com/android/settings/nfc/PaymentBackend.java b/src/com/android/settings/nfc/PaymentBackend.java index eeb43e2451..bc9dbbe179 100644 --- a/src/com/android/settings/nfc/PaymentBackend.java +++ b/src/com/android/settings/nfc/PaymentBackend.java @@ -42,7 +42,7 @@ public class PaymentBackend { } public static class PaymentAppInfo { - CharSequence label; + public CharSequence label; CharSequence description; Drawable banner; boolean isDefault; diff --git a/src/com/android/settings/nfc/PaymentSettings.java b/src/com/android/settings/nfc/PaymentSettings.java index d914cd8ac2..10f115429f 100644 --- a/src/com/android/settings/nfc/PaymentSettings.java +++ b/src/com/android/settings/nfc/PaymentSettings.java @@ -16,12 +16,10 @@ package com.android.settings.nfc; -import android.app.Activity; import android.content.Context; import android.content.Intent; import android.content.pm.PackageManager; import android.content.res.Resources; -import android.nfc.NfcAdapter; import android.os.Bundle; import android.support.v7.preference.PreferenceManager; import android.support.v7.preference.PreferenceScreen; @@ -34,8 +32,6 @@ import android.view.ViewGroup; import com.android.internal.logging.nano.MetricsProto.MetricsEvent; import com.android.settings.R; import com.android.settings.SettingsPreferenceFragment; -import com.android.settings.dashboard.SummaryLoader; -import com.android.settings.nfc.PaymentBackend.PaymentAppInfo; import com.android.settings.search.BaseSearchIndexProvider; import com.android.settings.search.Indexable; import com.android.settings.search.SearchIndexableRaw; @@ -109,40 +105,6 @@ public class PaymentSettings extends SettingsPreferenceFragment implements Index menuItem.setShowAsActionFlags(MenuItem.SHOW_AS_ACTION_NEVER); } - private static class SummaryProvider implements SummaryLoader.SummaryProvider { - - private final Context mContext; - private final SummaryLoader mSummaryLoader; - - public SummaryProvider(Context context, SummaryLoader summaryLoader) { - mContext = context; - mSummaryLoader = summaryLoader; - } - - @Override - public void setListening(boolean listening) { - if (listening && NfcAdapter.getDefaultAdapter(mContext) != null) { - PaymentBackend paymentBackend = new PaymentBackend(mContext); - paymentBackend.refresh(); - PaymentAppInfo app = paymentBackend.getDefaultApp(); - String summary = null; - if (app != null) { - summary = mContext.getString(R.string.payment_summary, app.label); - } - mSummaryLoader.setSummary(this, summary); - } - } - } - - public static final SummaryLoader.SummaryProviderFactory SUMMARY_PROVIDER_FACTORY - = new SummaryLoader.SummaryProviderFactory() { - @Override - public SummaryLoader.SummaryProvider createSummaryProvider(Activity activity, - SummaryLoader summaryLoader) { - return new SummaryProvider(activity, summaryLoader); - } - }; - public static final SearchIndexProvider SEARCH_INDEX_DATA_PROVIDER = new BaseSearchIndexProvider() { @Override diff --git a/src/com/android/settings/search/SearchIndexableResources.java b/src/com/android/settings/search/SearchIndexableResources.java index 9b84bf1087..dccdc65390 100644 --- a/src/com/android/settings/search/SearchIndexableResources.java +++ b/src/com/android/settings/search/SearchIndexableResources.java @@ -20,8 +20,8 @@ import android.provider.SearchIndexableResource; import android.support.annotation.DrawableRes; import android.support.annotation.VisibleForTesting; import android.support.annotation.XmlRes; - import android.text.TextUtils; + import com.android.settings.DateTimeSettings; import com.android.settings.DeviceInfoSettings; import com.android.settings.DisplaySettings; @@ -34,15 +34,14 @@ import com.android.settings.accessibility.AccessibilitySettings; import com.android.settings.accessibility.AccessibilityShortcutPreferenceFragment; import com.android.settings.accessibility.MagnificationPreferenceFragment; import com.android.settings.accounts.UserAndAccountDashboardFragment; -import com.android.settings.applications.AdvancedAppSettings; import com.android.settings.applications.AppAndNotificationDashboardFragment; +import com.android.settings.applications.DefaultAppSettings; import com.android.settings.applications.SpecialAccessSettings; import com.android.settings.applications.assist.ManageAssist; import com.android.settings.backup.BackupSettingsActivity; import com.android.settings.backup.BackupSettingsFragment; import com.android.settings.bluetooth.BluetoothSettings; import com.android.settings.connecteddevice.ConnectedDeviceDashboardFragment; -import com.android.settings.support.SupportDashboardActivity; import com.android.settings.datausage.DataUsageMeteredSettings; import com.android.settings.datausage.DataUsageSummary; import com.android.settings.development.DevelopmentSettings; @@ -78,6 +77,7 @@ import com.android.settings.notification.ZenModeVisualInterruptionSettings; import com.android.settings.print.PrintSettingsFragment; import com.android.settings.security.LockscreenDashboardFragment; import com.android.settings.sim.SimSettings; +import com.android.settings.support.SupportDashboardActivity; import com.android.settings.system.ResetDashboardFragment; import com.android.settings.system.SystemDashboardFragment; import com.android.settings.tts.TtsEnginePreferenceFragment; @@ -101,7 +101,7 @@ public final class SearchIndexableResources { @XmlRes public static final int NO_DATA_RES_ID = 0; - @VisibleForTesting(otherwise = VisibleForTesting.PRIVATE) + @VisibleForTesting static final HashMap sResMap = new HashMap<>(); @VisibleForTesting @@ -156,7 +156,7 @@ public final class SearchIndexableResources { addIndex(PowerUsageAdvanced.class, NO_DATA_RES_ID, R.drawable.ic_settings_battery); addIndex(BatterySaverSettings.class, R.xml.battery_saver_settings, R.drawable.ic_settings_battery); - addIndex(AdvancedAppSettings.class, NO_DATA_RES_ID, R.drawable.ic_settings_applications); + addIndex(DefaultAppSettings.class, NO_DATA_RES_ID, R.drawable.ic_settings_applications); addIndex(ManageAssist.class, NO_DATA_RES_ID, R.drawable.ic_settings_applications); addIndex(SpecialAccessSettings.class, NO_DATA_RES_ID, R.drawable.ic_settings_applications); addIndex(UserSettings.class, NO_DATA_RES_ID, R.drawable.ic_settings_multiuser); @@ -201,7 +201,7 @@ public final class SearchIndexableResources { addIndex( TtsEnginePreferenceFragment.class, NO_DATA_RES_ID, R.drawable.ic_settings_language); addIndex(LockscreenDashboardFragment.class, R.xml.security_lockscreen_settings, - R.drawable.ic_settings_security); + R.drawable.ic_settings_security); addIndex(MagnificationPreferenceFragment.class, NO_DATA_RES_ID, R.drawable.ic_settings_accessibility); addIndex(AccessibilityShortcutPreferenceFragment.class, NO_DATA_RES_ID, diff --git a/src/com/android/settings/security/SecurityFeatureProviderImpl.java b/src/com/android/settings/security/SecurityFeatureProviderImpl.java index 8c6d3437d7..47f7a1b821 100644 --- a/src/com/android/settings/security/SecurityFeatureProviderImpl.java +++ b/src/com/android/settings/security/SecurityFeatureProviderImpl.java @@ -17,31 +17,30 @@ package com.android.settings.security; import android.content.Context; -import android.content.Intent; import android.content.IContentProvider; +import android.content.Intent; import android.content.pm.PackageManager; import android.content.res.Resources; import android.graphics.drawable.Drawable; import android.os.Handler; import android.os.Looper; -import com.android.settings.R; -import com.android.settings.trustagent.TrustAgentManager; -import com.android.settings.trustagent.TrustAgentManagerImpl; -import com.android.settingslib.drawer.DashboardCategory; import android.support.annotation.VisibleForTesting; -import android.support.v4.content.ContextCompat; import android.support.v7.preference.Preference; import android.support.v7.preference.PreferenceScreen; import android.text.TextUtils; import android.util.ArrayMap; import android.util.Pair; +import com.android.settings.R; +import com.android.settings.trustagent.TrustAgentManager; +import com.android.settings.trustagent.TrustAgentManagerImpl; +import com.android.settingslib.drawer.DashboardCategory; import com.android.settingslib.drawer.Tile; import com.android.settingslib.drawer.TileUtils; -import java.util.concurrent.Executors; -import java.util.TreeMap; import java.util.Map; +import java.util.TreeMap; +import java.util.concurrent.Executors; /** Implementation for {@code SecurityFeatureProvider}. */ public class SecurityFeatureProviderImpl implements SecurityFeatureProvider { diff --git a/src/com/android/settings/webview/WebViewAppPreferenceController.java b/src/com/android/settings/webview/WebViewAppPreferenceController.java index 2f3246c9fd..c7740935b5 100644 --- a/src/com/android/settings/webview/WebViewAppPreferenceController.java +++ b/src/com/android/settings/webview/WebViewAppPreferenceController.java @@ -26,7 +26,6 @@ public class WebViewAppPreferenceController extends DefaultAppPreferenceControll private static final String WEBVIEW_APP_KEY = "select_webview_provider"; - private final Context mContext; private final WebViewUpdateServiceWrapper mWebViewUpdateServiceWrapper; private Preference mPreference; @@ -37,7 +36,6 @@ public class WebViewAppPreferenceController extends DefaultAppPreferenceControll public WebViewAppPreferenceController(Context context, WebViewUpdateServiceWrapper webviewUpdateServiceWrapper) { super(context); - mContext = context; mWebViewUpdateServiceWrapper = webviewUpdateServiceWrapper; } diff --git a/tests/app/src/com/android/settings/applications/AdvancedAppSettingsTest.java b/tests/app/src/com/android/settings/applications/DefaultAppSettingsTest.java similarity index 97% rename from tests/app/src/com/android/settings/applications/AdvancedAppSettingsTest.java rename to tests/app/src/com/android/settings/applications/DefaultAppSettingsTest.java index 1831b592e8..bd03bc9407 100644 --- a/tests/app/src/com/android/settings/applications/AdvancedAppSettingsTest.java +++ b/tests/app/src/com/android/settings/applications/DefaultAppSettingsTest.java @@ -32,7 +32,7 @@ import org.junit.Test; * Test for Advanced App preferences. */ @SmallTest -public class AdvancedAppSettingsTest extends InstrumentationTestCase { +public class DefaultAppSettingsTest extends InstrumentationTestCase { private UiDevice mDevice; private Context mTargetContext; diff --git a/tests/robotests/src/com/android/settings/applications/AdvancedAppSettingsTest.java b/tests/robotests/src/com/android/settings/applications/DefaultAppSettingsTest.java similarity index 93% rename from tests/robotests/src/com/android/settings/applications/AdvancedAppSettingsTest.java rename to tests/robotests/src/com/android/settings/applications/DefaultAppSettingsTest.java index 968421b472..9054a8e52b 100644 --- a/tests/robotests/src/com/android/settings/applications/AdvancedAppSettingsTest.java +++ b/tests/robotests/src/com/android/settings/applications/DefaultAppSettingsTest.java @@ -16,18 +16,29 @@ package com.android.settings.applications; +import static com.google.common.truth.Truth.assertThat; +import static org.mockito.Matchers.anyInt; +import static org.mockito.Matchers.anyString; +import static org.mockito.Matchers.eq; +import static org.mockito.Mockito.RETURNS_DEEP_STUBS; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.never; +import static org.mockito.Mockito.spy; +import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.when; + import android.content.Context; import android.content.pm.PackageManager; import android.os.UserManager; import android.telephony.TelephonyManager; import com.android.settings.R; -import com.android.settings.testutils.SettingsRobolectricTestRunner; import com.android.settings.TestConfig; import com.android.settings.applications.defaultapps.DefaultBrowserPreferenceController; import com.android.settings.applications.defaultapps.DefaultPhonePreferenceController; import com.android.settings.applications.defaultapps.DefaultSmsPreferenceController; import com.android.settings.dashboard.SummaryLoader; +import com.android.settings.testutils.SettingsRobolectricTestRunner; import com.android.settings.testutils.XmlTestUtils; import org.junit.Before; @@ -40,31 +51,19 @@ import org.robolectric.util.ReflectionHelpers; import java.util.List; -import static com.google.common.truth.Truth.assertThat; -import static org.mockito.Matchers.anyInt; -import static org.mockito.Matchers.anyString; -import static org.mockito.Matchers.eq; -import static org.mockito.Mockito.RETURNS_DEEP_STUBS; -import static org.mockito.Mockito.mock; -import static org.mockito.Mockito.never; -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 AdvancedAppSettingsTest { +public class DefaultAppSettingsTest { private Context mContext; - private AdvancedAppSettings mFragment; + private DefaultAppSettings mFragment; @Before public void setUp() { MockitoAnnotations.initMocks(this); - mContext = RuntimeEnvironment.application; - mFragment = new AdvancedAppSettings(); + mFragment = new DefaultAppSettings(); mFragment.onAttach(mContext); } @@ -77,8 +76,8 @@ public class AdvancedAppSettingsTest { @Test public void setListening_shouldUpdateSummary() { final SummaryLoader summaryLoader = mock(SummaryLoader.class); - final AdvancedAppSettings.SummaryProvider summaryProvider = - new AdvancedAppSettings.SummaryProvider(mContext, summaryLoader); + final DefaultAppSettings.SummaryProvider summaryProvider = + new DefaultAppSettings.SummaryProvider(mContext, summaryLoader); final DefaultSmsPreferenceController defaultSms = mock(DefaultSmsPreferenceController.class); final DefaultBrowserPreferenceController defaultBrowser = @@ -149,6 +148,7 @@ public class AdvancedAppSettingsTest { public void testNonIndexableKeys_existInXmlLayout() { final Context context = spy(RuntimeEnvironment.application); final Context mockContext = mock(Context.class); + when(mockContext.getApplicationContext()).thenReturn(mockContext); final UserManager userManager = mock(UserManager.class, RETURNS_DEEP_STUBS); when(mockContext.getSystemService(Context.USER_SERVICE)) @@ -159,10 +159,10 @@ public class AdvancedAppSettingsTest { .thenReturn(mock(TelephonyManager.class)); when(mockContext.getPackageManager()) .thenReturn(mock(PackageManager.class)); - final List niks = AdvancedAppSettings.SEARCH_INDEX_DATA_PROVIDER + final List niks = DefaultAppSettings.SEARCH_INDEX_DATA_PROVIDER .getNonIndexableKeys(mockContext); - final int xmlId = (new AdvancedAppSettings()).getPreferenceScreenResId(); + final int xmlId = (new DefaultAppSettings()).getPreferenceScreenResId(); final List keys = XmlTestUtils.getKeysFromPreferenceXml(context, xmlId); diff --git a/tests/robotests/src/com/android/settings/applications/assist/DefaultAssistPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/applications/assist/DefaultAssistPreferenceControllerTest.java index f382b9034b..180abbb491 100644 --- a/tests/robotests/src/com/android/settings/applications/assist/DefaultAssistPreferenceControllerTest.java +++ b/tests/robotests/src/com/android/settings/applications/assist/DefaultAssistPreferenceControllerTest.java @@ -16,6 +16,16 @@ package com.android.settings.applications.assist; +import static com.google.common.truth.Truth.assertThat; +import static org.mockito.Matchers.any; +import static org.mockito.Matchers.anyBoolean; +import static org.mockito.Matchers.anyInt; +import static org.mockito.Mockito.doReturn; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.spy; +import static org.mockito.Mockito.verifyZeroInteractions; +import static org.mockito.Mockito.when; + import android.Manifest; import android.app.SearchManager; import android.content.ComponentName; @@ -28,33 +38,29 @@ import android.content.pm.ResolveInfo; import android.content.pm.ServiceInfo; import android.provider.Settings; -import com.android.settings.testutils.SettingsRobolectricTestRunner; +import com.android.internal.app.AssistUtils; import com.android.settings.TestConfig; import com.android.settings.applications.defaultapps.DefaultAppInfo; +import com.android.settings.testutils.SettingsRobolectricTestRunner; import com.android.settings.testutils.shadow.ShadowSecureSettings; -import java.util.ArrayList; -import java.util.List; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.Mock; import org.mockito.MockitoAnnotations; import org.robolectric.annotation.Config; +import org.robolectric.util.ReflectionHelpers; -import static com.google.common.truth.Truth.assertThat; -import static org.mockito.Matchers.any; -import static org.mockito.Matchers.anyBoolean; -import static org.mockito.Matchers.anyInt; -import static org.mockito.Mockito.doReturn; -import static org.mockito.Mockito.mock; -import static org.mockito.Mockito.spy; -import static org.mockito.Mockito.when; +import java.util.ArrayList; +import java.util.List; @RunWith(SettingsRobolectricTestRunner.class) @Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION) public class DefaultAssistPreferenceControllerTest { + private static final String TEST_KEY = "test_pref_key"; + @Mock private Context mContext; @Mock @@ -66,7 +72,8 @@ public class DefaultAssistPreferenceControllerTest { @Before public void setUp() { MockitoAnnotations.initMocks(this); - mController = new DefaultAssistPreferenceController(mContext); + mController = new DefaultAssistPreferenceController(mContext, TEST_KEY, + true /* showSetting */); } @Test @@ -75,6 +82,12 @@ public class DefaultAssistPreferenceControllerTest { } @Test + public void getPrefKey_shouldReturnKey() { + assertThat(mController.getPreferenceKey()) + .isEqualTo(TEST_KEY); + } + + @Test @Config(shadows = {ShadowSecureSettings.class}) public void getDefaultAppInfo_hasDefaultAssist_shouldReturnKey() { final String flattenKey = "com.android.settings/assist"; @@ -89,15 +102,15 @@ public class DefaultAssistPreferenceControllerTest { final String flattenKey = "com.android.settings/assist"; Settings.Secure.putString(null, Settings.Secure.ASSISTANT, flattenKey); when(mContext.getPackageManager()).thenReturn(mPackageManager); - DefaultAssistPreferenceController controller = - spy(new DefaultAssistPreferenceController(mContext)); + DefaultAssistPreferenceController controller = spy( + new DefaultAssistPreferenceController(mContext, TEST_KEY, true /* showSetting */)); final ResolveInfo resolveInfo = new ResolveInfo(); resolveInfo.activityInfo = new ActivityInfo(); resolveInfo.activityInfo.name = "assist"; resolveInfo.activityInfo.applicationInfo = new ApplicationInfo(); resolveInfo.activityInfo.applicationInfo.packageName = "com.android.settings"; when(mPackageManager.resolveActivityAsUser(any(Intent.class), anyInt(), anyInt())) - .thenReturn(resolveInfo); + .thenReturn(resolveInfo); when(mContext.getSystemService(Context.SEARCH_SERVICE)).thenReturn(mSearchManager); when(mSearchManager.getAssistIntent(anyBoolean())).thenReturn(mock(Intent.class)); final ServiceInfo serviceInfo = new ServiceInfo(); @@ -107,9 +120,21 @@ public class DefaultAssistPreferenceControllerTest { services.add(resolveInfo); when(mPackageManager.queryIntentServices(any(Intent.class), anyInt())).thenReturn(services); doReturn(null).when(controller).getAssistSettingsActivity( - ComponentName.unflattenFromString(flattenKey), resolveInfo, mPackageManager); + ComponentName.unflattenFromString(flattenKey), resolveInfo, mPackageManager); controller.getSettingIntent(null); // should not crash } + + @Test + public void getSettingIntent_doNotShowSetting_shouldNotTryToGetSettingIntent() { + final AssistUtils assistUtils = mock(AssistUtils.class); + final DefaultAssistPreferenceController controller = new DefaultAssistPreferenceController( + mContext, TEST_KEY, false /* showSetting */); + ReflectionHelpers.setField(controller, "mAssistUtils", assistUtils); + + controller.getSettingIntent(null); + + verifyZeroInteractions(assistUtils); + } } diff --git a/tests/robotests/src/com/android/settings/applications/defaultapps/DefaultHomePreferenceControllerTest.java b/tests/robotests/src/com/android/settings/applications/defaultapps/DefaultHomePreferenceControllerTest.java index d7e5192b87..22b30bda3b 100644 --- a/tests/robotests/src/com/android/settings/applications/defaultapps/DefaultHomePreferenceControllerTest.java +++ b/tests/robotests/src/com/android/settings/applications/defaultapps/DefaultHomePreferenceControllerTest.java @@ -17,14 +17,22 @@ package com.android.settings.applications.defaultapps; +import static com.google.common.truth.Truth.assertThat; +import static org.mockito.Matchers.anyList; +import static org.mockito.Mockito.atLeastOnce; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.spy; +import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.when; + import android.content.ComponentName; import android.content.Context; import android.os.UserManager; import android.support.v7.preference.Preference; -import com.android.settings.testutils.SettingsRobolectricTestRunner; import com.android.settings.TestConfig; import com.android.settings.applications.PackageManagerWrapper; +import com.android.settings.testutils.SettingsRobolectricTestRunner; import org.junit.Before; import org.junit.Test; @@ -35,14 +43,6 @@ import org.mockito.MockitoAnnotations; import org.robolectric.annotation.Config; import org.robolectric.util.ReflectionHelpers; -import static com.google.common.truth.Truth.assertThat; -import static org.mockito.Matchers.anyList; -import static org.mockito.Mockito.doReturn; -import static org.mockito.Mockito.mock; -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 DefaultHomePreferenceControllerTest { @@ -79,11 +79,10 @@ public class DefaultHomePreferenceControllerTest { @Test public void updateState_noDefaultApp_shouldAskPackageManagerForOnlyApp() { - doReturn(null).when(mController).getDefaultAppInfo(); - + when(mPackageManager.getHomeActivities(anyList())).thenReturn(null); mController.updateState(mock(Preference.class)); - verify(mPackageManager).getHomeActivities(anyList()); + verify(mPackageManager, atLeastOnce()).getHomeActivities(anyList()); } @Test diff --git a/tests/robotests/src/com/android/settings/applications/defaultapps/DefaultPaymentSettingsPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/applications/defaultapps/DefaultPaymentSettingsPreferenceControllerTest.java new file mode 100644 index 0000000000..6a73269a91 --- /dev/null +++ b/tests/robotests/src/com/android/settings/applications/defaultapps/DefaultPaymentSettingsPreferenceControllerTest.java @@ -0,0 +1,105 @@ +/* + * 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.applications.defaultapps; + +import static com.google.common.truth.Truth.assertThat; +import static org.mockito.Matchers.anyString; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.when; + +import android.content.Context; +import android.content.pm.PackageManager; +import android.nfc.NfcAdapter; +import android.os.UserManager; +import android.support.v7.preference.Preference; + +import com.android.settings.TestConfig; +import com.android.settings.nfc.PaymentBackend; +import com.android.settings.testutils.SettingsRobolectricTestRunner; + +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.mockito.Mock; +import org.mockito.MockitoAnnotations; +import org.robolectric.RuntimeEnvironment; +import org.robolectric.annotation.Config; +import org.robolectric.util.ReflectionHelpers; + +@RunWith(SettingsRobolectricTestRunner.class) +@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION) +public class DefaultPaymentSettingsPreferenceControllerTest { + + @Mock + private NfcAdapter mNfcAdapter; + @Mock + private Context mContext; + @Mock + private UserManager mUserManager; + @Mock + private PackageManager mPackageManager; + @Mock + private PaymentBackend mPaymentBackend; + + private DefaultPaymentSettingsPreferenceController mController; + private Preference mPreference; + + @Before + public void setUp() { + MockitoAnnotations.initMocks(this); + + when(mContext.getApplicationContext()).thenReturn(mContext); + when(mContext.getPackageManager()).thenReturn(mPackageManager); + when(mContext.getSystemService(Context.USER_SERVICE)).thenReturn(mUserManager); + mController = new DefaultPaymentSettingsPreferenceController(mContext); + ReflectionHelpers.setField(mController, "mNfcAdapter", mNfcAdapter); + + mPreference = new Preference(RuntimeEnvironment.application); + } + + @Test + public void isAvailable_hasNfc_shouldReturnTrue() { + when(mPackageManager.hasSystemFeature(anyString())).thenReturn(true); + when(mUserManager.isAdminUser()).thenReturn(true); + when(mNfcAdapter.isEnabled()).thenReturn(true); + + assertThat(mController.isAvailable()).isTrue(); + } + + @Test + public void isAvailable_noNfcAdapter_shouldReturnFalse() { + when(mPackageManager.hasSystemFeature(anyString())).thenReturn(true); + when(mUserManager.isAdminUser()).thenReturn(true); + ReflectionHelpers.setField(mController, "mNfcAdapter", null); + + assertThat(mController.isAvailable()).isFalse(); + } + + @Test + public void updateState_shouldSetSummaryToDefaultPaymentApp() { + final PaymentBackend.PaymentAppInfo defaultApp = mock(PaymentBackend.PaymentAppInfo.class); + defaultApp.label = "test_payment_app"; + when(mPaymentBackend.getDefaultApp()).thenReturn(defaultApp); + ReflectionHelpers.setField(mController, "mPaymentBackend", mPaymentBackend); + + mController.updateState(mPreference); + + verify(mPaymentBackend).refresh(); + assertThat(mPreference.getSummary()).isEqualTo(defaultApp.label); + } +} -- 2.11.0