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
This commit is contained in:
Felipe Leme
2017-03-07 08:58:15 -08:00
parent 9a8bae0838
commit 4fa4a2e3f5
6 changed files with 53 additions and 26 deletions

View File

@@ -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"/>

View File

@@ -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;
}

View File

@@ -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<DefaultAppInfo> getCandidates() {
final List<DefaultAppInfo> candidates = new ArrayList<>();
final List<ResolveInfo> 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<ResolveInfo> 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<ResolveInfo> 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<ResolveInfo> 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)) {

View File

@@ -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));

View File

@@ -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);

View File

@@ -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);
}
}