diff --git a/app/build.gradle b/app/build.gradle index ce2df96..fc937af 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -9,6 +9,7 @@ android { defaultConfig { applicationId 'com.michatec.radio' minSdk 28 + //noinspection OldTargetApi targetSdk 35 versionCode 129 versionName '12.9' @@ -48,7 +49,7 @@ dependencies { // Google Stuff // implementation 'com.google.android.material:material:1.12.0' - implementation 'com.google.code.gson:gson:2.10.1' + implementation 'com.google.code.gson:gson:2.13.1' // AndroidX Stuff // implementation 'androidx.activity:activity-ktx:1.10.1' diff --git a/app/src/main/java/com/michatec/radio/PlayerFragment.kt b/app/src/main/java/com/michatec/radio/PlayerFragment.kt index 788f746..343bd21 100644 --- a/app/src/main/java/com/michatec/radio/PlayerFragment.kt +++ b/app/src/main/java/com/michatec/radio/PlayerFragment.kt @@ -32,6 +32,7 @@ import androidx.activity.OnBackPressedCallback import androidx.activity.result.ActivityResultLauncher import androidx.activity.result.PickVisualMediaRequest import androidx.activity.result.contract.ActivityResultContracts +import androidx.annotation.OptIn import androidx.appcompat.app.AppCompatActivity import androidx.core.content.ContextCompat import androidx.core.net.toUri @@ -40,6 +41,7 @@ import androidx.lifecycle.ViewModelProvider import androidx.media3.common.MediaItem import androidx.media3.common.PlaybackException import androidx.media3.common.Player +import androidx.media3.common.util.UnstableApi import androidx.media3.session.MediaController import androidx.media3.session.SessionResult import androidx.media3.session.SessionToken @@ -395,6 +397,7 @@ class PlayerFragment : Fragment(), /* Initializes the MediaController - handles connection to PlayerService under the hood */ + @OptIn(UnstableApi::class) private fun initializeController() { controllerFuture = MediaController.Builder( activity as Context, diff --git a/app/src/main/java/com/michatec/radio/PlayerService.kt b/app/src/main/java/com/michatec/radio/PlayerService.kt index fee4091..da1a2df 100644 --- a/app/src/main/java/com/michatec/radio/PlayerService.kt +++ b/app/src/main/java/com/michatec/radio/PlayerService.kt @@ -636,22 +636,6 @@ class PlayerService : MediaLibraryService() { } - /* - * Defines the listener for changes in shared preferences - */ - private val sharedPreferenceChangeListener = - SharedPreferences.OnSharedPreferenceChangeListener { _, key -> - when (key) { - Keys.PREF_LARGE_BUFFER_SIZE -> { - bufferSizeMultiplier = PreferencesHelper.loadBufferSizeMultiplier() - if (!player.isPlaying && !player.isLoading) { - initializePlayer() - } - } - } - } - - /* * Custom AnalyticsListener that enables AudioFX equalizer integration */ diff --git a/app/src/main/java/com/michatec/radio/Radio.kt b/app/src/main/java/com/michatec/radio/Radio.kt index d3b0957..12a8e1b 100644 --- a/app/src/main/java/com/michatec/radio/Radio.kt +++ b/app/src/main/java/com/michatec/radio/Radio.kt @@ -25,8 +25,6 @@ import com.michatec.radio.helpers.PreferencesHelper.initPreferences */ class Radio : Application() { - /* Define log tag */ - private val TAG: String = Radio::class.java.simpleName /* Implements onCreate */ override fun onCreate() { diff --git a/app/src/main/java/com/michatec/radio/SettingsFragment.kt b/app/src/main/java/com/michatec/radio/SettingsFragment.kt index 9c9a0e2..d97a63b 100644 --- a/app/src/main/java/com/michatec/radio/SettingsFragment.kt +++ b/app/src/main/java/com/michatec/radio/SettingsFragment.kt @@ -62,20 +62,7 @@ class SettingsFragment : PreferenceFragmentCompat(), YesNoDialog.YesNoDialogList (activity as AppCompatActivity).supportActionBar?.show() (activity as AppCompatActivity).supportActionBar?.setDisplayHomeAsUpEnabled(true) (activity as AppCompatActivity).supportActionBar?.title = getString(R.string.fragment_settings_title) - - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { - // above Android Oreo - (activity as AppCompatActivity).window.navigationBarColor = getColor(requireContext(), android.R.attr.colorBackground) - } else { - val nightMode = AppCompatDelegate.getDefaultNightMode() - if (nightMode == AppCompatDelegate.MODE_NIGHT_YES) { - // night mode is active, set navigation bar color to a suitable color for night mode - (activity as AppCompatActivity).window.navigationBarColor = getColor(requireContext(), android.R.attr.colorBackground) - } else { - // night mode is not active, set navigation bar color to a suitable color for day mode - (activity as AppCompatActivity).window.navigationBarColor = ContextCompat.getColor(requireContext(), android.R.color.black) - } - } + (activity as AppCompatActivity).window.navigationBarColor = getColor(requireContext(), android.R.attr.colorBackground) } /* Overrides onCreatePreferences from PreferenceFragmentCompat */ diff --git a/app/src/main/java/com/michatec/radio/collection/CollectionAdapter.kt b/app/src/main/java/com/michatec/radio/collection/CollectionAdapter.kt index 7b01a08..9996dfa 100644 --- a/app/src/main/java/com/michatec/radio/collection/CollectionAdapter.kt +++ b/app/src/main/java/com/michatec/radio/collection/CollectionAdapter.kt @@ -296,6 +296,7 @@ class CollectionAdapter( /* Shows / hides the edit view for a station */ + @SuppressLint("NotifyDataSetChanged") private fun toggleEditViews(position: Int, stationUuid: String) { when (stationUuid) { // CASE: this station's edit view is already expanded diff --git a/app/src/main/java/com/michatec/radio/dialogs/AddStationDialog.kt b/app/src/main/java/com/michatec/radio/dialogs/AddStationDialog.kt index 740ce95..d7412eb 100644 --- a/app/src/main/java/com/michatec/radio/dialogs/AddStationDialog.kt +++ b/app/src/main/java/com/michatec/radio/dialogs/AddStationDialog.kt @@ -42,10 +42,6 @@ class AddStationDialog ( } - /* Define log tag */ - private val TAG = AddStationDialog::class.java.simpleName - - /* Main class variables */ private lateinit var dialog: AlertDialog private lateinit var stationSearchResultList: RecyclerView diff --git a/app/src/main/java/com/michatec/radio/dialogs/ErrorDialog.kt b/app/src/main/java/com/michatec/radio/dialogs/ErrorDialog.kt index df8cf88..9751eb4 100644 --- a/app/src/main/java/com/michatec/radio/dialogs/ErrorDialog.kt +++ b/app/src/main/java/com/michatec/radio/dialogs/ErrorDialog.kt @@ -46,9 +46,9 @@ class ErrorDialog { // get views val inflater: LayoutInflater = LayoutInflater.from(context) val view: View = inflater.inflate(R.layout.dialog_generic_with_details, null) - val errorMessageView: TextView = view.findViewById(R.id.dialog_message) as TextView - val errorDetailsLinkView: TextView = view.findViewById(R.id.dialog_details_link) as TextView - val errorDetailsView: TextView = view.findViewById(R.id.dialog_details) as TextView + val errorMessageView: TextView = view.findViewById(R.id.dialog_message) + val errorDetailsLinkView: TextView = view.findViewById(R.id.dialog_details_link) + val errorDetailsView: TextView = view.findViewById(R.id.dialog_details) // set dialog view builder.setView(view) diff --git a/app/src/main/java/com/michatec/radio/helpers/AudioHelper.kt b/app/src/main/java/com/michatec/radio/helpers/AudioHelper.kt index 722173b..5968626 100644 --- a/app/src/main/java/com/michatec/radio/helpers/AudioHelper.kt +++ b/app/src/main/java/com/michatec/radio/helpers/AudioHelper.kt @@ -15,7 +15,9 @@ package com.michatec.radio.helpers import android.util.Log +import androidx.annotation.OptIn import androidx.media3.common.Metadata +import androidx.media3.common.util.UnstableApi import androidx.media3.extractor.metadata.icy.IcyHeaders import androidx.media3.extractor.metadata.icy.IcyInfo import com.michatec.radio.Keys @@ -33,6 +35,7 @@ object AudioHelper { /* Extract audio stream metadata */ + @OptIn(UnstableApi::class) fun getMetadataString(metadata: Metadata): String { var metadataString = String() for (i in 0 until metadata.length()) { diff --git a/app/src/main/java/com/michatec/radio/helpers/ShortcutHelper.kt b/app/src/main/java/com/michatec/radio/helpers/ShortcutHelper.kt index 0937d8b..8feeece 100644 --- a/app/src/main/java/com/michatec/radio/helpers/ShortcutHelper.kt +++ b/app/src/main/java/com/michatec/radio/helpers/ShortcutHelper.kt @@ -73,27 +73,15 @@ object ShortcutHelper { ): IconCompat { val stationImageBitmap: Bitmap = ImageHelper.getScaledStationImage(context, stationImage.toUri(), 192) - return if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { - IconCompat.createWithAdaptiveBitmap( - ImageHelper.createSquareImage( - context, - stationImageBitmap, - stationImageColor, - 192, - true - ) - ) - } else { - IconCompat.createWithAdaptiveBitmap( - ImageHelper.createSquareImage( - context, - stationImageBitmap, - stationImageColor, - 192, - false - ) - ) - } - } + return IconCompat.createWithAdaptiveBitmap( + ImageHelper.createSquareImage( + context, + stationImageBitmap, + stationImageColor, + 192, + true + ) + ) + } } diff --git a/app/src/main/java/com/michatec/radio/search/SearchResultAdapter.kt b/app/src/main/java/com/michatec/radio/search/SearchResultAdapter.kt index 174e91a..91eed94 100644 --- a/app/src/main/java/com/michatec/radio/search/SearchResultAdapter.kt +++ b/app/src/main/java/com/michatec/radio/search/SearchResultAdapter.kt @@ -209,22 +209,16 @@ class SearchResultAdapter( // stop radio playback when one is active val audioManager = context.getSystemService(Context.AUDIO_SERVICE) as AudioManager - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { - val audioAttributes = AudioAttributes.Builder() - .setUsage(AudioAttributes.USAGE_MEDIA) - .setContentType(AudioAttributes.CONTENT_TYPE_MUSIC) - .build() + val audioAttributes = AudioAttributes.Builder() + .setUsage(AudioAttributes.USAGE_MEDIA) + .setContentType(AudioAttributes.CONTENT_TYPE_MUSIC) + .build() - val focusRequest = AudioFocusRequest.Builder(AudioManager.AUDIOFOCUS_GAIN_TRANSIENT) - .setAudioAttributes(audioAttributes) - .build() + val focusRequest = AudioFocusRequest.Builder(AudioManager.AUDIOFOCUS_GAIN_TRANSIENT) + .setAudioAttributes(audioAttributes) + .build() - audioManager.requestAudioFocus(focusRequest) - } else { - @Suppress("DEPRECATION") - // For older versions where AudioFocusRequest is not available - audioManager.requestAudioFocus(null, AudioManager.STREAM_MUSIC, AudioManager.AUDIOFOCUS_GAIN_TRANSIENT) - } + audioManager.requestAudioFocus(focusRequest) } diff --git a/app/src/main/res/values-ru/strings.xml b/app/src/main/res/values-ru/strings.xml index ed032ee..2c647a4 100644 --- a/app/src/main/res/values-ru/strings.xml +++ b/app/src/main/res/values-ru/strings.xml @@ -98,7 +98,7 @@ Было запущено воспроизведение предварительного просмотра. Станции были успешно восстановлены. Сохранение радиостанций как M3U… - Сохранение радиостанций в формате PLS... + Сохранение радиостанций в формате PLS Ярлык создан. Ярлык не создан. Устройство не позволяет создавать ярлыки. Пожалуйста, запустите сперва воспроизведение. diff --git a/app/src/main/res/xml/locales_config.xml b/app/src/main/res/xml/locales_config.xml index 44da2f0..34aff72 100644 --- a/app/src/main/res/xml/locales_config.xml +++ b/app/src/main/res/xml/locales_config.xml @@ -17,4 +17,6 @@ + + \ No newline at end of file diff --git a/build.gradle b/build.gradle index 631ca83..c0fa7b5 100644 --- a/build.gradle +++ b/build.gradle @@ -7,5 +7,5 @@ plugins { } tasks.register('clean', Delete) { - delete rootProject.buildDir + delete rootProject.buildDir() } \ No newline at end of file