summaryrefslogtreecommitdiffstats
path: root/packages/SystemUI/src/com/android/systemui/statusbar/policy/DockBatteryController.java
blob: cde5e2c389931991e62ecc9d1db3c70e0875f33b (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
/*
 * Copyright (C) 2010 The Android Open Source Project
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package com.android.systemui.statusbar.policy;

import android.content.Context;
import android.content.Intent;
import android.os.BatteryManager;

import com.android.systemui.R;

import java.util.ArrayList;

public class DockBatteryController extends BatteryController {
    private static final String TAG = "StatusBar.DockBatteryController";

    private int mDockBatteryStatus = BatteryManager.BATTERY_STATUS_UNKNOWN;
    private int mBatteryLevel = 0;
    private boolean mBatteryPlugged = false;
    private boolean mBatteryPresent = false;

    public DockBatteryController(Context context) {
        this(context, true);
    }

    public DockBatteryController(Context context, boolean ui) {
        super(context, ui);
    }

    @Override
    public void onReceive(Context context, Intent intent) {
        final String action = intent.getAction();
        if (action.equals(Intent.ACTION_BATTERY_CHANGED)) {
            mBatteryLevel = intent.getIntExtra(BatteryManager.EXTRA_DOCK_LEVEL, 0);
            mDockBatteryStatus = intent.getIntExtra(
                                        BatteryManager.EXTRA_DOCK_STATUS,
                                        BatteryManager.BATTERY_STATUS_UNKNOWN);
            mBatteryPlugged = intent.getIntExtra(BatteryManager.EXTRA_DOCK_PLUGGED, 0) != 0;
            mBatteryPresent = intent.getBooleanExtra(BatteryManager.EXTRA_DOCK_PRESENT, false);
            updateViews();
            updateBattery();
        }
    }

    @Override
    protected void updateViews() {
        if (isUiController()) {
            super.updateViews();
        }

        for (DockBatteryStateChangeCallback cb : mChangeCallbacks) {
            cb.onDockBatteryLevelChanged(getBatteryLevel(), isBatteryPresent(), isBatteryStatusCharging());
        }
    }

    private ArrayList<DockBatteryStateChangeCallback> mChangeCallbacks =
            new ArrayList<DockBatteryStateChangeCallback>();

    public interface DockBatteryStateChangeCallback {
        public void onDockBatteryLevelChanged(int level, boolean present, boolean pluggedIn);
    }

    public void addStateChangedCallback(DockBatteryStateChangeCallback cb) {
        mChangeCallbacks.add(cb);
        // trigger initial update
        cb.onDockBatteryLevelChanged(getBatteryLevel(), isBatteryPresent(), isBatteryStatusCharging());
    }

    public void removeStateChangedCallback(DockBatteryStateChangeCallback cb) {
        mChangeCallbacks.remove(cb);
    }

    @Override
    public int getIconStyleUnknown() {
        return R.drawable.stat_sys_kb_battery_unknown;
    }
    @Override
    public int getIconStyleNormal() {
        return R.drawable.stat_sys_kb_battery;
    }
    @Override
    public int getIconStyleCharge() {
        return R.drawable.stat_sys_kb_battery_charge;
    }
    @Override
    public int getIconStyleNormalMin() {
        return R.drawable.stat_sys_kb_battery_min;
    }
    @Override
    public int getIconStyleChargeMin() {
        return R.drawable.stat_sys_kb_battery_charge_min;
    }

    @Override
    protected int getBatteryLevel() {
        return mBatteryLevel;
    }

    @Override
    protected int getBatteryStatus() {
        return mDockBatteryStatus;
    }

    @Override
    protected boolean isBatteryPlugged() {
        return mBatteryPlugged;
    }

    @Override
    protected boolean isBatteryPresent() {
        return mBatteryPresent;
    }

}