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

Commit 0b534d74 authored by TreeHugger Robot's avatar TreeHugger Robot Committed by Android (Google) Code Review
Browse files

Merge "Call appOps changed from main thread"

parents e619f7ac d30d6d06
Loading
Loading
Loading
Loading
+13 −5
Original line number Diff line number Diff line
@@ -16,6 +16,7 @@ package com.android.systemui;

import android.annotation.Nullable;
import android.app.AppOpsManager;
import android.os.Handler;
import android.os.UserHandle;
import android.service.notification.StatusBarNotification;
import android.util.ArraySet;
@@ -23,13 +24,13 @@ import android.util.SparseArray;

import com.android.internal.messages.nano.SystemMessageProto;
import com.android.systemui.appops.AppOpsController;
import com.android.systemui.dagger.qualifiers.MainHandler;
import com.android.systemui.statusbar.notification.NotificationEntryManager;
import com.android.systemui.statusbar.notification.collection.NotificationEntry;

import javax.inject.Inject;
import javax.inject.Singleton;


/**
 * Tracks state of foreground services and notifications related to foreground services per user.
 */
@@ -44,12 +45,18 @@ public class ForegroundServiceController {
    private final SparseArray<ForegroundServicesUserState> mUserServices = new SparseArray<>();
    private final Object mMutex = new Object();
    private final NotificationEntryManager mEntryManager;
    private final Handler mMainHandler;

    @Inject
    public ForegroundServiceController(NotificationEntryManager entryManager,
            AppOpsController appOpsController) {
            AppOpsController appOpsController, @MainHandler Handler mainHandler) {
        mEntryManager = entryManager;
        appOpsController.addCallback(APP_OPS, this::onAppOpChanged);
        mMainHandler = mainHandler;
        appOpsController.addCallback(APP_OPS, (code, uid, packageName, active) -> {
            mMainHandler.post(() -> {
                onAppOpChanged(code, uid, packageName, active);
            });
        });
    }

    /**
@@ -113,7 +120,7 @@ public class ForegroundServiceController {
     * @param packageName package that created the notification
     * @param active whether the appOpCode is active or not
     */
    public void onAppOpChanged(int appOpCode, int uid, String packageName, boolean active) {
    void onAppOpChanged(int appOpCode, int uid, String packageName, boolean active) {
        int userId = UserHandle.getUserId(uid);
        // Record active app ops
        synchronized (mMutex) {
@@ -132,7 +139,8 @@ public class ForegroundServiceController {
        // Update appOp if there's an associated pending or visible notification:
        final String foregroundKey = getStandardLayoutKey(userId, packageName);
        if (foregroundKey != null) {
            final NotificationEntry entry = mEntryManager.getPendingOrCurrentNotif(foregroundKey);
            final NotificationEntry entry = mEntryManager.getPendingOrCurrentNotif(
                    foregroundKey);
            if (entry != null
                    && uid == entry.getSbn().getUid()
                    && packageName.equals(entry.getSbn().getPackageName())) {
+3 −1
Original line number Diff line number Diff line
@@ -33,6 +33,7 @@ import android.app.AppOpsManager;
import android.app.Notification;
import android.app.NotificationManager;
import android.os.Bundle;
import android.os.Handler;
import android.os.UserHandle;
import android.service.notification.StatusBarNotification;
import android.widget.RemoteViews;
@@ -64,11 +65,12 @@ public class ForegroundServiceControllerTest extends SysuiTestCase {
    private NotificationEntryListener mEntryListener;
    @Mock private NotificationEntryManager mEntryManager;
    @Mock private AppOpsController mAppOpsController;
    @Mock private Handler mMainHandler;

    @Before
    public void setUp() throws Exception {
        MockitoAnnotations.initMocks(this);
        mFsc = new ForegroundServiceController(mEntryManager, mAppOpsController);
        mFsc = new ForegroundServiceController(mEntryManager, mAppOpsController, mMainHandler);
        mListener = new ForegroundServiceNotificationListener(
                mContext, mFsc, mEntryManager);
        ArgumentCaptor<NotificationEntryListener> entryListenerCaptor =