adding a SelectAlarmSoundDialog

This commit is contained in:
tibbi 2018-03-30 12:16:49 +02:00
parent b71f42eb64
commit aeba8cb2d9
42 changed files with 298 additions and 5 deletions

View file

@ -6,7 +6,7 @@ buildscript {
propMinSdkVersion = 16
propTargetSdkVersion = propCompileSdkVersion
propVersionCode = 1
propVersionName = '3.17.9'
propVersionName = '3.17.10'
kotlin_version = '1.2.31'
support_libs = '27.1.0'
}

View file

@ -33,6 +33,7 @@ dependencies {
implementation 'com.andrognito.patternlockview:patternlockview:1.0.0'
implementation "org.jetbrains.kotlin:kotlin-stdlib-jre7:$kotlin_version"
implementation 'com.bignerdranch.android:recyclerview-multiselect:0.2'
implementation 'com.google.code.gson:gson:2.8.2'
compile 'com.github.ajalt.reprint:core:3.2.1@aar'
annotationProcessor 'com.github.bumptech.glide:compiler:4.6.1'

View file

@ -0,0 +1,155 @@
package com.simplemobiletools.commons.dialogs
import android.annotation.TargetApi
import android.content.Intent
import android.media.MediaPlayer
import android.net.Uri
import android.os.Build
import android.support.v7.app.AlertDialog
import android.view.ViewGroup
import android.widget.RadioGroup
import com.google.gson.Gson
import com.google.gson.reflect.TypeToken
import com.simplemobiletools.commons.R
import com.simplemobiletools.commons.activities.BaseSimpleActivity
import com.simplemobiletools.commons.extensions.*
import com.simplemobiletools.commons.helpers.isKitkatPlus
import com.simplemobiletools.commons.models.AlarmSound
import com.simplemobiletools.commons.models.RadioItem
import com.simplemobiletools.commons.views.MyCompatRadioButton
import kotlinx.android.synthetic.main.dialog_select_alarm_sound.view.*
import java.util.*
class SelectAlarmSoundDialog(val activity: BaseSimpleActivity, val currentUri: String, val audioStream: Int, val pickAudioIntentId: Int, val onAlarmPicked: (alarmSound: AlarmSound?) -> Unit,
val onAlarmSoundDeleted: (alarmSound: AlarmSound) -> Unit) {
private val ADD_NEW_SOUND_ID = -2
private val view = activity.layoutInflater.inflate(R.layout.dialog_select_alarm_sound, null)
private var systemAlarmSounds = ArrayList<AlarmSound>()
private var yourAlarmSounds = ArrayList<AlarmSound>()
private var mediaPlayer = MediaPlayer()
private val config = activity.baseConfig
private val dialog: AlertDialog
init {
activity.getAlarmSounds {
systemAlarmSounds = it
gotSystemAlarms()
}
view.dialog_select_alarm_your_label.setTextColor(activity.getAdjustedPrimaryColor())
view.dialog_select_alarm_system_label.setTextColor(activity.getAdjustedPrimaryColor())
addYourAlarms()
dialog = AlertDialog.Builder(activity)
.setOnDismissListener { mediaPlayer.stop() }
.setPositiveButton(R.string.ok, { dialog, which -> dialogConfirmed() })
.setNegativeButton(R.string.cancel, null)
.create().apply {
activity.setupDialogStuff(view, this)
window.volumeControlStream = audioStream
}
}
private fun addYourAlarms() {
view.dialog_select_alarm_your_radio.removeAllViews()
val token = object : TypeToken<ArrayList<AlarmSound>>() {}.type
yourAlarmSounds = Gson().fromJson<ArrayList<AlarmSound>>(config.yourAlarmSounds, token) ?: ArrayList()
yourAlarmSounds.add(AlarmSound(ADD_NEW_SOUND_ID, activity.getString(R.string.add_new_sound), ""))
yourAlarmSounds.forEach {
addAlarmSound(it, view.dialog_select_alarm_your_radio)
}
}
private fun gotSystemAlarms() {
systemAlarmSounds.forEach {
addAlarmSound(it, view.dialog_select_alarm_system_radio)
}
}
private fun addAlarmSound(alarmSound: AlarmSound, holder: ViewGroup) {
val radioButton = (activity.layoutInflater.inflate(R.layout.item_select_alarm_sound, null) as MyCompatRadioButton).apply {
text = alarmSound.title
isChecked = alarmSound.uri == currentUri
id = alarmSound.id
setColors(config.textColor, activity.getAdjustedPrimaryColor(), config.backgroundColor)
setOnClickListener {
alarmClicked(alarmSound)
if (holder == view.dialog_select_alarm_system_radio) {
view.dialog_select_alarm_your_radio.clearCheck()
} else {
view.dialog_select_alarm_system_radio.clearCheck()
}
}
if (alarmSound.id != -2 && holder == view.dialog_select_alarm_your_radio) {
setOnLongClickListener {
val items = arrayListOf(RadioItem(1, context.getString(R.string.remove)))
RadioGroupDialog(activity, items) {
removeAlarmSound(alarmSound)
}
true
}
}
}
holder.addView(radioButton, RadioGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT))
}
@TargetApi(Build.VERSION_CODES.KITKAT)
private fun alarmClicked(alarmSound: AlarmSound) {
if (alarmSound.id == ADD_NEW_SOUND_ID) {
val action = if (isKitkatPlus()) Intent.ACTION_OPEN_DOCUMENT else Intent.ACTION_GET_CONTENT
Intent(action).apply {
type = "audio/*"
activity.startActivityForResult(this, pickAudioIntentId)
if (isKitkatPlus()) {
flags = flags or Intent.FLAG_GRANT_PERSISTABLE_URI_PERMISSION
}
}
dialog.dismiss()
} else {
try {
mediaPlayer.stop()
mediaPlayer = MediaPlayer().apply {
setAudioStreamType(audioStream)
setDataSource(activity, Uri.parse(alarmSound.uri))
isLooping = true
prepare()
start()
}
} catch (e: Exception) {
activity.showErrorToast(e)
}
}
}
private fun removeAlarmSound(alarmSound: AlarmSound) {
val token = object : TypeToken<ArrayList<AlarmSound>>() {}.type
yourAlarmSounds = Gson().fromJson<ArrayList<AlarmSound>>(config.yourAlarmSounds, token) ?: ArrayList()
yourAlarmSounds.remove(alarmSound)
config.yourAlarmSounds = Gson().toJson(yourAlarmSounds)
addYourAlarms()
if (alarmSound.id == view.dialog_select_alarm_your_radio.checkedRadioButtonId) {
view.dialog_select_alarm_your_radio.clearCheck()
view.dialog_select_alarm_system_radio.check(systemAlarmSounds.firstOrNull()?.id ?: 0)
}
onAlarmSoundDeleted(alarmSound)
}
private fun dialogConfirmed() {
if (view.dialog_select_alarm_your_radio.checkedRadioButtonId != -1) {
val checkedId = view.dialog_select_alarm_your_radio.checkedRadioButtonId
onAlarmPicked(yourAlarmSounds.firstOrNull { it.id == checkedId })
} else {
val checkedId = view.dialog_select_alarm_system_radio.checkedRadioButtonId
onAlarmPicked(systemAlarmSounds.firstOrNull { it.id == checkedId })
}
}
}

