Commit Graph

87 Commits

Author SHA1 Message Date
Edgar Wang
4bd401adf4 Update the API usage to get total size of devices
StorageStatsManager fixed in StorageStatsService#getTotalBytes
So that we should change back to call the API.

Bug: 295358118
Bug: 288103116
Test: verified manually
Change-Id: I3dcc9698403612f961cf0de41925dcbcb43e260b
(cherry picked from commit 2d57d002ae)
2023-08-30 13:28:46 +00:00
Edgar Wang
3335c72da9 Correct used size of Storage Settings.
Since StorageManager rounded the totalBytes of device storage but
they don't do that rounding for freeBytes.
So in some cases the freeBytes can be greater than totalBytes.

We propose to get totalBytes of device storage directly to calculate
correct privateUsedBytes.

Test: robotest
Bug: 281955532
Change-Id: I4f137c20e7c2f54f4e037d50e81b3176edc1a83a
(cherry picked from commit e52320e755)
2023-07-04 09:56:35 +00:00
Arc Wang
ccf4fa052a Should not show loading animation after size loading complete
SettingsPreferenceFragment#setLoading(boolean loading, boolean animate)
shows loading animation when 'animate' parameter is true.

This change sets 'animate' parameter false to fix this issue.

Bug: 254003456
Test: manual visual
      Settings -> Storage -> Free up space -> back
      then see if loading animation shows.
Change-Id: Ic804bcf950a9c57297ccefd6e942edea0b792a3b
2022-11-18 17:34:00 +08:00
Tetiana Meronyk
5c0bb75de8 Show other users in storage settings
Bug: 232969364
Test: croot && make RunSettingsRoboTests -j40 ROBOTEST_FILTER="com.android.settings.deviceinfo.storage.NonCurrentUserControllerTest"
Change-Id: I8d933bec8f12faa971684939b722cfae957f4953
2022-10-19 10:44:06 +00:00
ot904699
aa76620073 Fix USB OTG hot plug out nndexOutOfBoundsException
Open Settings, then open Storage , plug in USB OTG with Disk, select Disk, open Files, play a video, press the back key, hot plug out USB OTG, the IndexOutOfBoundsException will happen

The root cause is when received the onVolumeStateChanged in StorageEventListener in StorageDashboardFragment, the volumeInfo
status is VolumeInfo.STATE_UNMOUNTED or VolumeInfo.STATE_EJECTING, mSelectedStorageEntry set to changedStorageEntry, cause the fail.

This is a fix for CL 225095144 bug.

Bug: 247737688
Test: Manual

Change-Id: I9535c49d65c42a8dfa8ccf4e271ae973d944d4b9
2022-09-26 08:15:48 +00:00
Treehugger Robot
22c4b4009b Merge "[ALPSxxxxxxxx] Storage view is white and cannot show any info" am: 24f96c2c2e am: 2341b91f32
Original change: https://android-review.googlesource.com/c/platform/packages/apps/Settings/+/2092346

Change-Id: I1fd069da08f2931ee00c7adb08df56fc4fb976b3
Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
2022-05-30 03:44:42 +00:00
Arc Wang
f81a4817f2 Show USB flash drive in storage spinner when it's unmounted
Before this change, USB flash drive is removed from storage spinner
when it's unmounted (by option menu 'Eject'), however, USB flash
drive will show in storage spinner when Storage Settings page is
resumed again.

After this change, USB flash drive will show in storage spinner
even if it's unmounted. It will be removed until it's unplugged
from device.

Bug: 225095144
Test: manual visual
      Insert / Eject / Mount / unplug an USB flash drive and
      observe UI behavior.
Change-Id: I6b81766216c7850b018997f2de12a19d9d8675be
2022-05-12 16:17:12 +08:00
Ramneek Kalra
800152033e [ALPSxxxxxxxx] Storage view is white and cannot show any info
Storage view is white and cannot show any info while plug in/out u disk because the visibility of list view is gone.
This visibility is set when StorageDashboardFragment.java sets loading using API setLoading.
In error condition setloading was not called due to conditional statement.

After removing the conditional statement, it sets loading through which visibility of the list view is set to VISIBLE.

1. Enter Settings->Storage
2. Plug in U-disk, storage view will start updating
3. During storage view updating, plug out U-disk(before phone recognized and show U-disk)

