package lu.fisch.canze.activities; import android.content.SharedPreferences; import android.os.Bundle; import android.widget.SeekBar; import android.widget.TextView; import java.util.Locale; import lu.fisch.canze.R; import lu.fisch.canze.actors.Field; public class RangeActivity extends CanzeActivity { public static final String SID_AvailableDistance = "654.42"; public static final String SID_AvailableEnvergy = "427.49"; public static final String SID_AverageConsumption = "654.52"; public static final String SID_WorstAverageConsumption = "62d.0"; public static final String SID_BestAverageConsumption = "62d.10"; public double distance = 0; public double range = 0; public double rangeWorst = 0; public double rangeBest = 0; public double energy = 0; public double consumption = 1; public double consumptionWorst = 1; public double consumptionBest = 1; public double loss = 0.1; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_range); SharedPreferences settings = getSharedPreferences(MainActivity.PREFERENCES_FILE, 0); int lossSetting = settings.getInt("loss", 10); MainActivity.debug("LOSS (load): "+loss); SeekBar seekBar = (SeekBar) findViewById(R.id.seekBar); seekBar.setProgress(lossSetting); //((TextView) findViewById(R.id.lossView)).setText(seekBar.getProgress()+"%"); ((TextView) findViewById(R.id.lossView)).setText(String.format(Locale.getDefault(), "%d%%", seekBar.getProgress())); seekBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() { @Override public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) { loss = seekBar.getProgress()/100.; //((TextView) findViewById(R.id.lossView)).setText(seekBar.getProgress()+"%"); ((TextView) findViewById(R.id.lossView)).setText(String.format(Locale.getDefault(), "%d%%", seekBar.getProgress())); updateRange(); // save value SharedPreferences settings = getSharedPreferences(MainActivity.PREFERENCES_FILE, 0); SharedPreferences.Editor editor = settings.edit(); editor.putInt("loss",(int) (loss*100)); editor.apply(); MainActivity.debug("LOSS (save): "+loss); } @Override public void onStartTrackingTouch(SeekBar seekBar) { loss = seekBar.getProgress()/100.; //((TextView) findViewById(R.id.lossView)).setText(seekBar.getProgress()+"%"); ((TextView) findViewById(R.id.lossView)).setText(String.format(Locale.getDefault(), "%d%%", seekBar.getProgress())); updateRange(); } @Override public void onStopTrackingTouch(SeekBar seekBar) { loss = seekBar.getProgress()/100.; //((TextView) findViewById(R.id.lossView)).setText(seekBar.getProgress()+"%"); ((TextView) findViewById(R.id.lossView)).setText(String.format(Locale.getDefault(), "%d%%", seekBar.getProgress())); updateRange(); } }); } protected void initListeners () { addField(SID_AvailableDistance, 0); addField(SID_AvailableEnvergy, 0); addField(SID_AverageConsumption, 0); addField(SID_WorstAverageConsumption, 0); addField(SID_BestAverageConsumption, 0); } private void updateRange() { ((TextView) findViewById(R.id.canzeRange)).setText( (Math.floor(rangeWorst*100))/100. +" > "+ (Math.floor(range*100*(1-loss)))/100.+" > "+ (Math.floor(rangeBest*100))/100. ); } public void onFieldUpdateEvent(final Field field) { // the update has to be done in a separate thread // otherwise the UI will not be repainted runOnUiThread(new Runnable() { @Override public void run() { String fieldId = field.getSID(); // ProgressBar pb; // TextView tv; switch (fieldId) { case SID_AvailableDistance: distance = field.getValue(); //((TextView) findViewById(R.id.carRange)).setText(((distance*100)/1)/100.+""); ((TextView) findViewById(R.id.carRange)).setText(String.format(Locale.getDefault(), "%.1f", ((distance*100)/1)/100.)); break; case SID_AvailableEnvergy: energy = field.getValue(); range = energy/consumption*100; rangeWorst = energy/consumptionWorst*100; rangeBest = energy/consumptionBest*100; updateRange(); break; case SID_AverageConsumption: consumption = field.getValue(); range = energy/consumption*100; updateRange(); break; case SID_WorstAverageConsumption: consumptionWorst = field.getValue(); rangeWorst = energy/consumptionWorst*100; updateRange(); break; case SID_BestAverageConsumption: consumptionBest = field.getValue(); rangeBest = energy/consumptionBest*100; updateRange(); break; } } }); } }