package com.rattlehead666.performancetweaker.app.ui.adapters;
import com.rattlehead666.performancetweaker.app.R;
import com.rattlehead666.performancetweaker.app.utils.Constants;
import com.rattlehead666.performancetweaker.app.utils.CpuState;
import com.rattlehead666.performancetweaker.app.utils.SysUtils;
import com.rattlehead666.performancetweaker.app.utils.TimeInStateReader;
import android.annotation.SuppressLint;
import android.content.Context;
import android.content.SharedPreferences;
import android.preference.PreferenceManager;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ProgressBar;
import android.widget.TextView;
import java.util.ArrayList;
import java.util.HashMap;
@SuppressLint("UseSparseArrays")
public class TimeInStatesListAdapter extends BaseAdapter {
public long totaltime = 0;
Context context;
ArrayList<CpuState> states = new ArrayList<>();
HashMap<Integer, Long> _states = new HashMap<>();
TimeInStateReader statesReader;
LayoutInflater inflater;
SharedPreferences prefs;
boolean filterNonZeroVals;
public TimeInStatesListAdapter(Context context) {
this.context = context;
prefs = PreferenceManager.getDefaultSharedPreferences(context);
filterNonZeroVals = prefs.getBoolean(Constants.PREF_ZERO_VALS, true);
statesReader = TimeInStateReader.TimeInStatesReader();
states = statesReader.getCpuStateTime(true, filterNonZeroVals);
totaltime = statesReader.getTotalTimeInState();
/*
* remove zero values
*/
inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View rowView = inflater.inflate(R.layout.time_in_stat_list_item, parent, false);
TextView frequencyTextView = (TextView) rowView.findViewById(R.id.frequency);
ProgressBar mProgressBar = (ProgressBar) rowView.findViewById(R.id.progress);
TextView time = (TextView) rowView.findViewById(R.id.time);
TextView percentage = (TextView) rowView.findViewById(R.id.percentage);
if (states.get(position).getFrequency() == 0) {
frequencyTextView.setText(context.getString(R.string.deep_sleep));
} else {
frequencyTextView.setText((states.get(position).getFrequency() / 1000) + " Mhz");
}
time.setText(SysUtils.secToString(states.get(position).getTime() / 100));
mProgressBar.setMax((int) (totaltime));
mProgressBar.setProgress((int) (states.get(position).getTime()));
/*
* calculate percentage of time
*/
long percent = (states.get(position).getTime() * 100) / totaltime;
percentage.setText(percent + "%");
return rowView;
}
@Override
public int getCount() {
if (states != null) {
return states.size();
} else {
return 0;
}
}
@Override
public Object getItem(int position) {
return states.get(position);
}
@Override
public long getItemId(int position) {
return states.indexOf(position);
}
public void refresh() {
states = statesReader.getCpuStateTime(true, filterNonZeroVals);
totaltime = statesReader.getTotalTimeInState();
notifyDataSetChanged();
}
public void saveOffsets() {
String data = "";
ArrayList<CpuState> newStates = statesReader.getCpuStateTime(true, filterNonZeroVals);
for (CpuState state : newStates) {
data += state.getFrequency() + " " + state.getTime() + ",";
}
SharedPreferences.Editor editor = prefs.edit();
editor.putString(Constants.PREF_TIS_RESET_STATS, data);
editor.apply();
}
public void reset() {
removeOffsets();
saveOffsets();
loadPreviousStats();
states = statesReader.getCpuStateTime(true, filterNonZeroVals);
totaltime = statesReader.getTotalTimeInState();
refresh();
}
public void loadPreviousStats() {
String data = prefs.getString(Constants.PREF_TIS_RESET_STATS, null);
if (data.length() > 0) {
String[] line = data.split(",");
for (String str : line) {
String[] val = str.split(" ");
_states.put(Integer.parseInt(val[0]), Long.parseLong(val[1]));
}
}
statesReader.newStates = _states;
}
public void removeOffsets() {
if (prefs.getString(Constants.PREF_TIS_RESET_STATS, null) != null) {
SharedPreferences.Editor editor = prefs.edit();
editor.putString(Constants.PREF_TIS_RESET_STATS, null);
editor.apply();
}
statesReader.clearNewStates();
}
}