Fix:
Bug:
Test:
Change-Id: Id7350909b614bbe9264910cab3cdeca616544618
CR-Id:
Feature:
2022-05-09 22:20:35 +05:30
Mill Chen
34eecaad79 Merge "Add cache mechanism for secondary users in Storage" into tm-dev 2022-04-08 05:48:45 +00:00
Arc Wang
b7409f8b39 Add work profile badge for icon of free up space
- Get badged icon from target app.
- Add card_preference layout file to align icon & text
  with other Preference.

Bug: 192555970
Test: manual visual
Change-Id: Id98d05e8871032ad61627783b8e47bfee1363448
2022-04-01 17:41:08 +08:00
Mill Chen
ee41ad89a9 Add cache mechanism for secondary users in Storage
To prevent from the flicker happening, the size info for secondary users
will be cached.

Bug: 220259287
Test: manual test
1) Create secondary user
2) Finish setup flow
3) Install any types of apps and try to change the storage size
4) Navigate to Settings > Storage
5) Observe the storage size and progress bar, they should have animation
   when storage size info updated.

Change-Id: Iff706b20446603f08334a0b782dd505ca78bdab2
2022-04-01 15:42:31 +08:00
Mill Chen
c23be3fa16 Cache mechanism for Storage page
- Use SharedPreference to cache the size info
- Improve the flicker problem on Documents & other preference
- The jobs are destroied on onPause to prevent the jobs being
  restarting when back to Storage page
- Enable progress bar animation for each storage item

Bug: 191117970
Test: manual test
1) The loading spinner will be shown when entering Storage page
   at first time.
2) Back to Settings homepage and switch back to Storage page, the
   loading spinner shouldn't be shown.
3) Click each preference in the Storage page and switch between these
   pages, the size info should be updated if something removed and the
   order of preference shouldn't be changed.

Change-Id: I75533742a025dc61116207285a894ee728d0af68
Merged-In: I75533742a025dc61116207285a894ee728d0af68
(cherry picked from commit 77775a66f2)
2022-02-23 08:15:14 +00:00
Arc Wang
5d6f9f714b Show full screen 'Free up space' for large screen devices am: ec350919ea am: ca79841b3a
Original change: https://googleplex-android-review.googlesource.com/c/platform/packages/apps/Settings/+/15809064

Change-Id: I20c452971da9e8342262727da79cb5f4aa224e4b
2021-09-24 06:55:11 +00:00
Arc Wang
ec350919ea Show full screen 'Free up space' for large screen devices
Uses Intent.FLAG_ACTIVITY_NEW_TASK to start the Activity
and it will shows in different Activity stack.
Then it shows full screen 'Free up space' for different
Activity stack.

Bug: 197703552
Test: manual
      Storage -> click 'Free up space'
Change-Id: I8ce16aa23438424d4990171449884755e36cf21d
2021-09-24 05:23:35 +00:00
Arc Wang
c6d5dcfc6c Remove no-used EntityHeaderController in Storage Settings
The EntityHeaderController is a workaround to fix header
shadow, however, the header shadow does not exist and it's
safe to remove the EntityHeaderController.

Bug: 183078080
Test: manual visual
Change-Id: I5197ec62edbe7ab3ff981895ec7ff267caeb9448
2021-07-05 10:55:02 +08:00
Arc Wang
51b3e7a093 Storage Settings hides categories when loading
To hide sorting animation.

- Storage Settings always loads cache and updates UI, then
  loads storage size and updates UI.
  Remove the chche design because storage category preferences
  will hide during loading, it no meaning to load from cache
  and update UI.

- Hides loading circle before storage category preferences
  become visible, it prevents flickers.

- Remove Calculating... summary of StorageItemPreference.

- Private storage category preferences and secondary user
  preference become visible at
  StorageItemPreferenceController#onLoadFinished.

Bug: 188731179
Bug: 185547228
Bug: 188615591
Test: atest com.android.settings.deviceinfo
      atest com.android.settings.deviceinfo.storage
      make RunSettingsRoboTests -j ROBOTEST_FILTER=com.android.settings.deviceinfo
      make RunSettingsRoboTests -j ROBOTEST_FILTER=com.android.settings.deviceinfo.storage
      manual visual
