Merge "Respect UI Context for getDisplay" into rvc-qpr-dev am: c5ba62307c

Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/12313930

Change-Id: I7d9bfc3f9e1854a3d86a26f905125c71fd9e854c
This commit is contained in:
Charles Chen
2020-08-27 03:05:15 +00:00
committed by Automerger Merge Worker

View File

@@ -1914,10 +1914,8 @@ class ContextImpl extends Context {
@Override
public Object getSystemService(String name) {
if (vmIncorrectContextUseEnabled()) {
// We may override this API from outer context.
final boolean isUiContext = isUiContext() || isOuterUiContext();
// Check incorrect Context usage.
if (isUiComponent(name) && !isUiContext) {
if (isUiComponent(name) && !isSelfOrOuterUiContext()) {
final String errorMessage = "Tried to access visual service "
+ SystemServiceRegistry.getSystemServiceClassName(name)
+ " from a non-visual Context:" + getOuterContext();
@@ -1934,15 +1932,17 @@ class ContextImpl extends Context {
return SystemServiceRegistry.getSystemService(this, name);
}
private boolean isOuterUiContext() {
return getOuterContext() != null && getOuterContext().isUiContext();
}
@Override
public String getSystemServiceName(Class<?> serviceClass) {
return SystemServiceRegistry.getSystemServiceName(serviceClass);
}
// TODO(b/149463653): check if we still need this method after migrating IMS to WindowContext.
private boolean isSelfOrOuterUiContext() {
// We may override outer context's isUiContext
return isUiContext() || getOuterContext() != null && getOuterContext().isUiContext();
}
/** @hide */
@Override
public boolean isUiContext() {
@@ -2389,7 +2389,7 @@ class ContextImpl extends Context {
context.setResources(createResources(mToken, mPackageInfo, mSplitName, displayId,
overrideConfiguration, getDisplayAdjustments(displayId).getCompatibilityInfo(),
mResources.getLoaders()));
context.mIsUiContext = isUiContext() || isOuterUiContext();
context.mIsUiContext = isSelfOrOuterUiContext();
return context;
}
@@ -2494,9 +2494,9 @@ class ContextImpl extends Context {
@Override
public Display getDisplay() {
if (!mIsSystemOrSystemUiContext && !mIsAssociatedWithDisplay) {
if (!mIsSystemOrSystemUiContext && !mIsAssociatedWithDisplay && !isSelfOrOuterUiContext()) {
throw new UnsupportedOperationException("Tried to obtain display from a Context not "
+ "associated with one. Only visual Contexts (such as Activity or one created "
+ "associated with one. Only visual Contexts (such as Activity or one created "
+ "with Context#createWindowContext) or ones created with "
+ "Context#createDisplayContext are associated with displays. Other types of "
+ "Contexts are typically related to background entities and may return an "