ManageApplications.java revision 80e1f1bfdb814a08fb8b07b2e279285d495042e9
1afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project/* 2afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project * Copyright (C) 2006 The Android Open Source Project 3afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project * 4afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License"); 5afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project * you may not use this file except in compliance with the License. 6afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project * You may obtain a copy of the License at 7afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project * 8afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project * http://www.apache.org/licenses/LICENSE-2.0 9afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project * 10afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project * Unless required by applicable law or agreed to in writing, software 11afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS, 12afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project * See the License for the specific language governing permissions and 14afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project * limitations under the License. 15afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project */ 16afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 17728ac35373028b79205a788c526ef4b495518ec1Dianne Hackbornpackage com.android.settings.applications; 18afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 1914d5714a8238b244b974e4e62fe688398ab45dcbDianne Hackbornimport static android.net.NetworkPolicyManager.POLICY_NONE; 2014d5714a8238b244b974e4e62fe688398ab45dcbDianne Hackbornimport static android.net.NetworkPolicyManager.POLICY_REJECT_METERED_BACKGROUND; 2138b89707068a4ef344f0a734c6c38e175de349e8Suchi Amalapurapu 22a31be80ef056add00e0d239414f80f932978277fAdam Powellimport android.app.Activity; 2338305fb1777147cbcb86774c466e88434daff141Jeff Sharkeyimport android.app.ActivityManager; 2414d5714a8238b244b974e4e62fe688398ab45dcbDianne Hackbornimport android.app.AlertDialog; 25a6683e0f4af75005ab5a1742d30df4bee071f725Dianne Hackbornimport android.app.AppOpsManager; 26f4eb85bc3c57ca70b577cea1524431fead4a4cccDianne Hackbornimport android.app.Fragment; 2714d5714a8238b244b974e4e62fe688398ab45dcbDianne Hackbornimport android.app.INotificationManager; 2844dda2d7f52007d2ef33b9e9b9b9b1ec84c5582eJeff Sharkeyimport android.content.ComponentName; 29afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectimport android.content.Context; 3014d5714a8238b244b974e4e62fe688398ab45dcbDianne Hackbornimport android.content.DialogInterface; 31afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectimport android.content.Intent; 3244dda2d7f52007d2ef33b9e9b9b9b1ec84c5582eJeff Sharkeyimport android.content.ServiceConnection; 3319df79af269c4a2354b0989cebfcfe949aea42c4Dianne Hackbornimport android.content.pm.ApplicationInfo; 346dc1bf84cf72dd72a2517878f6b280e8afdcf4c2Dianne Hackbornimport android.content.pm.IPackageManager; 356dc1bf84cf72dd72a2517878f6b280e8afdcf4c2Dianne Hackbornimport android.content.pm.PackageInfo; 3614d5714a8238b244b974e4e62fe688398ab45dcbDianne Hackbornimport android.content.pm.PackageManager; 3714d5714a8238b244b974e4e62fe688398ab45dcbDianne Hackbornimport android.net.NetworkPolicyManager; 3814d5714a8238b244b974e4e62fe688398ab45dcbDianne Hackbornimport android.os.AsyncTask; 39afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectimport android.os.Bundle; 401337d0f70b18dd732c6a617be83e5be0bb8f2f87Dianne Hackbornimport android.os.Environment; 4114d5714a8238b244b974e4e62fe688398ab45dcbDianne Hackbornimport android.os.Handler; 4244dda2d7f52007d2ef33b9e9b9b9b1ec84c5582eJeff Sharkeyimport android.os.IBinder; 436dc1bf84cf72dd72a2517878f6b280e8afdcf4c2Dianne Hackbornimport android.os.RemoteException; 446dc1bf84cf72dd72a2517878f6b280e8afdcf4c2Dianne Hackbornimport android.os.ServiceManager; 4538305fb1777147cbcb86774c466e88434daff141Jeff Sharkeyimport android.os.UserHandle; 46c8a1db191207e38b7ad0acdfd276651e4911e812Alexandra Gherghinaimport android.os.UserManager; 47a4af18755e0a344c628e4ddc4ece793d3401e6fbDianne Hackbornimport android.preference.PreferenceFrameLayout; 48c8a1db191207e38b7ad0acdfd276651e4911e812Alexandra Gherghinaimport android.provider.Settings; 49309c5dcee18ced447d049d5de882a9586694e04cDianne Hackbornimport android.support.v4.view.PagerAdapter; 50309c5dcee18ced447d049d5de882a9586694e04cDianne Hackbornimport android.support.v4.view.PagerTabStrip; 51309c5dcee18ced447d049d5de882a9586694e04cDianne Hackbornimport android.support.v4.view.ViewPager; 52afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectimport android.util.Log; 53afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectimport android.view.LayoutInflater; 54afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectimport android.view.Menu; 55f4eb85bc3c57ca70b577cea1524431fead4a4cccDianne Hackbornimport android.view.MenuInflater; 56afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectimport android.view.MenuItem; 57afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectimport android.view.View; 58afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectimport android.view.ViewGroup; 59ff3673c7f477b1d78e64a8bc28754552dcdc8826Dianne Hackbornimport android.view.animation.AnimationUtils; 60e7623f775cb37a8de049dae8c03b5b396526fdd1Dianne Hackbornimport android.widget.AbsListView; 61afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectimport android.widget.AdapterView; 62a31be80ef056add00e0d239414f80f932978277fAdam Powellimport android.widget.AdapterView.OnItemClickListener; 63c8a1db191207e38b7ad0acdfd276651e4911e812Alexandra Gherghinaimport android.widget.AdapterView.OnItemSelectedListener; 64afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectimport android.widget.BaseAdapter; 65c0b23d3f0bb42b26950512590d5ebd6d3373032dSuchi Amalapurapuimport android.widget.Filter; 66c0b23d3f0bb42b26950512590d5ebd6d3373032dSuchi Amalapurapuimport android.widget.Filterable; 67afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectimport android.widget.ListView; 68c8a1db191207e38b7ad0acdfd276651e4911e812Alexandra Gherghinaimport android.widget.Spinner; 69b285593cafacc58ecfdf97be395dc8f5a7493051Suchi Amalapurapu 7044dda2d7f52007d2ef33b9e9b9b9b1ec84c5582eJeff Sharkeyimport com.android.internal.app.IMediaContainerService; 71b654cbb896a6e6db9ecec164476b0ac4a3e72774Jeff Sharkeyimport com.android.internal.content.PackageHelper; 72b654cbb896a6e6db9ecec164476b0ac4a3e72774Jeff Sharkeyimport com.android.settings.R; 73263bcc8b732dbb47d3ce63904e0e05191fabbad6Fabrice Di Meglioimport com.android.settings.SettingsActivity; 74c8a1db191207e38b7ad0acdfd276651e4911e812Alexandra Gherghinaimport com.android.settings.UserSpinnerAdapter; 75b654cbb896a6e6db9ecec164476b0ac4a3e72774Jeff Sharkeyimport com.android.settings.Settings.RunningServicesActivity; 76b654cbb896a6e6db9ecec164476b0ac4a3e72774Jeff Sharkeyimport com.android.settings.Settings.StorageUseActivity; 77c8a1db191207e38b7ad0acdfd276651e4911e812Alexandra Gherghinaimport com.android.settings.UserSpinnerAdapter.UserDetails; 78b654cbb896a6e6db9ecec164476b0ac4a3e72774Jeff Sharkeyimport com.android.settings.applications.ApplicationsState.AppEntry; 7944dda2d7f52007d2ef33b9e9b9b9b1ec84c5582eJeff Sharkeyimport com.android.settings.deviceinfo.StorageMeasurement; 80309c5dcee18ced447d049d5de882a9586694e04cDianne Hackbornimport com.android.settings.Utils; 81b654cbb896a6e6db9ecec164476b0ac4a3e72774Jeff Sharkey 82afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectimport java.util.ArrayList; 83afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectimport java.util.Comparator; 8414d5714a8238b244b974e4e62fe688398ab45dcbDianne Hackbornimport java.util.List; 85afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 866dc1bf84cf72dd72a2517878f6b280e8afdcf4c2Dianne Hackbornfinal class CanBeOnSdCardChecker { 876dc1bf84cf72dd72a2517878f6b280e8afdcf4c2Dianne Hackborn final IPackageManager mPm; 886dc1bf84cf72dd72a2517878f6b280e8afdcf4c2Dianne Hackborn int mInstallLocation; 896dc1bf84cf72dd72a2517878f6b280e8afdcf4c2Dianne Hackborn 906dc1bf84cf72dd72a2517878f6b280e8afdcf4c2Dianne Hackborn CanBeOnSdCardChecker() { 916dc1bf84cf72dd72a2517878f6b280e8afdcf4c2Dianne Hackborn mPm = IPackageManager.Stub.asInterface( 926dc1bf84cf72dd72a2517878f6b280e8afdcf4c2Dianne Hackborn ServiceManager.getService("package")); 936dc1bf84cf72dd72a2517878f6b280e8afdcf4c2Dianne Hackborn } 946dc1bf84cf72dd72a2517878f6b280e8afdcf4c2Dianne Hackborn 956dc1bf84cf72dd72a2517878f6b280e8afdcf4c2Dianne Hackborn void init() { 966dc1bf84cf72dd72a2517878f6b280e8afdcf4c2Dianne Hackborn try { 976dc1bf84cf72dd72a2517878f6b280e8afdcf4c2Dianne Hackborn mInstallLocation = mPm.getInstallLocation(); 986dc1bf84cf72dd72a2517878f6b280e8afdcf4c2Dianne Hackborn } catch (RemoteException e) { 996dc1bf84cf72dd72a2517878f6b280e8afdcf4c2Dianne Hackborn Log.e("CanBeOnSdCardChecker", "Is Package Manager running?"); 1006dc1bf84cf72dd72a2517878f6b280e8afdcf4c2Dianne Hackborn return; 1016dc1bf84cf72dd72a2517878f6b280e8afdcf4c2Dianne Hackborn } 1026dc1bf84cf72dd72a2517878f6b280e8afdcf4c2Dianne Hackborn } 1036dc1bf84cf72dd72a2517878f6b280e8afdcf4c2Dianne Hackborn 1046dc1bf84cf72dd72a2517878f6b280e8afdcf4c2Dianne Hackborn boolean check(ApplicationInfo info) { 1056dc1bf84cf72dd72a2517878f6b280e8afdcf4c2Dianne Hackborn boolean canBe = false; 1066dc1bf84cf72dd72a2517878f6b280e8afdcf4c2Dianne Hackborn if ((info.flags & ApplicationInfo.FLAG_EXTERNAL_STORAGE) != 0) { 1076dc1bf84cf72dd72a2517878f6b280e8afdcf4c2Dianne Hackborn canBe = true; 1086dc1bf84cf72dd72a2517878f6b280e8afdcf4c2Dianne Hackborn } else { 1093c24cfed8d5116ff21986acb60a918cb079a0efdKenny Root if ((info.flags & ApplicationInfo.FLAG_SYSTEM) == 0) { 1106dc1bf84cf72dd72a2517878f6b280e8afdcf4c2Dianne Hackborn if (info.installLocation == PackageInfo.INSTALL_LOCATION_PREFER_EXTERNAL || 1116dc1bf84cf72dd72a2517878f6b280e8afdcf4c2Dianne Hackborn info.installLocation == PackageInfo.INSTALL_LOCATION_AUTO) { 1126dc1bf84cf72dd72a2517878f6b280e8afdcf4c2Dianne Hackborn canBe = true; 1136dc1bf84cf72dd72a2517878f6b280e8afdcf4c2Dianne Hackborn } else if (info.installLocation 1146dc1bf84cf72dd72a2517878f6b280e8afdcf4c2Dianne Hackborn == PackageInfo.INSTALL_LOCATION_UNSPECIFIED) { 1156dc1bf84cf72dd72a2517878f6b280e8afdcf4c2Dianne Hackborn if (mInstallLocation == PackageHelper.APP_INSTALL_EXTERNAL) { 1166dc1bf84cf72dd72a2517878f6b280e8afdcf4c2Dianne Hackborn // For apps with no preference and the default value set 1176dc1bf84cf72dd72a2517878f6b280e8afdcf4c2Dianne Hackborn // to install on sdcard. 1186dc1bf84cf72dd72a2517878f6b280e8afdcf4c2Dianne Hackborn canBe = true; 1196dc1bf84cf72dd72a2517878f6b280e8afdcf4c2Dianne Hackborn } 1206dc1bf84cf72dd72a2517878f6b280e8afdcf4c2Dianne Hackborn } 1216dc1bf84cf72dd72a2517878f6b280e8afdcf4c2Dianne Hackborn } 1226dc1bf84cf72dd72a2517878f6b280e8afdcf4c2Dianne Hackborn } 1236dc1bf84cf72dd72a2517878f6b280e8afdcf4c2Dianne Hackborn return canBe; 1246dc1bf84cf72dd72a2517878f6b280e8afdcf4c2Dianne Hackborn } 1256dc1bf84cf72dd72a2517878f6b280e8afdcf4c2Dianne Hackborn} 1266dc1bf84cf72dd72a2517878f6b280e8afdcf4c2Dianne Hackborn 127a4af18755e0a344c628e4ddc4ece793d3401e6fbDianne Hackborninterface AppClickListener { 128a4af18755e0a344c628e4ddc4ece793d3401e6fbDianne Hackborn void onItemClick(ManageApplications.TabInfo tab, AdapterView<?> parent, 129a4af18755e0a344c628e4ddc4ece793d3401e6fbDianne Hackborn View view, int position, long id); 130a4af18755e0a344c628e4ddc4ece793d3401e6fbDianne Hackborn} 131a4af18755e0a344c628e4ddc4ece793d3401e6fbDianne Hackborn 132afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project/** 133afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project * Activity to pick an application that will be used to display installation information and 134afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project * options to uninstall/delete user data for system applications. This activity 135afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project * can be launched through Settings or via the ACTION_MANAGE_PACKAGE_STORAGE 136afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project * intent. 137afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project */ 138f4eb85bc3c57ca70b577cea1524431fead4a4cccDianne Hackbornpublic class ManageApplications extends Fragment implements 139a4af18755e0a344c628e4ddc4ece793d3401e6fbDianne Hackborn AppClickListener, DialogInterface.OnClickListener, 140c8a1db191207e38b7ad0acdfd276651e4911e812Alexandra Gherghina DialogInterface.OnDismissListener, OnItemSelectedListener { 14102c22131e93e1a506141b1890c7134909ded876fAmith Yamasani 142e7623f775cb37a8de049dae8c03b5b396526fdd1Dianne Hackborn static final String TAG = "ManageApplications"; 143e7623f775cb37a8de049dae8c03b5b396526fdd1Dianne Hackborn static final boolean DEBUG = false; 14402c22131e93e1a506141b1890c7134909ded876fAmith Yamasani 14502c22131e93e1a506141b1890c7134909ded876fAmith Yamasani private static final String EXTRA_SORT_ORDER = "sortOrder"; 14602c22131e93e1a506141b1890c7134909ded876fAmith Yamasani private static final String EXTRA_SHOW_BACKGROUND = "showBackground"; 1477a3221bb95efd2e38e2aea243bcb13577bb276b3Amith Yamasani private static final String EXTRA_DEFAULT_LIST_TYPE = "defaultListType"; 14814d5714a8238b244b974e4e62fe688398ab45dcbDianne Hackborn private static final String EXTRA_RESET_DIALOG = "resetDialog"; 14902c22131e93e1a506141b1890c7134909ded876fAmith Yamasani 150afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project // attributes used as keys when passing values to InstalledAppDetails activity 15138b89707068a4ef344f0a734c6c38e175de349e8Suchi Amalapurapu public static final String APP_CHG = "chg"; 15202c22131e93e1a506141b1890c7134909ded876fAmith Yamasani 153afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project // constant value that can be used to check return code from sub activity. 154afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project private static final int INSTALLED_APP_DETAILS = 1; 155d2be882d8f2e5acd8a5806c649ba4640249cf4baDianne Hackborn 156bd9ddab4f4e1f47b141abdcc0248cc716112b3c7Dianne Hackborn public static final int SIZE_TOTAL = 0; 157bd9ddab4f4e1f47b141abdcc0248cc716112b3c7Dianne Hackborn public static final int SIZE_INTERNAL = 1; 158bd9ddab4f4e1f47b141abdcc0248cc716112b3c7Dianne Hackborn public static final int SIZE_EXTERNAL = 2; 159bd9ddab4f4e1f47b141abdcc0248cc716112b3c7Dianne Hackborn 160afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project // sort order that can be changed through the menu can be sorted alphabetically 161afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project // or size(descending) 162afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project private static final int MENU_OPTIONS_BASE = 0; 163afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project // Filter options used for displayed list of applications 1646cf44dbe90e3215715c713874c357d0bd26b8102Suchi Amalapurapu public static final int FILTER_APPS_ALL = MENU_OPTIONS_BASE + 0; 165728ac35373028b79205a788c526ef4b495518ec1Dianne Hackborn public static final int FILTER_APPS_THIRD_PARTY = MENU_OPTIONS_BASE + 1; 166728ac35373028b79205a788c526ef4b495518ec1Dianne Hackborn public static final int FILTER_APPS_SDCARD = MENU_OPTIONS_BASE + 2; 16718b64f446cd7b9043909b0cd42d1ab364392da24Dianne Hackborn public static final int FILTER_APPS_DISABLED = MENU_OPTIONS_BASE + 3; 168747ea55fce48c23b51fe6f6df8c4236effd91e37Suchi Amalapurapu 1696cf44dbe90e3215715c713874c357d0bd26b8102Suchi Amalapurapu public static final int SORT_ORDER_ALPHA = MENU_OPTIONS_BASE + 4; 1706cf44dbe90e3215715c713874c357d0bd26b8102Suchi Amalapurapu public static final int SORT_ORDER_SIZE = MENU_OPTIONS_BASE + 5; 1711337d0f70b18dd732c6a617be83e5be0bb8f2f87Dianne Hackborn public static final int SHOW_RUNNING_SERVICES = MENU_OPTIONS_BASE + 6; 1721337d0f70b18dd732c6a617be83e5be0bb8f2f87Dianne Hackborn public static final int SHOW_BACKGROUND_PROCESSES = MENU_OPTIONS_BASE + 7; 17314d5714a8238b244b974e4e62fe688398ab45dcbDianne Hackborn public static final int RESET_APP_PREFERENCES = MENU_OPTIONS_BASE + 8; 174afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project // sort order 175afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project private int mSortOrder = SORT_ORDER_ALPHA; 176afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 177e7623f775cb37a8de049dae8c03b5b396526fdd1Dianne Hackborn private ApplicationsState mApplicationsState; 178309c5dcee18ced447d049d5de882a9586694e04cDianne Hackborn 179309c5dcee18ced447d049d5de882a9586694e04cDianne Hackborn public static class TabInfo implements OnItemClickListener { 180309c5dcee18ced447d049d5de882a9586694e04cDianne Hackborn public final ManageApplications mOwner; 181309c5dcee18ced447d049d5de882a9586694e04cDianne Hackborn public final ApplicationsState mApplicationsState; 182309c5dcee18ced447d049d5de882a9586694e04cDianne Hackborn public final CharSequence mLabel; 183309c5dcee18ced447d049d5de882a9586694e04cDianne Hackborn public final int mListType; 184309c5dcee18ced447d049d5de882a9586694e04cDianne Hackborn public final int mFilter; 185a4af18755e0a344c628e4ddc4ece793d3401e6fbDianne Hackborn public final AppClickListener mClickListener; 186309c5dcee18ced447d049d5de882a9586694e04cDianne Hackborn public final CharSequence mInvalidSizeStr; 187309c5dcee18ced447d049d5de882a9586694e04cDianne Hackborn public final CharSequence mComputingSizeStr; 188309c5dcee18ced447d049d5de882a9586694e04cDianne Hackborn private final Bundle mSavedInstanceState; 189309c5dcee18ced447d049d5de882a9586694e04cDianne Hackborn 190309c5dcee18ced447d049d5de882a9586694e04cDianne Hackborn public ApplicationsAdapter mApplications; 191309c5dcee18ced447d049d5de882a9586694e04cDianne Hackborn public LayoutInflater mInflater; 192309c5dcee18ced447d049d5de882a9586694e04cDianne Hackborn public View mRootView; 193309c5dcee18ced447d049d5de882a9586694e04cDianne Hackborn 194a4af18755e0a344c628e4ddc4ece793d3401e6fbDianne Hackborn private IMediaContainerService mContainerService; 195a4af18755e0a344c628e4ddc4ece793d3401e6fbDianne Hackborn 196309c5dcee18ced447d049d5de882a9586694e04cDianne Hackborn private View mLoadingContainer; 197309c5dcee18ced447d049d5de882a9586694e04cDianne Hackborn 198309c5dcee18ced447d049d5de882a9586694e04cDianne Hackborn private View mListContainer; 199309c5dcee18ced447d049d5de882a9586694e04cDianne Hackborn 200c8a1db191207e38b7ad0acdfd276651e4911e812Alexandra Gherghina private ViewGroup mPinnedHeader; 201c8a1db191207e38b7ad0acdfd276651e4911e812Alexandra Gherghina 202309c5dcee18ced447d049d5de882a9586694e04cDianne Hackborn // ListView used to display list 203309c5dcee18ced447d049d5de882a9586694e04cDianne Hackborn private ListView mListView; 204309c5dcee18ced447d049d5de882a9586694e04cDianne Hackborn // Custom view used to display running processes 205309c5dcee18ced447d049d5de882a9586694e04cDianne Hackborn private RunningProcessesView mRunningProcessesView; 206309c5dcee18ced447d049d5de882a9586694e04cDianne Hackborn 207fe9590bb19e3acf6b68b67b40f43de8bc094d1b6Dianne Hackborn //private LinearColorBar mColorBar; 208fe9590bb19e3acf6b68b67b40f43de8bc094d1b6Dianne Hackborn //private TextView mStorageChartLabel; 209fe9590bb19e3acf6b68b67b40f43de8bc094d1b6Dianne Hackborn //private TextView mUsedStorageText; 210fe9590bb19e3acf6b68b67b40f43de8bc094d1b6Dianne Hackborn //private TextView mFreeStorageText; 211a4af18755e0a344c628e4ddc4ece793d3401e6fbDianne Hackborn private long mFreeStorage = 0, mAppStorage = 0, mTotalStorage = 0; 212309c5dcee18ced447d049d5de882a9586694e04cDianne Hackborn private long mLastUsedStorage, mLastAppStorage, mLastFreeStorage; 213309c5dcee18ced447d049d5de882a9586694e04cDianne Hackborn 214309c5dcee18ced447d049d5de882a9586694e04cDianne Hackborn final Runnable mRunningProcessesAvail = new Runnable() { 215309c5dcee18ced447d049d5de882a9586694e04cDianne Hackborn public void run() { 216309c5dcee18ced447d049d5de882a9586694e04cDianne Hackborn handleRunningProcessesAvail(); 217309c5dcee18ced447d049d5de882a9586694e04cDianne Hackborn } 218309c5dcee18ced447d049d5de882a9586694e04cDianne Hackborn }; 219309c5dcee18ced447d049d5de882a9586694e04cDianne Hackborn 220309c5dcee18ced447d049d5de882a9586694e04cDianne Hackborn public TabInfo(ManageApplications owner, ApplicationsState apps, 221a4af18755e0a344c628e4ddc4ece793d3401e6fbDianne Hackborn CharSequence label, int listType, AppClickListener clickListener, 222309c5dcee18ced447d049d5de882a9586694e04cDianne Hackborn Bundle savedInstanceState) { 223309c5dcee18ced447d049d5de882a9586694e04cDianne Hackborn mOwner = owner; 224309c5dcee18ced447d049d5de882a9586694e04cDianne Hackborn mApplicationsState = apps; 225309c5dcee18ced447d049d5de882a9586694e04cDianne Hackborn mLabel = label; 226309c5dcee18ced447d049d5de882a9586694e04cDianne Hackborn mListType = listType; 227309c5dcee18ced447d049d5de882a9586694e04cDianne Hackborn switch (listType) { 228309c5dcee18ced447d049d5de882a9586694e04cDianne Hackborn case LIST_TYPE_DOWNLOADED: mFilter = FILTER_APPS_THIRD_PARTY; break; 229309c5dcee18ced447d049d5de882a9586694e04cDianne Hackborn case LIST_TYPE_SDCARD: mFilter = FILTER_APPS_SDCARD; break; 23018b64f446cd7b9043909b0cd42d1ab364392da24Dianne Hackborn case LIST_TYPE_DISABLED: mFilter = FILTER_APPS_DISABLED; break; 231309c5dcee18ced447d049d5de882a9586694e04cDianne Hackborn default: mFilter = FILTER_APPS_ALL; break; 232309c5dcee18ced447d049d5de882a9586694e04cDianne Hackborn } 233309c5dcee18ced447d049d5de882a9586694e04cDianne Hackborn mClickListener = clickListener; 234309c5dcee18ced447d049d5de882a9586694e04cDianne Hackborn mInvalidSizeStr = owner.getActivity().getText(R.string.invalid_size_value); 235309c5dcee18ced447d049d5de882a9586694e04cDianne Hackborn mComputingSizeStr = owner.getActivity().getText(R.string.computing_size); 236309c5dcee18ced447d049d5de882a9586694e04cDianne Hackborn mSavedInstanceState = savedInstanceState; 237309c5dcee18ced447d049d5de882a9586694e04cDianne Hackborn } 238309c5dcee18ced447d049d5de882a9586694e04cDianne Hackborn 239a4af18755e0a344c628e4ddc4ece793d3401e6fbDianne Hackborn public void setContainerService(IMediaContainerService containerService) { 240a4af18755e0a344c628e4ddc4ece793d3401e6fbDianne Hackborn mContainerService = containerService; 241a4af18755e0a344c628e4ddc4ece793d3401e6fbDianne Hackborn updateStorageUsage(); 242a4af18755e0a344c628e4ddc4ece793d3401e6fbDianne Hackborn } 243a4af18755e0a344c628e4ddc4ece793d3401e6fbDianne Hackborn 244309c5dcee18ced447d049d5de882a9586694e04cDianne Hackborn public View build(LayoutInflater inflater, ViewGroup contentParent, View contentChild) { 245309c5dcee18ced447d049d5de882a9586694e04cDianne Hackborn if (mRootView != null) { 246309c5dcee18ced447d049d5de882a9586694e04cDianne Hackborn return mRootView; 247309c5dcee18ced447d049d5de882a9586694e04cDianne Hackborn } 248309c5dcee18ced447d049d5de882a9586694e04cDianne Hackborn 249309c5dcee18ced447d049d5de882a9586694e04cDianne Hackborn mInflater = inflater; 250309c5dcee18ced447d049d5de882a9586694e04cDianne Hackborn mRootView = inflater.inflate(mListType == LIST_TYPE_RUNNING 251309c5dcee18ced447d049d5de882a9586694e04cDianne Hackborn ? R.layout.manage_applications_running 252309c5dcee18ced447d049d5de882a9586694e04cDianne Hackborn : R.layout.manage_applications_apps, null); 253c8a1db191207e38b7ad0acdfd276651e4911e812Alexandra Gherghina mPinnedHeader = (ViewGroup) mRootView.findViewById(R.id.pinned_header); 254c8a1db191207e38b7ad0acdfd276651e4911e812Alexandra Gherghina if (mOwner.mProfileSpinnerAdapter != null) { 255c8a1db191207e38b7ad0acdfd276651e4911e812Alexandra Gherghina Spinner spinner = (Spinner) inflater.inflate(R.layout.spinner_view, null); 256c8a1db191207e38b7ad0acdfd276651e4911e812Alexandra Gherghina spinner.setAdapter(mOwner.mProfileSpinnerAdapter); 257c8a1db191207e38b7ad0acdfd276651e4911e812Alexandra Gherghina spinner.setOnItemSelectedListener(mOwner); 258c8a1db191207e38b7ad0acdfd276651e4911e812Alexandra Gherghina mPinnedHeader.addView(spinner); 259c8a1db191207e38b7ad0acdfd276651e4911e812Alexandra Gherghina mPinnedHeader.setVisibility(View.VISIBLE); 260c8a1db191207e38b7ad0acdfd276651e4911e812Alexandra Gherghina } 261309c5dcee18ced447d049d5de882a9586694e04cDianne Hackborn mLoadingContainer = mRootView.findViewById(R.id.loading_container); 262309c5dcee18ced447d049d5de882a9586694e04cDianne Hackborn mLoadingContainer.setVisibility(View.VISIBLE); 263309c5dcee18ced447d049d5de882a9586694e04cDianne Hackborn mListContainer = mRootView.findViewById(R.id.list_container); 264309c5dcee18ced447d049d5de882a9586694e04cDianne Hackborn if (mListContainer != null) { 265309c5dcee18ced447d049d5de882a9586694e04cDianne Hackborn // Create adapter and list view here 266309c5dcee18ced447d049d5de882a9586694e04cDianne Hackborn View emptyView = mListContainer.findViewById(com.android.internal.R.id.empty); 267309c5dcee18ced447d049d5de882a9586694e04cDianne Hackborn ListView lv = (ListView) mListContainer.findViewById(android.R.id.list); 268309c5dcee18ced447d049d5de882a9586694e04cDianne Hackborn if (emptyView != null) { 269309c5dcee18ced447d049d5de882a9586694e04cDianne Hackborn lv.setEmptyView(emptyView); 270309c5dcee18ced447d049d5de882a9586694e04cDianne Hackborn } 271309c5dcee18ced447d049d5de882a9586694e04cDianne Hackborn lv.setOnItemClickListener(this); 272309c5dcee18ced447d049d5de882a9586694e04cDianne Hackborn lv.setSaveEnabled(true); 273309c5dcee18ced447d049d5de882a9586694e04cDianne Hackborn lv.setItemsCanFocus(true); 274309c5dcee18ced447d049d5de882a9586694e04cDianne Hackborn lv.setTextFilterEnabled(true); 275309c5dcee18ced447d049d5de882a9586694e04cDianne Hackborn mListView = lv; 276309c5dcee18ced447d049d5de882a9586694e04cDianne Hackborn mApplications = new ApplicationsAdapter(mApplicationsState, this, mFilter); 277309c5dcee18ced447d049d5de882a9586694e04cDianne Hackborn mListView.setAdapter(mApplications); 278309c5dcee18ced447d049d5de882a9586694e04cDianne Hackborn mListView.setRecyclerListener(mApplications); 279fe9590bb19e3acf6b68b67b40f43de8bc094d1b6Dianne Hackborn //mColorBar = (LinearColorBar)mListContainer.findViewById(R.id.storage_color_bar); 280fe9590bb19e3acf6b68b67b40f43de8bc094d1b6Dianne Hackborn //mStorageChartLabel = (TextView)mListContainer.findViewById(R.id.storageChartLabel); 281fe9590bb19e3acf6b68b67b40f43de8bc094d1b6Dianne Hackborn //mUsedStorageText = (TextView)mListContainer.findViewById(R.id.usedStorageText); 282fe9590bb19e3acf6b68b67b40f43de8bc094d1b6Dianne Hackborn //mFreeStorageText = (TextView)mListContainer.findViewById(R.id.freeStorageText); 283309c5dcee18ced447d049d5de882a9586694e04cDianne Hackborn Utils.prepareCustomPreferencesList(contentParent, contentChild, mListView, false); 284a4af18755e0a344c628e4ddc4ece793d3401e6fbDianne Hackborn if (mFilter == FILTER_APPS_SDCARD) { 285fe9590bb19e3acf6b68b67b40f43de8bc094d1b6Dianne Hackborn //mStorageChartLabel.setText(mOwner.getActivity().getText( 286fe9590bb19e3acf6b68b67b40f43de8bc094d1b6Dianne Hackborn // R.string.sd_card_storage)); 287a4af18755e0a344c628e4ddc4ece793d3401e6fbDianne Hackborn } else { 288fe9590bb19e3acf6b68b67b40f43de8bc094d1b6Dianne Hackborn //mStorageChartLabel.setText(mOwner.getActivity().getText( 289fe9590bb19e3acf6b68b67b40f43de8bc094d1b6Dianne Hackborn // R.string.internal_storage)); 290a4af18755e0a344c628e4ddc4ece793d3401e6fbDianne Hackborn } 291a4af18755e0a344c628e4ddc4ece793d3401e6fbDianne Hackborn applyCurrentStorage(); 292309c5dcee18ced447d049d5de882a9586694e04cDianne Hackborn } 293309c5dcee18ced447d049d5de882a9586694e04cDianne Hackborn mRunningProcessesView = (RunningProcessesView)mRootView.findViewById( 294309c5dcee18ced447d049d5de882a9586694e04cDianne Hackborn R.id.running_processes); 295309c5dcee18ced447d049d5de882a9586694e04cDianne Hackborn if (mRunningProcessesView != null) { 296309c5dcee18ced447d049d5de882a9586694e04cDianne Hackborn mRunningProcessesView.doCreate(mSavedInstanceState); 297309c5dcee18ced447d049d5de882a9586694e04cDianne Hackborn } 298309c5dcee18ced447d049d5de882a9586694e04cDianne Hackborn 299309c5dcee18ced447d049d5de882a9586694e04cDianne Hackborn return mRootView; 300309c5dcee18ced447d049d5de882a9586694e04cDianne Hackborn } 301309c5dcee18ced447d049d5de882a9586694e04cDianne Hackborn 302a4af18755e0a344c628e4ddc4ece793d3401e6fbDianne Hackborn public void detachView() { 303a4af18755e0a344c628e4ddc4ece793d3401e6fbDianne Hackborn if (mRootView != null) { 304a4af18755e0a344c628e4ddc4ece793d3401e6fbDianne Hackborn ViewGroup group = (ViewGroup)mRootView.getParent(); 305a4af18755e0a344c628e4ddc4ece793d3401e6fbDianne Hackborn if (group != null) { 306a4af18755e0a344c628e4ddc4ece793d3401e6fbDianne Hackborn group.removeView(mRootView); 307a4af18755e0a344c628e4ddc4ece793d3401e6fbDianne Hackborn } 308a4af18755e0a344c628e4ddc4ece793d3401e6fbDianne Hackborn } 309a4af18755e0a344c628e4ddc4ece793d3401e6fbDianne Hackborn } 310a4af18755e0a344c628e4ddc4ece793d3401e6fbDianne Hackborn 311309c5dcee18ced447d049d5de882a9586694e04cDianne Hackborn public void resume(int sortOrder) { 312309c5dcee18ced447d049d5de882a9586694e04cDianne Hackborn if (mApplications != null) { 313309c5dcee18ced447d049d5de882a9586694e04cDianne Hackborn mApplications.resume(sortOrder); 314309c5dcee18ced447d049d5de882a9586694e04cDianne Hackborn } 315309c5dcee18ced447d049d5de882a9586694e04cDianne Hackborn if (mRunningProcessesView != null) { 316309c5dcee18ced447d049d5de882a9586694e04cDianne Hackborn boolean haveData = mRunningProcessesView.doResume(mOwner, mRunningProcessesAvail); 317309c5dcee18ced447d049d5de882a9586694e04cDianne Hackborn if (haveData) { 318309c5dcee18ced447d049d5de882a9586694e04cDianne Hackborn mRunningProcessesView.setVisibility(View.VISIBLE); 319309c5dcee18ced447d049d5de882a9586694e04cDianne Hackborn mLoadingContainer.setVisibility(View.INVISIBLE); 320309c5dcee18ced447d049d5de882a9586694e04cDianne Hackborn } else { 321309c5dcee18ced447d049d5de882a9586694e04cDianne Hackborn mLoadingContainer.setVisibility(View.VISIBLE); 322309c5dcee18ced447d049d5de882a9586694e04cDianne Hackborn } 323309c5dcee18ced447d049d5de882a9586694e04cDianne Hackborn } 324309c5dcee18ced447d049d5de882a9586694e04cDianne Hackborn } 325309c5dcee18ced447d049d5de882a9586694e04cDianne Hackborn 326309c5dcee18ced447d049d5de882a9586694e04cDianne Hackborn public void pause() { 327309c5dcee18ced447d049d5de882a9586694e04cDianne Hackborn if (mApplications != null) { 328309c5dcee18ced447d049d5de882a9586694e04cDianne Hackborn mApplications.pause(); 329309c5dcee18ced447d049d5de882a9586694e04cDianne Hackborn } 330309c5dcee18ced447d049d5de882a9586694e04cDianne Hackborn if (mRunningProcessesView != null) { 331309c5dcee18ced447d049d5de882a9586694e04cDianne Hackborn mRunningProcessesView.doPause(); 332309c5dcee18ced447d049d5de882a9586694e04cDianne Hackborn } 333309c5dcee18ced447d049d5de882a9586694e04cDianne Hackborn } 334309c5dcee18ced447d049d5de882a9586694e04cDianne Hackborn 335f3a9578910050d35fd536c1f9a7b5d629b3c19d8Jun Su public void release() { 336f3a9578910050d35fd536c1f9a7b5d629b3c19d8Jun Su if (mApplications != null) { 337f3a9578910050d35fd536c1f9a7b5d629b3c19d8Jun Su mApplications.release(); 338f3a9578910050d35fd536c1f9a7b5d629b3c19d8Jun Su } 339f3a9578910050d35fd536c1f9a7b5d629b3c19d8Jun Su } 340f3a9578910050d35fd536c1f9a7b5d629b3c19d8Jun Su 341309c5dcee18ced447d049d5de882a9586694e04cDianne Hackborn void updateStorageUsage() { 342309c5dcee18ced447d049d5de882a9586694e04cDianne Hackborn // Make sure a callback didn't come at an inopportune time. 343309c5dcee18ced447d049d5de882a9586694e04cDianne Hackborn if (mOwner.getActivity() == null) return; 344309c5dcee18ced447d049d5de882a9586694e04cDianne Hackborn // Doesn't make sense for stuff that is not an app list. 345309c5dcee18ced447d049d5de882a9586694e04cDianne Hackborn if (mApplications == null) return; 346309c5dcee18ced447d049d5de882a9586694e04cDianne Hackborn 347a4af18755e0a344c628e4ddc4ece793d3401e6fbDianne Hackborn mFreeStorage = 0; 348a4af18755e0a344c628e4ddc4ece793d3401e6fbDianne Hackborn mAppStorage = 0; 349a4af18755e0a344c628e4ddc4ece793d3401e6fbDianne Hackborn mTotalStorage = 0; 350309c5dcee18ced447d049d5de882a9586694e04cDianne Hackborn 351309c5dcee18ced447d049d5de882a9586694e04cDianne Hackborn if (mFilter == FILTER_APPS_SDCARD) { 352309c5dcee18ced447d049d5de882a9586694e04cDianne Hackborn if (mContainerService != null) { 353309c5dcee18ced447d049d5de882a9586694e04cDianne Hackborn try { 354309c5dcee18ced447d049d5de882a9586694e04cDianne Hackborn final long[] stats = mContainerService.getFileSystemStats( 355309c5dcee18ced447d049d5de882a9586694e04cDianne Hackborn Environment.getExternalStorageDirectory().getPath()); 356a4af18755e0a344c628e4ddc4ece793d3401e6fbDianne Hackborn mTotalStorage = stats[0]; 357a4af18755e0a344c628e4ddc4ece793d3401e6fbDianne Hackborn mFreeStorage = stats[1]; 358309c5dcee18ced447d049d5de882a9586694e04cDianne Hackborn } catch (RemoteException e) { 359309c5dcee18ced447d049d5de882a9586694e04cDianne Hackborn Log.w(TAG, "Problem in container service", e); 360309c5dcee18ced447d049d5de882a9586694e04cDianne Hackborn } 361309c5dcee18ced447d049d5de882a9586694e04cDianne Hackborn } 362309c5dcee18ced447d049d5de882a9586694e04cDianne Hackborn 363309c5dcee18ced447d049d5de882a9586694e04cDianne Hackborn if (mApplications != null) { 364309c5dcee18ced447d049d5de882a9586694e04cDianne Hackborn final int N = mApplications.getCount(); 365309c5dcee18ced447d049d5de882a9586694e04cDianne Hackborn for (int i=0; i<N; i++) { 366309c5dcee18ced447d049d5de882a9586694e04cDianne Hackborn ApplicationsState.AppEntry ae = mApplications.getAppEntry(i); 3671f6ddac9f41f341073e7cedd8f777a43b7d11679Dianne Hackborn mAppStorage += ae.externalCodeSize + ae.externalDataSize 3681f6ddac9f41f341073e7cedd8f777a43b7d11679Dianne Hackborn + ae.externalCacheSize; 369309c5dcee18ced447d049d5de882a9586694e04cDianne Hackborn } 370309c5dcee18ced447d049d5de882a9586694e04cDianne Hackborn } 371309c5dcee18ced447d049d5de882a9586694e04cDianne Hackborn } else { 372309c5dcee18ced447d049d5de882a9586694e04cDianne Hackborn if (mContainerService != null) { 373309c5dcee18ced447d049d5de882a9586694e04cDianne Hackborn try { 374309c5dcee18ced447d049d5de882a9586694e04cDianne Hackborn final long[] stats = mContainerService.getFileSystemStats( 375309c5dcee18ced447d049d5de882a9586694e04cDianne Hackborn Environment.getDataDirectory().getPath()); 376a4af18755e0a344c628e4ddc4ece793d3401e6fbDianne Hackborn mTotalStorage = stats[0]; 377a4af18755e0a344c628e4ddc4ece793d3401e6fbDianne Hackborn mFreeStorage = stats[1]; 378309c5dcee18ced447d049d5de882a9586694e04cDianne Hackborn } catch (RemoteException e) { 379309c5dcee18ced447d049d5de882a9586694e04cDianne Hackborn Log.w(TAG, "Problem in container service", e); 380309c5dcee18ced447d049d5de882a9586694e04cDianne Hackborn } 381309c5dcee18ced447d049d5de882a9586694e04cDianne Hackborn } 382309c5dcee18ced447d049d5de882a9586694e04cDianne Hackborn 383309c5dcee18ced447d049d5de882a9586694e04cDianne Hackborn final boolean emulatedStorage = Environment.isExternalStorageEmulated(); 384309c5dcee18ced447d049d5de882a9586694e04cDianne Hackborn if (mApplications != null) { 385309c5dcee18ced447d049d5de882a9586694e04cDianne Hackborn final int N = mApplications.getCount(); 386309c5dcee18ced447d049d5de882a9586694e04cDianne Hackborn for (int i=0; i<N; i++) { 387309c5dcee18ced447d049d5de882a9586694e04cDianne Hackborn ApplicationsState.AppEntry ae = mApplications.getAppEntry(i); 388a4af18755e0a344c628e4ddc4ece793d3401e6fbDianne Hackborn mAppStorage += ae.codeSize + ae.dataSize; 389309c5dcee18ced447d049d5de882a9586694e04cDianne Hackborn if (emulatedStorage) { 390a4af18755e0a344c628e4ddc4ece793d3401e6fbDianne Hackborn mAppStorage += ae.externalCodeSize + ae.externalDataSize; 391309c5dcee18ced447d049d5de882a9586694e04cDianne Hackborn } 392309c5dcee18ced447d049d5de882a9586694e04cDianne Hackborn } 393309c5dcee18ced447d049d5de882a9586694e04cDianne Hackborn } 394a4af18755e0a344c628e4ddc4ece793d3401e6fbDianne Hackborn mFreeStorage += mApplicationsState.sumCacheSizes(); 395309c5dcee18ced447d049d5de882a9586694e04cDianne Hackborn } 396a4af18755e0a344c628e4ddc4ece793d3401e6fbDianne Hackborn 397a4af18755e0a344c628e4ddc4ece793d3401e6fbDianne Hackborn applyCurrentStorage(); 398a4af18755e0a344c628e4ddc4ece793d3401e6fbDianne Hackborn } 399a4af18755e0a344c628e4ddc4ece793d3401e6fbDianne Hackborn 400a4af18755e0a344c628e4ddc4ece793d3401e6fbDianne Hackborn void applyCurrentStorage() { 401a4af18755e0a344c628e4ddc4ece793d3401e6fbDianne Hackborn // If view hierarchy is not yet created, no views to update. 402a4af18755e0a344c628e4ddc4ece793d3401e6fbDianne Hackborn if (mRootView == null) { 403a4af18755e0a344c628e4ddc4ece793d3401e6fbDianne Hackborn return; 404309c5dcee18ced447d049d5de882a9586694e04cDianne Hackborn } 405fe9590bb19e3acf6b68b67b40f43de8bc094d1b6Dianne Hackborn /* 406a4af18755e0a344c628e4ddc4ece793d3401e6fbDianne Hackborn if (mTotalStorage > 0) { 40737f3c8f574b984e4980ebf598358726b3f852156Fabrice Di Meglio BidiFormatter bidiFormatter = BidiFormatter.getInstance(); 408a4af18755e0a344c628e4ddc4ece793d3401e6fbDianne Hackborn mColorBar.setRatios((mTotalStorage-mFreeStorage-mAppStorage)/(float)mTotalStorage, 409a4af18755e0a344c628e4ddc4ece793d3401e6fbDianne Hackborn mAppStorage/(float)mTotalStorage, mFreeStorage/(float)mTotalStorage); 410a4af18755e0a344c628e4ddc4ece793d3401e6fbDianne Hackborn long usedStorage = mTotalStorage - mFreeStorage; 411309c5dcee18ced447d049d5de882a9586694e04cDianne Hackborn if (mLastUsedStorage != usedStorage) { 412309c5dcee18ced447d049d5de882a9586694e04cDianne Hackborn mLastUsedStorage = usedStorage; 41337f3c8f574b984e4980ebf598358726b3f852156Fabrice Di Meglio String sizeStr = bidiFormatter.unicodeWrap( 41437f3c8f574b984e4980ebf598358726b3f852156Fabrice Di Meglio Formatter.formatShortFileSize(mOwner.getActivity(), usedStorage)); 415309c5dcee18ced447d049d5de882a9586694e04cDianne Hackborn mUsedStorageText.setText(mOwner.getActivity().getResources().getString( 416309c5dcee18ced447d049d5de882a9586694e04cDianne Hackborn R.string.service_foreground_processes, sizeStr)); 417309c5dcee18ced447d049d5de882a9586694e04cDianne Hackborn } 418a4af18755e0a344c628e4ddc4ece793d3401e6fbDianne Hackborn if (mLastFreeStorage != mFreeStorage) { 419a4af18755e0a344c628e4ddc4ece793d3401e6fbDianne Hackborn mLastFreeStorage = mFreeStorage; 42037f3c8f574b984e4980ebf598358726b3f852156Fabrice Di Meglio String sizeStr = bidiFormatter.unicodeWrap( 42137f3c8f574b984e4980ebf598358726b3f852156Fabrice Di Meglio Formatter.formatShortFileSize(mOwner.getActivity(), mFreeStorage)); 422309c5dcee18ced447d049d5de882a9586694e04cDianne Hackborn mFreeStorageText.setText(mOwner.getActivity().getResources().getString( 423309c5dcee18ced447d049d5de882a9586694e04cDianne Hackborn R.string.service_background_processes, sizeStr)); 424309c5dcee18ced447d049d5de882a9586694e04cDianne Hackborn } 425309c5dcee18ced447d049d5de882a9586694e04cDianne Hackborn } else { 426309c5dcee18ced447d049d5de882a9586694e04cDianne Hackborn mColorBar.setRatios(0, 0, 0); 427309c5dcee18ced447d049d5de882a9586694e04cDianne Hackborn if (mLastUsedStorage != -1) { 428309c5dcee18ced447d049d5de882a9586694e04cDianne Hackborn mLastUsedStorage = -1; 429309c5dcee18ced447d049d5de882a9586694e04cDianne Hackborn mUsedStorageText.setText(""); 430309c5dcee18ced447d049d5de882a9586694e04cDianne Hackborn } 431309c5dcee18ced447d049d5de882a9586694e04cDianne Hackborn if (mLastFreeStorage != -1) { 432309c5dcee18ced447d049d5de882a9586694e04cDianne Hackborn mLastFreeStorage = -1; 433309c5dcee18ced447d049d5de882a9586694e04cDianne Hackborn mFreeStorageText.setText(""); 434309c5dcee18ced447d049d5de882a9586694e04cDianne Hackborn } 435309c5dcee18ced447d049d5de882a9586694e04cDianne Hackborn } 436fe9590bb19e3acf6b68b67b40f43de8bc094d1b6Dianne Hackborn */ 437309c5dcee18ced447d049d5de882a9586694e04cDianne Hackborn } 438309c5dcee18ced447d049d5de882a9586694e04cDianne Hackborn 439309c5dcee18ced447d049d5de882a9586694e04cDianne Hackborn @Override 440309c5dcee18ced447d049d5de882a9586694e04cDianne Hackborn public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 441a4af18755e0a344c628e4ddc4ece793d3401e6fbDianne Hackborn mClickListener.onItemClick(this, parent, view, position, id); 442309c5dcee18ced447d049d5de882a9586694e04cDianne Hackborn } 443309c5dcee18ced447d049d5de882a9586694e04cDianne Hackborn 444309c5dcee18ced447d049d5de882a9586694e04cDianne Hackborn void handleRunningProcessesAvail() { 445309c5dcee18ced447d049d5de882a9586694e04cDianne Hackborn mLoadingContainer.startAnimation(AnimationUtils.loadAnimation( 446309c5dcee18ced447d049d5de882a9586694e04cDianne Hackborn mOwner.getActivity(), android.R.anim.fade_out)); 447309c5dcee18ced447d049d5de882a9586694e04cDianne Hackborn mRunningProcessesView.startAnimation(AnimationUtils.loadAnimation( 448309c5dcee18ced447d049d5de882a9586694e04cDianne Hackborn mOwner.getActivity(), android.R.anim.fade_in)); 449309c5dcee18ced447d049d5de882a9586694e04cDianne Hackborn mRunningProcessesView.setVisibility(View.VISIBLE); 450309c5dcee18ced447d049d5de882a9586694e04cDianne Hackborn mLoadingContainer.setVisibility(View.GONE); 451309c5dcee18ced447d049d5de882a9586694e04cDianne Hackborn } 452309c5dcee18ced447d049d5de882a9586694e04cDianne Hackborn } 453309c5dcee18ced447d049d5de882a9586694e04cDianne Hackborn private final ArrayList<TabInfo> mTabs = new ArrayList<TabInfo>(); 45418b64f446cd7b9043909b0cd42d1ab364392da24Dianne Hackborn private int mNumTabs; 455309c5dcee18ced447d049d5de882a9586694e04cDianne Hackborn TabInfo mCurTab = null; 456309c5dcee18ced447d049d5de882a9586694e04cDianne Hackborn 457afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project // Size resource used for packages whose size computation failed for some reason 4589244df4c6422931697a0cf6e327b15cd71b6d8c4Dianne Hackborn CharSequence mInvalidSizeStr; 459afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project private CharSequence mComputingSizeStr; 460afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 461afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project // layout inflater object used to inflate views 462afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project private LayoutInflater mInflater; 463afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 464de03ac27b74d1d69c1fea36e7fb00f068ab16b21Suchi Amalapurapu private String mCurrentPkgName; 465afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 466ee2937941d4e9a4d2cd94d504ddaa9685bcca090Dianne Hackborn private Menu mOptionsMenu; 4677a3221bb95efd2e38e2aea243bcb13577bb276b3Amith Yamasani 4687a3221bb95efd2e38e2aea243bcb13577bb276b3Amith Yamasani // These are for keeping track of activity and spinner switch state. 469728ac35373028b79205a788c526ef4b495518ec1Dianne Hackborn private boolean mActivityResumed; 470728ac35373028b79205a788c526ef4b495518ec1Dianne Hackborn 4717a3221bb95efd2e38e2aea243bcb13577bb276b3Amith Yamasani static final int LIST_TYPE_DOWNLOADED = 0; 4727a3221bb95efd2e38e2aea243bcb13577bb276b3Amith Yamasani static final int LIST_TYPE_RUNNING = 1; 4737a3221bb95efd2e38e2aea243bcb13577bb276b3Amith Yamasani static final int LIST_TYPE_SDCARD = 2; 4747a3221bb95efd2e38e2aea243bcb13577bb276b3Amith Yamasani static final int LIST_TYPE_ALL = 3; 47518b64f446cd7b9043909b0cd42d1ab364392da24Dianne Hackborn static final int LIST_TYPE_DISABLED = 4; 476f4eb85bc3c57ca70b577cea1524431fead4a4cccDianne Hackborn 4770385cf14a1b02fafc3d1a094ccfee45de4e9b03aDianne Hackborn private boolean mShowBackground = false; 4780385cf14a1b02fafc3d1a094ccfee45de4e9b03aDianne Hackborn 4797a3221bb95efd2e38e2aea243bcb13577bb276b3Amith Yamasani private int mDefaultListType = -1; 480f4eb85bc3c57ca70b577cea1524431fead4a4cccDianne Hackborn 481309c5dcee18ced447d049d5de882a9586694e04cDianne Hackborn private ViewGroup mContentContainer; 482309c5dcee18ced447d049d5de882a9586694e04cDianne Hackborn private View mRootView; 483309c5dcee18ced447d049d5de882a9586694e04cDianne Hackborn private ViewPager mViewPager; 484c8a1db191207e38b7ad0acdfd276651e4911e812Alexandra Gherghina private UserSpinnerAdapter mProfileSpinnerAdapter; 485c8a1db191207e38b7ad0acdfd276651e4911e812Alexandra Gherghina private Context mContext; 486f4eb85bc3c57ca70b577cea1524431fead4a4cccDianne Hackborn 48714d5714a8238b244b974e4e62fe688398ab45dcbDianne Hackborn AlertDialog mResetDialog; 48814d5714a8238b244b974e4e62fe688398ab45dcbDianne Hackborn 489309c5dcee18ced447d049d5de882a9586694e04cDianne Hackborn class MyPagerAdapter extends PagerAdapter 490309c5dcee18ced447d049d5de882a9586694e04cDianne Hackborn implements ViewPager.OnPageChangeListener { 491309c5dcee18ced447d049d5de882a9586694e04cDianne Hackborn int mCurPos = 0; 492309c5dcee18ced447d049d5de882a9586694e04cDianne Hackborn 493309c5dcee18ced447d049d5de882a9586694e04cDianne Hackborn @Override 494309c5dcee18ced447d049d5de882a9586694e04cDianne Hackborn public int getCount() { 49518b64f446cd7b9043909b0cd42d1ab364392da24Dianne Hackborn return mNumTabs; 496309c5dcee18ced447d049d5de882a9586694e04cDianne Hackborn } 497309c5dcee18ced447d049d5de882a9586694e04cDianne Hackborn 498309c5dcee18ced447d049d5de882a9586694e04cDianne Hackborn @Override 499309c5dcee18ced447d049d5de882a9586694e04cDianne Hackborn public Object instantiateItem(ViewGroup container, int position) { 500309c5dcee18ced447d049d5de882a9586694e04cDianne Hackborn TabInfo tab = mTabs.get(position); 501309c5dcee18ced447d049d5de882a9586694e04cDianne Hackborn View root = tab.build(mInflater, mContentContainer, mRootView); 502309c5dcee18ced447d049d5de882a9586694e04cDianne Hackborn container.addView(root); 50318b64f446cd7b9043909b0cd42d1ab364392da24Dianne Hackborn root.setTag(R.id.name, tab); 504309c5dcee18ced447d049d5de882a9586694e04cDianne Hackborn return root; 505309c5dcee18ced447d049d5de882a9586694e04cDianne Hackborn } 506309c5dcee18ced447d049d5de882a9586694e04cDianne Hackborn 507309c5dcee18ced447d049d5de882a9586694e04cDianne Hackborn @Override 508309c5dcee18ced447d049d5de882a9586694e04cDianne Hackborn public void destroyItem(ViewGroup container, int position, Object object) { 509309c5dcee18ced447d049d5de882a9586694e04cDianne Hackborn container.removeView((View)object); 510ff3673c7f477b1d78e64a8bc28754552dcdc8826Dianne Hackborn } 511ff3673c7f477b1d78e64a8bc28754552dcdc8826Dianne Hackborn 512309c5dcee18ced447d049d5de882a9586694e04cDianne Hackborn @Override 513309c5dcee18ced447d049d5de882a9586694e04cDianne Hackborn public boolean isViewFromObject(View view, Object object) { 514309c5dcee18ced447d049d5de882a9586694e04cDianne Hackborn return view == object; 515309c5dcee18ced447d049d5de882a9586694e04cDianne Hackborn } 5167a3221bb95efd2e38e2aea243bcb13577bb276b3Amith Yamasani 517309c5dcee18ced447d049d5de882a9586694e04cDianne Hackborn @Override 51818b64f446cd7b9043909b0cd42d1ab364392da24Dianne Hackborn public int getItemPosition(Object object) { 51918b64f446cd7b9043909b0cd42d1ab364392da24Dianne Hackborn return super.getItemPosition(object); 52018b64f446cd7b9043909b0cd42d1ab364392da24Dianne Hackborn //return ((TabInfo)((View)object).getTag(R.id.name)).mListType; 52118b64f446cd7b9043909b0cd42d1ab364392da24Dianne Hackborn } 52218b64f446cd7b9043909b0cd42d1ab364392da24Dianne Hackborn 52318b64f446cd7b9043909b0cd42d1ab364392da24Dianne Hackborn @Override 524309c5dcee18ced447d049d5de882a9586694e04cDianne Hackborn public CharSequence getPageTitle(int position) { 525309c5dcee18ced447d049d5de882a9586694e04cDianne Hackborn return mTabs.get(position).mLabel; 526309c5dcee18ced447d049d5de882a9586694e04cDianne Hackborn } 527309c5dcee18ced447d049d5de882a9586694e04cDianne Hackborn 528309c5dcee18ced447d049d5de882a9586694e04cDianne Hackborn @Override 529309c5dcee18ced447d049d5de882a9586694e04cDianne Hackborn public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { 530309c5dcee18ced447d049d5de882a9586694e04cDianne Hackborn } 531309c5dcee18ced447d049d5de882a9586694e04cDianne Hackborn 532309c5dcee18ced447d049d5de882a9586694e04cDianne Hackborn @Override 533309c5dcee18ced447d049d5de882a9586694e04cDianne Hackborn public void onPageSelected(int position) { 534309c5dcee18ced447d049d5de882a9586694e04cDianne Hackborn mCurPos = position; 535309c5dcee18ced447d049d5de882a9586694e04cDianne Hackborn } 536309c5dcee18ced447d049d5de882a9586694e04cDianne Hackborn 537309c5dcee18ced447d049d5de882a9586694e04cDianne Hackborn @Override 538309c5dcee18ced447d049d5de882a9586694e04cDianne Hackborn public void onPageScrollStateChanged(int state) { 539309c5dcee18ced447d049d5de882a9586694e04cDianne Hackborn if (state == ViewPager.SCROLL_STATE_IDLE) { 540309c5dcee18ced447d049d5de882a9586694e04cDianne Hackborn updateCurrentTab(mCurPos); 541309c5dcee18ced447d049d5de882a9586694e04cDianne Hackborn } 5427a3221bb95efd2e38e2aea243bcb13577bb276b3Amith Yamasani } 5437a3221bb95efd2e38e2aea243bcb13577bb276b3Amith Yamasani } 5447a3221bb95efd2e38e2aea243bcb13577bb276b3Amith Yamasani 545e6dd1fa1851302710ac7845d25d8ad8a5b6ee438The Android Open Source Project /* 546e7623f775cb37a8de049dae8c03b5b396526fdd1Dianne Hackborn * Custom adapter implementation for the ListView 547e7623f775cb37a8de049dae8c03b5b396526fdd1Dianne Hackborn * This adapter maintains a map for each displayed application and its properties 548e7623f775cb37a8de049dae8c03b5b396526fdd1Dianne Hackborn * An index value on each AppInfo object indicates the correct position or index 549e7623f775cb37a8de049dae8c03b5b396526fdd1Dianne Hackborn * in the list. If the list gets updated dynamically when the user is viewing the list of 550e7623f775cb37a8de049dae8c03b5b396526fdd1Dianne Hackborn * applications, we need to return the correct index of position. This is done by mapping 551e7623f775cb37a8de049dae8c03b5b396526fdd1Dianne Hackborn * the getId methods via the package name into the internal maps and indices. 552e7623f775cb37a8de049dae8c03b5b396526fdd1Dianne Hackborn * The order of applications in the list is mirrored in mAppLocalList 553e6dd1fa1851302710ac7845d25d8ad8a5b6ee438The Android Open Source Project */ 554309c5dcee18ced447d049d5de882a9586694e04cDianne Hackborn static class ApplicationsAdapter extends BaseAdapter implements Filterable, 555e7623f775cb37a8de049dae8c03b5b396526fdd1Dianne Hackborn ApplicationsState.Callbacks, AbsListView.RecyclerListener { 556e7623f775cb37a8de049dae8c03b5b396526fdd1Dianne Hackborn private final ApplicationsState mState; 557309c5dcee18ced447d049d5de882a9586694e04cDianne Hackborn private final ApplicationsState.Session mSession; 558309c5dcee18ced447d049d5de882a9586694e04cDianne Hackborn private final TabInfo mTab; 559309c5dcee18ced447d049d5de882a9586694e04cDianne Hackborn private final Context mContext; 560e7623f775cb37a8de049dae8c03b5b396526fdd1Dianne Hackborn private final ArrayList<View> mActive = new ArrayList<View>(); 561309c5dcee18ced447d049d5de882a9586694e04cDianne Hackborn private final int mFilterMode; 562e7623f775cb37a8de049dae8c03b5b396526fdd1Dianne Hackborn private ArrayList<ApplicationsState.AppEntry> mBaseEntries; 563e7623f775cb37a8de049dae8c03b5b396526fdd1Dianne Hackborn private ArrayList<ApplicationsState.AppEntry> mEntries; 564e7623f775cb37a8de049dae8c03b5b396526fdd1Dianne Hackborn private boolean mResumed; 565309c5dcee18ced447d049d5de882a9586694e04cDianne Hackborn private int mLastSortMode=-1; 56619df79af269c4a2354b0989cebfcfe949aea42c4Dianne Hackborn private boolean mWaitingForData; 567bd9ddab4f4e1f47b141abdcc0248cc716112b3c7Dianne Hackborn private int mWhichSize = SIZE_TOTAL; 568e7623f775cb37a8de049dae8c03b5b396526fdd1Dianne Hackborn CharSequence mCurFilterPrefix; 569e7623f775cb37a8de049dae8c03b5b396526fdd1Dianne Hackborn 570e7623f775cb37a8de049dae8c03b5b396526fdd1Dianne Hackborn private Filter mFilter = new Filter() { 571e7623f775cb37a8de049dae8c03b5b396526fdd1Dianne Hackborn @Override 572e7623f775cb37a8de049dae8c03b5b396526fdd1Dianne Hackborn protected FilterResults performFiltering(CharSequence constraint) { 573e7623f775cb37a8de049dae8c03b5b396526fdd1Dianne Hackborn ArrayList<ApplicationsState.AppEntry> entries 574e7623f775cb37a8de049dae8c03b5b396526fdd1Dianne Hackborn = applyPrefixFilter(constraint, mBaseEntries); 575e7623f775cb37a8de049dae8c03b5b396526fdd1Dianne Hackborn FilterResults fr = new FilterResults(); 576e7623f775cb37a8de049dae8c03b5b396526fdd1Dianne Hackborn fr.values = entries; 577e7623f775cb37a8de049dae8c03b5b396526fdd1Dianne Hackborn fr.count = entries.size(); 578e7623f775cb37a8de049dae8c03b5b396526fdd1Dianne Hackborn return fr; 579e6dd1fa1851302710ac7845d25d8ad8a5b6ee438The Android Open Source Project } 580355b32faa924a0b39067dd759ba03e5af97065caSuchi Amalapurapu 581e7623f775cb37a8de049dae8c03b5b396526fdd1Dianne Hackborn @Override 582e7623f775cb37a8de049dae8c03b5b396526fdd1Dianne Hackborn protected void publishResults(CharSequence constraint, FilterResults results) { 583e7623f775cb37a8de049dae8c03b5b396526fdd1Dianne Hackborn mCurFilterPrefix = constraint; 584e7623f775cb37a8de049dae8c03b5b396526fdd1Dianne Hackborn mEntries = (ArrayList<ApplicationsState.AppEntry>)results.values; 585e7623f775cb37a8de049dae8c03b5b396526fdd1Dianne Hackborn notifyDataSetChanged(); 586309c5dcee18ced447d049d5de882a9586694e04cDianne Hackborn mTab.updateStorageUsage(); 587afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } 588e7623f775cb37a8de049dae8c03b5b396526fdd1Dianne Hackborn }; 589c0b23d3f0bb42b26950512590d5ebd6d3373032dSuchi Amalapurapu 590309c5dcee18ced447d049d5de882a9586694e04cDianne Hackborn public ApplicationsAdapter(ApplicationsState state, TabInfo tab, int filterMode) { 591e7623f775cb37a8de049dae8c03b5b396526fdd1Dianne Hackborn mState = state; 592309c5dcee18ced447d049d5de882a9586694e04cDianne Hackborn mSession = state.newSession(this); 593309c5dcee18ced447d049d5de882a9586694e04cDianne Hackborn mTab = tab; 594309c5dcee18ced447d049d5de882a9586694e04cDianne Hackborn mContext = tab.mOwner.getActivity(); 595309c5dcee18ced447d049d5de882a9586694e04cDianne Hackborn mFilterMode = filterMode; 596c0b23d3f0bb42b26950512590d5ebd6d3373032dSuchi Amalapurapu } 597e7623f775cb37a8de049dae8c03b5b396526fdd1Dianne Hackborn 598309c5dcee18ced447d049d5de882a9586694e04cDianne Hackborn public void resume(int sort) { 599e7623f775cb37a8de049dae8c03b5b396526fdd1Dianne Hackborn if (DEBUG) Log.i(TAG, "Resume! mResumed=" + mResumed); 600e7623f775cb37a8de049dae8c03b5b396526fdd1Dianne Hackborn if (!mResumed) { 601e7623f775cb37a8de049dae8c03b5b396526fdd1Dianne Hackborn mResumed = true; 602309c5dcee18ced447d049d5de882a9586694e04cDianne Hackborn mSession.resume(); 603e7623f775cb37a8de049dae8c03b5b396526fdd1Dianne Hackborn mLastSortMode = sort; 60419df79af269c4a2354b0989cebfcfe949aea42c4Dianne Hackborn rebuild(true); 605e7623f775cb37a8de049dae8c03b5b396526fdd1Dianne Hackborn } else { 606309c5dcee18ced447d049d5de882a9586694e04cDianne Hackborn rebuild(sort); 607c0b23d3f0bb42b26950512590d5ebd6d3373032dSuchi Amalapurapu } 608e6dd1fa1851302710ac7845d25d8ad8a5b6ee438The Android Open Source Project } 609c0b23d3f0bb42b26950512590d5ebd6d3373032dSuchi Amalapurapu 610e7623f775cb37a8de049dae8c03b5b396526fdd1Dianne Hackborn public void pause() { 611e7623f775cb37a8de049dae8c03b5b396526fdd1Dianne Hackborn if (mResumed) { 612e7623f775cb37a8de049dae8c03b5b396526fdd1Dianne Hackborn mResumed = false; 613309c5dcee18ced447d049d5de882a9586694e04cDianne Hackborn mSession.pause(); 614e7623f775cb37a8de049dae8c03b5b396526fdd1Dianne Hackborn } 615afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } 616b285593cafacc58ecfdf97be395dc8f5a7493051Suchi Amalapurapu 617f3a9578910050d35fd536c1f9a7b5d629b3c19d8Jun Su public void release() { 618f3a9578910050d35fd536c1f9a7b5d629b3c19d8Jun Su mSession.release(); 619f3a9578910050d35fd536c1f9a7b5d629b3c19d8Jun Su } 620f3a9578910050d35fd536c1f9a7b5d629b3c19d8Jun Su 621309c5dcee18ced447d049d5de882a9586694e04cDianne Hackborn public void rebuild(int sort) { 622309c5dcee18ced447d049d5de882a9586694e04cDianne Hackborn if (sort == mLastSortMode) { 623e7623f775cb37a8de049dae8c03b5b396526fdd1Dianne Hackborn return; 624e7623f775cb37a8de049dae8c03b5b396526fdd1Dianne Hackborn } 625e7623f775cb37a8de049dae8c03b5b396526fdd1Dianne Hackborn mLastSortMode = sort; 62619df79af269c4a2354b0989cebfcfe949aea42c4Dianne Hackborn rebuild(true); 627afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } 628afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 62919df79af269c4a2354b0989cebfcfe949aea42c4Dianne Hackborn public void rebuild(boolean eraseold) { 630e7623f775cb37a8de049dae8c03b5b396526fdd1Dianne Hackborn if (DEBUG) Log.i(TAG, "Rebuilding app list..."); 631e7623f775cb37a8de049dae8c03b5b396526fdd1Dianne Hackborn ApplicationsState.AppFilter filterObj; 632e7623f775cb37a8de049dae8c03b5b396526fdd1Dianne Hackborn Comparator<AppEntry> comparatorObj; 633bd9ddab4f4e1f47b141abdcc0248cc716112b3c7Dianne Hackborn boolean emulated = Environment.isExternalStorageEmulated(); 634bd9ddab4f4e1f47b141abdcc0248cc716112b3c7Dianne Hackborn if (emulated) { 635bd9ddab4f4e1f47b141abdcc0248cc716112b3c7Dianne Hackborn mWhichSize = SIZE_TOTAL; 636bd9ddab4f4e1f47b141abdcc0248cc716112b3c7Dianne Hackborn } else { 637bd9ddab4f4e1f47b141abdcc0248cc716112b3c7Dianne Hackborn mWhichSize = SIZE_INTERNAL; 638bd9ddab4f4e1f47b141abdcc0248cc716112b3c7Dianne Hackborn } 639309c5dcee18ced447d049d5de882a9586694e04cDianne Hackborn switch (mFilterMode) { 640e7623f775cb37a8de049dae8c03b5b396526fdd1Dianne Hackborn case FILTER_APPS_THIRD_PARTY: 641e7623f775cb37a8de049dae8c03b5b396526fdd1Dianne Hackborn filterObj = ApplicationsState.THIRD_PARTY_FILTER; 642e7623f775cb37a8de049dae8c03b5b396526fdd1Dianne Hackborn break; 643e7623f775cb37a8de049dae8c03b5b396526fdd1Dianne Hackborn case FILTER_APPS_SDCARD: 644e7623f775cb37a8de049dae8c03b5b396526fdd1Dianne Hackborn filterObj = ApplicationsState.ON_SD_CARD_FILTER; 645bd9ddab4f4e1f47b141abdcc0248cc716112b3c7Dianne Hackborn if (!emulated) { 646bd9ddab4f4e1f47b141abdcc0248cc716112b3c7Dianne Hackborn mWhichSize = SIZE_EXTERNAL; 647bd9ddab4f4e1f47b141abdcc0248cc716112b3c7Dianne Hackborn } 648e7623f775cb37a8de049dae8c03b5b396526fdd1Dianne Hackborn break; 64918b64f446cd7b9043909b0cd42d1ab364392da24Dianne Hackborn case FILTER_APPS_DISABLED: 65018b64f446cd7b9043909b0cd42d1ab364392da24Dianne Hackborn filterObj = ApplicationsState.DISABLED_FILTER; 65118b64f446cd7b9043909b0cd42d1ab364392da24Dianne Hackborn break; 652e7623f775cb37a8de049dae8c03b5b396526fdd1Dianne Hackborn default: 65318b64f446cd7b9043909b0cd42d1ab364392da24Dianne Hackborn filterObj = ApplicationsState.ALL_ENABLED_FILTER; 654e7623f775cb37a8de049dae8c03b5b396526fdd1Dianne Hackborn break; 655e7623f775cb37a8de049dae8c03b5b396526fdd1Dianne Hackborn } 656e7623f775cb37a8de049dae8c03b5b396526fdd1Dianne Hackborn switch (mLastSortMode) { 657e7623f775cb37a8de049dae8c03b5b396526fdd1Dianne Hackborn case SORT_ORDER_SIZE: 658430a3d3376cfa2c2a03d6f18d28577c34750102cDianne Hackborn switch (mWhichSize) { 659430a3d3376cfa2c2a03d6f18d28577c34750102cDianne Hackborn case SIZE_INTERNAL: 660430a3d3376cfa2c2a03d6f18d28577c34750102cDianne Hackborn comparatorObj = ApplicationsState.INTERNAL_SIZE_COMPARATOR; 661430a3d3376cfa2c2a03d6f18d28577c34750102cDianne Hackborn break; 662430a3d3376cfa2c2a03d6f18d28577c34750102cDianne Hackborn case SIZE_EXTERNAL: 663430a3d3376cfa2c2a03d6f18d28577c34750102cDianne Hackborn comparatorObj = ApplicationsState.EXTERNAL_SIZE_COMPARATOR; 664430a3d3376cfa2c2a03d6f18d28577c34750102cDianne Hackborn break; 665430a3d3376cfa2c2a03d6f18d28577c34750102cDianne Hackborn default: 666430a3d3376cfa2c2a03d6f18d28577c34750102cDianne Hackborn comparatorObj = ApplicationsState.SIZE_COMPARATOR; 667430a3d3376cfa2c2a03d6f18d28577c34750102cDianne Hackborn break; 668430a3d3376cfa2c2a03d6f18d28577c34750102cDianne Hackborn } 669e7623f775cb37a8de049dae8c03b5b396526fdd1Dianne Hackborn break; 670e7623f775cb37a8de049dae8c03b5b396526fdd1Dianne Hackborn default: 671e7623f775cb37a8de049dae8c03b5b396526fdd1Dianne Hackborn comparatorObj = ApplicationsState.ALPHA_COMPARATOR; 672e7623f775cb37a8de049dae8c03b5b396526fdd1Dianne Hackborn break; 673e7623f775cb37a8de049dae8c03b5b396526fdd1Dianne Hackborn } 67419df79af269c4a2354b0989cebfcfe949aea42c4Dianne Hackborn ArrayList<ApplicationsState.AppEntry> entries 675309c5dcee18ced447d049d5de882a9586694e04cDianne Hackborn = mSession.rebuild(filterObj, comparatorObj); 67619df79af269c4a2354b0989cebfcfe949aea42c4Dianne Hackborn if (entries == null && !eraseold) { 67719df79af269c4a2354b0989cebfcfe949aea42c4Dianne Hackborn // Don't have new list yet, but can continue using the old one. 67819df79af269c4a2354b0989cebfcfe949aea42c4Dianne Hackborn return; 67919df79af269c4a2354b0989cebfcfe949aea42c4Dianne Hackborn } 68019df79af269c4a2354b0989cebfcfe949aea42c4Dianne Hackborn mBaseEntries = entries; 68119df79af269c4a2354b0989cebfcfe949aea42c4Dianne Hackborn if (mBaseEntries != null) { 68219df79af269c4a2354b0989cebfcfe949aea42c4Dianne Hackborn mEntries = applyPrefixFilter(mCurFilterPrefix, mBaseEntries); 68319df79af269c4a2354b0989cebfcfe949aea42c4Dianne Hackborn } else { 68419df79af269c4a2354b0989cebfcfe949aea42c4Dianne Hackborn mEntries = null; 68519df79af269c4a2354b0989cebfcfe949aea42c4Dianne Hackborn } 686e7623f775cb37a8de049dae8c03b5b396526fdd1Dianne Hackborn notifyDataSetChanged(); 687309c5dcee18ced447d049d5de882a9586694e04cDianne Hackborn mTab.updateStorageUsage(); 68819df79af269c4a2354b0989cebfcfe949aea42c4Dianne Hackborn 68919df79af269c4a2354b0989cebfcfe949aea42c4Dianne Hackborn if (entries == null) { 69019df79af269c4a2354b0989cebfcfe949aea42c4Dianne Hackborn mWaitingForData = true; 691309c5dcee18ced447d049d5de882a9586694e04cDianne Hackborn mTab.mListContainer.setVisibility(View.INVISIBLE); 692309c5dcee18ced447d049d5de882a9586694e04cDianne Hackborn mTab.mLoadingContainer.setVisibility(View.VISIBLE); 69319df79af269c4a2354b0989cebfcfe949aea42c4Dianne Hackborn } else { 694309c5dcee18ced447d049d5de882a9586694e04cDianne Hackborn mTab.mListContainer.setVisibility(View.VISIBLE); 695309c5dcee18ced447d049d5de882a9586694e04cDianne Hackborn mTab.mLoadingContainer.setVisibility(View.GONE); 69619df79af269c4a2354b0989cebfcfe949aea42c4Dianne Hackborn } 697afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } 698afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 699e7623f775cb37a8de049dae8c03b5b396526fdd1Dianne Hackborn ArrayList<ApplicationsState.AppEntry> applyPrefixFilter(CharSequence prefix, 700e7623f775cb37a8de049dae8c03b5b396526fdd1Dianne Hackborn ArrayList<ApplicationsState.AppEntry> origEntries) { 701e7623f775cb37a8de049dae8c03b5b396526fdd1Dianne Hackborn if (prefix == null || prefix.length() == 0) { 702e7623f775cb37a8de049dae8c03b5b396526fdd1Dianne Hackborn return origEntries; 703afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } else { 704e7623f775cb37a8de049dae8c03b5b396526fdd1Dianne Hackborn String prefixStr = ApplicationsState.normalize(prefix.toString()); 705e7623f775cb37a8de049dae8c03b5b396526fdd1Dianne Hackborn final String spacePrefixStr = " " + prefixStr; 706e7623f775cb37a8de049dae8c03b5b396526fdd1Dianne Hackborn ArrayList<ApplicationsState.AppEntry> newEntries 707e7623f775cb37a8de049dae8c03b5b396526fdd1Dianne Hackborn = new ArrayList<ApplicationsState.AppEntry>(); 708e7623f775cb37a8de049dae8c03b5b396526fdd1Dianne Hackborn for (int i=0; i<origEntries.size(); i++) { 709e7623f775cb37a8de049dae8c03b5b396526fdd1Dianne Hackborn ApplicationsState.AppEntry entry = origEntries.get(i); 710e7623f775cb37a8de049dae8c03b5b396526fdd1Dianne Hackborn String nlabel = entry.getNormalizedLabel(); 711e7623f775cb37a8de049dae8c03b5b396526fdd1Dianne Hackborn if (nlabel.startsWith(prefixStr) || nlabel.indexOf(spacePrefixStr) != -1) { 712e7623f775cb37a8de049dae8c03b5b396526fdd1Dianne Hackborn newEntries.add(entry); 713ff271ce1b70d6a8c59f3ea8904ef2025061e73f1Suchi Amalapurapu } 714ff271ce1b70d6a8c59f3ea8904ef2025061e73f1Suchi Amalapurapu } 715e7623f775cb37a8de049dae8c03b5b396526fdd1Dianne Hackborn return newEntries; 716afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } 717afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } 718ff271ce1b70d6a8c59f3ea8904ef2025061e73f1Suchi Amalapurapu 719e7623f775cb37a8de049dae8c03b5b396526fdd1Dianne Hackborn @Override 720e7623f775cb37a8de049dae8c03b5b396526fdd1Dianne Hackborn public void onRunningStateChanged(boolean running) { 721309c5dcee18ced447d049d5de882a9586694e04cDianne Hackborn mTab.mOwner.getActivity().setProgressBarIndeterminateVisibility(running); 722afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } 723b285593cafacc58ecfdf97be395dc8f5a7493051Suchi Amalapurapu 724e7623f775cb37a8de049dae8c03b5b396526fdd1Dianne Hackborn @Override 72519df79af269c4a2354b0989cebfcfe949aea42c4Dianne Hackborn public void onRebuildComplete(ArrayList<AppEntry> apps) { 726309c5dcee18ced447d049d5de882a9586694e04cDianne Hackborn if (mTab.mLoadingContainer.getVisibility() == View.VISIBLE) { 727309c5dcee18ced447d049d5de882a9586694e04cDianne Hackborn mTab.mLoadingContainer.startAnimation(AnimationUtils.loadAnimation( 728309c5dcee18ced447d049d5de882a9586694e04cDianne Hackborn mContext, android.R.anim.fade_out)); 729309c5dcee18ced447d049d5de882a9586694e04cDianne Hackborn mTab.mListContainer.startAnimation(AnimationUtils.loadAnimation( 730309c5dcee18ced447d049d5de882a9586694e04cDianne Hackborn mContext, android.R.anim.fade_in)); 7314e4ed14ee2b82cb90a25b3027eb36f190ce2e1e7Dianne Hackborn } 732309c5dcee18ced447d049d5de882a9586694e04cDianne Hackborn mTab.mListContainer.setVisibility(View.VISIBLE); 733309c5dcee18ced447d049d5de882a9586694e04cDianne Hackborn mTab.mLoadingContainer.setVisibility(View.GONE); 73419df79af269c4a2354b0989cebfcfe949aea42c4Dianne Hackborn mWaitingForData = false; 73519df79af269c4a2354b0989cebfcfe949aea42c4Dianne Hackborn mBaseEntries = apps; 73619df79af269c4a2354b0989cebfcfe949aea42c4Dianne Hackborn mEntries = applyPrefixFilter(mCurFilterPrefix, mBaseEntries); 73719df79af269c4a2354b0989cebfcfe949aea42c4Dianne Hackborn notifyDataSetChanged(); 738309c5dcee18ced447d049d5de882a9586694e04cDianne Hackborn mTab.updateStorageUsage(); 73919df79af269c4a2354b0989cebfcfe949aea42c4Dianne Hackborn } 74019df79af269c4a2354b0989cebfcfe949aea42c4Dianne Hackborn 74119df79af269c4a2354b0989cebfcfe949aea42c4Dianne Hackborn @Override 742e7623f775cb37a8de049dae8c03b5b396526fdd1Dianne Hackborn public void onPackageListChanged() { 74319df79af269c4a2354b0989cebfcfe949aea42c4Dianne Hackborn rebuild(false); 744afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } 745b285593cafacc58ecfdf97be395dc8f5a7493051Suchi Amalapurapu 746e7623f775cb37a8de049dae8c03b5b396526fdd1Dianne Hackborn @Override 747e7623f775cb37a8de049dae8c03b5b396526fdd1Dianne Hackborn public void onPackageIconChanged() { 748e7623f775cb37a8de049dae8c03b5b396526fdd1Dianne Hackborn // We ensure icons are loaded when their item is displayed, so 749e7623f775cb37a8de049dae8c03b5b396526fdd1Dianne Hackborn // don't care about icons loaded in the background. 750afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } 751b285593cafacc58ecfdf97be395dc8f5a7493051Suchi Amalapurapu 752e7623f775cb37a8de049dae8c03b5b396526fdd1Dianne Hackborn @Override 753e7623f775cb37a8de049dae8c03b5b396526fdd1Dianne Hackborn public void onPackageSizeChanged(String packageName) { 754e7623f775cb37a8de049dae8c03b5b396526fdd1Dianne Hackborn for (int i=0; i<mActive.size(); i++) { 755e7623f775cb37a8de049dae8c03b5b396526fdd1Dianne Hackborn AppViewHolder holder = (AppViewHolder)mActive.get(i).getTag(); 756e7623f775cb37a8de049dae8c03b5b396526fdd1Dianne Hackborn if (holder.entry.info.packageName.equals(packageName)) { 757e7623f775cb37a8de049dae8c03b5b396526fdd1Dianne Hackborn synchronized (holder.entry) { 758309c5dcee18ced447d049d5de882a9586694e04cDianne Hackborn holder.updateSizeText(mTab.mInvalidSizeStr, mWhichSize); 759c0b23d3f0bb42b26950512590d5ebd6d3373032dSuchi Amalapurapu } 760309c5dcee18ced447d049d5de882a9586694e04cDianne Hackborn if (holder.entry.info.packageName.equals(mTab.mOwner.mCurrentPkgName) 761e7623f775cb37a8de049dae8c03b5b396526fdd1Dianne Hackborn && mLastSortMode == SORT_ORDER_SIZE) { 762e7623f775cb37a8de049dae8c03b5b396526fdd1Dianne Hackborn // We got the size information for the last app the 763e7623f775cb37a8de049dae8c03b5b396526fdd1Dianne Hackborn // user viewed, and are sorting by size... they may 764e7623f775cb37a8de049dae8c03b5b396526fdd1Dianne Hackborn // have cleared data, so we immediately want to resort 765e7623f775cb37a8de049dae8c03b5b396526fdd1Dianne Hackborn // the list with the new size to reflect it to the user. 76619df79af269c4a2354b0989cebfcfe949aea42c4Dianne Hackborn rebuild(false); 767c0b23d3f0bb42b26950512590d5ebd6d3373032dSuchi Amalapurapu } 768309c5dcee18ced447d049d5de882a9586694e04cDianne Hackborn mTab.updateStorageUsage(); 769e7623f775cb37a8de049dae8c03b5b396526fdd1Dianne Hackborn return; 770c0b23d3f0bb42b26950512590d5ebd6d3373032dSuchi Amalapurapu } 771c0b23d3f0bb42b26950512590d5ebd6d3373032dSuchi Amalapurapu } 772c0b23d3f0bb42b26950512590d5ebd6d3373032dSuchi Amalapurapu } 773c0b23d3f0bb42b26950512590d5ebd6d3373032dSuchi Amalapurapu 774e7623f775cb37a8de049dae8c03b5b396526fdd1Dianne Hackborn @Override 775e7623f775cb37a8de049dae8c03b5b396526fdd1Dianne Hackborn public void onAllSizesComputed() { 776e7623f775cb37a8de049dae8c03b5b396526fdd1Dianne Hackborn if (mLastSortMode == SORT_ORDER_SIZE) { 77719df79af269c4a2354b0989cebfcfe949aea42c4Dianne Hackborn rebuild(false); 778afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } 779a4af18755e0a344c628e4ddc4ece793d3401e6fbDianne Hackborn mTab.updateStorageUsage(); 780afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } 781afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 782afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project public int getCount() { 783e7623f775cb37a8de049dae8c03b5b396526fdd1Dianne Hackborn return mEntries != null ? mEntries.size() : 0; 784afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } 785afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 786afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project public Object getItem(int position) { 787e7623f775cb37a8de049dae8c03b5b396526fdd1Dianne Hackborn return mEntries.get(position); 788afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } 789afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 790e7623f775cb37a8de049dae8c03b5b396526fdd1Dianne Hackborn public ApplicationsState.AppEntry getAppEntry(int position) { 791e7623f775cb37a8de049dae8c03b5b396526fdd1Dianne Hackborn return mEntries.get(position); 792afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } 793afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 794afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project public long getItemId(int position) { 795e7623f775cb37a8de049dae8c03b5b396526fdd1Dianne Hackborn return mEntries.get(position).id; 796afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } 797afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 798afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project public View getView(int position, View convertView, ViewGroup parent) { 799347c9a0544328e65120582834ce330fb0d473f28Jeff Brown // A ViewHolder keeps references to children views to avoid unnecessary calls 800afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project // to findViewById() on each row. 801309c5dcee18ced447d049d5de882a9586694e04cDianne Hackborn AppViewHolder holder = AppViewHolder.createOrRecycle(mTab.mInflater, convertView); 8029244df4c6422931697a0cf6e327b15cd71b6d8c4Dianne Hackborn convertView = holder.rootView; 803afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 804afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project // Bind the data efficiently with the holder 805e7623f775cb37a8de049dae8c03b5b396526fdd1Dianne Hackborn ApplicationsState.AppEntry entry = mEntries.get(position); 806e7623f775cb37a8de049dae8c03b5b396526fdd1Dianne Hackborn synchronized (entry) { 807e7623f775cb37a8de049dae8c03b5b396526fdd1Dianne Hackborn holder.entry = entry; 808e7623f775cb37a8de049dae8c03b5b396526fdd1Dianne Hackborn if (entry.label != null) { 809e7623f775cb37a8de049dae8c03b5b396526fdd1Dianne Hackborn holder.appName.setText(entry.label); 810afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } 811e7623f775cb37a8de049dae8c03b5b396526fdd1Dianne Hackborn mState.ensureIcon(entry); 812e7623f775cb37a8de049dae8c03b5b396526fdd1Dianne Hackborn if (entry.icon != null) { 813e7623f775cb37a8de049dae8c03b5b396526fdd1Dianne Hackborn holder.appIcon.setImageDrawable(entry.icon); 814afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } 815309c5dcee18ced447d049d5de882a9586694e04cDianne Hackborn holder.updateSizeText(mTab.mInvalidSizeStr, mWhichSize); 8163db54cb97630fe83342c2ca189d13ff5a1a598d3Dianne Hackborn if ((entry.info.flags&ApplicationInfo.FLAG_INSTALLED) == 0) { 8173db54cb97630fe83342c2ca189d13ff5a1a598d3Dianne Hackborn holder.disabled.setVisibility(View.VISIBLE); 8183db54cb97630fe83342c2ca189d13ff5a1a598d3Dianne Hackborn holder.disabled.setText(R.string.not_installed); 8193db54cb97630fe83342c2ca189d13ff5a1a598d3Dianne Hackborn } else if (!entry.info.enabled) { 8203db54cb97630fe83342c2ca189d13ff5a1a598d3Dianne Hackborn holder.disabled.setVisibility(View.VISIBLE); 8213db54cb97630fe83342c2ca189d13ff5a1a598d3Dianne Hackborn holder.disabled.setText(R.string.disabled); 82244178e2801c013e60defb4b5f390d893e7344a71Dianne Hackborn } else { 82344178e2801c013e60defb4b5f390d893e7344a71Dianne Hackborn holder.disabled.setVisibility(View.GONE); 82444178e2801c013e60defb4b5f390d893e7344a71Dianne Hackborn } 825309c5dcee18ced447d049d5de882a9586694e04cDianne Hackborn if (mFilterMode == FILTER_APPS_SDCARD) { 8266dc1bf84cf72dd72a2517878f6b280e8afdcf4c2Dianne Hackborn holder.checkBox.setVisibility(View.VISIBLE); 8276dc1bf84cf72dd72a2517878f6b280e8afdcf4c2Dianne Hackborn holder.checkBox.setChecked((entry.info.flags 8286dc1bf84cf72dd72a2517878f6b280e8afdcf4c2Dianne Hackborn & ApplicationInfo.FLAG_EXTERNAL_STORAGE) != 0); 8296dc1bf84cf72dd72a2517878f6b280e8afdcf4c2Dianne Hackborn } else { 8306dc1bf84cf72dd72a2517878f6b280e8afdcf4c2Dianne Hackborn holder.checkBox.setVisibility(View.GONE); 8316dc1bf84cf72dd72a2517878f6b280e8afdcf4c2Dianne Hackborn } 832afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } 833e7623f775cb37a8de049dae8c03b5b396526fdd1Dianne Hackborn mActive.remove(convertView); 834e7623f775cb37a8de049dae8c03b5b396526fdd1Dianne Hackborn mActive.add(convertView); 835afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project return convertView; 836afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } 837c0b23d3f0bb42b26950512590d5ebd6d3373032dSuchi Amalapurapu 838e7623f775cb37a8de049dae8c03b5b396526fdd1Dianne Hackborn @Override 839c0b23d3f0bb42b26950512590d5ebd6d3373032dSuchi Amalapurapu public Filter getFilter() { 840e7623f775cb37a8de049dae8c03b5b396526fdd1Dianne Hackborn return mFilter; 841c0b23d3f0bb42b26950512590d5ebd6d3373032dSuchi Amalapurapu } 842c0b23d3f0bb42b26950512590d5ebd6d3373032dSuchi Amalapurapu 843e7623f775cb37a8de049dae8c03b5b396526fdd1Dianne Hackborn @Override 844e7623f775cb37a8de049dae8c03b5b396526fdd1Dianne Hackborn public void onMovedToScrapHeap(View view) { 845e7623f775cb37a8de049dae8c03b5b396526fdd1Dianne Hackborn mActive.remove(view); 846728ac35373028b79205a788c526ef4b495518ec1Dianne Hackborn } 847728ac35373028b79205a788c526ef4b495518ec1Dianne Hackborn } 848c8a1db191207e38b7ad0acdfd276651e4911e812Alexandra Gherghina 849afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project @Override 850f4eb85bc3c57ca70b577cea1524431fead4a4cccDianne Hackborn public void onCreate(Bundle savedInstanceState) { 851afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project super.onCreate(savedInstanceState); 852f4eb85bc3c57ca70b577cea1524431fead4a4cccDianne Hackborn 853f4eb85bc3c57ca70b577cea1524431fead4a4cccDianne Hackborn setHasOptionsMenu(true); 854f4eb85bc3c57ca70b577cea1524431fead4a4cccDianne Hackborn 855c8a1db191207e38b7ad0acdfd276651e4911e812Alexandra Gherghina mContext = getActivity(); 856f4eb85bc3c57ca70b577cea1524431fead4a4cccDianne Hackborn mApplicationsState = ApplicationsState.getInstance(getActivity().getApplication()); 857f4eb85bc3c57ca70b577cea1524431fead4a4cccDianne Hackborn Intent intent = getActivity().getIntent(); 858ff271ce1b70d6a8c59f3ea8904ef2025061e73f1Suchi Amalapurapu String action = intent.getAction(); 8597a3221bb95efd2e38e2aea243bcb13577bb276b3Amith Yamasani int defaultListType = LIST_TYPE_DOWNLOADED; 860ee2937941d4e9a4d2cd94d504ddaa9685bcca090Dianne Hackborn String className = getArguments() != null 861ee2937941d4e9a4d2cd94d504ddaa9685bcca090Dianne Hackborn ? getArguments().getString("classname") : null; 862ee2937941d4e9a4d2cd94d504ddaa9685bcca090Dianne Hackborn if (className == null) { 863ee2937941d4e9a4d2cd94d504ddaa9685bcca090Dianne Hackborn className = intent.getComponent().getClassName(); 864ee2937941d4e9a4d2cd94d504ddaa9685bcca090Dianne Hackborn } 865af9252849fd94c1f2859c56a4010900ea38a607eAmith Yamasani if (className.equals(RunningServicesActivity.class.getName()) 866af9252849fd94c1f2859c56a4010900ea38a607eAmith Yamasani || className.endsWith(".RunningServices")) { 8677a3221bb95efd2e38e2aea243bcb13577bb276b3Amith Yamasani defaultListType = LIST_TYPE_RUNNING; 8685203bdffe6ce2b829d0fab8c7691fa92aca6e972Amith Yamasani } else if (className.equals(StorageUseActivity.class.getName()) 869af9252849fd94c1f2859c56a4010900ea38a607eAmith Yamasani || Intent.ACTION_MANAGE_PACKAGE_STORAGE.equals(action) 870af9252849fd94c1f2859c56a4010900ea38a607eAmith Yamasani || className.endsWith(".StorageUse")) { 871afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project mSortOrder = SORT_ORDER_SIZE; 8727a3221bb95efd2e38e2aea243bcb13577bb276b3Amith Yamasani defaultListType = LIST_TYPE_ALL; 873263bcc8b732dbb47d3ce63904e0e05191fabbad6Fabrice Di Meglio } else if (android.provider.Settings.ACTION_MANAGE_ALL_APPLICATIONS_SETTINGS.equals(action)) { 8747a3221bb95efd2e38e2aea243bcb13577bb276b3Amith Yamasani // Select the all-apps list, with the default sorting 8757a3221bb95efd2e38e2aea243bcb13577bb276b3Amith Yamasani defaultListType = LIST_TYPE_ALL; 876afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } 8777a3221bb95efd2e38e2aea243bcb13577bb276b3Amith Yamasani 878728ac35373028b79205a788c526ef4b495518ec1Dianne Hackborn if (savedInstanceState != null) { 87902c22131e93e1a506141b1890c7134909ded876fAmith Yamasani mSortOrder = savedInstanceState.getInt(EXTRA_SORT_ORDER, mSortOrder); 8807a3221bb95efd2e38e2aea243bcb13577bb276b3Amith Yamasani int tmp = savedInstanceState.getInt(EXTRA_DEFAULT_LIST_TYPE, -1); 8817a3221bb95efd2e38e2aea243bcb13577bb276b3Amith Yamasani if (tmp != -1) defaultListType = tmp; 88202c22131e93e1a506141b1890c7134909ded876fAmith Yamasani mShowBackground = savedInstanceState.getBoolean(EXTRA_SHOW_BACKGROUND, false); 883728ac35373028b79205a788c526ef4b495518ec1Dianne Hackborn } 8847a3221bb95efd2e38e2aea243bcb13577bb276b3Amith Yamasani 8857a3221bb95efd2e38e2aea243bcb13577bb276b3Amith Yamasani mDefaultListType = defaultListType; 8863b7dbcecf70788df4950340cbf750dbe524dca96Amith Yamasani 88744dda2d7f52007d2ef33b9e9b9b9b1ec84c5582eJeff Sharkey final Intent containerIntent = new Intent().setComponent( 88844dda2d7f52007d2ef33b9e9b9b9b1ec84c5582eJeff Sharkey StorageMeasurement.DEFAULT_CONTAINER_COMPONENT); 88944dda2d7f52007d2ef33b9e9b9b9b1ec84c5582eJeff Sharkey getActivity().bindService(containerIntent, mContainerConnection, Context.BIND_AUTO_CREATE); 8901337d0f70b18dd732c6a617be83e5be0bb8f2f87Dianne Hackborn 891f4eb85bc3c57ca70b577cea1524431fead4a4cccDianne Hackborn mInvalidSizeStr = getActivity().getText(R.string.invalid_size_value); 892f4eb85bc3c57ca70b577cea1524431fead4a4cccDianne Hackborn mComputingSizeStr = getActivity().getText(R.string.computing_size); 893f4eb85bc3c57ca70b577cea1524431fead4a4cccDianne Hackborn 894a4af18755e0a344c628e4ddc4ece793d3401e6fbDianne Hackborn TabInfo tab = new TabInfo(this, mApplicationsState, 895309c5dcee18ced447d049d5de882a9586694e04cDianne Hackborn getActivity().getString(R.string.filter_apps_third_party), 896309c5dcee18ced447d049d5de882a9586694e04cDianne Hackborn LIST_TYPE_DOWNLOADED, this, savedInstanceState); 897309c5dcee18ced447d049d5de882a9586694e04cDianne Hackborn mTabs.add(tab); 898f4eb85bc3c57ca70b577cea1524431fead4a4cccDianne Hackborn 899309c5dcee18ced447d049d5de882a9586694e04cDianne Hackborn if (!Environment.isExternalStorageEmulated()) { 900a4af18755e0a344c628e4ddc4ece793d3401e6fbDianne Hackborn tab = new TabInfo(this, mApplicationsState, 901309c5dcee18ced447d049d5de882a9586694e04cDianne Hackborn getActivity().getString(R.string.filter_apps_onsdcard), 902309c5dcee18ced447d049d5de882a9586694e04cDianne Hackborn LIST_TYPE_SDCARD, this, savedInstanceState); 903309c5dcee18ced447d049d5de882a9586694e04cDianne Hackborn mTabs.add(tab); 904508fedc4102790dcd7004e4962e2b540967b714bDianne Hackborn } 9057a3221bb95efd2e38e2aea243bcb13577bb276b3Amith Yamasani 906a4af18755e0a344c628e4ddc4ece793d3401e6fbDianne Hackborn tab = new TabInfo(this, mApplicationsState, 907309c5dcee18ced447d049d5de882a9586694e04cDianne Hackborn getActivity().getString(R.string.filter_apps_running), 908309c5dcee18ced447d049d5de882a9586694e04cDianne Hackborn LIST_TYPE_RUNNING, this, savedInstanceState); 909309c5dcee18ced447d049d5de882a9586694e04cDianne Hackborn mTabs.add(tab); 9107a3221bb95efd2e38e2aea243bcb13577bb276b3Amith Yamasani 911a4af18755e0a344c628e4ddc4ece793d3401e6fbDianne Hackborn tab = new TabInfo(this, mApplicationsState, 912309c5dcee18ced447d049d5de882a9586694e04cDianne Hackborn getActivity().getString(R.string.filter_apps_all), 913309c5dcee18ced447d049d5de882a9586694e04cDianne Hackborn LIST_TYPE_ALL, this, savedInstanceState); 914309c5dcee18ced447d049d5de882a9586694e04cDianne Hackborn mTabs.add(tab); 91518b64f446cd7b9043909b0cd42d1ab364392da24Dianne Hackborn 91618b64f446cd7b9043909b0cd42d1ab364392da24Dianne Hackborn tab = new TabInfo(this, mApplicationsState, 91718b64f446cd7b9043909b0cd42d1ab364392da24Dianne Hackborn getActivity().getString(R.string.filter_apps_disabled), 91818b64f446cd7b9043909b0cd42d1ab364392da24Dianne Hackborn LIST_TYPE_DISABLED, this, savedInstanceState); 91918b64f446cd7b9043909b0cd42d1ab364392da24Dianne Hackborn mTabs.add(tab); 92018b64f446cd7b9043909b0cd42d1ab364392da24Dianne Hackborn 92118b64f446cd7b9043909b0cd42d1ab364392da24Dianne Hackborn mNumTabs = mTabs.size(); 922c8a1db191207e38b7ad0acdfd276651e4911e812Alexandra Gherghina 923c8a1db191207e38b7ad0acdfd276651e4911e812Alexandra Gherghina final UserManager um = (UserManager) mContext.getSystemService(Context.USER_SERVICE); 92480e1f1bfdb814a08fb8b07b2e279285d495042e9Alexandra Gherghina mProfileSpinnerAdapter = Utils.createUserSpinnerAdapter(um, mContext); 925309c5dcee18ced447d049d5de882a9586694e04cDianne Hackborn } 9267a3221bb95efd2e38e2aea243bcb13577bb276b3Amith Yamasani 9277a3221bb95efd2e38e2aea243bcb13577bb276b3Amith Yamasani 928309c5dcee18ced447d049d5de882a9586694e04cDianne Hackborn @Override 929309c5dcee18ced447d049d5de882a9586694e04cDianne Hackborn public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 930309c5dcee18ced447d049d5de882a9586694e04cDianne Hackborn // initialize the inflater 931309c5dcee18ced447d049d5de882a9586694e04cDianne Hackborn mInflater = inflater; 9327a3221bb95efd2e38e2aea243bcb13577bb276b3Amith Yamasani 933309c5dcee18ced447d049d5de882a9586694e04cDianne Hackborn View rootView = mInflater.inflate(R.layout.manage_applications_content, 934309c5dcee18ced447d049d5de882a9586694e04cDianne Hackborn container, false); 935309c5dcee18ced447d049d5de882a9586694e04cDianne Hackborn mContentContainer = container; 936309c5dcee18ced447d049d5de882a9586694e04cDianne Hackborn mRootView = rootView; 9377a3221bb95efd2e38e2aea243bcb13577bb276b3Amith Yamasani 938309c5dcee18ced447d049d5de882a9586694e04cDianne Hackborn mViewPager = (ViewPager) rootView.findViewById(R.id.pager); 939309c5dcee18ced447d049d5de882a9586694e04cDianne Hackborn MyPagerAdapter adapter = new MyPagerAdapter(); 940309c5dcee18ced447d049d5de882a9586694e04cDianne Hackborn mViewPager.setAdapter(adapter); 941309c5dcee18ced447d049d5de882a9586694e04cDianne Hackborn mViewPager.setOnPageChangeListener(adapter); 942309c5dcee18ced447d049d5de882a9586694e04cDianne Hackborn PagerTabStrip tabs = (PagerTabStrip) rootView.findViewById(R.id.tabs); 943cc22af08117a2f90d879cc360f76de48fd234e0dFabrice Di Meglio tabs.setTabIndicatorColorResource(R.color.theme_accent); 9447a3221bb95efd2e38e2aea243bcb13577bb276b3Amith Yamasani 945a4af18755e0a344c628e4ddc4ece793d3401e6fbDianne Hackborn // We have to do this now because PreferenceFrameLayout looks at it 946a4af18755e0a344c628e4ddc4ece793d3401e6fbDianne Hackborn // only when the view is added. 947a4af18755e0a344c628e4ddc4ece793d3401e6fbDianne Hackborn if (container instanceof PreferenceFrameLayout) { 948a4af18755e0a344c628e4ddc4ece793d3401e6fbDianne Hackborn ((PreferenceFrameLayout.LayoutParams) rootView.getLayoutParams()).removeBorders = true; 949a4af18755e0a344c628e4ddc4ece793d3401e6fbDianne Hackborn } 950a4af18755e0a344c628e4ddc4ece793d3401e6fbDianne Hackborn 95114d5714a8238b244b974e4e62fe688398ab45dcbDianne Hackborn if (savedInstanceState != null && savedInstanceState.getBoolean(EXTRA_RESET_DIALOG)) { 95214d5714a8238b244b974e4e62fe688398ab45dcbDianne Hackborn buildResetDialog(); 95314d5714a8238b244b974e4e62fe688398ab45dcbDianne Hackborn } 95414d5714a8238b244b974e4e62fe688398ab45dcbDianne Hackborn 95513ba7e655643f664aa134e45362e155f18d42931Dianne Hackborn if (savedInstanceState == null) { 95613ba7e655643f664aa134e45362e155f18d42931Dianne Hackborn // First time init: make sure view pager is showing the correct tab. 95713ba7e655643f664aa134e45362e155f18d42931Dianne Hackborn for (int i = 0; i < mTabs.size(); i++) { 95813ba7e655643f664aa134e45362e155f18d42931Dianne Hackborn TabInfo tab = mTabs.get(i); 95913ba7e655643f664aa134e45362e155f18d42931Dianne Hackborn if (tab.mListType == mDefaultListType) { 96013ba7e655643f664aa134e45362e155f18d42931Dianne Hackborn mViewPager.setCurrentItem(i); 96113ba7e655643f664aa134e45362e155f18d42931Dianne Hackborn break; 96213ba7e655643f664aa134e45362e155f18d42931Dianne Hackborn } 96313ba7e655643f664aa134e45362e155f18d42931Dianne Hackborn } 96413ba7e655643f664aa134e45362e155f18d42931Dianne Hackborn } 96513ba7e655643f664aa134e45362e155f18d42931Dianne Hackborn 966309c5dcee18ced447d049d5de882a9586694e04cDianne Hackborn return rootView; 967afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } 968f4eb85bc3c57ca70b577cea1524431fead4a4cccDianne Hackborn 969f4c4b59f13a0cadd55832004e56ff7b6d827f7f0Suchi Amalapurapu @Override 970728ac35373028b79205a788c526ef4b495518ec1Dianne Hackborn public void onStart() { 971728ac35373028b79205a788c526ef4b495518ec1Dianne Hackborn super.onStart(); 972b285593cafacc58ecfdf97be395dc8f5a7493051Suchi Amalapurapu } 973b285593cafacc58ecfdf97be395dc8f5a7493051Suchi Amalapurapu 974afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project @Override 975f4eb85bc3c57ca70b577cea1524431fead4a4cccDianne Hackborn public void onResume() { 976728ac35373028b79205a788c526ef4b495518ec1Dianne Hackborn super.onResume(); 977728ac35373028b79205a788c526ef4b495518ec1Dianne Hackborn mActivityResumed = true; 978309c5dcee18ced447d049d5de882a9586694e04cDianne Hackborn updateCurrentTab(mViewPager.getCurrentItem()); 979f5f08628cc0129e92277d6ddfcf6ae680887573dDianne Hackborn updateNumTabs(); 980ee2937941d4e9a4d2cd94d504ddaa9685bcca090Dianne Hackborn updateOptionsMenu(); 981afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } 982b285593cafacc58ecfdf97be395dc8f5a7493051Suchi Amalapurapu 983728ac35373028b79205a788c526ef4b495518ec1Dianne Hackborn @Override 984f4eb85bc3c57ca70b577cea1524431fead4a4cccDianne Hackborn public void onSaveInstanceState(Bundle outState) { 985728ac35373028b79205a788c526ef4b495518ec1Dianne Hackborn super.onSaveInstanceState(outState); 98602c22131e93e1a506141b1890c7134909ded876fAmith Yamasani outState.putInt(EXTRA_SORT_ORDER, mSortOrder); 9877a3221bb95efd2e38e2aea243bcb13577bb276b3Amith Yamasani if (mDefaultListType != -1) { 9887a3221bb95efd2e38e2aea243bcb13577bb276b3Amith Yamasani outState.putInt(EXTRA_DEFAULT_LIST_TYPE, mDefaultListType); 989f4eb85bc3c57ca70b577cea1524431fead4a4cccDianne Hackborn } 99002c22131e93e1a506141b1890c7134909ded876fAmith Yamasani outState.putBoolean(EXTRA_SHOW_BACKGROUND, mShowBackground); 99114d5714a8238b244b974e4e62fe688398ab45dcbDianne Hackborn if (mResetDialog != null) { 99214d5714a8238b244b974e4e62fe688398ab45dcbDianne Hackborn outState.putBoolean(EXTRA_RESET_DIALOG, true); 99314d5714a8238b244b974e4e62fe688398ab45dcbDianne Hackborn } 994728ac35373028b79205a788c526ef4b495518ec1Dianne Hackborn } 995728ac35373028b79205a788c526ef4b495518ec1Dianne Hackborn 996728ac35373028b79205a788c526ef4b495518ec1Dianne Hackborn @Override 997f4eb85bc3c57ca70b577cea1524431fead4a4cccDianne Hackborn public void onPause() { 998728ac35373028b79205a788c526ef4b495518ec1Dianne Hackborn super.onPause(); 999728ac35373028b79205a788c526ef4b495518ec1Dianne Hackborn mActivityResumed = false; 1000309c5dcee18ced447d049d5de882a9586694e04cDianne Hackborn for (int i=0; i<mTabs.size(); i++) { 1001309c5dcee18ced447d049d5de882a9586694e04cDianne Hackborn mTabs.get(i).pause(); 1002728ac35373028b79205a788c526ef4b495518ec1Dianne Hackborn } 1003728ac35373028b79205a788c526ef4b495518ec1Dianne Hackborn } 1004728ac35373028b79205a788c526ef4b495518ec1Dianne Hackborn 1005728ac35373028b79205a788c526ef4b495518ec1Dianne Hackborn @Override 100614d5714a8238b244b974e4e62fe688398ab45dcbDianne Hackborn public void onStop() { 100714d5714a8238b244b974e4e62fe688398ab45dcbDianne Hackborn super.onStop(); 100814d5714a8238b244b974e4e62fe688398ab45dcbDianne Hackborn if (mResetDialog != null) { 100914d5714a8238b244b974e4e62fe688398ab45dcbDianne Hackborn mResetDialog.dismiss(); 101014d5714a8238b244b974e4e62fe688398ab45dcbDianne Hackborn mResetDialog = null; 101114d5714a8238b244b974e4e62fe688398ab45dcbDianne Hackborn } 101214d5714a8238b244b974e4e62fe688398ab45dcbDianne Hackborn } 101314d5714a8238b244b974e4e62fe688398ab45dcbDianne Hackborn 101414d5714a8238b244b974e4e62fe688398ab45dcbDianne Hackborn @Override 1015a4af18755e0a344c628e4ddc4ece793d3401e6fbDianne Hackborn public void onDestroyView() { 1016a4af18755e0a344c628e4ddc4ece793d3401e6fbDianne Hackborn super.onDestroyView(); 1017a4af18755e0a344c628e4ddc4ece793d3401e6fbDianne Hackborn 1018a4af18755e0a344c628e4ddc4ece793d3401e6fbDianne Hackborn // We are going to keep the tab data structures around, but they 1019a4af18755e0a344c628e4ddc4ece793d3401e6fbDianne Hackborn // are no longer attached to their view hierarchy. 1020a4af18755e0a344c628e4ddc4ece793d3401e6fbDianne Hackborn for (int i=0; i<mTabs.size(); i++) { 1021a4af18755e0a344c628e4ddc4ece793d3401e6fbDianne Hackborn mTabs.get(i).detachView(); 1022f3a9578910050d35fd536c1f9a7b5d629b3c19d8Jun Su mTabs.get(i).release(); 1023a4af18755e0a344c628e4ddc4ece793d3401e6fbDianne Hackborn } 1024a4af18755e0a344c628e4ddc4ece793d3401e6fbDianne Hackborn } 1025a4af18755e0a344c628e4ddc4ece793d3401e6fbDianne Hackborn 1026a4af18755e0a344c628e4ddc4ece793d3401e6fbDianne Hackborn @Override 1027f4eb85bc3c57ca70b577cea1524431fead4a4cccDianne Hackborn public void onActivityResult(int requestCode, int resultCode, Intent data) { 1028728ac35373028b79205a788c526ef4b495518ec1Dianne Hackborn if (requestCode == INSTALLED_APP_DETAILS && mCurrentPkgName != null) { 1029e7623f775cb37a8de049dae8c03b5b396526fdd1Dianne Hackborn mApplicationsState.requestSize(mCurrentPkgName); 1030ff271ce1b70d6a8c59f3ea8904ef2025061e73f1Suchi Amalapurapu } 1031afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } 10327a3221bb95efd2e38e2aea243bcb13577bb276b3Amith Yamasani 1033c8a1db191207e38b7ad0acdfd276651e4911e812Alexandra Gherghina @Override 1034c8a1db191207e38b7ad0acdfd276651e4911e812Alexandra Gherghina public void onItemSelected(AdapterView<?> parent, View view, int position, long id) { 1035c8a1db191207e38b7ad0acdfd276651e4911e812Alexandra Gherghina UserHandle selectedUser = mProfileSpinnerAdapter.getUserHandle(position); 1036c8a1db191207e38b7ad0acdfd276651e4911e812Alexandra Gherghina if (selectedUser.getIdentifier() != UserHandle.myUserId()) { 1037c8a1db191207e38b7ad0acdfd276651e4911e812Alexandra Gherghina Intent intent = new Intent(Settings.ACTION_APPLICATION_SETTINGS); 1038c8a1db191207e38b7ad0acdfd276651e4911e812Alexandra Gherghina intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 1039c8a1db191207e38b7ad0acdfd276651e4911e812Alexandra Gherghina mContext.startActivityAsUser(intent, selectedUser); 1040c8a1db191207e38b7ad0acdfd276651e4911e812Alexandra Gherghina getActivity().finish(); 1041c8a1db191207e38b7ad0acdfd276651e4911e812Alexandra Gherghina } 1042c8a1db191207e38b7ad0acdfd276651e4911e812Alexandra Gherghina } 1043c8a1db191207e38b7ad0acdfd276651e4911e812Alexandra Gherghina 1044c8a1db191207e38b7ad0acdfd276651e4911e812Alexandra Gherghina @Override 1045c8a1db191207e38b7ad0acdfd276651e4911e812Alexandra Gherghina public void onNothingSelected(AdapterView<?> parent) { 1046c8a1db191207e38b7ad0acdfd276651e4911e812Alexandra Gherghina // Nothing to do 1047c8a1db191207e38b7ad0acdfd276651e4911e812Alexandra Gherghina } 1048c8a1db191207e38b7ad0acdfd276651e4911e812Alexandra Gherghina 104918b64f446cd7b9043909b0cd42d1ab364392da24Dianne Hackborn private void updateNumTabs() { 105018b64f446cd7b9043909b0cd42d1ab364392da24Dianne Hackborn int newNum = mApplicationsState.haveDisabledApps() ? mTabs.size() : (mTabs.size()-1); 105118b64f446cd7b9043909b0cd42d1ab364392da24Dianne Hackborn if (newNum != mNumTabs) { 105218b64f446cd7b9043909b0cd42d1ab364392da24Dianne Hackborn mNumTabs = newNum; 105318b64f446cd7b9043909b0cd42d1ab364392da24Dianne Hackborn if (mViewPager != null) { 105418b64f446cd7b9043909b0cd42d1ab364392da24Dianne Hackborn mViewPager.getAdapter().notifyDataSetChanged(); 105518b64f446cd7b9043909b0cd42d1ab364392da24Dianne Hackborn } 105618b64f446cd7b9043909b0cd42d1ab364392da24Dianne Hackborn } 105718b64f446cd7b9043909b0cd42d1ab364392da24Dianne Hackborn } 105818b64f446cd7b9043909b0cd42d1ab364392da24Dianne Hackborn 1059309c5dcee18ced447d049d5de882a9586694e04cDianne Hackborn TabInfo tabForType(int type) { 1060309c5dcee18ced447d049d5de882a9586694e04cDianne Hackborn for (int i = 0; i < mTabs.size(); i++) { 1061309c5dcee18ced447d049d5de882a9586694e04cDianne Hackborn TabInfo tab = mTabs.get(i); 1062309c5dcee18ced447d049d5de882a9586694e04cDianne Hackborn if (tab.mListType == type) { 1063309c5dcee18ced447d049d5de882a9586694e04cDianne Hackborn return tab; 1064309c5dcee18ced447d049d5de882a9586694e04cDianne Hackborn } 10657a3221bb95efd2e38e2aea243bcb13577bb276b3Amith Yamasani } 1066309c5dcee18ced447d049d5de882a9586694e04cDianne Hackborn return null; 10677a3221bb95efd2e38e2aea243bcb13577bb276b3Amith Yamasani } 10687a3221bb95efd2e38e2aea243bcb13577bb276b3Amith Yamasani 1069afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project // utility method used to start sub activity 1070afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project private void startApplicationDetailsActivity() { 1071f4eb85bc3c57ca70b577cea1524431fead4a4cccDianne Hackborn // start new fragment to display extended information 1072f4eb85bc3c57ca70b577cea1524431fead4a4cccDianne Hackborn Bundle args = new Bundle(); 1073f4eb85bc3c57ca70b577cea1524431fead4a4cccDianne Hackborn args.putString(InstalledAppDetails.ARG_PACKAGE_NAME, mCurrentPkgName); 1074f4eb85bc3c57ca70b577cea1524431fead4a4cccDianne Hackborn 1075263bcc8b732dbb47d3ce63904e0e05191fabbad6Fabrice Di Meglio SettingsActivity sa = (SettingsActivity) getActivity(); 1076263bcc8b732dbb47d3ce63904e0e05191fabbad6Fabrice Di Meglio sa.startPreferencePanel(InstalledAppDetails.class.getName(), args, 1077ee2937941d4e9a4d2cd94d504ddaa9685bcca090Dianne Hackborn R.string.application_info_label, null, this, INSTALLED_APP_DETAILS); 1078afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } 1079afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 1080afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project @Override 1081f4eb85bc3c57ca70b577cea1524431fead4a4cccDianne Hackborn public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { 1082ee2937941d4e9a4d2cd94d504ddaa9685bcca090Dianne Hackborn mOptionsMenu = menu; 10830385cf14a1b02fafc3d1a094ccfee45de4e9b03aDianne Hackborn // note: icons removed for now because the cause the new action 10840385cf14a1b02fafc3d1a094ccfee45de4e9b03aDianne Hackborn // bar UI to be very confusing. 1085afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project menu.add(0, SORT_ORDER_ALPHA, 1, R.string.sort_order_alpha) 10860385cf14a1b02fafc3d1a094ccfee45de4e9b03aDianne Hackborn //.setIcon(android.R.drawable.ic_menu_sort_alphabetically) 1087348b62e6e9568166a17b1304296e0f08aee97cf5Gilles Debunne .setShowAsAction(MenuItem.SHOW_AS_ACTION_NEVER); 1088afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project menu.add(0, SORT_ORDER_SIZE, 2, R.string.sort_order_size) 10890385cf14a1b02fafc3d1a094ccfee45de4e9b03aDianne Hackborn //.setIcon(android.R.drawable.ic_menu_sort_by_size) 1090348b62e6e9568166a17b1304296e0f08aee97cf5Gilles Debunne .setShowAsAction(MenuItem.SHOW_AS_ACTION_NEVER); 1091ee2937941d4e9a4d2cd94d504ddaa9685bcca090Dianne Hackborn menu.add(0, SHOW_RUNNING_SERVICES, 3, R.string.show_running_services) 1092ee2937941d4e9a4d2cd94d504ddaa9685bcca090Dianne Hackborn .setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM); 1093ee2937941d4e9a4d2cd94d504ddaa9685bcca090Dianne Hackborn menu.add(0, SHOW_BACKGROUND_PROCESSES, 3, R.string.show_background_processes) 1094ee2937941d4e9a4d2cd94d504ddaa9685bcca090Dianne Hackborn .setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM); 109514d5714a8238b244b974e4e62fe688398ab45dcbDianne Hackborn menu.add(0, RESET_APP_PREFERENCES, 4, R.string.reset_app_preferences) 109614d5714a8238b244b974e4e62fe688398ab45dcbDianne Hackborn .setShowAsAction(MenuItem.SHOW_AS_ACTION_NEVER); 1097ee2937941d4e9a4d2cd94d504ddaa9685bcca090Dianne Hackborn updateOptionsMenu(); 1098afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } 1099afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 1100afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project @Override 1101f4eb85bc3c57ca70b577cea1524431fead4a4cccDianne Hackborn public void onPrepareOptionsMenu(Menu menu) { 1102ee2937941d4e9a4d2cd94d504ddaa9685bcca090Dianne Hackborn updateOptionsMenu(); 1103ee2937941d4e9a4d2cd94d504ddaa9685bcca090Dianne Hackborn } 1104ee2937941d4e9a4d2cd94d504ddaa9685bcca090Dianne Hackborn 1105ee2937941d4e9a4d2cd94d504ddaa9685bcca090Dianne Hackborn @Override 1106ee2937941d4e9a4d2cd94d504ddaa9685bcca090Dianne Hackborn public void onDestroyOptionsMenu() { 1107ee2937941d4e9a4d2cd94d504ddaa9685bcca090Dianne Hackborn mOptionsMenu = null; 1108ee2937941d4e9a4d2cd94d504ddaa9685bcca090Dianne Hackborn } 110944dda2d7f52007d2ef33b9e9b9b9b1ec84c5582eJeff Sharkey 111044dda2d7f52007d2ef33b9e9b9b9b1ec84c5582eJeff Sharkey @Override 111144dda2d7f52007d2ef33b9e9b9b9b1ec84c5582eJeff Sharkey public void onDestroy() { 111244dda2d7f52007d2ef33b9e9b9b9b1ec84c5582eJeff Sharkey getActivity().unbindService(mContainerConnection); 111344dda2d7f52007d2ef33b9e9b9b9b1ec84c5582eJeff Sharkey super.onDestroy(); 111444dda2d7f52007d2ef33b9e9b9b9b1ec84c5582eJeff Sharkey } 111544dda2d7f52007d2ef33b9e9b9b9b1ec84c5582eJeff Sharkey 1116ee2937941d4e9a4d2cd94d504ddaa9685bcca090Dianne Hackborn void updateOptionsMenu() { 1117ee2937941d4e9a4d2cd94d504ddaa9685bcca090Dianne Hackborn if (mOptionsMenu == null) { 1118ee2937941d4e9a4d2cd94d504ddaa9685bcca090Dianne Hackborn return; 1119ee2937941d4e9a4d2cd94d504ddaa9685bcca090Dianne Hackborn } 1120ee2937941d4e9a4d2cd94d504ddaa9685bcca090Dianne Hackborn 1121673085af9e5e040eb0109138e9cb6916fa4b88f0Kenny Root /* 1122673085af9e5e040eb0109138e9cb6916fa4b88f0Kenny Root * The running processes screen doesn't use the mApplicationsAdapter 1123673085af9e5e040eb0109138e9cb6916fa4b88f0Kenny Root * so bringing up this menu in that case doesn't make any sense. 1124673085af9e5e040eb0109138e9cb6916fa4b88f0Kenny Root */ 1125309c5dcee18ced447d049d5de882a9586694e04cDianne Hackborn if (mCurTab != null && mCurTab.mListType == LIST_TYPE_RUNNING) { 1126309c5dcee18ced447d049d5de882a9586694e04cDianne Hackborn TabInfo tab = tabForType(LIST_TYPE_RUNNING); 1127309c5dcee18ced447d049d5de882a9586694e04cDianne Hackborn boolean showingBackground = tab != null && tab.mRunningProcessesView != null 1128309c5dcee18ced447d049d5de882a9586694e04cDianne Hackborn ? tab.mRunningProcessesView.mAdapter.getShowBackground() : false; 1129ee2937941d4e9a4d2cd94d504ddaa9685bcca090Dianne Hackborn mOptionsMenu.findItem(SORT_ORDER_ALPHA).setVisible(false); 1130ee2937941d4e9a4d2cd94d504ddaa9685bcca090Dianne Hackborn mOptionsMenu.findItem(SORT_ORDER_SIZE).setVisible(false); 1131ee2937941d4e9a4d2cd94d504ddaa9685bcca090Dianne Hackborn mOptionsMenu.findItem(SHOW_RUNNING_SERVICES).setVisible(showingBackground); 1132ee2937941d4e9a4d2cd94d504ddaa9685bcca090Dianne Hackborn mOptionsMenu.findItem(SHOW_BACKGROUND_PROCESSES).setVisible(!showingBackground); 113314d5714a8238b244b974e4e62fe688398ab45dcbDianne Hackborn mOptionsMenu.findItem(RESET_APP_PREFERENCES).setVisible(false); 1134eca1fc2cadb9c1f15ab042e2080a8b8eb40ab6faThiago VinÃcius Freire de Araújo Ribeiro mShowBackground = showingBackground; 11351337d0f70b18dd732c6a617be83e5be0bb8f2f87Dianne Hackborn } else { 1136ee2937941d4e9a4d2cd94d504ddaa9685bcca090Dianne Hackborn mOptionsMenu.findItem(SORT_ORDER_ALPHA).setVisible(mSortOrder != SORT_ORDER_ALPHA); 1137ee2937941d4e9a4d2cd94d504ddaa9685bcca090Dianne Hackborn mOptionsMenu.findItem(SORT_ORDER_SIZE).setVisible(mSortOrder != SORT_ORDER_SIZE); 1138ee2937941d4e9a4d2cd94d504ddaa9685bcca090Dianne Hackborn mOptionsMenu.findItem(SHOW_RUNNING_SERVICES).setVisible(false); 1139ee2937941d4e9a4d2cd94d504ddaa9685bcca090Dianne Hackborn mOptionsMenu.findItem(SHOW_BACKGROUND_PROCESSES).setVisible(false); 114014d5714a8238b244b974e4e62fe688398ab45dcbDianne Hackborn mOptionsMenu.findItem(RESET_APP_PREFERENCES).setVisible(true); 114114d5714a8238b244b974e4e62fe688398ab45dcbDianne Hackborn } 114214d5714a8238b244b974e4e62fe688398ab45dcbDianne Hackborn } 114314d5714a8238b244b974e4e62fe688398ab45dcbDianne Hackborn 114414d5714a8238b244b974e4e62fe688398ab45dcbDianne Hackborn void buildResetDialog() { 114514d5714a8238b244b974e4e62fe688398ab45dcbDianne Hackborn if (mResetDialog == null) { 114614d5714a8238b244b974e4e62fe688398ab45dcbDianne Hackborn AlertDialog.Builder builder = new AlertDialog.Builder(getActivity()); 114714d5714a8238b244b974e4e62fe688398ab45dcbDianne Hackborn builder.setTitle(R.string.reset_app_preferences_title); 114814d5714a8238b244b974e4e62fe688398ab45dcbDianne Hackborn builder.setMessage(R.string.reset_app_preferences_desc); 114914d5714a8238b244b974e4e62fe688398ab45dcbDianne Hackborn builder.setPositiveButton(R.string.reset_app_preferences_button, this); 115014d5714a8238b244b974e4e62fe688398ab45dcbDianne Hackborn builder.setNegativeButton(R.string.cancel, null); 115114d5714a8238b244b974e4e62fe688398ab45dcbDianne Hackborn mResetDialog = builder.show(); 115214d5714a8238b244b974e4e62fe688398ab45dcbDianne Hackborn mResetDialog.setOnDismissListener(this); 115314d5714a8238b244b974e4e62fe688398ab45dcbDianne Hackborn } 115414d5714a8238b244b974e4e62fe688398ab45dcbDianne Hackborn } 115514d5714a8238b244b974e4e62fe688398ab45dcbDianne Hackborn 115614d5714a8238b244b974e4e62fe688398ab45dcbDianne Hackborn @Override 115714d5714a8238b244b974e4e62fe688398ab45dcbDianne Hackborn public void onDismiss(DialogInterface dialog) { 115814d5714a8238b244b974e4e62fe688398ab45dcbDianne Hackborn if (mResetDialog == dialog) { 115914d5714a8238b244b974e4e62fe688398ab45dcbDianne Hackborn mResetDialog = null; 116014d5714a8238b244b974e4e62fe688398ab45dcbDianne Hackborn } 116114d5714a8238b244b974e4e62fe688398ab45dcbDianne Hackborn } 116214d5714a8238b244b974e4e62fe688398ab45dcbDianne Hackborn 116314d5714a8238b244b974e4e62fe688398ab45dcbDianne Hackborn 116414d5714a8238b244b974e4e62fe688398ab45dcbDianne Hackborn @Override 116514d5714a8238b244b974e4e62fe688398ab45dcbDianne Hackborn public void onClick(DialogInterface dialog, int which) { 116614d5714a8238b244b974e4e62fe688398ab45dcbDianne Hackborn if (mResetDialog == dialog) { 116714d5714a8238b244b974e4e62fe688398ab45dcbDianne Hackborn final PackageManager pm = getActivity().getPackageManager(); 1168596f0cfb4654a18b863f7e6a9dd6742bd57c2b96Dianne Hackborn final IPackageManager mIPm = IPackageManager.Stub.asInterface( 1169a6683e0f4af75005ab5a1742d30df4bee071f725Dianne Hackborn ServiceManager.getService("package")); 117014d5714a8238b244b974e4e62fe688398ab45dcbDianne Hackborn final INotificationManager nm = INotificationManager.Stub.asInterface( 117114d5714a8238b244b974e4e62fe688398ab45dcbDianne Hackborn ServiceManager.getService(Context.NOTIFICATION_SERVICE)); 117214d5714a8238b244b974e4e62fe688398ab45dcbDianne Hackborn final NetworkPolicyManager npm = NetworkPolicyManager.from(getActivity()); 1173a6683e0f4af75005ab5a1742d30df4bee071f725Dianne Hackborn final AppOpsManager aom = (AppOpsManager)getActivity().getSystemService( 1174a6683e0f4af75005ab5a1742d30df4bee071f725Dianne Hackborn Context.APP_OPS_SERVICE); 117514d5714a8238b244b974e4e62fe688398ab45dcbDianne Hackborn final Handler handler = new Handler(getActivity().getMainLooper()); 117614d5714a8238b244b974e4e62fe688398ab45dcbDianne Hackborn (new AsyncTask<Void, Void, Void>() { 117714d5714a8238b244b974e4e62fe688398ab45dcbDianne Hackborn @Override protected Void doInBackground(Void... params) { 117814d5714a8238b244b974e4e62fe688398ab45dcbDianne Hackborn List<ApplicationInfo> apps = pm.getInstalledApplications( 117914d5714a8238b244b974e4e62fe688398ab45dcbDianne Hackborn PackageManager.GET_DISABLED_COMPONENTS); 118014d5714a8238b244b974e4e62fe688398ab45dcbDianne Hackborn for (int i=0; i<apps.size(); i++) { 118114d5714a8238b244b974e4e62fe688398ab45dcbDianne Hackborn ApplicationInfo app = apps.get(i); 118214d5714a8238b244b974e4e62fe688398ab45dcbDianne Hackborn try { 118314d5714a8238b244b974e4e62fe688398ab45dcbDianne Hackborn if (DEBUG) Log.v(TAG, "Enabling notifications: " + app.packageName); 1184df3f6d6c4722a7acc8189e47d0499aaf618969f9Daniel Sandler nm.setNotificationsEnabledForPackage(app.packageName, app.uid, true); 118514d5714a8238b244b974e4e62fe688398ab45dcbDianne Hackborn } catch (android.os.RemoteException ex) { 118614d5714a8238b244b974e4e62fe688398ab45dcbDianne Hackborn } 118714d5714a8238b244b974e4e62fe688398ab45dcbDianne Hackborn if (!app.enabled) { 118814d5714a8238b244b974e4e62fe688398ab45dcbDianne Hackborn if (DEBUG) Log.v(TAG, "Enabling app: " + app.packageName); 118914d5714a8238b244b974e4e62fe688398ab45dcbDianne Hackborn if (pm.getApplicationEnabledSetting(app.packageName) 119014d5714a8238b244b974e4e62fe688398ab45dcbDianne Hackborn == PackageManager.COMPONENT_ENABLED_STATE_DISABLED_USER) { 119114d5714a8238b244b974e4e62fe688398ab45dcbDianne Hackborn pm.setApplicationEnabledSetting(app.packageName, 119214d5714a8238b244b974e4e62fe688398ab45dcbDianne Hackborn PackageManager.COMPONENT_ENABLED_STATE_DEFAULT, 119314d5714a8238b244b974e4e62fe688398ab45dcbDianne Hackborn PackageManager.DONT_KILL_APP); 119414d5714a8238b244b974e4e62fe688398ab45dcbDianne Hackborn } 119514d5714a8238b244b974e4e62fe688398ab45dcbDianne Hackborn } 119614d5714a8238b244b974e4e62fe688398ab45dcbDianne Hackborn } 1197596f0cfb4654a18b863f7e6a9dd6742bd57c2b96Dianne Hackborn try { 1198596f0cfb4654a18b863f7e6a9dd6742bd57c2b96Dianne Hackborn mIPm.resetPreferredActivities(UserHandle.myUserId()); 1199596f0cfb4654a18b863f7e6a9dd6742bd57c2b96Dianne Hackborn } catch (RemoteException e) { 120014d5714a8238b244b974e4e62fe688398ab45dcbDianne Hackborn } 1201a6683e0f4af75005ab5a1742d30df4bee071f725Dianne Hackborn aom.resetAllModes(); 120238305fb1777147cbcb86774c466e88434daff141Jeff Sharkey final int[] restrictedUids = npm.getUidsWithPolicy( 120314d5714a8238b244b974e4e62fe688398ab45dcbDianne Hackborn POLICY_REJECT_METERED_BACKGROUND); 120438305fb1777147cbcb86774c466e88434daff141Jeff Sharkey final int currentUserId = ActivityManager.getCurrentUser(); 120538305fb1777147cbcb86774c466e88434daff141Jeff Sharkey for (int uid : restrictedUids) { 120638305fb1777147cbcb86774c466e88434daff141Jeff Sharkey // Only reset for current user 120738305fb1777147cbcb86774c466e88434daff141Jeff Sharkey if (UserHandle.getUserId(uid) == currentUserId) { 120838305fb1777147cbcb86774c466e88434daff141Jeff Sharkey if (DEBUG) Log.v(TAG, "Clearing data policy: " + uid); 120938305fb1777147cbcb86774c466e88434daff141Jeff Sharkey npm.setUidPolicy(uid, POLICY_NONE); 121038305fb1777147cbcb86774c466e88434daff141Jeff Sharkey } 121114d5714a8238b244b974e4e62fe688398ab45dcbDianne Hackborn } 121214d5714a8238b244b974e4e62fe688398ab45dcbDianne Hackborn handler.post(new Runnable() { 121314d5714a8238b244b974e4e62fe688398ab45dcbDianne Hackborn @Override public void run() { 121414d5714a8238b244b974e4e62fe688398ab45dcbDianne Hackborn if (DEBUG) Log.v(TAG, "Done clearing"); 121514d5714a8238b244b974e4e62fe688398ab45dcbDianne Hackborn if (getActivity() != null && mActivityResumed) { 121614d5714a8238b244b974e4e62fe688398ab45dcbDianne Hackborn if (DEBUG) Log.v(TAG, "Updating UI!"); 1217309c5dcee18ced447d049d5de882a9586694e04cDianne Hackborn for (int i=0; i<mTabs.size(); i++) { 1218309c5dcee18ced447d049d5de882a9586694e04cDianne Hackborn TabInfo tab = mTabs.get(i); 1219309c5dcee18ced447d049d5de882a9586694e04cDianne Hackborn if (tab.mApplications != null) { 1220309c5dcee18ced447d049d5de882a9586694e04cDianne Hackborn tab.mApplications.pause(); 1221309c5dcee18ced447d049d5de882a9586694e04cDianne Hackborn } 1222309c5dcee18ced447d049d5de882a9586694e04cDianne Hackborn } 1223309c5dcee18ced447d049d5de882a9586694e04cDianne Hackborn if (mCurTab != null) { 1224309c5dcee18ced447d049d5de882a9586694e04cDianne Hackborn mCurTab.resume(mSortOrder); 1225309c5dcee18ced447d049d5de882a9586694e04cDianne Hackborn } 122614d5714a8238b244b974e4e62fe688398ab45dcbDianne Hackborn } 122714d5714a8238b244b974e4e62fe688398ab45dcbDianne Hackborn } 122814d5714a8238b244b974e4e62fe688398ab45dcbDianne Hackborn }); 122914d5714a8238b244b974e4e62fe688398ab45dcbDianne Hackborn return null; 123014d5714a8238b244b974e4e62fe688398ab45dcbDianne Hackborn } 123114d5714a8238b244b974e4e62fe688398ab45dcbDianne Hackborn }).execute(); 1232673085af9e5e040eb0109138e9cb6916fa4b88f0Kenny Root } 1233afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } 1234afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 1235afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project @Override 1236afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project public boolean onOptionsItemSelected(MenuItem item) { 1237afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project int menuId = item.getItemId(); 1238afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project if ((menuId == SORT_ORDER_ALPHA) || (menuId == SORT_ORDER_SIZE)) { 1239e7623f775cb37a8de049dae8c03b5b396526fdd1Dianne Hackborn mSortOrder = menuId; 1240309c5dcee18ced447d049d5de882a9586694e04cDianne Hackborn if (mCurTab != null && mCurTab.mApplications != null) { 1241309c5dcee18ced447d049d5de882a9586694e04cDianne Hackborn mCurTab.mApplications.rebuild(mSortOrder); 12421337d0f70b18dd732c6a617be83e5be0bb8f2f87Dianne Hackborn } 12431337d0f70b18dd732c6a617be83e5be0bb8f2f87Dianne Hackborn } else if (menuId == SHOW_RUNNING_SERVICES) { 12440385cf14a1b02fafc3d1a094ccfee45de4e9b03aDianne Hackborn mShowBackground = false; 1245309c5dcee18ced447d049d5de882a9586694e04cDianne Hackborn if (mCurTab != null && mCurTab.mRunningProcessesView != null) { 1246309c5dcee18ced447d049d5de882a9586694e04cDianne Hackborn mCurTab.mRunningProcessesView.mAdapter.setShowBackground(false); 1247309c5dcee18ced447d049d5de882a9586694e04cDianne Hackborn } 12481337d0f70b18dd732c6a617be83e5be0bb8f2f87Dianne Hackborn } else if (menuId == SHOW_BACKGROUND_PROCESSES) { 12490385cf14a1b02fafc3d1a094ccfee45de4e9b03aDianne Hackborn mShowBackground = true; 1250309c5dcee18ced447d049d5de882a9586694e04cDianne Hackborn if (mCurTab != null && mCurTab.mRunningProcessesView != null) { 1251309c5dcee18ced447d049d5de882a9586694e04cDianne Hackborn mCurTab.mRunningProcessesView.mAdapter.setShowBackground(true); 1252309c5dcee18ced447d049d5de882a9586694e04cDianne Hackborn } 125314d5714a8238b244b974e4e62fe688398ab45dcbDianne Hackborn } else if (menuId == RESET_APP_PREFERENCES) { 125414d5714a8238b244b974e4e62fe688398ab45dcbDianne Hackborn buildResetDialog(); 1255f0b05de3e06ad319a32fc1784d1b5cef48521f81Amith Yamasani } else { 1256f0b05de3e06ad319a32fc1784d1b5cef48521f81Amith Yamasani // Handle the home button 1257f0b05de3e06ad319a32fc1784d1b5cef48521f81Amith Yamasani return false; 1258afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } 1259ee2937941d4e9a4d2cd94d504ddaa9685bcca090Dianne Hackborn updateOptionsMenu(); 1260afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project return true; 1261afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } 1262d2be882d8f2e5acd8a5806c649ba4640249cf4baDianne Hackborn 1263a4af18755e0a344c628e4ddc4ece793d3401e6fbDianne Hackborn public void onItemClick(TabInfo tab, AdapterView<?> parent, View view, int position, 1264afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project long id) { 1265a4af18755e0a344c628e4ddc4ece793d3401e6fbDianne Hackborn if (tab.mApplications != null && tab.mApplications.getCount() > position) { 1266a4af18755e0a344c628e4ddc4ece793d3401e6fbDianne Hackborn ApplicationsState.AppEntry entry = tab.mApplications.getAppEntry(position); 1267309c5dcee18ced447d049d5de882a9586694e04cDianne Hackborn mCurrentPkgName = entry.info.packageName; 1268309c5dcee18ced447d049d5de882a9586694e04cDianne Hackborn startApplicationDetailsActivity(); 12691337d0f70b18dd732c6a617be83e5be0bb8f2f87Dianne Hackborn } 1270309c5dcee18ced447d049d5de882a9586694e04cDianne Hackborn } 12711337d0f70b18dd732c6a617be83e5be0bb8f2f87Dianne Hackborn 1272309c5dcee18ced447d049d5de882a9586694e04cDianne Hackborn public void updateCurrentTab(int position) { 1273309c5dcee18ced447d049d5de882a9586694e04cDianne Hackborn TabInfo tab = mTabs.get(position); 1274309c5dcee18ced447d049d5de882a9586694e04cDianne Hackborn mCurTab = tab; 127544dda2d7f52007d2ef33b9e9b9b9b1ec84c5582eJeff Sharkey 1276309c5dcee18ced447d049d5de882a9586694e04cDianne Hackborn // Put things in the correct paused/resumed state. 1277309c5dcee18ced447d049d5de882a9586694e04cDianne Hackborn if (mActivityResumed) { 1278309c5dcee18ced447d049d5de882a9586694e04cDianne Hackborn mCurTab.build(mInflater, mContentContainer, mRootView); 1279309c5dcee18ced447d049d5de882a9586694e04cDianne Hackborn mCurTab.resume(mSortOrder); 12801337d0f70b18dd732c6a617be83e5be0bb8f2f87Dianne Hackborn } else { 1281309c5dcee18ced447d049d5de882a9586694e04cDianne Hackborn mCurTab.pause(); 12821337d0f70b18dd732c6a617be83e5be0bb8f2f87Dianne Hackborn } 1283309c5dcee18ced447d049d5de882a9586694e04cDianne Hackborn for (int i=0; i<mTabs.size(); i++) { 1284309c5dcee18ced447d049d5de882a9586694e04cDianne Hackborn TabInfo t = mTabs.get(i); 1285309c5dcee18ced447d049d5de882a9586694e04cDianne Hackborn if (t != mCurTab) { 1286309c5dcee18ced447d049d5de882a9586694e04cDianne Hackborn t.pause(); 12871337d0f70b18dd732c6a617be83e5be0bb8f2f87Dianne Hackborn } 12881337d0f70b18dd732c6a617be83e5be0bb8f2f87Dianne Hackborn } 12891337d0f70b18dd732c6a617be83e5be0bb8f2f87Dianne Hackborn 1290309c5dcee18ced447d049d5de882a9586694e04cDianne Hackborn mCurTab.updateStorageUsage(); 1291309c5dcee18ced447d049d5de882a9586694e04cDianne Hackborn updateOptionsMenu(); 1292a31be80ef056add00e0d239414f80f932978277fAdam Powell final Activity host = getActivity(); 1293a31be80ef056add00e0d239414f80f932978277fAdam Powell if (host != null) { 1294a31be80ef056add00e0d239414f80f932978277fAdam Powell host.invalidateOptionsMenu(); 1295a31be80ef056add00e0d239414f80f932978277fAdam Powell } 1296e7623f775cb37a8de049dae8c03b5b396526fdd1Dianne Hackborn } 1297e7623f775cb37a8de049dae8c03b5b396526fdd1Dianne Hackborn 129844dda2d7f52007d2ef33b9e9b9b9b1ec84c5582eJeff Sharkey private volatile IMediaContainerService mContainerService; 129944dda2d7f52007d2ef33b9e9b9b9b1ec84c5582eJeff Sharkey 130044dda2d7f52007d2ef33b9e9b9b9b1ec84c5582eJeff Sharkey private final ServiceConnection mContainerConnection = new ServiceConnection() { 130144dda2d7f52007d2ef33b9e9b9b9b1ec84c5582eJeff Sharkey @Override 130244dda2d7f52007d2ef33b9e9b9b9b1ec84c5582eJeff Sharkey public void onServiceConnected(ComponentName name, IBinder service) { 130344dda2d7f52007d2ef33b9e9b9b9b1ec84c5582eJeff Sharkey mContainerService = IMediaContainerService.Stub.asInterface(service); 1304a4af18755e0a344c628e4ddc4ece793d3401e6fbDianne Hackborn for (int i=0; i<mTabs.size(); i++) { 1305a4af18755e0a344c628e4ddc4ece793d3401e6fbDianne Hackborn mTabs.get(i).setContainerService(mContainerService); 1306309c5dcee18ced447d049d5de882a9586694e04cDianne Hackborn } 130744dda2d7f52007d2ef33b9e9b9b9b1ec84c5582eJeff Sharkey } 130844dda2d7f52007d2ef33b9e9b9b9b1ec84c5582eJeff Sharkey 130944dda2d7f52007d2ef33b9e9b9b9b1ec84c5582eJeff Sharkey @Override 131044dda2d7f52007d2ef33b9e9b9b9b1ec84c5582eJeff Sharkey public void onServiceDisconnected(ComponentName name) { 131144dda2d7f52007d2ef33b9e9b9b9b1ec84c5582eJeff Sharkey mContainerService = null; 131244dda2d7f52007d2ef33b9e9b9b9b1ec84c5582eJeff Sharkey } 131344dda2d7f52007d2ef33b9e9b9b9b1ec84c5582eJeff Sharkey }; 1314afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project} 1315