Loading services/autofill/java/com/android/server/autofill/AutofillManagerService.java +5 −0 Original line number Diff line number Diff line Loading @@ -306,6 +306,7 @@ public final class AutofillManagerService extends SystemService { * * @return service instance. */ @GuardedBy("mLock") @NonNull AutofillManagerServiceImpl getServiceForUserLocked(int userId) { final int resolvedUserId = ActivityManager.handleIncomingUser(Binder.getCallingPid(), Loading @@ -325,6 +326,7 @@ public final class AutofillManagerService extends SystemService { * * @return service instance or {@code null} if not already present */ @GuardedBy("mLock") @Nullable AutofillManagerServiceImpl peekServiceForUserLocked(int userId) { final int resolvedUserId = ActivityManager.handleIncomingUser(Binder.getCallingPid(), Loading Loading @@ -474,6 +476,7 @@ public final class AutofillManagerService extends SystemService { /** * Removes a cached service for a given user. */ @GuardedBy("mLock") private void removeCachedServiceLocked(int userId) { final AutofillManagerServiceImpl service = peekServiceForUserLocked(userId); if (service != null) { Loading @@ -485,6 +488,7 @@ public final class AutofillManagerService extends SystemService { /** * Updates a cached service for a given user. */ @GuardedBy("mLock") private void updateCachedServiceLocked(int userId) { updateCachedServiceLocked(userId, mDisabledUsers.get(userId)); } Loading @@ -492,6 +496,7 @@ public final class AutofillManagerService extends SystemService { /** * Updates a cached service for a given user. */ @GuardedBy("mLock") private void updateCachedServiceLocked(int userId, boolean disabled) { AutofillManagerServiceImpl service = getServiceForUserLocked(userId); if (service != null) { Loading services/autofill/java/com/android/server/autofill/AutofillManagerServiceImpl.java +26 −0 Original line number Diff line number Diff line Loading @@ -211,6 +211,7 @@ final class AutofillManagerServiceImpl { } } @GuardedBy("mLock") private int getServiceUidLocked() { if (mInfo == null) { Slog.w(TAG, "getServiceUidLocked(): no mInfo"); Loading Loading @@ -248,6 +249,7 @@ final class AutofillManagerServiceImpl { mContext.getContentResolver(), Settings.Secure.AUTOFILL_SERVICE, mUserId); } @GuardedBy("mLock") void updateLocked(boolean disabled) { final boolean wasEnabled = isEnabledLocked(); if (sVerbose) { Loading Loading @@ -300,6 +302,7 @@ final class AutofillManagerServiceImpl { } } @GuardedBy("mLock") boolean addClientLocked(IAutoFillManagerClient client) { if (mClients == null) { mClients = new RemoteCallbackList<>(); Loading @@ -308,12 +311,14 @@ final class AutofillManagerServiceImpl { return isEnabledLocked(); } @GuardedBy("mLock") void removeClientLocked(IAutoFillManagerClient client) { if (mClients != null) { mClients.unregister(client); } } @GuardedBy("mLock") void setAuthenticationResultLocked(Bundle data, int sessionId, int authenticationId, int uid) { if (!isEnabledLocked()) { return; Loading @@ -336,6 +341,7 @@ final class AutofillManagerServiceImpl { } } @GuardedBy("mLock") int startSessionLocked(@NonNull IBinder activityToken, int uid, @NonNull IBinder appCallbackToken, @NonNull AutofillId autofillId, @NonNull Rect virtualBounds, @Nullable AutofillValue value, boolean hasCallback, Loading Loading @@ -389,6 +395,7 @@ final class AutofillManagerServiceImpl { /** * Remove abandoned sessions if needed. */ @GuardedBy("mLock") private void pruneAbandonedSessionsLocked() { long now = System.currentTimeMillis(); if (mLastPrune < now - MAX_ABANDONED_SESSION_MILLIS) { Loading @@ -400,6 +407,7 @@ final class AutofillManagerServiceImpl { } } @GuardedBy("mLock") void finishSessionLocked(int sessionId, int uid) { if (!isEnabledLocked()) { return; Loading @@ -423,6 +431,7 @@ final class AutofillManagerServiceImpl { } } @GuardedBy("mLock") void cancelSessionLocked(int sessionId, int uid) { if (!isEnabledLocked()) { return; Loading @@ -436,6 +445,7 @@ final class AutofillManagerServiceImpl { session.removeSelfLocked(); } @GuardedBy("mLock") void disableOwnedAutofillServicesLocked(int uid) { Slog.i(TAG, "disableOwnedServices(" + uid + "): " + mInfo); if (mInfo == null) return; Loading Loading @@ -468,6 +478,7 @@ final class AutofillManagerServiceImpl { } } @GuardedBy("mLock") private Session createSessionByTokenLocked(@NonNull IBinder activityToken, int uid, @NonNull IBinder appCallbackToken, boolean hasCallback, @NonNull ComponentName componentName, int flags) { Loading Loading @@ -546,6 +557,7 @@ final class AutofillManagerServiceImpl { /** * Updates a session and returns whether it should be restarted. */ @GuardedBy("mLock") boolean updateSessionLocked(int sessionId, int uid, AutofillId autofillId, Rect virtualBounds, AutofillValue value, int action, int flags) { final Session session = mSessions.get(sessionId); Loading @@ -568,6 +580,7 @@ final class AutofillManagerServiceImpl { return false; } @GuardedBy("mLock") void removeSessionLocked(int sessionId) { mSessions.remove(sessionId); } Loading Loading @@ -603,6 +616,7 @@ final class AutofillManagerServiceImpl { } } @GuardedBy("mLock") void destroyLocked() { if (sVerbose) Slog.v(TAG, "destroyLocked()"); Loading Loading @@ -655,6 +669,7 @@ final class AutofillManagerServiceImpl { } } @GuardedBy("mLock") private boolean isValidEventLocked(String method, int sessionId) { if (mEventHistory == null) { Slog.w(TAG, method + ": not logging event because history is null"); Loading Loading @@ -726,6 +741,7 @@ final class AutofillManagerServiceImpl { /** * Updates the last fill response when an autofill context is committed. */ @GuardedBy("mLock") void logContextCommittedLocked(int sessionId, @Nullable Bundle clientState, @Nullable ArrayList<String> selectedDatasets, @Nullable ArraySet<String> ignoredDatasets, Loading @@ -739,6 +755,7 @@ final class AutofillManagerServiceImpl { manuallyFilledDatasetIds, null, null, appPackageName); } @GuardedBy("mLock") void logContextCommittedLocked(int sessionId, @Nullable Bundle clientState, @Nullable ArrayList<String> selectedDatasets, @Nullable ArraySet<String> ignoredDatasets, Loading Loading @@ -847,6 +864,7 @@ final class AutofillManagerServiceImpl { } } @GuardedBy("mLock") private boolean isCalledByServiceLocked(String methodName, int callingUid) { if (getServiceUidLocked() != callingUid) { Slog.w(TAG, methodName + "() called by UID " + callingUid Loading @@ -856,6 +874,7 @@ final class AutofillManagerServiceImpl { return true; } @GuardedBy("mLock") void dumpLocked(String prefix, PrintWriter pw) { final String prefix2 = prefix + " "; Loading Loading @@ -965,6 +984,7 @@ final class AutofillManagerServiceImpl { mFieldClassificationStrategy.dump(prefix2, pw); } @GuardedBy("mLock") void destroySessionsLocked() { if (mSessions.size() == 0) { mUi.destroyAll(null, null, false); Loading @@ -976,6 +996,7 @@ final class AutofillManagerServiceImpl { } // TODO(b/64940307): remove this method if SaveUI is refactored to be attached on activities @GuardedBy("mLock") void destroyFinishedSessionsLocked() { final int sessionCount = mSessions.size(); for (int i = sessionCount - 1; i >= 0; i--) { Loading @@ -987,6 +1008,7 @@ final class AutofillManagerServiceImpl { } } @GuardedBy("mLock") void listSessionsLocked(ArrayList<String> output) { final int numSessions = mSessions.size(); for (int i = 0; i < numSessions; i++) { Loading @@ -995,6 +1017,7 @@ final class AutofillManagerServiceImpl { } } @GuardedBy("mLock") boolean isCompatibilityModeRequestedLocked(@NonNull String packageName, long versionCode) { if (mInfo == null || !mInfo.isCompatibilityModeRequested(packageName, versionCode)) { Loading Loading @@ -1060,6 +1083,7 @@ final class AutofillManagerServiceImpl { } } @GuardedBy("mLock") private boolean isClientSessionDestroyedLocked(IAutoFillManagerClient client) { final int sessionCount = mSessions.size(); for (int i = 0; i < sessionCount; i++) { Loading @@ -1071,6 +1095,7 @@ final class AutofillManagerServiceImpl { return true; } @GuardedBy("mLock") boolean isEnabledLocked() { return mSetupComplete && mInfo != null && !mDisabled; } Loading Loading @@ -1123,6 +1148,7 @@ final class AutofillManagerServiceImpl { /** * Checks if autofill is disabled by service to the given activity. */ @GuardedBy("mLock") private boolean isAutofillDisabledLocked(@NonNull ComponentName componentName) { // Check activities first. long elapsedTime = 0; Loading services/autofill/java/com/android/server/autofill/RemoteFillService.java +1 −0 Original line number Diff line number Diff line Loading @@ -475,6 +475,7 @@ final class RemoteFillService implements DeathRecipient { return true; } @GuardedBy("mLock") protected boolean isCancelledLocked() { return mCancelled; } Loading services/autofill/java/com/android/server/autofill/Session.java +35 −0 Original line number Diff line number Diff line Loading @@ -300,6 +300,7 @@ final class Session implements RemoteFillService.FillServiceCallbacks, ViewState /** * Returns the ids of all entries in {@link #mViewStates} in the same order. */ @GuardedBy("mLock") private AutofillId[] getIdsOfAllViewStatesLocked() { final int numViewState = mViewStates.size(); final AutofillId[] ids = new AutofillId[numViewState]; Loading Loading @@ -346,6 +347,7 @@ final class Session implements RemoteFillService.FillServiceCallbacks, ViewState * <p>Gets the value of a field, using either the {@code viewStates} or the {@code mContexts}, * or {@code null} when not found on either of them. */ @GuardedBy("mLock") private AutofillValue findValueLocked(@NonNull AutofillId id) { final ViewState state = mViewStates.get(id); if (state == null) { Loading @@ -369,6 +371,7 @@ final class Session implements RemoteFillService.FillServiceCallbacks, ViewState * @param fillContext The context to be filled * @param flags The flags that started the session */ @GuardedBy("mLock") private void fillContextWithAllowedValuesLocked(@NonNull FillContext fillContext, int flags) { final ViewNode[] nodes = fillContext .findViewNodesByAutofillIds(getIdsOfAllViewStatesLocked()); Loading Loading @@ -409,6 +412,7 @@ final class Session implements RemoteFillService.FillServiceCallbacks, ViewState /** * Cancels the last request sent to the {@link #mRemoteFillService}. */ @GuardedBy("mLock") private void cancelCurrentRequestLocked() { final int canceledRequest = mRemoteFillService.cancelCurrentRequest(); Loading @@ -430,6 +434,7 @@ final class Session implements RemoteFillService.FillServiceCallbacks, ViewState /** * Reads a new structure and then request a new fill response from the fill service. */ @GuardedBy("mLock") private void requestNewFillResponseLocked(int flags) { int requestId; Loading Loading @@ -497,6 +502,7 @@ final class Session implements RemoteFillService.FillServiceCallbacks, ViewState * * @return The activity token */ @GuardedBy("mLock") @NonNull IBinder getActivityTokenLocked() { return mActivityToken; } Loading Loading @@ -663,6 +669,7 @@ final class Session implements RemoteFillService.FillServiceCallbacks, ViewState * * @return The context or {@code null} if there is no context */ @GuardedBy("mLock") @Nullable private FillContext getFillContextByRequestIdLocked(int requestId) { if (mContexts == null) { return null; Loading Loading @@ -820,6 +827,7 @@ final class Session implements RemoteFillService.FillServiceCallbacks, ViewState }); } @GuardedBy("mLock") void setAuthenticationResultLocked(Bundle data, int authenticationId) { if (mDestroyed) { Slog.w(TAG, "Call to Session#setAuthenticationResultLocked() rejected - session: " Loading Loading @@ -882,6 +890,7 @@ final class Session implements RemoteFillService.FillServiceCallbacks, ViewState } } @GuardedBy("mLock") void setHasCallbackLocked(boolean hasIt) { if (mDestroyed) { Slog.w(TAG, "Call to Session#setHasCallbackLocked() rejected - session: " Loading @@ -891,6 +900,7 @@ final class Session implements RemoteFillService.FillServiceCallbacks, ViewState mHasCallback = hasIt; } @GuardedBy("mLock") @Nullable private FillResponse getLastResponseLocked(@Nullable String logPrefix) { if (mContexts == null) { Loading Loading @@ -923,6 +933,7 @@ final class Session implements RemoteFillService.FillServiceCallbacks, ViewState return response; } @GuardedBy("mLock") @Nullable private SaveInfo getSaveInfoLocked() { final FillResponse response = getLastResponseLocked(null); Loading @@ -941,6 +952,7 @@ final class Session implements RemoteFillService.FillServiceCallbacks, ViewState }); } @GuardedBy("mLock") private void logContextCommittedLocked() { final FillResponse lastResponse = getLastResponseLocked("logContextCommited()"); if (lastResponse == null) return; Loading Loading @@ -1241,6 +1253,7 @@ final class Session implements RemoteFillService.FillServiceCallbacks, ViewState * * @return {@code true} if session is done, or {@code false} if it's pending user action. */ @GuardedBy("mLock") public boolean showSaveLocked() { if (mDestroyed) { Slog.w(TAG, "Call to Session#showSaveLocked() rejected - session: " Loading Loading @@ -1510,6 +1523,7 @@ final class Session implements RemoteFillService.FillServiceCallbacks, ViewState /** * Returns whether the session is currently showing the save UI */ @GuardedBy("mLock") boolean isSavingLocked() { return mIsSaving; } Loading @@ -1517,6 +1531,7 @@ final class Session implements RemoteFillService.FillServiceCallbacks, ViewState /** * Gets the latest non-empty value for the given id in the autofill contexts. */ @GuardedBy("mLock") @Nullable private AutofillValue getValueFromContextsLocked(AutofillId id) { final int numContexts = mContexts.size(); Loading @@ -1539,6 +1554,7 @@ final class Session implements RemoteFillService.FillServiceCallbacks, ViewState /** * Gets the latest autofill options for the given id in the autofill contexts. */ @GuardedBy("mLock") @Nullable private CharSequence[] getAutofillOptionsFromContextsLocked(AutofillId id) { final int numContexts = mContexts.size(); Loading @@ -1556,6 +1572,7 @@ final class Session implements RemoteFillService.FillServiceCallbacks, ViewState /** * Calls service when user requested save. */ @GuardedBy("mLock") void callSaveLocked() { if (mDestroyed) { Slog.w(TAG, "Call to Session#callSaveLocked() rejected - session: " Loading Loading @@ -1646,6 +1663,7 @@ final class Session implements RemoteFillService.FillServiceCallbacks, ViewState * @param viewState The view that is entered. * @param flags The flag that was passed by the AutofillManager. */ @GuardedBy("mLock") private void requestNewFillResponseOnViewEnteredIfNecessaryLocked(@NonNull AutofillId id, @NonNull ViewState viewState, int flags) { if ((flags & FLAG_MANUAL_REQUEST) != 0) { Loading Loading @@ -1673,6 +1691,7 @@ final class Session implements RemoteFillService.FillServiceCallbacks, ViewState * * @return {@code true} iff a new partition should be started */ @GuardedBy("mLock") private boolean shouldStartNewPartitionLocked(@NonNull AutofillId id) { if (mResponses == null) { return true; Loading Loading @@ -1721,6 +1740,7 @@ final class Session implements RemoteFillService.FillServiceCallbacks, ViewState return true; } @GuardedBy("mLock") void updateLocked(AutofillId id, Rect virtualBounds, AutofillValue value, int action, int flags) { if (mDestroyed) { Loading Loading @@ -1830,6 +1850,7 @@ final class Session implements RemoteFillService.FillServiceCallbacks, ViewState /** * Checks whether a view should be ignored. */ @GuardedBy("mLock") private boolean isIgnoredLocked(AutofillId id) { // Always check the latest response only final FillResponse response = getLastResponseLocked(null); Loading Loading @@ -1910,6 +1931,7 @@ final class Session implements RemoteFillService.FillServiceCallbacks, ViewState } } @GuardedBy("mLock") private void updateTrackedIdsLocked() { // Only track the views of the last response as only those are reported back to the // service, see #showSaveLocked Loading Loading @@ -1982,6 +2004,7 @@ final class Session implements RemoteFillService.FillServiceCallbacks, ViewState } } @GuardedBy("mLock") private void replaceResponseLocked(@NonNull FillResponse oldResponse, @NonNull FillResponse newResponse, @Nullable Bundle newClientState) { // Disassociate view states with the old response Loading @@ -2005,6 +2028,7 @@ final class Session implements RemoteFillService.FillServiceCallbacks, ViewState removeSelf(); } @GuardedBy("mLock") private void processResponseLocked(@NonNull FillResponse newResponse, @Nullable Bundle newClientState, int flags) { // Make sure we are hiding the UI which will be shown Loading Loading @@ -2042,6 +2066,7 @@ final class Session implements RemoteFillService.FillServiceCallbacks, ViewState /** * Sets the state of all views in the given response. */ @GuardedBy("mLock") private void setViewStatesLocked(FillResponse response, int state, boolean clearResponse) { final List<Dataset> datasets = response.getDatasets(); if (datasets != null) { Loading Loading @@ -2090,6 +2115,7 @@ final class Session implements RemoteFillService.FillServiceCallbacks, ViewState /** * Sets the state of all views in the given dataset and response. */ @GuardedBy("mLock") private void setViewStatesLocked(@Nullable FillResponse response, @NonNull Dataset dataset, int state, boolean clearResponse) { final ArrayList<AutofillId> ids = dataset.getFieldIds(); Loading @@ -2110,6 +2136,7 @@ final class Session implements RemoteFillService.FillServiceCallbacks, ViewState } } @GuardedBy("mLock") private ViewState createOrUpdateViewStateLocked(@NonNull AutofillId id, int state, @Nullable AutofillValue value) { ViewState viewState = mViewStates.get(id); Loading Loading @@ -2171,6 +2198,7 @@ final class Session implements RemoteFillService.FillServiceCallbacks, ViewState } // TODO: this should never be null, but we got at least one occurrence, probably due to a race. @GuardedBy("mLock") @Nullable private Intent createAuthFillInIntentLocked(int requestId, Bundle extras) { final Intent fillInIntent = new Intent(); Loading Loading @@ -2203,6 +2231,7 @@ final class Session implements RemoteFillService.FillServiceCallbacks, ViewState return "Session: [id=" + id + ", component=" + mComponentName + "]"; } @GuardedBy("mLock") void dumpLocked(String prefix, PrintWriter pw) { final String prefix2 = prefix + " "; pw.print(prefix); pw.print("id: "); pw.println(id); Loading Loading @@ -2332,6 +2361,7 @@ final class Session implements RemoteFillService.FillServiceCallbacks, ViewState * disabled it). * </ul> */ @GuardedBy("mLock") RemoteFillService destroyLocked() { if (mDestroyed) { return null; Loading @@ -2347,6 +2377,7 @@ final class Session implements RemoteFillService.FillServiceCallbacks, ViewState * Cleans up this session and remove it from the service always, even if it does have a pending * Save UI. */ @GuardedBy("mLock") void forceRemoveSelfLocked() { if (sVerbose) Slog.v(TAG, "forceRemoveSelfLocked(): " + mPendingSaveUi); Loading Loading @@ -2376,6 +2407,7 @@ final class Session implements RemoteFillService.FillServiceCallbacks, ViewState * Cleans up this session and remove it from the service, but but only if it does not have a * pending Save UI. */ @GuardedBy("mLock") void removeSelfLocked() { if (sVerbose) Slog.v(TAG, "removeSelfLocked(): " + mPendingSaveUi); if (mDestroyed) { Loading Loading @@ -2404,6 +2436,7 @@ final class Session implements RemoteFillService.FillServiceCallbacks, ViewState * a specific {@code token} created by * {@link PendingUi#PendingUi(IBinder, int, IAutoFillManagerClient)}. */ @GuardedBy("mLock") boolean isSaveUiPendingForTokenLocked(@NonNull IBinder token) { return isSaveUiPendingLocked() && token.equals(mPendingSaveUi.getToken()); } Loading @@ -2411,10 +2444,12 @@ final class Session implements RemoteFillService.FillServiceCallbacks, ViewState /** * Checks whether this session is hiding the Save UI to handle a custom description link. */ @GuardedBy("mLock") private boolean isSaveUiPendingLocked() { return mPendingSaveUi != null && mPendingSaveUi.getState() == PendingUi.STATE_PENDING; } @GuardedBy("mLock") private int getLastResponseIndexLocked() { // The response ids are monotonically increasing so // we just find the largest id which is the last. We Loading Loading
services/autofill/java/com/android/server/autofill/AutofillManagerService.java +5 −0 Original line number Diff line number Diff line Loading @@ -306,6 +306,7 @@ public final class AutofillManagerService extends SystemService { * * @return service instance. */ @GuardedBy("mLock") @NonNull AutofillManagerServiceImpl getServiceForUserLocked(int userId) { final int resolvedUserId = ActivityManager.handleIncomingUser(Binder.getCallingPid(), Loading @@ -325,6 +326,7 @@ public final class AutofillManagerService extends SystemService { * * @return service instance or {@code null} if not already present */ @GuardedBy("mLock") @Nullable AutofillManagerServiceImpl peekServiceForUserLocked(int userId) { final int resolvedUserId = ActivityManager.handleIncomingUser(Binder.getCallingPid(), Loading Loading @@ -474,6 +476,7 @@ public final class AutofillManagerService extends SystemService { /** * Removes a cached service for a given user. */ @GuardedBy("mLock") private void removeCachedServiceLocked(int userId) { final AutofillManagerServiceImpl service = peekServiceForUserLocked(userId); if (service != null) { Loading @@ -485,6 +488,7 @@ public final class AutofillManagerService extends SystemService { /** * Updates a cached service for a given user. */ @GuardedBy("mLock") private void updateCachedServiceLocked(int userId) { updateCachedServiceLocked(userId, mDisabledUsers.get(userId)); } Loading @@ -492,6 +496,7 @@ public final class AutofillManagerService extends SystemService { /** * Updates a cached service for a given user. */ @GuardedBy("mLock") private void updateCachedServiceLocked(int userId, boolean disabled) { AutofillManagerServiceImpl service = getServiceForUserLocked(userId); if (service != null) { Loading
services/autofill/java/com/android/server/autofill/AutofillManagerServiceImpl.java +26 −0 Original line number Diff line number Diff line Loading @@ -211,6 +211,7 @@ final class AutofillManagerServiceImpl { } } @GuardedBy("mLock") private int getServiceUidLocked() { if (mInfo == null) { Slog.w(TAG, "getServiceUidLocked(): no mInfo"); Loading Loading @@ -248,6 +249,7 @@ final class AutofillManagerServiceImpl { mContext.getContentResolver(), Settings.Secure.AUTOFILL_SERVICE, mUserId); } @GuardedBy("mLock") void updateLocked(boolean disabled) { final boolean wasEnabled = isEnabledLocked(); if (sVerbose) { Loading Loading @@ -300,6 +302,7 @@ final class AutofillManagerServiceImpl { } } @GuardedBy("mLock") boolean addClientLocked(IAutoFillManagerClient client) { if (mClients == null) { mClients = new RemoteCallbackList<>(); Loading @@ -308,12 +311,14 @@ final class AutofillManagerServiceImpl { return isEnabledLocked(); } @GuardedBy("mLock") void removeClientLocked(IAutoFillManagerClient client) { if (mClients != null) { mClients.unregister(client); } } @GuardedBy("mLock") void setAuthenticationResultLocked(Bundle data, int sessionId, int authenticationId, int uid) { if (!isEnabledLocked()) { return; Loading @@ -336,6 +341,7 @@ final class AutofillManagerServiceImpl { } } @GuardedBy("mLock") int startSessionLocked(@NonNull IBinder activityToken, int uid, @NonNull IBinder appCallbackToken, @NonNull AutofillId autofillId, @NonNull Rect virtualBounds, @Nullable AutofillValue value, boolean hasCallback, Loading Loading @@ -389,6 +395,7 @@ final class AutofillManagerServiceImpl { /** * Remove abandoned sessions if needed. */ @GuardedBy("mLock") private void pruneAbandonedSessionsLocked() { long now = System.currentTimeMillis(); if (mLastPrune < now - MAX_ABANDONED_SESSION_MILLIS) { Loading @@ -400,6 +407,7 @@ final class AutofillManagerServiceImpl { } } @GuardedBy("mLock") void finishSessionLocked(int sessionId, int uid) { if (!isEnabledLocked()) { return; Loading @@ -423,6 +431,7 @@ final class AutofillManagerServiceImpl { } } @GuardedBy("mLock") void cancelSessionLocked(int sessionId, int uid) { if (!isEnabledLocked()) { return; Loading @@ -436,6 +445,7 @@ final class AutofillManagerServiceImpl { session.removeSelfLocked(); } @GuardedBy("mLock") void disableOwnedAutofillServicesLocked(int uid) { Slog.i(TAG, "disableOwnedServices(" + uid + "): " + mInfo); if (mInfo == null) return; Loading Loading @@ -468,6 +478,7 @@ final class AutofillManagerServiceImpl { } } @GuardedBy("mLock") private Session createSessionByTokenLocked(@NonNull IBinder activityToken, int uid, @NonNull IBinder appCallbackToken, boolean hasCallback, @NonNull ComponentName componentName, int flags) { Loading Loading @@ -546,6 +557,7 @@ final class AutofillManagerServiceImpl { /** * Updates a session and returns whether it should be restarted. */ @GuardedBy("mLock") boolean updateSessionLocked(int sessionId, int uid, AutofillId autofillId, Rect virtualBounds, AutofillValue value, int action, int flags) { final Session session = mSessions.get(sessionId); Loading @@ -568,6 +580,7 @@ final class AutofillManagerServiceImpl { return false; } @GuardedBy("mLock") void removeSessionLocked(int sessionId) { mSessions.remove(sessionId); } Loading Loading @@ -603,6 +616,7 @@ final class AutofillManagerServiceImpl { } } @GuardedBy("mLock") void destroyLocked() { if (sVerbose) Slog.v(TAG, "destroyLocked()"); Loading Loading @@ -655,6 +669,7 @@ final class AutofillManagerServiceImpl { } } @GuardedBy("mLock") private boolean isValidEventLocked(String method, int sessionId) { if (mEventHistory == null) { Slog.w(TAG, method + ": not logging event because history is null"); Loading Loading @@ -726,6 +741,7 @@ final class AutofillManagerServiceImpl { /** * Updates the last fill response when an autofill context is committed. */ @GuardedBy("mLock") void logContextCommittedLocked(int sessionId, @Nullable Bundle clientState, @Nullable ArrayList<String> selectedDatasets, @Nullable ArraySet<String> ignoredDatasets, Loading @@ -739,6 +755,7 @@ final class AutofillManagerServiceImpl { manuallyFilledDatasetIds, null, null, appPackageName); } @GuardedBy("mLock") void logContextCommittedLocked(int sessionId, @Nullable Bundle clientState, @Nullable ArrayList<String> selectedDatasets, @Nullable ArraySet<String> ignoredDatasets, Loading Loading @@ -847,6 +864,7 @@ final class AutofillManagerServiceImpl { } } @GuardedBy("mLock") private boolean isCalledByServiceLocked(String methodName, int callingUid) { if (getServiceUidLocked() != callingUid) { Slog.w(TAG, methodName + "() called by UID " + callingUid Loading @@ -856,6 +874,7 @@ final class AutofillManagerServiceImpl { return true; } @GuardedBy("mLock") void dumpLocked(String prefix, PrintWriter pw) { final String prefix2 = prefix + " "; Loading Loading @@ -965,6 +984,7 @@ final class AutofillManagerServiceImpl { mFieldClassificationStrategy.dump(prefix2, pw); } @GuardedBy("mLock") void destroySessionsLocked() { if (mSessions.size() == 0) { mUi.destroyAll(null, null, false); Loading @@ -976,6 +996,7 @@ final class AutofillManagerServiceImpl { } // TODO(b/64940307): remove this method if SaveUI is refactored to be attached on activities @GuardedBy("mLock") void destroyFinishedSessionsLocked() { final int sessionCount = mSessions.size(); for (int i = sessionCount - 1; i >= 0; i--) { Loading @@ -987,6 +1008,7 @@ final class AutofillManagerServiceImpl { } } @GuardedBy("mLock") void listSessionsLocked(ArrayList<String> output) { final int numSessions = mSessions.size(); for (int i = 0; i < numSessions; i++) { Loading @@ -995,6 +1017,7 @@ final class AutofillManagerServiceImpl { } } @GuardedBy("mLock") boolean isCompatibilityModeRequestedLocked(@NonNull String packageName, long versionCode) { if (mInfo == null || !mInfo.isCompatibilityModeRequested(packageName, versionCode)) { Loading Loading @@ -1060,6 +1083,7 @@ final class AutofillManagerServiceImpl { } } @GuardedBy("mLock") private boolean isClientSessionDestroyedLocked(IAutoFillManagerClient client) { final int sessionCount = mSessions.size(); for (int i = 0; i < sessionCount; i++) { Loading @@ -1071,6 +1095,7 @@ final class AutofillManagerServiceImpl { return true; } @GuardedBy("mLock") boolean isEnabledLocked() { return mSetupComplete && mInfo != null && !mDisabled; } Loading Loading @@ -1123,6 +1148,7 @@ final class AutofillManagerServiceImpl { /** * Checks if autofill is disabled by service to the given activity. */ @GuardedBy("mLock") private boolean isAutofillDisabledLocked(@NonNull ComponentName componentName) { // Check activities first. long elapsedTime = 0; Loading
services/autofill/java/com/android/server/autofill/RemoteFillService.java +1 −0 Original line number Diff line number Diff line Loading @@ -475,6 +475,7 @@ final class RemoteFillService implements DeathRecipient { return true; } @GuardedBy("mLock") protected boolean isCancelledLocked() { return mCancelled; } Loading
services/autofill/java/com/android/server/autofill/Session.java +35 −0 Original line number Diff line number Diff line Loading @@ -300,6 +300,7 @@ final class Session implements RemoteFillService.FillServiceCallbacks, ViewState /** * Returns the ids of all entries in {@link #mViewStates} in the same order. */ @GuardedBy("mLock") private AutofillId[] getIdsOfAllViewStatesLocked() { final int numViewState = mViewStates.size(); final AutofillId[] ids = new AutofillId[numViewState]; Loading Loading @@ -346,6 +347,7 @@ final class Session implements RemoteFillService.FillServiceCallbacks, ViewState * <p>Gets the value of a field, using either the {@code viewStates} or the {@code mContexts}, * or {@code null} when not found on either of them. */ @GuardedBy("mLock") private AutofillValue findValueLocked(@NonNull AutofillId id) { final ViewState state = mViewStates.get(id); if (state == null) { Loading @@ -369,6 +371,7 @@ final class Session implements RemoteFillService.FillServiceCallbacks, ViewState * @param fillContext The context to be filled * @param flags The flags that started the session */ @GuardedBy("mLock") private void fillContextWithAllowedValuesLocked(@NonNull FillContext fillContext, int flags) { final ViewNode[] nodes = fillContext .findViewNodesByAutofillIds(getIdsOfAllViewStatesLocked()); Loading Loading @@ -409,6 +412,7 @@ final class Session implements RemoteFillService.FillServiceCallbacks, ViewState /** * Cancels the last request sent to the {@link #mRemoteFillService}. */ @GuardedBy("mLock") private void cancelCurrentRequestLocked() { final int canceledRequest = mRemoteFillService.cancelCurrentRequest(); Loading @@ -430,6 +434,7 @@ final class Session implements RemoteFillService.FillServiceCallbacks, ViewState /** * Reads a new structure and then request a new fill response from the fill service. */ @GuardedBy("mLock") private void requestNewFillResponseLocked(int flags) { int requestId; Loading Loading @@ -497,6 +502,7 @@ final class Session implements RemoteFillService.FillServiceCallbacks, ViewState * * @return The activity token */ @GuardedBy("mLock") @NonNull IBinder getActivityTokenLocked() { return mActivityToken; } Loading Loading @@ -663,6 +669,7 @@ final class Session implements RemoteFillService.FillServiceCallbacks, ViewState * * @return The context or {@code null} if there is no context */ @GuardedBy("mLock") @Nullable private FillContext getFillContextByRequestIdLocked(int requestId) { if (mContexts == null) { return null; Loading Loading @@ -820,6 +827,7 @@ final class Session implements RemoteFillService.FillServiceCallbacks, ViewState }); } @GuardedBy("mLock") void setAuthenticationResultLocked(Bundle data, int authenticationId) { if (mDestroyed) { Slog.w(TAG, "Call to Session#setAuthenticationResultLocked() rejected - session: " Loading Loading @@ -882,6 +890,7 @@ final class Session implements RemoteFillService.FillServiceCallbacks, ViewState } } @GuardedBy("mLock") void setHasCallbackLocked(boolean hasIt) { if (mDestroyed) { Slog.w(TAG, "Call to Session#setHasCallbackLocked() rejected - session: " Loading @@ -891,6 +900,7 @@ final class Session implements RemoteFillService.FillServiceCallbacks, ViewState mHasCallback = hasIt; } @GuardedBy("mLock") @Nullable private FillResponse getLastResponseLocked(@Nullable String logPrefix) { if (mContexts == null) { Loading Loading @@ -923,6 +933,7 @@ final class Session implements RemoteFillService.FillServiceCallbacks, ViewState return response; } @GuardedBy("mLock") @Nullable private SaveInfo getSaveInfoLocked() { final FillResponse response = getLastResponseLocked(null); Loading @@ -941,6 +952,7 @@ final class Session implements RemoteFillService.FillServiceCallbacks, ViewState }); } @GuardedBy("mLock") private void logContextCommittedLocked() { final FillResponse lastResponse = getLastResponseLocked("logContextCommited()"); if (lastResponse == null) return; Loading Loading @@ -1241,6 +1253,7 @@ final class Session implements RemoteFillService.FillServiceCallbacks, ViewState * * @return {@code true} if session is done, or {@code false} if it's pending user action. */ @GuardedBy("mLock") public boolean showSaveLocked() { if (mDestroyed) { Slog.w(TAG, "Call to Session#showSaveLocked() rejected - session: " Loading Loading @@ -1510,6 +1523,7 @@ final class Session implements RemoteFillService.FillServiceCallbacks, ViewState /** * Returns whether the session is currently showing the save UI */ @GuardedBy("mLock") boolean isSavingLocked() { return mIsSaving; } Loading @@ -1517,6 +1531,7 @@ final class Session implements RemoteFillService.FillServiceCallbacks, ViewState /** * Gets the latest non-empty value for the given id in the autofill contexts. */ @GuardedBy("mLock") @Nullable private AutofillValue getValueFromContextsLocked(AutofillId id) { final int numContexts = mContexts.size(); Loading @@ -1539,6 +1554,7 @@ final class Session implements RemoteFillService.FillServiceCallbacks, ViewState /** * Gets the latest autofill options for the given id in the autofill contexts. */ @GuardedBy("mLock") @Nullable private CharSequence[] getAutofillOptionsFromContextsLocked(AutofillId id) { final int numContexts = mContexts.size(); Loading @@ -1556,6 +1572,7 @@ final class Session implements RemoteFillService.FillServiceCallbacks, ViewState /** * Calls service when user requested save. */ @GuardedBy("mLock") void callSaveLocked() { if (mDestroyed) { Slog.w(TAG, "Call to Session#callSaveLocked() rejected - session: " Loading Loading @@ -1646,6 +1663,7 @@ final class Session implements RemoteFillService.FillServiceCallbacks, ViewState * @param viewState The view that is entered. * @param flags The flag that was passed by the AutofillManager. */ @GuardedBy("mLock") private void requestNewFillResponseOnViewEnteredIfNecessaryLocked(@NonNull AutofillId id, @NonNull ViewState viewState, int flags) { if ((flags & FLAG_MANUAL_REQUEST) != 0) { Loading Loading @@ -1673,6 +1691,7 @@ final class Session implements RemoteFillService.FillServiceCallbacks, ViewState * * @return {@code true} iff a new partition should be started */ @GuardedBy("mLock") private boolean shouldStartNewPartitionLocked(@NonNull AutofillId id) { if (mResponses == null) { return true; Loading Loading @@ -1721,6 +1740,7 @@ final class Session implements RemoteFillService.FillServiceCallbacks, ViewState return true; } @GuardedBy("mLock") void updateLocked(AutofillId id, Rect virtualBounds, AutofillValue value, int action, int flags) { if (mDestroyed) { Loading Loading @@ -1830,6 +1850,7 @@ final class Session implements RemoteFillService.FillServiceCallbacks, ViewState /** * Checks whether a view should be ignored. */ @GuardedBy("mLock") private boolean isIgnoredLocked(AutofillId id) { // Always check the latest response only final FillResponse response = getLastResponseLocked(null); Loading Loading @@ -1910,6 +1931,7 @@ final class Session implements RemoteFillService.FillServiceCallbacks, ViewState } } @GuardedBy("mLock") private void updateTrackedIdsLocked() { // Only track the views of the last response as only those are reported back to the // service, see #showSaveLocked Loading Loading @@ -1982,6 +2004,7 @@ final class Session implements RemoteFillService.FillServiceCallbacks, ViewState } } @GuardedBy("mLock") private void replaceResponseLocked(@NonNull FillResponse oldResponse, @NonNull FillResponse newResponse, @Nullable Bundle newClientState) { // Disassociate view states with the old response Loading @@ -2005,6 +2028,7 @@ final class Session implements RemoteFillService.FillServiceCallbacks, ViewState removeSelf(); } @GuardedBy("mLock") private void processResponseLocked(@NonNull FillResponse newResponse, @Nullable Bundle newClientState, int flags) { // Make sure we are hiding the UI which will be shown Loading Loading @@ -2042,6 +2066,7 @@ final class Session implements RemoteFillService.FillServiceCallbacks, ViewState /** * Sets the state of all views in the given response. */ @GuardedBy("mLock") private void setViewStatesLocked(FillResponse response, int state, boolean clearResponse) { final List<Dataset> datasets = response.getDatasets(); if (datasets != null) { Loading Loading @@ -2090,6 +2115,7 @@ final class Session implements RemoteFillService.FillServiceCallbacks, ViewState /** * Sets the state of all views in the given dataset and response. */ @GuardedBy("mLock") private void setViewStatesLocked(@Nullable FillResponse response, @NonNull Dataset dataset, int state, boolean clearResponse) { final ArrayList<AutofillId> ids = dataset.getFieldIds(); Loading @@ -2110,6 +2136,7 @@ final class Session implements RemoteFillService.FillServiceCallbacks, ViewState } } @GuardedBy("mLock") private ViewState createOrUpdateViewStateLocked(@NonNull AutofillId id, int state, @Nullable AutofillValue value) { ViewState viewState = mViewStates.get(id); Loading Loading @@ -2171,6 +2198,7 @@ final class Session implements RemoteFillService.FillServiceCallbacks, ViewState } // TODO: this should never be null, but we got at least one occurrence, probably due to a race. @GuardedBy("mLock") @Nullable private Intent createAuthFillInIntentLocked(int requestId, Bundle extras) { final Intent fillInIntent = new Intent(); Loading Loading @@ -2203,6 +2231,7 @@ final class Session implements RemoteFillService.FillServiceCallbacks, ViewState return "Session: [id=" + id + ", component=" + mComponentName + "]"; } @GuardedBy("mLock") void dumpLocked(String prefix, PrintWriter pw) { final String prefix2 = prefix + " "; pw.print(prefix); pw.print("id: "); pw.println(id); Loading Loading @@ -2332,6 +2361,7 @@ final class Session implements RemoteFillService.FillServiceCallbacks, ViewState * disabled it). * </ul> */ @GuardedBy("mLock") RemoteFillService destroyLocked() { if (mDestroyed) { return null; Loading @@ -2347,6 +2377,7 @@ final class Session implements RemoteFillService.FillServiceCallbacks, ViewState * Cleans up this session and remove it from the service always, even if it does have a pending * Save UI. */ @GuardedBy("mLock") void forceRemoveSelfLocked() { if (sVerbose) Slog.v(TAG, "forceRemoveSelfLocked(): " + mPendingSaveUi); Loading Loading @@ -2376,6 +2407,7 @@ final class Session implements RemoteFillService.FillServiceCallbacks, ViewState * Cleans up this session and remove it from the service, but but only if it does not have a * pending Save UI. */ @GuardedBy("mLock") void removeSelfLocked() { if (sVerbose) Slog.v(TAG, "removeSelfLocked(): " + mPendingSaveUi); if (mDestroyed) { Loading Loading @@ -2404,6 +2436,7 @@ final class Session implements RemoteFillService.FillServiceCallbacks, ViewState * a specific {@code token} created by * {@link PendingUi#PendingUi(IBinder, int, IAutoFillManagerClient)}. */ @GuardedBy("mLock") boolean isSaveUiPendingForTokenLocked(@NonNull IBinder token) { return isSaveUiPendingLocked() && token.equals(mPendingSaveUi.getToken()); } Loading @@ -2411,10 +2444,12 @@ final class Session implements RemoteFillService.FillServiceCallbacks, ViewState /** * Checks whether this session is hiding the Save UI to handle a custom description link. */ @GuardedBy("mLock") private boolean isSaveUiPendingLocked() { return mPendingSaveUi != null && mPendingSaveUi.getState() == PendingUi.STATE_PENDING; } @GuardedBy("mLock") private int getLastResponseIndexLocked() { // The response ids are monotonically increasing so // we just find the largest id which is the last. We Loading