Loading src/com/android/settings/applications/AppStorageSettings.java +0 −22 Original line number Diff line number Diff line Loading @@ -615,28 +615,6 @@ public class AppStorageSettings extends AppInfoWithHeader } }; public static CharSequence getSummary(AppEntry appEntry, Context context) { if (appEntry.size == ApplicationsState.SIZE_INVALID || appEntry.size == ApplicationsState.SIZE_UNKNOWN) { return context.getText(R.string.computing_size); } else { CharSequence storageType = context.getString( (appEntry.info.flags & ApplicationInfo.FLAG_EXTERNAL_STORAGE) != 0 ? R.string.storage_type_external : R.string.storage_type_internal); return context.getString(R.string.storage_summary_format, getSize(appEntry, context), storageType); } } private static CharSequence getSize(AppEntry appEntry, Context context) { long size = appEntry.size; if (size == SIZE_INVALID) { return context.getText(R.string.invalid_size_value); } return Formatter.formatFileSize(context, size); } @Override public int getMetricsCategory() { return MetricsEvent.APPLICATIONS_APP_STORAGE; Loading src/com/android/settings/applications/InstalledAppDetails.java +51 −6 Original line number Diff line number Diff line Loading @@ -16,10 +16,13 @@ package com.android.settings.applications; import static com.android.settingslib.RestrictedLockUtils.EnforcedAdmin; import android.Manifest.permission; import android.app.Activity; import android.app.ActivityManager; import android.app.AlertDialog; import android.app.LoaderManager; import android.app.LoaderManager.LoaderCallbacks; import android.app.admin.DevicePolicyManager; import android.content.ActivityNotFoundException; Loading Loading @@ -103,6 +106,8 @@ import com.android.settingslib.applications.ApplicationsState; import com.android.settingslib.applications.ApplicationsState.AppEntry; import com.android.settingslib.applications.PermissionsSummaryHelper; import com.android.settingslib.applications.PermissionsSummaryHelper.PermissionsResultCallback; import com.android.settingslib.applications.StorageStatsSource; import com.android.settingslib.applications.StorageStatsSource.AppStorageStats; import com.android.settingslib.net.ChartData; import com.android.settingslib.net.ChartDataLoader; Loading @@ -111,8 +116,6 @@ import java.util.ArrayList; import java.util.HashSet; import java.util.List; import static com.android.settingslib.RestrictedLockUtils.EnforcedAdmin; /** * Activity to display application information from Settings. This activity presents * extended information associated with a package like code, data, total size, permissions Loading @@ -123,7 +126,8 @@ import static com.android.settingslib.RestrictedLockUtils.EnforcedAdmin; * uninstall the application. */ public class InstalledAppDetails extends AppInfoBase implements View.OnClickListener, OnPreferenceClickListener { implements View.OnClickListener, OnPreferenceClickListener, LoaderManager.LoaderCallbacks<AppStorageStats> { private static final String LOG_TAG = "InstalledAppDetails"; Loading @@ -138,6 +142,7 @@ public class InstalledAppDetails extends AppInfoBase private static final int SUB_INFO_FRAGMENT = 1; private static final int LOADER_CHART_DATA = 2; private static final int LOADER_STORAGE = 3; private static final int DLG_FORCE_STOP = DLG_BASE + 1; private static final int DLG_DISABLE = DLG_BASE + 2; Loading Loading @@ -191,6 +196,8 @@ public class InstalledAppDetails extends AppInfoBase protected ProcStatsData mStatsManager; protected ProcStatsPackageEntry mStats; private AppStorageStats mLastResult; private boolean handleDisableable(Button button) { boolean disableable = false; // Try to prevent the user from bricking their phone Loading Loading @@ -359,13 +366,14 @@ public class InstalledAppDetails extends AppInfoBase if (mFinishing) { return; } mState.requestSize(mPackageName, mUserId); AppItem app = new AppItem(mAppEntry.info.uid); app.addUid(mAppEntry.info.uid); if (mStatsSession != null) { getLoaderManager().restartLoader(LOADER_CHART_DATA, LoaderManager loaderManager = getLoaderManager(); loaderManager.restartLoader(LOADER_CHART_DATA, ChartDataLoader.buildArgs(getTemplate(getContext()), app), mDataCallbacks); loaderManager.restartLoader(LOADER_STORAGE, Bundle.EMPTY, this); } new BatteryUpdater().execute(); new MemoryUpdater().execute(); Loading Loading @@ -536,6 +544,23 @@ public class InstalledAppDetails extends AppInfoBase } } @Override public Loader<AppStorageStats> onCreateLoader(int id, Bundle args) { Context context = getContext(); return new FetchPackageStorageAsyncLoader( context, new StorageStatsSource(context), mAppEntry.info, UserHandle.of(mUserId)); } @Override public void onLoadFinished(Loader<AppStorageStats> loader, AppStorageStats result) { mLastResult = result; refreshUi(); } @Override public void onLoaderReset(Loader<AppStorageStats> loader) { } // Utility method to set application label and icon. private void setAppLabelAndIcon(PackageInfo pkgInfo) { final View appSnippet = mHeader.findViewById(R.id.app_snippet); Loading Loading @@ -638,7 +663,8 @@ public class InstalledAppDetails extends AppInfoBase // Update the preference summaries. Activity context = getActivity(); mStoragePreference.setSummary(AppStorageSettings.getSummary(mAppEntry, context)); boolean isExternal = ((mAppEntry.info.flags & ApplicationInfo.FLAG_EXTERNAL_STORAGE) != 0); mStoragePreference.setSummary(getStorageSummary(context, mLastResult, isExternal)); PermissionsSummaryHelper.getPermissionSummary(getContext(), mPackageName, mPermissionCallback); Loading Loading @@ -707,6 +733,25 @@ public class InstalledAppDetails extends AppInfoBase return getString(R.string.computing_size); } @VisibleForTesting static CharSequence getStorageSummary( Context context, AppStorageStats stats, boolean isExternal) { if (stats == null) { return context.getText(R.string.computing_size); } else { CharSequence storageType = context.getString(isExternal ? R.string.storage_type_external : R.string.storage_type_internal); return context.getString(R.string.storage_summary_format, getSize(context, stats), storageType); } } private static CharSequence getSize(Context context, AppStorageStats stats) { return Formatter.formatFileSize(context, stats.getTotalBytes()); } @Override protected AlertDialog createDialog(int id, int errorCode) { switch (id) { Loading tests/robotests/src/com/android/settings/applications/InstalledAppDetailsTest.java +29 −5 Original line number Diff line number Diff line Loading @@ -16,7 +16,14 @@ package com.android.settings.applications; import static com.google.common.truth.Truth.assertThat; import static org.mockito.Matchers.anyString; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; import android.app.admin.DevicePolicyManager; import android.content.Context; import android.content.pm.ApplicationInfo; import android.content.pm.PackageInfo; import android.os.UserManager; Loading @@ -25,6 +32,7 @@ import com.android.settings.R; import com.android.settings.SettingsRobolectricTestRunner; import com.android.settings.TestConfig; import com.android.settingslib.applications.ApplicationsState.AppEntry; import com.android.settingslib.applications.StorageStatsSource.AppStorageStats; import org.junit.Before; import org.junit.Test; Loading @@ -32,14 +40,10 @@ import org.junit.runner.RunWith; import org.mockito.Answers; import org.mockito.Mock; import org.mockito.MockitoAnnotations; import org.robolectric.RuntimeEnvironment; import org.robolectric.annotation.Config; import org.robolectric.util.ReflectionHelpers; import static com.google.common.truth.Truth.assertThat; import static org.mockito.Matchers.anyString; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; @RunWith(SettingsRobolectricTestRunner.class) @Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION) public final class InstalledAppDetailsTest { Loading Loading @@ -117,4 +121,24 @@ public final class InstalledAppDetailsTest { assertThat(mAppDetail.shouldShowUninstallForAll(appEntry)).isFalse(); } @Test public void getStorageSummary_shouldWorkForExternal() { Context context = RuntimeEnvironment.application.getApplicationContext(); AppStorageStats stats = mock(AppStorageStats.class); when(stats.getTotalBytes()).thenReturn(1L); assertThat(InstalledAppDetails.getStorageSummary(context, stats, true)) .isEqualTo("1.00B used in External storage"); } @Test public void getStorageSummary_shouldWorkForInternal() { Context context = RuntimeEnvironment.application.getApplicationContext(); AppStorageStats stats = mock(AppStorageStats.class); when(stats.getTotalBytes()).thenReturn(1L); assertThat(InstalledAppDetails.getStorageSummary(context, stats, false)) .isEqualTo("1.00B used in Internal storage"); } } Loading
src/com/android/settings/applications/AppStorageSettings.java +0 −22 Original line number Diff line number Diff line Loading @@ -615,28 +615,6 @@ public class AppStorageSettings extends AppInfoWithHeader } }; public static CharSequence getSummary(AppEntry appEntry, Context context) { if (appEntry.size == ApplicationsState.SIZE_INVALID || appEntry.size == ApplicationsState.SIZE_UNKNOWN) { return context.getText(R.string.computing_size); } else { CharSequence storageType = context.getString( (appEntry.info.flags & ApplicationInfo.FLAG_EXTERNAL_STORAGE) != 0 ? R.string.storage_type_external : R.string.storage_type_internal); return context.getString(R.string.storage_summary_format, getSize(appEntry, context), storageType); } } private static CharSequence getSize(AppEntry appEntry, Context context) { long size = appEntry.size; if (size == SIZE_INVALID) { return context.getText(R.string.invalid_size_value); } return Formatter.formatFileSize(context, size); } @Override public int getMetricsCategory() { return MetricsEvent.APPLICATIONS_APP_STORAGE; Loading
src/com/android/settings/applications/InstalledAppDetails.java +51 −6 Original line number Diff line number Diff line Loading @@ -16,10 +16,13 @@ package com.android.settings.applications; import static com.android.settingslib.RestrictedLockUtils.EnforcedAdmin; import android.Manifest.permission; import android.app.Activity; import android.app.ActivityManager; import android.app.AlertDialog; import android.app.LoaderManager; import android.app.LoaderManager.LoaderCallbacks; import android.app.admin.DevicePolicyManager; import android.content.ActivityNotFoundException; Loading Loading @@ -103,6 +106,8 @@ import com.android.settingslib.applications.ApplicationsState; import com.android.settingslib.applications.ApplicationsState.AppEntry; import com.android.settingslib.applications.PermissionsSummaryHelper; import com.android.settingslib.applications.PermissionsSummaryHelper.PermissionsResultCallback; import com.android.settingslib.applications.StorageStatsSource; import com.android.settingslib.applications.StorageStatsSource.AppStorageStats; import com.android.settingslib.net.ChartData; import com.android.settingslib.net.ChartDataLoader; Loading @@ -111,8 +116,6 @@ import java.util.ArrayList; import java.util.HashSet; import java.util.List; import static com.android.settingslib.RestrictedLockUtils.EnforcedAdmin; /** * Activity to display application information from Settings. This activity presents * extended information associated with a package like code, data, total size, permissions Loading @@ -123,7 +126,8 @@ import static com.android.settingslib.RestrictedLockUtils.EnforcedAdmin; * uninstall the application. */ public class InstalledAppDetails extends AppInfoBase implements View.OnClickListener, OnPreferenceClickListener { implements View.OnClickListener, OnPreferenceClickListener, LoaderManager.LoaderCallbacks<AppStorageStats> { private static final String LOG_TAG = "InstalledAppDetails"; Loading @@ -138,6 +142,7 @@ public class InstalledAppDetails extends AppInfoBase private static final int SUB_INFO_FRAGMENT = 1; private static final int LOADER_CHART_DATA = 2; private static final int LOADER_STORAGE = 3; private static final int DLG_FORCE_STOP = DLG_BASE + 1; private static final int DLG_DISABLE = DLG_BASE + 2; Loading Loading @@ -191,6 +196,8 @@ public class InstalledAppDetails extends AppInfoBase protected ProcStatsData mStatsManager; protected ProcStatsPackageEntry mStats; private AppStorageStats mLastResult; private boolean handleDisableable(Button button) { boolean disableable = false; // Try to prevent the user from bricking their phone Loading Loading @@ -359,13 +366,14 @@ public class InstalledAppDetails extends AppInfoBase if (mFinishing) { return; } mState.requestSize(mPackageName, mUserId); AppItem app = new AppItem(mAppEntry.info.uid); app.addUid(mAppEntry.info.uid); if (mStatsSession != null) { getLoaderManager().restartLoader(LOADER_CHART_DATA, LoaderManager loaderManager = getLoaderManager(); loaderManager.restartLoader(LOADER_CHART_DATA, ChartDataLoader.buildArgs(getTemplate(getContext()), app), mDataCallbacks); loaderManager.restartLoader(LOADER_STORAGE, Bundle.EMPTY, this); } new BatteryUpdater().execute(); new MemoryUpdater().execute(); Loading Loading @@ -536,6 +544,23 @@ public class InstalledAppDetails extends AppInfoBase } } @Override public Loader<AppStorageStats> onCreateLoader(int id, Bundle args) { Context context = getContext(); return new FetchPackageStorageAsyncLoader( context, new StorageStatsSource(context), mAppEntry.info, UserHandle.of(mUserId)); } @Override public void onLoadFinished(Loader<AppStorageStats> loader, AppStorageStats result) { mLastResult = result; refreshUi(); } @Override public void onLoaderReset(Loader<AppStorageStats> loader) { } // Utility method to set application label and icon. private void setAppLabelAndIcon(PackageInfo pkgInfo) { final View appSnippet = mHeader.findViewById(R.id.app_snippet); Loading Loading @@ -638,7 +663,8 @@ public class InstalledAppDetails extends AppInfoBase // Update the preference summaries. Activity context = getActivity(); mStoragePreference.setSummary(AppStorageSettings.getSummary(mAppEntry, context)); boolean isExternal = ((mAppEntry.info.flags & ApplicationInfo.FLAG_EXTERNAL_STORAGE) != 0); mStoragePreference.setSummary(getStorageSummary(context, mLastResult, isExternal)); PermissionsSummaryHelper.getPermissionSummary(getContext(), mPackageName, mPermissionCallback); Loading Loading @@ -707,6 +733,25 @@ public class InstalledAppDetails extends AppInfoBase return getString(R.string.computing_size); } @VisibleForTesting static CharSequence getStorageSummary( Context context, AppStorageStats stats, boolean isExternal) { if (stats == null) { return context.getText(R.string.computing_size); } else { CharSequence storageType = context.getString(isExternal ? R.string.storage_type_external : R.string.storage_type_internal); return context.getString(R.string.storage_summary_format, getSize(context, stats), storageType); } } private static CharSequence getSize(Context context, AppStorageStats stats) { return Formatter.formatFileSize(context, stats.getTotalBytes()); } @Override protected AlertDialog createDialog(int id, int errorCode) { switch (id) { Loading
tests/robotests/src/com/android/settings/applications/InstalledAppDetailsTest.java +29 −5 Original line number Diff line number Diff line Loading @@ -16,7 +16,14 @@ package com.android.settings.applications; import static com.google.common.truth.Truth.assertThat; import static org.mockito.Matchers.anyString; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; import android.app.admin.DevicePolicyManager; import android.content.Context; import android.content.pm.ApplicationInfo; import android.content.pm.PackageInfo; import android.os.UserManager; Loading @@ -25,6 +32,7 @@ import com.android.settings.R; import com.android.settings.SettingsRobolectricTestRunner; import com.android.settings.TestConfig; import com.android.settingslib.applications.ApplicationsState.AppEntry; import com.android.settingslib.applications.StorageStatsSource.AppStorageStats; import org.junit.Before; import org.junit.Test; Loading @@ -32,14 +40,10 @@ import org.junit.runner.RunWith; import org.mockito.Answers; import org.mockito.Mock; import org.mockito.MockitoAnnotations; import org.robolectric.RuntimeEnvironment; import org.robolectric.annotation.Config; import org.robolectric.util.ReflectionHelpers; import static com.google.common.truth.Truth.assertThat; import static org.mockito.Matchers.anyString; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; @RunWith(SettingsRobolectricTestRunner.class) @Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION) public final class InstalledAppDetailsTest { Loading Loading @@ -117,4 +121,24 @@ public final class InstalledAppDetailsTest { assertThat(mAppDetail.shouldShowUninstallForAll(appEntry)).isFalse(); } @Test public void getStorageSummary_shouldWorkForExternal() { Context context = RuntimeEnvironment.application.getApplicationContext(); AppStorageStats stats = mock(AppStorageStats.class); when(stats.getTotalBytes()).thenReturn(1L); assertThat(InstalledAppDetails.getStorageSummary(context, stats, true)) .isEqualTo("1.00B used in External storage"); } @Test public void getStorageSummary_shouldWorkForInternal() { Context context = RuntimeEnvironment.application.getApplicationContext(); AppStorageStats stats = mock(AppStorageStats.class); when(stats.getTotalBytes()).thenReturn(1L); assertThat(InstalledAppDetails.getStorageSummary(context, stats, false)) .isEqualTo("1.00B used in Internal storage"); } }