Home | History | Annotate | Download | only in tiles
      1 /*
      2  * Copyright (C) 2014 The Android Open Source Project
      3  *
      4  * Licensed under the Apache License, Version 2.0 (the "License");
      5  * you may not use this file except in compliance with the License.
      6  * You may obtain a copy of 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,
     12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     13  * See the License for the specific language governing permissions and
     14  * limitations under the License.
     15  */
     16 
     17 package com.android.systemui.qs.tiles;
     18 
     19 import android.provider.Settings.Secure;
     20 
     21 import com.android.systemui.R;
     22 import com.android.systemui.qs.QSTile;
     23 import com.android.systemui.qs.SecureSetting;
     24 import com.android.systemui.qs.UsageTracker;
     25 
     26 /** Quick settings tile: Invert colors **/
     27 public class ColorInversionTile extends QSTile<QSTile.BooleanState> {
     28 
     29     private final SecureSetting mSetting;
     30     private final UsageTracker mUsageTracker;
     31 
     32     private boolean mListening;
     33 
     34     public ColorInversionTile(Host host) {
     35         super(host);
     36 
     37         mSetting = new SecureSetting(mContext, mHandler,
     38                 Secure.ACCESSIBILITY_DISPLAY_INVERSION_ENABLED) {
     39             @Override
     40             protected void handleValueChanged(int value) {
     41                 mUsageTracker.trackUsage();
     42                 if (mListening) {
     43                     handleRefreshState(value);
     44                 }
     45             }
     46         };
     47         mUsageTracker = new UsageTracker(host.getContext(), ColorInversionTile.class);
     48         if (mSetting.getValue() != 0 && !mUsageTracker.isRecentlyUsed()) {
     49             mUsageTracker.trackUsage();
     50         }
     51         mUsageTracker.setListening(true);
     52         mSetting.setListening(true);
     53     }
     54 
     55     @Override
     56     protected void handleDestroy() {
     57         super.handleDestroy();
     58         mUsageTracker.setListening(false);
     59         mSetting.setListening(false);
     60     }
     61 
     62     @Override
     63     protected BooleanState newTileState() {
     64         return new BooleanState();
     65     }
     66 
     67     @Override
     68     public void setListening(boolean listening) {
     69         mListening = listening;
     70     }
     71 
     72     @Override
     73     protected void handleUserSwitch(int newUserId) {
     74         mSetting.setUserId(newUserId);
     75         handleRefreshState(mSetting.getValue());
     76     }
     77 
     78     @Override
     79     protected void handleClick() {
     80         mSetting.setValue(mState.value ? 0 : 1);
     81     }
     82 
     83     @Override
     84     protected void handleUpdateState(BooleanState state, Object arg) {
     85         final int value = arg instanceof Integer ? (Integer) arg : mSetting.getValue();
     86         final boolean enabled = value != 0;
     87         state.visible = enabled || mUsageTracker.isRecentlyUsed();
     88         state.value = enabled;
     89         state.label = mContext.getString(R.string.quick_settings_inversion_label);
     90         state.iconId = enabled ? R.drawable.ic_qs_inversion_on : R.drawable.ic_qs_inversion_off;
     91     }
     92 
     93     @Override
     94     protected String composeChangeAnnouncement() {
     95         if (mState.value) {
     96             return mContext.getString(
     97                     R.string.accessibility_quick_settings_color_inversion_changed_on);
     98         } else {
     99             return mContext.getString(
    100                     R.string.accessibility_quick_settings_color_inversion_changed_off);
    101         }
    102     }
    103 }
    104