/*
* Copyright (C) 2015-2016 Willi Ye <williye97@gmail.com>
*
* This file is part of Kernel Adiutor.
*
* Kernel Adiutor is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* Kernel Adiutor is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with Kernel Adiutor. If not, see <http://www.gnu.org/licenses/>.
*
*/
package com.grarak.kerneladiutor.fragments.kernel;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.os.BatteryManager;
import com.grarak.kerneladiutor.R;
import com.grarak.kerneladiutor.fragments.ApplyOnBootFragment;
import com.grarak.kerneladiutor.fragments.DescriptionFragment;
import com.grarak.kerneladiutor.fragments.RecyclerViewFragment;
import com.grarak.kerneladiutor.utils.kernel.battery.Battery;
import com.grarak.kerneladiutor.views.recyclerview.CardView;
import com.grarak.kerneladiutor.views.recyclerview.RecyclerViewItem;
import com.grarak.kerneladiutor.views.recyclerview.SeekBarView;
import com.grarak.kerneladiutor.views.recyclerview.StatsView;
import com.grarak.kerneladiutor.views.recyclerview.SwitchView;
import java.util.ArrayList;
import java.util.List;
/**
* Created by willi on 26.06.16.
*/
public class BatteryFragment extends RecyclerViewFragment {
private StatsView mLevel;
private StatsView mVoltage;
private static int sBatteryLevel;
private static int sBatteryVoltage;
@Override
protected void addItems(List<RecyclerViewItem> items) {
levelInit(items);
voltageInit(items);
if (Battery.hasForceFastCharge()) {
forceFastChargeInit(items);
}
if (Battery.hasBlx()) {
blxInit(items);
}
chargeRateInit(items);
}
@Override
protected void postInit() {
super.postInit();
if (itemsSize() > 2) {
addViewPagerFragment(ApplyOnBootFragment.newInstance(this));
}
if (Battery.hasCapacity(getActivity())) {
addViewPagerFragment(DescriptionFragment.newInstance(getString(R.string.capacity),
Battery.getCapacity(getActivity()) + getString(R.string.mah)));
}
}
private void levelInit(List<RecyclerViewItem> items) {
mLevel = new StatsView();
mLevel.setTitle(getString(R.string.level));
items.add(mLevel);
}
private void voltageInit(List<RecyclerViewItem> items) {
mVoltage = new StatsView();
mVoltage.setTitle(getString(R.string.voltage));
items.add(mVoltage);
}
private void forceFastChargeInit(List<RecyclerViewItem> items) {
SwitchView forceFastCharge = new SwitchView();
forceFastCharge.setTitle(getString(R.string.usb_fast_charge));
forceFastCharge.setSummary(getString(R.string.usb_fast_charge_summary));
forceFastCharge.setChecked(Battery.isForceFastChargeEnabled());
forceFastCharge.addOnSwitchListener(new SwitchView.OnSwitchListener() {
@Override
public void onChanged(SwitchView switchView, boolean isChecked) {
Battery.enableForceFastCharge(isChecked, getActivity());
}
});
items.add(forceFastCharge);
}
private void blxInit(List<RecyclerViewItem> items) {
List<String> list = new ArrayList<>();
list.add(getString(R.string.disabled));
for (int i = 0; i <= 100; i++) {
list.add(String.valueOf(i));
}
SeekBarView blx = new SeekBarView();
blx.setTitle(getString(R.string.blx));
blx.setSummary(getString(R.string.blx_summary));
blx.setItems(list);
blx.setProgress(Battery.getBlx());
blx.setOnSeekBarListener(new SeekBarView.OnSeekBarListener() {
@Override
public void onStop(SeekBarView seekBarView, int position, String value) {
Battery.setBlx(position, getActivity());
}
@Override
public void onMove(SeekBarView seekBarView, int position, String value) {
}
});
items.add(blx);
}
private void chargeRateInit(List<RecyclerViewItem> items) {
CardView chargeRateCard = new CardView(getActivity());
chargeRateCard.setTitle(getString(R.string.charge_rate));
if (Battery.hasChargeRateEnable()) {
SwitchView chargeRate = new SwitchView();
chargeRate.setSummary(getString(R.string.charge_rate));
chargeRate.setChecked(Battery.isChargeRateEnabled());
chargeRate.addOnSwitchListener(new SwitchView.OnSwitchListener() {
@Override
public void onChanged(SwitchView switchView, boolean isChecked) {
Battery.enableChargeRate(isChecked, getActivity());
}
});
chargeRateCard.addItem(chargeRate);
}
if (Battery.hasChargingCurrent()) {
SeekBarView chargingCurrent = new SeekBarView();
chargingCurrent.setTitle(getString(R.string.charging_current));
chargingCurrent.setSummary(getString(R.string.charging_current_summary));
chargingCurrent.setUnit(getString(R.string.ma));
chargingCurrent.setMax(1500);
chargingCurrent.setMin(100);
chargingCurrent.setOffset(10);
chargingCurrent.setProgress(Battery.getChargingCurrent() / 10 - 10);
chargingCurrent.setOnSeekBarListener(new SeekBarView.OnSeekBarListener() {
@Override
public void onStop(SeekBarView seekBarView, int position, String value) {
Battery.setChargingCurrent((position + 10) * 100, getActivity());
}
@Override
public void onMove(SeekBarView seekBarView, int position, String value) {
}
});
chargeRateCard.addItem(chargingCurrent);
}
if (chargeRateCard.size() > 0) {
items.add(chargeRateCard);
}
}
private BroadcastReceiver mBatteryReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
sBatteryLevel = intent.getIntExtra(BatteryManager.EXTRA_LEVEL, 0);
sBatteryVoltage = intent.getIntExtra(BatteryManager.EXTRA_VOLTAGE, 0);
}
};
@Override
protected void refresh() {
super.refresh();
if (mLevel != null) {
mLevel.setStat(sBatteryLevel + "%");
}
if (mVoltage != null) {
mVoltage.setStat(sBatteryVoltage + getString(R.string.mv));
}
}
@Override
public void onResume() {
super.onResume();
getActivity().registerReceiver(mBatteryReceiver, new IntentFilter(Intent.ACTION_BATTERY_CHANGED));
}
@Override
public void onPause() {
super.onPause();
try {
getActivity().unregisterReceiver(mBatteryReceiver);
} catch (IllegalArgumentException ignored) {
}
}
}