1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
|
/*
* Copyright (C) 2017 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License
*/
package com.android.settingslib.applications;
import android.app.usage.StorageStats;
import android.app.usage.StorageStatsManager;
import android.content.Context;
import android.content.pm.PackageManager;
import android.os.UserHandle;
import androidx.annotation.VisibleForTesting;
import java.io.IOException;
/**
* StorageStatsSource wraps the StorageStatsManager for testability purposes.
*/
public class StorageStatsSource {
private StorageStatsManager mStorageStatsManager;
public StorageStatsSource(Context context) {
mStorageStatsManager = context.getSystemService(StorageStatsManager.class);
}
public StorageStatsSource.ExternalStorageStats getExternalStorageStats(String volumeUuid,
UserHandle user) throws IOException {
return new StorageStatsSource.ExternalStorageStats(
mStorageStatsManager.queryExternalStatsForUser(volumeUuid, user));
}
public StorageStatsSource.AppStorageStats getStatsForUid(String volumeUuid, int uid)
throws IOException {
return new StorageStatsSource.AppStorageStatsImpl(
mStorageStatsManager.queryStatsForUid(volumeUuid, uid));
}
public StorageStatsSource.AppStorageStats getStatsForPackage(
String volumeUuid, String packageName, UserHandle user)
throws PackageManager.NameNotFoundException, IOException {
return new StorageStatsSource.AppStorageStatsImpl(
mStorageStatsManager.queryStatsForPackage(volumeUuid, packageName, user));
}
public long getCacheQuotaBytes(String volumeUuid, int uid) {
return mStorageStatsManager.getCacheQuotaBytes(volumeUuid, uid);
}
/**
* Static class that provides methods for querying the amount of external storage available as
* well as breaking it up into several media types.
*/
public static class ExternalStorageStats {
public long totalBytes;
public long audioBytes;
public long videoBytes;
public long imageBytes;
public long appBytes;
/** Convenience method for testing. */
@VisibleForTesting
public ExternalStorageStats(
long totalBytes, long audioBytes, long videoBytes, long imageBytes, long appBytes) {
this.totalBytes = totalBytes;
this.audioBytes = audioBytes;
this.videoBytes = videoBytes;
this.imageBytes = imageBytes;
this.appBytes = appBytes;
}
/**
* Creates an ExternalStorageStats from the system version of ExternalStorageStats. They are
* identical other than the utility method created for test purposes.
* @param stats The stats to copy to wrap.
*/
public ExternalStorageStats(android.app.usage.ExternalStorageStats stats) {
totalBytes = stats.getTotalBytes();
audioBytes = stats.getAudioBytes();
videoBytes = stats.getVideoBytes();
imageBytes = stats.getImageBytes();
appBytes = stats.getAppBytes();
}
}
/**
* Interface that exists to simplify testing. The platform {@link StorageStats} is too new and
* robolectric cannot see it. It simply wraps a StorageStats object and forwards method calls
* to the real object
*/
public interface AppStorageStats {
long getCodeBytes();
long getDataBytes();
long getCacheBytes();
long getTotalBytes();
}
/**
* Simple implementation of AppStorageStats that will allow you to query the StorageStats object
* passed in for storage information about an app.
*/
public static class AppStorageStatsImpl implements
StorageStatsSource.AppStorageStats {
private StorageStats mStats;
public AppStorageStatsImpl(StorageStats stats) {
mStats = stats;
}
public long getCodeBytes() {
return mStats.getAppBytes();
}
public long getDataBytes() {
return mStats.getDataBytes();
}
public long getCacheBytes() {
return mStats.getCacheBytes();
}
public long getTotalBytes() {
return mStats.getAppBytes() + mStats.getDataBytes();
}
}
}
|