blob: 77f063dfc2ebe10019ce8467b190a9d5b6f999a5 [file] [log] [blame]
John Spurlockaf8d6c42014-05-07 17:49:08 -04001/*
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
17package com.android.systemui.qs.tiles;
18
Jason Monk76c67aa2016-02-19 14:49:42 -050019import android.content.Intent;
20import android.provider.Settings;
John Spurlockaf8d6c42014-05-07 17:49:08 -040021import android.provider.Settings.Secure;
Julia Reynolds20aef8a2016-05-04 16:44:08 -040022import android.widget.Switch;
Chris Wrenf6e9228b2016-01-26 18:04:35 -050023
Chris Wren457a21c2015-05-06 17:50:34 -040024import com.android.internal.logging.MetricsLogger;
Tamas Berghammercbd3f0c2016-06-22 15:21:38 +010025import com.android.internal.logging.nano.MetricsProto.MetricsEvent;
John Spurlockaf8d6c42014-05-07 17:49:08 -040026import com.android.systemui.R;
27import com.android.systemui.qs.QSTile;
28import com.android.systemui.qs.SecureSetting;
29
30/** Quick settings tile: Invert colors **/
31public class ColorInversionTile extends QSTile<QSTile.BooleanState> {
32
John Spurlockc6df3cf2014-11-04 19:36:44 -050033 private final AnimationIcon mEnable
Jason Monk1aec93f2016-03-01 09:39:30 -050034 = new AnimationIcon(R.drawable.ic_invert_colors_enable_animation,
35 R.drawable.ic_invert_colors_disable);
John Spurlockc6df3cf2014-11-04 19:36:44 -050036 private final AnimationIcon mDisable
Jason Monk1aec93f2016-03-01 09:39:30 -050037 = new AnimationIcon(R.drawable.ic_invert_colors_disable_animation,
38 R.drawable.ic_invert_colors_enable);
John Spurlockaf8d6c42014-05-07 17:49:08 -040039 private final SecureSetting mSetting;
John Spurlockaf8d6c42014-05-07 17:49:08 -040040
John Spurlocke1f65332014-08-18 15:37:59 -040041 private boolean mListening;
42
John Spurlockaf8d6c42014-05-07 17:49:08 -040043 public ColorInversionTile(Host host) {
44 super(host);
45
46 mSetting = new SecureSetting(mContext, mHandler,
47 Secure.ACCESSIBILITY_DISPLAY_INVERSION_ENABLED) {
48 @Override
John Spurlock18764bf2014-11-19 20:33:40 -050049 protected void handleValueChanged(int value, boolean observedChange) {
Jason Monkba2318e2015-12-08 09:04:23 -050050 handleRefreshState(value);
John Spurlockaf8d6c42014-05-07 17:49:08 -040051 }
52 };
John Spurlockbceed062014-08-10 18:04:16 -040053 }
54
55 @Override
56 protected void handleDestroy() {
57 super.handleDestroy();
John Spurlocke1f65332014-08-18 15:37:59 -040058 mSetting.setListening(false);
John Spurlockaf8d6c42014-05-07 17:49:08 -040059 }
60
61 @Override
Jason Monk62b63a02016-02-02 15:15:31 -050062 public BooleanState newTileState() {
John Spurlockaf8d6c42014-05-07 17:49:08 -040063 return new BooleanState();
64 }
65
66 @Override
John Spurlockccb6b9a2014-05-17 15:54:40 -040067 public void setListening(boolean listening) {
Jason Monkba2318e2015-12-08 09:04:23 -050068 mSetting.setListening(listening);
John Spurlockaf8d6c42014-05-07 17:49:08 -040069 }
70
71 @Override
72 protected void handleUserSwitch(int newUserId) {
Adrian Roos32d88e82014-09-24 17:08:22 +020073 mSetting.setUserId(newUserId);
74 handleRefreshState(mSetting.getValue());
John Spurlockaf8d6c42014-05-07 17:49:08 -040075 }
76
77 @Override
Jason Monk76c67aa2016-02-19 14:49:42 -050078 public Intent getLongClickIntent() {
79 return new Intent(Settings.ACTION_ACCESSIBILITY_SETTINGS);
80 }
81
82 @Override
John Spurlockaf8d6c42014-05-07 17:49:08 -040083 protected void handleClick() {
Chris Wren9e7283f2015-05-08 17:23:47 -040084 MetricsLogger.action(mContext, getMetricsCategory(), !mState.value);
John Spurlockaf8d6c42014-05-07 17:49:08 -040085 mSetting.setValue(mState.value ? 0 : 1);
86 }
87
88 @Override
Jason Monk39c98e62016-03-16 09:18:35 -040089 public CharSequence getTileLabel() {
90 return mContext.getString(R.string.quick_settings_inversion_label);
91 }
92
93 @Override
John Spurlockaf8d6c42014-05-07 17:49:08 -040094 protected void handleUpdateState(BooleanState state, Object arg) {
95 final int value = arg instanceof Integer ? (Integer) arg : mSetting.getValue();
96 final boolean enabled = value != 0;
John Spurlockaf8d6c42014-05-07 17:49:08 -040097 state.value = enabled;
98 state.label = mContext.getString(R.string.quick_settings_inversion_label);
John Spurlockc6df3cf2014-11-04 19:36:44 -050099 state.icon = enabled ? mEnable : mDisable;
Julia Reynolds20aef8a2016-05-04 16:44:08 -0400100 state.minimalAccessibilityClassName = state.expandedAccessibilityClassName
101 = Switch.class.getName();
102 state.contentDescription = state.label;
John Spurlockaf8d6c42014-05-07 17:49:08 -0400103 }
Selim Cinek4fda7b22014-08-18 22:07:25 +0200104
105 @Override
Chris Wren457a21c2015-05-06 17:50:34 -0400106 public int getMetricsCategory() {
Chris Wrenf6e9228b2016-01-26 18:04:35 -0500107 return MetricsEvent.QS_COLORINVERSION;
Chris Wren457a21c2015-05-06 17:50:34 -0400108 }
109
110 @Override
Selim Cinek4fda7b22014-08-18 22:07:25 +0200111 protected String composeChangeAnnouncement() {
112 if (mState.value) {
113 return mContext.getString(
114 R.string.accessibility_quick_settings_color_inversion_changed_on);
115 } else {
116 return mContext.getString(
117 R.string.accessibility_quick_settings_color_inversion_changed_off);
118 }
119 }
John Spurlockaf8d6c42014-05-07 17:49:08 -0400120}