Merge "Add metrics (and moar logging) for when a service disables itself." into oc-mr1-dev

This commit is contained in:
TreeHugger Robot
2017-09-22 21:04:02 +00:00
committed by Android (Google) Code Review
3 changed files with 36 additions and 5 deletions

View File

@@ -29,11 +29,12 @@ import android.os.RemoteException;
import android.util.AttributeSet; import android.util.AttributeSet;
import android.util.Log; import android.util.Log;
import android.util.Xml; import android.util.Xml;
import org.xmlpull.v1.XmlPullParser;
import org.xmlpull.v1.XmlPullParserException;
import com.android.internal.R; import com.android.internal.R;
import org.xmlpull.v1.XmlPullParser;
import org.xmlpull.v1.XmlPullParserException;
import java.io.IOException; import java.io.IOException;
/** /**
@@ -147,4 +148,9 @@ public final class AutofillServiceInfo {
public String getSettingsActivity() { public String getSettingsActivity() {
return mSettingsActivity; return mSettingsActivity;
} }
@Override
public String toString() {
return mServiceInfo == null ? "null" : mServiceInfo.toString();
}
} }

View File

@@ -4527,6 +4527,11 @@ message MetricsEvent {
// Type TYPE_FAILURE: An invalid opperation was reported by the app's AutofillManager // Type TYPE_FAILURE: An invalid opperation was reported by the app's AutofillManager
AUTOFILL_PENDING_SAVE_UI_OPERATION = 1134; AUTOFILL_PENDING_SAVE_UI_OPERATION = 1134;
// Autofill service called API that disables itself
// Package: Package of the autofill service
// OS: O MR
AUTOFILL_SERVICE_DISABLED_SELF = 1135;
// ---- End O-MR1 Constants, all O-MR1 constants go above this line ---- // ---- End O-MR1 Constants, all O-MR1 constants go above this line ----
// Add new aosp constants above this line. // Add new aosp constants above this line.

View File

@@ -35,6 +35,7 @@ import android.content.pm.PackageManager;
import android.content.pm.ServiceInfo; import android.content.pm.ServiceInfo;
import android.graphics.Rect; import android.graphics.Rect;
import android.graphics.drawable.Drawable; import android.graphics.drawable.Drawable;
import android.metrics.LogMaker;
import android.os.AsyncTask; import android.os.AsyncTask;
import android.os.Binder; import android.os.Binder;
import android.os.Bundle; import android.os.Bundle;
@@ -63,6 +64,8 @@ import android.view.autofill.IAutoFillManagerClient;
import com.android.internal.R; import com.android.internal.R;
import com.android.internal.annotations.GuardedBy; import com.android.internal.annotations.GuardedBy;
import com.android.internal.logging.MetricsLogger;
import com.android.internal.logging.nano.MetricsProto.MetricsEvent;
import com.android.internal.os.HandlerCaller; import com.android.internal.os.HandlerCaller;
import com.android.server.autofill.ui.AutoFillUI; import com.android.server.autofill.ui.AutoFillUI;
@@ -89,6 +92,7 @@ final class AutofillManagerServiceImpl {
private final Context mContext; private final Context mContext;
private final Object mLock; private final Object mLock;
private final AutoFillUI mUi; private final AutoFillUI mUi;
private final MetricsLogger mMetricsLogger = new MetricsLogger();
private RemoteCallbackList<IAutoFillManagerClient> mClients; private RemoteCallbackList<IAutoFillManagerClient> mClients;
private AutofillServiceInfo mInfo; private AutofillServiceInfo mInfo;
@@ -218,8 +222,10 @@ final class AutofillManagerServiceImpl {
if (serviceInfo != null) { if (serviceInfo != null) {
mInfo = new AutofillServiceInfo(mContext.getPackageManager(), mInfo = new AutofillServiceInfo(mContext.getPackageManager(),
serviceComponent, mUserId); serviceComponent, mUserId);
if (sDebug) Slog.d(TAG, "Set component for user " + mUserId + " as " + mInfo);
} else { } else {
mInfo = null; mInfo = null;
if (sDebug) Slog.d(TAG, "Reset component for user " + mUserId);
} }
final boolean isEnabled = isEnabled(); final boolean isEnabled = isEnabled();
if (wasEnabled != isEnabled) { if (wasEnabled != isEnabled) {
@@ -345,17 +351,31 @@ final class AutofillManagerServiceImpl {
} }
void disableOwnedAutofillServicesLocked(int uid) { void disableOwnedAutofillServicesLocked(int uid) {
if (mInfo == null || mInfo.getServiceInfo().applicationInfo.uid != uid) { Slog.i(TAG, "disableOwnedServices(" + uid + "): " + mInfo);
if (mInfo == null) return;
final ServiceInfo serviceInfo = mInfo.getServiceInfo();
if (serviceInfo.applicationInfo.uid != uid) {
Slog.w(TAG, "disableOwnedServices(): ignored when called by UID " + uid
+ " instead of " + serviceInfo.applicationInfo.uid
+ " for service " + mInfo);
return; return;
} }
final long identity = Binder.clearCallingIdentity(); final long identity = Binder.clearCallingIdentity();
try { try {
final String autoFillService = getComponentNameFromSettings(); final String autoFillService = getComponentNameFromSettings();
if (mInfo.getServiceInfo().getComponentName().equals( final ComponentName componentName = serviceInfo.getComponentName();
ComponentName.unflattenFromString(autoFillService))) { if (componentName.equals(ComponentName.unflattenFromString(autoFillService))) {
mMetricsLogger.action(MetricsEvent.AUTOFILL_SERVICE_DISABLED_SELF,
componentName.getPackageName());
Settings.Secure.putStringForUser(mContext.getContentResolver(), Settings.Secure.putStringForUser(mContext.getContentResolver(),
Settings.Secure.AUTOFILL_SERVICE, null, mUserId); Settings.Secure.AUTOFILL_SERVICE, null, mUserId);
destroySessionsLocked(); destroySessionsLocked();
} else {
Slog.w(TAG, "disableOwnedServices(): ignored because current service ("
+ serviceInfo + ") does not match Settings (" + autoFillService + ")");
} }
} finally { } finally {
Binder.restoreCallingIdentity(identity); Binder.restoreCallingIdentity(identity);