moving SelectAlarmSoundDialog in Commons

This commit is contained in:
tibbi 2018-03-30 16:00:35 +02:00
parent 950d49c2b1
commit e93dbdc327
22 changed files with 22 additions and 310 deletions

View File

@ -41,11 +41,10 @@ android {
}
dependencies {
implementation 'com.simplemobiletools:commons:3.17.9'
implementation 'com.simplemobiletools:commons:3.17.11'
implementation 'com.facebook.stetho:stetho:1.5.0'
implementation 'com.android.support.constraint:constraint-layout:1.0.2'
implementation 'com.shawnlin:number-picker:2.4.6'
implementation 'com.google.code.gson:gson:2.8.2'
}
Properties props = new Properties()

View File

@ -19,11 +19,11 @@ import com.simplemobiletools.clock.extensions.dbHelper
import com.simplemobiletools.clock.extensions.getNextAlarm
import com.simplemobiletools.clock.extensions.rescheduleEnabledAlarms
import com.simplemobiletools.clock.helpers.*
import com.simplemobiletools.clock.models.AlarmSound
import com.simplemobiletools.commons.extensions.*
import com.simplemobiletools.commons.helpers.LICENSE_NUMBER_PICKER
import com.simplemobiletools.commons.helpers.LICENSE_STETHO
import com.simplemobiletools.commons.helpers.isKitkatPlus
import com.simplemobiletools.commons.models.AlarmSound
import com.simplemobiletools.commons.models.FAQItem
import kotlinx.android.synthetic.main.activity_main.*
import java.util.*

View File

