129e0208b8dc28b4180e8b2c6e5426bb61355cd34Tony Mantler/* 229e0208b8dc28b4180e8b2c6e5426bb61355cd34Tony Mantler * Copyright (C) 2015 The Android Open Source Project 329e0208b8dc28b4180e8b2c6e5426bb61355cd34Tony Mantler * 429e0208b8dc28b4180e8b2c6e5426bb61355cd34Tony Mantler * Licensed under the Apache License, Version 2.0 (the "License"); 529e0208b8dc28b4180e8b2c6e5426bb61355cd34Tony Mantler * you may not use this file except in compliance with the License. 629e0208b8dc28b4180e8b2c6e5426bb61355cd34Tony Mantler * You may obtain a copy of the License at 729e0208b8dc28b4180e8b2c6e5426bb61355cd34Tony Mantler * 829e0208b8dc28b4180e8b2c6e5426bb61355cd34Tony Mantler * http://www.apache.org/licenses/LICENSE-2.0 929e0208b8dc28b4180e8b2c6e5426bb61355cd34Tony Mantler * 1029e0208b8dc28b4180e8b2c6e5426bb61355cd34Tony Mantler * Unless required by applicable law or agreed to in writing, software 1129e0208b8dc28b4180e8b2c6e5426bb61355cd34Tony Mantler * distributed under the License is distributed on an "AS IS" BASIS, 1229e0208b8dc28b4180e8b2c6e5426bb61355cd34Tony Mantler * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1329e0208b8dc28b4180e8b2c6e5426bb61355cd34Tony Mantler * See the License for the specific language governing permissions and 1429e0208b8dc28b4180e8b2c6e5426bb61355cd34Tony Mantler * limitations under the License 1529e0208b8dc28b4180e8b2c6e5426bb61355cd34Tony Mantler */ 1629e0208b8dc28b4180e8b2c6e5426bb61355cd34Tony Mantler 1729e0208b8dc28b4180e8b2c6e5426bb61355cd34Tony Mantlerpackage com.android.tv.settings.system.development; 1829e0208b8dc28b4180e8b2c6e5426bb61355cd34Tony Mantler 1929e0208b8dc28b4180e8b2c6e5426bb61355cd34Tony Mantlerimport android.app.usage.UsageStatsManager; 2029e0208b8dc28b4180e8b2c6e5426bb61355cd34Tony Mantlerimport android.content.Context; 2129e0208b8dc28b4180e8b2c6e5426bb61355cd34Tony Mantlerimport android.content.Intent; 2229e0208b8dc28b4180e8b2c6e5426bb61355cd34Tony Mantlerimport android.content.pm.PackageManager; 2329e0208b8dc28b4180e8b2c6e5426bb61355cd34Tony Mantlerimport android.content.pm.ResolveInfo; 2429e0208b8dc28b4180e8b2c6e5426bb61355cd34Tony Mantlerimport android.os.Bundle; 2529e0208b8dc28b4180e8b2c6e5426bb61355cd34Tony Mantlerimport android.support.annotation.Keep; 2629e0208b8dc28b4180e8b2c6e5426bb61355cd34Tony Mantlerimport android.support.v17.preference.LeanbackPreferenceFragment; 2729e0208b8dc28b4180e8b2c6e5426bb61355cd34Tony Mantlerimport android.support.v7.preference.Preference; 2829e0208b8dc28b4180e8b2c6e5426bb61355cd34Tony Mantlerimport android.support.v7.preference.PreferenceScreen; 2929e0208b8dc28b4180e8b2c6e5426bb61355cd34Tony Mantler 3029e0208b8dc28b4180e8b2c6e5426bb61355cd34Tony Mantlerimport com.android.tv.settings.R; 3129e0208b8dc28b4180e8b2c6e5426bb61355cd34Tony Mantler 3229e0208b8dc28b4180e8b2c6e5426bb61355cd34Tony Mantlerimport java.util.List; 3329e0208b8dc28b4180e8b2c6e5426bb61355cd34Tony Mantler 3429e0208b8dc28b4180e8b2c6e5426bb61355cd34Tony Mantler@Keep 3529e0208b8dc28b4180e8b2c6e5426bb61355cd34Tony Mantlerpublic class InactiveApps extends LeanbackPreferenceFragment implements 3629e0208b8dc28b4180e8b2c6e5426bb61355cd34Tony Mantler Preference.OnPreferenceClickListener { 3729e0208b8dc28b4180e8b2c6e5426bb61355cd34Tony Mantler 3829e0208b8dc28b4180e8b2c6e5426bb61355cd34Tony Mantler private UsageStatsManager mUsageStats; 3929e0208b8dc28b4180e8b2c6e5426bb61355cd34Tony Mantler 4029e0208b8dc28b4180e8b2c6e5426bb61355cd34Tony Mantler @Override 4129e0208b8dc28b4180e8b2c6e5426bb61355cd34Tony Mantler public void onCreate(Bundle icicle) { 4229e0208b8dc28b4180e8b2c6e5426bb61355cd34Tony Mantler mUsageStats = getActivity().getSystemService(UsageStatsManager.class); 4329e0208b8dc28b4180e8b2c6e5426bb61355cd34Tony Mantler super.onCreate(icicle); 4429e0208b8dc28b4180e8b2c6e5426bb61355cd34Tony Mantler } 4529e0208b8dc28b4180e8b2c6e5426bb61355cd34Tony Mantler 4629e0208b8dc28b4180e8b2c6e5426bb61355cd34Tony Mantler @Override 4729e0208b8dc28b4180e8b2c6e5426bb61355cd34Tony Mantler public void onResume() { 4829e0208b8dc28b4180e8b2c6e5426bb61355cd34Tony Mantler super.onResume(); 4929e0208b8dc28b4180e8b2c6e5426bb61355cd34Tony Mantler init(); 5029e0208b8dc28b4180e8b2c6e5426bb61355cd34Tony Mantler } 5129e0208b8dc28b4180e8b2c6e5426bb61355cd34Tony Mantler 5229e0208b8dc28b4180e8b2c6e5426bb61355cd34Tony Mantler @Override 5329e0208b8dc28b4180e8b2c6e5426bb61355cd34Tony Mantler public void onCreatePreferences(Bundle savedInstanceState, String rootKey) { 5429e0208b8dc28b4180e8b2c6e5426bb61355cd34Tony Mantler final Context themedContext = getPreferenceManager().getContext(); 5529e0208b8dc28b4180e8b2c6e5426bb61355cd34Tony Mantler final PreferenceScreen screen = getPreferenceManager() 5629e0208b8dc28b4180e8b2c6e5426bb61355cd34Tony Mantler .createPreferenceScreen(themedContext); 5729e0208b8dc28b4180e8b2c6e5426bb61355cd34Tony Mantler screen.setTitle(R.string.inactive_apps_title); 5829e0208b8dc28b4180e8b2c6e5426bb61355cd34Tony Mantler setPreferenceScreen(screen); 5929e0208b8dc28b4180e8b2c6e5426bb61355cd34Tony Mantler } 6029e0208b8dc28b4180e8b2c6e5426bb61355cd34Tony Mantler 6129e0208b8dc28b4180e8b2c6e5426bb61355cd34Tony Mantler private void init() { 6229e0208b8dc28b4180e8b2c6e5426bb61355cd34Tony Mantler final Context themedContext = getPreferenceManager().getContext(); 6329e0208b8dc28b4180e8b2c6e5426bb61355cd34Tony Mantler final PreferenceScreen screen = getPreferenceScreen(); 6429e0208b8dc28b4180e8b2c6e5426bb61355cd34Tony Mantler screen.removeAll(); 6529e0208b8dc28b4180e8b2c6e5426bb61355cd34Tony Mantler screen.setOrderingAsAdded(false); 6629e0208b8dc28b4180e8b2c6e5426bb61355cd34Tony Mantler final PackageManager pm = getActivity().getPackageManager(); 6729e0208b8dc28b4180e8b2c6e5426bb61355cd34Tony Mantler 6829e0208b8dc28b4180e8b2c6e5426bb61355cd34Tony Mantler Intent launcherIntent = new Intent(Intent.ACTION_MAIN); 6929e0208b8dc28b4180e8b2c6e5426bb61355cd34Tony Mantler launcherIntent.addCategory(Intent.CATEGORY_LAUNCHER); 7029e0208b8dc28b4180e8b2c6e5426bb61355cd34Tony Mantler List<ResolveInfo> apps = pm.queryIntentActivities(launcherIntent, 0); 7129e0208b8dc28b4180e8b2c6e5426bb61355cd34Tony Mantler for (ResolveInfo app : apps) { 7229e0208b8dc28b4180e8b2c6e5426bb61355cd34Tony Mantler String packageName = app.activityInfo.applicationInfo.packageName; 7329e0208b8dc28b4180e8b2c6e5426bb61355cd34Tony Mantler Preference p = new Preference(themedContext); 7429e0208b8dc28b4180e8b2c6e5426bb61355cd34Tony Mantler p.setTitle(app.loadLabel(pm)); 7529e0208b8dc28b4180e8b2c6e5426bb61355cd34Tony Mantler p.setIcon(app.loadIcon(pm)); 7629e0208b8dc28b4180e8b2c6e5426bb61355cd34Tony Mantler p.setKey(packageName); 7729e0208b8dc28b4180e8b2c6e5426bb61355cd34Tony Mantler updateSummary(p); 7829e0208b8dc28b4180e8b2c6e5426bb61355cd34Tony Mantler p.setOnPreferenceClickListener(this); 7929e0208b8dc28b4180e8b2c6e5426bb61355cd34Tony Mantler 8029e0208b8dc28b4180e8b2c6e5426bb61355cd34Tony Mantler screen.addPreference(p); 8129e0208b8dc28b4180e8b2c6e5426bb61355cd34Tony Mantler } 8229e0208b8dc28b4180e8b2c6e5426bb61355cd34Tony Mantler } 8329e0208b8dc28b4180e8b2c6e5426bb61355cd34Tony Mantler 8429e0208b8dc28b4180e8b2c6e5426bb61355cd34Tony Mantler private void updateSummary(Preference p) { 8529e0208b8dc28b4180e8b2c6e5426bb61355cd34Tony Mantler boolean inactive = mUsageStats.isAppInactive(p.getKey()); 8629e0208b8dc28b4180e8b2c6e5426bb61355cd34Tony Mantler p.setSummary(inactive 8729e0208b8dc28b4180e8b2c6e5426bb61355cd34Tony Mantler ? R.string.inactive_app_inactive_summary 8829e0208b8dc28b4180e8b2c6e5426bb61355cd34Tony Mantler : R.string.inactive_app_active_summary); 8929e0208b8dc28b4180e8b2c6e5426bb61355cd34Tony Mantler } 9029e0208b8dc28b4180e8b2c6e5426bb61355cd34Tony Mantler 9129e0208b8dc28b4180e8b2c6e5426bb61355cd34Tony Mantler @Override 9229e0208b8dc28b4180e8b2c6e5426bb61355cd34Tony Mantler public boolean onPreferenceClick(Preference preference) { 9329e0208b8dc28b4180e8b2c6e5426bb61355cd34Tony Mantler String packageName = preference.getKey(); 9429e0208b8dc28b4180e8b2c6e5426bb61355cd34Tony Mantler mUsageStats.setAppInactive(packageName, !mUsageStats.isAppInactive(packageName)); 9529e0208b8dc28b4180e8b2c6e5426bb61355cd34Tony Mantler updateSummary(preference); 9629e0208b8dc28b4180e8b2c6e5426bb61355cd34Tony Mantler return false; 9729e0208b8dc28b4180e8b2c6e5426bb61355cd34Tony Mantler } 9829e0208b8dc28b4180e8b2c6e5426bb61355cd34Tony Mantler 9929e0208b8dc28b4180e8b2c6e5426bb61355cd34Tony Mantler} 100