package com.android.server.battery;
import android.app.AlertDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.graphics.Color;
import android.hardware.display.DisplayManager;
import android.os.BatteryManager;
import android.os.Binder;
import android.os.Handler;
import android.os.Message;
import android.util.Log;
import android.view.Display;
import android.view.Gravity;
import android.view.WindowManager;
import android.widget.LinearLayout;
import android.widget.TextView;
import android.content.Intent;
import android.os.BatteryManager;
import android.app.ActivityManager;
import java.util.Arrays;
import java.util.Timer;
import java.util.TimerTask;
import android.os.Looper;
import android.os.Bundle;
import android.os.SystemProperties;
public class BatteryHandle {
Context mContext;
int mBatteryLevel;
private String TAG = "BatteryHandle";
Looper mainLoop;
public BatteryHandle(Handler handler, Context context, int batteryLevel, int timeout) {
// Looper.prepare();
mContext = context;
mBatteryLevel = batteryLevel;
// this.handler = handler;
mHandler =handler;
handler.post(new Runnable() {
@Override
public void run() {
initBattery(context, mBatteryLevel, timeout);
}
});
// Looper.loop();
}
private void initBattery(Context context, int mBatteryLevel, int timeout) {
BatteryDialog(context, mBatteryLevel, timeout);
}
Handler mHandler = null;
TextView mTvBattereyTime;
private void BatteryDialog(Context context, int mBatteryLevel, int timeout) {
mTvBattereyTime = new TextView(mContext.getApplicationContext());
DisplayManager displayManager = (DisplayManager) mContext.getSystemService(Context.DISPLAY_SERVICE);
Display display = displayManager.getDisplay(0);
int mWidth = display.getWidth() / 3;
Log.i(TAG, "mWidth: " + mWidth);
mTvBattereyTime.setWidth(mWidth);
String mNowTime ="";
if (timeout ==5){
mNowTime = mContext.getResources().getString(com.android.internal.R.string.battery_low_Power_than)
+ mBatteryLevel + mContext.getResources().getString(com.android.internal.R.string.battery_low_please_charging)
+ timeout + mContext.getResources().getString(com.android.internal.R.string.battery_low_dialog_close_auto_seconds);
}else{
mNowTime = mContext.getResources().getString(com.android.internal.R.string.battery_low_Power_than)
+ mBatteryLevel + mContext.getResources().getString(com.android.internal.R.string.battery_low_please_charging)
+ timeout + mContext.getResources().getString(com.android.internal.R.string.battery_low_will_auto_shutdown_seconds);
}
Log.i(TAG, "mNowTime: " + mNowTime);
mTvBattereyTime.setTextColor(Color.BLACK);
mTvBattereyTime.setGravity(Gravity.CENTER);
mTvBattereyTime.setText(mNowTime);
AlertDialog.Builder builder = new AlertDialog.Builder(mContext.getApplicationContext());
builder.setTitle(mContext.getResources().getString(com.android.internal.R.string.battery_low_action_title));
builder.setIcon(com.android.internal.R.drawable.stat_sys_battery_unknown);
builder.setView(mTvBattereyTime);
mBatteryAlertDialog = builder.create();
mBatteryAlertDialog.getWindow().setType(WindowManager.LayoutParams.TYPE_SYSTEM_ALERT);
// alertDialog.setCancelable(false);
// alertDialog.setCanceledOnTouchOutside(false);
mBatteryAlertDialog.show();
mBatteryTimer = new Timer();
batteryTimerTask = new BatteryTimerTask(this, timeout);
mBatteryTimer.schedule(batteryTimerTask, 1000, 1000);
mBatteryAlertDialog.setOnDismissListener(new DialogInterface.OnDismissListener() {
@Override
public void onDismiss(DialogInterface dialog) {
Log.i(TAG, "onDismiss: ");
CustomonDismiss();
}
});
}
Timer mBatteryTimer;
AlertDialog mBatteryAlertDialog;
BatteryTimerTask batteryTimerTask;
class BatteryTimerTask extends TimerTask {
BatteryHandle batteryHandle;
int timeout;
public BatteryTimerTask(BatteryHandle batteryHandle, int timeout) {
this.batteryHandle = batteryHandle;
this.timeout = timeout;
if(timeout == 10){
isTimeoutShut =true;
}else{
isTimeoutShut =false;
}
}
@Override
public void run() {
if (timeout > 0) {
timeout--;
}
// Message obtain = Message.obtain();
// obtain.what = 0;
// obtain.arg1 = timeout;
// handler.sendMessage(obtain);
if (timeout > 0) {
String mNowTime ="";
if(isTimeoutShut){
mNowTime = mContext.getResources().getString(com.android.internal.R.string.battery_low_Power_than)
+ mBatteryLevel + mContext.getResources().getString(com.android.internal.R.string.battery_low_please_charging)
+ timeout + mContext.getResources().getString(com.android.internal.R.string.battery_low_will_auto_shutdown_seconds);
}else{
mNowTime = mContext.getResources().getString(com.android.internal.R.string.battery_low_Power_than)
+ mBatteryLevel + mContext.getResources().getString(com.android.internal.R.string.battery_low_please_charging)
+ timeout + mContext.getResources().getString(com.android.internal.R.string.battery_low_dialog_close_auto_seconds);
}
//mTvBattereyTime.setText(mNowTime);
Message message = new Message();
message.obj = mTvBattereyTime;
Bundle bundle = new Bundle();
bundle.putString("key_battery",mNowTime);
message.setData(bundle);
message.what = 200;
mHandler.sendMessage(message);
} else {
if(isTimeoutShut){
CustomonDismiss();
Log.i(TAG, "onDismiss:REQUEST_SHUTDOWN ");
Intent localIntent = new Intent("com.android.internal.intent.action.REQUEST_SHUTDOWN");
localIntent.putExtra("android.intent.extra.KEY_CONFIRM", false);
localIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
mContext.startActivity(localIntent);
}else{
CustomonDismiss();
}
}
}
}
boolean isTimeoutShut =false;
public void CustomonDismiss() {
if (mBatteryAlertDialog != null) {
mBatteryAlertDialog.dismiss();
mBatteryAlertDialog = null;
}
if (mBatteryTimer != null) {
mBatteryTimer.cancel();
mBatteryTimer = null;
}
if (batteryTimerTask != null) {
batteryTimerTask.cancel();
batteryTimerTask = null;
}
}
}