blob: ecdf070645e91437beaa8522103700ee75200329 [file] [log] [blame]
/*
* Copyright (C) 2019 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.car.settings.storage;
import android.content.Context;
import android.content.pm.PackageManager;
import android.os.Bundle;
import android.os.UserHandle;
import android.view.View;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.annotation.XmlRes;
import androidx.loader.app.LoaderManager;
import com.android.car.settings.R;
import com.android.car.settings.common.Logger;
import com.android.car.settings.common.SettingsFragment;
import com.android.settingslib.applications.ApplicationsState;
import com.android.settingslib.applications.StorageStatsSource;
import java.util.Arrays;
import java.util.List;
/**
* Fragment to display the applications storage information.
*/
public class AppStorageSettingsDetailsFragment extends SettingsFragment {
private static final Logger LOG = new Logger(AppStorageSettingsDetailsFragment.class);
public static final String EXTRA_PACKAGE_NAME = "extra_package_name";
// Package information
protected PackageManager mPackageManager;
private String mPackageName;
// Application state info
private ApplicationsState.AppEntry mAppEntry;
private ApplicationsState mAppState;
private AppsStorageStatsManager mAppsStorageStatsManager;
// User info
private int mUserId;
/** Creates an instance of this fragment, passing packageName as an argument. */
public static AppStorageSettingsDetailsFragment getInstance(String packageName) {
AppStorageSettingsDetailsFragment applicationDetailFragment =
new AppStorageSettingsDetailsFragment();
Bundle bundle = new Bundle();
bundle.putString(EXTRA_PACKAGE_NAME, packageName);
applicationDetailFragment.setArguments(bundle);
return applicationDetailFragment;
}
@Override
@XmlRes
protected int getPreferenceScreenResId() {
return R.xml.app_storage_settings_details_fragment;
}
@Override
public void onAttach(Context context) {
super.onAttach(context);
mUserId = UserHandle.myUserId();
mPackageName = getArguments().getString(EXTRA_PACKAGE_NAME);
mAppState = ApplicationsState.getInstance(requireActivity().getApplication());
mAppEntry = mAppState.getEntry(mPackageName, mUserId);
StorageStatsSource storageStatsSource = new StorageStatsSource(context);
StorageStatsSource.AppStorageStats stats = null;
mPackageManager = context.getPackageManager();
try {
stats = storageStatsSource.getStatsForPackage(/* volumeUuid= */ null, mPackageName,
UserHandle.of(mUserId));
} catch (Exception e) {
// This may happen if the package was removed during our calculation.
LOG.w("App unexpectedly not found", e);
}
mAppsStorageStatsManager = new AppsStorageStatsManager(context);
use(StorageApplicationPreferenceController.class,
R.string.pk_storage_application_details)
.setAppEntry(mAppEntry)
.setAppState(mAppState);
use(StorageApplicationActionButtonsPreferenceController.class,
R.string.pk_storage_application_action_buttons)
.setAppEntry(mAppEntry)
.setPackageName(mPackageName)
.setAppsStorageStatsManager(mAppsStorageStatsManager)
.setLoaderManager(LoaderManager.getInstance(this));
List<? extends StorageSizeBasePreferenceController> preferenceControllers = Arrays.asList(
use(StorageApplicationSizePreferenceController.class,
R.string.pk_storage_application_size),
use(StorageApplicationTotalSizePreferenceController.class,
R.string.pk_storage_application_total_size),
use(StorageApplicationUserDataPreferenceController.class,
R.string.pk_storage_application_data_size),
use(StorageApplicationCacheSizePreferenceController.class,
R.string.pk_storage_application_cache_size)
);
for (StorageSizeBasePreferenceController pc : preferenceControllers) {
pc.setAppsStorageStatsManager(mAppsStorageStatsManager);
pc.setAppStorageStats(stats);
}
}
@Override
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
enableRotaryScroll();
}
}