ColorInversionTile.java revision 395617fd35ef0e712945359a760a00eb1aaf7475
1d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca/*
2d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca * Copyright (C) 2014 The Android Open Source Project
3d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca *
4d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca * Licensed under the Apache License, Version 2.0 (the "License");
5d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca * you may not use this file except in compliance with the License.
6d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca * You may obtain a copy of the License at
7d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca *
8d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca *      http://www.apache.org/licenses/LICENSE-2.0
9d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca *
10d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca * Unless required by applicable law or agreed to in writing, software
11d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca * distributed under the License is distributed on an "AS IS" BASIS,
12d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca * See the License for the specific language governing permissions and
14d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca * limitations under the License.
15d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca */
16d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca
17d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonsecapackage com.android.systemui.qs.tiles;
18d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca
19d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonsecaimport android.content.Intent;
20d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonsecaimport android.provider.Settings;
21d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonsecaimport android.provider.Settings.Secure;
22d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonsecaimport android.service.quicksettings.Tile;
23d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonsecaimport android.widget.Switch;
24d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca
25d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonsecaimport com.android.internal.logging.MetricsLogger;
26d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonsecaimport com.android.internal.logging.nano.MetricsProto.MetricsEvent;
27d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonsecaimport com.android.systemui.R;
28d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonsecaimport com.android.systemui.R.drawable;
29d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonsecaimport com.android.systemui.qs.QSHost;
30d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonsecaimport com.android.systemui.plugins.qs.QSTile.BooleanState;
31d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonsecaimport com.android.systemui.qs.tileimpl.QSTileImpl;
32d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonsecaimport com.android.systemui.qs.SecureSetting;
33d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca
34d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca/** Quick settings tile: Invert colors **/
35d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonsecapublic class ColorInversionTile extends QSTileImpl<BooleanState> {
36d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca
37d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca    private final Icon mIcon = ResourceIcon.get(drawable.ic_invert_colors_disable);
38d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca    private final SecureSetting mSetting;
39d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca
40d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca    private boolean mListening;
41d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca
42d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca    public ColorInversionTile(QSHost host) {
43d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca        super(host);
44d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca
45d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca        mSetting = new SecureSetting(mContext, mHandler,
46d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca                Secure.ACCESSIBILITY_DISPLAY_INVERSION_ENABLED) {
47d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca            @Override
48d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca            protected void handleValueChanged(int value, boolean observedChange) {
49d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca                handleRefreshState(value);
50d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca            }
51d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca        };
52d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca    }
53d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca
5491332e455a530b86f897874919da29efa563fdf3José Fonseca    @Override
55d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca    protected void handleDestroy() {
56d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca        super.handleDestroy();
57d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca        mSetting.setListening(false);
581a840cc5925f52079916feb2c456816a7a91d627Marek Olšák    }
591a840cc5925f52079916feb2c456816a7a91d627Marek Olšák
60c32114460dbb7f33885c181a0d7dee07b15b8751Marek Olšák    @Override
611a840cc5925f52079916feb2c456816a7a91d627Marek Olšák    public BooleanState newTileState() {
621a840cc5925f52079916feb2c456816a7a91d627Marek Olšák        return new BooleanState();
63d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca    }
64e73bf3b805de78299f1a652668ba4e6eab9bac94Marek Olšák
65d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca    @Override
66d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca    public void setListening(boolean listening) {
67d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca        mSetting.setListening(listening);
68d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca    }
69d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca
70d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca    @Override
71d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca    protected void handleUserSwitch(int newUserId) {
72d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca        mSetting.setUserId(newUserId);
73d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca        handleRefreshState(mSetting.getValue());
74d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca    }
75d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca
76d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca    @Override
77d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca    public Intent getLongClickIntent() {
78d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca        return new Intent(Settings.ACTION_ACCESSIBILITY_SETTINGS);
79d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca    }
80d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca
81d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca    @Override
82d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca    protected void handleClick() {
83d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca        mSetting.setValue(mState.value ? 0 : 1);
84d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca    }
85d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca
86d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca    @Override
87d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca    public CharSequence getTileLabel() {
88d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca        return mContext.getString(R.string.quick_settings_inversion_label);
89d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca    }
90d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca
91d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca    @Override
92b56b853ab3937d6144597f490bb38e2532d0cee2Brian Paul    protected void handleUpdateState(BooleanState state, Object arg) {
93d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca        final int value = arg instanceof Integer ? (Integer) arg : mSetting.getValue();
94d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca        final boolean enabled = value != 0;
95d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca        if (state.slash == null) {
96d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca            state.slash = new SlashState();
97d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca        }
98d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca        state.value = enabled;
99d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca        state.slash.isSlashed = !state.value;
100d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca        state.state = state.value ? Tile.STATE_ACTIVE : Tile.STATE_INACTIVE;
101d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca        state.label = mContext.getString(R.string.quick_settings_inversion_label);
102d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca        state.icon = mIcon;
103d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca        state.expandedAccessibilityClassName = Switch.class.getName();
104d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca        state.contentDescription = state.label;
105d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca    }
106d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca
107d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca    @Override
108d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca    public int getMetricsCategory() {
109d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca        return MetricsEvent.QS_COLORINVERSION;
110d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca    }
111d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca
112598cc1f74d7ae924e84dee801b456ab7b0b22f84Marek Olšák    @Override
113d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca    protected String composeChangeAnnouncement() {
114d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca        if (mState.value) {
115d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca            return mContext.getString(
116d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca                    R.string.accessibility_quick_settings_color_inversion_changed_on);
117d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca        } else {
118d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca            return mContext.getString(
119d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca                    R.string.accessibility_quick_settings_color_inversion_changed_off);
120d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca        }
121d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca    }
122d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca}
123d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca