Merge "Check for permission when displaying AutofilLServices." into oc-dev

This commit is contained in:
TreeHugger Robot
2017-04-28 02:50:03 +00:00
committed by Android (Google) Code Review

View File

@@ -16,6 +16,7 @@
package com.android.settings.applications.defaultapps; package com.android.settings.applications.defaultapps;
import android.Manifest;
import android.app.Activity; import android.app.Activity;
import android.content.ComponentName; import android.content.ComponentName;
import android.content.Context; import android.content.Context;
@@ -30,6 +31,7 @@ import android.service.autofill.AutofillService;
import android.service.autofill.AutofillServiceInfo; import android.service.autofill.AutofillServiceInfo;
import android.text.Html; import android.text.Html;
import android.text.TextUtils; import android.text.TextUtils;
import android.util.Log;
import com.android.internal.logging.nano.MetricsProto; import com.android.internal.logging.nano.MetricsProto;
import com.android.settings.R; import com.android.settings.R;
@@ -40,6 +42,8 @@ import java.util.List;
public class DefaultAutofillPicker extends DefaultAppPickerFragment { public class DefaultAutofillPicker extends DefaultAppPickerFragment {
private static final String TAG = "DefaultAutofillPicker";
static final String SETTING = Settings.Secure.AUTOFILL_SERVICE; static final String SETTING = Settings.Secure.AUTOFILL_SERVICE;
static final Intent AUTOFILL_PROBE = new Intent(AutofillService.SERVICE_INTERFACE); static final Intent AUTOFILL_PROBE = new Intent(AutofillService.SERVICE_INTERFACE);
@@ -89,8 +93,13 @@ public class DefaultAutofillPicker extends DefaultAppPickerFragment {
final List<ResolveInfo> resolveInfos = mPm.getPackageManager() final List<ResolveInfo> resolveInfos = mPm.getPackageManager()
.queryIntentServices(AUTOFILL_PROBE, PackageManager.GET_META_DATA); .queryIntentServices(AUTOFILL_PROBE, PackageManager.GET_META_DATA);
for (ResolveInfo info : resolveInfos) { for (ResolveInfo info : resolveInfos) {
candidates.add(new DefaultAppInfo(mPm, mUserId, new ComponentName( final String permission = info.serviceInfo.permission;
info.serviceInfo.packageName, info.serviceInfo.name))); // TODO(b/37563972): remove BIND_AUTOFILL once clients use BIND_AUTOFILL_SERVICE
if (Manifest.permission.BIND_AUTOFILL_SERVICE.equals(permission)
|| Manifest.permission.BIND_AUTOFILL.equals(permission)) {
candidates.add(new DefaultAppInfo(mPm, mUserId, new ComponentName(
info.serviceInfo.packageName, info.serviceInfo.name)));
}
} }
return candidates; return candidates;
} }
@@ -157,9 +166,15 @@ public class DefaultAutofillPicker extends DefaultAppPickerFragment {
final String flattenKey = new ComponentName( final String flattenKey = new ComponentName(
serviceInfo.packageName, serviceInfo.name).flattenToString(); serviceInfo.packageName, serviceInfo.name).flattenToString();
if (TextUtils.equals(mSelectedKey, flattenKey)) { if (TextUtils.equals(mSelectedKey, flattenKey)) {
final String settingsActivity = new AutofillServiceInfo( final String settingsActivity;
mPackageManager, serviceInfo) try {
.getSettingsActivity(); settingsActivity = new AutofillServiceInfo(mPackageManager, serviceInfo)
.getSettingsActivity();
} catch (SecurityException e) {
// Service does not declare the proper permission, ignore it.
Log.w(TAG, "Error getting info for " + serviceInfo + ": " + e);
return null;
}
if (TextUtils.isEmpty(settingsActivity)) { if (TextUtils.isEmpty(settingsActivity)) {
return null; return null;
} }