removed specific R/a/dio stuff
parent
cd1068e090
commit
6db17ee8ad
|
|
@ -23,5 +23,4 @@ enum class ActionOpenParam {
|
||||||
SLEEP,
|
SLEEP,
|
||||||
ALARM,
|
ALARM,
|
||||||
CUSTOMIZE,
|
CUSTOMIZE,
|
||||||
STREAMER_NOTIFICATION_SERVICE
|
|
||||||
}
|
}
|
||||||
|
|
@ -23,6 +23,7 @@ class Async(val handler: (Any?) -> Any?, val post: (Any?) -> Unit = {},
|
||||||
ActionOnError.RESET -> resetPlayerStateOnNetworkError()
|
ActionOnError.RESET -> resetPlayerStateOnNetworkError()
|
||||||
ActionOnError.NOTIFY -> return
|
ActionOnError.NOTIFY -> return
|
||||||
}
|
}
|
||||||
|
e.printStackTrace()
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun resetPlayerStateOnNetworkError() {
|
private fun resetPlayerStateOnNetworkError() {
|
||||||
|
|
|
||||||
|
|
@ -23,7 +23,7 @@ abstract class BaseNotification(private val notificationChannelId: String,
|
||||||
|
|
||||||
// Define the notification in android's swipe-down menu
|
// Define the notification in android's swipe-down menu
|
||||||
lateinit var notification: Notification
|
lateinit var notification: Notification
|
||||||
protected lateinit var notificationManager: NotificationManager
|
private lateinit var notificationManager: NotificationManager
|
||||||
protected lateinit var builder: NotificationCompat.Builder
|
protected lateinit var builder: NotificationCompat.Builder
|
||||||
|
|
||||||
@RequiresApi(api = Build.VERSION_CODES.O)
|
@RequiresApi(api = Build.VERSION_CODES.O)
|
||||||
|
|
|
||||||
|
|
@ -7,7 +7,6 @@ import android.support.v4.media.session.MediaSessionCompat
|
||||||
import android.support.v4.media.session.PlaybackStateCompat
|
import android.support.v4.media.session.PlaybackStateCompat
|
||||||
import androidx.core.app.NotificationCompat
|
import androidx.core.app.NotificationCompat
|
||||||
import fr.forum_thalie.tsumugi.playerstore.PlayerStore
|
import fr.forum_thalie.tsumugi.playerstore.PlayerStore
|
||||||
import fr.forum_thalie.tsumugi.BootBroadcastReceiver
|
|
||||||
|
|
||||||
class NowPlayingNotification(
|
class NowPlayingNotification(
|
||||||
notificationChannelId: String,
|
notificationChannelId: String,
|
||||||
|
|
@ -27,7 +26,7 @@ class NowPlayingNotification(
|
||||||
// ###### NOW PLAYING NOTIFICATION ########
|
// ###### NOW PLAYING NOTIFICATION ########
|
||||||
// ########################################
|
// ########################################
|
||||||
|
|
||||||
lateinit var mediaStyle: androidx.media.app.NotificationCompat.DecoratedMediaCustomViewStyle
|
private lateinit var mediaStyle: androidx.media.app.NotificationCompat.DecoratedMediaCustomViewStyle
|
||||||
|
|
||||||
fun create(c: Context, m: MediaSessionCompat) {
|
fun create(c: Context, m: MediaSessionCompat) {
|
||||||
super.create(c)
|
super.create(c)
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,5 @@
|
||||||
package fr.forum_thalie.tsumugi
|
package fr.forum_thalie.tsumugi
|
||||||
|
|
||||||
import android.support.v4.media.session.PlaybackStateCompat
|
|
||||||
import fr.forum_thalie.tsumugi.alarm.RadioSleeper
|
|
||||||
import fr.forum_thalie.tsumugi.playerstore.PlayerStore
|
import fr.forum_thalie.tsumugi.playerstore.PlayerStore
|
||||||
import java.util.*
|
import java.util.*
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -33,12 +33,12 @@ class NewsFragment : Fragment() {
|
||||||
if (!newsViewModel.isWebViewLoaded)
|
if (!newsViewModel.isWebViewLoaded)
|
||||||
{
|
{
|
||||||
try {
|
try {
|
||||||
newsViewModel.root = inflater.inflate(R.layout.fragment_chat, container, false)
|
newsViewModel.root = inflater.inflate(R.layout.fragment_news, container, false)
|
||||||
newsViewModel.webView = newsViewModel.root.findViewById(R.id.news_webview)
|
newsViewModel.webView = newsViewModel.root.findViewById(R.id.news_webview)
|
||||||
newsViewModel.webViewNews = WebViewNews(newsViewModel.webView as WebView)
|
newsViewModel.webViewNews = WebViewNews(newsViewModel.webView as WebView)
|
||||||
newsViewModel.webViewNews!!.start()
|
newsViewModel.webViewNews!!.start()
|
||||||
} catch (e: Exception) {
|
} catch (e: Exception) {
|
||||||
newsViewModel.root = inflater.inflate(R.layout.fragment_error_chat, container, false)
|
newsViewModel.root = inflater.inflate(R.layout.fragment_error_webview, container, false)
|
||||||
}
|
}
|
||||||
|
|
||||||
newsViewModel.isWebViewLoaded = true
|
newsViewModel.isWebViewLoaded = true
|
||||||
|
|
|
||||||
|
|
@ -46,25 +46,44 @@ class NowPlayingFragment : Fragment() {
|
||||||
val seekBarVolume: SeekBar = root.findViewById(R.id.seek_bar_volume)
|
val seekBarVolume: SeekBar = root.findViewById(R.id.seek_bar_volume)
|
||||||
val volumeText: TextView = root.findViewById(R.id.volume_text)
|
val volumeText: TextView = root.findViewById(R.id.volume_text)
|
||||||
val progressBar: ProgressBar = root.findViewById(R.id.progressBar)
|
val progressBar: ProgressBar = root.findViewById(R.id.progressBar)
|
||||||
|
val volumeIconImage : ImageView = root.findViewById(R.id.volume_icon)
|
||||||
|
|
||||||
|
// Note: these values are not used in the generic app
|
||||||
val streamerPictureImageView: ImageView = root.findViewById(R.id.streamerPicture)
|
val streamerPictureImageView: ImageView = root.findViewById(R.id.streamerPicture)
|
||||||
|
/*
|
||||||
val streamerNameText : TextView = root.findViewById(R.id.streamerName)
|
val streamerNameText : TextView = root.findViewById(R.id.streamerName)
|
||||||
val songTitleNextText: TextView = root.findViewById(R.id.text_song_title_next)
|
val songTitleNextText: TextView = root.findViewById(R.id.text_song_title_next)
|
||||||
val songArtistNextText: TextView = root.findViewById(R.id.text_song_artist_next)
|
val songArtistNextText: TextView = root.findViewById(R.id.text_song_artist_next)
|
||||||
val volumeIconImage : ImageView = root.findViewById(R.id.volume_icon)
|
|
||||||
val listenersText : TextView = root.findViewById(R.id.listenersCount)
|
val listenersText : TextView = root.findViewById(R.id.listenersCount)
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
TextViewCompat.setAutoSizeTextTypeUniformWithConfiguration(
|
TextViewCompat.setAutoSizeTextTypeUniformWithConfiguration(
|
||||||
streamerNameText,8, 20, 2, TypedValue.COMPLEX_UNIT_SP)
|
streamerNameText,8, 20, 2, TypedValue.COMPLEX_UNIT_SP)
|
||||||
TextViewCompat.setAutoSizeTextTypeUniformWithConfiguration(
|
TextViewCompat.setAutoSizeTextTypeUniformWithConfiguration(
|
||||||
listenersText,8, 16, 2, TypedValue.COMPLEX_UNIT_SP)
|
listenersText,8, 16, 2, TypedValue.COMPLEX_UNIT_SP)
|
||||||
/*
|
|
||||||
TextViewCompat.setAutoSizeTextTypeUniformWithConfiguration(
|
|
||||||
songTitleText,4, 24, 2, TypedValue.COMPLEX_UNIT_SP)
|
|
||||||
TextViewCompat.setAutoSizeTextTypeUniformWithConfiguration(
|
|
||||||
songArtistText,4, 24, 2, TypedValue.COMPLEX_UNIT_SP)
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
// trick : I can't observe the queue because it's an ArrayDeque that doesn't trigger any change...
|
||||||
|
// so I observe a dedicated Mutable that gets set when the queue is updated.
|
||||||
|
PlayerStore.instance.isQueueUpdated.observe(viewLifecycleOwner, Observer {
|
||||||
|
val t = if (PlayerStore.instance.queue.size > 0) PlayerStore.instance.queue[0] else Song("No queue - ") // (it.peekFirst != null ? it.peekFirst : Song() )
|
||||||
|
songTitleNextText.text = t.title.value
|
||||||
|
songArtistNextText.text = t.artist.value
|
||||||
|
})
|
||||||
|
|
||||||
|
PlayerStore.instance.streamerName.observe(viewLifecycleOwner, Observer {
|
||||||
|
streamerNameText.text = it
|
||||||
|
})
|
||||||
|
|
||||||
|
PlayerStore.instance.listenersCount.observe(viewLifecycleOwner, Observer {
|
||||||
|
listenersText.text = "${getString(R.string.listeners)}: $it"
|
||||||
|
})
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
PlayerStore.instance.currentSong.title.observe(viewLifecycleOwner, Observer {
|
PlayerStore.instance.currentSong.title.observe(viewLifecycleOwner, Observer {
|
||||||
songTitleText.text = it
|
songTitleText.text = it
|
||||||
})
|
})
|
||||||
|
|
@ -77,13 +96,6 @@ class NowPlayingFragment : Fragment() {
|
||||||
syncPlayPauseButtonImage(root)
|
syncPlayPauseButtonImage(root)
|
||||||
})
|
})
|
||||||
|
|
||||||
// trick : I can't observe the queue because it's an ArrayDeque that doesn't trigger any change...
|
|
||||||
// so I observe a dedicated Mutable that gets set when the queue is updated.
|
|
||||||
PlayerStore.instance.isQueueUpdated.observe(viewLifecycleOwner, Observer {
|
|
||||||
val t = if (PlayerStore.instance.queue.size > 0) PlayerStore.instance.queue[0] else Song("No queue - ") // (it.peekFirst != null ? it.peekFirst : Song() )
|
|
||||||
songTitleNextText.text = t.title.value
|
|
||||||
songArtistNextText.text = t.artist.value
|
|
||||||
})
|
|
||||||
|
|
||||||
fun volumeIcon(it: Int)
|
fun volumeIcon(it: Int)
|
||||||
{
|
{
|
||||||
|
|
@ -113,14 +125,6 @@ class NowPlayingFragment : Fragment() {
|
||||||
streamerPictureImageView.setImageBitmap(pic)
|
streamerPictureImageView.setImageBitmap(pic)
|
||||||
})
|
})
|
||||||
|
|
||||||
PlayerStore.instance.streamerName.observe(viewLifecycleOwner, Observer {
|
|
||||||
streamerNameText.text = it
|
|
||||||
})
|
|
||||||
|
|
||||||
PlayerStore.instance.listenersCount.observe(viewLifecycleOwner, Observer {
|
|
||||||
listenersText.text = "${getString(R.string.listeners)}: $it"
|
|
||||||
})
|
|
||||||
|
|
||||||
// fuck it, do it on main thread
|
// fuck it, do it on main thread
|
||||||
PlayerStore.instance.currentTime.observe(viewLifecycleOwner, Observer {
|
PlayerStore.instance.currentTime.observe(viewLifecycleOwner, Observer {
|
||||||
val dd = (PlayerStore.instance.currentTime.value!! - PlayerStore.instance.currentSong.startTime.value!!).toInt()
|
val dd = (PlayerStore.instance.currentTime.value!! - PlayerStore.instance.currentSong.startTime.value!!).toInt()
|
||||||
|
|
@ -173,18 +177,6 @@ class NowPlayingFragment : Fragment() {
|
||||||
PlayerStore.instance.isPlaying.value = PlayerStore.instance.playbackState.value == PlaybackStateCompat.STATE_STOPPED
|
PlayerStore.instance.isPlaying.value = PlayerStore.instance.playbackState.value == PlaybackStateCompat.STATE_STOPPED
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
/* TODO : disabled volumeIconImage click listener, it creates weird behaviors when switching fragments.
|
|
||||||
in particular, the mute state isn't retained when switching fragments, and it creates visual error
|
|
||||||
(displaying the mute icon when it's not muted).
|
|
||||||
So for the moment it's safer to disable it altogether.
|
|
||||||
*/
|
|
||||||
volumeIconImage.setOnClickListener{
|
|
||||||
PlayerStore.instance.isMuted.value = !PlayerStore.instance.isMuted.value!!
|
|
||||||
}
|
|
||||||
|
|
||||||
*/
|
|
||||||
|
|
||||||
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 = context!!.getSystemService(Context.CLIPBOARD_SERVICE) as ClipboardManager
|
||||||
|
|
|
||||||
|
|
@ -29,7 +29,7 @@ class SongsFragment : Fragment() {
|
||||||
adapter = SongsPagerAdapter(childFragmentManager, FragmentPagerAdapter.BEHAVIOR_RESUME_ONLY_CURRENT_FRAGMENT)
|
adapter = SongsPagerAdapter(childFragmentManager, FragmentPagerAdapter.BEHAVIOR_RESUME_ONLY_CURRENT_FRAGMENT)
|
||||||
adapter.addFragment(LastPlayedFragment.newInstance(), "last played")
|
adapter.addFragment(LastPlayedFragment.newInstance(), "last played")
|
||||||
|
|
||||||
//adapter.addFragment(QueueFragment.newInstance(), "queue")
|
// You can add more fragments to the adapter, to display more information (for example with R/a/dio, queue, request, faves...)
|
||||||
|
|
||||||
viewPager.adapter = adapter
|
viewPager.adapter = adapter
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,21 +0,0 @@
|
||||||
<?xml version="1.0" encoding="utf-8"?>
|
|
||||||
<androidx.constraintlayout.widget.ConstraintLayout
|
|
||||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
|
||||||
xmlns:app="http://schemas.android.com/apk/res-auto"
|
|
||||||
|
|
||||||
android:layout_width="match_parent"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
>
|
|
||||||
|
|
||||||
<Button
|
|
||||||
android:id="@+id/loadMoreButton"
|
|
||||||
android:layout_width="wrap_content"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
app:layout_constraintBottom_toBottomOf="parent"
|
|
||||||
app:layout_constraintStart_toStartOf="parent"
|
|
||||||
app:layout_constraintEnd_toEndOf="parent"
|
|
||||||
android:text="@string/load_more_results"
|
|
||||||
android:visibility="gone"
|
|
||||||
/>
|
|
||||||
|
|
||||||
</androidx.constraintlayout.widget.ConstraintLayout>
|
|
||||||
|
|
@ -1,42 +0,0 @@
|
||||||
<?xml version="1.0" encoding="utf-8"?>
|
|
||||||
<!--
|
|
||||||
<androidx.constraintlayout.widget.ConstraintLayout
|
|
||||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
|
||||||
xmlns:app="http://schemas.android.com/apk/res-auto"
|
|
||||||
android:layout_width="match_parent"
|
|
||||||
android:layout_height="match_parent" >
|
|
||||||
|
|
||||||
<TextView
|
|
||||||
android:id="@+id/text_notifications"
|
|
||||||
android:layout_width="match_parent"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:layout_marginStart="8dp"
|
|
||||||
android:layout_marginTop="8dp"
|
|
||||||
android:layout_marginEnd="8dp"
|
|
||||||
android:textAlignment="center"
|
|
||||||
android:textSize="20sp"
|
|
||||||
app:layout_constraintEnd_toEndOf="parent"
|
|
||||||
app:layout_constraintStart_toStartOf="parent"
|
|
||||||
app:layout_constraintTop_toTopOf="parent"/>
|
|
||||||
</androidx.constraintlayout.widget.ConstraintLayout>
|
|
||||||
-->
|
|
||||||
|
|
||||||
<androidx.coordinatorlayout.widget.CoordinatorLayout
|
|
||||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
|
||||||
xmlns:app="http://schemas.android.com/apk/res-auto"
|
|
||||||
android:layout_width="match_parent"
|
|
||||||
android:layout_height="match_parent"
|
|
||||||
>
|
|
||||||
|
|
||||||
<!--
|
|
||||||
Yattoz - this is a simple embedded WebView to display KiwiIRC in the app.
|
|
||||||
KiwiIRC is a decent IRC, but the website is clunky and you must scroll a lot.
|
|
||||||
This WebView is just the size of the screen, to make it practical.
|
|
||||||
-->
|
|
||||||
|
|
||||||
<WebView
|
|
||||||
android:id="@+id/news_webview"
|
|
||||||
android:layout_width="match_parent"
|
|
||||||
android:layout_height="match_parent" />
|
|
||||||
|
|
||||||
</androidx.coordinatorlayout.widget.CoordinatorLayout>
|
|
||||||
|
|
@ -1,20 +0,0 @@
|
||||||
<?xml version="1.0" encoding="utf-8"?>
|
|
||||||
<androidx.constraintlayout.widget.ConstraintLayout
|
|
||||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
|
||||||
xmlns:app="http://schemas.android.com/apk/res-auto"
|
|
||||||
xmlns:tools="http://schemas.android.com/tools"
|
|
||||||
android:layout_width="match_parent"
|
|
||||||
android:layout_height="match_parent">
|
|
||||||
|
|
||||||
<TextView
|
|
||||||
android:id="@+id/textView"
|
|
||||||
android:layout_width="wrap_content"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:text="@string/error_webView"
|
|
||||||
android:textSize="40sp"
|
|
||||||
android:gravity="center"
|
|
||||||
app:layout_constraintBottom_toBottomOf="parent"
|
|
||||||
app:layout_constraintEnd_toEndOf="parent"
|
|
||||||
app:layout_constraintStart_toStartOf="parent"
|
|
||||||
app:layout_constraintTop_toTopOf="parent" />
|
|
||||||
</androidx.constraintlayout.widget.ConstraintLayout>
|
|
||||||
|
|
@ -1,72 +0,0 @@
|
||||||
<?xml version="1.0" encoding="utf-8"?>
|
|
||||||
|
|
||||||
<androidx.constraintlayout.widget.ConstraintLayout
|
|
||||||
android:orientation="vertical"
|
|
||||||
android:layout_width="match_parent"
|
|
||||||
android:layout_height="match_parent"
|
|
||||||
android:id="@+id/searchConstraint"
|
|
||||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
|
||||||
xmlns:app="http://schemas.android.com/apk/res-auto"
|
|
||||||
>
|
|
||||||
|
|
||||||
<androidx.constraintlayout.widget.ConstraintLayout
|
|
||||||
android:layout_width="match_parent"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
app:layout_constraintTop_toTopOf="parent"
|
|
||||||
android:background="@color/dark"
|
|
||||||
android:id="@+id/search"
|
|
||||||
android:padding="4dp">
|
|
||||||
<SearchView
|
|
||||||
android:id="@+id/searchBox"
|
|
||||||
android:layout_width="0dp"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
app:layout_constraintTop_toTopOf="parent"
|
|
||||||
app:layout_constraintStart_toStartOf="parent"
|
|
||||||
app:layout_constraintEnd_toStartOf="@id/ra_f_button"
|
|
||||||
android:iconifiedByDefault="false"
|
|
||||||
android:queryHint="Search for a song..."
|
|
||||||
/>
|
|
||||||
|
|
||||||
<androidx.appcompat.widget.AppCompatButton
|
|
||||||
android:id="@+id/ra_f_button"
|
|
||||||
android:layout_width="wrap_content"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
app:layout_constraintTop_toTopOf="parent"
|
|
||||||
app:layout_constraintEnd_toEndOf="parent"
|
|
||||||
android:text="@string/ra_f"
|
|
||||||
android:visibility="gone"
|
|
||||||
/>
|
|
||||||
</androidx.constraintlayout.widget.ConstraintLayout>
|
|
||||||
|
|
||||||
<TextView
|
|
||||||
android:id="@+id/noUserNameText"
|
|
||||||
android:layout_width="match_parent"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:text="@string/no_user_name"
|
|
||||||
android:gravity="center"
|
|
||||||
android:textSize="16sp"
|
|
||||||
android:visibility="gone"
|
|
||||||
android:layout_margin="16dp"
|
|
||||||
app:layout_constraintTop_toBottomOf="@id/search"
|
|
||||||
/>
|
|
||||||
<androidx.swiperefreshlayout.widget.SwipeRefreshLayout
|
|
||||||
android:id="@+id/recyclerSwipe"
|
|
||||||
android:layout_width="match_parent"
|
|
||||||
android:layout_height="0dp"
|
|
||||||
app:layout_constraintTop_toBottomOf="@id/search"
|
|
||||||
app:layout_constraintBottom_toBottomOf="parent"
|
|
||||||
android:layout_margin="8dp"
|
|
||||||
>
|
|
||||||
<androidx.recyclerview.widget.RecyclerView
|
|
||||||
android:layout_width="match_parent"
|
|
||||||
android:layout_height="match_parent"
|
|
||||||
android:id="@+id/request_recycler"
|
|
||||||
android:scrollbars="vertical"
|
|
||||||
>
|
|
||||||
|
|
||||||
</androidx.recyclerview.widget.RecyclerView>
|
|
||||||
</androidx.swiperefreshlayout.widget.SwipeRefreshLayout>
|
|
||||||
|
|
||||||
|
|
||||||
</androidx.constraintlayout.widget.ConstraintLayout>
|
|
||||||
|
|
||||||
|
|
@ -1,72 +0,0 @@
|
||||||
<?xml version="1.0" encoding="utf-8"?>
|
|
||||||
<androidx.constraintlayout.widget.ConstraintLayout
|
|
||||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
|
||||||
android:layout_width="match_parent"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
xmlns:app="http://schemas.android.com/apk/res-auto"
|
|
||||||
android:id="@+id/itemLayout">
|
|
||||||
|
|
||||||
<androidx.constraintlayout.widget.ConstraintLayout
|
|
||||||
android:layout_width="match_parent"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
app:layout_constraintTop_toTopOf="parent"
|
|
||||||
android:layout_marginLeft="0dp"
|
|
||||||
android:layout_marginRight="0dp"
|
|
||||||
android:id="@+id/item"
|
|
||||||
>
|
|
||||||
<TextView
|
|
||||||
android:id="@+id/request_song_artist"
|
|
||||||
android:layout_width="0dp"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:layout_marginEnd="8dp"
|
|
||||||
android:layout_marginRight="8dp"
|
|
||||||
app:layout_constraintTop_toTopOf="parent"
|
|
||||||
app:layout_constraintEnd_toStartOf="@+id/request_button"
|
|
||||||
app:layout_constraintStart_toStartOf="parent"
|
|
||||||
app:layout_constraintBottom_toTopOf="@id/request_song_title"
|
|
||||||
android:textSize="16sp"
|
|
||||||
android:textColor="@color/whited3"
|
|
||||||
/>
|
|
||||||
|
|
||||||
<TextView
|
|
||||||
android:id="@+id/request_song_title"
|
|
||||||
android:layout_width="0dp"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:textColor="@color/whited"
|
|
||||||
android:textSize="16sp"
|
|
||||||
android:layout_marginEnd="8dp"
|
|
||||||
android:layout_marginRight="8dp"
|
|
||||||
app:layout_constraintBottom_toBottomOf="parent"
|
|
||||||
app:layout_constraintEnd_toStartOf="@+id/request_button"
|
|
||||||
app:layout_constraintStart_toStartOf="parent"
|
|
||||||
app:layout_constraintTop_toBottomOf="@id/request_song_artist" />
|
|
||||||
<androidx.appcompat.widget.AppCompatButton
|
|
||||||
android:id="@+id/request_button"
|
|
||||||
android:layout_width="wrap_content"
|
|
||||||
android:layout_height="56dp"
|
|
||||||
app:layout_constraintTop_toTopOf="parent"
|
|
||||||
app:layout_constraintBottom_toBottomOf="parent"
|
|
||||||
app:layout_constraintEnd_toEndOf="parent"
|
|
||||||
android:text="@string/request"
|
|
||||||
android:textSize="12sp"
|
|
||||||
/>
|
|
||||||
|
|
||||||
</androidx.constraintlayout.widget.ConstraintLayout>
|
|
||||||
|
|
||||||
<View
|
|
||||||
android:id="@+id/divider"
|
|
||||||
android:layout_width="match_parent"
|
|
||||||
android:layout_height="1dp"
|
|
||||||
android:background="?android:attr/listDivider"
|
|
||||||
app:layout_constraintTop_toBottomOf="@id/item"
|
|
||||||
app:layout_constraintStart_toStartOf="parent"
|
|
||||||
app:layout_constraintBottom_toBottomOf="parent"
|
|
||||||
app:layout_constraintEnd_toEndOf="parent"
|
|
||||||
android:layout_marginTop="8dp"
|
|
||||||
/>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
</androidx.constraintlayout.widget.ConstraintLayout>
|
|
||||||
|
|
@ -1,21 +1,5 @@
|
||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<resources>
|
<resources>
|
||||||
<string-array name="streamerFetchPeriodString">
|
|
||||||
<item name="5">"Every 5 minutes"</item>
|
|
||||||
<item name="10">"Every 10 minutes"</item>
|
|
||||||
<item name="15">"Every 15 minutes"</item>
|
|
||||||
<item name="20">"Every 20 minutes"</item>
|
|
||||||
<item name="25">"Every 25 minutes"</item>
|
|
||||||
<item name="30">"Every 30 minutes"</item>
|
|
||||||
</string-array>
|
|
||||||
<string-array name="streamerFetchPeriod">
|
|
||||||
<item name="5">5</item>
|
|
||||||
<item name="10">10</item>
|
|
||||||
<item name="15">15</item>
|
|
||||||
<item name="20">20</item>
|
|
||||||
<item name="25">25</item>
|
|
||||||
<item name="30">30</item>
|
|
||||||
</string-array>
|
|
||||||
|
|
||||||
<string-array name="weekdays">
|
<string-array name="weekdays">
|
||||||
<item name="monday">Monday</item>
|
<item name="monday">Monday</item>
|
||||||
|
|
@ -37,19 +21,5 @@
|
||||||
<item name="25">25</item>
|
<item name="25">25</item>
|
||||||
<item name="30">30</item>
|
<item name="30">30</item>
|
||||||
</string-array>
|
</string-array>
|
||||||
<string-array name="fetchPeriodString">
|
|
||||||
<item name="5">Every 5 seconds (faster update)</item>
|
|
||||||
<item name="10">Every 10 seconds</item>
|
|
||||||
<item name="15">Every 15 seconds</item>
|
|
||||||
<item name="20">Every 20 seconds</item>
|
|
||||||
<item name="30">Every 30 seconds (less battery-intensive)</item>
|
|
||||||
</string-array>
|
|
||||||
<string-array name="fetchPeriodValues">
|
|
||||||
<item name="5">5</item>
|
|
||||||
<item name="10">10</item>
|
|
||||||
<item name="15">15</item>
|
|
||||||
<item name="20">20</item>
|
|
||||||
<item name="30">30</item>
|
|
||||||
</string-array>
|
|
||||||
|
|
||||||
</resources>
|
</resources>
|
||||||
|
|
@ -7,12 +7,6 @@
|
||||||
|
|
||||||
<string name="now_playing_notification_title_template">Now playing: %1$s</string>
|
<string name="now_playing_notification_title_template">Now playing: %1$s</string>
|
||||||
|
|
||||||
|
|
||||||
<string name="action_share">Share</string>
|
|
||||||
<string name="action_reply">Reply</string>
|
|
||||||
|
|
||||||
<string name="new_message_notification_title_template">New message: %1$s</string>
|
|
||||||
|
|
||||||
<string name="MEDIA_ROOT_ID">radio_root_id</string>
|
<string name="MEDIA_ROOT_ID">radio_root_id</string>
|
||||||
<string name="STREAM_URL_RADIO">https://relay0.r-a-d.io/main.mp3</string>
|
<string name="STREAM_URL_RADIO">https://relay0.r-a-d.io/main.mp3</string>
|
||||||
<string name="STREAM_URL_TSUMUGI">http://shelter.mahoro-net.org:8000/tsumugi</string>
|
<string name="STREAM_URL_TSUMUGI">http://shelter.mahoro-net.org:8000/tsumugi</string>
|
||||||
|
|
@ -24,29 +18,13 @@
|
||||||
<string name="up_next">Up next:</string>
|
<string name="up_next">Up next:</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="load_more_results">Load more results</string>
|
|
||||||
<string name="request">request</string>
|
|
||||||
<string name="action_settings">Settings</string>
|
<string name="action_settings">Settings</string>
|
||||||
<string name="action_refresh">Force data refresh</string>
|
|
||||||
<string name="action_bug_submit">Submit a bug (GitHub)</string>
|
<string name="action_bug_submit">Submit a bug (GitHub)</string>
|
||||||
<string name="github_url_new_issue">https://github.com/yattoz/Tsumugi-app/issues/</string>
|
<string name="github_url_new_issue">https://github.com/yattoz/Tsumugi-app/issues/</string>
|
||||||
<string name="no_user_name">To display your favorite, set you IRC user name in Settings → Customize app behavior.</string>
|
|
||||||
<string name="ra_f">.ra f</string>
|
|
||||||
|
|
||||||
<string name="nowPlayingNotificationChannel">R/a/dio Stream Service</string>
|
<string name="nowPlayingNotificationChannel">R/a/dio Stream Service</string>
|
||||||
<string name="nowPlayingChannelId">fr.forum_thalie.tsumugi.PLAYER_SERVICE</string>
|
<string name="nowPlayingChannelId">fr.forum_thalie.tsumugi.PLAYER_SERVICE</string>
|
||||||
|
|
||||||
<string name="streamerServiceChannel">Streamer Monitor Service</string>
|
|
||||||
<string name="streamerServiceChannelId">fr.forum_thalie.tsumugi.STREAMER_NOTIFICATION_SERVICE</string>
|
|
||||||
|
|
||||||
<string name="streamerNotificationChannel">New Streamer Notification</string>
|
|
||||||
<string name="streamerNotificationChannelId">fr.forum_thalie.tsumugi.STREAMER_NOTIFICATION_NEW</string>
|
|
||||||
<string name="warningStreamerNotif">
|
|
||||||
This feature is EXPERIMENTAL.
|
|
||||||
\nIt WILL consume your battery by polling the server regularly.
|
|
||||||
\nUsing Twitter Push Notifications instead is largely recommended.
|
|
||||||
\nThis polling should only be considered as the last resort for people not wanting to register on Twitter or phones without Google Play services.\n
|
|
||||||
\n\nAre you sure you want to enable this?</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>
|
||||||
<string name="every_day">Every day</string>
|
<string name="every_day">Every day</string>
|
||||||
|
|
@ -57,16 +35,11 @@
|
||||||
<string name="split_layout">Split Now Playing screen in 2 blocks when device is horizontal</string>
|
<string name="split_layout">Split Now Playing screen in 2 blocks when device is horizontal</string>
|
||||||
<string name="not_split_layout">Keep the same layout when horizontal as in vertical</string>
|
<string name="not_split_layout">Keep the same layout when horizontal as in vertical</string>
|
||||||
<string name="action_sleep">Sleep timer</string>
|
<string name="action_sleep">Sleep timer</string>
|
||||||
<string name="github_url_wiki_irc_for_favorites">https://github.com/yattoz/Radio2/wiki/Help:-using-favorites-with-IRC</string>
|
|
||||||
<string name="dont_fetch_on_background">Disable</string>
|
<string name="dont_fetch_on_background">Disable</string>
|
||||||
<string name="restart_the_app">You need to restart the app to apply the changes for this setting.</string>
|
<string name="restart_the_app">You need to restart the app to apply the changes for this setting.</string>
|
||||||
<string name="fetch_disabled_restart_the_app">
|
|
||||||
By disabling this, you won\'t see the song get updated in the app nor in the notification when the playback is stopped, but you may save some battery.
|
|
||||||
\n\nYou need to restart the app to apply the changes for this setting.
|
|
||||||
</string>
|
|
||||||
<string name="action_alarm">Alarm</string>
|
<string name="action_alarm">Alarm</string>
|
||||||
<string name="sleep_fade_out_text">One minute before the end of the timer, the volume will gradually decrease.</string>
|
<string name="sleep_fade_out_text">One minute before the end of the timer, the volume will gradually decrease.</string>
|
||||||
<string name="disable">Disable</string>
|
<string name="disable">Disable</string>
|
||||||
<string name="ed">ed</string>
|
|
||||||
|
|
||||||
</resources>
|
</resources>
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue