Skip to content

Commit cf0606c

Browse files
webgeek1234Stricted
authored andcommitted
[1/2] Add battery info to tvsettings device info
Change-Id: I98abe338d77b56f2a851e0f093a44d6911b9009b (cherry picked from commit 5cd43b3) (cherry picked from commit cceffef)
1 parent 6cdc54b commit cf0606c

1 file changed

Lines changed: 157 additions & 0 deletions

File tree

Lines changed: 157 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,157 @@
1+
/*
2+
* Copyright (C) 2019 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+
17+
package com.android.settingslib.deviceinfo;
18+
19+
import androidx.annotation.VisibleForTesting;
20+
import androidx.preference.Preference;
21+
import androidx.preference.PreferenceScreen;
22+
23+
import android.content.Context;
24+
import android.content.Intent;
25+
import android.content.IntentFilter;
26+
import android.os.BatteryManager;
27+
import android.os.Handler;
28+
import android.os.Message;
29+
import android.os.SystemClock;
30+
import android.text.format.DateUtils;
31+
32+
import com.android.settingslib.core.AbstractPreferenceController;
33+
import com.android.settingslib.core.lifecycle.Lifecycle;
34+
import com.android.settingslib.core.lifecycle.LifecycleObserver;
35+
import com.android.settingslib.core.lifecycle.events.OnStart;
36+
import com.android.settingslib.core.lifecycle.events.OnStop;
37+
import com.android.settingslib.R;
38+
39+
import java.lang.ref.WeakReference;
40+
41+
/**
42+
* Preference controller for battery status
43+
*/
44+
public abstract class AbstractBatteryStatusPreferenceController extends AbstractPreferenceController
45+
implements LifecycleObserver, OnStart, OnStop {
46+
47+
@VisibleForTesting
48+
static final String KEY_BATTERY_STATUS = "battery_status";
49+
private static final int EVENT_UPDATE_BATTERY = 700;
50+
51+
private Preference mBatteryStatus;
52+
private Handler mHandler;
53+
private Context mContext;
54+
55+
public AbstractBatteryStatusPreferenceController(Context context, Lifecycle lifecycle) {
56+
super(context);
57+
mContext = context;
58+
if (lifecycle != null) {
59+
lifecycle.addObserver(this);
60+
}
61+
}
62+
63+
@Override
64+
public void onStart() {
65+
getHandler().sendEmptyMessage(EVENT_UPDATE_BATTERY);
66+
}
67+
68+
@Override
69+
public void onStop() {
70+
getHandler().removeMessages(EVENT_UPDATE_BATTERY);
71+
}
72+
73+
@Override
74+
public boolean isAvailable() {
75+
Intent intent = mContext.registerReceiver(null,
76+
new IntentFilter(Intent.ACTION_BATTERY_CHANGED));
77+
78+
return intent.getBooleanExtra(BatteryManager.EXTRA_PRESENT, false);
79+
}
80+
81+
@Override
82+
public String getPreferenceKey() {
83+
return KEY_BATTERY_STATUS;
84+
}
85+
86+
@Override
87+
public void displayPreference(PreferenceScreen screen) {
88+
super.displayPreference(screen);
89+
mBatteryStatus = screen.findPreference(KEY_BATTERY_STATUS);
90+
updateBattery();
91+
}
92+
93+
private Handler getHandler() {
94+
if (mHandler == null) {
95+
mHandler = new MyHandler(this);
96+
}
97+
return mHandler;
98+
}
99+
100+
private void updateBattery() {
101+
Intent intent = mContext.registerReceiver(null,
102+
new IntentFilter(Intent.ACTION_BATTERY_CHANGED));
103+
104+
if (mBatteryStatus != null) {
105+
String batterystatus = mContext.getString(R.string.battery_info_status_unknown);
106+
String batterylevel = Integer.toString(Math.round(100.f
107+
* intent.getIntExtra(BatteryManager.EXTRA_LEVEL, 100)
108+
/ intent.getIntExtra(BatteryManager.EXTRA_SCALE, 100))) + "%";
109+
110+
switch (intent.getIntExtra(BatteryManager.EXTRA_STATUS, -1)) {
111+
case BatteryManager.BATTERY_STATUS_CHARGING:
112+
batterystatus = mContext.getString(R.string.battery_info_status_charging);
113+
break;
114+
case BatteryManager.BATTERY_STATUS_DISCHARGING:
115+
batterystatus = mContext.getString(R.string.battery_info_status_discharging);
116+
break;
117+
case BatteryManager.BATTERY_STATUS_FULL:
118+
batterystatus = mContext.getString(R.string.battery_info_status_full);
119+
break;
120+
case BatteryManager.BATTERY_STATUS_NOT_CHARGING:
121+
batterystatus = mContext.getString(R.string.battery_info_status_not_charging);
122+
break;
123+
case BatteryManager.BATTERY_STATUS_UNKNOWN:
124+
default:
125+
break;
126+
}
127+
128+
mBatteryStatus.setSummary(batterylevel + " - " + batterystatus);
129+
}
130+
}
131+
132+
private static class MyHandler extends Handler {
133+
private WeakReference<AbstractBatteryStatusPreferenceController> mStatus;
134+
135+
public MyHandler(AbstractBatteryStatusPreferenceController activity) {
136+
mStatus = new WeakReference<>(activity);
137+
}
138+
139+
@Override
140+
public void handleMessage(Message msg) {
141+
AbstractBatteryStatusPreferenceController status = mStatus.get();
142+
if (status == null) {
143+
return;
144+
}
145+
146+
switch (msg.what) {
147+
case EVENT_UPDATE_BATTERY:
148+
status.updateBattery();
149+
sendEmptyMessageDelayed(EVENT_UPDATE_BATTERY, 1000);
150+
break;
151+
152+
default:
153+
throw new IllegalStateException("Unknown message " + msg.what);
154+
}
155+
}
156+
}
157+
}

0 commit comments

Comments
 (0)