1 /* 2 * Copyright (C) 2016 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file 5 * except in compliance with the License. You may obtain a copy of the License at 6 * 7 * http://www.apache.org/licenses/LICENSE-2.0 8 * 9 * Unless required by applicable law or agreed to in writing, software distributed under the 10 * License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 11 * KIND, either express or implied. See the License for the specific language governing 12 * permissions and limitations under the License. 13 */ 14 15 package com.android.settings.datausage; 16 17 import android.content.Context; 18 import android.view.View; 19 import android.widget.ProgressBar; 20 21 import androidx.preference.PreferenceViewHolder; 22 23 import com.android.settingslib.AppItem; 24 import com.android.settingslib.net.UidDetail; 25 import com.android.settingslib.net.UidDetailProvider; 26 import com.android.settingslib.utils.ThreadUtils; 27 import com.android.settingslib.widget.apppreference.AppPreference; 28 29 public class AppDataUsagePreference extends AppPreference { 30 31 private final AppItem mItem; 32 private final int mPercent; 33 private UidDetail mDetail; 34 AppDataUsagePreference(Context context, AppItem item, int percent, UidDetailProvider provider)35 public AppDataUsagePreference(Context context, AppItem item, int percent, 36 UidDetailProvider provider) { 37 super(context); 38 mItem = item; 39 mPercent = percent; 40 41 if (item.restricted && item.total <= 0) { 42 setSummary(com.android.settings.R.string.data_usage_app_restricted); 43 } else { 44 setSummary(DataUsageUtils.formatDataUsage(context, item.total)); 45 } 46 mDetail = provider.getUidDetail(item.key, false /* blocking */); 47 if (mDetail != null) { 48 setAppInfo(); 49 } else { 50 ThreadUtils.postOnBackgroundThread(() -> { 51 mDetail = provider.getUidDetail(mItem.key, true /* blocking */); 52 ThreadUtils.postOnMainThread(() -> setAppInfo()); 53 }); 54 } 55 } 56 57 @Override onBindViewHolder(PreferenceViewHolder holder)58 public void onBindViewHolder(PreferenceViewHolder holder) { 59 super.onBindViewHolder(holder); 60 final ProgressBar progress = (ProgressBar) holder.findViewById( 61 android.R.id.progress); 62 63 if (mItem.restricted && mItem.total <= 0) { 64 progress.setVisibility(View.GONE); 65 } else { 66 progress.setVisibility(View.VISIBLE); 67 } 68 progress.setProgress(mPercent); 69 } 70 setAppInfo()71 private void setAppInfo() { 72 if (mDetail != null) { 73 setIcon(mDetail.icon); 74 setTitle(mDetail.label); 75 } else { 76 setIcon(null); 77 setTitle(null); 78 } 79 } 80 getItem()81 public AppItem getItem() { 82 return mItem; 83 } 84 } 85