MainActivity: add new theme picking with new sound
This commit is contained in:
parent
7f43a5c5d2
commit
f94aed8f99
|
@ -2,7 +2,10 @@ package io.lowrespalmtree.harvestdawn
|
||||||
|
|
||||||
import android.Manifest
|
import android.Manifest
|
||||||
import android.app.Activity
|
import android.app.Activity
|
||||||
|
import android.app.AlertDialog
|
||||||
import android.content.ContentValues
|
import android.content.ContentValues
|
||||||
|
import android.content.Context
|
||||||
|
import android.content.DialogInterface
|
||||||
import android.content.Intent
|
import android.content.Intent
|
||||||
import android.content.pm.PackageManager
|
import android.content.pm.PackageManager
|
||||||
import android.net.Uri
|
import android.net.Uri
|
||||||
|
@ -81,15 +84,10 @@ class MainActivity : AppCompatActivity() {
|
||||||
// automatically handle clicks on the Home/Up button, so long
|
// automatically handle clicks on the Home/Up button, so long
|
||||||
// as you specify a parent activity in AndroidManifest.xml.
|
// as you specify a parent activity in AndroidManifest.xml.
|
||||||
return when (item.itemId) {
|
return when (item.itemId) {
|
||||||
R.id.action_share -> {
|
R.id.action_share -> { share(); true }
|
||||||
share(); true
|
R.id.action_save -> { save(); true }
|
||||||
}
|
R.id.action_clear_cache -> { clearVideoCache(); true }
|
||||||
R.id.action_save -> {
|
R.id.action_pick_theme -> { showThemeDialog(); true }
|
||||||
save(); true
|
|
||||||
}
|
|
||||||
R.id.action_clear_cache -> {
|
|
||||||
clearVideoCache(); true
|
|
||||||
}
|
|
||||||
else -> super.onOptionsItemSelected(item)
|
else -> super.onOptionsItemSelected(item)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -185,9 +183,10 @@ class MainActivity : AppCompatActivity() {
|
||||||
|
|
||||||
// Save the soundtrack as well cause we can't pass a resource to FFMPEG.
|
// Save the soundtrack as well cause we can't pass a resource to FFMPEG.
|
||||||
// Should be done only once, then it's kept in app internal storage.
|
// Should be done only once, then it's kept in app internal storage.
|
||||||
val soundFile = File(filesDir, "harvestdawn.m4a")
|
val themeId = getThemeRawResource(getThemeId())
|
||||||
|
val soundFile = File(filesDir, "$themeId.m4a")
|
||||||
if (!soundFile.exists()) {
|
if (!soundFile.exists()) {
|
||||||
resources.openRawResource(R.raw.harvestdawn).use { resource ->
|
resources.openRawResource(themeId).use { resource ->
|
||||||
FileOutputStream(soundFile).use { fos ->
|
FileOutputStream(soundFile).use { fos ->
|
||||||
fos.buffered().write(resource.buffered().readBytes())
|
fos.buffered().write(resource.buffered().readBytes())
|
||||||
}
|
}
|
||||||
|
@ -346,6 +345,38 @@ class MainActivity : AppCompatActivity() {
|
||||||
startActivity(Intent.createChooser(shareIntent, getString(R.string.send)))
|
startActivity(Intent.createChooser(shareIntent, getString(R.string.send)))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private fun getThemeId() =
|
||||||
|
getSharedPreferences("app", Context.MODE_PRIVATE).getInt("theme", 0)
|
||||||
|
|
||||||
|
private fun setThemeId(id: Int) =
|
||||||
|
getSharedPreferences("app", Context.MODE_PRIVATE).edit().apply {
|
||||||
|
putInt("theme", id)
|
||||||
|
apply()
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun getThemeRawResource(id: Int) =
|
||||||
|
when (id) {
|
||||||
|
0 -> R.raw.harvestdawn
|
||||||
|
1 -> R.raw.sunriseofflutes
|
||||||
|
else -> R.raw.harvestdawn
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun showThemeDialog() {
|
||||||
|
val currentId = getThemeId()
|
||||||
|
val dialog = AlertDialog.Builder(this).run {
|
||||||
|
var selection = currentId
|
||||||
|
setTitle(R.string.action_theme)
|
||||||
|
setSingleChoiceItems(R.array.pick_theme, currentId) { _, which -> selection = which }
|
||||||
|
setPositiveButton(android.R.string.ok) { dialog, _ ->
|
||||||
|
setThemeId(selection)
|
||||||
|
dialog.dismiss()
|
||||||
|
}
|
||||||
|
setNegativeButton(android.R.string.cancel) { dialog, _ -> dialog.dismiss() }
|
||||||
|
create()
|
||||||
|
}
|
||||||
|
dialog.show()
|
||||||
|
}
|
||||||
|
|
||||||
private fun toast(text: String) {
|
private fun toast(text: String) {
|
||||||
Toast.makeText(this, text, Toast.LENGTH_SHORT).show()
|
Toast.makeText(this, text, Toast.LENGTH_SHORT).show()
|
||||||
}
|
}
|
||||||
|
|
|
@ -2,6 +2,11 @@
|
||||||
xmlns:app="http://schemas.android.com/apk/res-auto"
|
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||||
xmlns:tools="http://schemas.android.com/tools"
|
xmlns:tools="http://schemas.android.com/tools"
|
||||||
tools:context="io.lowrespalmtree.harvestdawn.MainActivity">
|
tools:context="io.lowrespalmtree.harvestdawn.MainActivity">
|
||||||
|
<item
|
||||||
|
android:id="@+id/action_pick_theme"
|
||||||
|
android:orderInCategory="100"
|
||||||
|
android:title="@string/action_theme"
|
||||||
|
app:showAsAction="never" />
|
||||||
<item
|
<item
|
||||||
android:id="@+id/action_save"
|
android:id="@+id/action_save"
|
||||||
android:orderInCategory="100"
|
android:orderInCategory="100"
|
||||||
|
|
BIN
app/src/main/res/raw/sunriseofflutes.m4a
Normal file
BIN
app/src/main/res/raw/sunriseofflutes.m4a
Normal file
Binary file not shown.
7
app/src/main/res/values/arrays.xml
Normal file
7
app/src/main/res/values/arrays.xml
Normal file
|
@ -0,0 +1,7 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<resources>
|
||||||
|
<string-array name="pick_theme">
|
||||||
|
<item>@string/theme_harvestdawn</item>
|
||||||
|
<item>@string/theme_sunriseofflutes</item>
|
||||||
|
</string-array>
|
||||||
|
</resources>
|
|
@ -7,4 +7,7 @@
|
||||||
<string name="send">Share</string>
|
<string name="send">Share</string>
|
||||||
<string name="action_save">Save</string>
|
<string name="action_save">Save</string>
|
||||||
<string name="action_clear_cache">Clear cache</string>
|
<string name="action_clear_cache">Clear cache</string>
|
||||||
|
<string name="action_theme">Theme</string>
|
||||||
|
<string name="theme_harvestdawn">Harvest Dawn</string>
|
||||||
|
<string name="theme_sunriseofflutes">Sunrise of Flutes</string>
|
||||||
</resources>
|
</resources>
|
Reference in a new issue