Home | History | Annotate | Download | only in qstile
      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.os.RemoteException;
     20 import android.os.SystemProperties;
     21 import android.provider.Settings;
     22 import android.service.quicksettings.Tile;
     23 import android.service.quicksettings.TileService;
     24 import android.view.IWindowManager;
     25 import android.view.ThreadedRenderer;
     26 import android.view.View;
     27 import android.view.WindowManagerGlobal;
     28 
     29 import com.android.internal.app.LocalePicker;
     30 import com.android.settings.development.DevelopmentSettings;
     31 
     32 public abstract class DevelopmentTiles extends TileService {
     33 
     34     protected abstract boolean isEnabled();
     35 
     36     protected abstract void setIsEnabled(boolean isEnabled);
     37 
     38     @Override
     39     public void onStartListening() {
     40         super.onStartListening();
     41         refresh();
     42     }
     43 
     44     public void refresh() {
     45         getQsTile().setState(isEnabled() ? Tile.STATE_ACTIVE : Tile.STATE_INACTIVE);
     46         getQsTile().updateTile();
     47     }
     48 
     49     @Override
     50     public void onClick() {
     51         setIsEnabled(getQsTile().getState() == Tile.STATE_INACTIVE);
     52         new DevelopmentSettings.SystemPropPoker().execute(); // Settings app magic
     53         refresh();
     54     }
     55 
     56     /**
     57      * Tile to control the "Show layout bounds" developer setting
     58      */
     59     public static class ShowLayout extends DevelopmentTiles {
     60 
     61         @Override
     62         protected boolean isEnabled() {
     63             return SystemProperties.getBoolean(View.DEBUG_LAYOUT_PROPERTY, false);
     64         }
     65 
     66         @Override
     67         protected void setIsEnabled(boolean isEnabled) {
     68             SystemProperties.set(View.DEBUG_LAYOUT_PROPERTY, isEnabled ? "true" : "false");
     69         }
     70     }
     71 
     72     /**
     73      * Tile to control the "GPU profiling" developer setting
     74      */
     75     public static class GPUProfiling extends DevelopmentTiles {
     76 
     77         @Override
     78         protected boolean isEnabled() {
     79             final String value = SystemProperties.get(ThreadedRenderer.PROFILE_PROPERTY);
     80             return value.equals("visual_bars");
     81         }
     82 
     83         @Override
     84         protected void setIsEnabled(boolean isEnabled) {
     85             SystemProperties.set(ThreadedRenderer.PROFILE_PROPERTY, isEnabled ? "visual_bars" : "");
     86         }
     87     }
     88 
     89     /**
     90      * Tile to control the "Force RTL" developer setting
     91      */
     92     public static class ForceRTL extends DevelopmentTiles {
     93 
     94         @Override
     95         protected boolean isEnabled() {
     96             return Settings.Global.getInt(
     97                     getContentResolver(), Settings.Global.DEVELOPMENT_FORCE_RTL, 0) != 0;
     98         }
     99 
    100         @Override
    101         protected void setIsEnabled(boolean isEnabled) {
    102             Settings.Global.putInt(
    103                     getContentResolver(), Settings.Global.DEVELOPMENT_FORCE_RTL, isEnabled ? 1 : 0);
    104             SystemProperties.set(Settings.Global.DEVELOPMENT_FORCE_RTL, isEnabled ? "1" : "0");
    105             LocalePicker.updateLocales(getResources().getConfiguration().getLocales());
    106         }
    107     }
    108 
    109     /**
    110      * Tile to control the "Animation speed" developer setting
    111      */
    112     public static class AnimationSpeed extends DevelopmentTiles {
    113 
    114         @Override
    115         protected boolean isEnabled() {
    116             IWindowManager wm = WindowManagerGlobal.getWindowManagerService();
    117             try {
    118                 return wm.getAnimationScale(0) != 1;
    119             } catch (RemoteException e) { }
    120             return false;
    121         }
    122 
    123         @Override
    124         protected void setIsEnabled(boolean isEnabled) {
    125             IWindowManager wm = WindowManagerGlobal.getWindowManagerService();
    126             float scale = isEnabled ? 10 : 1;
    127             try {
    128                 wm.setAnimationScale(0, scale);
    129                 wm.setAnimationScale(1, scale);
    130                 wm.setAnimationScale(2, scale);
    131             } catch (RemoteException e) { }
    132         }
    133     }
    134 }