Merge "Verify enableOnBackInvokedCallback at the app-level if ActivityInfo is null" into udc-dev am: 379a3d5325 am: 569005ac9b

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

Change-Id: I866a7040a48233c7eed3f8e46953bfb06be423b2
Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
This commit is contained in:
Treehugger Robot
2023-04-27 17:34:42 +00:00
committed by Automerger Merge Worker

View File

@@ -21,6 +21,8 @@ import android.annotation.Nullable;
import android.app.Activity;
import android.content.Context;
import android.content.ContextWrapper;
import android.content.pm.ActivityInfo;
import android.content.pm.ApplicationInfo;
import android.os.Handler;
import android.os.RemoteException;
import android.os.SystemProperties;
@@ -421,36 +423,45 @@ public class WindowOnBackInvokedDispatcher implements OnBackInvokedDispatcher {
return false;
}
boolean requestsPredictiveBack;
boolean requestsPredictiveBack = false;
// Check if the context is from an activity.
while ((context instanceof ContextWrapper) && !(context instanceof Activity)) {
context = ((ContextWrapper) context).getBaseContext();
}
boolean shouldCheckActivity = false;
if (context instanceof Activity) {
final Activity activity = (Activity) context;
if (activity.getActivityInfo().hasOnBackInvokedCallbackEnabled()) {
requestsPredictiveBack =
activity.getActivityInfo().isOnBackInvokedCallbackEnabled();
} else {
requestsPredictiveBack =
context.getApplicationInfo().isOnBackInvokedCallbackEnabled();
}
final ActivityInfo activityInfo = activity.getActivityInfo();
if (activityInfo != null) {
if (activityInfo.hasOnBackInvokedCallbackEnabled()) {
shouldCheckActivity = true;
requestsPredictiveBack = activityInfo.isOnBackInvokedCallbackEnabled();
if (DEBUG) {
Log.d(TAG, TextUtils.formatSimple("Activity: %s isPredictiveBackEnabled=%s",
activity.getComponentName(),
requestsPredictiveBack));
if (DEBUG) {
Log.d(TAG, TextUtils.formatSimple(
"Activity: %s isPredictiveBackEnabled=%s",
activity.getComponentName(),
requestsPredictiveBack));
}
}
} else {
Log.w(TAG, "The ActivityInfo is null, so we cannot verify if this Activity"
+ " has the 'android:enableOnBackInvokedCallback' attribute."
+ " The application attribute will be used as a fallback.");
}
} else {
requestsPredictiveBack =
context.getApplicationInfo().isOnBackInvokedCallbackEnabled();
}
if (!shouldCheckActivity) {
final ApplicationInfo applicationInfo = context.getApplicationInfo();
requestsPredictiveBack = applicationInfo.isOnBackInvokedCallbackEnabled();
if (DEBUG) {
Log.d(TAG, TextUtils.formatSimple("App: %s requestsPredictiveBack=%s",
context.getApplicationInfo().packageName,
applicationInfo.packageName,
requestsPredictiveBack));
}
}