From 4fa4a2e3f5383dfa0f82470188ba2ea12601f689 Mon Sep 17 00:00:00 2001 From: Felipe Leme Date: Tue, 7 Mar 2017 08:58:15 -0800 Subject: [PATCH] Replaced auto-fill by autofill to keep it consistent with API style. To keep backward compatibility, it looks for the new service (AutofillService), then falls back to the old one (AutoFillService) if not found. Bug: 35956626 Bug: 36024626 Test: manual verification with a custom service Test: RunSettingsRoboTests passes Change-Id: I64112ac5d796e94866e632ec8ea79a3fb13e3d9b --- res/xml/app_default_settings.xml | 2 +- .../applications/AdvancedAppSettings.java | 4 +- ...Picker.java => DefaultAutofillPicker.java} | 47 +++++++++++++++---- ... DefaultAutofillPreferenceController.java} | 10 ++-- ...st.java => DefaultAutofillPickerTest.java} | 6 +-- ...aultAutofillPreferenceControllerTest.java} | 10 ++-- 6 files changed, 53 insertions(+), 26 deletions(-) rename src/com/android/settings/applications/defaultapps/{DefaultAutoFillPicker.java => DefaultAutofillPicker.java} (62%) rename src/com/android/settings/applications/defaultapps/{DefaultAutoFillPreferenceController.java => DefaultAutofillPreferenceController.java} (85%) rename tests/robotests/src/com/android/settings/applications/defaultapps/{DefaultAutoFillPickerTest.java => DefaultAutofillPickerTest.java} (95%) rename tests/robotests/src/com/android/settings/applications/defaultapps/{DefaultAutoFillPreferenceControllerTest.java => DefaultAutofillPreferenceControllerTest.java} (90%) diff --git a/res/xml/app_default_settings.xml b/res/xml/app_default_settings.xml index a382bc9c8da..e96c070fb97 100644 --- a/res/xml/app_default_settings.xml +++ b/res/xml/app_default_settings.xml @@ -67,7 +67,7 @@ android:key="default_autofill" android:title="@string/autofill_app" android:summary="@string/app_list_preference_none" - android:fragment="com.android.settings.applications.defaultapps.DefaultAutoFillPicker" + android:fragment="com.android.settings.applications.defaultapps.DefaultAutofillPicker" settings:keywords="@string/autofill_keywords" android:order="-14"/> diff --git a/src/com/android/settings/applications/AdvancedAppSettings.java b/src/com/android/settings/applications/AdvancedAppSettings.java index c68e19f9141..b8ebeb42317 100644 --- a/src/com/android/settings/applications/AdvancedAppSettings.java +++ b/src/com/android/settings/applications/AdvancedAppSettings.java @@ -20,7 +20,7 @@ import android.provider.SearchIndexableResource; import com.android.internal.logging.nano.MetricsProto.MetricsEvent; import com.android.settings.R; -import com.android.settings.applications.defaultapps.DefaultAutoFillPreferenceController; +import com.android.settings.applications.defaultapps.DefaultAutofillPreferenceController; import com.android.settings.applications.defaultapps.DefaultBrowserPreferenceController; import com.android.settings.applications.defaultapps.DefaultEmergencyPreferenceController; import com.android.settings.applications.defaultapps.DefaultHomePreferenceController; @@ -61,7 +61,7 @@ public class AdvancedAppSettings extends DashboardFragment { controllers.add(new DefaultSmsPreferenceController(context)); controllers.add(new DefaultEmergencyPreferenceController(context)); controllers.add(new DefaultHomePreferenceController(context)); - controllers.add(new DefaultAutoFillPreferenceController(context)); + controllers.add(new DefaultAutofillPreferenceController(context)); return controllers; } diff --git a/src/com/android/settings/applications/defaultapps/DefaultAutoFillPicker.java b/src/com/android/settings/applications/defaultapps/DefaultAutofillPicker.java similarity index 62% rename from src/com/android/settings/applications/defaultapps/DefaultAutoFillPicker.java rename to src/com/android/settings/applications/defaultapps/DefaultAutofillPicker.java index b8190cdbfa2..e3a7a2b1c77 100644 --- a/src/com/android/settings/applications/defaultapps/DefaultAutoFillPicker.java +++ b/src/com/android/settings/applications/defaultapps/DefaultAutofillPicker.java @@ -23,7 +23,8 @@ import android.content.pm.ResolveInfo; import android.content.pm.ServiceInfo; import android.provider.Settings; import android.service.autofill.AutoFillService; -import android.service.autofill.AutoFillServiceInfo; +import android.service.autofill.AutofillService; +import android.service.autofill.AutofillServiceInfo; import android.text.TextUtils; import com.android.internal.logging.nano.MetricsProto; @@ -32,10 +33,12 @@ import com.android.settings.R; import java.util.ArrayList; import java.util.List; -public class DefaultAutoFillPicker extends DefaultAppPickerFragment { +public class DefaultAutofillPicker extends DefaultAppPickerFragment { - static final String SETTING = Settings.Secure.AUTO_FILL_SERVICE; - static final Intent AUTO_FILL_PROBE = new Intent(AutoFillService.SERVICE_INTERFACE); + static final String SETTING = Settings.Secure.AUTOFILL_SERVICE; + // TODO(b/35956626): remove once clients migrated + static final Intent OLD_AUTO_FILL_PROBE = new Intent(AutoFillService.OLD_SERVICE_INTERFACE); + static final Intent AUTOFILL_PROBE = new Intent(AutofillService.SERVICE_INTERFACE); @Override public int getMetricsCategory() { @@ -51,11 +54,17 @@ public class DefaultAutoFillPicker extends DefaultAppPickerFragment { protected List getCandidates() { final List candidates = new ArrayList<>(); final List resolveInfos = mPm.getPackageManager() - .queryIntentServices(AUTO_FILL_PROBE, PackageManager.GET_META_DATA); + .queryIntentServices(AUTOFILL_PROBE, PackageManager.GET_META_DATA); for (ResolveInfo info : resolveInfos) { candidates.add(new DefaultAppInfo(mUserId, new ComponentName( info.serviceInfo.packageName, info.serviceInfo.name))); } + final List oldResolveInfos = mPm.getPackageManager() + .queryIntentServices(OLD_AUTO_FILL_PROBE, PackageManager.GET_META_DATA); + for (ResolveInfo info : oldResolveInfos) { + candidates.add(new DefaultAppInfo(mUserId, new ComponentName( + info.serviceInfo.packageName, info.serviceInfo.name))); + } return candidates; } @@ -82,13 +91,12 @@ public class DefaultAutoFillPicker extends DefaultAppPickerFragment { /** * Provides Intent to setting activity for the specified auto-fill service. */ - static final class AutoFillSettingIntentProvider - implements SettingIntentProvider { + static final class AutofillSettingIntentProvider implements SettingIntentProvider { private final String mSelectedKey; private final PackageManager mPackageManager; - public AutoFillSettingIntentProvider(PackageManager packageManager, String key) { + public AutofillSettingIntentProvider(PackageManager packageManager, String key) { mSelectedKey = key; mPackageManager = packageManager; } @@ -96,14 +104,33 @@ public class DefaultAutoFillPicker extends DefaultAppPickerFragment { @Override public Intent getIntent() { final List resolveInfos = mPackageManager.queryIntentServices( - AUTO_FILL_PROBE, PackageManager.GET_META_DATA); + AUTOFILL_PROBE, PackageManager.GET_META_DATA); for (ResolveInfo resolveInfo : resolveInfos) { final ServiceInfo serviceInfo = resolveInfo.serviceInfo; final String flattenKey = new ComponentName( serviceInfo.packageName, serviceInfo.name).flattenToString(); if (TextUtils.equals(mSelectedKey, flattenKey)) { - final String settingsActivity = new AutoFillServiceInfo( + final String settingsActivity = new AutofillServiceInfo( + mPackageManager, serviceInfo) + .getSettingsActivity(); + if (TextUtils.isEmpty(settingsActivity)) { + return null; + } + return new Intent(Intent.ACTION_MAIN).setComponent( + new ComponentName(serviceInfo.packageName, settingsActivity)); + } + } + + final List oldResolveInfos = mPackageManager.queryIntentServices( + OLD_AUTO_FILL_PROBE, PackageManager.GET_META_DATA); + + for (ResolveInfo resolveInfo : oldResolveInfos) { + final ServiceInfo serviceInfo = resolveInfo.serviceInfo; + final String flattenKey = new ComponentName( + serviceInfo.packageName, serviceInfo.name).flattenToString(); + if (TextUtils.equals(mSelectedKey, flattenKey)) { + final String settingsActivity = new AutofillServiceInfo( mPackageManager, serviceInfo) .getSettingsActivity(); if (TextUtils.isEmpty(settingsActivity)) { diff --git a/src/com/android/settings/applications/defaultapps/DefaultAutoFillPreferenceController.java b/src/com/android/settings/applications/defaultapps/DefaultAutofillPreferenceController.java similarity index 85% rename from src/com/android/settings/applications/defaultapps/DefaultAutoFillPreferenceController.java rename to src/com/android/settings/applications/defaultapps/DefaultAutofillPreferenceController.java index b7f3b7711d7..c536dbb9103 100644 --- a/src/com/android/settings/applications/defaultapps/DefaultAutoFillPreferenceController.java +++ b/src/com/android/settings/applications/defaultapps/DefaultAutofillPreferenceController.java @@ -22,9 +22,9 @@ import android.content.Intent; import android.provider.Settings; import android.text.TextUtils; -public class DefaultAutoFillPreferenceController extends DefaultAppPreferenceController { +public class DefaultAutofillPreferenceController extends DefaultAppPreferenceController { - public DefaultAutoFillPreferenceController(Context context) { + public DefaultAutofillPreferenceController(Context context) { super(context); } @@ -43,8 +43,8 @@ public class DefaultAutoFillPreferenceController extends DefaultAppPreferenceCon if (info == null) { return null; } - final DefaultAutoFillPicker.AutoFillSettingIntentProvider intentProvider = - new DefaultAutoFillPicker.AutoFillSettingIntentProvider( + final DefaultAutofillPicker.AutofillSettingIntentProvider intentProvider = + new DefaultAutofillPicker.AutofillSettingIntentProvider( mPackageManager.getPackageManager(), info.getKey()); return intentProvider.getIntent(); } @@ -52,7 +52,7 @@ public class DefaultAutoFillPreferenceController extends DefaultAppPreferenceCon @Override protected DefaultAppInfo getDefaultAppInfo() { final String flattenComponent = Settings.Secure.getString(mContext.getContentResolver(), - DefaultAutoFillPicker.SETTING); + DefaultAutofillPicker.SETTING); if (!TextUtils.isEmpty(flattenComponent)) { DefaultAppInfo appInfo = new DefaultAppInfo( mUserId, ComponentName.unflattenFromString(flattenComponent)); diff --git a/tests/robotests/src/com/android/settings/applications/defaultapps/DefaultAutoFillPickerTest.java b/tests/robotests/src/com/android/settings/applications/defaultapps/DefaultAutofillPickerTest.java similarity index 95% rename from tests/robotests/src/com/android/settings/applications/defaultapps/DefaultAutoFillPickerTest.java rename to tests/robotests/src/com/android/settings/applications/defaultapps/DefaultAutofillPickerTest.java index 1ee18cf8346..1bd611b5c39 100644 --- a/tests/robotests/src/com/android/settings/applications/defaultapps/DefaultAutoFillPickerTest.java +++ b/tests/robotests/src/com/android/settings/applications/defaultapps/DefaultAutofillPickerTest.java @@ -46,7 +46,7 @@ import static org.mockito.Mockito.when; @RunWith(SettingsRobolectricTestRunner.class) @Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION) -public class DefaultAutoFillPickerTest { +public class DefaultAutofillPickerTest { private static final String TEST_APP_KEY = "123"; @@ -56,14 +56,14 @@ public class DefaultAutoFillPickerTest { private UserManager mUserManager; @Mock private PackageManagerWrapper mPackageManager; - private DefaultAutoFillPicker mPicker; + private DefaultAutofillPicker mPicker; @Before public void setUp() { MockitoAnnotations.initMocks(this); FakeFeatureFactory.setupForTest(mActivity); when(mActivity.getSystemService(Context.USER_SERVICE)).thenReturn(mUserManager); - mPicker = spy(new DefaultAutoFillPicker()); + mPicker = spy(new DefaultAutofillPicker()); mPicker.onAttach((Context) mActivity); ReflectionHelpers.setField(mPicker, "mPm", mPackageManager); diff --git a/tests/robotests/src/com/android/settings/applications/defaultapps/DefaultAutoFillPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/applications/defaultapps/DefaultAutofillPreferenceControllerTest.java similarity index 90% rename from tests/robotests/src/com/android/settings/applications/defaultapps/DefaultAutoFillPreferenceControllerTest.java rename to tests/robotests/src/com/android/settings/applications/defaultapps/DefaultAutofillPreferenceControllerTest.java index 1c373682cf8..7bcbcb09012 100644 --- a/tests/robotests/src/com/android/settings/applications/defaultapps/DefaultAutoFillPreferenceControllerTest.java +++ b/tests/robotests/src/com/android/settings/applications/defaultapps/DefaultAutofillPreferenceControllerTest.java @@ -45,7 +45,7 @@ import static org.mockito.Mockito.when; @RunWith(SettingsRobolectricTestRunner.class) @Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION) -public class DefaultAutoFillPreferenceControllerTest { +public class DefaultAutofillPreferenceControllerTest { @Mock private Context mContext; @@ -54,14 +54,14 @@ public class DefaultAutoFillPreferenceControllerTest { @Mock(answer = Answers.RETURNS_DEEP_STUBS) private PackageManagerWrapper mPackageManager; - private DefaultAutoFillPreferenceController mController; + private DefaultAutofillPreferenceController mController; @Before public void setUp() { MockitoAnnotations.initMocks(this); when(mContext.getSystemService(Context.USER_SERVICE)).thenReturn(mUserManager); - mController = spy(new DefaultAutoFillPreferenceController(mContext)); + mController = spy(new DefaultAutofillPreferenceController(mContext)); ReflectionHelpers.setField(mController, "mPackageManager", mPackageManager); } @@ -82,7 +82,7 @@ public class DefaultAutoFillPreferenceControllerTest { public void getDefaultAppInfo_shouldHaveSettingsProvider() { ReflectionHelpers.setField(mController, "mContext", RuntimeEnvironment.application); Settings.Secure.putString(RuntimeEnvironment.application.getContentResolver(), - DefaultAutoFillPicker.SETTING, "com.android.settings/SettingsActivity.class"); + DefaultAutofillPicker.SETTING, "com.android.settings/SettingsActivity.class"); final DefaultAppInfo info = mController.getDefaultAppInfo(); @@ -91,6 +91,6 @@ public class DefaultAutoFillPreferenceControllerTest { mController.getSettingIntent(info); verify(mPackageManager.getPackageManager()).queryIntentServices( - DefaultAutoFillPicker.AUTO_FILL_PROBE, PackageManager.GET_META_DATA); + DefaultAutofillPicker.AUTOFILL_PROBE, PackageManager.GET_META_DATA); } }