Change-Id: I3ebef5829ef4f806add07f58fa02520804768be5
2021-06-04 11:50:12 +08:00
Arc Wang
96b6106f2f Reduce flickers when launching Storage Settings
This change remove unnecessary UI dpdate of
StorageItemPreferenceController.

- For StorageItemPreferenceController:
  Remove UI update at #displayPreference since onLoadFinished will update.
  Don't update order at #setVolume since onLoadFinished will update.

- StorageDashboardFragment & StorageCategoryFragment update
  StorageItemPreferenceController only when both StorageInfo
  and StorageResult are loaded.

Bug: 185547228
Test: atest com.android.settings.deviceinfo
      atest com.android.settings.deviceinfo.storage
      make RunSettingsRoboTests -j ROBOTEST_FILTER=com.android.settings.deviceinfo
      make RunSettingsRoboTests -j ROBOTEST_FILTER=com.android.settings.deviceinfo.storage
      manual visual
      Click each file category to count files size is the same as
      displayed in Storage Settings.
      manual visual
Change-Id: Id449003827a3e340e7a90f706152100b5568f834
2021-05-31 12:48:02 +00:00
Arc Wang
044c91cc70 Query storage size instead of calculate size of installed APP
From android S, Storage Settings show files of images/videos/audios
category instead of installed APP of each category. So it's
necessary to change the way to calculate size information.

This change also
- StorageItemPreference shows changing storage size units instead
  of fixed GB. It helps UX for categories of only small size files.
- Query media provider for size of Documents and others.
- Query media provider for size of Trash.

Bug: 170918505
Bug: 177892478
Bug: 179871408
Bug: 184379946
Bug: 186077224
Bug: 187128447
Test: atest com.android.settings.deviceinfo
      atest com.android.settings.deviceinfo.storage
      make RunSettingsRoboTests -j ROBOTEST_FILTER=com.android.settings.deviceinfo
      make RunSettingsRoboTests -j ROBOTEST_FILTER=com.android.settings.deviceinfo.storage
      manual visual
      Click each file category to count files size is the same as
      displayed in Storage Settings.
Change-Id: I37c7b3a4b5860323cb55581b23a90f583f4af216
2021-05-25 23:44:21 +08:00
Arc Wang
c0b5ba5225 Storage Settings shift profile selection tab position
In this change, Storage Settings main UI is composed by 3 fragments.

StorageDashboardFragment only shows when there is only personal profile for
current user.

ProfileSelectStorageFragment (controls preferences above profile tab) and
StorageDashboardNoHeaderFragment (controls preferences below profile tab)
only show when current user has installed work profile.

Bug: 174964885
Test: atest com.android.settings.deviceinfo
      atest com.android.settings.deviceinfo.storage
      make RunSettingsRoboTests -j ROBOTEST_FILTER=com.android.settings.deviceinfo
      make RunSettingsRoboTests -j ROBOTEST_FILTER=com.android.settings.deviceinfo.storage
Change-Id: I50dea2fbcae39a1488e648f3ca615f54840e19d5
2021-05-17 14:07:24 +08:00
Arc Wang
543068210f Implements profile selection tab in Storage Settings
- StorageDashboardFragment and StorageItemPreferenceController works only
  for one profile per instance.
- StorageAsyncLoader loads for all users(profiles) and regards each user independent.
- SecondaryUserController will not load personal profile user in work profile tab.
- Cleanup some unused profile related files.

Bug: 174964885
Test: atest com.android.settings.deviceinfo
      atest com.android.settings.deviceinfo.storage
      make RunSettingsRoboTests -j ROBOTEST_FILTER=com.android.settings.deviceinfo
      make RunSettingsRoboTests -j ROBOTEST_FILTER=com.android.settings.deviceinfo.storage
Change-Id: I8361c29bc240c519c7261b19522c41439479c1c2
Merged-In: I8361c29bc240c519c7261b19522c41439479c1c2
2021-05-11 20:00:08 +08:00
Mill Chen
e545bff7da Apply the correct style to Battery and Storage page
Since some pages were styling the action bar programmatically before, the
color of collapsing toolbar will be overridden. Removing them will fix
the problem with inconsist color. This change also fixed some pages with
inconsist theme.

