diff --git a/app/build.gradle b/app/build.gradle index 037b1338..a2b42682 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -45,6 +45,7 @@ dependencies { 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() diff --git a/app/src/main/kotlin/com/simplemobiletools/clock/activities/MainActivity.kt b/app/src/main/kotlin/com/simplemobiletools/clock/activities/MainActivity.kt index dcfa8309..923df6f4 100644 --- a/app/src/main/kotlin/com/simplemobiletools/clock/activities/MainActivity.kt +++ b/app/src/main/kotlin/com/simplemobiletools/clock/activities/MainActivity.kt @@ -2,10 +2,13 @@ package com.simplemobiletools.clock.activities import android.content.Intent import android.graphics.drawable.ColorDrawable +import android.net.Uri import android.os.Bundle import android.view.Menu import android.view.MenuItem import android.view.WindowManager +import com.google.gson.Gson +import com.google.gson.reflect.TypeToken import com.simplemobiletools.clock.BuildConfig import com.simplemobiletools.clock.R import com.simplemobiletools.clock.adapters.ViewPagerAdapter @@ -13,14 +16,14 @@ import com.simplemobiletools.clock.extensions.config import com.simplemobiletools.clock.extensions.dbHelper import com.simplemobiletools.clock.extensions.getNextAlarm import com.simplemobiletools.clock.extensions.rescheduleEnabledAlarms -import com.simplemobiletools.clock.helpers.OPEN_TAB -import com.simplemobiletools.clock.helpers.TABS_COUNT -import com.simplemobiletools.clock.helpers.TAB_CLOCK +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.models.FAQItem import kotlinx.android.synthetic.main.activity_main.* +import java.util.* class MainActivity : SimpleActivity() { private var storedUseEnglish = false @@ -118,6 +121,26 @@ class MainActivity : SimpleActivity() { } } + override fun onActivityResult(requestCode: Int, resultCode: Int, resultData: Intent?) { + super.onActivityResult(requestCode, resultCode, resultData) + if (requestCode == PICK_AUDIO_FILE_INTENT_ID && resultCode == RESULT_OK && resultData != null) { + storeNewAlarmSound(resultData.data) + } + } + + private fun storeNewAlarmSound(uri: Uri) { + var filename = getFilenameFromUri(uri) + if (filename.isEmpty()) { + filename = getString(R.string.alarm) + } + + val token = object : TypeToken>() {}.type + val yourAlarmSounds = Gson().fromJson>(config.yourAlarmSounds, token) ?: LinkedHashSet() + val newAlarmSoundId = (yourAlarmSounds.maxBy { it.id }?.id ?: YOUR_ALARM_SOUNDS_MIN_ID) + yourAlarmSounds.add(AlarmSound(newAlarmSoundId, filename, uri.toString())) + config.yourAlarmSounds = Gson().toJson(yourAlarmSounds) + } + private fun initFragments() { viewpager.adapter = ViewPagerAdapter(supportFragmentManager) viewpager.onPageChangeListener { diff --git a/app/src/main/kotlin/com/simplemobiletools/clock/dialogs/SelectAlarmSoundDialog.kt b/app/src/main/kotlin/com/simplemobiletools/clock/dialogs/SelectAlarmSoundDialog.kt index 53e995b8..08c92837 100644 --- a/app/src/main/kotlin/com/simplemobiletools/clock/dialogs/SelectAlarmSoundDialog.kt +++ b/app/src/main/kotlin/com/simplemobiletools/clock/dialogs/SelectAlarmSoundDialog.kt @@ -1,5 +1,6 @@ package com.simplemobiletools.clock.dialogs +import android.content.Intent import android.media.MediaPlayer import android.net.Uri import android.support.v7.app.AlertDialog @@ -9,6 +10,7 @@ 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.extensions.getAdjustedPrimaryColor import com.simplemobiletools.commons.extensions.setupDialogStuff @@ -23,6 +25,7 @@ class SelectAlarmSoundDialog(val activity: SimpleActivity, val currentUri: Strin private var alarmSounds = ArrayList() private var mediaPlayer = MediaPlayer() private val config = activity.config + private val dialog: AlertDialog init { activity.getAlarmSounds { @@ -36,7 +39,7 @@ class SelectAlarmSoundDialog(val activity: SimpleActivity, val currentUri: Strin val newAlarmSound = AlarmSound(ADD_NEW_SOUND_ID, activity.getString(R.string.add_new_sound), "") addAlarmSound(newAlarmSound, view.dialog_select_alarm_your_radio) - AlertDialog.Builder(activity) + dialog = AlertDialog.Builder(activity) .setOnDismissListener { mediaPlayer.stop() } .setPositiveButton(R.string.ok, { dialog, which -> dialogConfirmed() }) .setNegativeButton(R.string.cancel, null) @@ -68,7 +71,11 @@ class SelectAlarmSoundDialog(val activity: SimpleActivity, val currentUri: Strin private fun alarmClicked(alarmSound: AlarmSound) { if (alarmSound.id == ADD_NEW_SOUND_ID) { - + Intent(Intent.ACTION_GET_CONTENT).apply { + type = "audio/*" + activity.startActivityForResult(this, PICK_AUDIO_FILE_INTENT_ID) + } + dialog.dismiss() } else { try { mediaPlayer.stop() diff --git a/app/src/main/kotlin/com/simplemobiletools/clock/helpers/Config.kt b/app/src/main/kotlin/com/simplemobiletools/clock/helpers/Config.kt index def1bac2..e6b7434f 100644 --- a/app/src/main/kotlin/com/simplemobiletools/clock/helpers/Config.kt +++ b/app/src/main/kotlin/com/simplemobiletools/clock/helpers/Config.kt @@ -49,4 +49,8 @@ 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() } diff --git a/app/src/main/kotlin/com/simplemobiletools/clock/helpers/Constants.kt b/app/src/main/kotlin/com/simplemobiletools/clock/helpers/Constants.kt index 75aa864c..7fd08987 100644 --- a/app/src/main/kotlin/com/simplemobiletools/clock/helpers/Constants.kt +++ b/app/src/main/kotlin/com/simplemobiletools/clock/helpers/Constants.kt @@ -14,6 +14,7 @@ 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 = ":" @@ -23,7 +24,9 @@ const val DAY_MINUTES = 1440 const val DEFAULT_MAX_ALARM_REMINDER_SECS = 300 const val DEFAULT_MAX_TIMER_REMINDER_SECS = 60 const val HIDE_REMINDER_ACTIVITY = "hide_reminder_activity" +const val YOUR_ALARM_SOUNDS_MIN_ID = 1000 +const val PICK_AUDIO_FILE_INTENT_ID = 9994 const val REMINDER_ACTIVITY_INTENT_ID = 9995 const val OPEN_ALARMS_TAB_INTENT_ID = 9996 const val UPDATE_WIDGET_INTENT_ID = 9997 diff --git a/app/src/main/res/layout/dialog_select_alarm_sound.xml b/app/src/main/res/layout/dialog_select_alarm_sound.xml index b0e70a1b..00bce196 100644 --- a/app/src/main/res/layout/dialog_select_alarm_sound.xml +++ b/app/src/main/res/layout/dialog_select_alarm_sound.xml @@ -32,7 +32,7 @@ android:layout_width="wrap_content" android:layout_height="wrap_content" android:paddingLeft="@dimen/bigger_margin" - android:paddingTop="@dimen/bigger_margin" + android:paddingTop="@dimen/medium_margin" android:text="@string/system_sounds"/>