package com.tencent.one.battery.demo.activity.powerrank; import java.util.ArrayList; import android.app.Activity; import android.content.Context; import android.content.Intent; import android.net.Uri; import android.os.Bundle; import android.os.Handler; import android.os.Message; import android.provider.Settings; import android.view.View; import android.view.View.OnClickListener; import android.widget.ImageView; import android.widget.ListView; import android.widget.TextView; import com.tencent.one.battery.core.powerrank.PowerRankFacade; import com.tencent.one.battery.core.powerrank.manager.AppInfoManager; import com.tencent.one.battery.core.powerrank.manager.BatteryCalManager; import com.tencent.one.battery.core.powerrank.manager.AppInfoManager.IAppInfoListener; import com.tencent.one.battery.core.powerrank.model.PowerRankInitModel; import com.tencent.one.battery.core.powerrank.vo.BatterySipper; import com.tencent.one.battery.core.util.MiuiSpecialUtil; import com.tencent.one.battery.demo.MainApp; import com.tencent.one.battery.demo.R; public class PowerConsumeChartActivity extends Activity { private PowerRankFacade mPowerRankFacade = null; private ListView costList; ArrayList<BatterySipper> sippers; private BatteryCostAdapter adapter = null; private AppInfoManager appInfoManager = null; private IAppInfosListener appInfoListener = null; private final int MESSAGE_GET_RUNNING_PROGRESS = 100; private CustomLoadingDialog spinner = null; private TextView softWarecostTitle; private TextView costHardWareTitle; private ImageView softWarecostUpdate; private ImageView hardWarecostUpdate; private boolean isSoftWare = true; private boolean isFirstIn = true; PowerRankInitModel powerRankInitModel = new PowerRankInitModel(); public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.layout_battery_cost); mPowerRankFacade = new BatteryCalManager(); initStringAndImg(); costList = (ListView) findViewById(R.id.battery_cost_list); appInfoManager = AppInfoManager.getInstance(MainApp.getContext(), this.getString(R.string.power_android_system) , this.getString(R.string.power_android_meida)); softWarecostUpdate = (ImageView) findViewById(R.id.update_btn); softWarecostUpdate.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { if (!spinner.isLoading()) { clearList(); initHistoryData(); // initSoftWareData(); } } }); hardWarecostUpdate = (ImageView) findViewById(R.id.hardware_update_btn); hardWarecostUpdate.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { if (!spinner.isLoading()) { clearList(); initSoftWareData(); // initHareWareData(); } } }); // 点击title切换 softWarecostTitle = (TextView) findViewById(R.id.cost_title); softWarecostTitle.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { if (!isSoftWare) { softWarecostTitle .setBackgroundResource(R.drawable.mode_tab_icon1_pressed); costHardWareTitle .setBackgroundResource(R.drawable.mode_tab_icon2_normal); softWarecostTitle.setPadding(15, 0, 15, 0); costHardWareTitle.setPadding(15, 0, 15, 0); softWarecostTitle.setTextColor(0xff6be100); costHardWareTitle.setTextColor(0xffffffff); softWarecostUpdate.setVisibility(View.VISIBLE); hardWarecostUpdate.setVisibility(View.GONE); clearList(); // initSoftWareData(); initHistoryData(); isSoftWare = true; } } }); // 点击title切换 costHardWareTitle = (TextView) findViewById(R.id.cost_hardware_title); costHardWareTitle.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { if (isSoftWare) { softWarecostTitle .setBackgroundResource(R.drawable.mode_tab_icon1_normal); costHardWareTitle .setBackgroundResource(R.drawable.mode_tab_icon2_pressed); softWarecostTitle.setPadding(15, 0, 15, 0); costHardWareTitle.setPadding(15, 0, 15, 0); softWarecostTitle.setTextColor(0xffffffff); costHardWareTitle.setTextColor(0xff6be100); softWarecostUpdate.setVisibility(View.GONE); hardWarecostUpdate.setVisibility(View.VISIBLE); clearList(); // initHareWareData(); initSoftWareData(); isSoftWare = false; } } }); } private void initStringAndImg() { // 硬件蓝牙 powerRankInitModel.hardware_bluetooth = R.drawable.hardware_bluetooth; powerRankInitModel.power_rank_phone_bluetooth = this .getString(R.string.power_rank_phone_bluetooth); // 硬件屏幕 powerRankInitModel.hardware_screen = R.drawable.hardware_screen; powerRankInitModel.power_rank_display = this .getString(R.string.power_rank_display); // 硬件待机 powerRankInitModel.hardware_idle = R.drawable.hardware_idle; powerRankInitModel.power_rank_phone_idle = this .getString(R.string.power_rank_phone_idle); // 无线信号 powerRankInitModel.hardware_cell = R.drawable.hardware_cell; powerRankInitModel.power_rank_phone_radio = this .getString(R.string.power_rank_phone_radio); // 硬件WIFI powerRankInitModel.hardware_wifi = R.drawable.hardware_wifi; powerRankInitModel.power_rank_wifi = this .getString(R.string.power_rank_wifi); // 硬件电话 powerRankInitModel.hardware_cell_phone = R.drawable.hardware_cell_phone; powerRankInitModel.power_rank_voice_call = this .getString(R.string.power_rank_voice_call); mPowerRankFacade.initPowerRank(powerRankInitModel,MainApp.getContext()); } @Override protected void onResume() { super.onResume(); if (appInfoListener == null) { appInfoListener = new IAppInfosListener(); } appInfoManager.registIAppInfoListener(appInfoListener); // 初始化数据 if (isFirstIn) { if (isSoftWare) { // initSoftWareData(); initHistoryData(); } else { // initHareWareData(); initSoftWareData(); } } } @Override protected void onPause() { // TODO Auto-generated method stub super.onPause(); appInfoManager.unregistIAppInfoListener(); hideSpinner(); } private void hideSpinner() { if (spinner != null) { spinner.dismiss(); } softWarecostTitle.setClickable(true); costHardWareTitle.setClickable(true); } private void showSpinner(String tips) { if (spinner == null) { spinner = new CustomLoadingDialog(PowerConsumeChartActivity.this); } softWarecostTitle.setClickable(false); costHardWareTitle.setClickable(false); spinner.setMessage(tips); spinner.show(); } private Handler handler = new Handler() { @Override public void handleMessage(Message msg) { super.handleMessage(msg); switch (msg.what) { case MESSAGE_GET_RUNNING_PROGRESS: if (sippers != null) { adapter = new BCListAdapter(PowerConsumeChartActivity.this, sippers); costList = (ListView) findViewById(R.id.battery_cost_list); costList.setDivider(null); costList.setAdapter(adapter); } else { costList = (ListView) findViewById(R.id.battery_cost_list); } hideSpinner(); break; default: break; } } }; /* * 初始化当前列表 */ private void initSoftWareData() { showSpinner("Loading"); // 对小米手机进行特殊处理 if (MiuiSpecialUtil.isMiui() && !MiuiSpecialUtil.monitorHistoryIsClosed(this .getContentResolver())) { MiuiSpecialUtil.setMonitorHistory(this.getContentResolver(), 1); } sippers = (ArrayList<BatterySipper>) mPowerRankFacade.loadPowerRank(); for (int i = 0; i < sippers.size(); i++) { if (sippers.get(i).percent < 0.1) { sippers.get(i).percent = 0.1; } } new Thread(new Runnable() { @Override public void run() { appInfoManager.getAppNameIcon(sippers); } }, "batterySoftCostApp").start(); } /* * 初始化当前列表 */ private void initHistoryData() { showSpinner("Loading"); sippers = (ArrayList<BatterySipper>) mPowerRankFacade .loadHardWarePowerRank(); if (sippers != null && sippers.size() > 0) { for (int i = 0; i < sippers.size(); i++) { if (sippers.get(i).percent < 0.1) { sippers.get(i).percent = 0.1; } } } else { sippers = new ArrayList<BatterySipper>(); } new Thread(new Runnable() { @Override public void run() { appInfoManager.getAppNameIcon(sippers); } }, "batteryHareCostApp").start(); } /* * 清空当前列表 */ private void clearList() { if (sippers != null && sippers.size() > 0) { sippers.clear(); sippers = null; } if (adapter != null && !adapter.isEmpty()) { adapter.clear(); adapter = null; } } private class BCListAdapter extends BatteryCostAdapter { public BCListAdapter(Context context, ArrayList<BatterySipper> batterySippers) { super(context, batterySippers); } @Override public void itemClick(View v) { BatteryCostHolder holder = (BatteryCostHolder) v.getTag(); Intent intent = new Intent(); isFirstIn = false; if (holder.uid > -1 && holder.packageName != null && !"".equals(holder.packageName)) { intent = gotoAppControd(holder.packageName); } else if (holder.uid == -1) { if (MainApp.getContext().getString(R.string.power_rank_wifi) .equals(holder.name)) { intent = new Intent(Settings.ACTION_WIFI_SETTINGS); } else if (MainApp.getContext().getString( R.string.power_rank_display).equals(holder.name)) { intent = new Intent(Settings.ACTION_DISPLAY_SETTINGS); } else if (MainApp.getContext().getString( R.string.power_rank_phone_bluetooth) .equals(holder.name)) { intent = new Intent(Settings.ACTION_BLUETOOTH_SETTINGS); } else if (MainApp.getContext().getString( R.string.power_rank_voice_call).equals(holder.name)) { intent = new Intent(Settings.ACTION_SOUND_SETTINGS); } else { intent = new Intent(Settings.ACTION_SETTINGS); } } else { intent = new Intent(Settings.ACTION_APPLICATION_SETTINGS); } startActivity(intent); } } /** * 跳转到当前App管理页面 * * @param packageName * @return */ private Intent gotoAppControd(String packageName) { Intent intent = new Intent(); int sdkVerson = 0; try { sdkVerson = android.os.Build.VERSION.SDK_INT; } catch (Exception exception) { } if (sdkVerson >= 9) { intent.setAction("android.settings.APPLICATION_DETAILS_SETTINGS"); Uri uri = Uri.fromParts("package", packageName, null); intent.setData(uri); } else { String pkg; if (sdkVerson > 7) { pkg = "pkg"; } else { pkg = "com.android.settings.ApplicationPkgName"; // "android.intent.action.VIEW" intent.setAction(Intent.ACTION_VIEW); intent.setClassName("com.android.settings", "com.android.settings.InstalledAppDetails"); intent.putExtra(pkg, packageName); } } return intent; } class IAppInfosListener implements IAppInfoListener { public void notifyProcess(ArrayList<BatterySipper> batList) { // TODO Auto-generated method stub sippers = (ArrayList<BatterySipper>) batList; if (sippers != null) { Message msg = new Message(); msg.what = MESSAGE_GET_RUNNING_PROGRESS; handler.sendMessage(msg); } else { } } } @Override protected void onDestroy() { super.onDestroy(); } }