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}