WorkModeTile.java revision 1aec93f1819369bda9e6cb0bd282419808c304c3
11205fb1d92f51b5f36e5ba126c3942381f564821Rubin Xu/*
21205fb1d92f51b5f36e5ba126c3942381f564821Rubin Xu * Copyright (C) 2015 The Android Open Source Project
31205fb1d92f51b5f36e5ba126c3942381f564821Rubin Xu *
41205fb1d92f51b5f36e5ba126c3942381f564821Rubin Xu * Licensed under the Apache License, Version 2.0 (the "License");
51205fb1d92f51b5f36e5ba126c3942381f564821Rubin Xu * you may not use this file except in compliance with the License.
61205fb1d92f51b5f36e5ba126c3942381f564821Rubin Xu * You may obtain a copy of the License at
71205fb1d92f51b5f36e5ba126c3942381f564821Rubin Xu *
81205fb1d92f51b5f36e5ba126c3942381f564821Rubin Xu *      http://www.apache.org/licenses/LICENSE-2.0
91205fb1d92f51b5f36e5ba126c3942381f564821Rubin Xu *
101205fb1d92f51b5f36e5ba126c3942381f564821Rubin Xu * Unless required by applicable law or agreed to in writing, software
111205fb1d92f51b5f36e5ba126c3942381f564821Rubin Xu * distributed under the License is distributed on an "AS IS" BASIS,
121205fb1d92f51b5f36e5ba126c3942381f564821Rubin Xu * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
131205fb1d92f51b5f36e5ba126c3942381f564821Rubin Xu * See the License for the specific language governing permissions and
141205fb1d92f51b5f36e5ba126c3942381f564821Rubin Xu * limitations under the License.
151205fb1d92f51b5f36e5ba126c3942381f564821Rubin Xu */
161205fb1d92f51b5f36e5ba126c3942381f564821Rubin Xu
171205fb1d92f51b5f36e5ba126c3942381f564821Rubin Xupackage com.android.systemui.qs.tiles;
181205fb1d92f51b5f36e5ba126c3942381f564821Rubin Xu
1976c67aa361f65dfb2f5e03d06cc1ccebce9cecd9Jason Monkimport android.content.Intent;
2076c67aa361f65dfb2f5e03d06cc1ccebce9cecd9Jason Monkimport android.provider.Settings;
211205fb1d92f51b5f36e5ba126c3942381f564821Rubin Xuimport com.android.internal.logging.MetricsLogger;
22f6e9228b8a97603d3ceb8f0d61e8d87cf19bd21fChris Wrenimport com.android.internal.logging.MetricsProto.MetricsEvent;
231205fb1d92f51b5f36e5ba126c3942381f564821Rubin Xuimport com.android.systemui.R;
241205fb1d92f51b5f36e5ba126c3942381f564821Rubin Xuimport com.android.systemui.qs.QSTile;
25c3f42c102422f70f5bbe67105e16515ce9c306a3Jason Monkimport com.android.systemui.statusbar.phone.ManagedProfileController;
261205fb1d92f51b5f36e5ba126c3942381f564821Rubin Xu
271205fb1d92f51b5f36e5ba126c3942381f564821Rubin Xu/** Quick settings tile: Work profile on/off */
28c3f42c102422f70f5bbe67105e16515ce9c306a3Jason Monkpublic class WorkModeTile extends QSTile<QSTile.BooleanState> implements
29c3f42c102422f70f5bbe67105e16515ce9c306a3Jason Monk        ManagedProfileController.Callback {
301205fb1d92f51b5f36e5ba126c3942381f564821Rubin Xu    private final AnimationIcon mEnable =
311aec93f1819369bda9e6cb0bd282419808c304c3Jason Monk            new AnimationIcon(R.drawable.ic_signal_workmode_enable_animation,
321aec93f1819369bda9e6cb0bd282419808c304c3Jason Monk                    R.drawable.ic_signal_workmode_disable);
331205fb1d92f51b5f36e5ba126c3942381f564821Rubin Xu    private final AnimationIcon mDisable =
341aec93f1819369bda9e6cb0bd282419808c304c3Jason Monk            new AnimationIcon(R.drawable.ic_signal_workmode_disable_animation,
351aec93f1819369bda9e6cb0bd282419808c304c3Jason Monk                    R.drawable.ic_signal_workmode_enable);
361205fb1d92f51b5f36e5ba126c3942381f564821Rubin Xu
37c3f42c102422f70f5bbe67105e16515ce9c306a3Jason Monk    private final ManagedProfileController mProfileController;
381205fb1d92f51b5f36e5ba126c3942381f564821Rubin Xu
391205fb1d92f51b5f36e5ba126c3942381f564821Rubin Xu    public WorkModeTile(Host host) {
401205fb1d92f51b5f36e5ba126c3942381f564821Rubin Xu        super(host);
41c3f42c102422f70f5bbe67105e16515ce9c306a3Jason Monk        mProfileController = host.getManagedProfileController();
421205fb1d92f51b5f36e5ba126c3942381f564821Rubin Xu    }
431205fb1d92f51b5f36e5ba126c3942381f564821Rubin Xu
441205fb1d92f51b5f36e5ba126c3942381f564821Rubin Xu    @Override
4562b63a02d7ca630e3ad39991ea6550cab57e5d22Jason Monk    public BooleanState newTileState() {
461205fb1d92f51b5f36e5ba126c3942381f564821Rubin Xu        return new BooleanState();
471205fb1d92f51b5f36e5ba126c3942381f564821Rubin Xu    }
481205fb1d92f51b5f36e5ba126c3942381f564821Rubin Xu
491205fb1d92f51b5f36e5ba126c3942381f564821Rubin Xu    @Override
50c3f42c102422f70f5bbe67105e16515ce9c306a3Jason Monk    public void setListening(boolean listening) {
51c3f42c102422f70f5bbe67105e16515ce9c306a3Jason Monk        if (listening) {
52c3f42c102422f70f5bbe67105e16515ce9c306a3Jason Monk            mProfileController.addCallback(this);
53c3f42c102422f70f5bbe67105e16515ce9c306a3Jason Monk        } else {
54c3f42c102422f70f5bbe67105e16515ce9c306a3Jason Monk            mProfileController.removeCallback(this);
55c3f42c102422f70f5bbe67105e16515ce9c306a3Jason Monk        }
561205fb1d92f51b5f36e5ba126c3942381f564821Rubin Xu    }
571205fb1d92f51b5f36e5ba126c3942381f564821Rubin Xu
58c3f42c102422f70f5bbe67105e16515ce9c306a3Jason Monk    @Override
5976c67aa361f65dfb2f5e03d06cc1ccebce9cecd9Jason Monk    public Intent getLongClickIntent() {
6076c67aa361f65dfb2f5e03d06cc1ccebce9cecd9Jason Monk        return new Intent(Settings.ACTION_SYNC_SETTINGS);
6176c67aa361f65dfb2f5e03d06cc1ccebce9cecd9Jason Monk    }
6276c67aa361f65dfb2f5e03d06cc1ccebce9cecd9Jason Monk
6376c67aa361f65dfb2f5e03d06cc1ccebce9cecd9Jason Monk    @Override
64c3f42c102422f70f5bbe67105e16515ce9c306a3Jason Monk    public void handleClick() {
65c3f42c102422f70f5bbe67105e16515ce9c306a3Jason Monk        MetricsLogger.action(mContext, getMetricsCategory(), !mState.value);
66c3f42c102422f70f5bbe67105e16515ce9c306a3Jason Monk        mProfileController.setWorkModeEnabled(!mState.value);
671205fb1d92f51b5f36e5ba126c3942381f564821Rubin Xu    }
681205fb1d92f51b5f36e5ba126c3942381f564821Rubin Xu
69c3f42c102422f70f5bbe67105e16515ce9c306a3Jason Monk    @Override
70c3f42c102422f70f5bbe67105e16515ce9c306a3Jason Monk    public boolean isAvailable() {
71c3f42c102422f70f5bbe67105e16515ce9c306a3Jason Monk        return mProfileController.hasActiveProfile();
721205fb1d92f51b5f36e5ba126c3942381f564821Rubin Xu    }
731205fb1d92f51b5f36e5ba126c3942381f564821Rubin Xu
74c3f42c102422f70f5bbe67105e16515ce9c306a3Jason Monk    @Override
75c3f42c102422f70f5bbe67105e16515ce9c306a3Jason Monk    public void onManagedProfileChanged() {
76c3f42c102422f70f5bbe67105e16515ce9c306a3Jason Monk        refreshState(mProfileController.isWorkModeEnabled());
771205fb1d92f51b5f36e5ba126c3942381f564821Rubin Xu    }
781205fb1d92f51b5f36e5ba126c3942381f564821Rubin Xu
79c3f42c102422f70f5bbe67105e16515ce9c306a3Jason Monk    @Override
80c3f42c102422f70f5bbe67105e16515ce9c306a3Jason Monk    public void onManagedProfileRemoved() {
81c3f42c102422f70f5bbe67105e16515ce9c306a3Jason Monk        mHost.removeTile(getTileSpec());
821205fb1d92f51b5f36e5ba126c3942381f564821Rubin Xu    }
831205fb1d92f51b5f36e5ba126c3942381f564821Rubin Xu
841205fb1d92f51b5f36e5ba126c3942381f564821Rubin Xu    @Override
851205fb1d92f51b5f36e5ba126c3942381f564821Rubin Xu    protected void handleUpdateState(BooleanState state, Object arg) {
8666239fbdfce1586555b339854b8a21f8187e805fJason Monk        if (arg instanceof Boolean) {
8766239fbdfce1586555b339854b8a21f8187e805fJason Monk            state.value = (Boolean) arg;
881205fb1d92f51b5f36e5ba126c3942381f564821Rubin Xu        } else {
89c3f42c102422f70f5bbe67105e16515ce9c306a3Jason Monk            state.value = mProfileController.isWorkModeEnabled();
901205fb1d92f51b5f36e5ba126c3942381f564821Rubin Xu        }
911205fb1d92f51b5f36e5ba126c3942381f564821Rubin Xu
921205fb1d92f51b5f36e5ba126c3942381f564821Rubin Xu        state.label = mContext.getString(R.string.quick_settings_work_mode_label);
931205fb1d92f51b5f36e5ba126c3942381f564821Rubin Xu        if (state.value) {
9466239fbdfce1586555b339854b8a21f8187e805fJason Monk            state.icon = mEnable;
951205fb1d92f51b5f36e5ba126c3942381f564821Rubin Xu            state.contentDescription =  mContext.getString(
961205fb1d92f51b5f36e5ba126c3942381f564821Rubin Xu                    R.string.accessibility_quick_settings_work_mode_on);
971205fb1d92f51b5f36e5ba126c3942381f564821Rubin Xu        } else {
9866239fbdfce1586555b339854b8a21f8187e805fJason Monk            state.icon = mDisable;
991205fb1d92f51b5f36e5ba126c3942381f564821Rubin Xu            state.contentDescription =  mContext.getString(
1001205fb1d92f51b5f36e5ba126c3942381f564821Rubin Xu                    R.string.accessibility_quick_settings_work_mode_off);
1011205fb1d92f51b5f36e5ba126c3942381f564821Rubin Xu        }
1021205fb1d92f51b5f36e5ba126c3942381f564821Rubin Xu    }
1031205fb1d92f51b5f36e5ba126c3942381f564821Rubin Xu
1041205fb1d92f51b5f36e5ba126c3942381f564821Rubin Xu    @Override
1051205fb1d92f51b5f36e5ba126c3942381f564821Rubin Xu    public int getMetricsCategory() {
106f6e9228b8a97603d3ceb8f0d61e8d87cf19bd21fChris Wren        return MetricsEvent.QS_WORKMODE;
1071205fb1d92f51b5f36e5ba126c3942381f564821Rubin Xu    }
1081205fb1d92f51b5f36e5ba126c3942381f564821Rubin Xu
1091205fb1d92f51b5f36e5ba126c3942381f564821Rubin Xu    @Override
1101205fb1d92f51b5f36e5ba126c3942381f564821Rubin Xu    protected String composeChangeAnnouncement() {
1111205fb1d92f51b5f36e5ba126c3942381f564821Rubin Xu        if (mState.value) {
1121205fb1d92f51b5f36e5ba126c3942381f564821Rubin Xu            return mContext.getString(R.string.accessibility_quick_settings_work_mode_changed_on);
1131205fb1d92f51b5f36e5ba126c3942381f564821Rubin Xu        } else {
1141205fb1d92f51b5f36e5ba126c3942381f564821Rubin Xu            return mContext.getString(R.string.accessibility_quick_settings_work_mode_changed_off);
1151205fb1d92f51b5f36e5ba126c3942381f564821Rubin Xu        }
1161205fb1d92f51b5f36e5ba126c3942381f564821Rubin Xu    }
1171205fb1d92f51b5f36e5ba126c3942381f564821Rubin Xu}
118