DataSaverTile.java revision 9a4ce137eb5b73f9d7b097a26ae1c523c5b070e9
19a4ce137eb5b73f9d7b097a26ae1c523c5b070e9Jason Monk/*
29a4ce137eb5b73f9d7b097a26ae1c523c5b070e9Jason Monk * Copyright (C) 2016 The Android Open Source Project
39a4ce137eb5b73f9d7b097a26ae1c523c5b070e9Jason Monk *
49a4ce137eb5b73f9d7b097a26ae1c523c5b070e9Jason Monk * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file
59a4ce137eb5b73f9d7b097a26ae1c523c5b070e9Jason Monk * except in compliance with the License. You may obtain a copy of the License at
69a4ce137eb5b73f9d7b097a26ae1c523c5b070e9Jason Monk *
79a4ce137eb5b73f9d7b097a26ae1c523c5b070e9Jason Monk *      http://www.apache.org/licenses/LICENSE-2.0
89a4ce137eb5b73f9d7b097a26ae1c523c5b070e9Jason Monk *
99a4ce137eb5b73f9d7b097a26ae1c523c5b070e9Jason Monk * Unless required by applicable law or agreed to in writing, software distributed under the
109a4ce137eb5b73f9d7b097a26ae1c523c5b070e9Jason Monk * License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
119a4ce137eb5b73f9d7b097a26ae1c523c5b070e9Jason Monk * KIND, either express or implied. See the License for the specific language governing
129a4ce137eb5b73f9d7b097a26ae1c523c5b070e9Jason Monk * permissions and limitations under the License.
139a4ce137eb5b73f9d7b097a26ae1c523c5b070e9Jason Monk */
149a4ce137eb5b73f9d7b097a26ae1c523c5b070e9Jason Monk
159a4ce137eb5b73f9d7b097a26ae1c523c5b070e9Jason Monkpackage com.android.systemui.qs.tiles;
169a4ce137eb5b73f9d7b097a26ae1c523c5b070e9Jason Monk
179a4ce137eb5b73f9d7b097a26ae1c523c5b070e9Jason Monkimport com.android.internal.logging.MetricsProto.MetricsEvent;
189a4ce137eb5b73f9d7b097a26ae1c523c5b070e9Jason Monkimport com.android.systemui.R;
199a4ce137eb5b73f9d7b097a26ae1c523c5b070e9Jason Monkimport com.android.systemui.qs.QSTile;
209a4ce137eb5b73f9d7b097a26ae1c523c5b070e9Jason Monkimport com.android.systemui.statusbar.policy.DataSaverController;
219a4ce137eb5b73f9d7b097a26ae1c523c5b070e9Jason Monk
229a4ce137eb5b73f9d7b097a26ae1c523c5b070e9Jason Monkpublic class DataSaverTile extends QSTile<QSTile.BooleanState> implements
239a4ce137eb5b73f9d7b097a26ae1c523c5b070e9Jason Monk        DataSaverController.Listener{
249a4ce137eb5b73f9d7b097a26ae1c523c5b070e9Jason Monk
259a4ce137eb5b73f9d7b097a26ae1c523c5b070e9Jason Monk    private final DataSaverController mDataSaverController;
269a4ce137eb5b73f9d7b097a26ae1c523c5b070e9Jason Monk
279a4ce137eb5b73f9d7b097a26ae1c523c5b070e9Jason Monk    public DataSaverTile(Host host) {
289a4ce137eb5b73f9d7b097a26ae1c523c5b070e9Jason Monk        super(host);
299a4ce137eb5b73f9d7b097a26ae1c523c5b070e9Jason Monk        mDataSaverController = host.getNetworkController().getDataSaverController();
309a4ce137eb5b73f9d7b097a26ae1c523c5b070e9Jason Monk    }
319a4ce137eb5b73f9d7b097a26ae1c523c5b070e9Jason Monk
329a4ce137eb5b73f9d7b097a26ae1c523c5b070e9Jason Monk    @Override
339a4ce137eb5b73f9d7b097a26ae1c523c5b070e9Jason Monk    protected BooleanState newTileState() {
349a4ce137eb5b73f9d7b097a26ae1c523c5b070e9Jason Monk        return new BooleanState();
359a4ce137eb5b73f9d7b097a26ae1c523c5b070e9Jason Monk    }
369a4ce137eb5b73f9d7b097a26ae1c523c5b070e9Jason Monk
379a4ce137eb5b73f9d7b097a26ae1c523c5b070e9Jason Monk    @Override
389a4ce137eb5b73f9d7b097a26ae1c523c5b070e9Jason Monk    public void setListening(boolean listening) {
399a4ce137eb5b73f9d7b097a26ae1c523c5b070e9Jason Monk        if (listening) {
409a4ce137eb5b73f9d7b097a26ae1c523c5b070e9Jason Monk            mDataSaverController.addListener(this);
419a4ce137eb5b73f9d7b097a26ae1c523c5b070e9Jason Monk        } else {
429a4ce137eb5b73f9d7b097a26ae1c523c5b070e9Jason Monk            mDataSaverController.remListener(this);
439a4ce137eb5b73f9d7b097a26ae1c523c5b070e9Jason Monk        }
449a4ce137eb5b73f9d7b097a26ae1c523c5b070e9Jason Monk    }
459a4ce137eb5b73f9d7b097a26ae1c523c5b070e9Jason Monk
469a4ce137eb5b73f9d7b097a26ae1c523c5b070e9Jason Monk    @Override
479a4ce137eb5b73f9d7b097a26ae1c523c5b070e9Jason Monk    protected void handleClick() {
489a4ce137eb5b73f9d7b097a26ae1c523c5b070e9Jason Monk        mState.value = !mDataSaverController.isDataSaverEnabled();
499a4ce137eb5b73f9d7b097a26ae1c523c5b070e9Jason Monk        mDataSaverController.setDataSaverEnabled(mState.value);
509a4ce137eb5b73f9d7b097a26ae1c523c5b070e9Jason Monk        refreshState(mState.value);
519a4ce137eb5b73f9d7b097a26ae1c523c5b070e9Jason Monk    }
529a4ce137eb5b73f9d7b097a26ae1c523c5b070e9Jason Monk
539a4ce137eb5b73f9d7b097a26ae1c523c5b070e9Jason Monk    @Override
549a4ce137eb5b73f9d7b097a26ae1c523c5b070e9Jason Monk    protected void handleUpdateState(BooleanState state, Object arg) {
559a4ce137eb5b73f9d7b097a26ae1c523c5b070e9Jason Monk        state.value = arg instanceof Boolean ? (Boolean) arg
569a4ce137eb5b73f9d7b097a26ae1c523c5b070e9Jason Monk                : mDataSaverController.isDataSaverEnabled();
579a4ce137eb5b73f9d7b097a26ae1c523c5b070e9Jason Monk        state.label = mContext.getString(R.string.data_saver);
589a4ce137eb5b73f9d7b097a26ae1c523c5b070e9Jason Monk        state.contentDescription = mContext.getString(state.value ?
599a4ce137eb5b73f9d7b097a26ae1c523c5b070e9Jason Monk                R.string.accessibility_data_saver_on : R.string.accessibility_data_saver_off);
609a4ce137eb5b73f9d7b097a26ae1c523c5b070e9Jason Monk        state.icon = ResourceIcon.get(state.value ? R.drawable.ic_data_saver
619a4ce137eb5b73f9d7b097a26ae1c523c5b070e9Jason Monk                : R.drawable.ic_data_saver_off);
629a4ce137eb5b73f9d7b097a26ae1c523c5b070e9Jason Monk    }
639a4ce137eb5b73f9d7b097a26ae1c523c5b070e9Jason Monk
649a4ce137eb5b73f9d7b097a26ae1c523c5b070e9Jason Monk    @Override
659a4ce137eb5b73f9d7b097a26ae1c523c5b070e9Jason Monk    public int getMetricsCategory() {
669a4ce137eb5b73f9d7b097a26ae1c523c5b070e9Jason Monk        return MetricsEvent.QS_DATA_SAVER;
679a4ce137eb5b73f9d7b097a26ae1c523c5b070e9Jason Monk    }
689a4ce137eb5b73f9d7b097a26ae1c523c5b070e9Jason Monk
699a4ce137eb5b73f9d7b097a26ae1c523c5b070e9Jason Monk    @Override
709a4ce137eb5b73f9d7b097a26ae1c523c5b070e9Jason Monk    public void onDataSaverChanged(boolean isDataSaving) {
719a4ce137eb5b73f9d7b097a26ae1c523c5b070e9Jason Monk        refreshState(isDataSaving);
729a4ce137eb5b73f9d7b097a26ae1c523c5b070e9Jason Monk    }
739a4ce137eb5b73f9d7b097a26ae1c523c5b070e9Jason Monk}