View file

@ -7,6 +7,7 @@ import android.content.ClipboardManager
import android.content.Context
import android.content.Intent
import android.graphics.drawable.ColorDrawable
import android.media.RingtoneManager
import android.net.Uri
import android.os.Looper
import android.os.TransactionTooLargeException
@ -26,10 +27,7 @@ import com.simplemobiletools.commons.R
import com.simplemobiletools.commons.activities.BaseSimpleActivity
import com.simplemobiletools.commons.dialogs.*
import com.simplemobiletools.commons.helpers.*
import com.simplemobiletools.commons.models.FileDirItem
import com.simplemobiletools.commons.models.RadioItem
import com.simplemobiletools.commons.models.Release
import com.simplemobiletools.commons.models.SharedTheme
import com.simplemobiletools.commons.models.*
import com.simplemobiletools.commons.views.MyTextView
import kotlinx.android.synthetic.main.dialog_title.view.*
import java.io.*
@ -783,3 +781,42 @@ fun Activity.showPickSecondsDialog(curSeconds: Int, isSnoozePicker: Boolean = fa
}
}
}
fun BaseSimpleActivity.getAlarmSounds(callback: (ArrayList<AlarmSound>) -> Unit) {
val alarms = ArrayList<AlarmSound>()
val manager = RingtoneManager(this)
manager.setType(RingtoneManager.TYPE_ALARM)
try {
val cursor = manager.cursor
val defaultAlarm = AlarmSound(0, getDefaultAlarmTitle(getString(R.string.alarm)), getDefaultAlarmUri().toString())
alarms.add(defaultAlarm)
var curId = 1
while (cursor.moveToNext()) {
val title = cursor.getString(RingtoneManager.TITLE_COLUMN_INDEX)
var uri = cursor.getString(RingtoneManager.URI_COLUMN_INDEX)
val id = cursor.getString(RingtoneManager.ID_COLUMN_INDEX)
if (!uri.endsWith(id)) {
uri += "/$id"
}
val alarmSound = AlarmSound(curId++, title, uri)
alarms.add(alarmSound)
}
callback(alarms)
} catch (e: Exception) {
if (e is SecurityException) {
handlePermission(PERMISSION_READ_STORAGE) {
if (it) {
getAlarmSounds(callback)
} else {
showErrorToast(e)
callback(ArrayList())
}
}
} else {
showErrorToast(e)
callback(ArrayList())
}
}
}

