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

Commit a4b4184f authored by Fabian Kozynski's avatar Fabian Kozynski
Browse files

Clear AppOpsController when it stops listening

If AppOpsController stops listening, the lists were not cleared and it
may not receive the update to remove an active AppOp. To make sure that
we do not show outdated behavior once the controller is listening again,
we clear the lists on setListening(false).

When the controller goes back to listening, we will not have information
of anything that happened while the controller was not listening.

Test: atest AppOpsControllerTest
Fixes: 133263799
Change-Id: I2827b03d39d3b16c9cf6593537f7c1e30d7946f5
parent 738c9823
Loading
Loading
Loading
Loading
+7 −0
Original line number Original line Diff line number Diff line
@@ -100,6 +100,13 @@ public class AppOpsControllerImpl implements AppOpsController,
        } else {
        } else {
            mAppOps.stopWatchingActive(this);
            mAppOps.stopWatchingActive(this);
            mAppOps.stopWatchingNoted(this);
            mAppOps.stopWatchingNoted(this);
            mBGHandler.removeCallbacksAndMessages(null); // null removes all
            synchronized (mActiveItems) {
                mActiveItems.clear();
            }
            synchronized (mNotedItems) {
                mNotedItems.clear();
            }
        }
        }
    }
    }


+20 −0
Original line number Original line Diff line number Diff line
@@ -16,7 +16,10 @@


package com.android.systemui.appops;
package com.android.systemui.appops;


import static junit.framework.TestCase.assertFalse;

import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.ArgumentMatchers.anyBoolean;
import static org.mockito.ArgumentMatchers.anyBoolean;
import static org.mockito.ArgumentMatchers.anyInt;
import static org.mockito.ArgumentMatchers.anyInt;
@@ -189,4 +192,21 @@ public class AppOpsControllerTest extends SysuiTestCase {
                AppOpsManager.MODE_ALLOWED);
                AppOpsManager.MODE_ALLOWED);
        verify(mMockHandler).scheduleRemoval(any(AppOpItem.class), anyLong());
        verify(mMockHandler).scheduleRemoval(any(AppOpItem.class), anyLong());
    }
    }

    @Test
    public void noItemsAfterStopListening() {
        mController.setBGHandler(mMockHandler);

        mController.setListening(true);
        mController.onOpActiveChanged(AppOpsManager.OP_FINE_LOCATION, TEST_UID, TEST_PACKAGE_NAME,
                true);
        mController.onOpNoted(AppOpsManager.OP_FINE_LOCATION, TEST_UID, TEST_PACKAGE_NAME,
                AppOpsManager.MODE_ALLOWED);
        assertFalse(mController.getActiveAppOps().isEmpty());

        mController.setListening(false);

        verify(mMockHandler).removeCallbacksAndMessages(null);
        assertTrue(mController.getActiveAppOps().isEmpty());
    }
}
}