diff --git a/.idea/gradle.xml b/.idea/gradle.xml index add6ddc..169fd0d 100644 --- a/.idea/gradle.xml +++ b/.idea/gradle.xml @@ -8,28 +8,6 @@ diff --git a/.idea/vcs.xml b/.idea/vcs.xml index 257ba1f..35eb1dd 100644 --- a/.idea/vcs.xml +++ b/.idea/vcs.xml @@ -2,6 +2,5 @@ - \ No newline at end of file diff --git a/ExoPlayer b/ExoPlayer deleted file mode 160000 index 24a1926..0000000 --- a/ExoPlayer +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 24a19264dbf35e326bbd7bb36c232eb180e1e26d diff --git a/app/build.gradle b/app/build.gradle index d658187..0274953 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -29,8 +29,8 @@ android { applicationId "fr.forum_thalie.tsumugi" minSdkVersion 16 targetSdkVersion 29 - versionCode 113 - versionName "1.1.3" + versionCode 115 + versionName "1.1.5" testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" vectorDrawables.useSupportLibrary = true } @@ -69,11 +69,11 @@ dependencies { */ implementation "androidx.media:media:1.1.0" - //implementation 'com.google.android.exoplayer:exoplayer:2.11.1' - implementation project(':exoplayer-library') // uses local ExoPlayer clone, from dev-v2 branch (fixes ISO-8859-1 ICY metadata + implementation 'com.google.android.exoplayer:exoplayer:2.11.3' + //implementation project(':exoplayer-library') // uses local ExoPlayer clone, from dev-v2 branch (fixes ISO-8859-1 ICY metadata - implementation 'androidx.lifecycle:lifecycle-extensions:2.1.0' - implementation 'androidx.lifecycle:lifecycle-viewmodel-ktx:2.1.0' + implementation 'androidx.lifecycle:lifecycle-extensions:2.2.0' + implementation 'androidx.lifecycle:lifecycle-viewmodel-ktx:2.2.0' implementation 'androidx.recyclerview:recyclerview:1.1.0' implementation 'androidx.preference:preference:1.1.0' diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 7e20574..4bb94a6 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -48,7 +48,7 @@ android:configChanges="orientation|screenSize" android:label="@string/app_name" android:launchMode="singleTask" - android:screenOrientation="fullSensor"> + android:screenOrientation="fullUser"> diff --git a/app/src/main/assets/planning_example.json b/app/src/main/assets/planning_example.json index 94c582a..1ef0236 100644 --- a/app/src/main/assets/planning_example.json +++ b/app/src/main/assets/planning_example.json @@ -62,5 +62,5 @@ } ], "regular_programme" : "Programmation habituelle", - "timezone": "GMT+1" + "timezone": "Europe/Paris" } \ No newline at end of file diff --git a/app/src/main/java/fr/forum_thalie/tsumugi/NowPlayingNotification.kt b/app/src/main/java/fr/forum_thalie/tsumugi/NowPlayingNotification.kt index 2c8d0d4..c5c6b63 100644 --- a/app/src/main/java/fr/forum_thalie/tsumugi/NowPlayingNotification.kt +++ b/app/src/main/java/fr/forum_thalie/tsumugi/NowPlayingNotification.kt @@ -39,7 +39,7 @@ class NowPlayingNotification( mediaStyle = androidx.media.app.NotificationCompat.DecoratedMediaCustomViewStyle().also { it.setMediaSession(m.sessionToken) - it.setShowActionsInCompactView(0) // index 0 = show actions 0 and 1 (show action #0 (play/pause)) + it.setShowActionsInCompactView(0, 1) // index 0 = show actions 0 and 1 (show action #0 (play/pause)) it.setCancelButtonIntent(deleteIntent) } builder.setStyle(mediaStyle) @@ -83,7 +83,7 @@ class NowPlayingNotification( val intent2 = Intent(c, RadioService::class.java) intent2.putExtra("action", Actions.KILL.name) val pendingButtonIntent = PendingIntent.getService(c, 2, intent2, PendingIntent.FLAG_UPDATE_CURRENT) - val stopAction = NotificationCompat.Action.Builder(R.drawable.ic_stop,"Stop", pendingButtonIntent).build() + val stopAction = NotificationCompat.Action.Builder(R.drawable.ic_close,"Stop", pendingButtonIntent).build() builder.addAction(stopAction) if (isRinging) { diff --git a/app/src/main/java/fr/forum_thalie/tsumugi/RadioService.kt b/app/src/main/java/fr/forum_thalie/tsumugi/RadioService.kt index 3c4a37e..c98f641 100644 --- a/app/src/main/java/fr/forum_thalie/tsumugi/RadioService.kt +++ b/app/src/main/java/fr/forum_thalie/tsumugi/RadioService.kt @@ -72,7 +72,7 @@ class RadioService : MediaBrowserServiceCompat() { } 1 -> { //[REMOVE LOG CALLS]Log.d(tag, radioTag + "Headset is plugged") - headsetPluggedIn = true + headsetPluggedIn = true && PreferenceManager.getDefaultSharedPreferences(context).getBoolean("autoStartOnPlug", false) } else -> { //[REMOVE LOG CALLS]Log.d(tag, radioTag + "I have no idea what the headset state is") diff --git a/app/src/main/java/fr/forum_thalie/tsumugi/playerstore/PlayerStore.kt b/app/src/main/java/fr/forum_thalie/tsumugi/playerstore/PlayerStore.kt index e37fde9..7e2e03a 100644 --- a/app/src/main/java/fr/forum_thalie/tsumugi/playerstore/PlayerStore.kt +++ b/app/src/main/java/fr/forum_thalie/tsumugi/playerstore/PlayerStore.kt @@ -12,6 +12,7 @@ import org.json.JSONObject import java.net.URL import java.text.ParseException import java.text.SimpleDateFormat +import java.time.format.TextStyle import java.util.* import kotlin.collections.ArrayList @@ -61,7 +62,7 @@ class PlayerStore { { val dateFormat = SimpleDateFormat("yyyy-MM-dd hh:mm:ss z", Locale.getDefault()) try { - val t: Date? = dateFormat.parse("$s ${Planning.instance.timeZone.id}") + val t: Date? = dateFormat.parse("$s ${Planning.instance.timeZone.getDisplayName(Planning.instance.timeZone.useDaylightTime(), TimeZone.SHORT)}") //[REMOVE LOG CALLS]Log.d(tag, "date: $s -> $t") return t!!.time } catch (e: ParseException) { diff --git a/app/src/main/java/fr/forum_thalie/tsumugi/preferences/AlarmFragment.kt b/app/src/main/java/fr/forum_thalie/tsumugi/preferences/AlarmFragment.kt index d876246..4b07606 100644 --- a/app/src/main/java/fr/forum_thalie/tsumugi/preferences/AlarmFragment.kt +++ b/app/src/main/java/fr/forum_thalie/tsumugi/preferences/AlarmFragment.kt @@ -1,8 +1,10 @@ package fr.forum_thalie.tsumugi.preferences import android.app.TimePickerDialog +import android.content.Context import android.os.Bundle import android.util.Log +import androidx.appcompat.app.AppCompatActivity import androidx.core.content.edit import androidx.preference.* import fr.forum_thalie.tsumugi.* @@ -11,6 +13,12 @@ import fr.forum_thalie.tsumugi.alarm.RadioAlarm import java.util.* class AlarmFragment : PreferenceFragmentCompat() { + + override fun onAttach(context: Context) { + (activity as AppCompatActivity).supportActionBar?.title = context.getString(R.string.setupAlarmClock) + super.onAttach(context) + } + override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) { setPreferencesFromResource(R.xml.alarm_preferences, rootKey) diff --git a/app/src/main/java/fr/forum_thalie/tsumugi/preferences/CustomizeFragment.kt b/app/src/main/java/fr/forum_thalie/tsumugi/preferences/CustomizeFragment.kt index fe3a2cd..cedcec8 100644 --- a/app/src/main/java/fr/forum_thalie/tsumugi/preferences/CustomizeFragment.kt +++ b/app/src/main/java/fr/forum_thalie/tsumugi/preferences/CustomizeFragment.kt @@ -1,12 +1,19 @@ package fr.forum_thalie.tsumugi.preferences +import android.content.Context import android.os.Bundle import androidx.appcompat.app.AlertDialog +import androidx.appcompat.app.AppCompatActivity import androidx.preference.* import fr.forum_thalie.tsumugi.R import fr.forum_thalie.tsumugi.preferenceStore class CustomizeFragment : PreferenceFragmentCompat() { + override fun onAttach(context: Context) { + (activity as AppCompatActivity).supportActionBar?.title = context.getString(R.string.customizeAppBehavior) + super.onAttach(context) + } + override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) { setPreferencesFromResource(R.xml.customize_preferences, rootKey) diff --git a/app/src/main/java/fr/forum_thalie/tsumugi/preferences/MainPreferenceFragment.kt b/app/src/main/java/fr/forum_thalie/tsumugi/preferences/MainPreferenceFragment.kt index 61d30fd..4eb797f 100644 --- a/app/src/main/java/fr/forum_thalie/tsumugi/preferences/MainPreferenceFragment.kt +++ b/app/src/main/java/fr/forum_thalie/tsumugi/preferences/MainPreferenceFragment.kt @@ -5,9 +5,14 @@ import android.net.Uri import android.os.Bundle import fr.forum_thalie.tsumugi.R import android.annotation.SuppressLint +import androidx.appcompat.app.AppCompatActivity import androidx.preference.* class MainPreferenceFragment : PreferenceFragmentCompat() { + override fun onResume() { + super.onResume() + (activity as AppCompatActivity).supportActionBar?.title = context?.getString(R.string.settings) + } @SuppressLint("ApplySharedPref") override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) { diff --git a/app/src/main/java/fr/forum_thalie/tsumugi/preferences/SleepFragment.kt b/app/src/main/java/fr/forum_thalie/tsumugi/preferences/SleepFragment.kt index 4c62ae3..9041a23 100644 --- a/app/src/main/java/fr/forum_thalie/tsumugi/preferences/SleepFragment.kt +++ b/app/src/main/java/fr/forum_thalie/tsumugi/preferences/SleepFragment.kt @@ -1,13 +1,20 @@ package fr.forum_thalie.tsumugi.preferences +import android.content.Context import android.os.Bundle import androidx.preference.* import fr.forum_thalie.tsumugi.R import android.text.InputType +import androidx.appcompat.app.AppCompatActivity import fr.forum_thalie.tsumugi.alarm.RadioSleeper class SleepFragment : PreferenceFragmentCompat() { + override fun onAttach(context: Context) { + (activity as AppCompatActivity).supportActionBar?.title = context.getString(R.string.setSleepTimer) + super.onAttach(context) + } + override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) { setPreferencesFromResource(R.xml.sleep_preference, rootKey) diff --git a/app/src/main/java/fr/forum_thalie/tsumugi/ui/nowplaying/NowPlayingViewModel.kt b/app/src/main/java/fr/forum_thalie/tsumugi/ui/nowplaying/NowPlayingViewModel.kt index 627abeb..a6f56f3 100644 --- a/app/src/main/java/fr/forum_thalie/tsumugi/ui/nowplaying/NowPlayingViewModel.kt +++ b/app/src/main/java/fr/forum_thalie/tsumugi/ui/nowplaying/NowPlayingViewModel.kt @@ -1,9 +1,11 @@ package fr.forum_thalie.tsumugi.ui.nowplaying import android.widget.SeekBar +import androidx.core.content.edit import androidx.lifecycle.MutableLiveData import androidx.lifecycle.ViewModel import fr.forum_thalie.tsumugi.playerstore.PlayerStore +import fr.forum_thalie.tsumugi.preferenceStore class NowPlayingViewModel: ViewModel() { @@ -21,6 +23,10 @@ class NowPlayingViewModel: ViewModel() { override fun onProgressChanged(seekBar: SeekBar, progress: Int, fromUser: Boolean) { // updated continuously as the user slides the thumb PlayerStore.instance.volume.value = progress + preferenceStore.edit { + putInt("volume", progress) + commit() + } } override fun onStartTrackingTouch(seekBar: SeekBar) { diff --git a/app/src/main/java/fr/forum_thalie/tsumugi/ui/programme/ProgrammeAdapter.kt b/app/src/main/java/fr/forum_thalie/tsumugi/ui/programme/ProgrammeAdapter.kt index 6742d87..2869b81 100644 --- a/app/src/main/java/fr/forum_thalie/tsumugi/ui/programme/ProgrammeAdapter.kt +++ b/app/src/main/java/fr/forum_thalie/tsumugi/ui/programme/ProgrammeAdapter.kt @@ -1,18 +1,18 @@ package fr.forum_thalie.tsumugi.ui.programme import android.annotation.SuppressLint -import android.util.TypedValue import android.view.LayoutInflater import android.view.ViewGroup import android.widget.TextView import androidx.constraintlayout.widget.ConstraintLayout -import androidx.core.widget.TextViewCompat import androidx.recyclerview.widget.RecyclerView -import fr.forum_thalie.tsumugi.* +import fr.forum_thalie.tsumugi.R +import fr.forum_thalie.tsumugi.colorAccent +import fr.forum_thalie.tsumugi.colorWhited import fr.forum_thalie.tsumugi.planning.Planning import fr.forum_thalie.tsumugi.planning.Programme +import fr.forum_thalie.tsumugi.weekdaysSundayFirst import java.util.* -import kotlin.collections.ArrayList class ProgrammeAdapter(private val dataSet: ArrayList, private val day: String /*, diff --git a/app/src/main/res/drawable-anydpi/ic_close.xml b/app/src/main/res/drawable-anydpi/ic_close.xml new file mode 100644 index 0000000..443f138 --- /dev/null +++ b/app/src/main/res/drawable-anydpi/ic_close.xml @@ -0,0 +1,11 @@ + + + diff --git a/app/src/main/res/drawable-hdpi/ic_close.png b/app/src/main/res/drawable-hdpi/ic_close.png new file mode 100644 index 0000000..c661d15 Binary files /dev/null and b/app/src/main/res/drawable-hdpi/ic_close.png differ diff --git a/app/src/main/res/drawable-mdpi/ic_close.png b/app/src/main/res/drawable-mdpi/ic_close.png new file mode 100644 index 0000000..6060ea2 Binary files /dev/null and b/app/src/main/res/drawable-mdpi/ic_close.png differ diff --git a/app/src/main/res/drawable-xhdpi/ic_close.png b/app/src/main/res/drawable-xhdpi/ic_close.png new file mode 100644 index 0000000..91f6c7a Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/ic_close.png differ diff --git a/app/src/main/res/drawable-xxhdpi/ic_close.png b/app/src/main/res/drawable-xxhdpi/ic_close.png new file mode 100644 index 0000000..1e41c55 Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/ic_close.png differ diff --git a/app/src/main/res/values-fr/strings.xml b/app/src/main/res/values-fr/strings.xml index 0a381f0..c2e04af 100644 --- a/app/src/main/res/values-fr/strings.xml +++ b/app/src/main/res/values-fr/strings.xml @@ -37,16 +37,16 @@ Derniers titres Planning Programme régulier - Activer l\'alarme + Activer le réveil Choisir l\'heure Choisir les jours Choisir le délai de répétition d\'alarme (minutes) Volume au démarrage Utiliser une disposition horizontale adaptée Rendre les barres d\information persistantes - Configurer l\'alarme - Configurer la minuterie avant extinction - Paramètres de l\'application + Réveil + Minuterie avant extinction + Comportement de l\'application Reporter un bug Minuterie avant fermeture de l\'application Choisir une durée (en minutes) @@ -54,5 +54,7 @@ Choisir la fréquence de mise à jour quand la radio est stoppée Actualisation… Raffraîchir les données + \"Play\" au branchement de la prise casque + Paramètres diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 6408717..3847fed 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -64,9 +64,9 @@ Volume at startup Use horizontal split layout Make Snackbars persistent - Set up alarm clock - Set sleep timer - Customize app behavior + Alarm + Sleep timer + Customize app behavior Submit a bug (opens GitHub in a web browser) Sleep - close app after some time Set duration (minutes) @@ -74,5 +74,7 @@ Set update period when stopped Refreshing data… Refresh data + Auto play when plugging headphones + Settings diff --git a/app/src/main/res/xml/customize_preferences.xml b/app/src/main/res/xml/customize_preferences.xml index 6331d4a..1da9a2e 100644 --- a/app/src/main/res/xml/customize_preferences.xml +++ b/app/src/main/res/xml/customize_preferences.xml @@ -1,7 +1,7 @@ - + + diff --git a/settings.gradle b/settings.gradle index 79be6ca..6bfed1f 100644 --- a/settings.gradle +++ b/settings.gradle @@ -1,6 +1,2 @@ include ':app' rootProject.name='Tsumugi-app' - -gradle.ext.exoplayerRoot = './ExoPlayer' -gradle.ext.exoplayerModulePrefix = 'exoplayer-' -apply from: new File(gradle.ext.exoplayerRoot, 'core_settings.gradle')