View file

@ -7,6 +7,7 @@ import android.content.Context
import android.content.pm.PackageManager
import android.database.Cursor
import android.graphics.Color
import android.media.RingtoneManager
import android.net.Uri
import android.os.Environment
import android.provider.BaseColumns
@ -443,3 +444,7 @@ fun Context.getFormattedSeconds(seconds: Int, showBefore: Boolean = true) = when
}
}
}
fun Context.getDefaultAlarmUri() = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_ALARM)
fun Context.getDefaultAlarmTitle(defaultTitle: String) = RingtoneManager.getRingtone(this, getDefaultAlarmUri())?.getTitle(this) ?: defaultTitle

View file

@ -211,4 +211,8 @@ open class BaseConfig(val context: Context) {
var vibrateOnButtonPress: Boolean
get() = prefs.getBoolean(VIBRATE_ON_BUTTON_PRESS, false)
set(vibrateOnButton) = prefs.edit().putBoolean(VIBRATE_ON_BUTTON_PRESS, vibrateOnButton).apply()
var yourAlarmSounds: String
get() = prefs.getString(YOUR_ALARM_SOUNDS, "")
set(yourAlarmSounds) = prefs.edit().putString(YOUR_ALARM_SOUNDS, yourAlarmSounds).apply()
}

View file

@ -73,6 +73,7 @@ const val WAS_REMINDER_WARNING_SHOWN = "was_reminder_warning_shown"
const val USE_SAME_SNOOZE = "use_same_snooze"
const val SNOOZE_TIME = "snooze_delay"
const val VIBRATE_ON_BUTTON_PRESS = "vibrate_on_button_press"
const val YOUR_ALARM_SOUNDS = "your_alarm_sounds"
// licenses
internal const val LICENSE_KOTLIN = 1

View file

@ -0,0 +1,3 @@
package com.simplemobiletools.commons.models
data class AlarmSound(val id: Int, var title: String, var uri: String)

View file

@ -0,0 +1,47 @@
<?xml version="1.0" encoding="utf-8"?>
<ScrollView
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/dialog_select_alarm_scrollview"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<LinearLayout
android:id="@+id/dialog_select_alarm_holder"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<TextView
android:id="@+id/dialog_select_alarm_your_label"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:paddingLeft="@dimen/bigger_margin"
android:paddingTop="@dimen/bigger_margin"
android:text="@string/your_sounds"/>
<RadioGroup
android:id="@+id/dialog_select_alarm_your_radio"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingLeft="@dimen/activity_margin"
android:paddingRight="@dimen/activity_margin"
android:paddingTop="@dimen/medium_margin"/>
<TextView
android:id="@+id/dialog_select_alarm_system_label"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:paddingLeft="@dimen/bigger_margin"
android:paddingTop="@dimen/medium_margin"
android:text="@string/system_sounds"/>
<RadioGroup
android:id="@+id/dialog_select_alarm_system_radio"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingLeft="@dimen/activity_margin"
android:paddingRight="@dimen/activity_margin"
android:paddingTop="@dimen/medium_margin"/>
</LinearLayout>
</ScrollView>

View file

@ -0,0 +1,8 @@
<?xml version="1.0" encoding="utf-8"?>
<com.simplemobiletools.commons.views.MyCompatRadioButton
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/item_select_alarm_sound"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingBottom="@dimen/activity_margin"
android:paddingTop="@dimen/activity_margin"/>

View file

