Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit a866e54d authored by Nate Myren's avatar Nate Myren
Browse files

Post the starting of the Notification dialog

This ensures the checks for notification channels happen outside the
WindowManagerGlobalLock-held callback methods

Fixes: 228153810
Test: manual
Change-Id: Ie6a77b81afae36437e1410ba157c9e4359f9031d
parent 67617005
Loading
Loading
Loading
Loading
+9 −2
Original line number Diff line number Diff line
@@ -59,6 +59,8 @@ import android.content.pm.PackageManagerInternal.PackageListObserver;
import android.content.pm.PermissionInfo;
import android.os.Build;
import android.os.Bundle;
import android.os.Handler;
import android.os.Looper;
import android.os.Process;
import android.os.RemoteException;
import android.os.ServiceManager;
@@ -160,11 +162,13 @@ public final class PermissionPolicyService extends SystemService {
    private NotificationManagerInternal mNotificationManager;
    private final KeyguardManager mKeyguardManager;
    private final PackageManager mPackageManager;
    private final Handler mHandler;

    public PermissionPolicyService(@NonNull Context context) {
        super(context);

        mContext = context;
        mHandler = new Handler(Looper.getMainLooper());
        mPackageManager = context.getPackageManager();
        mKeyguardManager = context.getSystemService(KeyguardManager.class);
        LocalServices.addService(PermissionPolicyInternal.class, new Internal());
@@ -1068,8 +1072,11 @@ public final class PermissionPolicyService extends SystemService {
                                activityInfo.packageName, user)) {
                            clearNotificationReviewFlagsIfNeeded(activityInfo.packageName, user);
                        } else {
                            showNotificationPromptIfNeeded(activityInfo.packageName,
                                    taskInfo.userId, taskInfo.taskId, info);
                            // Post the activity start checks to ensure the notification channel
                            // checks happen outside the WindowManager global lock.
                            mHandler.post(() -> showNotificationPromptIfNeeded(
                                    activityInfo.packageName, taskInfo.userId, taskInfo.taskId,
                                    info));
                        }
                    }
                };
+2 −1
Original line number Diff line number Diff line
@@ -29,7 +29,8 @@ import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;

/**
 * Callback to intercept activity starts and possibly block/redirect them.
 * Callback to intercept activity starts and possibly block/redirect them. The callback methods will
 * be called with the WindowManagerGlobalLock held.
 */
public abstract class ActivityInterceptorCallback {
    /**