@ -11,7 +11,7 @@ import com.simplemobiletools.clock.fragments.TimerFragment
import com.simplemobiletools.clock.helpers.TABS_COUNT
import com.simplemobiletools.clock.helpers.TAB_ALARM
import com.simplemobiletools.clock.helpers.TAB_TIMER
import com.simplemobiletools.clock.models.AlarmSound
import com.simplemobiletools.commons.models.AlarmSound
class ViewPagerAdapter(fm: FragmentManager) : FragmentStatePagerAdapter(fm) {
private val fragments = HashMap<Int, Fragment>()

View File

@ -8,9 +8,11 @@ import android.widget.TextView
import com.simplemobiletools.clock.R
import com.simplemobiletools.clock.activities.SimpleActivity
import com.simplemobiletools.clock.extensions.*
import com.simplemobiletools.clock.helpers.PICK_AUDIO_FILE_INTENT_ID
import com.simplemobiletools.clock.models.Alarm
import com.simplemobiletools.clock.models.AlarmSound
import com.simplemobiletools.commons.dialogs.SelectAlarmSoundDialog
import com.simplemobiletools.commons.extensions.*
import com.simplemobiletools.commons.models.AlarmSound
import kotlinx.android.synthetic.main.dialog_edit_alarm.view.*
class EditAlarmDialog(val activity: SimpleActivity, val alarm: Alarm, val callback: () -> Unit) {
@ -28,13 +30,13 @@ class EditAlarmDialog(val activity: SimpleActivity, val alarm: Alarm, val callba
edit_alarm_sound.colorLeftDrawable(textColor)
edit_alarm_sound.text = alarm.soundTitle
edit_alarm_sound.setOnClickListener {
SelectAlarmSoundDialog(activity, alarm.soundUri, AudioManager.STREAM_ALARM, onAlarmPicked = {
SelectAlarmSoundDialog(activity, alarm.soundUri, AudioManager.STREAM_ALARM, PICK_AUDIO_FILE_INTENT_ID, onAlarmPicked = {
if (it != null) {
updateSelectedAlarmSound(it)
}
}, onAlarmSoundDeleted = {
if (alarm.soundUri == it.uri) {
val defaultAlarm = AlarmSound(0, context.getDefaultAlarmTitle(), context.getDefaultAlarmUri().toString())
val defaultAlarm = AlarmSound(0, context.getDefaultAlarmTitle(context.getString(R.string.alarm)), context.getDefaultAlarmUri().toString())
updateSelectedAlarmSound(defaultAlarm)
}
activity.checkAlarmsWithDeletedSoundUri(it.uri)

View File

@ -1,160 +0,0 @@
package com.simplemobiletools.clock.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.clock.R
import com.simplemobiletools.clock.activities.SimpleActivity
import com.simplemobiletools.clock.extensions.config
import com.simplemobiletools.clock.extensions.getAlarmSounds
import com.simplemobiletools.clock.helpers.PICK_AUDIO_FILE_INTENT_ID
import com.simplemobiletools.clock.models.AlarmSound
import com.simplemobiletools.commons.dialogs.RadioGroupDialog
import com.simplemobiletools.commons.extensions.getAdjustedPrimaryColor
import com.simplemobiletools.commons.extensions.setupDialogStuff
import com.simplemobiletools.commons.extensions.showErrorToast
import com.simplemobiletools.commons.helpers.isKitkatPlus
import com.simplemobiletools.commons.models.RadioItem
import com.simplemobiletools.commons.views.MyCompatRadioButton
import kotlinx.android.synthetic.main.dialog_select_alarm_sound.view.*
class SelectAlarmSoundDialog(val activity: SimpleActivity, val currentUri: String, val audioStream: 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.config
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, 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, PICK_AUDIO_FILE_INTENT_ID)
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

@ -1,13 +1,7 @@
package com.simplemobiletools.clock.extensions
import android.app.Activity
import android.media.RingtoneManager
import android.view.WindowManager
import com.simplemobiletools.clock.models.AlarmSound
import com.simplemobiletools.commons.activities.BaseSimpleActivity
import com.simplemobiletools.commons.extensions.showErrorToast
import com.simplemobiletools.commons.helpers.PERMISSION_READ_STORAGE
import java.util.*
fun Activity.showOverLockscreen() {
window.addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON or
@ -15,42 +9,3 @@ fun Activity.showOverLockscreen() {
WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED or
WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON)
}
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(), 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,7 +7,6 @@ import android.content.ComponentName
import android.content.Context
import android.content.Intent
import android.media.AudioManager
import android.media.RingtoneManager
import android.net.Uri
import android.os.PowerManager
import android.provider.Settings
@ -22,19 +21,17 @@ import com.simplemobiletools.clock.activities.SnoozeReminderActivity
import com.simplemobiletools.clock.activities.SplashActivity
import com.simplemobiletools.clock.helpers.*
import com.simplemobiletools.clock.models.Alarm
import com.simplemobiletools.clock.models.AlarmSound
import com.simplemobiletools.clock.models.MyTimeZone
import com.simplemobiletools.clock.receivers.AlarmReceiver
import com.simplemobiletools.clock.receivers.DateTimeWidgetUpdateReceiver
import com.simplemobiletools.clock.receivers.HideAlarmReceiver
import com.simplemobiletools.clock.receivers.HideTimerReceiver
import com.simplemobiletools.clock.services.SnoozeService
import com.simplemobiletools.commons.extensions.formatMinutesToTimeString
import com.simplemobiletools.commons.extensions.getAdjustedPrimaryColor
import com.simplemobiletools.commons.extensions.toast
import com.simplemobiletools.commons.extensions.*
import com.simplemobiletools.commons.helpers.isKitkatPlus
import com.simplemobiletools.commons.helpers.isLollipopPlus
import com.simplemobiletools.commons.helpers.isOreoPlus
import com.simplemobiletools.commons.models.AlarmSound
import java.util.*
import kotlin.math.pow
@ -77,11 +74,7 @@ fun Context.getAllTimeZonesModified(): ArrayList<MyTimeZone> {
fun Context.getModifiedTimeZoneTitle(id: Int) = getAllTimeZonesModified().firstOrNull { it.id == id }?.title ?: getDefaultTimeZoneTitle(id)
fun Context.getDefaultAlarmUri() = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_ALARM)
fun Context.getDefaultAlarmTitle() = RingtoneManager.getRingtone(this, getDefaultAlarmUri())?.getTitle(this) ?: getString(R.string.alarm)
fun Context.createNewAlarm(timeInMinutes: Int, weekDays: Int) = Alarm(0, timeInMinutes, weekDays, false, false, getDefaultAlarmTitle(), getDefaultAlarmUri().toString(), "")
fun Context.createNewAlarm(timeInMinutes: Int, weekDays: Int) = Alarm(0, timeInMinutes, weekDays, false, false, getDefaultAlarmTitle(getString(R.string.alarm)), getDefaultAlarmUri().toString(), "")
fun Context.scheduleNextAlarm(alarm: Alarm, showToast: Boolean) {
val calendar = Calendar.getInstance()
@ -271,14 +264,6 @@ fun Context.getTimerNotification(pendingIntent: PendingIntent, addDeleteIntent:
return notification
}
fun Context.grantReadUriPermission(uriString: String) {
try {
// ensure custom reminder sounds play well
grantUriPermission("com.android.systemui", Uri.parse(uriString), Intent.FLAG_GRANT_READ_URI_PERMISSION)
} catch (ignored: Exception) {
}
}
fun Context.getHideTimerPendingIntent(): PendingIntent {
val intent = Intent(this, HideTimerReceiver::class.java)
return PendingIntent.getBroadcast(this, TIMER_NOTIF_ID, intent, PendingIntent.FLAG_UPDATE_CURRENT)
@ -357,7 +342,7 @@ fun Context.getReminderActivityIntent(): PendingIntent {
}
fun Context.checkAlarmsWithDeletedSoundUri(uri: String) {
val defaultAlarm = AlarmSound(0, getDefaultAlarmTitle(), getDefaultAlarmUri().toString())
val defaultAlarm = AlarmSound(0, getDefaultAlarmTitle(getString(R.string.alarm)), getDefaultAlarmUri().toString())
dbHelper.getAlarmsWithUri(uri).forEach {
it.soundTitle = defaultAlarm.title
it.soundUri = defaultAlarm.uri

View File

@ -13,9 +13,9 @@ import com.simplemobiletools.clock.extensions.*
import com.simplemobiletools.clock.helpers.DEFAULT_ALARM_MINUTES
import com.simplemobiletools.clock.interfaces.ToggleAlarmInterface
import com.simplemobiletools.clock.models.Alarm
import com.simplemobiletools.clock.models.AlarmSound
import com.simplemobiletools.commons.extensions.toast
import com.simplemobiletools.commons.extensions.updateTextColors
import com.simplemobiletools.commons.models.AlarmSound
import kotlinx.android.synthetic.main.fragment_alarm.view.*
import java.util.*

View File

@ -14,10 +14,11 @@ import com.simplemobiletools.clock.R
import com.simplemobiletools.clock.activities.ReminderActivity
import com.simplemobiletools.clock.activities.SimpleActivity
import com.simplemobiletools.clock.dialogs.MyTimePickerDialogDialog
import com.simplemobiletools.clock.dialogs.SelectAlarmSoundDialog
import com.simplemobiletools.clock.extensions.*
import com.simplemobiletools.clock.models.AlarmSound
import com.simplemobiletools.clock.helpers.PICK_AUDIO_FILE_INTENT_ID
import com.simplemobiletools.commons.dialogs.SelectAlarmSoundDialog
import com.simplemobiletools.commons.extensions.*
import com.simplemobiletools.commons.models.AlarmSound
import kotlinx.android.synthetic.main.fragment_timer.view.*
class TimerFragment : Fragment() {
@ -66,13 +67,13 @@ class TimerFragment : Fragment() {
}
timer_sound.setOnClickListener {
SelectAlarmSoundDialog(activity as SimpleActivity, config.timerSoundUri, AudioManager.STREAM_SYSTEM, onAlarmPicked = {
SelectAlarmSoundDialog(activity as SimpleActivity, config.timerSoundUri, AudioManager.STREAM_SYSTEM, PICK_AUDIO_FILE_INTENT_ID, onAlarmPicked = {
if (it != null) {
updateAlarmSound(it)
}
}, onAlarmSoundDeleted = {
if (config.timerSoundUri == it.uri) {
val defaultAlarm = AlarmSound(0, context.getDefaultAlarmTitle(), context.getDefaultAlarmUri().toString())
val defaultAlarm = AlarmSound(0, context.getDefaultAlarmTitle(getString(R.string.alarm)), context.getDefaultAlarmUri().toString())
updateAlarmSound(defaultAlarm)
}
context.checkAlarmsWithDeletedSoundUri(it.uri)

View File

@ -1,8 +1,9 @@
package com.simplemobiletools.clock.helpers
import android.content.Context
import com.simplemobiletools.clock.extensions.getDefaultAlarmTitle
import com.simplemobiletools.clock.extensions.getDefaultAlarmUri
import com.simplemobiletools.clock.R
import com.simplemobiletools.commons.extensions.getDefaultAlarmTitle
import com.simplemobiletools.commons.extensions.getDefaultAlarmUri
import com.simplemobiletools.commons.helpers.BaseConfig
class Config(context: Context) : BaseConfig(context) {
@ -35,7 +36,7 @@ class Config(context: Context) : BaseConfig(context) {
set(timerSoundUri) = prefs.edit().putString(TIMER_SOUND_URI, timerSoundUri).apply()
var timerSoundTitle: String
get() = prefs.getString(TIMER_SOUND_TITLE, context.getDefaultAlarmTitle())
get() = prefs.getString(TIMER_SOUND_TITLE, context.getDefaultAlarmTitle(context.getString(R.string.alarm)))
set(timerSoundTitle) = prefs.edit().putString(TIMER_SOUND_TITLE, timerSoundTitle).apply()
var timerMaxReminderSecs: Int
@ -49,8 +50,4 @@ class Config(context: Context) : BaseConfig(context) {
var useTextShadow: Boolean
get() = prefs.getBoolean(USE_TEXT_SHADOW, true)
set(useTextShadow) = prefs.edit().putBoolean(USE_TEXT_SHADOW, useTextShadow).apply()
var yourAlarmSounds: String
get() = prefs.getString(YOUR_ALARM_SOUNDS, "")
set(yourAlarmSounds) = prefs.edit().putString(YOUR_ALARM_SOUNDS, yourAlarmSounds).apply()
}

View File

@ -14,7 +14,6 @@ const val TIMER_SOUND_TITLE = "timer_sound_title"
const val TIMER_MAX_REMINDER_SECS = "timer_max_reminder_secs"
const val ALARM_MAX_REMINDER_SECS = "alarm_max_reminder_secs"
const val USE_TEXT_SHADOW = "use_text_shadow"
const val YOUR_ALARM_SOUNDS = "your_alarm_sounds"
const val TABS_COUNT = 4
const val EDITED_TIME_ZONE_SEPARATOR = ":"

View File

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

View File

@ -1,47 +0,0 @@
<?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

@ -1,8 +0,0 @@
<?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"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingBottom="@dimen/activity_margin"
android:paddingTop="@dimen/activity_margin"/>

View File

@ -5,7 +5,6 @@
<string name="vibrate">Vibration</string>
<string name="label">Label</string>
<string name="no_days_selected">Keine Tage ausgewählt</string>
<string name="alarm">Wecker</string>
<string name="timer">Timer</string>
<string name="lap">Runde</string>
<string name="stopwatch_stopped">Die Stoppuhr wurde angehalten</string>

View File

@ -5,7 +5,6 @@
<string name="vibrate">Vibrer</string>
<string name="label">Titre</string>
<string name="no_days_selected">Aucun jour choisi !</string>
<string name="alarm">Réveil</string>
<string name="timer">Minuteur</string>
<string name="lap">Tour</string>
<string name="stopwatch_stopped">Chronomètre arrêté</string>

View File

@ -5,7 +5,6 @@
<string name="vibrate">Vibriraj</string>
<string name="label">Oznaka</string>
<string name="no_days_selected">Nije odabran nijedan dan</string>
<string name="alarm">Alarm</string>
<string name="timer">Brojač</string>
<string name="lap">Krug</string>
<string name="stopwatch_stopped">Štoperica je zaustavljena</string>

View File

@ -5,7 +5,6 @@
<string name="vibrate">Vibruoti</string>
<string name="label">Etiketė</string>
<string name="no_days_selected">Nepasirinkta nė vienos dienos</string>
<string name="alarm">Žadintuvas</string>
<string name="timer">Laikmatis</string>
<string name="lap">Etapas</string>
<string name="stopwatch_stopped">Chronometras buvo sustabdytas</string>

View File

@ -5,7 +5,6 @@
<string name="vibrate">Vibrar</string>
<string name="label">Legenda</string>
<string name="no_days_selected">Nenhum dia selecionado</string>
<string name="alarm">Alarme</string>
<string name="timer">Temporizador</string>
<string name="lap">Volta</string>
<string name="stopwatch_stopped">Cronómetro parado</string>

View File

@ -5,7 +5,6 @@
<string name="vibrate">Vibrovanie</string>
<string name="label">Štítok</string>
<string name="no_days_selected">Neboli označené žiadne dni</string>
<string name="alarm">Budík</string>
<string name="timer">Časovač</string>
<string name="lap">Okruh</string>
<string name="stopwatch_stopped">Stopky boli zastavené</string>

View File

@ -5,7 +5,6 @@
<string name="vibrate">震動</string>
<string name="label">標籤</string>
<string name="no_days_selected">未選擇哪一天</string>
<string name="alarm">鬧鐘</string>
<string name="timer">計時器</string>
<string name="lap">分段</string>
<string name="stopwatch_stopped">碼錶已停止</string>

View File

@ -5,7 +5,6 @@
<string name="vibrate">Vibrate</string>
<string name="label">Label</string>
<string name="no_days_selected">No days selected</string>
<string name="alarm">Alarm</string>
<string name="timer">Timer</string>
<string name="lap">Lap</string>
<string name="stopwatch_stopped">Stopwatch has been stopped</string>