Compare commits
10 Commits
| Author | SHA1 | Date |
|---|---|---|
|
|
dc62f8f591 | |
|
|
eb8698a8e2 | |
|
|
24edc08bbf | |
|
|
a9109736be | |
|
|
355ac8cd01 | |
|
|
185f0867e2 | |
|
|
63d18856f1 | |
|
|
c41ce1d550 | |
|
|
c5c4bdd838 | |
|
|
300a806d81 |
|
|
@ -1 +0,0 @@
|
||||||
Tsumugi-app
|
|
||||||
|
|
@ -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>
|
||||||
|
|
|
||||||
|
|
@ -26,5 +26,10 @@
|
||||||
<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>
|
||||||
|
|
@ -16,21 +16,21 @@ configurations.all {
|
||||||
}
|
}
|
||||||
|
|
||||||
android {
|
android {
|
||||||
compileSdkVersion 30
|
compileSdkVersion 32
|
||||||
buildToolsVersion "30.0.1"
|
|
||||||
compileOptions {
|
compileOptions {
|
||||||
sourceCompatibility JavaVersion.VERSION_1_8
|
sourceCompatibility JavaVersion.VERSION_11
|
||||||
targetCompatibility JavaVersion.VERSION_1_8
|
targetCompatibility JavaVersion.VERSION_11
|
||||||
}
|
}
|
||||||
kotlinOptions {
|
kotlinOptions {
|
||||||
jvmTarget = "1.8"
|
jvmTarget = "11"
|
||||||
}
|
}
|
||||||
defaultConfig {
|
defaultConfig {
|
||||||
applicationId "fr.forum_thalie.tsumugi"
|
applicationId "fr.riff_app.riff"
|
||||||
minSdkVersion 16
|
minSdkVersion 16
|
||||||
targetSdkVersion 30
|
targetSdkVersion 32
|
||||||
versionCode 120
|
multiDexEnabled true
|
||||||
versionName "1.2.0"
|
versionCode 121
|
||||||
|
versionName "1.2.1"
|
||||||
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
|
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
|
||||||
vectorDrawables.useSupportLibrary = true
|
vectorDrawables.useSupportLibrary = true
|
||||||
}
|
}
|
||||||
|
|
@ -48,6 +48,9 @@ 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"
|
||||||
|
|
@ -68,15 +71,18 @@ dependencies {
|
||||||
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
implementation "androidx.media:media:1.1.0"
|
implementation "androidx.media:media:1.5.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.2.0'
|
implementation 'androidx.lifecycle:lifecycle-viewmodel-ktx:2.4.1'
|
||||||
|
|
||||||
implementation 'androidx.recyclerview:recyclerview:1.1.0'
|
implementation 'androidx.recyclerview:recyclerview:1.2.1'
|
||||||
implementation 'androidx.preference:preference:1.1.0'
|
implementation 'androidx.preference:preference-ktx:1.2.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'
|
||||||
|
|
|
||||||
|
|
@ -1,24 +0,0 @@
|
||||||
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)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
After Width: | Height: | Size: 75 KiB |
|
After Width: | Height: | Size: 65 KiB |
|
|
@ -0,0 +1,14 @@
|
||||||
|
<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>
|
||||||
|
After Width: | Height: | Size: 5.8 KiB |
|
|
@ -0,0 +1,5 @@
|
||||||
|
<?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>
|
||||||
|
|
@ -0,0 +1,5 @@
|
||||||
|
<?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>
|
||||||
|
After Width: | Height: | Size: 3.9 KiB |
|
After Width: | Height: | Size: 10 KiB |
|
After Width: | Height: | Size: 6.0 KiB |
|
After Width: | Height: | Size: 2.1 KiB |
|
After Width: | Height: | Size: 5.3 KiB |
|
After Width: | Height: | Size: 3.2 KiB |
|
After Width: | Height: | Size: 6.1 KiB |
|
After Width: | Height: | Size: 17 KiB |
|
After Width: | Height: | Size: 9.4 KiB |
|
After Width: | Height: | Size: 12 KiB |
|
After Width: | Height: | Size: 34 KiB |
|
After Width: | Height: | Size: 18 KiB |
|
After Width: | Height: | Size: 19 KiB |
|
After Width: | Height: | Size: 56 KiB |
|
After Width: | Height: | Size: 28 KiB |
|
|
@ -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.forum_thalie.tsumugi">
|
package="fr.riff_app.riff">
|
||||||
|
|
||||||
<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,7 +10,8 @@
|
||||||
<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"/>
|
||||||
|
|
@ -22,8 +23,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"
|
||||||
|
|
@ -35,11 +36,12 @@
|
||||||
|
|
||||||
<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.forum_thalie.tsumugi.PLAY_OR_FALLBACK" />
|
<action android:name="fr.riff_app.riff.PLAY_OR_FALLBACK" />
|
||||||
<action android:name="fr.forum_thalie.tsumugi.NOTIFY" /> <!-- this is for Snooze -->
|
<action android:name="fr.riff_app.riff.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>
|
||||||
|
|
@ -47,9 +49,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" />
|
||||||
|
|
||||||
|
|
@ -63,7 +65,8 @@
|
||||||
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>
|
||||||
|
|
|
||||||
|
|
@ -1,64 +1,76 @@
|
||||||
{
|
{
|
||||||
"planning": [
|
"planning": [
|
||||||
{
|
{
|
||||||
"title": "Le Classique du Matin",
|
"title": "La playlist Base Rock",
|
||||||
"periodicity": "1111111",
|
"periodicity": "1111111",
|
||||||
"hour_begin": "6:00",
|
"hour_begin": "00: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": "Anime Nuit",
|
"title": "Only Covers",
|
||||||
"periodicity": "1111111",
|
"periodicity": "1000000",
|
||||||
"hour_begin": "00:00",
|
"hour_begin": "20:30",
|
||||||
"hour_end": "01:00"
|
"hour_end": "00:00"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"title": "Jeux Vidéos Nuit",
|
"title": "Only Indies",
|
||||||
"periodicity": "1111111",
|
"periodicity": "0100000",
|
||||||
"hour_begin": "01:00",
|
"hour_begin": "20:30",
|
||||||
"hour_end": "02:00"
|
"hour_end": "00:00"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"title": "Programmation nocturne",
|
"title": "Only Acoustic",
|
||||||
"periodicity": "1111111",
|
"periodicity": "0010000",
|
||||||
"hour_begin": "02:00",
|
"hour_begin": "20:30",
|
||||||
"hour_end": "06:00"
|
"hour_end": "00: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",
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
package fr.forum_thalie.tsumugi
|
package fr.riff_app.riff
|
||||||
|
|
||||||
enum class Actions
|
enum class Actions
|
||||||
{
|
{
|
||||||
|
|
@ -1,8 +1,8 @@
|
||||||
package fr.forum_thalie.tsumugi
|
package fr.riff_app.riff
|
||||||
|
|
||||||
import android.os.AsyncTask
|
import android.os.AsyncTask
|
||||||
import android.util.Log
|
import android.util.Log
|
||||||
import fr.forum_thalie.tsumugi.playerstore.PlayerStore
|
import fr.riff_app.riff.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) :
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
package fr.forum_thalie.tsumugi
|
package fr.riff_app.riff
|
||||||
|
|
||||||
import android.content.Intent
|
import android.content.Intent
|
||||||
import android.os.Bundle
|
import android.os.Bundle
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
package fr.forum_thalie.tsumugi
|
package fr.riff_app.riff
|
||||||
|
|
||||||
import android.app.Notification
|
import android.app.Notification
|
||||||
import android.app.NotificationChannel
|
import android.app.NotificationChannel
|
||||||
|
|
@ -50,6 +50,7 @@ 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
|
||||||
|
|
||||||
|
|
@ -58,7 +59,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, 0
|
notificationIntent, PendingIntent.FLAG_IMMUTABLE
|
||||||
)
|
)
|
||||||
var channelID = ""
|
var channelID = ""
|
||||||
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
package fr.forum_thalie.tsumugi
|
package fr.riff_app.riff
|
||||||
|
|
||||||
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.forum_thalie.tsumugi.alarm.RadioAlarm
|
import fr.riff_app.riff.alarm.RadioAlarm
|
||||||
import fr.forum_thalie.tsumugi.planning.Planning
|
import fr.riff_app.riff.planning.Planning
|
||||||
import fr.forum_thalie.tsumugi.playerstore.PlayerStore
|
import fr.riff_app.riff.playerstore.PlayerStore
|
||||||
|
|
||||||
class BootBroadcastReceiver : BroadcastReceiver(){
|
class BootBroadcastReceiver : BroadcastReceiver(){
|
||||||
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
package fr.forum_thalie.tsumugi
|
package fr.riff_app.riff
|
||||||
|
|
||||||
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.forum_thalie.tsumugi.playerstore.PlayerStore
|
import fr.riff_app.riff.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.forum_thalie.tsumugi.alarm.RadioAlarm
|
import fr.riff_app.riff.alarm.RadioAlarm
|
||||||
import fr.forum_thalie.tsumugi.planning.Planning
|
import fr.riff_app.riff.planning.Planning
|
||||||
|
|
||||||
|
|
||||||
/* Log to file import
|
/* Log to file import
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
package fr.forum_thalie.tsumugi
|
package fr.riff_app.riff
|
||||||
|
|
||||||
|
|
||||||
import android.content.Intent
|
import android.content.Intent
|
||||||
|
|
@ -1,12 +1,14 @@
|
||||||
package fr.forum_thalie.tsumugi
|
package fr.riff_app.riff
|
||||||
|
|
||||||
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.forum_thalie.tsumugi.playerstore.PlayerStore
|
import fr.riff_app.riff.playerstore.PlayerStore
|
||||||
|
|
||||||
class NowPlayingNotification(
|
class NowPlayingNotification(
|
||||||
notificationChannelId: String,
|
notificationChannelId: String,
|
||||||
|
|
@ -34,7 +36,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)
|
val deleteIntent = PendingIntent.getService(c, 0, delIntent, PendingIntent.FLAG_NO_CREATE + PendingIntent.FLAG_IMMUTABLE)
|
||||||
builder.setDeleteIntent(deleteIntent)
|
builder.setDeleteIntent(deleteIntent)
|
||||||
|
|
||||||
mediaStyle = androidx.media.app.NotificationCompat.DecoratedMediaCustomViewStyle().also {
|
mediaStyle = androidx.media.app.NotificationCompat.DecoratedMediaCustomViewStyle().also {
|
||||||
|
|
@ -46,6 +48,7 @@ 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)
|
||||||
|
|
@ -72,17 +75,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)
|
val pendingButtonIntent = PendingIntent.getService(c, 1, intent, PendingIntent.FLAG_UPDATE_CURRENT + PendingIntent.FLAG_IMMUTABLE)
|
||||||
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)
|
val pendingButtonIntent = PendingIntent.getService(c, 1, intent, PendingIntent.FLAG_UPDATE_CURRENT + PendingIntent.FLAG_IMMUTABLE)
|
||||||
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)
|
val pendingButtonIntent = PendingIntent.getService(c, 2, intent2, PendingIntent.FLAG_UPDATE_CURRENT + PendingIntent.FLAG_IMMUTABLE)
|
||||||
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)
|
||||||
|
|
||||||
|
|
@ -92,7 +95,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)
|
val pendingSnoozeIntent = PendingIntent.getService(c, 5, snoozeIntent, PendingIntent.FLAG_UPDATE_CURRENT + PendingIntent.FLAG_IMMUTABLE)
|
||||||
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)
|
||||||
|
|
@ -1,8 +1,8 @@
|
||||||
package fr.forum_thalie.tsumugi
|
package fr.riff_app.riff
|
||||||
|
|
||||||
import android.os.Bundle
|
import android.os.Bundle
|
||||||
import android.view.MenuItem
|
import android.view.MenuItem
|
||||||
import fr.forum_thalie.tsumugi.preferences.*
|
import fr.riff_app.riff.preferences.*
|
||||||
|
|
||||||
|
|
||||||
class ParametersActivity : BaseActivity() {
|
class ParametersActivity : BaseActivity() {
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
package fr.forum_thalie.tsumugi
|
package fr.riff_app.riff
|
||||||
|
|
||||||
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.forum_thalie.tsumugi.alarm.RadioAlarm
|
import fr.riff_app.riff.alarm.RadioAlarm
|
||||||
import fr.forum_thalie.tsumugi.alarm.RadioSleeper
|
import fr.riff_app.riff.alarm.RadioSleeper
|
||||||
import fr.forum_thalie.tsumugi.planning.Planning
|
import fr.riff_app.riff.planning.Planning
|
||||||
import fr.forum_thalie.tsumugi.playerstore.PlayerStore
|
import fr.riff_app.riff.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,7 +193,8 @@ 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
|
||||||
|
|
@ -427,7 +428,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_TSUMUGI)))
|
.createMediaSource(Uri.parse(getString(R.string.STREAM_URL_RIFF)))
|
||||||
|
|
||||||
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"))
|
||||||
|
|
@ -514,6 +515,10 @@ 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
|
||||||
|
|
||||||
|
|
@ -530,6 +535,7 @@ 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(
|
||||||
|
|
@ -539,7 +545,6 @@ 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")
|
||||||
}
|
}
|
||||||
|
|
@ -1,7 +1,7 @@
|
||||||
package fr.forum_thalie.tsumugi
|
package fr.riff_app.riff
|
||||||
|
|
||||||
import android.support.v4.media.session.PlaybackStateCompat
|
import android.support.v4.media.session.PlaybackStateCompat
|
||||||
import fr.forum_thalie.tsumugi.playerstore.PlayerStore
|
import fr.riff_app.riff.playerstore.PlayerStore
|
||||||
import java.util.*
|
import java.util.*
|
||||||
|
|
||||||
class ApiFetchTick : TimerTask() {
|
class ApiFetchTick : TimerTask() {
|
||||||
|
|
@ -1,12 +1,12 @@
|
||||||
package fr.forum_thalie.tsumugi
|
package fr.riff_app.riff
|
||||||
|
|
||||||
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.forum_thalie.tsumugi"
|
const val tag = "fr.riff_app.riff"
|
||||||
const val noConnectionValue = "—"
|
const val noConnectionValue = "—"
|
||||||
const val streamDownValue = "Tsumugi est HS !" // we don't want this value to be displaed in the "last played" screen.
|
const val streamDownValue = "Riff 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"
|
||||||
|
|
@ -1,14 +1,16 @@
|
||||||
package fr.forum_thalie.tsumugi.alarm
|
package fr.riff_app.riff.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.forum_thalie.tsumugi.BootBroadcastReceiver
|
import fr.riff_app.riff.BootBroadcastReceiver
|
||||||
import androidx.preference.PreferenceManager
|
import androidx.preference.PreferenceManager
|
||||||
import fr.forum_thalie.tsumugi.*
|
import fr.riff_app.riff.*
|
||||||
import java.util.*
|
import java.util.*
|
||||||
import kotlin.collections.ArrayList
|
import kotlin.collections.ArrayList
|
||||||
|
|
||||||
|
|
@ -27,13 +29,31 @@ 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}")
|
||||||
PendingIntent.getBroadcast(c, 0, intent, 0)
|
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
|
||||||
|
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)
|
||||||
|
|
@ -43,6 +63,7 @@ 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)
|
||||||
|
|
@ -54,7 +75,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, 0)
|
PendingIntent.getActivity(c, 0, intent, PendingIntent.FLAG_IMMUTABLE)
|
||||||
}
|
}
|
||||||
val time = findNextAlarmTime(c, forceTime, forceDays)
|
val time = findNextAlarmTime(c, forceTime, forceDays)
|
||||||
if (time > 0)
|
if (time > 0)
|
||||||
|
|
@ -1,14 +1,16 @@
|
||||||
package fr.forum_thalie.tsumugi.alarm
|
package fr.riff_app.riff.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.forum_thalie.tsumugi.*
|
import fr.riff_app.riff.*
|
||||||
|
|
||||||
class RadioSleeper {
|
class RadioSleeper {
|
||||||
|
|
||||||
|
|
@ -30,18 +32,20 @@ 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, 0)
|
PendingIntent.getService(c, 99, intent, PendingIntent.FLAG_IMMUTABLE)
|
||||||
}
|
}
|
||||||
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, 0)
|
PendingIntent.getService(c, 98, intent, PendingIntent.FLAG_IMMUTABLE)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@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)
|
||||||
|
|
@ -1,11 +1,11 @@
|
||||||
package fr.forum_thalie.tsumugi.planning
|
package fr.riff_app.riff.planning
|
||||||
|
|
||||||
import android.content.Context
|
import android.content.Context
|
||||||
import androidx.lifecycle.MutableLiveData
|
import androidx.lifecycle.MutableLiveData
|
||||||
import fr.forum_thalie.tsumugi.Async
|
import fr.riff_app.riff.Async
|
||||||
import fr.forum_thalie.tsumugi.R
|
import fr.riff_app.riff.R
|
||||||
import fr.forum_thalie.tsumugi.noConnectionValue
|
import fr.riff_app.riff.noConnectionValue
|
||||||
import fr.forum_thalie.tsumugi.weekdays
|
import fr.riff_app.riff.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
|
||||||
|
|
@ -1,8 +1,8 @@
|
||||||
package fr.forum_thalie.tsumugi.planning
|
package fr.riff_app.riff.planning
|
||||||
|
|
||||||
import android.util.Log
|
import android.util.Log
|
||||||
import fr.forum_thalie.tsumugi.tag
|
import fr.riff_app.riff.tag
|
||||||
import fr.forum_thalie.tsumugi.weekdays
|
import fr.riff_app.riff.weekdays
|
||||||
import java.util.*
|
import java.util.*
|
||||||
import kotlin.collections.ArrayList
|
import kotlin.collections.ArrayList
|
||||||
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
package fr.forum_thalie.tsumugi.playerstore
|
package fr.riff_app.riff.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.forum_thalie.tsumugi.*
|
import fr.riff_app.riff.*
|
||||||
import fr.forum_thalie.tsumugi.planning.Planning
|
import fr.riff_app.riff.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
|
||||||
|
|
@ -1,8 +1,8 @@
|
||||||
package fr.forum_thalie.tsumugi.playerstore
|
package fr.riff_app.riff.playerstore
|
||||||
|
|
||||||
import androidx.core.text.HtmlCompat
|
import androidx.core.text.HtmlCompat
|
||||||
import androidx.lifecycle.MutableLiveData
|
import androidx.lifecycle.MutableLiveData
|
||||||
import fr.forum_thalie.tsumugi.noConnectionValue
|
import fr.riff_app.riff.noConnectionValue
|
||||||
|
|
||||||
class Song(artistTitle: String = "", _id : Int = 0) {
|
class Song(artistTitle: String = "", _id : Int = 0) {
|
||||||
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
package fr.forum_thalie.tsumugi.preferences
|
package fr.riff_app.riff.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.forum_thalie.tsumugi.Actions
|
import fr.riff_app.riff.Actions
|
||||||
import fr.forum_thalie.tsumugi.R
|
import fr.riff_app.riff.R
|
||||||
import fr.forum_thalie.tsumugi.RadioService
|
import fr.riff_app.riff.RadioService
|
||||||
import fr.forum_thalie.tsumugi.playerstore.PlayerStore
|
import fr.riff_app.riff.playerstore.PlayerStore
|
||||||
import kotlinx.coroutines.*
|
import kotlinx.coroutines.*
|
||||||
import kotlin.coroutines.CoroutineContext
|
import kotlin.coroutines.CoroutineContext
|
||||||
import kotlin.math.max
|
import kotlin.math.max
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
package fr.forum_thalie.tsumugi.preferences
|
package fr.riff_app.riff.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.forum_thalie.tsumugi.*
|
import fr.riff_app.riff.*
|
||||||
import fr.forum_thalie.tsumugi.R
|
import fr.riff_app.riff.R
|
||||||
import fr.forum_thalie.tsumugi.alarm.RadioAlarm
|
import fr.riff_app.riff.alarm.RadioAlarm
|
||||||
import fr.forum_thalie.tsumugi.playerstore.PlayerStore
|
import fr.riff_app.riff.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(context!!, forceTime, forceDays)
|
val dateLong = RadioAlarm.instance.findNextAlarmTime(requireContext(), 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(context!!).contains("alarmTimeFromMidnight"))
|
if (!PreferenceManager.getDefaultSharedPreferences(requireContext()).contains("alarmTimeFromMidnight"))
|
||||||
{
|
{
|
||||||
PreferenceManager.getDefaultSharedPreferences(context!!).edit {
|
PreferenceManager.getDefaultSharedPreferences(requireContext()).edit {
|
||||||
putInt("alarmTimeFromMidnight", (60*hourOfDayDefault+minuteDefault))
|
putInt("alarmTimeFromMidnight", (60*hourOfDayDefault+minuteDefault))
|
||||||
commit()
|
commit()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
val time = PreferenceManager.getDefaultSharedPreferences(context!!).getInt("alarmTimeFromMidnight", (60*hourOfDayDefault+minuteDefault))
|
val time = PreferenceManager.getDefaultSharedPreferences(requireContext()).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(context!!).edit {
|
PreferenceManager.getDefaultSharedPreferences(requireContext()).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(context!!)
|
RadioAlarm.instance.cancelAlarm(requireContext())
|
||||||
RadioAlarm.instance.setNextAlarm(context!!, isForce = true, forceTime = hourOfDay*60+minute)
|
RadioAlarm.instance.setNextAlarm(requireContext(), 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(context!!).getInt("alarmTimeFromMidnight", 7*60)
|
val timeNew = PreferenceManager.getDefaultSharedPreferences(requireContext()).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 -> context!!.getString(R.string.every_day)
|
fullWeek -> requireContext().getString(R.string.every_day)
|
||||||
workingWeek -> context!!.getString(R.string.working_days)
|
workingWeek -> requireContext().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(context).getStringSet("alarmDays", setOf()))
|
updateDays(alarmDays, PreferenceManager.getDefaultSharedPreferences(requireContext()).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(context!!)
|
RadioAlarm.instance.cancelAlarm(requireContext())
|
||||||
RadioAlarm.instance.setNextAlarm(context!!, isForce = true, forceDays = newValue)
|
RadioAlarm.instance.setNextAlarm(requireContext(), 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(context!!, isForce = true)
|
RadioAlarm.instance.setNextAlarm(requireContext(), isForce = true)
|
||||||
else
|
else
|
||||||
RadioAlarm.instance.cancelAlarm(context!!)
|
RadioAlarm.instance.cancelAlarm(requireContext())
|
||||||
timeSet?.isEnabled = newValue
|
timeSet?.isEnabled = newValue
|
||||||
alarmDays?.isEnabled = newValue
|
alarmDays?.isEnabled = newValue
|
||||||
snoozeDuration?.isEnabled = newValue
|
snoozeDuration?.isEnabled = newValue
|
||||||
|
|
@ -1,12 +1,12 @@
|
||||||
package fr.forum_thalie.tsumugi.preferences
|
package fr.riff_app.riff.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.forum_thalie.tsumugi.R
|
import fr.riff_app.riff.R
|
||||||
import fr.forum_thalie.tsumugi.preferenceStore
|
import fr.riff_app.riff.preferenceStore
|
||||||
|
|
||||||
class CustomizeFragment : PreferenceFragmentCompat() {
|
class CustomizeFragment : PreferenceFragmentCompat() {
|
||||||
override fun onAttach(context: Context) {
|
override fun onAttach(context: Context) {
|
||||||
|
|
@ -1,9 +1,9 @@
|
||||||
package fr.forum_thalie.tsumugi.preferences
|
package fr.riff_app.riff.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.forum_thalie.tsumugi.R
|
import fr.riff_app.riff.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.*
|
||||||
|
|
@ -1,12 +1,12 @@
|
||||||
package fr.forum_thalie.tsumugi.preferences
|
package fr.riff_app.riff.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.forum_thalie.tsumugi.R
|
import fr.riff_app.riff.R
|
||||||
import android.text.InputType
|
import android.text.InputType
|
||||||
import androidx.appcompat.app.AppCompatActivity
|
import androidx.appcompat.app.AppCompatActivity
|
||||||
import fr.forum_thalie.tsumugi.alarm.RadioSleeper
|
import fr.riff_app.riff.alarm.RadioSleeper
|
||||||
|
|
||||||
|
|
||||||
class SleepFragment : PreferenceFragmentCompat() {
|
class SleepFragment : PreferenceFragmentCompat() {
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
package fr.forum_thalie.tsumugi.ui
|
package fr.riff_app.riff.ui
|
||||||
|
|
||||||
import androidx.fragment.app.Fragment
|
import androidx.fragment.app.Fragment
|
||||||
import androidx.fragment.app.FragmentPagerAdapter
|
import androidx.fragment.app.FragmentPagerAdapter
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
package fr.forum_thalie.tsumugi.ui.news
|
package fr.riff_app.riff.ui.news
|
||||||
|
|
||||||
import java.util.*
|
import java.util.*
|
||||||
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
package fr.forum_thalie.tsumugi.ui.news
|
package fr.riff_app.riff.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.forum_thalie.tsumugi.R
|
import fr.riff_app.riff.R
|
||||||
import fr.forum_thalie.tsumugi.newsDisplayDatePattern
|
import fr.riff_app.riff.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
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
package fr.forum_thalie.tsumugi.ui.news
|
package fr.riff_app.riff.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.forum_thalie.tsumugi.R
|
import fr.riff_app.riff.R
|
||||||
|
|
||||||
class NewsFragment : Fragment() {
|
class NewsFragment : Fragment() {
|
||||||
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
package fr.forum_thalie.tsumugi.ui.news
|
package fr.riff_app.riff.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.forum_thalie.tsumugi.R
|
import fr.riff_app.riff.R
|
||||||
import fr.forum_thalie.tsumugi.newsDateTimePattern
|
import fr.riff_app.riff.newsDateTimePattern
|
||||||
import fr.forum_thalie.tsumugi.tag
|
import fr.riff_app.riff.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
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
package fr.forum_thalie.tsumugi.ui.news
|
package fr.riff_app.riff.ui.news
|
||||||
|
|
||||||
import android.annotation.SuppressLint
|
import android.annotation.SuppressLint
|
||||||
import android.content.Intent
|
import android.content.Intent
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
package fr.forum_thalie.tsumugi.ui.nowplaying
|
package fr.riff_app.riff.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.forum_thalie.tsumugi.*
|
import fr.riff_app.riff.*
|
||||||
import fr.forum_thalie.tsumugi.alarm.RadioSleeper
|
import fr.riff_app.riff.alarm.RadioSleeper
|
||||||
import fr.forum_thalie.tsumugi.planning.Planning
|
import fr.riff_app.riff.planning.Planning
|
||||||
import fr.forum_thalie.tsumugi.playerstore.PlayerStore
|
import fr.riff_app.riff.playerstore.PlayerStore
|
||||||
import fr.forum_thalie.tsumugi.playerstore.Song
|
import fr.riff_app.riff.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 = "${context!!.getString(R.string.current_programme)} $it"
|
currentProgrammeText.text = "${requireContext().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 = context!!.getSystemService(Context.CLIPBOARD_SERVICE) as ClipboardManager
|
val clipboard = requireContext().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))
|
||||||
|
|
@ -1,11 +1,11 @@
|
||||||
package fr.forum_thalie.tsumugi.ui.nowplaying
|
package fr.riff_app.riff.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.forum_thalie.tsumugi.playerstore.PlayerStore
|
import fr.riff_app.riff.playerstore.PlayerStore
|
||||||
import fr.forum_thalie.tsumugi.preferenceStore
|
import fr.riff_app.riff.preferenceStore
|
||||||
|
|
||||||
class NowPlayingViewModel: ViewModel() {
|
class NowPlayingViewModel: ViewModel() {
|
||||||
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
package fr.forum_thalie.tsumugi.ui.programme
|
package fr.riff_app.riff.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.forum_thalie.tsumugi.R
|
import fr.riff_app.riff.R
|
||||||
import fr.forum_thalie.tsumugi.colorAccent
|
import fr.riff_app.riff.colorAccent
|
||||||
import fr.forum_thalie.tsumugi.colorWhited
|
import fr.riff_app.riff.colorWhited
|
||||||
import fr.forum_thalie.tsumugi.planning.Planning
|
import fr.riff_app.riff.planning.Planning
|
||||||
import fr.forum_thalie.tsumugi.planning.Programme
|
import fr.riff_app.riff.planning.Programme
|
||||||
import fr.forum_thalie.tsumugi.weekdaysSundayFirst
|
import fr.riff_app.riff.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
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
package fr.forum_thalie.tsumugi.ui.programme
|
package fr.riff_app.riff.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.forum_thalie.tsumugi.R
|
import fr.riff_app.riff.R
|
||||||
import fr.forum_thalie.tsumugi.planning.Planning
|
import fr.riff_app.riff.planning.Planning
|
||||||
import fr.forum_thalie.tsumugi.planning.Programme
|
import fr.riff_app.riff.planning.Programme
|
||||||
import fr.forum_thalie.tsumugi.weekdays
|
import fr.riff_app.riff.weekdays
|
||||||
|
|
||||||
|
|
||||||
class ProgrammeDayFragment : Fragment() {
|
class ProgrammeDayFragment : Fragment() {
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
package fr.forum_thalie.tsumugi.ui.programme
|
package fr.riff_app.riff.ui.programme
|
||||||
|
|
||||||
import androidx.lifecycle.ViewModel
|
import androidx.lifecycle.ViewModel
|
||||||
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
package fr.forum_thalie.tsumugi.ui.programme
|
package fr.riff_app.riff.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.forum_thalie.tsumugi.R
|
import fr.riff_app.riff.R
|
||||||
import fr.forum_thalie.tsumugi.planning.Planning
|
import fr.riff_app.riff.planning.Planning
|
||||||
import fr.forum_thalie.tsumugi.ui.APagerAdapter
|
import fr.riff_app.riff.ui.APagerAdapter
|
||||||
import fr.forum_thalie.tsumugi.weekdays
|
import fr.riff_app.riff.weekdays
|
||||||
import java.util.*
|
import java.util.*
|
||||||
|
|
||||||
class ProgrammeFragment : Fragment() {
|
class ProgrammeFragment : Fragment() {
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
package fr.forum_thalie.tsumugi.ui.songs
|
package fr.riff_app.riff.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.forum_thalie.tsumugi.R
|
import fr.riff_app.riff.R
|
||||||
import fr.forum_thalie.tsumugi.ui.APagerAdapter
|
import fr.riff_app.riff.ui.APagerAdapter
|
||||||
import fr.forum_thalie.tsumugi.ui.programme.ProgrammeDayFragment
|
import fr.riff_app.riff.ui.programme.ProgrammeDayFragment
|
||||||
import fr.forum_thalie.tsumugi.ui.songs.queuelp.LastPlayedFragment
|
import fr.riff_app.riff.ui.songs.queuelp.LastPlayedFragment
|
||||||
|
|
||||||
class SongsFragment : Fragment() {
|
class SongsFragment : Fragment() {
|
||||||
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
package fr.forum_thalie.tsumugi.ui.songs.queuelp
|
package fr.riff_app.riff.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.forum_thalie.tsumugi.R
|
import fr.riff_app.riff.R
|
||||||
import fr.forum_thalie.tsumugi.playerstore.PlayerStore
|
import fr.riff_app.riff.playerstore.PlayerStore
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* A simple [Fragment] subclass.
|
* A simple [Fragment] subclass.
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
package fr.forum_thalie.tsumugi.ui.songs.queuelp
|
package fr.riff_app.riff.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.forum_thalie.tsumugi.R
|
import fr.riff_app.riff.R
|
||||||
import fr.forum_thalie.tsumugi.colorBlue
|
import fr.riff_app.riff.colorBlue
|
||||||
import fr.forum_thalie.tsumugi.colorWhited
|
import fr.riff_app.riff.colorWhited
|
||||||
import fr.forum_thalie.tsumugi.playerstore.Song
|
import fr.riff_app.riff.playerstore.Song
|
||||||
import fr.forum_thalie.tsumugi.tag
|
import fr.riff_app.riff.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
|
||||||
|
|
||||||
|
|
@ -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/colorAccent"/>
|
<item android:drawable="@color/black"/>
|
||||||
<!-- Your product logo - 144dp color version of your app icon -->
|
<!-- Your product logo - 144dp color version of your app icon -->
|
||||||
|
|
||||||
<item
|
<item
|
||||||
android:drawable="@drawable/ic_tsumugi_lineart"
|
android:drawable="@mipmap/ic_launcher"
|
||||||
android:gravity="center"
|
android:gravity="center"
|
||||||
android:height="144dp"
|
android:height="144dp"
|
||||||
android:width="144dp"
|
android:width="144dp"
|
||||||
|
|
|
||||||
|
|
@ -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="108dp"
|
android:width="128dp"
|
||||||
android:height="108dp"
|
android:height="128dp"
|
||||||
android:viewportWidth="108"
|
android:viewportWidth="128"
|
||||||
android:viewportHeight="108"
|
android:viewportHeight="128">
|
||||||
>
|
|
||||||
<path
|
<path
|
||||||
android:fillColor="@color/colorAccent"
|
android:strokeWidth="1"
|
||||||
android:pathData="M0,0h108v108h-108z" />
|
android:pathData="M-22.4,-18.02h249.46v189.63h-249.46z"
|
||||||
|
android:fillColor="#000000"
|
||||||
|
android:strokeColor="#ffffff"/>
|
||||||
</vector>
|
</vector>
|
||||||
|
|
|
||||||
|
|
@ -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/colorPrimaryDark"/>
|
<item android:drawable="@color/black"/>
|
||||||
<!-- 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="@drawable/splash_logo"
|
android:src="@mipmap/ic_launcher"
|
||||||
android:gravity="center"
|
android:gravity="center"
|
||||||
/>
|
/>
|
||||||
</item>
|
</item>
|
||||||
|
|
|
||||||
|
Before Width: | Height: | Size: 110 KiB |
|
Before Width: | Height: | Size: 13 KiB |
|
|
@ -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="@drawable/logo_roundsquare"
|
app:srcCompat="@mipmap/ic_launcher"
|
||||||
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"
|
||||||
|
|
|
||||||
|
|
@ -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="@drawable/logo_roundsquare"
|
app:srcCompat="@mipmap/ic_launcher"
|
||||||
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" -->
|
||||||
|
|
|
||||||
|
Before Width: | Height: | Size: 5.0 KiB |
|
Before Width: | Height: | Size: 7.5 KiB |
|
Before Width: | Height: | Size: 2.9 KiB |
|
Before Width: | Height: | Size: 4.2 KiB |
|
Before Width: | Height: | Size: 7.5 KiB |
|
Before Width: | Height: | Size: 11 KiB |
|
Before Width: | Height: | Size: 13 KiB |
|
Before Width: | Height: | Size: 19 KiB |
|
Before Width: | Height: | Size: 19 KiB |
|
Before Width: | Height: | Size: 29 KiB |
|
|
@ -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.forum_thalie.tsumugi.ui.news.NewsFragment"
|
android:name="fr.riff_app.riff.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>
|
||||||
|
|
@ -8,7 +8,7 @@
|
||||||
|
|
||||||
<fragment
|
<fragment
|
||||||
android:id="@+id/fragment_nowplaying"
|
android:id="@+id/fragment_nowplaying"
|
||||||
android:name="fr.forum_thalie.tsumugi.ui.nowplaying.NowPlayingFragment"
|
android:name="fr.riff_app.riff.ui.nowplaying.NowPlayingFragment"
|
||||||
android:label="@string/title_nowplaying" />
|
android:label="@string/title_nowplaying" />
|
||||||
|
|
||||||
</navigation>
|
</navigation>
|
||||||
|
|
@ -8,7 +8,7 @@
|
||||||
|
|
||||||
<fragment
|
<fragment
|
||||||
android:id="@+id/fragment_programme"
|
android:id="@+id/fragment_programme"
|
||||||
android:name="fr.forum_thalie.tsumugi.ui.programme.ProgrammeFragment"
|
android:name="fr.riff_app.riff.ui.programme.ProgrammeFragment"
|
||||||
android:label="@string/title_programme" />
|
android:label="@string/title_programme" />
|
||||||
|
|
||||||
</navigation>
|
</navigation>
|
||||||
|
|
@ -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.forum_thalie.tsumugi.ui.songs.SongsFragment"
|
android:name="fr.riff_app.riff.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>
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
<resources>
|
<resources>
|
||||||
<string name="app_name">Tsumugi</string>
|
<string name="app_name">Riff</string>
|
||||||
<string name="title_nowplaying">Tsumugi</string>
|
<string name="title_nowplaying">Riff</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>
|
||||||
|
|
|
||||||
|
|
@ -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_TSUMUGI">https://radio.mahoro-net.org/streams/tsumugi</string>
|
<string name="STREAM_URL_RIFF">https://sstream.riff-radio.org/;stream.mp3</string>
|
||||||
|
|
||||||
</resources>
|
</resources>
|
||||||
|
|
|
||||||
|
|
@ -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">#f58b01</color>
|
<color name="colorAccent">#ff0000</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,13 +19,15 @@
|
||||||
<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">#f58b01</color>
|
<color name="seek_bar_progress">#ff0000</color>
|
||||||
<color name="seek_bar_secondary_progress">#3A7AAF</color>
|
<color name="seek_bar_secondary_progress">#ff0000</color>
|
||||||
|
|
||||||
<color name="progress_bar_background">#585858</color>
|
<color name="progress_bar_background">#585858</color>
|
||||||
<color name="progress_bar_progress">#3A7AAF</color>
|
<color name="progress_bar_progress">#ff0000</color>
|
||||||
<color name="progress_bar_secondary_progress">#f58b01</color>
|
<color name="progress_bar_secondary_progress">#ff0000</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>
|
||||||
|
|
|
||||||
|
|
@ -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">#F58B01</color>
|
<color name="ic_launcher_background">#000000</color>
|
||||||
</resources>
|
</resources>
|
||||||
|
|
@ -1,18 +1,19 @@
|
||||||
<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://relay0.r-a-d.io/main.mp3</string>
|
<string name="STREAM_URL_RADIO">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_RIFF">https://sstream.riff-radio.org/;stream.mp3</string>
|
||||||
<string name="STREAM_URL_RSTLSS">http://stream.radiosolution.fr/rstlss.mp3</string>
|
<string name="STREAM_URL_RSTLSS">https://sstream.riff-radio.org/;stream.mp3</string>
|
||||||
<string name="github_url_new_issue">https://github.com/yattoz/Tsumugi-app/issues/</string>
|
<string name="github_url_new_issue">https://git.pagelibre.org/riff/riff_app</string>
|
||||||
<string name="website_url">https://tsumugi.forum-thalie.fr/</string>
|
<string name="website_url">https://m.riff-radio.fr/</string>
|
||||||
<string name="rss_url">https://tsumugi.forum-thalie.fr/?feed=rss2</string>
|
<string name="rss_url">https://www.riff-radio.org/rss.xml</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">Tsumugi</string>
|
<string name="app_name">Riff</string>
|
||||||
<string name="title_nowplaying">Tsumugi</string>
|
<string name="title_nowplaying">Riff</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>
|
||||||
|
|
@ -26,14 +27,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">Current programme : </string>
|
<string name="current_programme">Playing now : </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">Tsumugi Stream Service</string>
|
<string name="nowPlayingNotificationChannel">Riff Stream Service</string>
|
||||||
<string name="nowPlayingChannelId">fr.forum_thalie.tsumugi.PLAYER_SERVICE</string>
|
<string name="nowPlayingChannelId">fr.riff_app.riff.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>
|
||||||
|
|
|
||||||
|
|
@ -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/colorAccent</item>
|
<item name="colorAccent">@color/riffRed</item>
|
||||||
<item name="icon">@drawable/logo_roundsquare</item>
|
<item name="icon">@mipmap/ic_launcher</item>
|
||||||
<item name="android:textColorHighlight">@color/rblue</item>
|
<item name="android:textColorHighlight">@color/riffRed</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/colorAccent</item>
|
<item name="colorAccent">@color/riffRed</item>
|
||||||
<item name="android:textColorHighlight">@color/rblue</item>
|
<item name="android:textColorHighlight">@color/riffRed</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/colorAccent</item>
|
<item name="colorAccent">@color/riffRed</item>
|
||||||
<item name="android:textColorHighlight">@color/rblue</item>
|
<item name="android:textColorHighlight">@color/riffRed</item>
|
||||||
<item name="android:colorBackground">@color/colorPrimaryDark</item>
|
<item name="android:colorBackground">@color/colorPrimaryDark</item>
|
||||||
</style>
|
</style>
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -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.forum_thalie.tsumugi.preferences.AlarmAdjustVolumeFragment"
|
app:fragment="fr.riff_app.riff.preferences.AlarmAdjustVolumeFragment"
|
||||||
/>
|
/>
|
||||||
|
|
||||||
</PreferenceScreen>
|
</PreferenceScreen>
|
||||||
|
|
@ -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.forum_thalie.tsumugi.preferences.AlarmFragment"
|
app:fragment="fr.riff_app.riff.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.forum_thalie.tsumugi.preferences.SleepFragment"
|
app:fragment="fr.riff_app.riff.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.forum_thalie.tsumugi.preferences.CustomizeFragment"
|
app:fragment="fr.riff_app.riff.preferences.CustomizeFragment"
|
||||||
/>
|
/>
|
||||||
|
|
||||||
<Preference
|
<Preference
|
||||||
|
|
|
||||||
|
|
@ -1,17 +0,0 @@
|
||||||
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)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
@ -1,16 +1,17 @@
|
||||||
// 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.3.72'
|
ext.kotlin_version = '1.6.10'
|
||||||
repositories {
|
repositories {
|
||||||
google()
|
google()
|
||||||
jcenter()
|
jcenter()
|
||||||
}
|
}
|
||||||
dependencies {
|
dependencies {
|
||||||
classpath 'com.android.tools.build:gradle:4.0.1'
|
classpath 'com.android.tools.build:gradle:7.1.2'
|
||||||
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
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -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-6.1.1-all.zip
|
distributionUrl=https\://services.gradle.org/distributions/gradle-7.2-all.zip
|
||||||
|
|
|
||||||