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

Commit 5184c9b0 authored by Raff Tsai's avatar Raff Tsai
Browse files

Fix Settings crash

- When user leaves WiFi control page, ApplicationState session
is onpause(), and removes all handler callback. But if a callback
is fired, remove callback can not remove it. Therefore Wifi callback
is received in Special app access page which is loading DataUsageState.
It caused object cast error because wifi callback want to cast
DataUsageState data to WifiSettingsState.
- The solution is do not rebuildList in paused state.

Fixes: 141321483
Test: manual, robolectric
Change-Id: I6690277932ccfcd332fc1432feafbc907fc79524
parent 85ce7cb0
Loading
Loading
Loading
Loading
+6 −2
Original line number Diff line number Diff line
@@ -865,6 +865,10 @@ public class ApplicationsState {
        void handleRebuildList() {
            AppFilter filter;
            Comparator<AppEntry> comparator;

            if (!mResumed) {
                return;
            }
            synchronized (mRebuildSync) {
                if (!mRebuildRequested) {
                    return;
@@ -1069,8 +1073,8 @@ public class ApplicationsState {
                }
            }
            if (rebuildingSessions != null) {
                for (int i = 0; i < rebuildingSessions.size(); i++) {
                    rebuildingSessions.get(i).handleRebuildList();
                for (Session session : rebuildingSessions) {
                    session.handleRebuildList();
                }
            }

+14 −1
Original line number Diff line number Diff line
@@ -269,7 +269,7 @@ public class ApplicationsStateRoboTest {
    }

    @Test
    public void testDefaultSessionLoadsAll() {
    public void testDefaultSession_isResumed_LoadsAll() {
        mSession.onResume();

        addApp(HOME_PACKAGE_NAME, 1);
@@ -295,6 +295,19 @@ public class ApplicationsStateRoboTest {
        assertThat(launchableEntry.launcherEntryEnabled).isTrue();
    }

    @Test
    public void testDefaultSession_isPaused_NotLoadsAll() {
        mSession.onResume();

        addApp(HOME_PACKAGE_NAME, 1);
        addApp(LAUNCHABLE_PACKAGE_NAME, 2);
        mSession.mResumed = false;
        mSession.rebuild(ApplicationsState.FILTER_EVERYTHING, ApplicationsState.SIZE_COMPARATOR);
        processAllMessages();

        verify(mCallbacks, never()).onRebuildComplete(mAppEntriesCaptor.capture());
    }

    @Test
    public void testCustomSessionLoadsIconsOnly() {
        mSession.setSessionFlags(ApplicationsState.FLAG_SESSION_REQUEST_ICONS);