Added alarm duration option

pull/194/merge
M66B 3 years ago
parent 61c0f733cf
commit 577886e17f

@ -954,6 +954,7 @@ public class EntityRule {
Uri uri = Uri.parse(jargs.getString("uri"));
boolean alarm = jargs.getBoolean("alarm");
int duration = jargs.optInt("duration", MediaPlayerHelper.DEFAULT_ALARM_DURATION);
DB db = DB.getInstance(context);
@ -964,7 +965,7 @@ public class EntityRule {
@Override
public void run() {
try {
MediaPlayerHelper.play(context, uri, alarm);
MediaPlayerHelper.play(context, uri, alarm, duration);
} catch (Throwable ex) {
Log.e(ex);
}

@ -149,6 +149,7 @@ public class FragmentRule extends FragmentBase {
private Button btnSound;
private CheckBox cbAlarm;
private EditText etAlarmDuration;
private TextView tvAutomation;
@ -297,6 +298,7 @@ public class FragmentRule extends FragmentBase {
btnSound = view.findViewById(R.id.btnSound);
cbAlarm = view.findViewById(R.id.cbAlarm);
etAlarmDuration = view.findViewById(R.id.etAlarmDuration);
tvAutomation = view.findViewById(R.id.tvAutomation);
@ -517,6 +519,16 @@ public class FragmentRule extends FragmentBase {
}
});
cbAlarm.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
etAlarmDuration.setEnabled(isChecked);
}
});
etAlarmDuration.setHint(Integer.toString(MediaPlayerHelper.DEFAULT_ALARM_DURATION));
etAlarmDuration.setEnabled(false);
npDuration.setMinValue(0);
npDuration.setMaxValue(999);
@ -1043,7 +1055,11 @@ public class FragmentRule extends FragmentBase {
case EntityRule.TYPE_SOUND:
if (jaction.has("uri"))
FragmentRule.this.sound = Uri.parse(jaction.getString("uri"));
cbAlarm.setChecked(jaction.optBoolean("alarm"));
boolean alarm = jaction.optBoolean("alarm");
int duration = jaction.optInt("duration", 0);
cbAlarm.setChecked(alarm);
etAlarmDuration.setEnabled(alarm);
etAlarmDuration.setText(duration == 0 ? null : Integer.toString(duration));
break;
}
@ -1375,8 +1391,16 @@ public class FragmentRule extends FragmentBase {
break;
case EntityRule.TYPE_SOUND:
boolean alarm = cbAlarm.isChecked();
String duration = etAlarmDuration.getText().toString();
jaction.put("uri", sound);
jaction.put("alarm", cbAlarm.isChecked());
jaction.put("alarm", alarm);
if (alarm && !TextUtils.isEmpty(duration))
try {
jaction.put("duration", Integer.parseInt(duration));
} catch (NumberFormatException ex) {
Log.e(ex);
}
break;
}
}

@ -10,9 +10,9 @@ import java.util.concurrent.Semaphore;
import java.util.concurrent.TimeUnit;
public class MediaPlayerHelper {
private static final int MAX_DURATION = 30; // seconds
static final int DEFAULT_ALARM_DURATION = 30; // seconds
static void play(Context context, Uri uri, boolean alarm) throws IOException {
static void play(Context context, Uri uri, boolean alarm, int duration) throws IOException {
Semaphore sem = new Semaphore(0);
AudioAttributes attrs = new AudioAttributes.Builder()
@ -41,7 +41,7 @@ public class MediaPlayerHelper {
mediaPlayer.prepareAsync();
try {
if (!sem.tryAcquire(MAX_DURATION, TimeUnit.SECONDS)) {
if (!sem.tryAcquire(duration, TimeUnit.SECONDS)) {
mediaPlayer.stop();
mediaPlayer.release();
}

@ -947,6 +947,30 @@
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/cbAlarm" />
<eu.faircode.email.FixedTextView
android:id="@+id/tvAlarmDuration"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="12dp"
android:layout_marginTop="12dp"
android:text="@string/title_rule_alarm_duration"
android:textAppearance="@style/TextAppearance.AppCompat.Small"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/tvAlarm" />
<eu.faircode.email.EditTextPlain
android:id="@+id/etAlarmDuration"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginStart="12dp"
android:hint="10"
android:inputType="number"
android:maxLength="3"
android:textAppearance="@style/TextAppearance.AppCompat.Medium"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/tvAlarmDuration" />
<eu.faircode.email.FixedTextView
android:id="@+id/tvAutomation"
android:layout_width="wrap_content"
@ -955,7 +979,7 @@
android:text="@string/title_rule_automation_hint"
android:textAppearance="@style/TextAppearance.AppCompat.Small"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/tvAlarm" />
app:layout_constraintTop_toBottomOf="@+id/etAlarmDuration" />
<eu.faircode.email.FixedTextView
android:id="@+id/tvDelete"
@ -1038,7 +1062,7 @@
android:id="@+id/grpSound"
android:layout_width="0dp"
android:layout_height="0dp"
app:constraint_referenced_ids="btnSound,cbAlarm,tvAlarm" />
app:constraint_referenced_ids="btnSound,cbAlarm,tvAlarm,tvAlarmDuration,etAlarmDuration" />
<androidx.constraintlayout.widget.Group
android:id="@+id/grpAutomation"

@ -1547,6 +1547,7 @@
<string name="title_rule_select_sound">Select sound</string>
<string name="title_rule_use_as_alarm">Use as alarm</string>
<string name="title_rule_alarm_hint">This will ignore "do not disturb" rules</string>
<string name="title_rule_alarm_duration">Maximum alarm duration (seconds)</string>
<string name="title_legend_section_synchronize">Synchronize</string>
<string name="title_legend_section_folders">Folders</string>

Loading…
Cancel
Save