From aa6de2e6e8ad52f6f85a93248a15f2b6833c7af5 Mon Sep 17 00:00:00 2001
From: Charles Chen
Date: Mon, 22 Feb 2021 15:53:28 +0800
Subject: [PATCH] Unhide isUiContext()
... because it is more tied to Context instance that developers
are working with.
Bug: 179308116
Test: atest ContextIsUiContextTest
Change-Id: I41d90c4b5b81b430fc8007a0bdf86c6fd1c54400
---
core/api/current.txt | 3 ++-
core/java/android/content/Context.java | 17 ++++++-----------
.../IncorrectContextUseViolation.java | 2 +-
3 files changed, 9 insertions(+), 13 deletions(-)
diff --git a/core/api/current.txt b/core/api/current.txt
index d6c783dc71b02..d61b47b0d05fb 100644
--- a/core/api/current.txt
+++ b/core/api/current.txt
@@ -10356,7 +10356,7 @@ package android.content {
method public abstract void grantUriPermission(String, android.net.Uri, int);
method public abstract boolean isDeviceProtectedStorage();
method public boolean isRestricted();
- method public static boolean isUiContext(@NonNull android.content.Context);
+ method public boolean isUiContext();
method public abstract boolean moveDatabaseFrom(android.content.Context, String);
method public abstract boolean moveSharedPreferencesFrom(android.content.Context, String);
method @NonNull public final android.content.res.TypedArray obtainStyledAttributes(@NonNull @StyleableRes int[]);
@@ -18813,6 +18813,7 @@ package android.inputmethodservice {
public abstract class AbstractInputMethodService extends android.app.Service implements android.view.KeyEvent.Callback {
ctor public AbstractInputMethodService();
method public android.view.KeyEvent.DispatcherState getKeyDispatcherState();
+ method public final boolean isUiContext();
method public final android.os.IBinder onBind(android.content.Intent);
method public abstract android.inputmethodservice.AbstractInputMethodService.AbstractInputMethodImpl onCreateInputMethodInterface();
method public abstract android.inputmethodservice.AbstractInputMethodService.AbstractInputMethodSessionImpl onCreateInputMethodSessionInterface();
diff --git a/core/java/android/content/Context.java b/core/java/android/content/Context.java
index 4284dc2117c59..e57d84f786333 100644
--- a/core/java/android/content/Context.java
+++ b/core/java/android/content/Context.java
@@ -6662,15 +6662,6 @@ public abstract class Context {
}
}
- /**
- * Indicates if this context is a visual context such as {@link android.app.Activity} or
- * a context created from {@link #createWindowContext(int, Bundle)}.
- * @hide
- */
- public boolean isUiContext() {
- throw new RuntimeException("Not implemented. Must override in a subclass.");
- }
-
/**
* Returns {@code true} if the context is a UI context which can access UI components such as
* {@link WindowManager}, {@link android.view.LayoutInflater LayoutInflater} or
@@ -6683,12 +6674,16 @@ public abstract class Context {
* {@link #createWindowContext(int, Bundle)} or
* {@link android.inputmethodservice.InputMethodService InputMethodService}
*
+ *
+ * Note that even if it is allowed programmatically, it is not suggested to override this
+ * method to bypass {@link android.os.strictmode.IncorrectContextUseViolation} verification.
+ *
*
* @see #getDisplay()
* @see #getSystemService(String)
* @see android.os.StrictMode.VmPolicy.Builder#detectIncorrectContextUse()
*/
- public static boolean isUiContext(@NonNull Context context) {
- return context.isUiContext();
+ public boolean isUiContext() {
+ throw new RuntimeException("Not implemented. Must override in a subclass.");
}
}
diff --git a/core/java/android/os/strictmode/IncorrectContextUseViolation.java b/core/java/android/os/strictmode/IncorrectContextUseViolation.java
index 11d26cab14b3c..d8c22fd94ce99 100644
--- a/core/java/android/os/strictmode/IncorrectContextUseViolation.java
+++ b/core/java/android/os/strictmode/IncorrectContextUseViolation.java
@@ -24,7 +24,7 @@ import android.content.Context;
* instance.
*
* @see Context#getSystemService(String)
- * @see Context#isUiContext(Context)
+ * @see Context#isUiContext
* @see android.os.StrictMode.VmPolicy.Builder#detectIncorrectContextUse()
*/
public final class IncorrectContextUseViolation extends Violation {