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
This commit is contained in:
Felipe Leme
2018-03-14 12:33:58 -07:00
parent fd36a5ddea
commit 950cc6b42b

View File

@@ -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;
* </p>
*/
public class Application extends ContextWrapper implements ComponentCallbacks2 {
private static final String TAG = "Application";
private ArrayList<ComponentCallbacks> mComponentCallbacks =
new ArrayList<ComponentCallbacks>();
private ArrayList<ActivityLifecycleCallbacks> 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;
}
}