@ -308,6 +308,7 @@
<string name="reminder_warning">Please make sure the reminders work properly before relying on them. They could misbehave due to system restrictions related to battery saving.</string>
<!-- Alarms -->
<string name="alarm">Alarm</string>
<string name="snooze">Snooze</string>
<string name="dismiss">Dismiss</string>
<string name="no_reminder">No reminder</string>

View file

@ -308,6 +308,7 @@
<string name="reminder_warning">Please make sure the reminders work properly before relying on them. They could misbehave due to system restrictions related to battery saving.</string>
<!-- Alarms -->
<string name="alarm">Alarm</string>
<string name="snooze">Daleañ</string>
<string name="dismiss">Dismiss</string>
<string name="no_reminder">Adc\'halv ebet</string>

View file

@ -310,6 +310,7 @@
<string name="reminder_warning">Assegureu-vos que els recordatoris funcionin correctament abans de confiar-hi. Podrien comportar-se malament a causa de les restriccions del sistema relacionades amb l\'estalvi de bateria.</string>
<!-- Alarms -->
<string name="alarm">Alarm</string>
<string name="snooze">Postposar</string>
<string name="dismiss">Cancel·lar</string>
<string name="no_reminder">No reminder</string>

View file

@ -325,6 +325,7 @@
<string name="reminder_warning">Please make sure the reminders work properly before relying on them. They could misbehave due to system restrictions related to battery saving.</string>
<!-- Alarms -->
<string name="alarm">Alarm</string>
<string name="snooze">Snooze</string>
<string name="dismiss">Dismiss</string>
<string name="no_reminder">Žádné připomenutí</string>

View file

@ -308,6 +308,7 @@
<string name="reminder_warning">Du anbefales sikre dig at påmindelser virker som de skal inden du stoler på dem. De kan skuffe i kraft af strømbesparende begrænsninger på systemet.</string>
<!-- Alarms -->
<string name="alarm">Alarm</string>
<string name="snooze">Snooze</string>
<string name="dismiss">Slå fra</string>
<string name="no_reminder">Ingen påmindelse</string>

View file

@ -308,6 +308,7 @@
<string name="reminder_warning">Bitte stell sicher, dass die Erinnerung zuverlässig funktioniert, bevor Du Dich darauf verlässt. Es könnte wegen Systemeinschränkungen (z.B. Stromsparfunktion) fehlschlagen.</string>
<!-- Alarms -->
<string name="alarm">Wecker</string>
<string name="snooze">Snooze</string>
<string name="dismiss">Abstellen</string>
<string name="no_reminder">Keine Erinnerung</string>

View file

@ -307,6 +307,7 @@
<string name="reminder_warning">Asegúrese de que los recordatorios funcionen correctamente antes de confiar en ellos. Podrían portarse mal debido a las restricciones del sistema relacionadas con el ahorro de batería.</string>
<!-- Alarms -->
<string name="alarm">Alarm</string>
<string name="snooze">Posponer</string>
<string name="dismiss">Candelar</string>
<string name="no_reminder">Sin recordatorio</string>

View file

@ -308,6 +308,7 @@
<string name="reminder_warning">Varmista että muistutus toimii ennenkuin turvaudut siihen. Se voi toimia virheellisesti laitteesi virransäästötoiminnoista riippuen.</string>
<!-- Alarms -->
<string name="alarm">Alarm</string>
<string name="snooze">Torkuta</string>
<string name="dismiss">Ohita</string>
<string name="no_reminder">Ei muistutusta</string>

View file

@ -308,6 +308,7 @@
<string name="reminder_warning">Veuillez vérifier que les rappels fonctionnent correctement avant de leur faire confiance. Ils pourraient ne pas fonctionner correctement, à cause de la politique d\'économie d\'énergie de votre appareil.</string>
<!-- Alarms -->
<string name="alarm">Réveil</string>
<string name="snooze">Répéter</string>
<string name="dismiss">Ignorer</string>
<string name="no_reminder">Pas de rappel</string>

View file

@ -307,6 +307,7 @@
<string name="reminder_warning">Please make sure the reminders work properly before relying on them. They could misbehave due to system restrictions related to battery saving.</string>
<!-- Alarms -->
<string name="alarm">Alarm</string>
<string name="snooze">Retrasar</string>
<string name="dismiss">Dismiss</string>
<string name="no_reminder">Sin recordatorio</string>

View file

