blob: 9fbadee3075ae1d5985c4b836aeaab247f43c924 [file] [log] [blame]
/*
* 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 android.support.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.getCodeBytes();
}
public long getDataBytes() {
return mStats.getDataBytes();
}
public long getCacheBytes() {
return mStats.getCacheBytes();
}
public long getTotalBytes() {
return mStats.getAppBytes() + mStats.getDataBytes();
}
}
}