109fa1388d090666e631f9d764f935604a2c753e9Daniel Nishi/* 209fa1388d090666e631f9d764f935604a2c753e9Daniel Nishi * Copyright (C) 2016 The Android Open Source Project 309fa1388d090666e631f9d764f935604a2c753e9Daniel Nishi * 409fa1388d090666e631f9d764f935604a2c753e9Daniel Nishi * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file 509fa1388d090666e631f9d764f935604a2c753e9Daniel Nishi * except in compliance with the License. You may obtain a copy of the License at 609fa1388d090666e631f9d764f935604a2c753e9Daniel Nishi * 709fa1388d090666e631f9d764f935604a2c753e9Daniel Nishi * http://www.apache.org/licenses/LICENSE-2.0 809fa1388d090666e631f9d764f935604a2c753e9Daniel Nishi * 909fa1388d090666e631f9d764f935604a2c753e9Daniel Nishi * Unless required by applicable law or agreed to in writing, software distributed under the 1009fa1388d090666e631f9d764f935604a2c753e9Daniel Nishi * License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 1109fa1388d090666e631f9d764f935604a2c753e9Daniel Nishi * KIND, either express or implied. See the License for the specific language governing 1209fa1388d090666e631f9d764f935604a2c753e9Daniel Nishi * permissions and limitations under the License. 1309fa1388d090666e631f9d764f935604a2c753e9Daniel Nishi */ 1409fa1388d090666e631f9d764f935604a2c753e9Daniel Nishi 1509fa1388d090666e631f9d764f935604a2c753e9Daniel Nishipackage com.android.storagemanager.deletionhelper; 1609fa1388d090666e631f9d764f935604a2c753e9Daniel Nishi 1709fa1388d090666e631f9d764f935604a2c753e9Daniel Nishiimport android.content.Context; 1809fa1388d090666e631f9d764f935604a2c753e9Daniel Nishiimport android.support.v7.preference.CheckBoxPreference; 1909fa1388d090666e631f9d764f935604a2c753e9Daniel Nishiimport android.support.v7.preference.Preference; 2009fa1388d090666e631f9d764f935604a2c753e9Daniel Nishiimport android.support.v7.preference.PreferenceViewHolder; 2109fa1388d090666e631f9d764f935604a2c753e9Daniel Nishiimport android.text.format.Formatter; 2209fa1388d090666e631f9d764f935604a2c753e9Daniel Nishiimport android.view.View; 2309fa1388d090666e631f9d764f935604a2c753e9Daniel Nishiimport android.widget.CheckBox; 2409fa1388d090666e631f9d764f935604a2c753e9Daniel Nishiimport android.widget.Switch; 2509fa1388d090666e631f9d764f935604a2c753e9Daniel Nishiimport android.widget.TextView; 2609fa1388d090666e631f9d764f935604a2c753e9Daniel Nishiimport com.android.storagemanager.deletionhelper.AppStateUsageStatsBridge.UsageStatsState; 2709fa1388d090666e631f9d764f935604a2c753e9Daniel Nishiimport com.android.storagemanager.R; 2809fa1388d090666e631f9d764f935604a2c753e9Daniel Nishi 2909fa1388d090666e631f9d764f935604a2c753e9Daniel Nishiimport com.android.settingslib.applications.ApplicationsState; 3009fa1388d090666e631f9d764f935604a2c753e9Daniel Nishiimport com.android.settingslib.applications.ApplicationsState.AppEntry; 3109fa1388d090666e631f9d764f935604a2c753e9Daniel Nishi 3209fa1388d090666e631f9d764f935604a2c753e9Daniel Nishi/** 3309fa1388d090666e631f9d764f935604a2c753e9Daniel Nishi * Preference item for an app with a switch to signify if it should be uninstalled. 3409fa1388d090666e631f9d764f935604a2c753e9Daniel Nishi * This shows the name and icon of the app along with the days since its last use. 3509fa1388d090666e631f9d764f935604a2c753e9Daniel Nishi */ 3691125be98af76cf3f854d72b6de7ac6e6c0c8229Daniel Nishipublic class AppDeletionPreference extends NestedCheckboxPreference { 3709fa1388d090666e631f9d764f935604a2c753e9Daniel Nishi private AppEntry mEntry; 3809fa1388d090666e631f9d764f935604a2c753e9Daniel Nishi private Context mContext; 3909fa1388d090666e631f9d764f935604a2c753e9Daniel Nishi 4009fa1388d090666e631f9d764f935604a2c753e9Daniel Nishi public AppDeletionPreference(Context context, AppEntry item) { 4109fa1388d090666e631f9d764f935604a2c753e9Daniel Nishi super(context); 4209fa1388d090666e631f9d764f935604a2c753e9Daniel Nishi mEntry = item; 4309fa1388d090666e631f9d764f935604a2c753e9Daniel Nishi mContext = context; 4409fa1388d090666e631f9d764f935604a2c753e9Daniel Nishi setIcon(item.icon); 4509fa1388d090666e631f9d764f935604a2c753e9Daniel Nishi setTitle(item.label); 4609fa1388d090666e631f9d764f935604a2c753e9Daniel Nishi } 4709fa1388d090666e631f9d764f935604a2c753e9Daniel Nishi 4809fa1388d090666e631f9d764f935604a2c753e9Daniel Nishi @Override 4909fa1388d090666e631f9d764f935604a2c753e9Daniel Nishi public void onBindViewHolder(PreferenceViewHolder holder) { 5009fa1388d090666e631f9d764f935604a2c753e9Daniel Nishi super.onBindViewHolder(holder); 515e2460bb808460c37e9409e0735a95998457647cDaniel Nishi holder.setDividerAllowedAbove(false); 5209fa1388d090666e631f9d764f935604a2c753e9Daniel Nishi } 5309fa1388d090666e631f9d764f935604a2c753e9Daniel Nishi 5409fa1388d090666e631f9d764f935604a2c753e9Daniel Nishi /** 5509fa1388d090666e631f9d764f935604a2c753e9Daniel Nishi * Returns the package name for the app that these preference represents. 5609fa1388d090666e631f9d764f935604a2c753e9Daniel Nishi */ 5709fa1388d090666e631f9d764f935604a2c753e9Daniel Nishi public String getPackageName() { 5872cde70eded5cd45f022540e09736be754a5b91fDaniel Nishi synchronized(mEntry) { 5972cde70eded5cd45f022540e09736be754a5b91fDaniel Nishi return mEntry.info.packageName; 6072cde70eded5cd45f022540e09736be754a5b91fDaniel Nishi } 6109fa1388d090666e631f9d764f935604a2c753e9Daniel Nishi } 6209fa1388d090666e631f9d764f935604a2c753e9Daniel Nishi 635e2460bb808460c37e9409e0735a95998457647cDaniel Nishi public void updateSummary() { 6409fa1388d090666e631f9d764f935604a2c753e9Daniel Nishi if (mEntry.extraInfo == null) return; 6509fa1388d090666e631f9d764f935604a2c753e9Daniel Nishi if (mEntry.size == ApplicationsState.SIZE_UNKNOWN || 6609fa1388d090666e631f9d764f935604a2c753e9Daniel Nishi mEntry.size == ApplicationsState.SIZE_INVALID) { 6709fa1388d090666e631f9d764f935604a2c753e9Daniel Nishi return; 6809fa1388d090666e631f9d764f935604a2c753e9Daniel Nishi } 6909fa1388d090666e631f9d764f935604a2c753e9Daniel Nishi 7009fa1388d090666e631f9d764f935604a2c753e9Daniel Nishi UsageStatsState extraData = (UsageStatsState) mEntry.extraInfo; 7109fa1388d090666e631f9d764f935604a2c753e9Daniel Nishi String fileSize = Formatter.formatFileSize(mContext, mEntry.size); 7209fa1388d090666e631f9d764f935604a2c753e9Daniel Nishi if (extraData.daysSinceLastUse == AppStateUsageStatsBridge.NEVER_USED) { 735e2460bb808460c37e9409e0735a95998457647cDaniel Nishi setSummary(mContext.getString(R.string.deletion_helper_app_summary_never_used, 7409fa1388d090666e631f9d764f935604a2c753e9Daniel Nishi fileSize)); 7509fa1388d090666e631f9d764f935604a2c753e9Daniel Nishi } else if (extraData.daysSinceLastUse == AppStateUsageStatsBridge.UNKNOWN_LAST_USE) { 765e2460bb808460c37e9409e0735a95998457647cDaniel Nishi setSummary(mContext.getString(R.string.deletion_helper_app_summary_unknown_used, 7709fa1388d090666e631f9d764f935604a2c753e9Daniel Nishi fileSize)); 7809fa1388d090666e631f9d764f935604a2c753e9Daniel Nishi } else { 795e2460bb808460c37e9409e0735a95998457647cDaniel Nishi setSummary(mContext.getString(R.string.deletion_helper_app_summary, 8009fa1388d090666e631f9d764f935604a2c753e9Daniel Nishi fileSize, 8109fa1388d090666e631f9d764f935604a2c753e9Daniel Nishi extraData.daysSinceLastUse)); 8209fa1388d090666e631f9d764f935604a2c753e9Daniel Nishi } 8309fa1388d090666e631f9d764f935604a2c753e9Daniel Nishi } 8409fa1388d090666e631f9d764f935604a2c753e9Daniel Nishi 8509fa1388d090666e631f9d764f935604a2c753e9Daniel Nishi} 86