150e32b0db0589f6aace1928d3228734ad68179e6Amith Yamasani/*
250e32b0db0589f6aace1928d3228734ad68179e6Amith Yamasani * Copyright (C) 2015 The Android Open Source Project
350e32b0db0589f6aace1928d3228734ad68179e6Amith Yamasani *
450e32b0db0589f6aace1928d3228734ad68179e6Amith Yamasani * Licensed under the Apache License, Version 2.0 (the "License");
550e32b0db0589f6aace1928d3228734ad68179e6Amith Yamasani * you may not use this file except in compliance with the License.
650e32b0db0589f6aace1928d3228734ad68179e6Amith Yamasani * You may obtain a copy of the License at
750e32b0db0589f6aace1928d3228734ad68179e6Amith Yamasani *
850e32b0db0589f6aace1928d3228734ad68179e6Amith Yamasani *      http://www.apache.org/licenses/LICENSE-2.0
950e32b0db0589f6aace1928d3228734ad68179e6Amith Yamasani *
1050e32b0db0589f6aace1928d3228734ad68179e6Amith Yamasani * Unless required by applicable law or agreed to in writing, software
1150e32b0db0589f6aace1928d3228734ad68179e6Amith Yamasani * distributed under the License is distributed on an "AS IS" BASIS,
1250e32b0db0589f6aace1928d3228734ad68179e6Amith Yamasani * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1350e32b0db0589f6aace1928d3228734ad68179e6Amith Yamasani * See the License for the specific language governing permissions and
1450e32b0db0589f6aace1928d3228734ad68179e6Amith Yamasani * limitations under the License.
1550e32b0db0589f6aace1928d3228734ad68179e6Amith Yamasani */
1650e32b0db0589f6aace1928d3228734ad68179e6Amith Yamasani
1750e32b0db0589f6aace1928d3228734ad68179e6Amith Yamasanipackage com.android.settings.fuelgauge;
1850e32b0db0589f6aace1928d3228734ad68179e6Amith Yamasani
1950e32b0db0589f6aace1928d3228734ad68179e6Amith Yamasaniimport android.app.usage.UsageStatsManager;
2050e32b0db0589f6aace1928d3228734ad68179e6Amith Yamasaniimport android.content.Context;
2150e32b0db0589f6aace1928d3228734ad68179e6Amith Yamasaniimport android.content.Intent;
2250e32b0db0589f6aace1928d3228734ad68179e6Amith Yamasaniimport android.content.pm.PackageManager;
2350e32b0db0589f6aace1928d3228734ad68179e6Amith Yamasaniimport android.content.pm.ResolveInfo;
2450e32b0db0589f6aace1928d3228734ad68179e6Amith Yamasaniimport android.os.Bundle;
2539b467482d1bf256a111c757e9b7621c6f523271Jason Monkimport android.support.v7.preference.Preference;
2639b467482d1bf256a111c757e9b7621c6f523271Jason Monkimport android.support.v7.preference.Preference.OnPreferenceClickListener;
2739b467482d1bf256a111c757e9b7621c6f523271Jason Monkimport android.support.v7.preference.PreferenceGroup;
2850e32b0db0589f6aace1928d3228734ad68179e6Amith Yamasani
299d1bfd1e8de6e46137a9571507c03526880d6a46Chris Wrenimport com.android.internal.logging.MetricsProto.MetricsEvent;
3050e32b0db0589f6aace1928d3228734ad68179e6Amith Yamasaniimport com.android.settings.R;
3150e32b0db0589f6aace1928d3228734ad68179e6Amith Yamasaniimport com.android.settings.SettingsPreferenceFragment;
3250e32b0db0589f6aace1928d3228734ad68179e6Amith Yamasani
3350e32b0db0589f6aace1928d3228734ad68179e6Amith Yamasaniimport java.util.List;
3450e32b0db0589f6aace1928d3228734ad68179e6Amith Yamasani
3550e32b0db0589f6aace1928d3228734ad68179e6Amith Yamasanipublic class InactiveApps extends SettingsPreferenceFragment implements OnPreferenceClickListener {
3650e32b0db0589f6aace1928d3228734ad68179e6Amith Yamasani
3750e32b0db0589f6aace1928d3228734ad68179e6Amith Yamasani    private UsageStatsManager mUsageStats;
3850e32b0db0589f6aace1928d3228734ad68179e6Amith Yamasani
3950e32b0db0589f6aace1928d3228734ad68179e6Amith Yamasani    @Override
4050e32b0db0589f6aace1928d3228734ad68179e6Amith Yamasani    protected int getMetricsCategory() {
419d1bfd1e8de6e46137a9571507c03526880d6a46Chris Wren        return MetricsEvent.FUELGAUGE_INACTIVE_APPS;
4250e32b0db0589f6aace1928d3228734ad68179e6Amith Yamasani    }
4350e32b0db0589f6aace1928d3228734ad68179e6Amith Yamasani
4450e32b0db0589f6aace1928d3228734ad68179e6Amith Yamasani    @Override
4550e32b0db0589f6aace1928d3228734ad68179e6Amith Yamasani    public void onCreate(Bundle icicle) {
4650e32b0db0589f6aace1928d3228734ad68179e6Amith Yamasani        super.onCreate(icicle);
4750e32b0db0589f6aace1928d3228734ad68179e6Amith Yamasani
4850e32b0db0589f6aace1928d3228734ad68179e6Amith Yamasani        mUsageStats = getActivity().getSystemService(UsageStatsManager.class);
4950e32b0db0589f6aace1928d3228734ad68179e6Amith Yamasani        addPreferencesFromResource(R.xml.inactive_apps);
5050e32b0db0589f6aace1928d3228734ad68179e6Amith Yamasani    }
5150e32b0db0589f6aace1928d3228734ad68179e6Amith Yamasani
5250e32b0db0589f6aace1928d3228734ad68179e6Amith Yamasani    @Override
5350e32b0db0589f6aace1928d3228734ad68179e6Amith Yamasani    public void onResume() {
5450e32b0db0589f6aace1928d3228734ad68179e6Amith Yamasani        super.onResume();
5550e32b0db0589f6aace1928d3228734ad68179e6Amith Yamasani        init();
5650e32b0db0589f6aace1928d3228734ad68179e6Amith Yamasani    }
5750e32b0db0589f6aace1928d3228734ad68179e6Amith Yamasani
5850e32b0db0589f6aace1928d3228734ad68179e6Amith Yamasani    private void init() {
5950e32b0db0589f6aace1928d3228734ad68179e6Amith Yamasani        PreferenceGroup screen = getPreferenceScreen();
6050e32b0db0589f6aace1928d3228734ad68179e6Amith Yamasani        screen.removeAll();
6150e32b0db0589f6aace1928d3228734ad68179e6Amith Yamasani        screen.setOrderingAsAdded(false);
6250e32b0db0589f6aace1928d3228734ad68179e6Amith Yamasani        final Context context = getActivity();
6350e32b0db0589f6aace1928d3228734ad68179e6Amith Yamasani        final PackageManager pm = context.getPackageManager();
6450e32b0db0589f6aace1928d3228734ad68179e6Amith Yamasani        final UsageStatsManager usm = context.getSystemService(UsageStatsManager.class);
6550e32b0db0589f6aace1928d3228734ad68179e6Amith Yamasani
6650e32b0db0589f6aace1928d3228734ad68179e6Amith Yamasani        Intent launcherIntent = new Intent(Intent.ACTION_MAIN);
6750e32b0db0589f6aace1928d3228734ad68179e6Amith Yamasani        launcherIntent.addCategory(Intent.CATEGORY_LAUNCHER);
6850e32b0db0589f6aace1928d3228734ad68179e6Amith Yamasani        List<ResolveInfo> apps = pm.queryIntentActivities(launcherIntent, 0);
6950e32b0db0589f6aace1928d3228734ad68179e6Amith Yamasani        for (ResolveInfo app : apps) {
7050e32b0db0589f6aace1928d3228734ad68179e6Amith Yamasani            String packageName = app.activityInfo.applicationInfo.packageName;
7139b467482d1bf256a111c757e9b7621c6f523271Jason Monk            Preference p = new Preference(getPrefContext());
7250e32b0db0589f6aace1928d3228734ad68179e6Amith Yamasani            p.setTitle(app.loadLabel(pm));
7350e32b0db0589f6aace1928d3228734ad68179e6Amith Yamasani            p.setIcon(app.loadIcon(pm));
7450e32b0db0589f6aace1928d3228734ad68179e6Amith Yamasani            p.setKey(packageName);
7550e32b0db0589f6aace1928d3228734ad68179e6Amith Yamasani            updateSummary(p);
7650e32b0db0589f6aace1928d3228734ad68179e6Amith Yamasani            p.setOnPreferenceClickListener(this);
7750e32b0db0589f6aace1928d3228734ad68179e6Amith Yamasani
7850e32b0db0589f6aace1928d3228734ad68179e6Amith Yamasani            screen.addPreference(p);
7950e32b0db0589f6aace1928d3228734ad68179e6Amith Yamasani        }
8050e32b0db0589f6aace1928d3228734ad68179e6Amith Yamasani    }
8150e32b0db0589f6aace1928d3228734ad68179e6Amith Yamasani
8250e32b0db0589f6aace1928d3228734ad68179e6Amith Yamasani    private void updateSummary(Preference p) {
8350e32b0db0589f6aace1928d3228734ad68179e6Amith Yamasani        boolean inactive = mUsageStats.isAppInactive(p.getKey());
8450e32b0db0589f6aace1928d3228734ad68179e6Amith Yamasani        p.setSummary(inactive
8550e32b0db0589f6aace1928d3228734ad68179e6Amith Yamasani                ? R.string.inactive_app_inactive_summary
8650e32b0db0589f6aace1928d3228734ad68179e6Amith Yamasani                : R.string.inactive_app_active_summary);
8750e32b0db0589f6aace1928d3228734ad68179e6Amith Yamasani    }
8850e32b0db0589f6aace1928d3228734ad68179e6Amith Yamasani
8950e32b0db0589f6aace1928d3228734ad68179e6Amith Yamasani    @Override
9050e32b0db0589f6aace1928d3228734ad68179e6Amith Yamasani    public boolean onPreferenceClick(Preference preference) {
9150e32b0db0589f6aace1928d3228734ad68179e6Amith Yamasani        String packageName = preference.getKey();
9250e32b0db0589f6aace1928d3228734ad68179e6Amith Yamasani        mUsageStats.setAppInactive(packageName, !mUsageStats.isAppInactive(packageName));
9350e32b0db0589f6aace1928d3228734ad68179e6Amith Yamasani        updateSummary(preference);
9450e32b0db0589f6aace1928d3228734ad68179e6Amith Yamasani        return false;
9550e32b0db0589f6aace1928d3228734ad68179e6Amith Yamasani    }
9650e32b0db0589f6aace1928d3228734ad68179e6Amith Yamasani}
97