Bug: 185444608
Test: visual verified
1) Settings -> Battery / Storage
2) Scrolling the collapsing toolbar and make it collapsed
3) Observe and see if the color of toolbar is different from the one of
status bar

Change-Id: I5e792747ea3f4deb05428ea5afe6a64f29f9da89
2021-04-16 00:25:50 +08:00
Arc Wang
c626380689 Show "Files" category for public storage in Storage Settings
Users can click this preference to see public storage files
in external file browsers.

Bug: 170918505
Test: make RunSettingsRoboTests ROBOTEST_FILTER=StorageItemPreferenceControllerTest
      manual
      Select private storage and public storage and observe UI
Change-Id: If3f0d59b2ebf941d70e81e60c4c2015b80e7cf33
2021-03-30 15:51:49 +08:00
Arc Wang
40396d532f Only show storage category stats preferences for private volumes
Hide it because there is no framework API to get storage
category stats of public volumes.

Bug: 174964885
Test: manual
      Observe storage settings UI of a USB flash drive.
Change-Id: I7272cd18c186793f86548a87b5cb88bb957ff8d5
2021-03-22 16:28:59 +08:00
Arc Wang
c22749530b Add option menu in StorageDashboardFragment
Add option menu for each kind of storage

1. Unsupported disk: Format.
2. Missing volume record: Forget.
3. Unmounted storage: Mount.
4. Default internal storage: Migrate.
5. Private volume: Rename / Unmount / Format as portable / Migrate.
6. Publuc volume: Rename / Unmount / Format / Format as internal.

Bug: 174964885
Test: atest VolumeOptionMenuControllerTest
Change-Id: I85fa117ff0a49ec7a53ba36580591c7ce7f5a8dc
Merged-In: I85fa117ff0a49ec7a53ba36580591c7ce7f5a8dc
2021-03-19 18:08:48 +08:00
Arc Wang
d496a737ce Revamp Storage Settings header part
1. Add new object StorageEntry to encapsulate VolumeInfo and
   unsupported DiskInfo and missing VolumeRecord.
2. Replaces StorageSummaryDonutPreference with UsageProgressBarPreference.
3. Add storage select spinner.
4. Add a "Free up storage" preference to replace "Manage storage" button.

Bug: 174964885
Test: atest com.android.settings.deviceinfo.storage
      atest com.android.settings.deviceinfo
      manual
      Insert an USB drive, select the drive in StorageDashboardFragment
      and observe UI.
Change-Id: I83877f76869414de4fb2788b6b18fe507aa5cfcf
Merged-In: I83877f76869414de4fb2788b6b18fe507aa5cfcf
2021-03-19 18:08:38 +08:00
Jason Chiu
bee14256df Add metrics log for special cases
Support Wifi toggle, Smart storage toggle, Manage storage, Face unlock,
Pixel Imprint

Bug: 137559984
Test: robotest
Change-Id: I3e2e666a8bee1e54d6bd13349b5bedb48fbc42df
2020-05-12 18:06:22 +08:00
Raff Tsai
1e5d8146b5 Change ProfileType definition
Bug: 141601408
Test: rebuild
Change-Id: Ia4d4fabe8a4daad4ce54c243748fa3c29bf944ba
2019-12-12 13:44:35 +08:00
Raff Tsai
84327f6aa3 Add storage_summary_donut above ProfileSelectStorageFragment
- Modify ProfileSelectFragment to support add preference xml in the
top, and tabLayout below the preferences. Base preference layout is
dummy_preference_screen.xml which contains no preference.
ProfileSelectStorageFragment contains StorageSummaryDonutPreference
above the tabLayout.
- Make StorageSummaryDonutPreferenceController self workable without
StorageDashboardFragment dependence.
- Rename inactive_apps.xml to dummy_preference_screen.xml
- Move ShadowPrivateStorageInfo from LowStorageSliceTest

Bug: 141601408
Test: manual
Change-Id: Ide12840dc81bb104f328e230ecda5d35bba01d7a
2019-11-18 18:18:29 +08:00
Raff Tsai
e223b33632 Fix NullPointerException
initLoader will reuse the old loader associated with fragment.
But the fragment is destroyed. Use restartLoader which will
create another loader with new fragment.

