1bf9f2d26982c89e408476af318e20b52bdd797fdSunny Goyal/*
2bf9f2d26982c89e408476af318e20b52bdd797fdSunny Goyal * Copyright (C) 2016 The Android Open Source Project
3bf9f2d26982c89e408476af318e20b52bdd797fdSunny Goyal *
4bf9f2d26982c89e408476af318e20b52bdd797fdSunny Goyal * Licensed under the Apache License, Version 2.0 (the "License");
5bf9f2d26982c89e408476af318e20b52bdd797fdSunny Goyal * you may not use this file except in compliance with the License.
6bf9f2d26982c89e408476af318e20b52bdd797fdSunny Goyal * You may obtain a copy of the License at
7bf9f2d26982c89e408476af318e20b52bdd797fdSunny Goyal *
8bf9f2d26982c89e408476af318e20b52bdd797fdSunny Goyal *      http://www.apache.org/licenses/LICENSE-2.0
9bf9f2d26982c89e408476af318e20b52bdd797fdSunny Goyal *
10bf9f2d26982c89e408476af318e20b52bdd797fdSunny Goyal * Unless required by applicable law or agreed to in writing, software
11bf9f2d26982c89e408476af318e20b52bdd797fdSunny Goyal * distributed under the License is distributed on an "AS IS" BASIS,
12bf9f2d26982c89e408476af318e20b52bdd797fdSunny Goyal * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13bf9f2d26982c89e408476af318e20b52bdd797fdSunny Goyal * See the License for the specific language governing permissions and
14bf9f2d26982c89e408476af318e20b52bdd797fdSunny Goyal * limitations under the License
15bf9f2d26982c89e408476af318e20b52bdd797fdSunny Goyal */
16bf9f2d26982c89e408476af318e20b52bdd797fdSunny Goyal
17bf9f2d26982c89e408476af318e20b52bdd797fdSunny Goyalpackage com.android.settings.qstile;
18bf9f2d26982c89e408476af318e20b52bdd797fdSunny Goyal
19c960751e0a2ed3eaf026bfc3a7c143fe0b79bb1bSunny Goyalimport android.content.ComponentName;
20c960751e0a2ed3eaf026bfc3a7c143fe0b79bb1bSunny Goyalimport android.content.Context;
21bf9f2d26982c89e408476af318e20b52bdd797fdSunny Goyalimport android.content.Intent;
22c960751e0a2ed3eaf026bfc3a7c143fe0b79bb1bSunny Goyalimport android.content.pm.PackageManager;
23c960751e0a2ed3eaf026bfc3a7c143fe0b79bb1bSunny Goyalimport android.content.pm.ResolveInfo;
24c960751e0a2ed3eaf026bfc3a7c143fe0b79bb1bSunny Goyalimport android.content.pm.ServiceInfo;
25bf9f2d26982c89e408476af318e20b52bdd797fdSunny Goyalimport android.os.Bundle;
26c960751e0a2ed3eaf026bfc3a7c143fe0b79bb1bSunny Goyalimport android.service.quicksettings.TileService;
27c960751e0a2ed3eaf026bfc3a7c143fe0b79bb1bSunny Goyalimport android.support.v14.preference.SwitchPreference;
28c960751e0a2ed3eaf026bfc3a7c143fe0b79bb1bSunny Goyalimport android.support.v7.preference.Preference;
29bf9f2d26982c89e408476af318e20b52bdd797fdSunny Goyal
30bf9f2d26982c89e408476af318e20b52bdd797fdSunny Goyalimport com.android.settings.SettingsActivity;
31bf9f2d26982c89e408476af318e20b52bdd797fdSunny Goyalimport com.android.settings.SettingsPreferenceFragment;
32bf9f2d26982c89e408476af318e20b52bdd797fdSunny Goyalimport com.android.settings.core.instrumentation.Instrumentable;
33bf9f2d26982c89e408476af318e20b52bdd797fdSunny Goyal
34bf9f2d26982c89e408476af318e20b52bdd797fdSunny Goyalpublic class DevelopmentTileConfigActivity extends SettingsActivity {
35bf9f2d26982c89e408476af318e20b52bdd797fdSunny Goyal
36bf9f2d26982c89e408476af318e20b52bdd797fdSunny Goyal    @Override
37bf9f2d26982c89e408476af318e20b52bdd797fdSunny Goyal    public Intent getIntent() {
38bf9f2d26982c89e408476af318e20b52bdd797fdSunny Goyal        Intent modIntent = new Intent(super.getIntent())
39bf9f2d26982c89e408476af318e20b52bdd797fdSunny Goyal                .putExtra(EXTRA_SHOW_FRAGMENT, DevelopmentTileConfigFragment.class.getName())
40bf9f2d26982c89e408476af318e20b52bdd797fdSunny Goyal                .putExtra(EXTRA_HIDE_DRAWER, true);
41bf9f2d26982c89e408476af318e20b52bdd797fdSunny Goyal        return modIntent;
42bf9f2d26982c89e408476af318e20b52bdd797fdSunny Goyal    }
43bf9f2d26982c89e408476af318e20b52bdd797fdSunny Goyal
44bf9f2d26982c89e408476af318e20b52bdd797fdSunny Goyal    @Override
45bf9f2d26982c89e408476af318e20b52bdd797fdSunny Goyal    protected boolean isValidFragment(String fragmentName) {
46bf9f2d26982c89e408476af318e20b52bdd797fdSunny Goyal        return (DevelopmentTileConfigFragment.class.getName().equals(fragmentName));
47bf9f2d26982c89e408476af318e20b52bdd797fdSunny Goyal    }
48bf9f2d26982c89e408476af318e20b52bdd797fdSunny Goyal
49c960751e0a2ed3eaf026bfc3a7c143fe0b79bb1bSunny Goyal    public static class DevelopmentTileConfigFragment extends SettingsPreferenceFragment
50c960751e0a2ed3eaf026bfc3a7c143fe0b79bb1bSunny Goyal            implements Preference.OnPreferenceChangeListener {
51bf9f2d26982c89e408476af318e20b52bdd797fdSunny Goyal
52bf9f2d26982c89e408476af318e20b52bdd797fdSunny Goyal        @Override
53bf9f2d26982c89e408476af318e20b52bdd797fdSunny Goyal        public void onCreate(Bundle icicle) {
54bf9f2d26982c89e408476af318e20b52bdd797fdSunny Goyal            super.onCreate(icicle);
55bf9f2d26982c89e408476af318e20b52bdd797fdSunny Goyal
56c960751e0a2ed3eaf026bfc3a7c143fe0b79bb1bSunny Goyal            Context context = getPrefContext();
57c960751e0a2ed3eaf026bfc3a7c143fe0b79bb1bSunny Goyal            setPreferenceScreen(getPreferenceManager().createPreferenceScreen(context));
58c960751e0a2ed3eaf026bfc3a7c143fe0b79bb1bSunny Goyal            getPreferenceScreen().removeAll();
59c960751e0a2ed3eaf026bfc3a7c143fe0b79bb1bSunny Goyal
60c960751e0a2ed3eaf026bfc3a7c143fe0b79bb1bSunny Goyal            Intent intent = new Intent(TileService.ACTION_QS_TILE)
61c960751e0a2ed3eaf026bfc3a7c143fe0b79bb1bSunny Goyal                    .setPackage(context.getPackageName());
62c960751e0a2ed3eaf026bfc3a7c143fe0b79bb1bSunny Goyal            PackageManager pm = getPackageManager();
63c960751e0a2ed3eaf026bfc3a7c143fe0b79bb1bSunny Goyal            for (ResolveInfo info :
64c960751e0a2ed3eaf026bfc3a7c143fe0b79bb1bSunny Goyal                    pm.queryIntentServices(intent, PackageManager.MATCH_DISABLED_COMPONENTS)) {
65c960751e0a2ed3eaf026bfc3a7c143fe0b79bb1bSunny Goyal                ServiceInfo sInfo = info.serviceInfo;
66c960751e0a2ed3eaf026bfc3a7c143fe0b79bb1bSunny Goyal                int enabledSetting = pm.getComponentEnabledSetting(
67c960751e0a2ed3eaf026bfc3a7c143fe0b79bb1bSunny Goyal                        new ComponentName(sInfo.packageName, sInfo.name));
68c960751e0a2ed3eaf026bfc3a7c143fe0b79bb1bSunny Goyal                boolean checked = enabledSetting == PackageManager.COMPONENT_ENABLED_STATE_ENABLED
69c960751e0a2ed3eaf026bfc3a7c143fe0b79bb1bSunny Goyal                        || ((enabledSetting == PackageManager.COMPONENT_ENABLED_STATE_DEFAULT)
70c960751e0a2ed3eaf026bfc3a7c143fe0b79bb1bSunny Goyal                        && sInfo.enabled);
71c960751e0a2ed3eaf026bfc3a7c143fe0b79bb1bSunny Goyal
72c960751e0a2ed3eaf026bfc3a7c143fe0b79bb1bSunny Goyal                SwitchPreference preference = new SwitchPreference(context);
73c960751e0a2ed3eaf026bfc3a7c143fe0b79bb1bSunny Goyal                preference.setTitle(sInfo.loadLabel(pm));
74c960751e0a2ed3eaf026bfc3a7c143fe0b79bb1bSunny Goyal                preference.setIcon(sInfo.icon);
75c960751e0a2ed3eaf026bfc3a7c143fe0b79bb1bSunny Goyal                preference.setKey(sInfo.name);
76c960751e0a2ed3eaf026bfc3a7c143fe0b79bb1bSunny Goyal                preference.setChecked(checked);
77c960751e0a2ed3eaf026bfc3a7c143fe0b79bb1bSunny Goyal                preference.setPersistent(false);
78c960751e0a2ed3eaf026bfc3a7c143fe0b79bb1bSunny Goyal                preference.setOnPreferenceChangeListener(this);
79c960751e0a2ed3eaf026bfc3a7c143fe0b79bb1bSunny Goyal                getPreferenceScreen().addPreference(preference);
80c960751e0a2ed3eaf026bfc3a7c143fe0b79bb1bSunny Goyal            }
81bf9f2d26982c89e408476af318e20b52bdd797fdSunny Goyal        }
82bf9f2d26982c89e408476af318e20b52bdd797fdSunny Goyal
83bf9f2d26982c89e408476af318e20b52bdd797fdSunny Goyal        @Override
84bf9f2d26982c89e408476af318e20b52bdd797fdSunny Goyal        public int getMetricsCategory() {
85bf9f2d26982c89e408476af318e20b52bdd797fdSunny Goyal            return Instrumentable.METRICS_CATEGORY_UNKNOWN;
86bf9f2d26982c89e408476af318e20b52bdd797fdSunny Goyal        }
87bf9f2d26982c89e408476af318e20b52bdd797fdSunny Goyal
88bf9f2d26982c89e408476af318e20b52bdd797fdSunny Goyal        @Override
89c960751e0a2ed3eaf026bfc3a7c143fe0b79bb1bSunny Goyal        public boolean onPreferenceChange(Preference preference, Object newValue) {
90c960751e0a2ed3eaf026bfc3a7c143fe0b79bb1bSunny Goyal            ComponentName cn = new ComponentName(
91c960751e0a2ed3eaf026bfc3a7c143fe0b79bb1bSunny Goyal                    getPrefContext().getPackageName(), preference.getKey());
92c960751e0a2ed3eaf026bfc3a7c143fe0b79bb1bSunny Goyal            getPackageManager().setComponentEnabledSetting(cn, (Boolean) newValue
93c960751e0a2ed3eaf026bfc3a7c143fe0b79bb1bSunny Goyal                            ? PackageManager.COMPONENT_ENABLED_STATE_ENABLED
94c960751e0a2ed3eaf026bfc3a7c143fe0b79bb1bSunny Goyal                            : PackageManager.COMPONENT_ENABLED_STATE_DISABLED,
95c960751e0a2ed3eaf026bfc3a7c143fe0b79bb1bSunny Goyal                    PackageManager.DONT_KILL_APP);
96c960751e0a2ed3eaf026bfc3a7c143fe0b79bb1bSunny Goyal            return true;
97bf9f2d26982c89e408476af318e20b52bdd797fdSunny Goyal        }
98bf9f2d26982c89e408476af318e20b52bdd797fdSunny Goyal    }
99c960751e0a2ed3eaf026bfc3a7c143fe0b79bb1bSunny Goyal}