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

Commit 637d4191 authored by Raff Tsai's avatar Raff Tsai
Browse files

Fix crash after uninstalling app

updateState was invoked in loader callback. But the
package was uninstalled at the callback time caused
null pointer exception. Add null check to prevent
null pointer access.

Fixes: 136170218
Fixes: 133771724
Test: make RunSettingsRoboTests, manual
Change-Id: I2715e77f6e32af42a4bce70c9f409b0311eb36c4
(cherry picked from commit 790a8225)
parent c563fbb9
Loading
Loading
Loading
Loading
+7 −3
Original line number Diff line number Diff line
@@ -31,6 +31,7 @@ import com.android.settings.R;
import com.android.settings.SettingsPreferenceFragment;
import com.android.settings.applications.AppStorageSettings;
import com.android.settings.applications.FetchPackageStorageAsyncLoader;
import com.android.settingslib.applications.ApplicationsState;
import com.android.settingslib.applications.StorageStatsSource;
import com.android.settingslib.core.lifecycle.LifecycleObserver;
import com.android.settingslib.core.lifecycle.events.OnPause;
@@ -48,10 +49,13 @@ public class AppStoragePreferenceController extends AppInfoPreferenceControllerB

    @Override
    public void updateState(Preference preference) {
        final ApplicationsState.AppEntry entry = mParent.getAppEntry();
        if (entry != null && entry.info != null) {
            final boolean isExternal =
                (mParent.getAppEntry().info.flags & ApplicationInfo.FLAG_EXTERNAL_STORAGE) != 0;
                    (entry.info.flags & ApplicationInfo.FLAG_EXTERNAL_STORAGE) != 0;
            preference.setSummary(getStorageSummary(mLastResult, isExternal));
        }
    }

    @Override
    public void onResume() {
+11 −0
Original line number Diff line number Diff line
@@ -21,6 +21,7 @@ import static com.google.common.truth.Truth.assertThat;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.Mockito.doReturn;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.never;
import static org.mockito.Mockito.spy;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
@@ -99,6 +100,16 @@ public class AppStoragePreferenceControllerTest {
        verify(preference).setSummary(any());
    }

    @Test
    public void updateState_entryIsNull_shouldNotUpdatePreferenceSummary() {
        when(mFragment.getAppEntry()).thenReturn(null);
        Preference preference = mock(Preference.class);

        mController.updateState(preference);

        verify(preference, never()).setSummary(any());
    }

    @Test
    public void getStorageSummary_shouldWorkForExternal() {
        final StorageStatsSource.AppStorageStats stats =