Compare commits

..

No commits in common. "master" and "v1.2.0" have entirely different histories.

104 changed files with 420 additions and 686 deletions

1
.idea/.name Normal file
View File

@ -0,0 +1 @@
Tsumugi-app

View File

@ -7,13 +7,13 @@
<option name="testRunner" value="GRADLE" /> <option name="testRunner" value="GRADLE" />
<option name="distributionType" value="DEFAULT_WRAPPED" /> <option name="distributionType" value="DEFAULT_WRAPPED" />
<option name="externalProjectPath" value="$PROJECT_DIR$" /> <option name="externalProjectPath" value="$PROJECT_DIR$" />
<option name="gradleJvm" value="Android Studio default JDK" />
<option name="modules"> <option name="modules">
<set> <set>
<option value="$PROJECT_DIR$" /> <option value="$PROJECT_DIR$" />
<option value="$PROJECT_DIR$/app" /> <option value="$PROJECT_DIR$/app" />
</set> </set>
</option> </option>
<option name="resolveModulePerSourceSet" value="false" />
</GradleProjectSettings> </GradleProjectSettings>
</option> </option>
</component> </component>

View File

@ -26,10 +26,5 @@
<option name="name" value="Google" /> <option name="name" value="Google" />
<option name="url" value="https://dl.google.com/dl/android/maven2/" /> <option name="url" value="https://dl.google.com/dl/android/maven2/" />
</remote-repository> </remote-repository>
<remote-repository>
<option name="id" value="MavenRepo" />
<option name="name" value="MavenRepo" />
<option name="url" value="https://repo.maven.apache.org/maven2/" />
</remote-repository>
</component> </component>
</project> </project>

View File

