summaryrefslogtreecommitdiff
path: root/app/src/main/java/de/danoeh/antennapod/dialog/SleepTimerDialog.java
diff options
context:
space:
mode:
authorByteHamster <info@bytehamster.com>2020-01-31 17:33:49 +0100
committerByteHamster <info@bytehamster.com>2020-02-01 10:50:44 +0100
commit17444d9a3c275c4f2f865c8e6ec8b886f1e37e7f (patch)
tree6785c252ce922eb49ac51c3910fa22a3adb2adc0 /app/src/main/java/de/danoeh/antennapod/dialog/SleepTimerDialog.java
parent8ed2102c85571efd2562a50c4cfedc0b2eb09459 (diff)
downloadAntennaPod-17444d9a3c275c4f2f865c8e6ec8b886f1e37e7f.zip
Updated sleep timer UI
Diffstat (limited to 'app/src/main/java/de/danoeh/antennapod/dialog/SleepTimerDialog.java')
-rw-r--r--app/src/main/java/de/danoeh/antennapod/dialog/SleepTimerDialog.java139
1 files changed, 99 insertions, 40 deletions
diff --git a/app/src/main/java/de/danoeh/antennapod/dialog/SleepTimerDialog.java b/app/src/main/java/de/danoeh/antennapod/dialog/SleepTimerDialog.java
index 8d176c708..d36f97c7a 100644
--- a/app/src/main/java/de/danoeh/antennapod/dialog/SleepTimerDialog.java
+++ b/app/src/main/java/de/danoeh/antennapod/dialog/SleepTimerDialog.java
@@ -1,67 +1,101 @@
package de.danoeh.antennapod.dialog;
+import android.app.Dialog;
import android.content.Context;
+import android.os.Bundle;
import android.text.Editable;
import android.text.TextWatcher;
import android.view.View;
import android.view.inputmethod.InputMethodManager;
import android.widget.ArrayAdapter;
+import android.widget.Button;
import android.widget.CheckBox;
import android.widget.EditText;
+import android.widget.LinearLayout;
import android.widget.Spinner;
+import android.widget.TextView;
import android.widget.Toast;
-
+import androidx.annotation.NonNull;
import androidx.appcompat.app.AlertDialog;
+import androidx.fragment.app.DialogFragment;
import de.danoeh.antennapod.R;
-import de.danoeh.antennapod.core.event.MessageEvent;
import de.danoeh.antennapod.core.preferences.SleepTimerPreferences;
-import org.greenrobot.eventbus.EventBus;
+import de.danoeh.antennapod.core.service.playback.PlaybackService;
+import de.danoeh.antennapod.core.util.Converter;
+import de.danoeh.antennapod.core.util.playback.PlaybackController;
+import io.reactivex.Observable;
+import io.reactivex.android.schedulers.AndroidSchedulers;
+import io.reactivex.disposables.Disposable;
-public abstract class SleepTimerDialog {
-
- private static final String TAG = SleepTimerDialog.class.getSimpleName();
+import java.util.concurrent.TimeUnit;
- private final Context context;
+public class SleepTimerDialog extends DialogFragment {
+ private PlaybackController controller;
+ private Disposable timeUpdater;
- private AlertDialog dialog;
private EditText etxtTime;
private Spinner spTimeUnit;
private CheckBox cbShakeToReset;
private CheckBox cbVibrate;
private CheckBox chAutoEnable;
+ private LinearLayout timeSetup;
+ private LinearLayout timeDisplay;
+ private TextView time;
+ public SleepTimerDialog() {
- protected SleepTimerDialog(Context context) {
- this.context = context;
}
- public AlertDialog createNewDialog() {
- View content = View.inflate(context, R.layout.time_dialog, null);
- AlertDialog.Builder builder = new AlertDialog.Builder(context);
- builder.setTitle(R.string.set_sleeptimer_label);
- builder.setView(content);
- builder.setNegativeButton(R.string.cancel_label, (dialog, which) -> dialog.dismiss());
- builder.setPositiveButton(R.string.set_sleeptimer_label, (dialog, which) -> {
- try {
- savePreferences();
- long input = SleepTimerPreferences.timerMillis();
- onTimerSet(input, cbShakeToReset.isChecked(), cbVibrate.isChecked());
- dialog.dismiss();
- } catch (NumberFormatException e) {
- e.printStackTrace();
- Toast toast = Toast.makeText(context, R.string.time_dialog_invalid_input,
- Toast.LENGTH_LONG);
- toast.show();
+ @Override
+ public void onStart() {
+ super.onStart();
+ controller = new PlaybackController(getActivity(), false) {
+ @Override
+ public void setupGUI() {
+ updateTime();
}
- });
- dialog = builder.create();
+
+ @Override
+ public void onSleepTimerUpdate() {
+ updateTime();
+ }
+ };
+ controller.init();
+ timeUpdater = Observable.interval(1, TimeUnit.SECONDS)
+ .observeOn(AndroidSchedulers.mainThread())
+ .subscribe(tick -> updateTime());
+ }
+
+ @Override
+ public void onStop() {
+ super.onStop();
+ if (controller != null) {
+ controller.release();
+ }
+ if (timeUpdater != null) {
+ timeUpdater.dispose();
+ }
+ }
+
+ @NonNull
+ @Override
+ public Dialog onCreateDialog(Bundle savedInstanceState) {
+ View content = View.inflate(getContext(), R.layout.time_dialog, null);
+ AlertDialog.Builder builder = new AlertDialog.Builder(getContext());
+ builder.setTitle(R.string.sleep_timer_label);
+ builder.setView(content);
+ builder.setPositiveButton(android.R.string.ok, null);
etxtTime = content.findViewById(R.id.etxtTime);
spTimeUnit = content.findViewById(R.id.spTimeUnit);
cbShakeToReset = content.findViewById(R.id.cbShakeToReset);
cbVibrate = content.findViewById(R.id.cbVibrate);
chAutoEnable = content.findViewById(R.id.chAutoEnable);
+ timeSetup = content.findViewById(R.id.timeSetup);
+ timeDisplay = content.findViewById(R.id.timeDisplay);
+ time = content.findViewById(R.id.time);
+ AlertDialog dialog = builder.create();
etxtTime.setText(SleepTimerPreferences.lastTimerValue());
etxtTime.addTextChangedListener(new TextWatcher() {
@Override
@@ -78,15 +112,15 @@ public abstract class SleepTimerDialog {
}
});
etxtTime.postDelayed(() -> {
- InputMethodManager imm = (InputMethodManager) context.getSystemService(Context.INPUT_METHOD_SERVICE);
+ InputMethodManager imm = (InputMethodManager) getContext().getSystemService(Context.INPUT_METHOD_SERVICE);
imm.showSoftInput(etxtTime, InputMethodManager.SHOW_IMPLICIT);
}, 100);
String[] spinnerContent = new String[] {
- context.getString(R.string.time_seconds),
- context.getString(R.string.time_minutes),
- context.getString(R.string.time_hours) };
- ArrayAdapter<String> spinnerAdapter = new ArrayAdapter<>(context,
+ getString(R.string.time_seconds),
+ getString(R.string.time_minutes),
+ getString(R.string.time_hours) };
+ ArrayAdapter<String> spinnerAdapter = new ArrayAdapter<>(getContext(),
android.R.layout.simple_spinner_item, spinnerContent);
spinnerAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
spTimeUnit.setAdapter(spinnerAdapter);
@@ -96,16 +130,33 @@ public abstract class SleepTimerDialog {
cbVibrate.setChecked(SleepTimerPreferences.vibrate());
chAutoEnable.setChecked(SleepTimerPreferences.autoEnable());
- chAutoEnable.setOnCheckedChangeListener((compoundButton, isChecked) -> {
- SleepTimerPreferences.setAutoEnable(isChecked);
- int messageString = isChecked ? R.string.sleep_timer_enabled_label : R.string.sleep_timer_disabled_label;
- EventBus.getDefault().post(new MessageEvent(context.getString(messageString)));
+ chAutoEnable.setOnCheckedChangeListener((compoundButton, isChecked)
+ -> SleepTimerPreferences.setAutoEnable(isChecked));
+ Button disableButton = content.findViewById(R.id.disableSleeptimerButton);
+ disableButton.setOnClickListener(v -> {
+ if (controller != null) {
+ controller.disableSleepTimer();
+ }
+ });
+ Button setButton = content.findViewById(R.id.setSleeptimerButton);
+ setButton.setOnClickListener(v -> {
+ if (!PlaybackService.isRunning) {
+ Toast.makeText(getContext(), R.string.no_media_playing_label, Toast.LENGTH_LONG).show();
+ }
+ try {
+ savePreferences();
+ long time = SleepTimerPreferences.timerMillis();
+ if (controller != null) {
+ controller.setSleepTimer(time, cbShakeToReset.isChecked(), cbVibrate.isChecked());
+ }
+ } catch (NumberFormatException e) {
+ e.printStackTrace();
+ Toast.makeText(getContext(), R.string.time_dialog_invalid_input, Toast.LENGTH_LONG).show();
+ }
});
return dialog;
}
- public abstract void onTimerSet(long millis, boolean shakeToReset, boolean vibrate);
-
private void savePreferences() {
SleepTimerPreferences.setLastTimer(etxtTime.getText().toString(),
spTimeUnit.getSelectedItemPosition());
@@ -114,4 +165,12 @@ public abstract class SleepTimerDialog {
SleepTimerPreferences.setAutoEnable(chAutoEnable.isChecked());
}
+ private void updateTime() {
+ if (controller == null) {
+ return;
+ }
+ timeSetup.setVisibility(controller.sleepTimerActive() ? View.GONE : View.VISIBLE);
+ timeDisplay.setVisibility(controller.sleepTimerActive() ? View.VISIBLE : View.GONE);
+ time.setText(Converter.getDurationStringLong((int) controller.getSleepTimerTimeLeft()));
+ }
}