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