@ -16,21 +16,21 @@ configurations.all {
} }
android { android {
compileSdkVersion 32 compileSdkVersion 30
buildToolsVersion "30.0.1"
compileOptions { compileOptions {
sourceCompatibility JavaVersion.VERSION_11 sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_11 targetCompatibility JavaVersion.VERSION_1_8
} }
kotlinOptions { kotlinOptions {
jvmTarget = "11" jvmTarget = "1.8"
} }
defaultConfig { defaultConfig {
applicationId "fr.riff_app.riff" applicationId "fr.forum_thalie.tsumugi"
minSdkVersion 16 minSdkVersion 16
targetSdkVersion 32 targetSdkVersion 30
multiDexEnabled true versionCode 120
versionCode 121 versionName "1.2.0"
versionName "1.2.1"
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
vectorDrawables.useSupportLibrary = true vectorDrawables.useSupportLibrary = true
} }
@ -48,9 +48,6 @@ android {
} }
dependencies { dependencies {
def multidex_version = "2.0.1"
implementation "androidx.multidex:multidex:$multidex_version"
implementation fileTree(dir: 'libs', include: ['*.jar']) implementation fileTree(dir: 'libs', include: ['*.jar'])
/* /*
implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk8:$kotlin_version" implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk8:$kotlin_version"
@ -71,18 +68,15 @@ dependencies {
*/ */
implementation "androidx.media:media:1.5.0" implementation "androidx.media:media:1.1.0"
//noinspection GradleDependency
implementation 'com.google.android.exoplayer:exoplayer:2.11.3' 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 project(':exoplayer-library') // uses local ExoPlayer clone, from dev-v2 branch (fixes ISO-8859-1 ICY metadata
implementation 'androidx.lifecycle:lifecycle-extensions:2.2.0' implementation 'androidx.lifecycle:lifecycle-extensions:2.2.0'
implementation 'androidx.lifecycle:lifecycle-viewmodel-ktx:2.4.1' implementation 'androidx.lifecycle:lifecycle-viewmodel-ktx:2.2.0'
implementation 'androidx.recyclerview:recyclerview:1.2.1' implementation 'androidx.recyclerview:recyclerview:1.1.0'
implementation 'androidx.preference:preference-ktx:1.2.0' implementation 'androidx.preference:preference:1.1.0'
// jsoup HTML parser library @ https://jsoup.org/ // jsoup HTML parser library @ https://jsoup.org/
// implementation 'org.jsoup:jsoup:1.12.1' // implementation 'org.jsoup:jsoup:1.12.1'

View File

@ -0,0 +1,24 @@
package fr.forum_thalie.tsumugi
import androidx.test.platform.app.InstrumentationRegistry
import androidx.test.ext.junit.runners.AndroidJUnit4
import org.junit.Test
import org.junit.runner.RunWith
import org.junit.Assert.*
/**
* Instrumented test, which will execute on an Android device.
*
* See [testing documentation](http://d.android.com/tools/testing).
*/
@RunWith(AndroidJUnit4::class)
class ExampleInstrumentedTest {
@Test
fun useAppContext() {
// Context of the app under test.
val appContext = InstrumentationRegistry.getInstrumentation().targetContext
assertEquals("fr.forum_thalie.tsumugi", appContext.packageName)
}
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 75 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 65 KiB

View File

@ -1,14 +0,0 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="108dp"
android:height="108dp"
android:viewportWidth="108"
android:viewportHeight="108">
<group android:scaleX="0.84375"
android:scaleY="0.84375">
<path
android:strokeWidth="1"
android:pathData="M-22.4,-18.02h249.46v189.63h-249.46z"
android:fillColor="#000000"
android:strokeColor="#ffffff"/>
</group>
</vector>

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.8 KiB

View File

@ -1,5 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
<background android:drawable="@drawable/ic_launcher_background"/>
<foreground android:drawable="@mipmap/ic_launcher_foreground"/>
</adaptive-icon>

View File

@ -1,5 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
<background android:drawable="@drawable/ic_launcher_background"/>
<foreground android:drawable="@mipmap/ic_launcher_foreground"/>
</adaptive-icon>

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 10 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 17 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 9.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 34 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 19 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 56 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 28 KiB

View File

@ -1,7 +1,7 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android" <manifest xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools" xmlns:tools="http://schemas.android.com/tools"
package="fr.riff_app.riff"> package="fr.forum_thalie.tsumugi">
<uses-permission android:name="android.permission.VIBRATE" /> <uses-permission android:name="android.permission.VIBRATE" />
<uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.INTERNET" />
@ -10,8 +10,7 @@
<uses-permission android:name="android.permission.BLUETOOTH" /> <uses-permission android:name="android.permission.BLUETOOTH" />
<uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" /> <uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" />
<uses-permission android:name="android.permission.FOREGROUND_SERVICE" /> <!-- needed for API 28 --> <uses-permission android:name="android.permission.FOREGROUND_SERVICE" /> <!-- needed for API 28 -->
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.SCHEDULE_EXACT_ALARM" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.SET_ALARM"/> <uses-permission android:name="android.permission.SET_ALARM"/>
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/> <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>
@ -23,8 +22,8 @@
android:label="@string/app_name" android:label="@string/app_name"
android:supportsRtl="true" android:supportsRtl="true"
android:theme="@style/AppTheme.Launcher" android:theme="@style/AppTheme.Launcher"
tools:ignore="AllowBackup,GoogleAppIndexingWarning" tools:ignore="AllowBackup,GoogleAppIndexingWarning">
android:name="androidx.multidex.MultiDexApplication">
<service <service
android:name=".RadioService" android:name=".RadioService"
android:enabled="true" android:enabled="true"
@ -36,12 +35,11 @@
<receiver android:name=".BootBroadcastReceiver" <receiver android:name=".BootBroadcastReceiver"
android:directBootAware="true" android:directBootAware="true"
tools:targetApi="n" tools:targetApi="n">
android:exported="true">
<intent-filter> <intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED" /> <action android:name="android.intent.action.BOOT_COMPLETED" />
<action android:name="fr.riff_app.riff.PLAY_OR_FALLBACK" /> <action android:name="fr.forum_thalie.tsumugi.PLAY_OR_FALLBACK" />
<action android:name="fr.riff_app.riff.NOTIFY" /> <!-- this is for Snooze --> <action android:name="fr.forum_thalie.tsumugi.NOTIFY" /> <!-- this is for Snooze -->
<category android:name="android.intent.category.DEFAULT"/> <category android:name="android.intent.category.DEFAULT"/>
</intent-filter> </intent-filter>
</receiver> </receiver>
@ -49,9 +47,9 @@
<activity <activity
android:name=".MainActivity" android:name=".MainActivity"
android:configChanges="orientation|screenSize" android:configChanges="orientation|screenSize"
android:label="@string/app_name"
android:launchMode="singleTask" android:launchMode="singleTask"
android:screenOrientation="fullUser" android:screenOrientation="fullUser">
android:exported="true">
<intent-filter> <intent-filter>
<action android:name="android.intent.action.MAIN" /> <action android:name="android.intent.action.MAIN" />
@ -65,8 +63,7 @@
android:parentActivityName=".MainActivity" android:parentActivityName=".MainActivity"
android:screenOrientation="fullUser" /> android:screenOrientation="fullUser" />
<receiver android:name="androidx.media.session.MediaButtonReceiver" <receiver android:name="androidx.media.session.MediaButtonReceiver">
android:exported="true">
<intent-filter> <intent-filter>
<action android:name="android.intent.action.MEDIA_BUTTON" /> <action android:name="android.intent.action.MEDIA_BUTTON" />
</intent-filter> </intent-filter>

View File

@ -1,76 +1,64 @@
{ {
"planning": [ "planning": [
{ {
"title": "La playlist Base Rock", "title": "Le Classique du Matin",
"periodicity": "1111111", "periodicity": "1111111",
"hour_begin": "00:00", "hour_begin": "6:00",
"hour_end": "7:00"
},
{
"title": "Jeux Vidéos Matin",
"periodicity": "1111100",
"hour_begin": "09:00",
"hour_end": "10:30"
},
{
"title": "Anime Matin",
"periodicity": "1111100",
"hour_begin": "10:30",
"hour_end": "12:00"
},
{
"title": "Jeux Vidéos Aprem'",
"periodicity": "1111111",
"hour_begin": "14:00",
"hour_end": "15:30"
},
{
"title": "Anime Aprem'",
"periodicity": "1111111",
"hour_begin": "15:30",
"hour_end": "17:00"
},
{
"title": "Jeux Vidéos Soirée",
"periodicity": "1111100",
"hour_begin": "19:00",
"hour_end": "20:00"
},
{
"title": "Anime Soirée",
"periodicity": "1111100",
"hour_begin": "20:00",
"hour_end": "21:00" "hour_end": "21:00"
}, },
{ {
"title": "Only Covers", "title": "Anime Nuit",
"periodicity": "1000000", "periodicity": "1111111",
"hour_begin": "20:30", "hour_begin": "00:00",
"hour_end": "00:00" "hour_end": "01:00"
}, },
{ {
"title": "Only Indies", "title": "Jeux Vidéos Nuit",
"periodicity": "0100000", "periodicity": "1111111",
"hour_begin": "20:30", "hour_begin": "01:00",
"hour_end": "00:00" "hour_end": "02:00"
}, },
{ {
"title": "Only Acoustic", "title": "Programmation nocturne",
"periodicity": "0010000", "periodicity": "1111111",
"hour_begin": "20:30", "hour_begin": "02:00",
"hour_end": "00:00" "hour_end": "06:00"
},
{
"title": "Only Sweden",
"periodicity": "0001000",
"hour_begin": "20:30",
"hour_end": "00:00"
},
{
"title": "Only Lives",
"periodicity": "0000100",
"hour_begin": "20:30",
"hour_end": "00:00"
},
{
"title": "Only Games",
"periodicity": "0000010",
"hour_begin": "21:00",
"hour_end": "23:15"
},
{
"title": "Beyond [Azraël]",
"periodicity": "0100000",
"hour_begin": "21:00",
"hour_end": "23:00"
},
{
"title": "Piste Rouge [Louise et Trotsky]",
"periodicity": "0010000",
"hour_begin": "21:00",
"hour_end": "23:00"
},
{
"title": "Katamariff [Herondil & co.]",
"periodicity": "0000100",
"hour_begin": "21:00",
"hour_end": "23:00"
},
{
"title": "Le 4/4 Jazz [Melomaniaque]",
"periodicity": "0000001",
"hour_begin": "21:00",
"hour_end": "22:00"
},
{
"title": "Beyond, la playlist",
"periodicity": "0000001",
"hour_begin": "22:10",
"hour_end": "00:00"
} }
], ],
"regular_programme" : "Programmation habituelle", "regular_programme" : "Programmation habituelle",

View File

@ -1,4 +1,4 @@
package fr.riff_app.riff package fr.forum_thalie.tsumugi
enum class Actions enum class Actions
{ {

View File

@ -1,8 +1,8 @@
package fr.riff_app.riff package fr.forum_thalie.tsumugi
import android.os.AsyncTask import android.os.AsyncTask
import android.util.Log import android.util.Log
import fr.riff_app.riff.playerstore.PlayerStore import fr.forum_thalie.tsumugi.playerstore.PlayerStore
class Async(val handler: (Any?) -> Any?, val post: (Any?) -> Unit = {}, class Async(val handler: (Any?) -> Any?, val post: (Any?) -> Unit = {},
private val actionOnError: ActionOnError = ActionOnError.RESET, private val parameters: Any? = null) : private val actionOnError: ActionOnError = ActionOnError.RESET, private val parameters: Any? = null) :

View File

@ -1,4 +1,4 @@
package fr.riff_app.riff package fr.forum_thalie.tsumugi
import android.content.Intent import android.content.Intent
import android.os.Bundle import android.os.Bundle

View File

@ -1,4 +1,4 @@
package fr.riff_app.riff package fr.forum_thalie.tsumugi
import android.app.Notification import android.app.Notification
import android.app.NotificationChannel import android.app.NotificationChannel
@ -50,7 +50,6 @@ abstract class BaseNotification(private val notificationChannelId: String,
notificationManager.notify(notificationId, notification) notificationManager.notify(notificationId, notification)
} }
@RequiresApi(Build.VERSION_CODES.M)
open fun create(c: Context) { open fun create(c: Context) {
notificationManager = c.getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager notificationManager = c.getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager
@ -59,7 +58,7 @@ abstract class BaseNotification(private val notificationChannelId: String,
// thanks to the launchMode specified in the Manifest : android:launchMode="singleTop" // thanks to the launchMode specified in the Manifest : android:launchMode="singleTop"
val pendingIntent = PendingIntent.getActivity( val pendingIntent = PendingIntent.getActivity(
c, 0, c, 0,
notificationIntent, PendingIntent.FLAG_IMMUTABLE notificationIntent, 0
) )
var channelID = "" var channelID = ""

View File

@ -1,4 +1,4 @@
package fr.riff_app.riff package fr.forum_thalie.tsumugi
import android.content.BroadcastReceiver import android.content.BroadcastReceiver
import android.content.Context import android.content.Context
@ -6,9 +6,9 @@ import android.content.Intent
import android.os.Build import android.os.Build
import android.util.Log import android.util.Log
import androidx.preference.PreferenceManager import androidx.preference.PreferenceManager
import fr.riff_app.riff.alarm.RadioAlarm import fr.forum_thalie.tsumugi.alarm.RadioAlarm
import fr.riff_app.riff.planning.Planning import fr.forum_thalie.tsumugi.planning.Planning
import fr.riff_app.riff.playerstore.PlayerStore import fr.forum_thalie.tsumugi.playerstore.PlayerStore
class BootBroadcastReceiver : BroadcastReceiver(){ class BootBroadcastReceiver : BroadcastReceiver(){

View File

@ -1,4 +1,4 @@
package fr.riff_app.riff package fr.forum_thalie.tsumugi
import android.os.Bundle import android.os.Bundle
import com.google.android.material.bottomnavigation.BottomNavigationView import com.google.android.material.bottomnavigation.BottomNavigationView
@ -11,13 +11,13 @@ import androidx.core.content.res.ResourcesCompat
import androidx.lifecycle.LiveData import androidx.lifecycle.LiveData
import androidx.lifecycle.Observer import androidx.lifecycle.Observer
import androidx.navigation.NavController import androidx.navigation.NavController
import fr.riff_app.riff.playerstore.PlayerStore import fr.forum_thalie.tsumugi.playerstore.PlayerStore
import java.util.Timer import java.util.Timer
import android.view.MenuItem import android.view.MenuItem
import com.google.android.material.snackbar.Snackbar import com.google.android.material.snackbar.Snackbar
import fr.riff_app.riff.alarm.RadioAlarm import fr.forum_thalie.tsumugi.alarm.RadioAlarm
import fr.riff_app.riff.planning.Planning import fr.forum_thalie.tsumugi.planning.Planning
/* Log to file import /* Log to file import

View File

@ -1,4 +1,4 @@
package fr.riff_app.riff package fr.forum_thalie.tsumugi
import android.content.Intent import android.content.Intent

View File

@ -1,14 +1,12 @@
package fr.riff_app.riff package fr.forum_thalie.tsumugi
import android.app.PendingIntent import android.app.PendingIntent
import android.content.Context import android.content.Context
import android.content.Intent import android.content.Intent
import android.os.Build
import android.support.v4.media.session.MediaSessionCompat import android.support.v4.media.session.MediaSessionCompat
import android.support.v4.media.session.PlaybackStateCompat import android.support.v4.media.session.PlaybackStateCompat
import androidx.annotation.RequiresApi
import androidx.core.app.NotificationCompat import androidx.core.app.NotificationCompat
import fr.riff_app.riff.playerstore.PlayerStore import fr.forum_thalie.tsumugi.playerstore.PlayerStore
class NowPlayingNotification( class NowPlayingNotification(
notificationChannelId: String, notificationChannelId: String,
@ -36,7 +34,7 @@ class NowPlayingNotification(
// got it right // got it right
val delIntent = Intent(c, RadioService::class.java) val delIntent = Intent(c, RadioService::class.java)
delIntent.putExtra("action", Actions.KILL.name) delIntent.putExtra("action", Actions.KILL.name)
val deleteIntent = PendingIntent.getService(c, 0, delIntent, PendingIntent.FLAG_NO_CREATE + PendingIntent.FLAG_IMMUTABLE) val deleteIntent = PendingIntent.getService(c, 0, delIntent, PendingIntent.FLAG_NO_CREATE)
builder.setDeleteIntent(deleteIntent) builder.setDeleteIntent(deleteIntent)
mediaStyle = androidx.media.app.NotificationCompat.DecoratedMediaCustomViewStyle().also { mediaStyle = androidx.media.app.NotificationCompat.DecoratedMediaCustomViewStyle().also {
@ -48,7 +46,6 @@ class NowPlayingNotification(
update(c) update(c)
} }
@RequiresApi(Build.VERSION_CODES.M)
fun update(c: Context, isUpdatingNotificationButton: Boolean = false, isRinging: Boolean = false) { fun update(c: Context, isUpdatingNotificationButton: Boolean = false, isRinging: Boolean = false) {
if (isUpdatingNotificationButton) if (isUpdatingNotificationButton)
@ -75,17 +72,17 @@ class NowPlayingNotification(
playPauseAction = if (PlayerStore.instance.playbackState.value == PlaybackStateCompat.STATE_PLAYING) { playPauseAction = if (PlayerStore.instance.playbackState.value == PlaybackStateCompat.STATE_PLAYING) {
intent.putExtra("action", Actions.PAUSE.name) intent.putExtra("action", Actions.PAUSE.name)
val pendingButtonIntent = PendingIntent.getService(c, 1, intent, PendingIntent.FLAG_UPDATE_CURRENT + PendingIntent.FLAG_IMMUTABLE) val pendingButtonIntent = PendingIntent.getService(c, 1, intent, PendingIntent.FLAG_UPDATE_CURRENT)
NotificationCompat.Action.Builder(R.drawable.ic_pause, "Pause", pendingButtonIntent).build() NotificationCompat.Action.Builder(R.drawable.ic_pause, "Pause", pendingButtonIntent).build()
} else { } else {
intent.putExtra("action", Actions.PLAY.name) intent.putExtra("action", Actions.PLAY.name)
val pendingButtonIntent = PendingIntent.getService(c, 1, intent, PendingIntent.FLAG_UPDATE_CURRENT + PendingIntent.FLAG_IMMUTABLE) val pendingButtonIntent = PendingIntent.getService(c, 1, intent, PendingIntent.FLAG_UPDATE_CURRENT)
NotificationCompat.Action.Builder(R.drawable.ic_play,"Play", pendingButtonIntent).build() NotificationCompat.Action.Builder(R.drawable.ic_play,"Play", pendingButtonIntent).build()
} }
builder.addAction(playPauseAction) builder.addAction(playPauseAction)
val intent2 = Intent(c, RadioService::class.java) val intent2 = Intent(c, RadioService::class.java)
intent2.putExtra("action", Actions.KILL.name) intent2.putExtra("action", Actions.KILL.name)
val pendingButtonIntent = PendingIntent.getService(c, 2, intent2, PendingIntent.FLAG_UPDATE_CURRENT + PendingIntent.FLAG_IMMUTABLE) val pendingButtonIntent = PendingIntent.getService(c, 2, intent2, PendingIntent.FLAG_UPDATE_CURRENT)
val stopAction = NotificationCompat.Action.Builder(R.drawable.ic_close,"Stop", pendingButtonIntent).build() val stopAction = NotificationCompat.Action.Builder(R.drawable.ic_close,"Stop", pendingButtonIntent).build()
builder.addAction(stopAction) builder.addAction(stopAction)
@ -95,7 +92,7 @@ class NowPlayingNotification(
val snoozeIntent = Intent(c, RadioService::class.java) val snoozeIntent = Intent(c, RadioService::class.java)
snoozeIntent.putExtra("action", Actions.SNOOZE.name) snoozeIntent.putExtra("action", Actions.SNOOZE.name)
val pendingSnoozeIntent = PendingIntent.getService(c, 5, snoozeIntent, PendingIntent.FLAG_UPDATE_CURRENT + PendingIntent.FLAG_IMMUTABLE) val pendingSnoozeIntent = PendingIntent.getService(c, 5, snoozeIntent, PendingIntent.FLAG_UPDATE_CURRENT)
val snoozeAction = NotificationCompat.Action.Builder(R.drawable.ic_alarm, "Snooze ($snoozeMinutes min.)", pendingSnoozeIntent ).build() val snoozeAction = NotificationCompat.Action.Builder(R.drawable.ic_alarm, "Snooze ($snoozeMinutes min.)", pendingSnoozeIntent ).build()
if (snoozeMinutes > 0) if (snoozeMinutes > 0)
builder.addAction(snoozeAction) builder.addAction(snoozeAction)

View File

@ -1,8 +1,8 @@
package fr.riff_app.riff package fr.forum_thalie.tsumugi
import android.os.Bundle import android.os.Bundle
import android.view.MenuItem import android.view.MenuItem
import fr.riff_app.riff.preferences.* import fr.forum_thalie.tsumugi.preferences.*
class ParametersActivity : BaseActivity() { class ParametersActivity : BaseActivity() {

View File

@ -1,4 +1,4 @@
package fr.riff_app.riff package fr.forum_thalie.tsumugi
import android.app.Service import android.app.Service
import android.content.BroadcastReceiver import android.content.BroadcastReceiver
@ -32,10 +32,10 @@ import androidx.media.AudioManagerCompat
import androidx.preference.PreferenceManager import androidx.preference.PreferenceManager
import com.google.android.exoplayer2.* import com.google.android.exoplayer2.*
import com.google.android.exoplayer2.metadata.icy.* import com.google.android.exoplayer2.metadata.icy.*
import fr.riff_app.riff.alarm.RadioAlarm import fr.forum_thalie.tsumugi.alarm.RadioAlarm
import fr.riff_app.riff.alarm.RadioSleeper import fr.forum_thalie.tsumugi.alarm.RadioSleeper
import fr.riff_app.riff.planning.Planning import fr.forum_thalie.tsumugi.planning.Planning
import fr.riff_app.riff.playerstore.PlayerStore import fr.forum_thalie.tsumugi.playerstore.PlayerStore
import java.util.* import java.util.*
import kotlin.math.exp import kotlin.math.exp
import kotlin.math.ln import kotlin.math.ln
@ -193,8 +193,7 @@ class RadioService : MediaBrowserServiceCompat() {
// Define managers // Define managers
telephonyManager = getSystemService(Context.TELEPHONY_SERVICE) as TelephonyManager telephonyManager = getSystemService(Context.TELEPHONY_SERVICE) as TelephonyManager
// telephonyManager?.listen(phoneStateListener, PhoneStateListener.LISTEN_CALL_STATE) telephonyManager?.listen(phoneStateListener, PhoneStateListener.LISTEN_CALL_STATE)
audioManager = getSystemService(Context.AUDIO_SERVICE) as AudioManager audioManager = getSystemService(Context.AUDIO_SERVICE) as AudioManager
//define the audioFocusRequest //define the audioFocusRequest
@ -428,7 +427,7 @@ class RadioService : MediaBrowserServiceCompat() {
) )
// This is the MediaSource representing the media to be played. // This is the MediaSource representing the media to be played.
radioMediaSource = ProgressiveMediaSource.Factory(dataSourceFactory) radioMediaSource = ProgressiveMediaSource.Factory(dataSourceFactory)
.createMediaSource(Uri.parse(getString(R.string.STREAM_URL_RIFF))) .createMediaSource(Uri.parse(getString(R.string.STREAM_URL_TSUMUGI)))
fallbackMediaSource = ProgressiveMediaSource.Factory(dataSourceFactory) fallbackMediaSource = ProgressiveMediaSource.Factory(dataSourceFactory)
.createMediaSource(Uri.parse("file:///android_asset/the_stream_is_down.mp3")) .createMediaSource(Uri.parse("file:///android_asset/the_stream_is_down.mp3"))
@ -515,10 +514,6 @@ class RadioService : MediaBrowserServiceCompat() {
if (result != AudioManager.AUDIOFOCUS_REQUEST_GRANTED) { if (result != AudioManager.AUDIOFOCUS_REQUEST_GRANTED) {
return return
} }
if (mediaSession.controller.playbackState.state == PlaybackStateCompat.STATE_PLAYING && !isRinging && isAlarmStopped)
{
return //nothing to do here
}
PlayerStore.instance.playbackState.value = PlaybackStateCompat.STATE_PLAYING PlayerStore.instance.playbackState.value = PlaybackStateCompat.STATE_PLAYING
@ -535,7 +530,6 @@ class RadioService : MediaBrowserServiceCompat() {
} }
// START PLAYBACK, LET'S ROCK // START PLAYBACK, LET'S ROCK
player.playWhenReady = true
nowPlayingNotification.update(this, isUpdatingNotificationButton = true, isRinging = isRinging) nowPlayingNotification.update(this, isUpdatingNotificationButton = true, isRinging = isRinging)
playbackStateBuilder.setState( playbackStateBuilder.setState(
@ -545,6 +539,7 @@ class RadioService : MediaBrowserServiceCompat() {
SystemClock.elapsedRealtime() SystemClock.elapsedRealtime()
) )
mediaSession.setPlaybackState(playbackStateBuilder.build()) mediaSession.setPlaybackState(playbackStateBuilder.build())
player.playWhenReady = true
//[REMOVE LOG CALLS]Log.d(tag, radioTag + "begin playing") //[REMOVE LOG CALLS]Log.d(tag, radioTag + "begin playing")
} }

View File

@ -1,7 +1,7 @@
package fr.riff_app.riff package fr.forum_thalie.tsumugi
import android.support.v4.media.session.PlaybackStateCompat import android.support.v4.media.session.PlaybackStateCompat
import fr.riff_app.riff.playerstore.PlayerStore import fr.forum_thalie.tsumugi.playerstore.PlayerStore
import java.util.* import java.util.*
class ApiFetchTick : TimerTask() { class ApiFetchTick : TimerTask() {

View File

@ -1,12 +1,12 @@
package fr.riff_app.riff package fr.forum_thalie.tsumugi
import android.content.SharedPreferences import android.content.SharedPreferences
import android.content.res.ColorStateList import android.content.res.ColorStateList
import kotlin.collections.ArrayList import kotlin.collections.ArrayList
const val tag = "fr.riff_app.riff" const val tag = "fr.forum_thalie.tsumugi"
const val noConnectionValue = "" const val noConnectionValue = ""
const val streamDownValue = "Riff est HS !" // we don't want this value to be displaed in the "last played" screen. const val streamDownValue = "Tsumugi est HS !" // we don't want this value to be displaed in the "last played" screen.
val weekdaysArray : Array<String> = arrayOf( "Lundi", "Mardi", "Mercredi", "Jeudi", "Vendredi", "Samedi", "Dimanche") val weekdaysArray : Array<String> = arrayOf( "Lundi", "Mardi", "Mercredi", "Jeudi", "Vendredi", "Samedi", "Dimanche")
const val newsDateTimePattern = "EEE, d MMM yyyy HH:mm:ss Z" const val newsDateTimePattern = "EEE, d MMM yyyy HH:mm:ss Z"
const val newsDisplayDatePattern = "dd MMM yyyy" const val newsDisplayDatePattern = "dd MMM yyyy"

View File

@ -1,16 +1,14 @@
package fr.riff_app.riff.alarm package fr.forum_thalie.tsumugi.alarm
import android.app.AlarmManager import android.app.AlarmManager
import android.app.PendingIntent import android.app.PendingIntent
import android.content.Context import android.content.Context
import android.content.Intent import android.content.Intent
import android.os.Build
import android.util.Log import android.util.Log
import androidx.annotation.RequiresApi
import androidx.core.app.AlarmManagerCompat import androidx.core.app.AlarmManagerCompat
import fr.riff_app.riff.BootBroadcastReceiver import fr.forum_thalie.tsumugi.BootBroadcastReceiver
import androidx.preference.PreferenceManager import androidx.preference.PreferenceManager
import fr.riff_app.riff.* import fr.forum_thalie.tsumugi.*
import java.util.* import java.util.*
import kotlin.collections.ArrayList import kotlin.collections.ArrayList
@ -29,31 +27,13 @@ class RadioAlarm {
{ {
alarmIntent = Intent(c, BootBroadcastReceiver::class.java).let { intent -> alarmIntent = Intent(c, BootBroadcastReceiver::class.java).let { intent ->
intent.putExtra("action", "$tag.${Actions.PLAY_OR_FALLBACK.name}") intent.putExtra("action", "$tag.${Actions.PLAY_OR_FALLBACK.name}")
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { PendingIntent.getBroadcast(c, 0, intent, 0)
PendingIntent.getBroadcast(
c,
0,
intent,
PendingIntent.FLAG_IMMUTABLE
)
} else {
PendingIntent.getBroadcast(
c,
0,
intent,
0
)
}
} }
showIntent = Intent(c, ParametersActivity::class.java).let { intent -> showIntent = Intent(c, ParametersActivity::class.java).let { intent ->
intent.putExtra("action", "alarm") intent.putExtra("action", "alarm")
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
PendingIntent.getActivity(c, 0, intent, PendingIntent.FLAG_IMMUTABLE)
} else {
PendingIntent.getActivity(c, 0, intent, 0) PendingIntent.getActivity(c, 0, intent, 0)
} }
} }
}
fun cancelAlarm(c: Context) fun cancelAlarm(c: Context)
@ -63,7 +43,6 @@ class RadioAlarm {
alarmManager.cancel(alarmIntent) alarmManager.cancel(alarmIntent)
} }
@RequiresApi(Build.VERSION_CODES.M)
fun setNextAlarm(c: Context, isForce: Boolean = false, forceTime: Int? = null, forceDays: Set<String>? = null) fun setNextAlarm(c: Context, isForce: Boolean = false, forceTime: Int? = null, forceDays: Set<String>? = null)
{ {
defineIntents(c) defineIntents(c)
@ -75,7 +54,7 @@ class RadioAlarm {
val showIntent = Intent(c, ParametersActivity::class.java).let { intent -> val showIntent = Intent(c, ParametersActivity::class.java).let { intent ->
intent.putExtra("action", ActionOpenParam.ALARM.name) intent.putExtra("action", ActionOpenParam.ALARM.name)
PendingIntent.getActivity(c, 0, intent, PendingIntent.FLAG_IMMUTABLE) PendingIntent.getActivity(c, 0, intent, 0)
} }
val time = findNextAlarmTime(c, forceTime, forceDays) val time = findNextAlarmTime(c, forceTime, forceDays)
if (time > 0) if (time > 0)

View File

@ -1,16 +1,14 @@
package fr.riff_app.riff.alarm package fr.forum_thalie.tsumugi.alarm
import android.app.AlarmManager import android.app.AlarmManager
import android.app.PendingIntent import android.app.PendingIntent
import android.content.Context import android.content.Context
import android.content.Intent import android.content.Intent
import android.os.Build
import android.util.Log import android.util.Log
import androidx.annotation.RequiresApi
import androidx.core.app.AlarmManagerCompat import androidx.core.app.AlarmManagerCompat
import androidx.lifecycle.MutableLiveData import androidx.lifecycle.MutableLiveData
import androidx.preference.PreferenceManager import androidx.preference.PreferenceManager
import fr.riff_app.riff.* import fr.forum_thalie.tsumugi.*
class RadioSleeper { class RadioSleeper {
@ -32,20 +30,18 @@ class RadioSleeper {
private lateinit var sleepIntent: PendingIntent private lateinit var sleepIntent: PendingIntent
private lateinit var fadeOutIntent: PendingIntent private lateinit var fadeOutIntent: PendingIntent
@RequiresApi(Build.VERSION_CODES.M)
private fun defineIntents(c: Context) private fun defineIntents(c: Context)
{ {
sleepIntent = Intent(c, RadioService::class.java).let { intent -> sleepIntent = Intent(c, RadioService::class.java).let { intent ->
intent.putExtra("action", Actions.KILL.name) intent.putExtra("action", Actions.KILL.name)
PendingIntent.getService(c, 99, intent, PendingIntent.FLAG_IMMUTABLE) PendingIntent.getService(c, 99, intent, 0)
} }
fadeOutIntent = Intent(c, RadioService::class.java).let { intent -> fadeOutIntent = Intent(c, RadioService::class.java).let { intent ->
intent.putExtra("action", Actions.FADE_OUT.name) intent.putExtra("action", Actions.FADE_OUT.name)
PendingIntent.getService(c, 98, intent, PendingIntent.FLAG_IMMUTABLE) PendingIntent.getService(c, 98, intent, 0)
} }
} }
@RequiresApi(Build.VERSION_CODES.M)
fun setSleep(c: Context, isForce: Boolean = false, forceDuration: Long? = null) fun setSleep(c: Context, isForce: Boolean = false, forceDuration: Long? = null)
{ {
defineIntents(c) defineIntents(c)

View File

@ -1,11 +1,11 @@
package fr.riff_app.riff.planning package fr.forum_thalie.tsumugi.planning
import android.content.Context import android.content.Context
import androidx.lifecycle.MutableLiveData import androidx.lifecycle.MutableLiveData
import fr.riff_app.riff.Async import fr.forum_thalie.tsumugi.Async
import fr.riff_app.riff.R import fr.forum_thalie.tsumugi.R
import fr.riff_app.riff.noConnectionValue import fr.forum_thalie.tsumugi.noConnectionValue
import fr.riff_app.riff.weekdays import fr.forum_thalie.tsumugi.weekdays
import org.json.JSONObject import org.json.JSONObject
import java.io.IOException import java.io.IOException
import java.net.URL import java.net.URL

View File

@ -1,8 +1,8 @@
package fr.riff_app.riff.planning package fr.forum_thalie.tsumugi.planning
import android.util.Log import android.util.Log
import fr.riff_app.riff.tag import fr.forum_thalie.tsumugi.tag
import fr.riff_app.riff.weekdays import fr.forum_thalie.tsumugi.weekdays
import java.util.* import java.util.*
import kotlin.collections.ArrayList import kotlin.collections.ArrayList

View File

@ -1,4 +1,4 @@
package fr.riff_app.riff.playerstore package fr.forum_thalie.tsumugi.playerstore
import android.content.Context import android.content.Context
import android.graphics.Bitmap import android.graphics.Bitmap
@ -6,8 +6,8 @@ import android.graphics.BitmapFactory
import android.support.v4.media.session.PlaybackStateCompat import android.support.v4.media.session.PlaybackStateCompat
import android.util.Log import android.util.Log
import androidx.lifecycle.MutableLiveData import androidx.lifecycle.MutableLiveData
import fr.riff_app.riff.* import fr.forum_thalie.tsumugi.*
import fr.riff_app.riff.planning.Planning import fr.forum_thalie.tsumugi.planning.Planning
import org.json.JSONObject import org.json.JSONObject
import java.net.URL import java.net.URL
import java.text.ParseException import java.text.ParseException

View File

@ -1,8 +1,8 @@
package fr.riff_app.riff.playerstore package fr.forum_thalie.tsumugi.playerstore
import androidx.core.text.HtmlCompat import androidx.core.text.HtmlCompat
import androidx.lifecycle.MutableLiveData import androidx.lifecycle.MutableLiveData
import fr.riff_app.riff.noConnectionValue import fr.forum_thalie.tsumugi.noConnectionValue
class Song(artistTitle: String = "", _id : Int = 0) { class Song(artistTitle: String = "", _id : Int = 0) {

View File

@ -1,4 +1,4 @@
package fr.riff_app.riff.preferences package fr.forum_thalie.tsumugi.preferences
import android.content.Context import android.content.Context
import android.content.Intent import android.content.Intent
@ -14,10 +14,10 @@ import androidx.preference.PreferenceFragmentCompat
import androidx.preference.PreferenceManager import androidx.preference.PreferenceManager
import androidx.preference.SeekBarPreference import androidx.preference.SeekBarPreference
import androidx.preference.SwitchPreferenceCompat import androidx.preference.SwitchPreferenceCompat
import fr.riff_app.riff.Actions import fr.forum_thalie.tsumugi.Actions
import fr.riff_app.riff.R import fr.forum_thalie.tsumugi.R
import fr.riff_app.riff.RadioService import fr.forum_thalie.tsumugi.RadioService
import fr.riff_app.riff.playerstore.PlayerStore import fr.forum_thalie.tsumugi.playerstore.PlayerStore
import kotlinx.coroutines.* import kotlinx.coroutines.*
import kotlin.coroutines.CoroutineContext import kotlin.coroutines.CoroutineContext
import kotlin.math.max import kotlin.math.max

View File

@ -1,4 +1,4 @@
package fr.riff_app.riff.preferences package fr.forum_thalie.tsumugi.preferences
import android.app.TimePickerDialog import android.app.TimePickerDialog
import android.content.Context import android.content.Context
@ -11,10 +11,10 @@ import androidx.appcompat.app.AlertDialog
import androidx.appcompat.app.AppCompatActivity import androidx.appcompat.app.AppCompatActivity
import androidx.core.content.edit import androidx.core.content.edit
import androidx.preference.* import androidx.preference.*
import fr.riff_app.riff.* import fr.forum_thalie.tsumugi.*
import fr.riff_app.riff.R import fr.forum_thalie.tsumugi.R
import fr.riff_app.riff.alarm.RadioAlarm import fr.forum_thalie.tsumugi.alarm.RadioAlarm
import fr.riff_app.riff.playerstore.PlayerStore import fr.forum_thalie.tsumugi.playerstore.PlayerStore
import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.GlobalScope.coroutineContext import kotlinx.coroutines.GlobalScope.coroutineContext
import kotlinx.coroutines.Job import kotlinx.coroutines.Job
@ -47,7 +47,7 @@ class AlarmFragment : PreferenceFragmentCompat() {
fun updateIsWakingUpSummary(preference: SwitchPreferenceCompat?, newValue: Boolean? = true, forceTime: Int? = null, forceDays: Set<String>? = null) fun updateIsWakingUpSummary(preference: SwitchPreferenceCompat?, newValue: Boolean? = true, forceTime: Int? = null, forceDays: Set<String>? = null)
{ {
val dateLong = RadioAlarm.instance.findNextAlarmTime(requireContext(), forceTime, forceDays) val dateLong = RadioAlarm.instance.findNextAlarmTime(context!!, forceTime, forceDays)
val calendar = Calendar.getInstance() val calendar = Calendar.getInstance()
calendar.timeInMillis = dateLong calendar.timeInMillis = dateLong
if (newValue == true && calendar.timeInMillis > 0) if (newValue == true && calendar.timeInMillis > 0)
@ -65,14 +65,14 @@ class AlarmFragment : PreferenceFragmentCompat() {
val hourOfDayDefault = 7 val hourOfDayDefault = 7
val minuteDefault = 0 val minuteDefault = 0
if (!PreferenceManager.getDefaultSharedPreferences(requireContext()).contains("alarmTimeFromMidnight")) if (!PreferenceManager.getDefaultSharedPreferences(context!!).contains("alarmTimeFromMidnight"))
{ {
PreferenceManager.getDefaultSharedPreferences(requireContext()).edit { PreferenceManager.getDefaultSharedPreferences(context!!).edit {
putInt("alarmTimeFromMidnight", (60*hourOfDayDefault+minuteDefault)) putInt("alarmTimeFromMidnight", (60*hourOfDayDefault+minuteDefault))
commit() commit()
} }
} }
val time = PreferenceManager.getDefaultSharedPreferences(requireContext()).getInt("alarmTimeFromMidnight", (60*hourOfDayDefault+minuteDefault)) val time = PreferenceManager.getDefaultSharedPreferences(context!!).getInt("alarmTimeFromMidnight", (60*hourOfDayDefault+minuteDefault))
val hourOfDay = time / 60 val hourOfDay = time / 60
val minute = time % 60 val minute = time % 60
timeSet?.summary = "${if (hourOfDay < 10) "0" else ""}$hourOfDay:${if (minute < 10) "0" else ""}$minute" timeSet?.summary = "${if (hourOfDay < 10) "0" else ""}$hourOfDay:${if (minute < 10) "0" else ""}$minute"
@ -80,16 +80,16 @@ class AlarmFragment : PreferenceFragmentCompat() {
timeSet?.setOnPreferenceClickListener { timeSet?.setOnPreferenceClickListener {
val timePickerOnTimeSetListener = TimePickerDialog.OnTimeSetListener { _, hourOfDay, minute -> val timePickerOnTimeSetListener = TimePickerDialog.OnTimeSetListener { _, hourOfDay, minute ->
PreferenceManager.getDefaultSharedPreferences(requireContext()).edit { PreferenceManager.getDefaultSharedPreferences(context!!).edit {
putInt("alarmTimeFromMidnight", (60*hourOfDay+minute)) putInt("alarmTimeFromMidnight", (60*hourOfDay+minute))
commit() commit()
} }
timeSet.summary = "${if (hourOfDay < 10) "0" else ""}$hourOfDay:${if (minute < 10) "0" else ""}$minute" timeSet.summary = "${if (hourOfDay < 10) "0" else ""}$hourOfDay:${if (minute < 10) "0" else ""}$minute"
RadioAlarm.instance.cancelAlarm(requireContext()) RadioAlarm.instance.cancelAlarm(context!!)
RadioAlarm.instance.setNextAlarm(requireContext(), isForce = true, forceTime = hourOfDay*60+minute) RadioAlarm.instance.setNextAlarm(context!!, isForce = true, forceTime = hourOfDay*60+minute)
updateIsWakingUpSummary(isWakingUp, isWakingUp?.isChecked, forceTime = hourOfDay*60+minute) updateIsWakingUpSummary(isWakingUp, isWakingUp?.isChecked, forceTime = hourOfDay*60+minute)
} }
val timeNew = PreferenceManager.getDefaultSharedPreferences(requireContext()).getInt("alarmTimeFromMidnight", 7*60) val timeNew = PreferenceManager.getDefaultSharedPreferences(context!!).getInt("alarmTimeFromMidnight", 7*60)
val hourOfDayNew = timeNew / 60 val hourOfDayNew = timeNew / 60
val minuteNew = timeNew % 60 val minuteNew = timeNew % 60
val timePicker = TimePickerDialog(context, timePickerOnTimeSetListener, hourOfDayNew, minuteNew, true) val timePicker = TimePickerDialog(context, timePickerOnTimeSetListener, hourOfDayNew, minuteNew, true)
@ -103,8 +103,8 @@ class AlarmFragment : PreferenceFragmentCompat() {
val fullWeek = weekdays.toSet() val fullWeek = weekdays.toSet()
val workingWeek = weekdays.toSet().minusElement(weekdays.last()).minusElement(weekdays.elementAt(weekdays.size - 2)) val workingWeek = weekdays.toSet().minusElement(weekdays.last()).minusElement(weekdays.elementAt(weekdays.size - 2))
val listOfDays = when (newValue) { val listOfDays = when (newValue) {
fullWeek -> requireContext().getString(R.string.every_day) fullWeek -> context!!.getString(R.string.every_day)
workingWeek -> requireContext().getString(R.string.working_days) workingWeek -> context!!.getString(R.string.working_days)
else -> { else -> {
// build ORDERED LIST of days... I don't know why the original one is in shambles!! // build ORDERED LIST of days... I don't know why the original one is in shambles!!
val fullWeekOrdered = weekdays val fullWeekOrdered = weekdays
@ -119,12 +119,12 @@ class AlarmFragment : PreferenceFragmentCompat() {
preference?.summary = listOfDays preference?.summary = listOfDays
} }
updateDays(alarmDays, PreferenceManager.getDefaultSharedPreferences(requireContext()).getStringSet("alarmDays", setOf())) updateDays(alarmDays, PreferenceManager.getDefaultSharedPreferences(context).getStringSet("alarmDays", setOf()))
alarmDays?.setOnPreferenceChangeListener { preference, newValue -> alarmDays?.setOnPreferenceChangeListener { preference, newValue ->
@Suppress("UNCHECKED_CAST") @Suppress("UNCHECKED_CAST")
updateDays(preference as MultiSelectListPreference, newValue as Set<String>) updateDays(preference as MultiSelectListPreference, newValue as Set<String>)
RadioAlarm.instance.cancelAlarm(requireContext()) RadioAlarm.instance.cancelAlarm(context!!)
RadioAlarm.instance.setNextAlarm(requireContext(), isForce = true, forceDays = newValue) RadioAlarm.instance.setNextAlarm(context!!, isForce = true, forceDays = newValue)
updateIsWakingUpSummary(isWakingUp, isWakingUp?.isChecked, forceDays = newValue) updateIsWakingUpSummary(isWakingUp, isWakingUp?.isChecked, forceDays = newValue)
true true
} }
@ -133,9 +133,9 @@ class AlarmFragment : PreferenceFragmentCompat() {
isWakingUp?.setOnPreferenceChangeListener { _, newValue -> isWakingUp?.setOnPreferenceChangeListener { _, newValue ->
if (newValue as Boolean) if (newValue as Boolean)
RadioAlarm.instance.setNextAlarm(requireContext(), isForce = true) RadioAlarm.instance.setNextAlarm(context!!, isForce = true)
else else
RadioAlarm.instance.cancelAlarm(requireContext()) RadioAlarm.instance.cancelAlarm(context!!)
timeSet?.isEnabled = newValue timeSet?.isEnabled = newValue
alarmDays?.isEnabled = newValue alarmDays?.isEnabled = newValue
snoozeDuration?.isEnabled = newValue snoozeDuration?.isEnabled = newValue

View File

@ -1,12 +1,12 @@
package fr.riff_app.riff.preferences package fr.forum_thalie.tsumugi.preferences
import android.content.Context import android.content.Context
import android.os.Bundle import android.os.Bundle
import androidx.appcompat.app.AlertDialog import androidx.appcompat.app.AlertDialog
import androidx.appcompat.app.AppCompatActivity import androidx.appcompat.app.AppCompatActivity
import androidx.preference.* import androidx.preference.*
import fr.riff_app.riff.R import fr.forum_thalie.tsumugi.R
import fr.riff_app.riff.preferenceStore import fr.forum_thalie.tsumugi.preferenceStore
class CustomizeFragment : PreferenceFragmentCompat() { class CustomizeFragment : PreferenceFragmentCompat() {
override fun onAttach(context: Context) { override fun onAttach(context: Context) {

View File

@ -1,9 +1,9 @@
package fr.riff_app.riff.preferences package fr.forum_thalie.tsumugi.preferences
import android.content.Intent import android.content.Intent
import android.net.Uri import android.net.Uri
import android.os.Bundle import android.os.Bundle
import fr.riff_app.riff.R import fr.forum_thalie.tsumugi.R
import android.annotation.SuppressLint import android.annotation.SuppressLint
import androidx.appcompat.app.AppCompatActivity import androidx.appcompat.app.AppCompatActivity
import androidx.preference.* import androidx.preference.*

View File

@ -1,12 +1,12 @@
package fr.riff_app.riff.preferences package fr.forum_thalie.tsumugi.preferences
import android.content.Context import android.content.Context
import android.os.Bundle import android.os.Bundle
import androidx.preference.* import androidx.preference.*
import fr.riff_app.riff.R import fr.forum_thalie.tsumugi.R
import android.text.InputType import android.text.InputType
import androidx.appcompat.app.AppCompatActivity import androidx.appcompat.app.AppCompatActivity
import fr.riff_app.riff.alarm.RadioSleeper import fr.forum_thalie.tsumugi.alarm.RadioSleeper
class SleepFragment : PreferenceFragmentCompat() { class SleepFragment : PreferenceFragmentCompat() {

View File

@ -1,4 +1,4 @@
package fr.riff_app.riff.ui package fr.forum_thalie.tsumugi.ui
import androidx.fragment.app.Fragment import androidx.fragment.app.Fragment
import androidx.fragment.app.FragmentPagerAdapter import androidx.fragment.app.FragmentPagerAdapter

View File

@ -1,4 +1,4 @@
package fr.riff_app.riff.ui.news package fr.forum_thalie.tsumugi.ui.news
import java.util.* import java.util.*

View File

@ -1,4 +1,4 @@
package fr.riff_app.riff.ui.news package fr.forum_thalie.tsumugi.ui.news
import android.annotation.SuppressLint import android.annotation.SuppressLint
import android.app.Activity import android.app.Activity
@ -20,8 +20,8 @@ import androidx.core.content.ContextCompat
import androidx.core.text.HtmlCompat import androidx.core.text.HtmlCompat
import androidx.core.widget.TextViewCompat import androidx.core.widget.TextViewCompat
import androidx.recyclerview.widget.RecyclerView import androidx.recyclerview.widget.RecyclerView
import fr.riff_app.riff.R import fr.forum_thalie.tsumugi.R
import fr.riff_app.riff.newsDisplayDatePattern import fr.forum_thalie.tsumugi.newsDisplayDatePattern
import java.io.IOException import java.io.IOException
import java.io.InputStream import java.io.InputStream
import java.net.URL import java.net.URL

View File

@ -1,4 +1,4 @@
package fr.riff_app.riff.ui.news package fr.forum_thalie.tsumugi.ui.news
import android.os.Build import android.os.Build
import android.os.Bundle import android.os.Bundle
@ -12,7 +12,7 @@ import androidx.lifecycle.ViewModelProviders
import androidx.recyclerview.widget.LinearLayoutManager import androidx.recyclerview.widget.LinearLayoutManager
import androidx.recyclerview.widget.RecyclerView import androidx.recyclerview.widget.RecyclerView
import androidx.swiperefreshlayout.widget.SwipeRefreshLayout import androidx.swiperefreshlayout.widget.SwipeRefreshLayout
import fr.riff_app.riff.R import fr.forum_thalie.tsumugi.R
class NewsFragment : Fragment() { class NewsFragment : Fragment() {

View File

@ -1,4 +1,4 @@
package fr.riff_app.riff.ui.news package fr.forum_thalie.tsumugi.ui.news
import android.content.Context import android.content.Context
import android.os.Build import android.os.Build
@ -8,9 +8,9 @@ import android.webkit.WebView
import androidx.lifecycle.ViewModel import androidx.lifecycle.ViewModel
import androidx.recyclerview.widget.RecyclerView import androidx.recyclerview.widget.RecyclerView
import com.prof.rssparser.Parser import com.prof.rssparser.Parser
import fr.riff_app.riff.R import fr.forum_thalie.tsumugi.R
import fr.riff_app.riff.newsDateTimePattern import fr.forum_thalie.tsumugi.newsDateTimePattern
import fr.riff_app.riff.tag import fr.forum_thalie.tsumugi.tag
import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.Job import kotlinx.coroutines.Job

View File

@ -1,4 +1,4 @@
package fr.riff_app.riff.ui.news package fr.forum_thalie.tsumugi.ui.news
import android.annotation.SuppressLint import android.annotation.SuppressLint
import android.content.Intent import android.content.Intent

View File

@ -1,4 +1,4 @@
package fr.riff_app.riff.ui.nowplaying package fr.forum_thalie.tsumugi.ui.nowplaying
import android.annotation.SuppressLint import android.annotation.SuppressLint
import android.content.ClipboardManager import android.content.ClipboardManager
@ -16,11 +16,11 @@ import androidx.constraintlayout.widget.ConstraintSet
import androidx.lifecycle.Observer import androidx.lifecycle.Observer
import com.google.android.material.snackbar.BaseTransientBottomBar import com.google.android.material.snackbar.BaseTransientBottomBar
import com.google.android.material.snackbar.Snackbar import com.google.android.material.snackbar.Snackbar
import fr.riff_app.riff.* import fr.forum_thalie.tsumugi.*
import fr.riff_app.riff.alarm.RadioSleeper import fr.forum_thalie.tsumugi.alarm.RadioSleeper
import fr.riff_app.riff.planning.Planning import fr.forum_thalie.tsumugi.planning.Planning
import fr.riff_app.riff.playerstore.PlayerStore import fr.forum_thalie.tsumugi.playerstore.PlayerStore
import fr.riff_app.riff.playerstore.Song import fr.forum_thalie.tsumugi.playerstore.Song
class NowPlayingFragment : Fragment() { class NowPlayingFragment : Fragment() {
@ -89,7 +89,7 @@ class NowPlayingFragment : Fragment() {
Planning.instance.currentProgramme.observe(viewLifecycleOwner, Observer { Planning.instance.currentProgramme.observe(viewLifecycleOwner, Observer {
currentProgrammeText.text = "${requireContext().getString(R.string.current_programme)} $it" currentProgrammeText.text = "${context!!.getString(R.string.current_programme)} $it"
}) })
@ -184,7 +184,7 @@ class NowPlayingFragment : Fragment() {
val setClipboardListener: View.OnLongClickListener = View.OnLongClickListener { val setClipboardListener: View.OnLongClickListener = View.OnLongClickListener {
val text = PlayerStore.instance.currentSong.artist.value + " - " + PlayerStore.instance.currentSong.title.value val text = PlayerStore.instance.currentSong.artist.value + " - " + PlayerStore.instance.currentSong.title.value
val clipboard = requireContext().getSystemService(Context.CLIPBOARD_SERVICE) as ClipboardManager val clipboard = context!!.getSystemService(Context.CLIPBOARD_SERVICE) as ClipboardManager
val clip = android.content.ClipData.newPlainText("Copied Text", text) val clip = android.content.ClipData.newPlainText("Copied Text", text)
clipboard.setPrimaryClip(clip) clipboard.setPrimaryClip(clip)
val snackBarLength = if (preferenceStore.getBoolean("snackbarPersistent", false)) val snackBarLength = if (preferenceStore.getBoolean("snackbarPersistent", false))

View File

@ -1,11 +1,11 @@
package fr.riff_app.riff.ui.nowplaying package fr.forum_thalie.tsumugi.ui.nowplaying
import android.widget.SeekBar import android.widget.SeekBar
import androidx.core.content.edit import androidx.core.content.edit
import androidx.lifecycle.MutableLiveData import androidx.lifecycle.MutableLiveData
import androidx.lifecycle.ViewModel import androidx.lifecycle.ViewModel
import fr.riff_app.riff.playerstore.PlayerStore import fr.forum_thalie.tsumugi.playerstore.PlayerStore
import fr.riff_app.riff.preferenceStore import fr.forum_thalie.tsumugi.preferenceStore
class NowPlayingViewModel: ViewModel() { class NowPlayingViewModel: ViewModel() {

View File

@ -1,4 +1,4 @@
package fr.riff_app.riff.ui.programme package fr.forum_thalie.tsumugi.ui.programme
import android.annotation.SuppressLint import android.annotation.SuppressLint
import android.view.LayoutInflater import android.view.LayoutInflater
@ -6,12 +6,12 @@ import android.view.ViewGroup
import android.widget.TextView import android.widget.TextView
import androidx.constraintlayout.widget.ConstraintLayout import androidx.constraintlayout.widget.ConstraintLayout
import androidx.recyclerview.widget.RecyclerView import androidx.recyclerview.widget.RecyclerView
import fr.riff_app.riff.R import fr.forum_thalie.tsumugi.R
import fr.riff_app.riff.colorAccent import fr.forum_thalie.tsumugi.colorAccent
import fr.riff_app.riff.colorWhited import fr.forum_thalie.tsumugi.colorWhited
import fr.riff_app.riff.planning.Planning import fr.forum_thalie.tsumugi.planning.Planning
import fr.riff_app.riff.planning.Programme import fr.forum_thalie.tsumugi.planning.Programme
import fr.riff_app.riff.weekdaysSundayFirst import fr.forum_thalie.tsumugi.weekdaysSundayFirst
import java.util.* import java.util.*
class ProgrammeAdapter(private val dataSet: ArrayList<Programme>, private val day: String class ProgrammeAdapter(private val dataSet: ArrayList<Programme>, private val day: String

View File

@ -1,4 +1,4 @@
package fr.riff_app.riff.ui.programme package fr.forum_thalie.tsumugi.ui.programme
import android.os.Bundle import android.os.Bundle
import android.view.LayoutInflater import android.view.LayoutInflater
@ -9,10 +9,10 @@ import androidx.lifecycle.Observer
import androidx.lifecycle.ViewModelProviders import androidx.lifecycle.ViewModelProviders
import androidx.recyclerview.widget.LinearLayoutManager import androidx.recyclerview.widget.LinearLayoutManager
import androidx.recyclerview.widget.RecyclerView import androidx.recyclerview.widget.RecyclerView
import fr.riff_app.riff.R import fr.forum_thalie.tsumugi.R
import fr.riff_app.riff.planning.Planning import fr.forum_thalie.tsumugi.planning.Planning
import fr.riff_app.riff.planning.Programme import fr.forum_thalie.tsumugi.planning.Programme
import fr.riff_app.riff.weekdays import fr.forum_thalie.tsumugi.weekdays
class ProgrammeDayFragment : Fragment() { class ProgrammeDayFragment : Fragment() {

View File

@ -1,4 +1,4 @@
package fr.riff_app.riff.ui.programme package fr.forum_thalie.tsumugi.ui.programme
import androidx.lifecycle.ViewModel import androidx.lifecycle.ViewModel

View File

@ -1,4 +1,4 @@
package fr.riff_app.riff.ui.programme package fr.forum_thalie.tsumugi.ui.programme
import android.os.Bundle import android.os.Bundle
import android.util.Log import android.util.Log
@ -9,10 +9,10 @@ import androidx.fragment.app.Fragment
import androidx.fragment.app.FragmentPagerAdapter import androidx.fragment.app.FragmentPagerAdapter
import androidx.viewpager.widget.ViewPager import androidx.viewpager.widget.ViewPager
import com.google.android.material.tabs.TabLayout import com.google.android.material.tabs.TabLayout
import fr.riff_app.riff.R import fr.forum_thalie.tsumugi.R
import fr.riff_app.riff.planning.Planning import fr.forum_thalie.tsumugi.planning.Planning
import fr.riff_app.riff.ui.APagerAdapter import fr.forum_thalie.tsumugi.ui.APagerAdapter
import fr.riff_app.riff.weekdays import fr.forum_thalie.tsumugi.weekdays
import java.util.* import java.util.*
class ProgrammeFragment : Fragment() { class ProgrammeFragment : Fragment() {

View File

@ -1,4 +1,4 @@
package fr.riff_app.riff.ui.songs package fr.forum_thalie.tsumugi.ui.songs
import android.os.Bundle import android.os.Bundle
import android.util.Log import android.util.Log
@ -9,10 +9,10 @@ import androidx.fragment.app.Fragment
import androidx.fragment.app.FragmentPagerAdapter import androidx.fragment.app.FragmentPagerAdapter
import androidx.viewpager.widget.ViewPager import androidx.viewpager.widget.ViewPager
import com.google.android.material.tabs.TabLayout import com.google.android.material.tabs.TabLayout
import fr.riff_app.riff.R import fr.forum_thalie.tsumugi.R
import fr.riff_app.riff.ui.APagerAdapter import fr.forum_thalie.tsumugi.ui.APagerAdapter
import fr.riff_app.riff.ui.programme.ProgrammeDayFragment import fr.forum_thalie.tsumugi.ui.programme.ProgrammeDayFragment
import fr.riff_app.riff.ui.songs.queuelp.LastPlayedFragment import fr.forum_thalie.tsumugi.ui.songs.queuelp.LastPlayedFragment
class SongsFragment : Fragment() { class SongsFragment : Fragment() {

View File

@ -1,4 +1,4 @@
package fr.riff_app.riff.ui.songs.queuelp package fr.forum_thalie.tsumugi.ui.songs.queuelp
import android.os.Bundle import android.os.Bundle
import android.util.Log import android.util.Log
@ -9,8 +9,8 @@ import android.view.ViewGroup
import androidx.lifecycle.Observer import androidx.lifecycle.Observer
import androidx.recyclerview.widget.LinearLayoutManager import androidx.recyclerview.widget.LinearLayoutManager
import androidx.recyclerview.widget.RecyclerView import androidx.recyclerview.widget.RecyclerView
import fr.riff_app.riff.R import fr.forum_thalie.tsumugi.R
import fr.riff_app.riff.playerstore.PlayerStore import fr.forum_thalie.tsumugi.playerstore.PlayerStore
/** /**
* A simple [Fragment] subclass. * A simple [Fragment] subclass.

View File

@ -1,4 +1,4 @@
package fr.riff_app.riff.ui.songs.queuelp package fr.forum_thalie.tsumugi.ui.songs.queuelp
import android.annotation.SuppressLint import android.annotation.SuppressLint
import android.graphics.Color import android.graphics.Color
@ -8,11 +8,11 @@ import android.view.ViewGroup
import androidx.constraintlayout.widget.ConstraintLayout import androidx.constraintlayout.widget.ConstraintLayout
import androidx.core.content.res.ResourcesCompat import androidx.core.content.res.ResourcesCompat
import androidx.recyclerview.widget.RecyclerView import androidx.recyclerview.widget.RecyclerView
import fr.riff_app.riff.R import fr.forum_thalie.tsumugi.R
import fr.riff_app.riff.colorBlue import fr.forum_thalie.tsumugi.colorBlue
import fr.riff_app.riff.colorWhited import fr.forum_thalie.tsumugi.colorWhited
import fr.riff_app.riff.playerstore.Song import fr.forum_thalie.tsumugi.playerstore.Song
import fr.riff_app.riff.tag import fr.forum_thalie.tsumugi.tag
import kotlinx.android.synthetic.main.song_view.view.* import kotlinx.android.synthetic.main.song_view.view.*
import kotlin.collections.ArrayList import kotlin.collections.ArrayList

View File

@ -1,11 +1,11 @@
<layer-list xmlns:android="http://schemas.android.com/apk/res/android" <layer-list xmlns:android="http://schemas.android.com/apk/res/android"
android:opacity="opaque"> android:opacity="opaque">
<!-- The background color, preferably the same as your normal theme --> <!-- The background color, preferably the same as your normal theme -->
<item android:drawable="@color/black"/> <item android:drawable="@color/colorAccent"/>
<!-- Your product logo - 144dp color version of your app icon --> <!-- Your product logo - 144dp color version of your app icon -->
<item <item
android:drawable="@mipmap/ic_launcher" android:drawable="@drawable/ic_tsumugi_lineart"
android:gravity="center" android:gravity="center"
android:height="144dp" android:height="144dp"
android:width="144dp" android:width="144dp"

View File

@ -1,11 +1,11 @@
<?xml version="1.0" encoding="utf-8"?>
<vector xmlns:android="http://schemas.android.com/apk/res/android" <vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="128dp" android:width="108dp"
android:height="128dp" android:height="108dp"
android:viewportWidth="128" android:viewportWidth="108"
android:viewportHeight="128"> android:viewportHeight="108"
>
<path <path
android:strokeWidth="1" android:fillColor="@color/colorAccent"
android:pathData="M-22.4,-18.02h249.46v189.63h-249.46z" android:pathData="M0,0h108v108h-108z" />
android:fillColor="#000000"
android:strokeColor="#ffffff"/>
</vector> </vector>

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -1,13 +1,13 @@
<layer-list xmlns:android="http://schemas.android.com/apk/res/android" <layer-list xmlns:android="http://schemas.android.com/apk/res/android"
android:opacity="opaque"> android:opacity="opaque">
<!-- The background color, preferably the same as your normal theme --> <!-- The background color, preferably the same as your normal theme -->
<item android:drawable="@color/black"/> <item android:drawable="@color/colorPrimaryDark"/>
<!-- Your product logo - 144dp color version of your app icon --> <!-- Your product logo - 144dp color version of your app icon -->
<item <item
> >
<bitmap <bitmap
android:src="@mipmap/ic_launcher" android:src="@drawable/splash_logo"
android:gravity="center" android:gravity="center"
/> />
</item> </item>

Binary file not shown.

After

Width:  |  Height:  |  Size: 110 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

View File

@ -42,7 +42,7 @@
android:id="@+id/logo_persistent" android:id="@+id/logo_persistent"
android:layout_width="?attr/actionBarSize" android:layout_width="?attr/actionBarSize"
android:layout_height="?attr/actionBarSize" android:layout_height="?attr/actionBarSize"
app:srcCompat="@mipmap/ic_launcher" app:srcCompat="@drawable/logo_roundsquare"
app:layout_constraintTop_toTopOf="parent" app:layout_constraintTop_toTopOf="parent"
app:layout_constraintStart_toStartOf="parent" app:layout_constraintStart_toStartOf="parent"
android:padding="12dp" android:padding="12dp"

View File

@ -39,7 +39,7 @@
app:layout_constraintBottom_toBottomOf="@id/scrollViewMetadataNext" app:layout_constraintBottom_toBottomOf="@id/scrollViewMetadataNext"
app:layout_constraintStart_toStartOf="@id/imageGuideline" app:layout_constraintStart_toStartOf="@id/imageGuideline"
app:layout_constraintTop_toTopOf="parent" app:layout_constraintTop_toTopOf="parent"
app:srcCompat="@mipmap/ic_launcher" app:srcCompat="@drawable/logo_roundsquare"
android:layout_margin="8dp" android:layout_margin="8dp"
tools:ignore="HardcodedText" /> tools:ignore="HardcodedText" />
<!-- app:layout_constraintBottom_toTopOf="@id/imageLeftGuideline" --> <!-- app:layout_constraintBottom_toTopOf="@id/imageLeftGuideline" -->

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 19 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 19 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 29 KiB

View File

@ -7,7 +7,7 @@
tools:ignore="UnusedNavigation"> tools:ignore="UnusedNavigation">
<fragment <fragment
android:id="@+id/fragment_news" android:id="@+id/fragment_news"
android:name="fr.riff_app.riff.ui.news.NewsFragment" android:name="fr.forum_thalie.tsumugi.ui.news.NewsFragment"
android:label="@string/title_news" android:label="@string/title_news"
tools:layout="@layout/fragment_songs" /> tools:layout="@layout/fragment_songs" />
</navigation> </navigation>

View File

@ -8,7 +8,7 @@
<fragment <fragment
android:id="@+id/fragment_nowplaying" android:id="@+id/fragment_nowplaying"
android:name="fr.riff_app.riff.ui.nowplaying.NowPlayingFragment" android:name="fr.forum_thalie.tsumugi.ui.nowplaying.NowPlayingFragment"
android:label="@string/title_nowplaying" /> android:label="@string/title_nowplaying" />
</navigation> </navigation>

View File

@ -8,7 +8,7 @@
<fragment <fragment
android:id="@+id/fragment_programme" android:id="@+id/fragment_programme"
android:name="fr.riff_app.riff.ui.programme.ProgrammeFragment" android:name="fr.forum_thalie.tsumugi.ui.programme.ProgrammeFragment"
android:label="@string/title_programme" /> android:label="@string/title_programme" />
</navigation> </navigation>

View File

@ -7,7 +7,7 @@
tools:ignore="UnusedNavigation"> tools:ignore="UnusedNavigation">
<fragment <fragment
android:id="@+id/fragment_songs" android:id="@+id/fragment_songs"
android:name="fr.riff_app.riff.ui.songs.SongsFragment" android:name="fr.forum_thalie.tsumugi.ui.songs.SongsFragment"
android:label="@string/title_queue_lp" android:label="@string/title_queue_lp"
tools:layout="@layout/fragment_songs" /> tools:layout="@layout/fragment_songs" />
</navigation> </navigation>

View File

@ -1,6 +1,6 @@
<resources> <resources>
<string name="app_name">Riff</string> <string name="app_name">Tsumugi</string>
<string name="title_nowplaying">Riff</string> <string name="title_nowplaying">Tsumugi</string>
<string name="title_queue_lp">Titres</string> <string name="title_queue_lp">Titres</string>
<string name="title_chat">Chat</string> <string name="title_chat">Chat</string>
<string name="title_news">Actus</string> <string name="title_news">Actus</string>

View File

@ -1,6 +1,6 @@
<resources xmlns:tools="http://schemas.android.com/tools" tools:ignore="MissingTranslation"> <resources xmlns:tools="http://schemas.android.com/tools" tools:ignore="MissingTranslation">
<!-- URLs --> <!-- URLs -->
<string name="STREAM_URL_RIFF">https://sstream.riff-radio.org/;stream.mp3</string> <string name="STREAM_URL_TSUMUGI">https://radio.mahoro-net.org/streams/tsumugi</string>
</resources> </resources>

View File

@ -2,7 +2,7 @@
<resources> <resources>
<color name="colorPrimary">#333333</color> <color name="colorPrimary">#333333</color>
<color name="colorPrimaryDark">#222222</color> <color name="colorPrimaryDark">#222222</color>
<color name="colorAccent">#ff0000</color> <color name="colorAccent">#f58b01</color>
<color name="dark">#454545</color> <color name="dark">#454545</color>
<color name="orange">#DF4C3A</color> <color name="orange">#DF4C3A</color>
<color name="whited">#DDDDDD</color> <color name="whited">#DDDDDD</color>
@ -19,15 +19,13 @@
<color name="reqButtonDisabled">#a15755</color> <color name="reqButtonDisabled">#a15755</color>
<color name="seek_bar_background">#585858</color> <color name="seek_bar_background">#585858</color>
<color name="seek_bar_progress">#ff0000</color> <color name="seek_bar_progress">#f58b01</color>
<color name="seek_bar_secondary_progress">#ff0000</color> <color name="seek_bar_secondary_progress">#3A7AAF</color>
<color name="progress_bar_background">#585858</color> <color name="progress_bar_background">#585858</color>
<color name="progress_bar_progress">#ff0000</color> <color name="progress_bar_progress">#3A7AAF</color>
<color name="progress_bar_secondary_progress">#ff0000</color> <color name="progress_bar_secondary_progress">#f58b01</color>
<color name="white">#FFFFFF</color> <color name="white">#FFFFFF</color>
<color name="black">#000000</color> <color name="black">#000000</color>
<color name="riffRed">#ff0000</color>
</resources> </resources>

View File

@ -1,4 +1,4 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<resources> <resources>
<color name="ic_launcher_background">#000000</color> <color name="ic_launcher_background">#F58B01</color>
</resources> </resources>

View File

@ -1,19 +1,18 @@
<resources xmlns:tools="http://schemas.android.com/tools" tools:ignore="MissingTranslation"> <resources xmlns:tools="http://schemas.android.com/tools" tools:ignore="MissingTranslation">
<!-- URLs --> <!-- URLs -->
<string name="STREAM_URL_RADIO">https://sstream.riff-radio.org/;stream.mp3</string> <string name="STREAM_URL_RADIO">https://relay0.r-a-d.io/main.mp3</string>
<string name="STREAM_URL_RIFF">https://sstream.riff-radio.org/;stream.mp3</string> <string name="STREAM_URL_TSUMUGI">http://shelter.mahoro-net.org:8000/tsumugi</string>
<string name="STREAM_URL_RSTLSS">https://sstream.riff-radio.org/;stream.mp3</string> <string name="STREAM_URL_RSTLSS">http://stream.radiosolution.fr/rstlss.mp3</string>
<string name="github_url_new_issue">https://git.pagelibre.org/riff/riff_app</string> <string name="github_url_new_issue">https://github.com/yattoz/Tsumugi-app/issues/</string>
<string name="website_url">https://m.riff-radio.fr/</string> <string name="website_url">https://tsumugi.forum-thalie.fr/</string>
<string name="rss_url">https://www.riff-radio.org/rss.xml</string> <string name="rss_url">https://tsumugi.forum-thalie.fr/?feed=rss2</string>
<!-- <string name="API_URL">https://radio.mahoro-net.org/airtime/api/live-info-v2</string>--> <string name="API_URL">https://radio.mahoro-net.org/airtime/api/live-info-v2</string>
<string name="API_URL">http://media.pagelibre.org/riff/api/live-info-v2</string>
<string name="planning_url">ADD SOME URL HERE</string> <string name="planning_url">ADD SOME URL HERE</string>
<string name="app_name">Riff</string> <string name="app_name">Tsumugi</string>
<string name="title_nowplaying">Riff</string> <string name="title_nowplaying">Tsumugi</string>
<string name="title_queue_lp">Songs</string> <string name="title_queue_lp">Songs</string>
<string name="title_chat">Chat</string> <string name="title_chat">Chat</string>
<string name="title_news">News</string> <string name="title_news">News</string>
@ -27,14 +26,14 @@
<string name="volume">Volume: </string> <string name="volume">Volume: </string>
<string name="up_next">Up next :</string> <string name="up_next">Up next :</string>
<string name="current_programme">Playing now : </string> <string name="current_programme">Current programme : </string>
<string name="now_streaming">Now streaming</string> <string name="now_streaming">Now streaming</string>
<string name="error_webView">Error loading WebView. Try downloading Google Chrome on Google Play, or enabling it if you disabled it.</string> <string name="error_webView">Error loading WebView. Try downloading Google Chrome on Google Play, or enabling it if you disabled it.</string>
<string name="action_settings">Settings</string> <string name="action_settings">Settings</string>
<string name="action_bug_submit">Submit a bug (GitHub)</string> <string name="action_bug_submit">Submit a bug (GitHub)</string>
<string name="nowPlayingNotificationChannel">Riff Stream Service</string> <string name="nowPlayingNotificationChannel">Tsumugi Stream Service</string>
<string name="nowPlayingChannelId">fr.riff_app.riff.PLAYER_SERVICE</string> <string name="nowPlayingChannelId">fr.forum_thalie.tsumugi.PLAYER_SERVICE</string>
<string name="snackbarPersistent">Stay visible, can be closed with \"OK\" button</string> <string name="snackbarPersistent">Stay visible, can be closed with \"OK\" button</string>
<string name="snackbarNonPersistent">Disappear after some time</string> <string name="snackbarNonPersistent">Disappear after some time</string>

View File

@ -5,9 +5,9 @@
<!-- Customize your theme here. --> <!-- Customize your theme here. -->
<item name="colorPrimary">@color/colorPrimary</item> <item name="colorPrimary">@color/colorPrimary</item>
<item name="colorPrimaryDark">@color/colorPrimaryDark</item> <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
<item name="colorAccent">@color/riffRed</item> <item name="colorAccent">@color/colorAccent</item>
<item name="icon">@mipmap/ic_launcher</item> <item name="icon">@drawable/logo_roundsquare</item>
<item name="android:textColorHighlight">@color/riffRed</item> <item name="android:textColorHighlight">@color/rblue</item>
<item name="android:colorBackground">@color/colorPrimaryDark</item> <item name="android:colorBackground">@color/colorPrimaryDark</item>
</style> </style>
@ -15,8 +15,8 @@
<!-- Customize your theme here. --> <!-- Customize your theme here. -->
<item name="colorPrimary">@color/colorPrimary</item> <item name="colorPrimary">@color/colorPrimary</item>
<item name="colorPrimaryDark">@color/colorPrimaryDark</item> <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
<item name="colorAccent">@color/riffRed</item> <item name="colorAccent">@color/colorAccent</item>
<item name="android:textColorHighlight">@color/riffRed</item> <item name="android:textColorHighlight">@color/rblue</item>
<item name="android:colorBackground">@color/colorPrimaryDark</item> <item name="android:colorBackground">@color/colorPrimaryDark</item>
<item name="icon">@drawable/none</item> <item name="icon">@drawable/none</item>
</style> </style>
@ -30,8 +30,8 @@
<!-- Customize your theme here. --> <!-- Customize your theme here. -->
<item name="colorPrimary">@color/colorPrimary</item> <item name="colorPrimary">@color/colorPrimary</item>
<item name="colorPrimaryDark">@color/colorPrimaryDark</item> <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
<item name="colorAccent">@color/riffRed</item> <item name="colorAccent">@color/colorAccent</item>
<item name="android:textColorHighlight">@color/riffRed</item> <item name="android:textColorHighlight">@color/rblue</item>
<item name="android:colorBackground">@color/colorPrimaryDark</item> <item name="android:colorBackground">@color/colorPrimaryDark</item>
</style> </style>

View File

@ -43,7 +43,7 @@
android:title="@string/test_alarm_volume" android:title="@string/test_alarm_volume"
android:summary="@string/test_alarm_volume_summary" android:summary="@string/test_alarm_volume_summary"
app:icon="@drawable/ic_volume_high" app:icon="@drawable/ic_volume_high"
app:fragment="fr.riff_app.riff.preferences.AlarmAdjustVolumeFragment" app:fragment="fr.forum_thalie.tsumugi.preferences.AlarmAdjustVolumeFragment"
/> />
</PreferenceScreen> </PreferenceScreen>

View File

@ -6,21 +6,21 @@
app:icon="@drawable/ic_alarm" app:icon="@drawable/ic_alarm"
app:key="alarmScreen" app:key="alarmScreen"
app:title="@string/setupAlarmClock" app:title="@string/setupAlarmClock"
app:fragment="fr.riff_app.riff.preferences.AlarmFragment" app:fragment="fr.forum_thalie.tsumugi.preferences.AlarmFragment"
/> />
<Preference <Preference
app:icon="@drawable/ic_av_timer" app:icon="@drawable/ic_av_timer"
app:key="sleepScreen" app:key="sleepScreen"
app:title="@string/setSleepTimer" app:title="@string/setSleepTimer"
app:fragment="fr.riff_app.riff.preferences.SleepFragment" app:fragment="fr.forum_thalie.tsumugi.preferences.SleepFragment"
/> />
<Preference <Preference
app:icon="@drawable/ic_customize" app:icon="@drawable/ic_customize"
app:key="CustomizeFragment" app:key="CustomizeFragment"
app:title="@string/customizeAppBehavior" app:title="@string/customizeAppBehavior"
app:fragment="fr.riff_app.riff.preferences.CustomizeFragment" app:fragment="fr.forum_thalie.tsumugi.preferences.CustomizeFragment"
/> />
<Preference <Preference

View File

@ -0,0 +1,17 @@
package fr.forum_thalie.tsumugi
import org.junit.Test
import org.junit.Assert.*
/**
* Example local unit test, which will execute on the development machine (host).
*
* See [testing documentation](http://d.android.com/tools/testing).
*/
class ExampleUnitTest {
@Test
fun addition_isCorrect() {
assertEquals(4, 2 + 2)
}
}

View File

@ -1,17 +1,16 @@
// Top-level build file where you can add configuration options common to all sub-projects/modules. // Top-level build file where you can add configuration options common to all sub-projects/modules.
buildscript { buildscript {
ext.kotlin_version = '1.6.10' ext.kotlin_version = '1.3.72'
repositories { repositories {
google() google()
jcenter() jcenter()
} }
dependencies { dependencies {
classpath 'com.android.tools.build:gradle:7.1.2' classpath 'com.android.tools.build:gradle:4.0.1'
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
// NOTE: Do not place your application dependencies here; they belong // NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files // in the individual module build.gradle files
} }
} }

View File

@ -3,4 +3,4 @@ distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists distributionPath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists zipStorePath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-7.2-all.zip distributionUrl=https\://services.gradle.org/distributions/gradle-6.1.1-all.zip

Some files were not shown because too many files have changed in this diff Show More