summaryrefslogtreecommitdiff
path: root/app/src/main/java/de/danoeh/antennapod/dialog/SleepTimerDialog.java
blob: 0ddee9f61607524f5e0064f834983d73a916c5f5 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
package de.danoeh.antennapod.dialog;

import android.content.Context;
import android.text.Editable;
import android.text.TextWatcher;
import android.util.Log;
import android.view.View;
import android.view.inputmethod.InputMethodManager;
import android.widget.ArrayAdapter;
import android.widget.CheckBox;
import android.widget.EditText;
import android.widget.Spinner;
import android.widget.Toast;

import com.afollestad.materialdialogs.DialogAction;
import com.afollestad.materialdialogs.MaterialDialog;

import de.danoeh.antennapod.R;
import de.danoeh.antennapod.core.preferences.SleepTimerPreferences;

public abstract class SleepTimerDialog {
    
    private static final String TAG = SleepTimerDialog.class.getSimpleName();

    private Context context;

    private MaterialDialog dialog;
    private EditText etxtTime;
    private Spinner spTimeUnit;
    private CheckBox cbShakeToReset;
    private CheckBox cbVibrate;
    private CheckBox chAutoEnable;


    public SleepTimerDialog(Context context) {
        this.context = context;
    }

    public MaterialDialog createNewDialog() {
        MaterialDialog.Builder builder = new MaterialDialog.Builder(context);
        builder.title(R.string.set_sleeptimer_label);
        builder.customView(R.layout.time_dialog, false);
        builder.positiveText(R.string.set_sleeptimer_label);
        builder.negativeText(R.string.cancel_label);
        builder.onNegative((dialog, which) -> dialog.dismiss());
        builder.onPositive((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();
                }
            });
        dialog = builder.build();
        
        View view = dialog.getView();
        etxtTime = (EditText) view.findViewById(R.id.etxtTime);
        spTimeUnit = (Spinner) view.findViewById(R.id.spTimeUnit);
        cbShakeToReset = (CheckBox) view.findViewById(R.id.cbShakeToReset);
        cbVibrate = (CheckBox) view.findViewById(R.id.cbVibrate);
        chAutoEnable = (CheckBox) view.findViewById(R.id.chAutoEnable);

        etxtTime.setText(SleepTimerPreferences.lastTimerValue());
        etxtTime.addTextChangedListener(new TextWatcher() {
            @Override
            public void afterTextChanged(Editable s) {
                checkInputLength(s.length());
            }

            @Override
            public void beforeTextChanged(CharSequence s, int start, int count, int after) {
            }

            @Override
            public void onTextChanged(CharSequence s, int start, int before, int count) {
            }
        });
        etxtTime.postDelayed(() -> {
            InputMethodManager imm = (InputMethodManager) context.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,
                android.R.layout.simple_spinner_item, spinnerContent);
        spinnerAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
        spTimeUnit.setAdapter(spinnerAdapter);
        spTimeUnit.setSelection(SleepTimerPreferences.lastTimerTimeUnit());

        cbShakeToReset.setChecked(SleepTimerPreferences.shakeToReset());
        cbVibrate.setChecked(SleepTimerPreferences.vibrate());
        chAutoEnable.setChecked(SleepTimerPreferences.autoEnable());

        return dialog;
    }

    private void checkInputLength(int length) {
        if (length > 0) {
            Log.d(TAG, "Length is larger than 0, enabling confirm button");
            dialog.getActionButton(DialogAction.POSITIVE).setEnabled(true);
        } else {
            Log.d(TAG, "Length is smaller than 0, disabling confirm button");
            dialog.getActionButton(DialogAction.POSITIVE).setEnabled(false);
        }
    }

    public abstract void onTimerSet(long millis, boolean shakeToReset, boolean vibrate);

    private void savePreferences() {
        SleepTimerPreferences.setLastTimer(etxtTime.getText().toString(),
                spTimeUnit.getSelectedItemPosition());
        SleepTimerPreferences.setShakeToReset(cbShakeToReset.isChecked());
        SleepTimerPreferences.setVibrate(cbVibrate.isChecked());
        SleepTimerPreferences.setAutoEnable(chAutoEnable.isChecked());
    }

}