summaryrefslogtreecommitdiff
path: root/app/src/main/java/de/danoeh
diff options
context:
space:
mode:
Diffstat (limited to 'app/src/main/java/de/danoeh')
-rw-r--r--app/src/main/java/de/danoeh/antennapod/activity/MediaplayerActivity.java31
-rw-r--r--app/src/main/java/de/danoeh/antennapod/dialog/SleepTimerDialog.java139
2 files changed, 103 insertions, 67 deletions
diff --git a/app/src/main/java/de/danoeh/antennapod/activity/MediaplayerActivity.java b/app/src/main/java/de/danoeh/antennapod/activity/MediaplayerActivity.java
index 538ed1231..021ff774d 100644
--- a/app/src/main/java/de/danoeh/antennapod/activity/MediaplayerActivity.java
+++ b/app/src/main/java/de/danoeh/antennapod/activity/MediaplayerActivity.java
@@ -358,10 +358,8 @@ public abstract class MediaplayerActivity extends CastEnabledActivity implements
menu.findItem(R.id.remove_from_favorites_item).setVisible(isFavorite);
}
- boolean sleepTimerSet = controller.sleepTimerActive();
- boolean sleepTimerNotSet = controller.sleepTimerNotActive();
- menu.findItem(R.id.set_sleeptimer_item).setVisible(sleepTimerNotSet);
- menu.findItem(R.id.disable_sleeptimer_item).setVisible(sleepTimerSet);
+ menu.findItem(R.id.set_sleeptimer_item).setVisible(!controller.sleepTimerActive());
+ menu.findItem(R.id.disable_sleeptimer_item).setVisible(controller.sleepTimerActive());
if (this instanceof AudioplayerActivity) {
int[] attrs = {R.attr.action_bar_icon_color};
@@ -422,30 +420,9 @@ public abstract class MediaplayerActivity extends CastEnabledActivity implements
.show();
}
break;
- case R.id.disable_sleeptimer_item:
- if (controller.serviceAvailable()) {
-
- new AlertDialog.Builder(this)
- .setTitle(R.string.sleep_timer_label)
- .setMessage(getString(R.string.time_left_label)
- + Converter.getDurationStringLong((int) controller
- .getSleepTimerTimeLeft()))
- .setPositiveButton(R.string.disable_sleeptimer_label, (dialog, which)
- -> controller.disableSleepTimer())
- .setNegativeButton(R.string.cancel_label, null)
- .show();
- }
- break;
+ case R.id.disable_sleeptimer_item: // Fall-through
case R.id.set_sleeptimer_item:
- if (controller.serviceAvailable()) {
- SleepTimerDialog td = new SleepTimerDialog(this) {
- @Override
- public void onTimerSet(long millis, boolean shakeToReset, boolean vibrate) {
- controller.setSleepTimer(millis, shakeToReset, vibrate);
- }
- };
- td.createNewDialog().show();
- }
+ new SleepTimerDialog().show(getSupportFragmentManager(), "SleepTimerDialog");
break;
case R.id.audio_controls:
boolean isPlayingVideo = controller.getMedia().getMediaType() == MediaType.VIDEO;
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()));
+ }
}