mirror of
https://github.com/Michatec/Radio.git
synced 2026-03-31 23:46:28 +02:00
- Release of 14.1
- Added new features - Some bug fixes
This commit is contained in:
@@ -60,7 +60,6 @@ object Keys {
|
|||||||
|
|
||||||
// preferences
|
// preferences
|
||||||
const val PREF_RADIO_BROWSER_API: String = "RADIO_BROWSER_API"
|
const val PREF_RADIO_BROWSER_API: String = "RADIO_BROWSER_API"
|
||||||
const val PREF_ONE_TIME_HOUSEKEEPING_NECESSARY: String = "ONE_TIME_HOUSEKEEPING_NECESSARY_VERSIONCODE_95" // increment to current app version code to trigger housekeeping that runs only once
|
|
||||||
const val PREF_THEME_SELECTION: String = "THEME_SELECTION"
|
const val PREF_THEME_SELECTION: String = "THEME_SELECTION"
|
||||||
const val PREF_LAST_UPDATE_COLLECTION: String = "LAST_UPDATE_COLLECTION"
|
const val PREF_LAST_UPDATE_COLLECTION: String = "LAST_UPDATE_COLLECTION"
|
||||||
const val PREF_COLLECTION_SIZE: String = "COLLECTION_SIZE"
|
const val PREF_COLLECTION_SIZE: String = "COLLECTION_SIZE"
|
||||||
@@ -138,7 +137,7 @@ object Keys {
|
|||||||
const val FOLDER_AUDIO: String = "audio"
|
const val FOLDER_AUDIO: String = "audio"
|
||||||
const val FOLDER_IMAGES: String = "images"
|
const val FOLDER_IMAGES: String = "images"
|
||||||
const val FOLDER_TEMP: String = "temp"
|
const val FOLDER_TEMP: String = "temp"
|
||||||
const val URLRADIO_LEGACY_FOLDER_COLLECTION: String = "Collection"
|
const val RADIO_LEGACY_FOLDER_COLLECTION: String = "Collection"
|
||||||
|
|
||||||
// file names and extensions
|
// file names and extensions
|
||||||
const val COLLECTION_FILE: String = "collection.json"
|
const val COLLECTION_FILE: String = "collection.json"
|
||||||
|
|||||||
@@ -265,7 +265,7 @@ class PlayerFragment : Fragment(),
|
|||||||
// handle navigation arguments
|
// handle navigation arguments
|
||||||
handleNavigationArguments()
|
handleNavigationArguments()
|
||||||
// // handle start intent - if started via tap on rss link
|
// // handle start intent - if started via tap on rss link
|
||||||
// handleStartIntent()
|
handleStartIntent()
|
||||||
// start watching for changes in shared preferences
|
// start watching for changes in shared preferences
|
||||||
PreferencesHelper.registerPreferenceChangeListener(this as SharedPreferences.OnSharedPreferenceChangeListener)
|
PreferencesHelper.registerPreferenceChangeListener(this as SharedPreferences.OnSharedPreferenceChangeListener)
|
||||||
}
|
}
|
||||||
@@ -636,16 +636,16 @@ class PlayerFragment : Fragment(),
|
|||||||
collectionViewModel.collectionLiveData.observe(this) {
|
collectionViewModel.collectionLiveData.observe(this) {
|
||||||
// update collection
|
// update collection
|
||||||
collection = it
|
collection = it
|
||||||
//// // updates current station in player views
|
// updates current station in player views
|
||||||
//// playerState = PreferencesHelper.loadPlayerState()
|
playerState = PreferencesHelper.loadPlayerState()
|
||||||
// // get station
|
// // get station
|
||||||
// val station: Station = CollectionHelper.getStation(collection, playerState.stationUuid)
|
val station: Station = CollectionHelper.getStation(collection, playerState.stationUuid)
|
||||||
// // update player views
|
// // update player views
|
||||||
// layout.updatePlayerViews(activity as Context, station, playerState.isPlaying)
|
layout.updatePlayerViews(activity as Context, station, playerState.isPlaying)
|
||||||
//// // handle start intent
|
// handle start intent
|
||||||
//// handleStartIntent()
|
handleStartIntent()
|
||||||
//// // handle navigation arguments
|
// handle navigation arguments
|
||||||
//// handleNavigationArguments()
|
handleNavigationArguments()
|
||||||
}
|
}
|
||||||
collectionViewModel.collectionSizeLiveData.observe(this) {
|
collectionViewModel.collectionSizeLiveData.observe(this) {
|
||||||
// size of collection changed
|
// size of collection changed
|
||||||
|
|||||||
@@ -280,19 +280,8 @@ class PlayerService : MediaLibraryService() {
|
|||||||
val updatedMediaItems: List<MediaItem> =
|
val updatedMediaItems: List<MediaItem> =
|
||||||
mediaItems.map { mediaItem ->
|
mediaItems.map { mediaItem ->
|
||||||
CollectionHelper.getItem(this@PlayerService, collection, mediaItem.mediaId)
|
CollectionHelper.getItem(this@PlayerService, collection, mediaItem.mediaId)
|
||||||
// if (mediaItem.requestMetadata.searchQuery != null)
|
|
||||||
// getMediaItemFromSearchQuery(mediaItem.requestMetadata.searchQuery!!)
|
|
||||||
// else MediaItemTree.getItem(mediaItem.mediaId) ?: mediaItem
|
|
||||||
}
|
}
|
||||||
return Futures.immediateFuture(updatedMediaItems)
|
return Futures.immediateFuture(updatedMediaItems)
|
||||||
|
|
||||||
|
|
||||||
// val updatedMediaItems = mediaItems.map { mediaItem ->
|
|
||||||
// mediaItem.buildUpon().apply {
|
|
||||||
// setUri(mediaItem.requestMetadata.mediaUri)
|
|
||||||
// }.build()
|
|
||||||
// }
|
|
||||||
// return Futures.immediateFuture(updatedMediaItems)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -498,15 +487,10 @@ class PlayerService : MediaLibraryService() {
|
|||||||
if (!playWhenReady) {
|
if (!playWhenReady) {
|
||||||
when (reason) {
|
when (reason) {
|
||||||
Player.PLAY_WHEN_READY_CHANGE_REASON_END_OF_MEDIA_ITEM -> {
|
Player.PLAY_WHEN_READY_CHANGE_REASON_END_OF_MEDIA_ITEM -> {
|
||||||
// playback reached end: stop / end playback
|
stopSelf()
|
||||||
}
|
}
|
||||||
else -> {
|
else -> {
|
||||||
// playback has been paused by user or OS: update media session and save state
|
stopSelf()
|
||||||
// PLAY_WHEN_READY_CHANGE_REASON_USER_REQUEST or
|
|
||||||
// PLAY_WHEN_READY_CHANGE_REASON_AUDIO_FOCUS_LOSS or
|
|
||||||
// PLAY_WHEN_READY_CHANGE_REASON_AUDIO_BECOMING_NOISY or
|
|
||||||
// PLAY_WHEN_READY_CHANGE_REASON_REMOTE
|
|
||||||
// handlePlaybackChange(PlaybackStateCompat.STATE_PAUSED)
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -585,7 +569,6 @@ class PlayerService : MediaLibraryService() {
|
|||||||
intent.putExtra(AudioEffect.EXTRA_PACKAGE_NAME, packageName)
|
intent.putExtra(AudioEffect.EXTRA_PACKAGE_NAME, packageName)
|
||||||
intent.putExtra(AudioEffect.EXTRA_CONTENT_TYPE, AudioEffect.CONTENT_TYPE_MUSIC)
|
intent.putExtra(AudioEffect.EXTRA_CONTENT_TYPE, AudioEffect.CONTENT_TYPE_MUSIC)
|
||||||
sendBroadcast(intent)
|
sendBroadcast(intent)
|
||||||
// note: remember to broadcast AudioEffect.ACTION_CLOSE_AUDIO_EFFECT_CONTROL_SESSION, when not needed anymore
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -19,6 +19,7 @@ import android.text.method.ScrollingMovementMethod
|
|||||||
import android.view.LayoutInflater
|
import android.view.LayoutInflater
|
||||||
import android.view.View
|
import android.view.View
|
||||||
import android.widget.TextView
|
import android.widget.TextView
|
||||||
|
import android.widget.Toast
|
||||||
import androidx.core.view.isGone
|
import androidx.core.view.isGone
|
||||||
import androidx.core.view.isVisible
|
import androidx.core.view.isVisible
|
||||||
import com.google.android.material.dialog.MaterialAlertDialogBuilder
|
import com.google.android.material.dialog.MaterialAlertDialogBuilder
|
||||||
@@ -81,8 +82,7 @@ class ErrorDialog {
|
|||||||
|
|
||||||
// add okay button
|
// add okay button
|
||||||
builder.setPositiveButton(R.string.dialog_generic_button_okay) { _, _ ->
|
builder.setPositiveButton(R.string.dialog_generic_button_okay) { _, _ ->
|
||||||
// listen for click on okay button
|
Toast.makeText(context, R.string.dialog_generic_button_okay, Toast.LENGTH_SHORT).show()
|
||||||
// do nothing
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// display error dialog
|
// display error dialog
|
||||||
|
|||||||
@@ -644,48 +644,6 @@ object CollectionHelper {
|
|||||||
LocalBroadcastManager.getInstance(context).sendBroadcast(collectionChangedIntent)
|
LocalBroadcastManager.getInstance(context).sendBroadcast(collectionChangedIntent)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// /* Creates MediaMetadata for a single station - used in media session*/
|
|
||||||
// fun buildStationMediaMetadata(context: Context, station: Station, metadata: String): MediaMetadataCompat {
|
|
||||||
// return MediaMetadataCompat.Builder().apply {
|
|
||||||
// putString(MediaMetadataCompat.METADATA_KEY_ARTIST, station.name)
|
|
||||||
// putString(MediaMetadataCompat.METADATA_KEY_TITLE, metadata)
|
|
||||||
// putString(MediaMetadataCompat.METADATA_KEY_ALBUM, context.getString(R.string.app_name))
|
|
||||||
// putString(MediaMetadataCompat.METADATA_KEY_MEDIA_URI, station.getStreamUri())
|
|
||||||
// putBitmap(MediaMetadataCompat.METADATA_KEY_ALBUM_ART, ImageHelper.getScaledStationImage(context, station.image, Keys.SIZE_COVER_LOCK_SCREEN))
|
|
||||||
// //putString(MediaMetadataCompat.METADATA_KEY_ALBUM_ART_URI, station.image)
|
|
||||||
// }.build()
|
|
||||||
// }
|
|
||||||
//
|
|
||||||
//
|
|
||||||
// /* Creates MediaItem for a station - used by collection provider */
|
|
||||||
// fun buildStationMediaMetaItem(context: Context, station: Station): MediaBrowserCompat.MediaItem {
|
|
||||||
// val mediaDescriptionBuilder = MediaDescriptionCompat.Builder()
|
|
||||||
// mediaDescriptionBuilder.setMediaId(station.uuid)
|
|
||||||
// mediaDescriptionBuilder.setTitle(station.name)
|
|
||||||
// mediaDescriptionBuilder.setIconBitmap(ImageHelper.getScaledStationImage(context, station.image, Keys.SIZE_COVER_LOCK_SCREEN))
|
|
||||||
// // mediaDescriptionBuilder.setIconUri(station.image.toUri())
|
|
||||||
// return MediaBrowserCompat.MediaItem(mediaDescriptionBuilder.build(), MediaBrowserCompat.MediaItem.FLAG_PLAYABLE)
|
|
||||||
// }
|
|
||||||
//
|
|
||||||
//
|
|
||||||
// /* Creates description for a station - used in MediaSessionConnector */
|
|
||||||
// fun buildStationMediaDescription(context: Context, station: Station, metadata: String): MediaDescriptionCompat {
|
|
||||||
// val coverBitmap: Bitmap = ImageHelper.getScaledStationImage(context, station.image, Keys.SIZE_COVER_LOCK_SCREEN)
|
|
||||||
// val extras: Bundle = Bundle()
|
|
||||||
// extras.putParcelable(MediaMetadataCompat.METADATA_KEY_ALBUM_ART, coverBitmap)
|
|
||||||
// extras.putParcelable(MediaMetadataCompat.METADATA_KEY_DISPLAY_ICON, coverBitmap)
|
|
||||||
// return MediaDescriptionCompat.Builder().apply {
|
|
||||||
// setMediaId(station.uuid)
|
|
||||||
// setIconBitmap(coverBitmap)
|
|
||||||
// setIconUri(station.image.toUri())
|
|
||||||
// setTitle(metadata)
|
|
||||||
// setSubtitle(station.name)
|
|
||||||
// setExtras(extras)
|
|
||||||
// }.build()
|
|
||||||
// }
|
|
||||||
|
|
||||||
|
|
||||||
/* Creates a MediaItem with MediaMetadata for a single radio station - used to prepare player */
|
/* Creates a MediaItem with MediaMetadata for a single radio station - used to prepare player */
|
||||||
fun buildMediaItem(context: Context, station: Station): MediaItem {
|
fun buildMediaItem(context: Context, station: Station): MediaItem {
|
||||||
// put uri in RequestMetadata - credit: https://stackoverflow.com/a/70103460
|
// put uri in RequestMetadata - credit: https://stackoverflow.com/a/70103460
|
||||||
|
|||||||
@@ -246,7 +246,7 @@ object FileHelper {
|
|||||||
File(activity.getExternalFilesDir(Keys.FOLDER_COLLECTION), Keys.COLLECTION_M3U_FILE)
|
File(activity.getExternalFilesDir(Keys.FOLDER_COLLECTION), Keys.COLLECTION_M3U_FILE)
|
||||||
if (!m3uFile.exists()) {
|
if (!m3uFile.exists()) {
|
||||||
m3uFile = File(
|
m3uFile = File(
|
||||||
activity.getExternalFilesDir(Keys.URLRADIO_LEGACY_FOLDER_COLLECTION),
|
activity.getExternalFilesDir(Keys.RADIO_LEGACY_FOLDER_COLLECTION),
|
||||||
Keys.COLLECTION_M3U_FILE
|
Keys.COLLECTION_M3U_FILE
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
@@ -270,7 +270,7 @@ object FileHelper {
|
|||||||
File(activity.getExternalFilesDir(Keys.FOLDER_COLLECTION), Keys.COLLECTION_PLS_FILE)
|
File(activity.getExternalFilesDir(Keys.FOLDER_COLLECTION), Keys.COLLECTION_PLS_FILE)
|
||||||
if (!plsFile.exists()) {
|
if (!plsFile.exists()) {
|
||||||
plsFile = File(
|
plsFile = File(
|
||||||
activity.getExternalFilesDir(Keys.URLRADIO_LEGACY_FOLDER_COLLECTION),
|
activity.getExternalFilesDir(Keys.RADIO_LEGACY_FOLDER_COLLECTION),
|
||||||
Keys.COLLECTION_PLS_FILE
|
Keys.COLLECTION_PLS_FILE
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -120,7 +120,7 @@ object NetworkHelper {
|
|||||||
InetAddress.getAllByName(Keys.RADIO_BROWSER_API_BASE)
|
InetAddress.getAllByName(Keys.RADIO_BROWSER_API_BASE)
|
||||||
// select a random address
|
// select a random address
|
||||||
serverAddressList[Random().nextInt(serverAddressList.size)].canonicalHostName
|
serverAddressList[Random().nextInt(serverAddressList.size)].canonicalHostName
|
||||||
} catch (e: UnknownHostException) {
|
} catch (_: UnknownHostException) {
|
||||||
Keys.RADIO_BROWSER_API_DEFAULT
|
Keys.RADIO_BROWSER_API_DEFAULT
|
||||||
}
|
}
|
||||||
PreferencesHelper.saveRadioBrowserApiAddress(serverAddress)
|
PreferencesHelper.saveRadioBrowserApiAddress(serverAddress)
|
||||||
|
|||||||
@@ -1,17 +1,3 @@
|
|||||||
/*
|
|
||||||
* UiHelper.kt
|
|
||||||
* Implements the UiHelper object
|
|
||||||
* A UiHelper provides helper methods for User Interface related tasks
|
|
||||||
*
|
|
||||||
* This file is part of
|
|
||||||
* TRANSISTOR - Radio App for Android
|
|
||||||
*
|
|
||||||
* Copyright (c) 2015-22 - Y20K.org
|
|
||||||
* Licensed under the MIT-License
|
|
||||||
* http://opensource.org/licenses/MIT
|
|
||||||
*/
|
|
||||||
|
|
||||||
|
|
||||||
package com.michatec.radio.helpers
|
package com.michatec.radio.helpers
|
||||||
|
|
||||||
import android.content.Context
|
import android.content.Context
|
||||||
|
|||||||
@@ -313,18 +313,6 @@ data class LayoutHolder(var rootView: View) {
|
|||||||
isBuffering = buffering
|
isBuffering = buffering
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/* Toggles visibility of player depending on playback state - hiding it when playback is stopped (not paused or playing) */
|
|
||||||
// fun togglePlayerVisibility(context: Context, playbackState: Int): Boolean {
|
|
||||||
// when (playbackState) {
|
|
||||||
// PlaybackStateCompat.STATE_STOPPED -> return hidePlayer(context)
|
|
||||||
// PlaybackStateCompat.STATE_NONE -> return hidePlayer(context)
|
|
||||||
// PlaybackStateCompat.STATE_ERROR -> return hidePlayer(context)
|
|
||||||
// else -> return showPlayer(context)
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
|
|
||||||
|
|
||||||
/* Toggles visibility of the download progress indicator */
|
/* Toggles visibility of the download progress indicator */
|
||||||
fun toggleDownloadProgressIndicator() {
|
fun toggleDownloadProgressIndicator() {
|
||||||
when (PreferencesHelper.loadActiveDownloads()) {
|
when (PreferencesHelper.loadActiveDownloads()) {
|
||||||
|
|||||||
Reference in New Issue
Block a user