Добрый день. В общем, суть проблемы в следующем - есть "помодоро" таймер, в нем можно в настройках изменять время. Но проблема в том, что если, например, закончилось время отдыха, то я не могу изменить время работы, оно меняется только на следующий раз. Как сделать так, чтобы время изменялась сразу же? Спасибо)
MainActivity
public class MainActivity extends AppCompatActivity implements View.OnClickListener {
private final String TAG = "PomodoroTimer count";
SharedPreferences sharedPreferences;
private TextView mTimer;
private Button startButton, pauseButton;
int TIME_WORK_SESSION;//время работы(в секундах)
int TIME_REST_SESSION;//время отдыха(в секундах)
int BIG_REST_SESSION;
private int seconds;
private boolean isRunning;
private boolean isWork;
private boolean timeStop, workOrRest;
private boolean textSwitcher = true;
private int bigTomato = 0;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mTimer = (TextView) findViewById(R.id.tv);
startButton = (Button) findViewById(R.id.startButton);
pauseButton = (Button) findViewById(R.id.pauseButton);
startButton.setOnClickListener(this);
pauseButton.setOnClickListener(this);
seconds = TIME_WORK_SESSION;
isWork = true;
sharedPreferences = PreferenceManager.getDefaultSharedPreferences(this);
seconds= Integer.parseInt(String.valueOf(sharedPreferences.getString("work_time", "5")));
//Скрыть Action bar
//getSupportActionBar().hide();
runTimer();
}
@Override
protected void onResume() {
TIME_WORK_SESSION = Integer.parseInt(String.valueOf(sharedPreferences.getString("work_time", "5")));
TIME_REST_SESSION = Integer.parseInt(String.valueOf(sharedPreferences.getString("short_break", "2")));
BIG_REST_SESSION = Integer.parseInt(String.valueOf(sharedPreferences.getString("big_short", "7")));
super.onResume();
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.startButton:
textSwitcher = false;
timeStop = true;
isRunning = true;
break;
case R.id.pauseButton:
isRunning = false;
}
}
//Настройка тайера
private void runTimer() {
final Handler handler = new Handler();
handler.post(new Runnable() {
@Override
public void run() {
int hours = seconds / 3600;
int minutes = (seconds % 3600) / 60;
int secs = seconds % 60;
String time = String.format("%d:%02d:%02d", hours, minutes, secs);
if (textSwitcher) {
if (workOrRest)
mTimer.setText("Rest");
else mTimer.setText("Work");
}
else
mTimer.setText(time);
if (timeStop) {
if (isRunning && isWork && seconds == 0) {
int rest;
isWork = false;
if (bigTomato == 3) { //Уход на большой перерыв
rest = BIG_REST_SESSION;
bigTomato = -1;
} else //Уход на меленький перерыв
rest = TIME_REST_SESSION;
seconds = rest;
textSwitcher = true;
workOrRest = true;
timeStop = false;
} else if (isRunning && !isWork && seconds == 0) {
isWork = true;
seconds = TIME_WORK_SESSION;
timeStop = false;
bigTomato += 1;
Log.d(TAG, "big Tomato count = " + bigTomato);
workOrRest = false;
textSwitcher = true;
} else if (isRunning) {
seconds--;
}
}
handler.postDelayed(this, 1000);//handler.post(this);
}
});
}
//Создание меню настроек
public boolean onCreateOptionsMenu(Menu menu) {
MenuItem menuItem = menu.add(0, 1, 0, "Setting");
menuItem.setIntent(new Intent(this, Prefs.class));
return super.onCreateOptionsMenu(menu);
}
}
Файл настроек
public class Prefs extends PreferenceActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
addPreferencesFromResource(R.xml.settings);
}
}