1 /* 2 * Copyright (C) 2016 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); you may not 5 * use this file except in compliance with the License. You may obtain a copy of 6 * the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT 12 * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the 13 * License for the specific language governing permissions and limitations under 14 * the License. 15 */ 16 17 package com.android.settings.qstile; 18 19 import android.content.ComponentName; 20 import android.content.Context; 21 import android.content.pm.PackageManager; 22 import android.os.SystemProperties; 23 import android.service.quicksettings.Tile; 24 import android.service.quicksettings.TileService; 25 import android.view.ThreadedRenderer; 26 import android.view.View; 27 import com.android.settings.DevelopmentSettings; 28 29 public class DevelopmentTiles { 30 // List of components that need to be enabled when developer tools are turned on 31 static final Class[] TILE_CLASSES = new Class[] { 32 ShowLayout.class, 33 GPUProfiling.class, 34 }; 35 public static void setTilesEnabled(Context context, boolean enable) { 36 final PackageManager pm = context.getPackageManager(); 37 for (Class cls : TILE_CLASSES) { 38 pm.setComponentEnabledSetting(new ComponentName(context, cls), 39 enable ? PackageManager.COMPONENT_ENABLED_STATE_ENABLED 40 : PackageManager.COMPONENT_ENABLED_STATE_DEFAULT, 41 PackageManager.DONT_KILL_APP); 42 } 43 } 44 45 /** 46 * Tile to control the "Show layout bounds" developer setting 47 */ 48 public static class ShowLayout extends TileService { 49 @Override 50 public void onStartListening() { 51 super.onStartListening(); 52 refresh(); 53 } 54 55 public void refresh() { 56 final boolean enabled = SystemProperties.getBoolean(View.DEBUG_LAYOUT_PROPERTY, false); 57 getQsTile().setState(enabled ? Tile.STATE_ACTIVE : Tile.STATE_INACTIVE); 58 getQsTile().updateTile(); 59 } 60 61 @Override 62 public void onClick() { 63 SystemProperties.set(View.DEBUG_LAYOUT_PROPERTY, 64 getQsTile().getState() == Tile.STATE_INACTIVE ? "true" : "false"); 65 new DevelopmentSettings.SystemPropPoker().execute(); // Settings app magic 66 refresh(); 67 } 68 } 69 70 /** 71 * Tile to control the "GPU profiling" developer setting 72 */ 73 public static class GPUProfiling extends TileService { 74 @Override 75 public void onStartListening() { 76 super.onStartListening(); 77 refresh(); 78 } 79 80 public void refresh() { 81 final String value = SystemProperties.get(ThreadedRenderer.PROFILE_PROPERTY); 82 getQsTile().setState(value.equals("visual_bars") 83 ? Tile.STATE_ACTIVE : Tile.STATE_INACTIVE); 84 getQsTile().updateTile(); 85 } 86 87 @Override 88 public void onClick() { 89 SystemProperties.set(ThreadedRenderer.PROFILE_PROPERTY, 90 getQsTile().getState() == Tile.STATE_INACTIVE ? "visual_bars" : ""); 91 new DevelopmentSettings.SystemPropPoker().execute(); // Settings app magic 92 refresh(); 93 } 94 } 95 }