Fixes: 143445993
Test: rebuild
Change-Id: I0a8a00ae94122f25d6d860b2512108ecd11d7806
2019-10-29 14:20:09 +08:00
Raff Tsai
966fa01423 Use SettingsLib Indexable
- Use SettingsLib Indexable
- Directly use resource id in getPreferenceScreenResId

Bug: 135053028
Test: roboletric
Change-Id: I05f493b55e8b6e2091301e9231ba5615215618e6
2019-09-25 18:24:56 +08:00
Raff Tsai
ac3e0d0988 Directly use BaseIndexableProvider
- Add function getXmlResourceId, Fragments don't need to write
xml resource id twice.
- Remove getPreferenceControllers from Indexable.java. Because it will
move to SettingsLib later for other apps which don't need this function

Bug: 135053028
Test: robolectric
Change-Id: I1e74519aecdea3dde64a5aea79f08d766dbc0003
2019-09-24 00:35:52 +08:00
Raff Tsai
47dcff42df Fix storage page slow loading issue
StorageAsyncLoader is the bottleneck. It needs to loop all installed
apps and count all apps size. Original design was waiting the
asyncLoader went back then hide the loading icon. Change the design
to hide the loading icon before asyncLoader is back.

Fixes: 138964123
Test: manual
Change-Id: I54c2efa7cf61d711145811619512d927adcee210
2019-08-07 10:31:36 +08:00
Fan Zhang
31b210017b Migrate all MetricsProto enums to SettingsEnums
Bug: 122855168
Test: rebuild
Change-Id: I962d9a71179f86b7cae9dc5e9a00e0aa1557dc76
2019-01-17 14:55:42 -08:00
Fan Zhang
23f8d59d02 Sort imports
Having consistent import order will reduce chance of merge
conflict between internal and external master

Test: rebuild
Change-Id: I0b1a170967ddcce7f388603fd521f6ed1eeba30b
2018-08-28 22:13:15 +00:00
tmfang
27c84de325 Settings Fragment Migration (Build pass app)
This patch focused on fixing compile errors and some runtime errors.

Test: We can't test it now. But we will have an integration test later.
Bug: 110259478
Change-Id: I16c471ddcd0fa1460c665b7f74d86fcace5ee67b
2018-07-11 18:24:51 -07:00
tmfang
99cc23d0da Settings Fragment Migration (Change imports)
This commit *only* changes imports and optimize imports.
We don't do anything else.

This patch can't compile pass and run test case.
We will update other patches to fix these problem.

Change list.

1. import android.app.Fragment; ->
   import androidx.fragment.app.Fragment;
2. import android.app.DialogFragment; ->
   import androidx.fragment.app.DialogFragment;
3. import android.app.ListFragment; ->
   import androidx.fragment.app.ListFragment;
4. import android.app.LoaderManager; ->
   import androidx.loader.app.LoaderManager;
5. import android.content.AsyncTaskLoader; ->
   import androidx.loader.content.AsyncTaskLoader;
6. import android.content.Loader; ->
   import androidx.loader.content.Loader;
7. import android.app.FragmentTransaction; ->
   import androidx.fragment.app.FragmentTransaction;
8. import android.app.FragmentManager; ->
   import androidx.fragment.app.FragmentManager;
9. import android.app.LoaderManager.LoaderCallbacks; ->
    import androidx.loader.app.LoaderManager.LoaderCallbacks;

Bug: 110259478
Test: Can't test it.
Change-Id: I0a3f98fff34a3494a839c3c42aeabcec3df2c8b3
2018-07-11 18:23:51 -07:00
Fan Zhang
c7162cd24d Reorder and clean up imports.
Test: rebuild
Change-Id: I178485c84ae7146f991fd77b6d7504b029942a68
2018-06-18 15:45:09 -07:00
HJ ChangLiao
ee06ef54ca Convert Smart Storage to BasePrefController
Convert Smart Storage (Storage manager) controller:
AutomaticStorageManagementSwitchPreferenceController
to BasePreferenceController for slices

Change-Id: Ieb22cb97cd46a43557dfbdd2c959e87842890fc6
Fixes: 74916013
Test: make RunSettingsRoboTests
2018-05-11 12:25:06 +08:00
HJ ChangLiao
5693be2863 Replace PackageManagerWrapper with PackageManager
Replace all SettingsLib/PackageManagerWrapper in Settings,
by PackageManager,
Remove ShadowPackageManagerWrapper.