@ -308,6 +308,7 @@
<string name="reminder_warning">Please make sure the reminders work properly before relying on them. They could misbehave due to system restrictions related to battery saving.</string>
<!-- Alarms -->
<string name="alarm">Alarm</string>
<string name="snooze">Snooze</string>
<string name="dismiss">Dismiss</string>
<string name="no_reminder">No reminder</string>

View file

@ -326,6 +326,7 @@
<string name="reminder_warning">Please make sure the reminders work properly before relying on them. They could misbehave due to system restrictions related to battery saving.</string>
<!-- Alarms -->
<string name="alarm">Alarm</string>
<string name="snooze">Snooze</string>
<string name="dismiss">Dismiss</string>
<string name="no_reminder">No reminder</string>

View file

@ -308,6 +308,7 @@
<string name="reminder_warning">Please make sure the reminders work properly before relying on them. They could misbehave due to system restrictions related to battery saving.</string>
<!-- Alarms -->
<string name="alarm">Alarm</string>
<string name="snooze">Snooze</string>
<string name="dismiss">Dismiss</string>
<string name="no_reminder">No reminder</string>

View file

@ -308,6 +308,7 @@
<string name="reminder_warning">Please make sure the reminders work properly before relying on them. They could misbehave due to system restrictions related to battery saving.</string>
<!-- Alarms -->
<string name="alarm">Alarm</string>
<string name="snooze">Snooze</string>
<string name="dismiss">Dismiss</string>
<string name="no_reminder">No reminder</string>

View file

@ -308,6 +308,7 @@
<string name="reminder_warning">Assicurati che i promemoria funzionino correttamente prima di fare affidamento su di essi. Potrebbero comportarsi in modo anomalo a causa di restrizioni di sistema relative al risparmio della batteria.</string>
<!-- Alarms -->
<string name="alarm">Alarm</string>
<string name="snooze">Posponi</string>
<string name="dismiss">Ignora</string>
<string name="no_reminder">Nessun promemoria</string>

View file

@ -308,6 +308,7 @@
<string name="reminder_warning">Please make sure the reminders work properly before relying on them. They could misbehave due to system restrictions related to battery saving.</string>
<!-- Alarms -->
<string name="alarm">Alarm</string>
<string name="snooze">Snooze</string>
<string name="dismiss">Dismiss</string>
<string name="no_reminder">No reminder</string>

View file

@ -308,6 +308,7 @@
<string name="reminder_warning">Please make sure the reminders work properly before relying on them. They could misbehave due to system restrictions related to battery saving.</string>
<!-- Alarms -->
<string name="alarm">Alarm</string>
<string name="snooze">Snooze</string>
<string name="dismiss">Dismiss</string>
<string name="no_reminder">No reminder</string>

View file

@ -308,6 +308,7 @@
<string name="reminder_warning">Please make sure the reminders work properly before relying on them. They could misbehave due to system restrictions related to battery saving.</string>
<!-- Alarms -->
<string name="alarm">Alarm</string>
<string name="snooze">스누즈</string>
<string name="dismiss">Dismiss</string>
<string name="no_reminder">알림 없음</string>

View file

@ -325,6 +325,7 @@
<string name="reminder_warning">Prieš naudodamiesi, įsitikinkite, kad priminimai tinkamai veikia. Jie gali netinkamai veikti dėl sistemos apribojimų, susijusių su baterijos taupymu.</string>
<!-- Alarms -->
<string name="alarm">Žadintuvas</string>
<string name="snooze">Snausti</string>
<string name="dismiss">Nutraukti</string>
<string name="no_reminder">Nėra priminimo</string>

View file

@ -308,6 +308,7 @@
<string name="reminder_warning">Sørg for at påminnelsene fungerer riktig før du stoler på dem. De kan fungere dårlig på grunn av systembegrensninger relatert til batterisparing.</string>
<!-- Alarms -->
<string name="alarm">Alarm</string>
<string name="snooze">Snooze</string>
<string name="dismiss">Avvis</string>
<string name="no_reminder">Ingen påminnelse</string>

View file

@ -308,6 +308,7 @@
<string name="reminder_warning">Controleer eerst of de herinneringen goed werken. Er kunnen zich problemen voordoen door de batterijbesparing van Android.</string>
<!-- Alarms -->
<string name="alarm">Alarm</string>
<string name="snooze">Uitstellen</string>
<string name="dismiss">Uitzetten</string>
<string name="no_reminder">Geen herinnering</string>

View file

