From 950cc6b42b33ecb43eb457151c42b0286b34af6a Mon Sep 17 00:00:00 2001 From: Felipe Leme Date: Wed, 14 Mar 2018 12:33:58 -0700 Subject: [PATCH] Improved Application.getAutofillClient() - Fixed usage of activity instead of record.activity - Added (optional) verbose logging Bug: 74793485 Test: atest CtsAutoFillServiceTestCases:VirtualContainerActivityTest#testAutofill_appContext\ CtsAutoFillServiceTestCases:VirtualContainerActivityCompatModeTest#testAutofill_appContext Change-Id: I03721cab6428e580b13444bf045f33dc3d787a8d --- core/java/android/app/Application.java | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) diff --git a/core/java/android/app/Application.java b/core/java/android/app/Application.java index 41eeb9acb5ec5..4531f53bd86fe 100644 --- a/core/java/android/app/Application.java +++ b/core/java/android/app/Application.java @@ -16,8 +16,6 @@ package android.app; -import java.util.ArrayList; - import android.annotation.CallSuper; import android.content.ComponentCallbacks; import android.content.ComponentCallbacks2; @@ -26,8 +24,11 @@ import android.content.ContextWrapper; import android.content.Intent; import android.content.res.Configuration; import android.os.Bundle; +import android.util.Log; import android.view.autofill.AutofillManager; +import java.util.ArrayList; + /** * Base class for maintaining global application state. You can provide your own * implementation by creating a subclass and specifying the fully-qualified name @@ -46,6 +47,7 @@ import android.view.autofill.AutofillManager; *

*/ public class Application extends ContextWrapper implements ComponentCallbacks2 { + private static final String TAG = "Application"; private ArrayList mComponentCallbacks = new ArrayList(); private ArrayList mActivityLifecycleCallbacks = @@ -318,6 +320,9 @@ public class Application extends ContextWrapper implements ComponentCallbacks2 { if (client != null) { return client; } + if (android.view.autofill.Helper.sVerbose) { + Log.v(TAG, "getAutofillClient(): null on super, trying to find activity thread"); + } // Okay, ppl use the application context when they should not. This breaks // autofill among other things. We pick the focused activity since autofill // interacts only with the currently focused activity and we need the fill @@ -338,9 +343,16 @@ public class Application extends ContextWrapper implements ComponentCallbacks2 { continue; } if (activity.getWindow().getDecorView().hasFocus()) { - return record.activity; + if (android.view.autofill.Helper.sVerbose) { + Log.v(TAG, "getAutofillClient(): found activity for " + this + ": " + activity); + } + return activity; } } + if (android.view.autofill.Helper.sVerbose) { + Log.v(TAG, "getAutofillClient(): none of the " + activityCount + " activities on " + + this + " have focus"); + } return null; } }