Bug: 62067063
Test: make RunSettingsRoboTests
Change-Id: I6d1af55c13d80c1907b98b21e0207cc903cd9b1f
2018-04-24 15:12:31 +08:00
Aurimas Liutikas
e0069d332d Migrate Settings to androidx.
Test: make Settings
Bug: 76692459
Change-Id: I941dea40562170649bf056e675cc32e5163c0e39
2018-04-20 12:52:29 -07:00
Tony Mantler
0fcd6cbaa8 Autogenerate SearchIndexableResources subclass
Bug: 77148954
Test: RunSettingsLibRoboTests RunSettingsRoboTests RunSettingsGoogleRoboTests RunArcSettingsRoboTests
Change-Id: I842c42c55014c3310070ef22bd4f0d9a70dfd804
2018-04-03 10:26:55 -07:00
Fan Zhang
947a673f74 Remove more wrappers
- WallpaperManagerWrapper
- UserManagerWrapper

Bug: 76167422
Test: robotests
Change-Id: I3ca866089082e01f1e9d7a4554387962f45a5437
2018-04-02 16:51:40 -07:00
Scott Nien
3f53afdac5 Apply entity header effect to storage summary screen
use EntityHeaderController.styleActionBar to apply the entity header
effect which will not show shadow under the app bar unless it starts to
scroll.
Bug: 71767969
Test: manual test

Change-Id: Iffd94db956d50b8985cfa5df3886acd3b766fd0c
2018-03-28 09:53:44 +08:00
Fan Zhang
f7843adabd More renaming in DashboardFragment
getPreferenceControllers() -> createPreferenceControllers() for the same
reason as in ag/3647936

Bug: 73668763
Test: robotests
Change-Id: I97670a91a2a38d1c844d1b9d37f4222c5e6f45a0
2018-02-23 16:56:30 -08:00
Fan Zhang
aed8994f6f Rename Indexable::getAllPreferenceControllers.
To getPreferenceControllers. "all" is redundant. Then internally, the
old getPreferenceControllers() is renamed to
createPreferenceControllers() to emphasize the controllers are created
from code (versus the ones created from xml).

Bug: 73668763
Test: robotest
Change-Id: Ifec46aefdc2a418031c8e152028b30bdcd396fc7
2018-02-23 16:37:28 -08:00
Fan Zhang
e0b0e9f902 Refactor help menu stuff into a controller
This is a clean up to action bar menu item pattern, we will use the same
pattern to build search icon on all pages in a later change.

Bug: 68814716
Test: robotests
Change-Id: Iedd3ec263e8ccb63ed75ec7a95b28c00878b1de4
2017-11-29 15:51:04 -08:00
Daniel Nishi
bddd352969 Merge "Close the load screen faster on pre-quota devices." into oc-mr1-dev am: f42b529143
am: 598386ebab

Change-Id: I775f8b438eb6452bdbb2422efe4a56661c2ae7ed
2017-09-15 06:48:39 +00:00
Doris Ling
dee1a22c45 Consolidate all wrappers used for testing.
- Add the wrapper package and move all wrappers to the wrapper package.
- Get rid of some wrapper interface/impl implementation and have a
wrapper class directly.

Bug: 65634579
Test: make RunSettingsRoboTests
Change-Id: Ic757d8f7bacfa7a034c7e692205bc1dc4b0e1de1
2017-09-14 18:24:49 -07:00
Daniel Nishi
b05a346fae Close the load screen faster on pre-quota devices.
Pre-quota devices can take an absurd time to load. By loading the screen
once the volume sizes load, we can just show "calculating..." for a
really long time instead of a loading screen.

Change-Id: Id8ab0609c2bc19531d530c6bdf6bff89c5bfac96
Fixes: 64150148
Test: Settings Robotest
2017-09-13 16:45:52 -07:00
Daniel Nishi
fb302de0d6 Cache storage values for fast loading.
If the user moves away from the storage fragment and returns, this
allows us to use cached data from the previous calculation. If the data
is > 1 minute old, we consider it stale. Otherwise, we can bypass the
loading screen.

Fixes: 37923463
Test: Settings Robotest

Change-Id: I7650d4d742852f8d447878c077b9190bc0a0bb22
2017-09-05 14:46:14 -07:00