@ -308,6 +308,7 @@
<string name="reminder_warning">Please make sure the reminders work properly before relying on them. They could misbehave due to system restrictions related to battery saving.</string>
<!-- Alarms -->
<string name="alarm">Alarm</string>
<string name="snooze">Snooze</string>
<string name="dismiss">Dismiss</string>
<string name="no_reminder">Ingen påminnelse</string>

View file

@ -322,6 +322,7 @@
<string name="reminder_warning">Please make sure the reminders work properly before relying on them. They could misbehave due to system restrictions related to battery saving.</string>
<!-- Alarms -->
<string name="alarm">Alarm</string>
<string name="snooze">Drzemka</string>
<string name="dismiss">Dismiss</string>
<string name="no_reminder">Brak przypomnienia</string>

View file

@ -308,6 +308,7 @@
<string name="reminder_warning">Please make sure the reminders work properly before relying on them. They could misbehave due to system restrictions related to battery saving.</string>
<!-- Alarms -->
<string name="alarm">Alarm</string>
<string name="snooze">Snooze</string>
<string name="dismiss">Dismiss</string>
<string name="no_reminder">Sem lembrete</string>

View file

@ -308,6 +308,7 @@
<string name="reminder_warning">Certifique-se de que o lembrete está a funcionar corretamente antes de o utilizar na plenitude. Pode ter um comportamento errático devido a restrições do sistema.</string>
<!-- Alarms -->
<string name="alarm">Alarme</string>
<string name="snooze">Snooze</string>
<string name="dismiss">Descartar</string>
<string name="no_reminder">Sem lembrete</string>

View file

@ -334,6 +334,7 @@
<string name="reminder_warning">Пожалуйста, убедитесь, что напоминания работают правильно, прежде чем полагаться на них. Они могут не работать должным образом из-за системных ограничений, связанных с экономией батареи.</string>
<!-- Alarms -->
<string name="alarm">Alarm</string>
<string name="snooze">Отложить</string>
<string name="dismiss">Закрыть</string>
<string name="no_reminder">Без напоминания</string>

View file

@ -326,6 +326,7 @@
<string name="reminder_warning">Pred tým, ako by ste sa na pripomienky spoliehali, sa prosím uistite, že fungujú správne. Niektoré systémové obmedzenia spojené so zlepšením výdrže batérie môžu spôsobiť problémy.</string>
<!-- Alarms -->
<string name="alarm">Budík</string>
<string name="snooze">Odložiť</string>
<string name="dismiss">Odstrániť</string>
<string name="no_reminder">Žiadna pripomienka</string>

View file

@ -308,6 +308,7 @@
<string name="reminder_warning">Kontrollera att påminnelserna fungerar som de ska innan du förlitar dig på dem. De kanske inte fungerar som de ska på grund av batterisparrelaterade systembegränsningar.</string>
<!-- Alarms -->
<string name="alarm">Alarm</string>
<string name="snooze">Snooza</string>
<string name="dismiss">Stäng av</string>
<string name="no_reminder">Ingen påminnelse</string>

View file

@ -308,6 +308,7 @@
<string name="reminder_warning">Please make sure the reminders work properly before relying on them. They could misbehave due to system restrictions related to battery saving.</string>
<!-- Alarms -->
<string name="alarm">Alarm</string>
<string name="snooze">Snooze</string>
<string name="dismiss">Dismiss</string>
<string name="no_reminder">Hatırlatma yok</string>

View file

@ -308,6 +308,7 @@
<string name="reminder_warning">在依赖它们之前,请确保提醒能够正常工作。由于系统与节电有关的限制,它们有时可能会失灵。</string>
<!-- Alarms -->
<string name="alarm">Alarm</string>
<string name="snooze">贪睡</string>
<string name="dismiss">关闭</string>
<string name="no_reminder">不再提醒</string>

View file

@ -307,6 +307,7 @@
<string name="reminder_warning">依靠提醒功能之前,請先確認是否正常運作,有可能因為省電相關的系統限制而導致失靈。</string>
<!-- Alarms -->
<string name="alarm">鬧鐘</string>
<string name="snooze">延遲</string>
<string name="dismiss">關閉</string>
<string name="no_reminder">不提醒</string>

View file

@ -308,6 +308,7 @@
<string name="reminder_warning">Please make sure the reminders work properly before relying on them. They could misbehave due to system restrictions related to battery saving.</string>
<!-- Alarms -->
<string name="alarm">Alarm</string>
<string name="snooze">Snooze</string>
<string name="dismiss">Dismiss</string>
<string name="no_reminder">No reminder</string>