<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
- <intent-filter android:priority="10">
- <action android:name="com.android.settings.action.SETTINGS" />
- </intent-filter>
- <meta-data android:name="com.android.settings.category"
- android:value="com.android.settings.category.ia.apps.default" />
<meta-data android:name="com.android.settings.FRAGMENT_CLASS"
android:value="com.android.settings.nfc.PaymentSettings" />
<meta-data android:name="com.android.settings.PRIMARY_PROFILE_CONTROLLED"
<meta-data android:name="com.android.settings.category"
android:value="com.android.settings.category.ia.apps"/>
<meta-data android:name="com.android.settings.FRAGMENT_CLASS"
- android:value="com.android.settings.applications.AdvancedAppSettings" />
+ android:value="com.android.settings.applications.DefaultAppSettings" />
<meta-data android:name="com.android.settings.summary"
android:resource="@string/summary_empty"/>
<meta-data android:name="com.android.settings.PRIMARY_PROFILE_CONTROLLED"
<Preference
android:key="assist_and_voice_input"
android:title="@string/assist_and_voice_input_title"
- android:fragment="com.android.settings.applications.assist.ManageAssist"
- android:order="-20"/>
+ android:fragment="com.android.settings.applications.assist.ManageAssist" />
<Preference
android:key="default_browser"
android:title="@string/default_browser_title"
- android:fragment="com.android.settings.applications.defaultapps.DefaultBrowserPicker"
- android:order="-19">
- <extra android:name="for_work" android:value="false"/>
+ android:fragment="com.android.settings.applications.defaultapps.DefaultBrowserPicker">
+ <extra android:name="for_work" android:value="false" />
</Preference>
<Preference
android:key="default_home"
android:title="@string/home_app"
android:fragment="com.android.settings.applications.defaultapps.DefaultHomePicker"
- settings:keywords="@string/keywords_home"
- android:order="-18"/>
+ settings:keywords="@string/keywords_home" />
<Preference
android:key="default_phone_app"
android:title="@string/default_phone_title"
android:fragment="com.android.settings.applications.defaultapps.DefaultPhonePicker"
- settings:keywords="@string/keywords_default_phone_app"
- android:order="-17"/>
+ settings:keywords="@string/keywords_default_phone_app" />
<Preference
android:key="default_sms_app"
android:title="@string/sms_application_title"
android:fragment="com.android.settings.applications.defaultapps.DefaultSmsPicker"
- settings:keywords="@string/keywords_more_default_sms_app"
- android:order="-16"/>
+ settings:keywords="@string/keywords_more_default_sms_app" />
+
+ <Preference
+ android:key="default_payment_app"
+ android:title="@string/nfc_payment_settings_title"
+ android:summary="@string/summary_placeholder"
+ android:fragment="com.android.settings.nfc.PaymentSettings" />
<Preference
android:key="default_emergency_app"
android:title="@string/default_emergency_app"
- settings:keywords="@string/keywords_emergency_app"
- android:order="-15"/>
+ settings:keywords="@string/keywords_emergency_app" />
<!--
<Preference
android:key="default_notification_asst_app"
android:title="@string/default_notification_assistant"
android:fragment="com.android.settings.applications.defaultapps.DefaultNotificationAssistantPicker"
- android:order="-13"/>
+ />
-->
<Preference
android:key="domain_urls"
android:title="@string/domain_urls_title"
- android:fragment="com.android.settings.applications.ManageDomainUrls"/>
+ android:fragment="com.android.settings.applications.ManageDomainUrls" />
<com.android.settings.WorkOnlyCategory
android:key="work_defaults"
android:key="work_default_browser"
android:title="@string/default_browser_title"
android:fragment="com.android.settings.applications.defaultapps.DefaultBrowserPicker">
- <extra android:name="for_work" android:value="true"/>
+ <extra android:name="for_work" android:value="true" />
</Preference>
<Preference
android:title="@string/default_phone_title"
android:fragment="com.android.settings.applications.defaultapps.DefaultPhonePicker"
settings:keywords="@string/keywords_default_phone_app">
- <extra android:name="for_work" android:value="true"/>
+ <extra android:name="for_work" android:value="true" />
</Preference>
</com.android.settings.WorkOnlyCategory>
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()),
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;
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;
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";
private static List<AbstractPreferenceController> buildPreferenceControllers(Context context) {
final List<AbstractPreferenceController> 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));
controllers.add(new DefaultSmsPreferenceController(context));
controllers.add(new DefaultEmergencyPreferenceController(context));
controllers.add(new DefaultHomePreferenceController(context));
+ controllers.add(new DefaultPaymentSettingsPreferenceController(context));
return controllers;
}
}
@Override
- public List<AbstractPreferenceController> getPreferenceControllers(Context context) {
+ public List<AbstractPreferenceController> getPreferenceControllers(
+ Context context) {
return buildPreferenceControllers(context);
}
};
@Override
public SummaryLoader.SummaryProvider createSummaryProvider(Activity activity,
SummaryLoader summaryLoader) {
- return new AdvancedAppSettings.SummaryProvider(activity, summaryLoader);
+ return new DefaultAppSettings.SummaryProvider(activity, summaryLoader);
}
};
}
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));
}
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;
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;
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;
@Override
public String getPreferenceKey() {
- return KEY_DEFAULT_ASSIST;
+ return mPrefKey;
}
@Override
private static List<AbstractPreferenceController> buildPreferenceControllers(Context context,
Lifecycle lifecycle) {
final List<AbstractPreferenceController> 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));
return controllers;
}
-
public static final Indexable.SearchIndexProvider SEARCH_INDEX_DATA_PROVIDER =
new BaseSearchIndexProvider() {
@Override
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;
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;
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);
}
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;
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;
return getOnlyAppLabel();
}
+ @Override
+ public Drawable getDefaultAppIcon() {
+ if (!isAvailable()) {
+ return null;
+ }
+ final DefaultAppInfo defaultApp = getDefaultAppInfo();
+ if (defaultApp != null) {
+ return defaultApp.loadIcon();
+ }
+ return getOnlyAppIcon();
+ }
+
private List<ResolveInfo> getCandidates() {
return mPackageManager.queryIntentActivitiesAsUser(BROWSE_PROBE, PackageManager.MATCH_ALL,
mUserId);
return null;
}
+ private Drawable getOnlyAppIcon() {
+ final List<ResolveInfo> 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
*/
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;
}
@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<ResolveInfo> 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<ResolveInfo> homeActivities = new ArrayList<>();
final List<ActivityInfo> appLabels = new ArrayList<>();
appLabels.add(info);
}
return appLabels.size() == 1
- ? appLabels.get(0).loadLabel(mPackageManager.getPackageManager()).toString()
+ ? appLabels.get(0)
: null;
}
--- /dev/null
+/*
+ * 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";
+ }
+}
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;
DrawOverlayDetails.class.getName(),
WriteSettingsDetails.class.getName(),
ExternalSourcesDetails.class.getName(),
- AdvancedAppSettings.class.getName(),
+ DefaultAppSettings.class.getName(),
WallpaperTypeSettings.class.getName(),
VrListenerSettings.class.getName(),
PictureInPictureSettings.class.getName(),
};
public static final String[] SETTINGS_FOR_RESTRICTED = {
- // New IA
// Home page
Settings.NetworkDashboardActivity.class.getName(),
Settings.ConnectedDeviceDashboardActivity.class.getName(),
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;
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);
}
public static class PaymentAppInfo {
- CharSequence label;
+ public CharSequence label;
CharSequence description;
Drawable banner;
boolean isDefault;
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;
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;
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
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;
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;
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;
@XmlRes
public static final int NO_DATA_RES_ID = 0;
- @VisibleForTesting(otherwise = VisibleForTesting.PRIVATE)
+ @VisibleForTesting
static final HashMap<String, SearchIndexableResource> sResMap = new HashMap<>();
@VisibleForTesting
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);
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,
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 {
private static final String WEBVIEW_APP_KEY = "select_webview_provider";
- private final Context mContext;
private final WebViewUpdateServiceWrapper mWebViewUpdateServiceWrapper;
private Preference mPreference;
public WebViewAppPreferenceController(Context context,
WebViewUpdateServiceWrapper webviewUpdateServiceWrapper) {
super(context);
- mContext = context;
mWebViewUpdateServiceWrapper = webviewUpdateServiceWrapper;
}
* Test for Advanced App preferences.
*/
@SmallTest
-public class AdvancedAppSettingsTest extends InstrumentationTestCase {
+public class DefaultAppSettingsTest extends InstrumentationTestCase {
private UiDevice mDevice;
private Context mTargetContext;
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;
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);
}
@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 =
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))
.thenReturn(mock(TelephonyManager.class));
when(mockContext.getPackageManager())
.thenReturn(mock(PackageManager.class));
- final List<String> niks = AdvancedAppSettings.SEARCH_INDEX_DATA_PROVIDER
+ final List<String> niks = DefaultAppSettings.SEARCH_INDEX_DATA_PROVIDER
.getNonIndexableKeys(mockContext);
- final int xmlId = (new AdvancedAppSettings()).getPreferenceScreenResId();
+ final int xmlId = (new DefaultAppSettings()).getPreferenceScreenResId();
final List<String> keys = XmlTestUtils.getKeysFromPreferenceXml(context, xmlId);
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;
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
@Before
public void setUp() {
MockitoAnnotations.initMocks(this);
- mController = new DefaultAssistPreferenceController(mContext);
+ mController = new DefaultAssistPreferenceController(mContext, TEST_KEY,
+ true /* showSetting */);
}
@Test
}
@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";
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();
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);
+ }
}
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;
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 {
@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
--- /dev/null
+/*
+ * 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);
+ }
+}