Cleanup with Kotlin extension functions
This commit is contained in:
parent
fc4f0396a4
commit
e0f345b616
37 changed files with 183 additions and 291 deletions
|
@ -15,13 +15,13 @@
|
||||||
package code.name.monkey.retromusic
|
package code.name.monkey.retromusic
|
||||||
|
|
||||||
import android.app.Application
|
import android.app.Application
|
||||||
import android.widget.Toast
|
|
||||||
import cat.ereza.customactivityoncrash.config.CaocConfig
|
import cat.ereza.customactivityoncrash.config.CaocConfig
|
||||||
import code.name.monkey.appthemehelper.ThemeStore
|
import code.name.monkey.appthemehelper.ThemeStore
|
||||||
import code.name.monkey.appthemehelper.util.VersionUtils
|
import code.name.monkey.appthemehelper.util.VersionUtils
|
||||||
import code.name.monkey.retromusic.Constants.PRO_VERSION_PRODUCT_ID
|
import code.name.monkey.retromusic.Constants.PRO_VERSION_PRODUCT_ID
|
||||||
import code.name.monkey.retromusic.activities.ErrorActivity
|
import code.name.monkey.retromusic.activities.ErrorActivity
|
||||||
import code.name.monkey.retromusic.appshortcuts.DynamicShortcutManager
|
import code.name.monkey.retromusic.appshortcuts.DynamicShortcutManager
|
||||||
|
import code.name.monkey.retromusic.extensions.showToast
|
||||||
import code.name.monkey.retromusic.helper.WallpaperAccentManager
|
import code.name.monkey.retromusic.helper.WallpaperAccentManager
|
||||||
import com.anjlab.android.iab.v3.BillingProcessor
|
import com.anjlab.android.iab.v3.BillingProcessor
|
||||||
import com.anjlab.android.iab.v3.PurchaseInfo
|
import com.anjlab.android.iab.v3.PurchaseInfo
|
||||||
|
@ -60,11 +60,7 @@ class App : Application() {
|
||||||
override fun onProductPurchased(productId: String, details: PurchaseInfo?) {}
|
override fun onProductPurchased(productId: String, details: PurchaseInfo?) {}
|
||||||
|
|
||||||
override fun onPurchaseHistoryRestored() {
|
override fun onPurchaseHistoryRestored() {
|
||||||
Toast.makeText(
|
showToast(R.string.restored_previous_purchase_please_restart)
|
||||||
this@App,
|
|
||||||
R.string.restored_previous_purchase_please_restart,
|
|
||||||
Toast.LENGTH_LONG
|
|
||||||
).show()
|
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onBillingError(errorCode: Int, error: Throwable?) {}
|
override fun onBillingError(errorCode: Int, error: Throwable?) {}
|
||||||
|
|
|
@ -19,8 +19,6 @@ import android.graphics.Color
|
||||||
import android.os.Bundle
|
import android.os.Bundle
|
||||||
import android.util.Log
|
import android.util.Log
|
||||||
import android.view.MenuItem
|
import android.view.MenuItem
|
||||||
import android.widget.Toast
|
|
||||||
import code.name.monkey.appthemehelper.ThemeStore
|
|
||||||
import code.name.monkey.appthemehelper.util.MaterialUtil
|
import code.name.monkey.appthemehelper.util.MaterialUtil
|
||||||
import code.name.monkey.retromusic.App
|
import code.name.monkey.retromusic.App
|
||||||
import code.name.monkey.retromusic.BuildConfig
|
import code.name.monkey.retromusic.BuildConfig
|
||||||
|
@ -31,6 +29,7 @@ import code.name.monkey.retromusic.databinding.ActivityProVersionBinding
|
||||||
import code.name.monkey.retromusic.extensions.accentColor
|
import code.name.monkey.retromusic.extensions.accentColor
|
||||||
import code.name.monkey.retromusic.extensions.setLightStatusBar
|
import code.name.monkey.retromusic.extensions.setLightStatusBar
|
||||||
import code.name.monkey.retromusic.extensions.setStatusBarColor
|
import code.name.monkey.retromusic.extensions.setStatusBarColor
|
||||||
|
import code.name.monkey.retromusic.extensions.showToast
|
||||||
import com.anjlab.android.iab.v3.BillingProcessor
|
import com.anjlab.android.iab.v3.BillingProcessor
|
||||||
import com.anjlab.android.iab.v3.PurchaseInfo
|
import com.anjlab.android.iab.v3.PurchaseInfo
|
||||||
|
|
||||||
|
@ -66,8 +65,7 @@ class PurchaseActivity : AbsBaseActivity(), BillingProcessor.IBillingHandler {
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun restorePurchase() {
|
private fun restorePurchase() {
|
||||||
Toast.makeText(this, R.string.restoring_purchase, Toast.LENGTH_SHORT)
|
showToast(R.string.restoring_purchase)
|
||||||
.show()
|
|
||||||
billingProcessor.loadOwnedPurchasesFromGoogleAsync(object :
|
billingProcessor.loadOwnedPurchasesFromGoogleAsync(object :
|
||||||
BillingProcessor.IPurchasesResponseListener {
|
BillingProcessor.IPurchasesResponseListener {
|
||||||
override fun onPurchasesSuccess() {
|
override fun onPurchasesSuccess() {
|
||||||
|
@ -75,30 +73,22 @@ class PurchaseActivity : AbsBaseActivity(), BillingProcessor.IBillingHandler {
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onPurchasesError() {
|
override fun onPurchasesError() {
|
||||||
Toast.makeText(
|
showToast(R.string.could_not_restore_purchase)
|
||||||
this@PurchaseActivity,
|
|
||||||
R.string.could_not_restore_purchase,
|
|
||||||
Toast.LENGTH_SHORT
|
|
||||||
).show()
|
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onProductPurchased(productId: String, details: PurchaseInfo?) {
|
override fun onProductPurchased(productId: String, details: PurchaseInfo?) {
|
||||||
Toast.makeText(this, R.string.thank_you, Toast.LENGTH_SHORT).show()
|
showToast(R.string.thank_you)
|
||||||
setResult(RESULT_OK)
|
setResult(RESULT_OK)
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onPurchaseHistoryRestored() {
|
override fun onPurchaseHistoryRestored() {
|
||||||
if (App.isProVersion()) {
|
if (App.isProVersion()) {
|
||||||
Toast.makeText(
|
showToast(R.string.restored_previous_purchase_please_restart)
|
||||||
this,
|
|
||||||
R.string.restored_previous_purchase_please_restart,
|
|
||||||
Toast.LENGTH_LONG
|
|
||||||
).show()
|
|
||||||
setResult(RESULT_OK)
|
setResult(RESULT_OK)
|
||||||
} else {
|
} else {
|
||||||
Toast.makeText(this, R.string.no_purchase_found, Toast.LENGTH_SHORT).show()
|
showToast(R.string.no_purchase_found)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -21,12 +21,10 @@ import android.view.LayoutInflater
|
||||||
import android.view.MenuItem
|
import android.view.MenuItem
|
||||||
import android.view.ViewGroup
|
import android.view.ViewGroup
|
||||||
import android.widget.TextView
|
import android.widget.TextView
|
||||||
import android.widget.Toast
|
|
||||||
import androidx.core.view.isVisible
|
import androidx.core.view.isVisible
|
||||||
import androidx.recyclerview.widget.DefaultItemAnimator
|
import androidx.recyclerview.widget.DefaultItemAnimator
|
||||||
import androidx.recyclerview.widget.GridLayoutManager
|
import androidx.recyclerview.widget.GridLayoutManager
|
||||||
import androidx.recyclerview.widget.RecyclerView
|
import androidx.recyclerview.widget.RecyclerView
|
||||||
import code.name.monkey.appthemehelper.ThemeStore
|
|
||||||
import code.name.monkey.appthemehelper.util.ATHUtil
|
import code.name.monkey.appthemehelper.util.ATHUtil
|
||||||
import code.name.monkey.appthemehelper.util.TintHelper
|
import code.name.monkey.appthemehelper.util.TintHelper
|
||||||
import code.name.monkey.appthemehelper.util.ToolbarContentTintHelper
|
import code.name.monkey.appthemehelper.util.ToolbarContentTintHelper
|
||||||
|
@ -121,7 +119,7 @@ class SupportDevelopmentActivity : AbsBaseActivity(), BillingProcessor.IBillingH
|
||||||
|
|
||||||
override fun onProductPurchased(productId: String, details: PurchaseInfo?) {
|
override fun onProductPurchased(productId: String, details: PurchaseInfo?) {
|
||||||
// loadSkuDetails();
|
// loadSkuDetails();
|
||||||
Toast.makeText(this, R.string.thank_you, Toast.LENGTH_SHORT).show()
|
showToast(R.string.thank_you)
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onBillingError(errorCode: Int, error: Throwable?) {
|
override fun onBillingError(errorCode: Int, error: Throwable?) {
|
||||||
|
@ -130,7 +128,7 @@ class SupportDevelopmentActivity : AbsBaseActivity(), BillingProcessor.IBillingH
|
||||||
|
|
||||||
override fun onPurchaseHistoryRestored() {
|
override fun onPurchaseHistoryRestored() {
|
||||||
// loadSkuDetails();
|
// loadSkuDetails();
|
||||||
Toast.makeText(this, R.string.restored_previous_purchases, Toast.LENGTH_SHORT).show()
|
showToast(R.string.restored_previous_purchases)
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onDestroy() {
|
override fun onDestroy() {
|
||||||
|
|
|
@ -20,7 +20,6 @@ import android.content.Intent
|
||||||
import android.os.Bundle
|
import android.os.Bundle
|
||||||
import android.view.MenuItem
|
import android.view.MenuItem
|
||||||
import android.view.inputmethod.EditorInfo
|
import android.view.inputmethod.EditorInfo
|
||||||
import android.widget.Toast
|
|
||||||
import androidx.annotation.StringDef
|
import androidx.annotation.StringDef
|
||||||
import androidx.annotation.StringRes
|
import androidx.annotation.StringRes
|
||||||
import androidx.core.content.getSystemService
|
import androidx.core.content.getSystemService
|
||||||
|
@ -39,6 +38,7 @@ import code.name.monkey.retromusic.activities.bugreport.model.github.GithubTarge
|
||||||
import code.name.monkey.retromusic.databinding.ActivityBugReportBinding
|
import code.name.monkey.retromusic.databinding.ActivityBugReportBinding
|
||||||
import code.name.monkey.retromusic.extensions.accentColor
|
import code.name.monkey.retromusic.extensions.accentColor
|
||||||
import code.name.monkey.retromusic.extensions.setTaskDescriptionColorAuto
|
import code.name.monkey.retromusic.extensions.setTaskDescriptionColorAuto
|
||||||
|
import code.name.monkey.retromusic.extensions.showToast
|
||||||
import com.google.android.material.dialog.MaterialAlertDialogBuilder
|
import com.google.android.material.dialog.MaterialAlertDialogBuilder
|
||||||
import com.google.android.material.floatingactionbutton.FloatingActionButton
|
import com.google.android.material.floatingactionbutton.FloatingActionButton
|
||||||
import com.google.android.material.textfield.TextInputLayout
|
import com.google.android.material.textfield.TextInputLayout
|
||||||
|
@ -163,11 +163,7 @@ open class BugReportActivity : AbsThemeActivity() {
|
||||||
val clipboard = getSystemService<ClipboardManager>()
|
val clipboard = getSystemService<ClipboardManager>()
|
||||||
val clip = ClipData.newPlainText(getString(R.string.device_info), deviceInfo?.toMarkdown())
|
val clip = ClipData.newPlainText(getString(R.string.device_info), deviceInfo?.toMarkdown())
|
||||||
clipboard?.setPrimaryClip(clip)
|
clipboard?.setPrimaryClip(clip)
|
||||||
Toast.makeText(
|
showToast(R.string.copied_device_info_to_clipboard)
|
||||||
this@BugReportActivity,
|
|
||||||
R.string.copied_device_info_to_clipboard,
|
|
||||||
Toast.LENGTH_LONG
|
|
||||||
).show()
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun validateInput(): Boolean {
|
private fun validateInput(): Boolean {
|
||||||
|
|
|
@ -30,10 +30,7 @@ import androidx.core.widget.doAfterTextChanged
|
||||||
import code.name.monkey.appthemehelper.util.MaterialValueHelper
|
import code.name.monkey.appthemehelper.util.MaterialValueHelper
|
||||||
import code.name.monkey.retromusic.R
|
import code.name.monkey.retromusic.R
|
||||||
import code.name.monkey.retromusic.databinding.ActivityAlbumTagEditorBinding
|
import code.name.monkey.retromusic.databinding.ActivityAlbumTagEditorBinding
|
||||||
import code.name.monkey.retromusic.extensions.appHandleColor
|
import code.name.monkey.retromusic.extensions.*
|
||||||
import code.name.monkey.retromusic.extensions.defaultFooterColor
|
|
||||||
import code.name.monkey.retromusic.extensions.isColorLight
|
|
||||||
import code.name.monkey.retromusic.extensions.setTint
|
|
||||||
import code.name.monkey.retromusic.glide.GlideApp
|
import code.name.monkey.retromusic.glide.GlideApp
|
||||||
import code.name.monkey.retromusic.glide.palette.BitmapPaletteWrapper
|
import code.name.monkey.retromusic.glide.palette.BitmapPaletteWrapper
|
||||||
import code.name.monkey.retromusic.model.ArtworkInfo
|
import code.name.monkey.retromusic.model.ArtworkInfo
|
||||||
|
@ -117,11 +114,7 @@ class AlbumTagEditorActivity : AbsTagEditorActivity<ActivityAlbumTagEditorBindin
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun toastLoadingFailed() {
|
private fun toastLoadingFailed() {
|
||||||
Toast.makeText(
|
showToast(R.string.could_not_download_album_cover)
|
||||||
this@AlbumTagEditorActivity,
|
|
||||||
R.string.could_not_download_album_cover,
|
|
||||||
Toast.LENGTH_SHORT
|
|
||||||
).show()
|
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun searchImageOnWeb() {
|
override fun searchImageOnWeb() {
|
||||||
|
@ -161,8 +154,7 @@ class AlbumTagEditorActivity : AbsTagEditorActivity<ActivityAlbumTagEditorBindin
|
||||||
|
|
||||||
override fun onLoadFailed(errorDrawable: Drawable?) {
|
override fun onLoadFailed(errorDrawable: Drawable?) {
|
||||||
super.onLoadFailed(errorDrawable)
|
super.onLoadFailed(errorDrawable)
|
||||||
Toast.makeText(this@AlbumTagEditorActivity, "Load Failed", Toast.LENGTH_LONG)
|
showToast("Load Failed", Toast.LENGTH_LONG)
|
||||||
.show()
|
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun setResource(resource: BitmapPaletteWrapper?) {}
|
override fun setResource(resource: BitmapPaletteWrapper?) {}
|
||||||
|
|
|
@ -30,10 +30,7 @@ import androidx.core.widget.doAfterTextChanged
|
||||||
import code.name.monkey.appthemehelper.util.MaterialValueHelper
|
import code.name.monkey.appthemehelper.util.MaterialValueHelper
|
||||||
import code.name.monkey.retromusic.R
|
import code.name.monkey.retromusic.R
|
||||||
import code.name.monkey.retromusic.databinding.ActivitySongTagEditorBinding
|
import code.name.monkey.retromusic.databinding.ActivitySongTagEditorBinding
|
||||||
import code.name.monkey.retromusic.extensions.appHandleColor
|
import code.name.monkey.retromusic.extensions.*
|
||||||
import code.name.monkey.retromusic.extensions.defaultFooterColor
|
|
||||||
import code.name.monkey.retromusic.extensions.isColorLight
|
|
||||||
import code.name.monkey.retromusic.extensions.setTint
|
|
||||||
import code.name.monkey.retromusic.glide.GlideApp
|
import code.name.monkey.retromusic.glide.GlideApp
|
||||||
import code.name.monkey.retromusic.glide.palette.BitmapPaletteWrapper
|
import code.name.monkey.retromusic.glide.palette.BitmapPaletteWrapper
|
||||||
import code.name.monkey.retromusic.model.ArtworkInfo
|
import code.name.monkey.retromusic.model.ArtworkInfo
|
||||||
|
@ -196,8 +193,7 @@ class SongTagEditorActivity : AbsTagEditorActivity<ActivitySongTagEditorBinding>
|
||||||
|
|
||||||
override fun onLoadFailed(errorDrawable: Drawable?) {
|
override fun onLoadFailed(errorDrawable: Drawable?) {
|
||||||
super.onLoadFailed(errorDrawable)
|
super.onLoadFailed(errorDrawable)
|
||||||
Toast.makeText(this@SongTagEditorActivity, "Load Failed", Toast.LENGTH_LONG)
|
showToast("Load Failed", Toast.LENGTH_LONG)
|
||||||
.show()
|
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun setResource(resource: BitmapPaletteWrapper?) {}
|
override fun setResource(resource: BitmapPaletteWrapper?) {}
|
||||||
|
|
|
@ -6,8 +6,8 @@ import android.graphics.Bitmap
|
||||||
import android.media.MediaScannerConnection
|
import android.media.MediaScannerConnection
|
||||||
import android.os.Build
|
import android.os.Build
|
||||||
import android.util.Log
|
import android.util.Log
|
||||||
import android.widget.Toast
|
|
||||||
import androidx.annotation.RequiresApi
|
import androidx.annotation.RequiresApi
|
||||||
|
import code.name.monkey.retromusic.extensions.showToast
|
||||||
import code.name.monkey.retromusic.misc.UpdateToastMediaScannerCompletionListener
|
import code.name.monkey.retromusic.misc.UpdateToastMediaScannerCompletionListener
|
||||||
import code.name.monkey.retromusic.model.AudioTagInfo
|
import code.name.monkey.retromusic.model.AudioTagInfo
|
||||||
import code.name.monkey.retromusic.util.MusicUtil.createAlbumArtFile
|
import code.name.monkey.retromusic.util.MusicUtil.createAlbumArtFile
|
||||||
|
@ -24,7 +24,6 @@ import org.jaudiotagger.tag.TagException
|
||||||
import org.jaudiotagger.tag.images.AndroidArtwork
|
import org.jaudiotagger.tag.images.AndroidArtwork
|
||||||
import org.jaudiotagger.tag.images.Artwork
|
import org.jaudiotagger.tag.images.Artwork
|
||||||
import java.io.File
|
import java.io.File
|
||||||
import java.io.FileOutputStream
|
|
||||||
import java.io.IOException
|
import java.io.IOException
|
||||||
|
|
||||||
class TagWriter {
|
class TagWriter {
|
||||||
|
@ -34,7 +33,7 @@ class TagWriter {
|
||||||
suspend fun scan(context: Context, toBeScanned: List<String?>?) {
|
suspend fun scan(context: Context, toBeScanned: List<String?>?) {
|
||||||
if (toBeScanned == null || toBeScanned.isEmpty()) {
|
if (toBeScanned == null || toBeScanned.isEmpty()) {
|
||||||
Log.i("scan", "scan: Empty")
|
Log.i("scan", "scan: Empty")
|
||||||
Toast.makeText(context, "Scan file from folder", Toast.LENGTH_SHORT).show()
|
context.showToast( "Scan file from folder")
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
MediaScannerConnection.scanFile(
|
MediaScannerConnection.scanFile(
|
||||||
|
@ -60,7 +59,7 @@ class TagWriter {
|
||||||
info.artworkInfo.artwork.compress(
|
info.artworkInfo.artwork.compress(
|
||||||
Bitmap.CompressFormat.JPEG,
|
Bitmap.CompressFormat.JPEG,
|
||||||
100,
|
100,
|
||||||
FileOutputStream(albumArtFile)
|
albumArtFile.outputStream()
|
||||||
)
|
)
|
||||||
artwork = AndroidArtwork.createArtworkFromFile(albumArtFile)
|
artwork = AndroidArtwork.createArtworkFromFile(albumArtFile)
|
||||||
} catch (e: IOException) {
|
} catch (e: IOException) {
|
||||||
|
@ -133,7 +132,7 @@ class TagWriter {
|
||||||
info.artworkInfo.artwork.compress(
|
info.artworkInfo.artwork.compress(
|
||||||
Bitmap.CompressFormat.JPEG,
|
Bitmap.CompressFormat.JPEG,
|
||||||
100,
|
100,
|
||||||
FileOutputStream(albumArtFile)
|
albumArtFile.outputStream()
|
||||||
)
|
)
|
||||||
artwork = AndroidArtwork.createArtworkFromFile(albumArtFile)
|
artwork = AndroidArtwork.createArtworkFromFile(albumArtFile)
|
||||||
} catch (e: IOException) {
|
} catch (e: IOException) {
|
||||||
|
|
|
@ -19,12 +19,12 @@ import android.view.LayoutInflater
|
||||||
import android.view.MotionEvent
|
import android.view.MotionEvent
|
||||||
import android.view.View
|
import android.view.View
|
||||||
import android.view.ViewGroup
|
import android.view.ViewGroup
|
||||||
import android.widget.Toast
|
|
||||||
import androidx.recyclerview.widget.ItemTouchHelper
|
import androidx.recyclerview.widget.ItemTouchHelper
|
||||||
import androidx.recyclerview.widget.RecyclerView
|
import androidx.recyclerview.widget.RecyclerView
|
||||||
import code.name.monkey.appthemehelper.ThemeStore.Companion.accentColor
|
import code.name.monkey.appthemehelper.ThemeStore.Companion.accentColor
|
||||||
import code.name.monkey.retromusic.R
|
import code.name.monkey.retromusic.R
|
||||||
import code.name.monkey.retromusic.databinding.PreferenceDialogLibraryCategoriesListitemBinding
|
import code.name.monkey.retromusic.databinding.PreferenceDialogLibraryCategoriesListitemBinding
|
||||||
|
import code.name.monkey.retromusic.extensions.showToast
|
||||||
import code.name.monkey.retromusic.model.CategoryInfo
|
import code.name.monkey.retromusic.model.CategoryInfo
|
||||||
import code.name.monkey.retromusic.util.PreferenceUtil
|
import code.name.monkey.retromusic.util.PreferenceUtil
|
||||||
import code.name.monkey.retromusic.util.SwipeAndDragHelper
|
import code.name.monkey.retromusic.util.SwipeAndDragHelper
|
||||||
|
@ -59,12 +59,7 @@ class CategoryInfoAdapter : RecyclerView.Adapter<CategoryInfoAdapter.ViewHolder>
|
||||||
categoryInfo.visible = !categoryInfo.visible
|
categoryInfo.visible = !categoryInfo.visible
|
||||||
holder.binding.checkbox.isChecked = categoryInfo.visible
|
holder.binding.checkbox.isChecked = categoryInfo.visible
|
||||||
} else {
|
} else {
|
||||||
Toast.makeText(
|
holder.itemView.context.showToast(R.string.you_have_to_select_at_least_one_category)
|
||||||
holder.itemView.context,
|
|
||||||
R.string.you_have_to_select_at_least_one_category,
|
|
||||||
Toast.LENGTH_SHORT
|
|
||||||
)
|
|
||||||
.show()
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
holder.binding.dragView.setOnTouchListener { _: View?, event: MotionEvent ->
|
holder.binding.dragView.setOnTouchListener { _: View?, event: MotionEvent ->
|
||||||
|
|
|
@ -114,7 +114,7 @@ class RetroWebServer(val context: Context) : NanoHTTPD(SERVER_PORT) {
|
||||||
} else {
|
} else {
|
||||||
res = newFixedLengthResponse(
|
res = newFixedLengthResponse(
|
||||||
Status.OK, mime,
|
Status.OK, mime,
|
||||||
FileInputStream(file), file.length()
|
file.inputStream(), file.length()
|
||||||
)
|
)
|
||||||
res.addHeader("Accept-Ranges", "bytes")
|
res.addHeader("Accept-Ranges", "bytes")
|
||||||
res.addHeader("Content-Length", "" + fileLen)
|
res.addHeader("Content-Length", "" + fileLen)
|
||||||
|
|
|
@ -22,14 +22,10 @@ import androidx.core.os.bundleOf
|
||||||
import androidx.fragment.app.DialogFragment
|
import androidx.fragment.app.DialogFragment
|
||||||
import androidx.lifecycle.lifecycleScope
|
import androidx.lifecycle.lifecycleScope
|
||||||
import code.name.monkey.appthemehelper.util.VersionUtils
|
import code.name.monkey.appthemehelper.util.VersionUtils
|
||||||
import code.name.monkey.retromusic.App
|
|
||||||
import code.name.monkey.retromusic.EXTRA_PLAYLIST
|
import code.name.monkey.retromusic.EXTRA_PLAYLIST
|
||||||
import code.name.monkey.retromusic.R
|
import code.name.monkey.retromusic.R
|
||||||
import code.name.monkey.retromusic.db.PlaylistWithSongs
|
import code.name.monkey.retromusic.db.PlaylistWithSongs
|
||||||
import code.name.monkey.retromusic.extensions.colorButtons
|
import code.name.monkey.retromusic.extensions.*
|
||||||
import code.name.monkey.retromusic.extensions.createNewFile
|
|
||||||
import code.name.monkey.retromusic.extensions.extraNotNull
|
|
||||||
import code.name.monkey.retromusic.extensions.materialDialog
|
|
||||||
import code.name.monkey.retromusic.helper.M3UWriter
|
import code.name.monkey.retromusic.helper.M3UWriter
|
||||||
import code.name.monkey.retromusic.util.PlaylistsUtil
|
import code.name.monkey.retromusic.util.PlaylistsUtil
|
||||||
import kotlinx.coroutines.Dispatchers
|
import kotlinx.coroutines.Dispatchers
|
||||||
|
@ -64,25 +60,21 @@ class SavePlaylistDialog : DialogFragment() {
|
||||||
playlistWithSongs
|
playlistWithSongs
|
||||||
)
|
)
|
||||||
withContext(Dispatchers.Main) {
|
withContext(Dispatchers.Main) {
|
||||||
Toast.makeText(
|
showToast(
|
||||||
requireContext(),
|
|
||||||
String.format(
|
String.format(
|
||||||
requireContext().getString(R.string.saved_playlist_to),
|
requireContext().getString(R.string.saved_playlist_to),
|
||||||
data?.lastPathSegment
|
data?.lastPathSegment
|
||||||
),
|
),
|
||||||
Toast.LENGTH_LONG
|
Toast.LENGTH_LONG
|
||||||
).show()
|
)
|
||||||
dismiss()
|
dismiss()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} catch (e: Exception) {
|
} catch (e: Exception) {
|
||||||
Toast.makeText(
|
showToast(
|
||||||
context,
|
"Something went wrong : " + e.message
|
||||||
"Something went wrong : " + e.message,
|
|
||||||
Toast.LENGTH_SHORT
|
|
||||||
)
|
)
|
||||||
.show()
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
|
@ -95,11 +87,10 @@ class SavePlaylistDialog : DialogFragment() {
|
||||||
) { _, _ ->
|
) { _, _ ->
|
||||||
}
|
}
|
||||||
withContext(Dispatchers.Main) {
|
withContext(Dispatchers.Main) {
|
||||||
Toast.makeText(
|
showToast(
|
||||||
requireContext(),
|
String.format(getString(R.string.saved_playlist_to), file),
|
||||||
String.format(App.getContext().getString(R.string.saved_playlist_to), file),
|
|
||||||
Toast.LENGTH_LONG
|
Toast.LENGTH_LONG
|
||||||
).show()
|
)
|
||||||
dismiss()
|
dismiss()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,13 @@
|
||||||
|
package code.name.monkey.retromusic.extensions
|
||||||
|
|
||||||
|
import android.content.Context
|
||||||
|
import android.widget.Toast
|
||||||
|
import androidx.annotation.StringRes
|
||||||
|
|
||||||
|
fun Context.showToast(@StringRes stringRes: Int, duration: Int = Toast.LENGTH_SHORT) {
|
||||||
|
showToast(getString(stringRes), duration)
|
||||||
|
}
|
||||||
|
|
||||||
|
fun Context.showToast(message: String, duration: Int = Toast.LENGTH_SHORT) {
|
||||||
|
Toast.makeText(this, message, duration).show()
|
||||||
|
}
|
|
@ -0,0 +1,6 @@
|
||||||
|
package code.name.monkey.retromusic.extensions
|
||||||
|
|
||||||
|
import java.io.BufferedOutputStream
|
||||||
|
import java.util.zip.ZipOutputStream
|
||||||
|
|
||||||
|
fun BufferedOutputStream.zipOutputStream(): ZipOutputStream = ZipOutputStream(this)
|
|
@ -80,12 +80,12 @@ fun <T> Fragment.whichFragment(@IdRes id: Int): T {
|
||||||
return childFragmentManager.findFragmentById(id) as T
|
return childFragmentManager.findFragmentById(id) as T
|
||||||
}
|
}
|
||||||
|
|
||||||
fun Fragment.showToast(@StringRes stringRes: Int) {
|
fun Fragment.showToast(@StringRes stringRes: Int, duration: Int = Toast.LENGTH_SHORT) {
|
||||||
showToast(getString(stringRes))
|
showToast(getString(stringRes), duration)
|
||||||
}
|
}
|
||||||
|
|
||||||
fun Fragment.showToast(message: String) {
|
fun Fragment.showToast(message: String, duration: Int = Toast.LENGTH_SHORT) {
|
||||||
Toast.makeText(requireContext(), message, Toast.LENGTH_SHORT).show()
|
Toast.makeText(requireContext(), message, duration).show()
|
||||||
}
|
}
|
||||||
|
|
||||||
fun Context.getDrawableCompat(@DrawableRes drawableRes: Int): Drawable {
|
fun Context.getDrawableCompat(@DrawableRes drawableRes: Int): Drawable {
|
||||||
|
|
|
@ -16,11 +16,11 @@ package code.name.monkey.retromusic.fragments
|
||||||
|
|
||||||
import android.animation.ValueAnimator
|
import android.animation.ValueAnimator
|
||||||
import android.content.Context
|
import android.content.Context
|
||||||
import android.widget.Toast
|
|
||||||
import androidx.core.animation.doOnEnd
|
import androidx.core.animation.doOnEnd
|
||||||
import androidx.lifecycle.*
|
import androidx.lifecycle.*
|
||||||
import code.name.monkey.retromusic.*
|
import code.name.monkey.retromusic.*
|
||||||
import code.name.monkey.retromusic.db.*
|
import code.name.monkey.retromusic.db.*
|
||||||
|
import code.name.monkey.retromusic.extensions.showToast
|
||||||
import code.name.monkey.retromusic.fragments.ReloadType.*
|
import code.name.monkey.retromusic.fragments.ReloadType.*
|
||||||
import code.name.monkey.retromusic.fragments.search.Filter
|
import code.name.monkey.retromusic.fragments.search.Filter
|
||||||
import code.name.monkey.retromusic.helper.MusicPlayerRemote
|
import code.name.monkey.retromusic.helper.MusicPlayerRemote
|
||||||
|
@ -348,12 +348,7 @@ class LibraryViewModel(
|
||||||
createPlaylist(PlaylistEntity(playlistName = playlistName))
|
createPlaylist(PlaylistEntity(playlistName = playlistName))
|
||||||
insertSongs(songs.map { it.toSongEntity(playlistId) })
|
insertSongs(songs.map { it.toSongEntity(playlistId) })
|
||||||
withContext(Main) {
|
withContext(Main) {
|
||||||
Toast.makeText(
|
context.showToast(R.string.playlist_created_sucessfully)
|
||||||
context ,
|
|
||||||
context
|
|
||||||
.getString(R.string.playlist_created_sucessfully, playlistName),
|
|
||||||
Toast.LENGTH_SHORT
|
|
||||||
).show()
|
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
val playlist = playlists.firstOrNull()
|
val playlist = playlists.firstOrNull()
|
||||||
|
@ -365,13 +360,7 @@ class LibraryViewModel(
|
||||||
}
|
}
|
||||||
forceReload(Playlists)
|
forceReload(Playlists)
|
||||||
withContext(Main) {
|
withContext(Main) {
|
||||||
Toast.makeText(
|
context.showToast(R.string.added_song_count_to_playlist)
|
||||||
context, context.getString(
|
|
||||||
R.string.added_song_count_to_playlist,
|
|
||||||
songs.size,
|
|
||||||
playlistName
|
|
||||||
), Toast.LENGTH_SHORT
|
|
||||||
).show()
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -5,7 +5,6 @@ import android.content.Intent
|
||||||
import android.os.Bundle
|
import android.os.Bundle
|
||||||
import android.view.MenuItem
|
import android.view.MenuItem
|
||||||
import android.view.View
|
import android.view.View
|
||||||
import android.widget.Toast
|
|
||||||
import androidx.activity.result.contract.ActivityResultContracts
|
import androidx.activity.result.contract.ActivityResultContracts
|
||||||
import androidx.core.net.toUri
|
import androidx.core.net.toUri
|
||||||
import androidx.core.view.isVisible
|
import androidx.core.view.isVisible
|
||||||
|
@ -20,6 +19,7 @@ import code.name.monkey.retromusic.databinding.FragmentBackupBinding
|
||||||
import code.name.monkey.retromusic.extensions.accentColor
|
import code.name.monkey.retromusic.extensions.accentColor
|
||||||
import code.name.monkey.retromusic.extensions.accentOutlineColor
|
import code.name.monkey.retromusic.extensions.accentOutlineColor
|
||||||
import code.name.monkey.retromusic.extensions.materialDialog
|
import code.name.monkey.retromusic.extensions.materialDialog
|
||||||
|
import code.name.monkey.retromusic.extensions.showToast
|
||||||
import code.name.monkey.retromusic.helper.BackupHelper
|
import code.name.monkey.retromusic.helper.BackupHelper
|
||||||
import code.name.monkey.retromusic.helper.sanitize
|
import code.name.monkey.retromusic.helper.sanitize
|
||||||
import code.name.monkey.retromusic.util.BackupUtil
|
import code.name.monkey.retromusic.util.BackupUtil
|
||||||
|
@ -122,11 +122,7 @@ class BackupFragment : Fragment(R.layout.fragment_backup), BackupAdapter.BackupC
|
||||||
try {
|
try {
|
||||||
file.delete()
|
file.delete()
|
||||||
} catch (exception: SecurityException) {
|
} catch (exception: SecurityException) {
|
||||||
Toast.makeText(
|
showToast("Could not delete backup")
|
||||||
activity,
|
|
||||||
"Could not delete backup",
|
|
||||||
Toast.LENGTH_SHORT
|
|
||||||
).show()
|
|
||||||
}
|
}
|
||||||
backupViewModel.loadBackups()
|
backupViewModel.loadBackups()
|
||||||
return true
|
return true
|
||||||
|
@ -151,11 +147,9 @@ class BackupFragment : Fragment(R.layout.fragment_backup), BackupAdapter.BackupC
|
||||||
file.renameTo(renamedFile)
|
file.renameTo(renamedFile)
|
||||||
backupViewModel.loadBackups()
|
backupViewModel.loadBackups()
|
||||||
} else {
|
} else {
|
||||||
Toast.makeText(
|
showToast(
|
||||||
requireContext(),
|
"File already exists"
|
||||||
"File already exists",
|
)
|
||||||
Toast.LENGTH_SHORT
|
|
||||||
).show()
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
positiveButton(android.R.string.ok)
|
positiveButton(android.R.string.ok)
|
||||||
|
|
|
@ -29,7 +29,6 @@ import android.view.MenuItem
|
||||||
import android.view.MotionEvent
|
import android.view.MotionEvent
|
||||||
import android.view.View
|
import android.view.View
|
||||||
import android.widget.RelativeLayout
|
import android.widget.RelativeLayout
|
||||||
import android.widget.Toast
|
|
||||||
import androidx.annotation.LayoutRes
|
import androidx.annotation.LayoutRes
|
||||||
import androidx.appcompat.widget.Toolbar
|
import androidx.appcompat.widget.Toolbar
|
||||||
import androidx.core.os.bundleOf
|
import androidx.core.os.bundleOf
|
||||||
|
@ -48,10 +47,7 @@ import code.name.monkey.retromusic.activities.tageditor.SongTagEditorActivity
|
||||||
import code.name.monkey.retromusic.db.PlaylistEntity
|
import code.name.monkey.retromusic.db.PlaylistEntity
|
||||||
import code.name.monkey.retromusic.db.toSongEntity
|
import code.name.monkey.retromusic.db.toSongEntity
|
||||||
import code.name.monkey.retromusic.dialogs.*
|
import code.name.monkey.retromusic.dialogs.*
|
||||||
import code.name.monkey.retromusic.extensions.currentFragment
|
import code.name.monkey.retromusic.extensions.*
|
||||||
import code.name.monkey.retromusic.extensions.hide
|
|
||||||
import code.name.monkey.retromusic.extensions.keepScreenOn
|
|
||||||
import code.name.monkey.retromusic.extensions.whichFragment
|
|
||||||
import code.name.monkey.retromusic.fragments.NowPlayingScreen
|
import code.name.monkey.retromusic.fragments.NowPlayingScreen
|
||||||
import code.name.monkey.retromusic.fragments.ReloadType
|
import code.name.monkey.retromusic.fragments.ReloadType
|
||||||
import code.name.monkey.retromusic.fragments.player.PlayerAlbumCoverFragment
|
import code.name.monkey.retromusic.fragments.player.PlayerAlbumCoverFragment
|
||||||
|
@ -60,7 +56,10 @@ import code.name.monkey.retromusic.interfaces.IPaletteColorHolder
|
||||||
import code.name.monkey.retromusic.model.Song
|
import code.name.monkey.retromusic.model.Song
|
||||||
import code.name.monkey.retromusic.repository.RealRepository
|
import code.name.monkey.retromusic.repository.RealRepository
|
||||||
import code.name.monkey.retromusic.service.MusicService
|
import code.name.monkey.retromusic.service.MusicService
|
||||||
import code.name.monkey.retromusic.util.*
|
import code.name.monkey.retromusic.util.NavigationUtil
|
||||||
|
import code.name.monkey.retromusic.util.PreferenceUtil
|
||||||
|
import code.name.monkey.retromusic.util.RetroUtil
|
||||||
|
import code.name.monkey.retromusic.util.RingtoneManager
|
||||||
import com.google.android.material.bottomsheet.BottomSheetBehavior
|
import com.google.android.material.bottomsheet.BottomSheetBehavior
|
||||||
import kotlinx.coroutines.Dispatchers.IO
|
import kotlinx.coroutines.Dispatchers.IO
|
||||||
import kotlinx.coroutines.Dispatchers.Main
|
import kotlinx.coroutines.Dispatchers.Main
|
||||||
|
@ -196,7 +195,7 @@ abstract class AbsPlayerFragment(@LayoutRes layout: Int) : AbsMainActivityFragme
|
||||||
if (genre == null) {
|
if (genre == null) {
|
||||||
genre = "Not Specified"
|
genre = "Not Specified"
|
||||||
}
|
}
|
||||||
Toast.makeText(context, genre, Toast.LENGTH_SHORT).show()
|
showToast(genre)
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -24,7 +24,6 @@ import android.view.MenuInflater
|
||||||
import android.view.MenuItem
|
import android.view.MenuItem
|
||||||
import android.view.View
|
import android.view.View
|
||||||
import android.webkit.MimeTypeMap
|
import android.webkit.MimeTypeMap
|
||||||
import android.widget.Toast
|
|
||||||
import androidx.activity.OnBackPressedCallback
|
import androidx.activity.OnBackPressedCallback
|
||||||
import androidx.appcompat.widget.PopupMenu
|
import androidx.appcompat.widget.PopupMenu
|
||||||
import androidx.core.view.isVisible
|
import androidx.core.view.isVisible
|
||||||
|
@ -211,12 +210,9 @@ class FoldersFragment : AbsMainActivityFragment(R.layout.fragment_folder),
|
||||||
}
|
}
|
||||||
R.id.action_set_as_start_directory -> {
|
R.id.action_set_as_start_directory -> {
|
||||||
startDirectory = file
|
startDirectory = file
|
||||||
Toast.makeText(
|
showToast(
|
||||||
activity,
|
String.format(getString(R.string.new_start_directory), file.path)
|
||||||
String.format(getString(R.string.new_start_directory), file.path),
|
|
||||||
Toast.LENGTH_SHORT
|
|
||||||
)
|
)
|
||||||
.show()
|
|
||||||
return@setOnMenuItemClickListener true
|
return@setOnMenuItemClickListener true
|
||||||
}
|
}
|
||||||
R.id.action_scan -> {
|
R.id.action_scan -> {
|
||||||
|
@ -491,7 +487,7 @@ class FoldersFragment : AbsMainActivityFragment(R.layout.fragment_folder),
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
if (toBeScanned.isEmpty()) {
|
if (toBeScanned.isEmpty()) {
|
||||||
Toast.makeText(activity, R.string.nothing_to_scan, Toast.LENGTH_SHORT).show()
|
showToast(R.string.nothing_to_scan)
|
||||||
} else {
|
} else {
|
||||||
MediaScannerConnection.scanFile(
|
MediaScannerConnection.scanFile(
|
||||||
requireContext(),
|
requireContext(),
|
||||||
|
|
|
@ -24,7 +24,6 @@ import android.view.LayoutInflater
|
||||||
import android.view.MenuItem
|
import android.view.MenuItem
|
||||||
import android.view.View
|
import android.view.View
|
||||||
import android.view.ViewGroup
|
import android.view.ViewGroup
|
||||||
import android.widget.Toast
|
|
||||||
import androidx.core.view.doOnPreDraw
|
import androidx.core.view.doOnPreDraw
|
||||||
import androidx.core.view.updateLayoutParams
|
import androidx.core.view.updateLayoutParams
|
||||||
import androidx.fragment.app.Fragment
|
import androidx.fragment.app.Fragment
|
||||||
|
@ -36,6 +35,7 @@ import code.name.monkey.retromusic.R
|
||||||
import code.name.monkey.retromusic.databinding.FragmentUserInfoBinding
|
import code.name.monkey.retromusic.databinding.FragmentUserInfoBinding
|
||||||
import code.name.monkey.retromusic.extensions.accentColor
|
import code.name.monkey.retromusic.extensions.accentColor
|
||||||
import code.name.monkey.retromusic.extensions.applyToolbar
|
import code.name.monkey.retromusic.extensions.applyToolbar
|
||||||
|
import code.name.monkey.retromusic.extensions.showToast
|
||||||
import code.name.monkey.retromusic.fragments.LibraryViewModel
|
import code.name.monkey.retromusic.fragments.LibraryViewModel
|
||||||
import code.name.monkey.retromusic.glide.GlideApp
|
import code.name.monkey.retromusic.glide.GlideApp
|
||||||
import code.name.monkey.retromusic.glide.RetroGlideExtension
|
import code.name.monkey.retromusic.glide.RetroGlideExtension
|
||||||
|
@ -55,9 +55,7 @@ import kotlinx.coroutines.Dispatchers
|
||||||
import kotlinx.coroutines.launch
|
import kotlinx.coroutines.launch
|
||||||
import kotlinx.coroutines.withContext
|
import kotlinx.coroutines.withContext
|
||||||
import org.koin.androidx.viewmodel.ext.android.sharedViewModel
|
import org.koin.androidx.viewmodel.ext.android.sharedViewModel
|
||||||
import java.io.BufferedOutputStream
|
|
||||||
import java.io.File
|
import java.io.File
|
||||||
import java.io.FileOutputStream
|
|
||||||
|
|
||||||
class UserInfoFragment : Fragment() {
|
class UserInfoFragment : Fragment() {
|
||||||
|
|
||||||
|
@ -98,11 +96,7 @@ class UserInfoFragment : Fragment() {
|
||||||
binding.next.setOnClickListener {
|
binding.next.setOnClickListener {
|
||||||
val nameString = binding.name.text.toString().trim { it <= ' ' }
|
val nameString = binding.name.text.toString().trim { it <= ' ' }
|
||||||
if (nameString.isEmpty()) {
|
if (nameString.isEmpty()) {
|
||||||
Toast.makeText(
|
showToast("Your name can't be empty!")
|
||||||
requireContext(),
|
|
||||||
"Your name can't be empty!",
|
|
||||||
Toast.LENGTH_SHORT
|
|
||||||
).show()
|
|
||||||
return@setOnClickListener
|
return@setOnClickListener
|
||||||
}
|
}
|
||||||
PreferenceUtil.userName = nameString
|
PreferenceUtil.userName = nameString
|
||||||
|
@ -204,9 +198,9 @@ class UserInfoFragment : Fragment() {
|
||||||
val fileUri = data?.data
|
val fileUri = data?.data
|
||||||
fileUri?.let { setAndSaveBannerImage(it) }
|
fileUri?.let { setAndSaveBannerImage(it) }
|
||||||
} else if (resultCode == ImagePicker.RESULT_ERROR) {
|
} else if (resultCode == ImagePicker.RESULT_ERROR) {
|
||||||
Toast.makeText(requireContext(), ImagePicker.getError(data), Toast.LENGTH_SHORT).show()
|
showToast(ImagePicker.getError(data))
|
||||||
} else {
|
} else {
|
||||||
Toast.makeText(requireContext(), "Task Cancelled", Toast.LENGTH_SHORT).show()
|
showToast("Task Cancelled")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -245,7 +239,7 @@ class UserInfoFragment : Fragment() {
|
||||||
val file = File(appDir, fileName)
|
val file = File(appDir, fileName)
|
||||||
var successful = false
|
var successful = false
|
||||||
runCatching {
|
runCatching {
|
||||||
BufferedOutputStream(FileOutputStream(file)).use {
|
file.outputStream().buffered().use {
|
||||||
successful = ImageUtil.resizeBitmap(bitmap, 2048)
|
successful = ImageUtil.resizeBitmap(bitmap, 2048)
|
||||||
.compress(Bitmap.CompressFormat.WEBP, 100, it)
|
.compress(Bitmap.CompressFormat.WEBP, 100, it)
|
||||||
}
|
}
|
||||||
|
@ -254,7 +248,7 @@ class UserInfoFragment : Fragment() {
|
||||||
}
|
}
|
||||||
if (successful) {
|
if (successful) {
|
||||||
withContext(Dispatchers.Main) {
|
withContext(Dispatchers.Main) {
|
||||||
Toast.makeText(requireContext(), "Updated", Toast.LENGTH_SHORT).show()
|
showToast("Updated")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -19,12 +19,12 @@ import android.graphics.drawable.ColorDrawable
|
||||||
import android.os.Build
|
import android.os.Build
|
||||||
import android.os.Bundle
|
import android.os.Bundle
|
||||||
import android.view.View
|
import android.view.View
|
||||||
import android.widget.Toast
|
|
||||||
import androidx.preference.ListPreference
|
import androidx.preference.ListPreference
|
||||||
import androidx.preference.Preference
|
import androidx.preference.Preference
|
||||||
import androidx.preference.PreferenceManager
|
import androidx.preference.PreferenceManager
|
||||||
import code.name.monkey.appthemehelper.common.prefs.supportv7.ATEPreferenceFragmentCompat
|
import code.name.monkey.appthemehelper.common.prefs.supportv7.ATEPreferenceFragmentCompat
|
||||||
import code.name.monkey.retromusic.activities.OnThemeChangedListener
|
import code.name.monkey.retromusic.activities.OnThemeChangedListener
|
||||||
|
import code.name.monkey.retromusic.extensions.showToast
|
||||||
import code.name.monkey.retromusic.preferences.*
|
import code.name.monkey.retromusic.preferences.*
|
||||||
import code.name.monkey.retromusic.util.NavigationUtil
|
import code.name.monkey.retromusic.util.NavigationUtil
|
||||||
import dev.chrisbanes.insetter.applyInsetter
|
import dev.chrisbanes.insetter.applyInsetter
|
||||||
|
@ -36,8 +36,7 @@ import dev.chrisbanes.insetter.applyInsetter
|
||||||
abstract class AbsSettingsFragment : ATEPreferenceFragmentCompat() {
|
abstract class AbsSettingsFragment : ATEPreferenceFragmentCompat() {
|
||||||
|
|
||||||
internal fun showProToastAndNavigate(message: String) {
|
internal fun showProToastAndNavigate(message: String) {
|
||||||
Toast.makeText(requireContext(), "$message is Pro version feature.", Toast.LENGTH_SHORT)
|
showToast("$message is Pro version feature.")
|
||||||
.show()
|
|
||||||
NavigationUtil.goToProVersion(requireActivity())
|
NavigationUtil.goToProVersion(requireActivity())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -2,11 +2,11 @@ package code.name.monkey.retromusic.helper
|
||||||
|
|
||||||
import android.content.Context
|
import android.content.Context
|
||||||
import android.os.Environment
|
import android.os.Environment
|
||||||
import android.widget.Toast
|
|
||||||
import code.name.monkey.retromusic.App
|
|
||||||
import code.name.monkey.retromusic.BuildConfig
|
import code.name.monkey.retromusic.BuildConfig
|
||||||
import code.name.monkey.retromusic.db.PlaylistEntity
|
import code.name.monkey.retromusic.db.PlaylistEntity
|
||||||
import code.name.monkey.retromusic.db.toSongEntity
|
import code.name.monkey.retromusic.db.toSongEntity
|
||||||
|
import code.name.monkey.retromusic.extensions.showToast
|
||||||
|
import code.name.monkey.retromusic.extensions.zipOutputStream
|
||||||
import code.name.monkey.retromusic.helper.BackupContent.*
|
import code.name.monkey.retromusic.helper.BackupContent.*
|
||||||
import code.name.monkey.retromusic.model.Song
|
import code.name.monkey.retromusic.model.Song
|
||||||
import code.name.monkey.retromusic.repository.Repository
|
import code.name.monkey.retromusic.repository.Repository
|
||||||
|
@ -15,12 +15,12 @@ import kotlinx.coroutines.Dispatchers
|
||||||
import kotlinx.coroutines.withContext
|
import kotlinx.coroutines.withContext
|
||||||
import org.koin.core.component.KoinComponent
|
import org.koin.core.component.KoinComponent
|
||||||
import org.koin.core.component.inject
|
import org.koin.core.component.inject
|
||||||
import java.io.*
|
import java.io.File
|
||||||
|
import java.io.InputStream
|
||||||
import java.text.SimpleDateFormat
|
import java.text.SimpleDateFormat
|
||||||
import java.util.*
|
import java.util.*
|
||||||
import java.util.zip.ZipEntry
|
import java.util.zip.ZipEntry
|
||||||
import java.util.zip.ZipInputStream
|
import java.util.zip.ZipInputStream
|
||||||
import java.util.zip.ZipOutputStream
|
|
||||||
|
|
||||||
object BackupHelper : KoinComponent {
|
object BackupHelper : KoinComponent {
|
||||||
private val repository by inject<Repository>()
|
private val repository by inject<Repository>()
|
||||||
|
@ -37,38 +37,30 @@ object BackupHelper : KoinComponent {
|
||||||
zipItems.addAll(getSettingsZipItems(context))
|
zipItems.addAll(getSettingsZipItems(context))
|
||||||
getUserImageZipItems(context)?.let { zipItems.addAll(it) }
|
getUserImageZipItems(context)?.let { zipItems.addAll(it) }
|
||||||
zipItems.addAll(getCustomArtistZipItems(context))
|
zipItems.addAll(getCustomArtistZipItems(context))
|
||||||
zipAll(zipItems, backupFile)
|
zipAll(context, zipItems, backupFile)
|
||||||
// Clean Cache Playlist Directory
|
// Clean Cache Playlist Directory
|
||||||
File(context.filesDir, PLAYLISTS_PATH).deleteRecursively()
|
File(context.filesDir, PLAYLISTS_PATH).deleteRecursively()
|
||||||
}
|
}
|
||||||
|
|
||||||
private suspend fun zipAll(zipItems: List<ZipItem>, backupFile: File) =
|
private suspend fun zipAll(context: Context, zipItems: List<ZipItem>, backupFile: File) =
|
||||||
withContext(Dispatchers.IO) {
|
withContext(Dispatchers.IO) {
|
||||||
runCatching {
|
runCatching {
|
||||||
ZipOutputStream(BufferedOutputStream(FileOutputStream(backupFile))).use { out ->
|
backupFile.outputStream().buffered().zipOutputStream().use { out ->
|
||||||
for (zipItem in zipItems) {
|
for (zipItem in zipItems) {
|
||||||
FileInputStream(zipItem.filePath).use { fi ->
|
File(zipItem.filePath).inputStream().buffered().use { origin ->
|
||||||
BufferedInputStream(fi).use { origin ->
|
val entry = ZipEntry(zipItem.zipPath)
|
||||||
val entry = ZipEntry(zipItem.zipPath)
|
out.putNextEntry(entry)
|
||||||
out.putNextEntry(entry)
|
origin.copyTo(out)
|
||||||
origin.copyTo(out)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}.onFailure {
|
}.onFailure {
|
||||||
withContext(Dispatchers.Main) {
|
withContext(Dispatchers.Main) {
|
||||||
Toast.makeText(App.getContext(), "Couldn't create backup", Toast.LENGTH_SHORT)
|
context.showToast("Couldn't create backup")
|
||||||
.show()
|
|
||||||
}
|
}
|
||||||
}.onSuccess {
|
}.onSuccess {
|
||||||
withContext(Dispatchers.Main) {
|
withContext(Dispatchers.Main) {
|
||||||
Toast.makeText(
|
context.showToast("Backup created successfully")
|
||||||
App.getContext(),
|
|
||||||
"Backup created successfully",
|
|
||||||
Toast.LENGTH_SHORT
|
|
||||||
)
|
|
||||||
.show()
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -167,7 +159,7 @@ object BackupHelper : KoinComponent {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
withContext(Dispatchers.Main) {
|
withContext(Dispatchers.Main) {
|
||||||
Toast.makeText(context, "Restore Completed Successfully", Toast.LENGTH_SHORT).show()
|
context.showToast("Restore Completed Successfully")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -176,7 +168,7 @@ object BackupHelper : KoinComponent {
|
||||||
val file = File(
|
val file = File(
|
||||||
context.filesDir.path, zipEntry.getFileName()
|
context.filesDir.path, zipEntry.getFileName()
|
||||||
)
|
)
|
||||||
BufferedOutputStream(FileOutputStream(file)).use { bos ->
|
file.outputStream().buffered().use { bos ->
|
||||||
zipIn.copyTo(bos)
|
zipIn.copyTo(bos)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -188,7 +180,7 @@ object BackupHelper : KoinComponent {
|
||||||
if (file.exists()) {
|
if (file.exists()) {
|
||||||
file.delete()
|
file.delete()
|
||||||
}
|
}
|
||||||
BufferedOutputStream(FileOutputStream(file)).use { bos ->
|
file.outputStream().buffered().use { bos ->
|
||||||
zipIn.copyTo(bos)
|
zipIn.copyTo(bos)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -233,16 +225,14 @@ object BackupHelper : KoinComponent {
|
||||||
if (!parentFolder.exists()) {
|
if (!parentFolder.exists()) {
|
||||||
parentFolder.mkdirs()
|
parentFolder.mkdirs()
|
||||||
}
|
}
|
||||||
BufferedOutputStream(
|
val file = File(
|
||||||
FileOutputStream(
|
parentFolder,
|
||||||
File(
|
zipEntry.getFileName()
|
||||||
parentFolder,
|
)
|
||||||
zipEntry.getFileName()
|
file.outputStream().buffered()
|
||||||
)
|
.use { bos ->
|
||||||
)
|
zipIn.copyTo(bos)
|
||||||
).use { bos ->
|
}
|
||||||
zipIn.copyTo(bos)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun restoreCustomArtistPrefs(
|
private fun restoreCustomArtistPrefs(
|
||||||
|
@ -252,7 +242,7 @@ object BackupHelper : KoinComponent {
|
||||||
) {
|
) {
|
||||||
val file =
|
val file =
|
||||||
File(context.filesDir.parentFile, "shared_prefs".child(zipEntry.getFileName()))
|
File(context.filesDir.parentFile, "shared_prefs".child(zipEntry.getFileName()))
|
||||||
BufferedOutputStream(FileOutputStream(file)).use { bos ->
|
file.outputStream().buffered().use { bos ->
|
||||||
zipIn.copyTo(bos)
|
zipIn.copyTo(bos)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -25,6 +25,7 @@ import android.provider.DocumentsContract
|
||||||
import android.widget.Toast
|
import android.widget.Toast
|
||||||
import androidx.core.content.ContextCompat
|
import androidx.core.content.ContextCompat
|
||||||
import code.name.monkey.retromusic.R
|
import code.name.monkey.retromusic.R
|
||||||
|
import code.name.monkey.retromusic.extensions.showToast
|
||||||
import code.name.monkey.retromusic.model.Song
|
import code.name.monkey.retromusic.model.Song
|
||||||
import code.name.monkey.retromusic.repository.SongRepository
|
import code.name.monkey.retromusic.repository.SongRepository
|
||||||
import code.name.monkey.retromusic.service.MusicService
|
import code.name.monkey.retromusic.service.MusicService
|
||||||
|
@ -317,11 +318,7 @@ object MusicPlayerRemote : KoinComponent {
|
||||||
queue.add(song)
|
queue.add(song)
|
||||||
openQueue(queue, 0, false)
|
openQueue(queue, 0, false)
|
||||||
}
|
}
|
||||||
Toast.makeText(
|
musicService?.showToast(R.string.added_title_to_playing_queue)
|
||||||
musicService,
|
|
||||||
musicService!!.resources.getString(R.string.added_title_to_playing_queue),
|
|
||||||
Toast.LENGTH_SHORT
|
|
||||||
).show()
|
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
return false
|
return false
|
||||||
|
@ -340,7 +337,7 @@ object MusicPlayerRemote : KoinComponent {
|
||||||
R.string.added_x_titles_to_playing_queue,
|
R.string.added_x_titles_to_playing_queue,
|
||||||
songs.size
|
songs.size
|
||||||
)
|
)
|
||||||
Toast.makeText(musicService, toast, Toast.LENGTH_SHORT).show()
|
musicService?.showToast(toast, Toast.LENGTH_SHORT)
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
return false
|
return false
|
||||||
|
@ -355,11 +352,7 @@ object MusicPlayerRemote : KoinComponent {
|
||||||
queue.add(song)
|
queue.add(song)
|
||||||
openQueue(queue, 0, false)
|
openQueue(queue, 0, false)
|
||||||
}
|
}
|
||||||
Toast.makeText(
|
musicService?.showToast(R.string.added_title_to_playing_queue)
|
||||||
musicService,
|
|
||||||
musicService!!.resources.getString(R.string.added_title_to_playing_queue),
|
|
||||||
Toast.LENGTH_SHORT
|
|
||||||
).show()
|
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
return false
|
return false
|
||||||
|
@ -377,7 +370,7 @@ object MusicPlayerRemote : KoinComponent {
|
||||||
R.string.added_x_titles_to_playing_queue,
|
R.string.added_x_titles_to_playing_queue,
|
||||||
songs.size
|
songs.size
|
||||||
)
|
)
|
||||||
Toast.makeText(musicService, toast, Toast.LENGTH_SHORT).show()
|
musicService?.showToast(toast)
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
return false
|
return false
|
||||||
|
|
|
@ -21,7 +21,6 @@ import android.util.AttributeSet
|
||||||
import android.view.LayoutInflater
|
import android.view.LayoutInflater
|
||||||
import android.view.View
|
import android.view.View
|
||||||
import android.view.ViewGroup
|
import android.view.ViewGroup
|
||||||
import android.widget.Toast
|
|
||||||
import androidx.core.graphics.BlendModeColorFilterCompat
|
import androidx.core.graphics.BlendModeColorFilterCompat
|
||||||
import androidx.core.graphics.BlendModeCompat.SRC_IN
|
import androidx.core.graphics.BlendModeCompat.SRC_IN
|
||||||
import androidx.fragment.app.DialogFragment
|
import androidx.fragment.app.DialogFragment
|
||||||
|
@ -81,7 +80,7 @@ class AlbumCoverStylePreferenceDialog : DialogFragment(),
|
||||||
val coverStyle = values()[viewPagerPosition]
|
val coverStyle = values()[viewPagerPosition]
|
||||||
if (isAlbumCoverStyle(coverStyle)) {
|
if (isAlbumCoverStyle(coverStyle)) {
|
||||||
val result = getString(coverStyle.titleRes) + " theme is Pro version feature."
|
val result = getString(coverStyle.titleRes) + " theme is Pro version feature."
|
||||||
Toast.makeText(context, result, Toast.LENGTH_SHORT).show()
|
showToast(result)
|
||||||
NavigationUtil.goToProVersion(requireActivity())
|
NavigationUtil.goToProVersion(requireActivity())
|
||||||
} else {
|
} else {
|
||||||
PreferenceUtil.albumCoverStyle = coverStyle
|
PreferenceUtil.albumCoverStyle = coverStyle
|
||||||
|
|
|
@ -18,7 +18,6 @@ import android.app.Dialog
|
||||||
import android.content.Context
|
import android.content.Context
|
||||||
import android.os.Bundle
|
import android.os.Bundle
|
||||||
import android.util.AttributeSet
|
import android.util.AttributeSet
|
||||||
import android.widget.Toast
|
|
||||||
import androidx.core.graphics.BlendModeColorFilterCompat
|
import androidx.core.graphics.BlendModeColorFilterCompat
|
||||||
import androidx.core.graphics.BlendModeCompat.SRC_IN
|
import androidx.core.graphics.BlendModeCompat.SRC_IN
|
||||||
import androidx.fragment.app.DialogFragment
|
import androidx.fragment.app.DialogFragment
|
||||||
|
@ -30,6 +29,7 @@ import code.name.monkey.retromusic.databinding.PreferenceDialogLibraryCategories
|
||||||
import code.name.monkey.retromusic.extensions.colorButtons
|
import code.name.monkey.retromusic.extensions.colorButtons
|
||||||
import code.name.monkey.retromusic.extensions.colorControlNormal
|
import code.name.monkey.retromusic.extensions.colorControlNormal
|
||||||
import code.name.monkey.retromusic.extensions.materialDialog
|
import code.name.monkey.retromusic.extensions.materialDialog
|
||||||
|
import code.name.monkey.retromusic.extensions.showToast
|
||||||
import code.name.monkey.retromusic.model.CategoryInfo
|
import code.name.monkey.retromusic.model.CategoryInfo
|
||||||
import code.name.monkey.retromusic.util.PreferenceUtil
|
import code.name.monkey.retromusic.util.PreferenceUtil
|
||||||
|
|
||||||
|
@ -76,7 +76,7 @@ class LibraryPreferenceDialog : DialogFragment() {
|
||||||
private fun updateCategories(categories: List<CategoryInfo>) {
|
private fun updateCategories(categories: List<CategoryInfo>) {
|
||||||
if (getSelected(categories) == 0) return
|
if (getSelected(categories) == 0) return
|
||||||
if (getSelected(categories) > 5) {
|
if (getSelected(categories) > 5) {
|
||||||
Toast.makeText(context, "Not more than 5 items", Toast.LENGTH_SHORT).show()
|
showToast("Not more than 5 items")
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
PreferenceUtil.libraryCategory = categories
|
PreferenceUtil.libraryCategory = categories
|
||||||
|
|
|
@ -21,7 +21,6 @@ import android.util.AttributeSet
|
||||||
import android.view.LayoutInflater
|
import android.view.LayoutInflater
|
||||||
import android.view.View
|
import android.view.View
|
||||||
import android.view.ViewGroup
|
import android.view.ViewGroup
|
||||||
import android.widget.Toast
|
|
||||||
import androidx.core.graphics.BlendModeColorFilterCompat
|
import androidx.core.graphics.BlendModeColorFilterCompat
|
||||||
import androidx.core.graphics.BlendModeCompat.SRC_IN
|
import androidx.core.graphics.BlendModeCompat.SRC_IN
|
||||||
import androidx.fragment.app.DialogFragment
|
import androidx.fragment.app.DialogFragment
|
||||||
|
@ -91,7 +90,7 @@ class NowPlayingScreenPreferenceDialog : DialogFragment(), ViewPager.OnPageChang
|
||||||
if (isNowPlayingThemes(nowPlayingScreen)) {
|
if (isNowPlayingThemes(nowPlayingScreen)) {
|
||||||
val result =
|
val result =
|
||||||
"${getString(nowPlayingScreen.titleRes)} theme is Pro version feature."
|
"${getString(nowPlayingScreen.titleRes)} theme is Pro version feature."
|
||||||
Toast.makeText(context, result, Toast.LENGTH_SHORT).show()
|
showToast(result)
|
||||||
NavigationUtil.goToProVersion(requireContext())
|
NavigationUtil.goToProVersion(requireContext())
|
||||||
} else {
|
} else {
|
||||||
PreferenceUtil.nowPlayingScreen = nowPlayingScreen
|
PreferenceUtil.nowPlayingScreen = nowPlayingScreen
|
||||||
|
|
|
@ -9,9 +9,9 @@ import android.media.MediaPlayer
|
||||||
import android.media.audiofx.AudioEffect
|
import android.media.audiofx.AudioEffect
|
||||||
import android.os.PowerManager
|
import android.os.PowerManager
|
||||||
import android.util.Log
|
import android.util.Log
|
||||||
import android.widget.Toast
|
|
||||||
import androidx.core.net.toUri
|
import androidx.core.net.toUri
|
||||||
import code.name.monkey.retromusic.R
|
import code.name.monkey.retromusic.R
|
||||||
|
import code.name.monkey.retromusic.extensions.showToast
|
||||||
import code.name.monkey.retromusic.helper.MusicPlayerRemote
|
import code.name.monkey.retromusic.helper.MusicPlayerRemote
|
||||||
import code.name.monkey.retromusic.service.AudioFader.Companion.createFadeAnimator
|
import code.name.monkey.retromusic.service.AudioFader.Companion.createFadeAnimator
|
||||||
import code.name.monkey.retromusic.service.playback.Playback
|
import code.name.monkey.retromusic.service.playback.Playback
|
||||||
|
@ -291,12 +291,7 @@ class CrossFadePlayer(val context: Context) : Playback, MediaPlayer.OnCompletion
|
||||||
player2 = MediaPlayer()
|
player2 = MediaPlayer()
|
||||||
mIsInitialized = true
|
mIsInitialized = true
|
||||||
mp?.setWakeMode(context, PowerManager.PARTIAL_WAKE_LOCK)
|
mp?.setWakeMode(context, PowerManager.PARTIAL_WAKE_LOCK)
|
||||||
Toast.makeText(
|
context.showToast(R.string.unplayable_file)
|
||||||
context,
|
|
||||||
context.resources.getString(R.string.unplayable_file),
|
|
||||||
Toast.LENGTH_SHORT
|
|
||||||
)
|
|
||||||
.show()
|
|
||||||
Log.e(TAG, what.toString() + extra)
|
Log.e(TAG, what.toString() + extra)
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
|
|
|
@ -38,7 +38,6 @@ import android.support.v4.media.session.PlaybackStateCompat
|
||||||
import android.telephony.PhoneStateListener
|
import android.telephony.PhoneStateListener
|
||||||
import android.telephony.TelephonyManager
|
import android.telephony.TelephonyManager
|
||||||
import android.util.Log
|
import android.util.Log
|
||||||
import android.widget.Toast
|
|
||||||
import androidx.core.content.edit
|
import androidx.core.content.edit
|
||||||
import androidx.core.content.getSystemService
|
import androidx.core.content.getSystemService
|
||||||
import androidx.media.AudioAttributesCompat
|
import androidx.media.AudioAttributesCompat
|
||||||
|
@ -54,6 +53,7 @@ import code.name.monkey.retromusic.activities.LockScreenActivity
|
||||||
import code.name.monkey.retromusic.appwidgets.*
|
import code.name.monkey.retromusic.appwidgets.*
|
||||||
import code.name.monkey.retromusic.auto.AutoMediaIDHelper
|
import code.name.monkey.retromusic.auto.AutoMediaIDHelper
|
||||||
import code.name.monkey.retromusic.auto.AutoMusicProvider
|
import code.name.monkey.retromusic.auto.AutoMusicProvider
|
||||||
|
import code.name.monkey.retromusic.extensions.showToast
|
||||||
import code.name.monkey.retromusic.glide.BlurTransformation
|
import code.name.monkey.retromusic.glide.BlurTransformation
|
||||||
import code.name.monkey.retromusic.glide.GlideApp
|
import code.name.monkey.retromusic.glide.GlideApp
|
||||||
import code.name.monkey.retromusic.glide.RetroGlideExtension.getSongModel
|
import code.name.monkey.retromusic.glide.RetroGlideExtension.getSongModel
|
||||||
|
@ -891,10 +891,7 @@ class MusicService : MediaBrowserServiceCompat(),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
Toast.makeText(
|
showToast(R.string.audio_focus_denied)
|
||||||
this, resources.getString(R.string.audio_focus_denied), Toast.LENGTH_SHORT
|
|
||||||
)
|
|
||||||
.show()
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -924,8 +921,7 @@ class MusicService : MediaBrowserServiceCompat(),
|
||||||
if (openTrackAndPrepareNextAt(position)) {
|
if (openTrackAndPrepareNextAt(position)) {
|
||||||
play()
|
play()
|
||||||
} else {
|
} else {
|
||||||
Toast.makeText(this, resources.getString(R.string.unplayable_file), Toast.LENGTH_SHORT)
|
showToast(resources.getString(R.string.unplayable_file))
|
||||||
.show()
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -940,7 +936,7 @@ class MusicService : MediaBrowserServiceCompat(),
|
||||||
}
|
}
|
||||||
play()
|
play()
|
||||||
} else {
|
} else {
|
||||||
Toast.makeText(applicationContext, R.string.playlist_is_empty, Toast.LENGTH_LONG).show()
|
showToast(R.string.playlist_is_empty)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1315,11 +1311,10 @@ class MusicService : MediaBrowserServiceCompat(),
|
||||||
openQueue(playlistSongs, 0, true)
|
openQueue(playlistSongs, 0, true)
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
Toast.makeText(applicationContext, R.string.playlist_is_empty, Toast.LENGTH_LONG)
|
showToast( R.string.playlist_is_empty)
|
||||||
.show()
|
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
Toast.makeText(applicationContext, R.string.playlist_is_empty, Toast.LENGTH_LONG).show()
|
showToast(R.string.playlist_is_empty)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -2,8 +2,8 @@ package code.name.monkey.retromusic.util
|
||||||
|
|
||||||
import android.content.Context
|
import android.content.Context
|
||||||
import android.content.Intent
|
import android.content.Intent
|
||||||
import android.widget.Toast
|
|
||||||
import androidx.core.content.FileProvider
|
import androidx.core.content.FileProvider
|
||||||
|
import code.name.monkey.retromusic.extensions.showToast
|
||||||
import java.io.File
|
import java.io.File
|
||||||
|
|
||||||
object BackupUtil {
|
object BackupUtil {
|
||||||
|
@ -19,11 +19,9 @@ object BackupUtil {
|
||||||
).addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION).setType("*/*")
|
).addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION).setType("*/*")
|
||||||
} catch (e: IllegalArgumentException) {
|
} catch (e: IllegalArgumentException) {
|
||||||
e.printStackTrace()
|
e.printStackTrace()
|
||||||
Toast.makeText(
|
context.showToast(
|
||||||
context,
|
"Could not share this file."
|
||||||
"Could not share this file.",
|
)
|
||||||
Toast.LENGTH_SHORT
|
|
||||||
).show()
|
|
||||||
Intent()
|
Intent()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -25,14 +25,13 @@ import android.provider.MediaStore
|
||||||
import android.widget.Toast
|
import android.widget.Toast
|
||||||
import androidx.core.content.edit
|
import androidx.core.content.edit
|
||||||
import code.name.monkey.retromusic.App
|
import code.name.monkey.retromusic.App
|
||||||
|
import code.name.monkey.retromusic.extensions.showToast
|
||||||
import code.name.monkey.retromusic.model.Artist
|
import code.name.monkey.retromusic.model.Artist
|
||||||
import com.bumptech.glide.Glide
|
import com.bumptech.glide.Glide
|
||||||
import com.bumptech.glide.load.engine.DiskCacheStrategy
|
import com.bumptech.glide.load.engine.DiskCacheStrategy
|
||||||
import com.bumptech.glide.request.target.SimpleTarget
|
import com.bumptech.glide.request.target.SimpleTarget
|
||||||
import com.bumptech.glide.request.transition.Transition
|
import com.bumptech.glide.request.transition.Transition
|
||||||
import java.io.BufferedOutputStream
|
|
||||||
import java.io.File
|
import java.io.File
|
||||||
import java.io.FileOutputStream
|
|
||||||
import java.io.IOException
|
import java.io.IOException
|
||||||
import java.util.*
|
import java.util.*
|
||||||
|
|
||||||
|
@ -53,7 +52,7 @@ class CustomArtistImageUtil private constructor(context: Context) {
|
||||||
.into(object : SimpleTarget<Bitmap>() {
|
.into(object : SimpleTarget<Bitmap>() {
|
||||||
override fun onLoadFailed(errorDrawable: Drawable?) {
|
override fun onLoadFailed(errorDrawable: Drawable?) {
|
||||||
super.onLoadFailed(errorDrawable)
|
super.onLoadFailed(errorDrawable)
|
||||||
Toast.makeText(App.getContext(), "Load Failed", Toast.LENGTH_LONG).show()
|
App.getContext().showToast("Load Failed")
|
||||||
}
|
}
|
||||||
|
|
||||||
@SuppressLint("StaticFieldLeak")
|
@SuppressLint("StaticFieldLeak")
|
||||||
|
@ -70,13 +69,12 @@ class CustomArtistImageUtil private constructor(context: Context) {
|
||||||
|
|
||||||
var succesful = false
|
var succesful = false
|
||||||
try {
|
try {
|
||||||
val os = BufferedOutputStream(FileOutputStream(file))
|
file.outputStream().buffered().use { bos ->
|
||||||
succesful = ImageUtil.resizeBitmap(resource, 2048)
|
succesful = ImageUtil.resizeBitmap(resource, 2048)
|
||||||
.compress(Bitmap.CompressFormat.JPEG, 100, os)
|
.compress(Bitmap.CompressFormat.JPEG, 100, bos)
|
||||||
os.close()
|
}
|
||||||
} catch (e: IOException) {
|
} catch (e: IOException) {
|
||||||
Toast.makeText(App.getContext(), e.toString(), Toast.LENGTH_LONG)
|
App.getContext().showToast(e.toString(), Toast.LENGTH_LONG)
|
||||||
.show()
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (succesful) {
|
if (succesful) {
|
||||||
|
|
|
@ -9,7 +9,6 @@ import android.os.Environment
|
||||||
import android.provider.BaseColumns
|
import android.provider.BaseColumns
|
||||||
import android.provider.MediaStore
|
import android.provider.MediaStore
|
||||||
import android.util.Log
|
import android.util.Log
|
||||||
import android.widget.Toast
|
|
||||||
import androidx.core.content.FileProvider
|
import androidx.core.content.FileProvider
|
||||||
import androidx.core.content.contentValuesOf
|
import androidx.core.content.contentValuesOf
|
||||||
import androidx.core.net.toUri
|
import androidx.core.net.toUri
|
||||||
|
@ -20,6 +19,7 @@ import code.name.monkey.retromusic.db.PlaylistEntity
|
||||||
import code.name.monkey.retromusic.db.SongEntity
|
import code.name.monkey.retromusic.db.SongEntity
|
||||||
import code.name.monkey.retromusic.db.toSongEntity
|
import code.name.monkey.retromusic.db.toSongEntity
|
||||||
import code.name.monkey.retromusic.extensions.getLong
|
import code.name.monkey.retromusic.extensions.getLong
|
||||||
|
import code.name.monkey.retromusic.extensions.showToast
|
||||||
import code.name.monkey.retromusic.helper.MusicPlayerRemote.removeFromQueue
|
import code.name.monkey.retromusic.helper.MusicPlayerRemote.removeFromQueue
|
||||||
import code.name.monkey.retromusic.model.Artist
|
import code.name.monkey.retromusic.model.Artist
|
||||||
import code.name.monkey.retromusic.model.Playlist
|
import code.name.monkey.retromusic.model.Playlist
|
||||||
|
@ -58,11 +58,7 @@ object MusicUtil : KoinComponent {
|
||||||
} catch (e: IllegalArgumentException) {
|
} catch (e: IllegalArgumentException) {
|
||||||
// TODO the path is most likely not like /storage/emulated/0/... but something like /storage/28C7-75B0/...
|
// TODO the path is most likely not like /storage/emulated/0/... but something like /storage/28C7-75B0/...
|
||||||
e.printStackTrace()
|
e.printStackTrace()
|
||||||
Toast.makeText(
|
context.showToast("Could not share this file, I'm aware of the issue.")
|
||||||
context,
|
|
||||||
"Could not share this file, I'm aware of the issue.",
|
|
||||||
Toast.LENGTH_SHORT
|
|
||||||
).show()
|
|
||||||
Intent()
|
Intent()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -456,12 +452,7 @@ object MusicUtil : KoinComponent {
|
||||||
}
|
}
|
||||||
activity.contentResolver.notifyChange("content://media".toUri(), null)
|
activity.contentResolver.notifyChange("content://media".toUri(), null)
|
||||||
activity.runOnUiThread {
|
activity.runOnUiThread {
|
||||||
Toast.makeText(
|
activity.showToast(activity.getString(R.string.deleted_x_songs, songCount))
|
||||||
activity,
|
|
||||||
activity.getString(R.string.deleted_x_songs, songCount),
|
|
||||||
Toast.LENGTH_SHORT
|
|
||||||
)
|
|
||||||
.show()
|
|
||||||
callback?.run()
|
callback?.run()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -519,11 +510,7 @@ object MusicUtil : KoinComponent {
|
||||||
cursor.close()
|
cursor.close()
|
||||||
}
|
}
|
||||||
withContext(Dispatchers.Main) {
|
withContext(Dispatchers.Main) {
|
||||||
Toast.makeText(
|
context.showToast(context.getString(R.string.deleted_x_songs, deletedCount))
|
||||||
context,
|
|
||||||
context.getString(R.string.deleted_x_songs, deletedCount),
|
|
||||||
Toast.LENGTH_SHORT
|
|
||||||
).show()
|
|
||||||
}
|
}
|
||||||
|
|
||||||
} catch (ignored: SecurityException) {
|
} catch (ignored: SecurityException) {
|
||||||
|
|
|
@ -22,6 +22,7 @@ import android.widget.Toast
|
||||||
import code.name.monkey.retromusic.R
|
import code.name.monkey.retromusic.R
|
||||||
import code.name.monkey.retromusic.activities.*
|
import code.name.monkey.retromusic.activities.*
|
||||||
import code.name.monkey.retromusic.activities.bugreport.BugReportActivity
|
import code.name.monkey.retromusic.activities.bugreport.BugReportActivity
|
||||||
|
import code.name.monkey.retromusic.extensions.showToast
|
||||||
import code.name.monkey.retromusic.helper.MusicPlayerRemote.audioSessionId
|
import code.name.monkey.retromusic.helper.MusicPlayerRemote.audioSessionId
|
||||||
|
|
||||||
object NavigationUtil {
|
object NavigationUtil {
|
||||||
|
@ -68,10 +69,7 @@ object NavigationUtil {
|
||||||
private fun stockEqualizer(activity: Activity) {
|
private fun stockEqualizer(activity: Activity) {
|
||||||
val sessionId = audioSessionId
|
val sessionId = audioSessionId
|
||||||
if (sessionId == AudioEffect.ERROR_BAD_VALUE) {
|
if (sessionId == AudioEffect.ERROR_BAD_VALUE) {
|
||||||
Toast.makeText(
|
activity.showToast(R.string.no_audio_ID, Toast.LENGTH_LONG)
|
||||||
activity, activity.resources.getString(R.string.no_audio_ID), Toast.LENGTH_LONG
|
|
||||||
)
|
|
||||||
.show()
|
|
||||||
} else {
|
} else {
|
||||||
try {
|
try {
|
||||||
val effects = Intent(AudioEffect.ACTION_DISPLAY_AUDIO_EFFECT_CONTROL_PANEL)
|
val effects = Intent(AudioEffect.ACTION_DISPLAY_AUDIO_EFFECT_CONTROL_PANEL)
|
||||||
|
@ -79,12 +77,7 @@ object NavigationUtil {
|
||||||
effects.putExtra(AudioEffect.EXTRA_CONTENT_TYPE, AudioEffect.CONTENT_TYPE_MUSIC)
|
effects.putExtra(AudioEffect.EXTRA_CONTENT_TYPE, AudioEffect.CONTENT_TYPE_MUSIC)
|
||||||
activity.startActivityForResult(effects, 0)
|
activity.startActivityForResult(effects, 0)
|
||||||
} catch (notFound: ActivityNotFoundException) {
|
} catch (notFound: ActivityNotFoundException) {
|
||||||
Toast.makeText(
|
activity.showToast(R.string.no_equalizer)
|
||||||
activity,
|
|
||||||
activity.resources.getString(R.string.no_equalizer),
|
|
||||||
Toast.LENGTH_SHORT
|
|
||||||
)
|
|
||||||
.show()
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -424,10 +424,11 @@ object PreferenceUtil {
|
||||||
val position = sharedPreferences.getStringOrDefault(
|
val position = sharedPreferences.getStringOrDefault(
|
||||||
HOME_ARTIST_GRID_STYLE, "0"
|
HOME_ARTIST_GRID_STYLE, "0"
|
||||||
).toInt()
|
).toInt()
|
||||||
val typedArray = App.getContext()
|
val layoutRes =
|
||||||
.resources.obtainTypedArray(R.array.pref_home_grid_style_layout)
|
App.getContext().resources.obtainTypedArray(R.array.pref_home_grid_style_layout)
|
||||||
val layoutRes = typedArray.getResourceId(position, 0)
|
.use {
|
||||||
typedArray.recycle()
|
it.getResourceId(position, 0)
|
||||||
|
}
|
||||||
return if (layoutRes == 0) {
|
return if (layoutRes == 0) {
|
||||||
R.layout.item_artist
|
R.layout.item_artist
|
||||||
} else layoutRes
|
} else layoutRes
|
||||||
|
@ -438,10 +439,10 @@ object PreferenceUtil {
|
||||||
val position = sharedPreferences.getStringOrDefault(
|
val position = sharedPreferences.getStringOrDefault(
|
||||||
HOME_ALBUM_GRID_STYLE, "4"
|
HOME_ALBUM_GRID_STYLE, "4"
|
||||||
).toInt()
|
).toInt()
|
||||||
val typedArray = App.getContext()
|
val layoutRes = App.getContext()
|
||||||
.resources.obtainTypedArray(R.array.pref_home_grid_style_layout)
|
.resources.obtainTypedArray(R.array.pref_home_grid_style_layout).use {
|
||||||
val layoutRes = typedArray.getResourceId(position, 0)
|
it.getResourceId(position, 0)
|
||||||
typedArray.recycle()
|
}
|
||||||
return if (layoutRes == 0) {
|
return if (layoutRes == 0) {
|
||||||
R.layout.item_image
|
R.layout.item_image
|
||||||
} else layoutRes
|
} else layoutRes
|
||||||
|
@ -582,7 +583,7 @@ object PreferenceUtil {
|
||||||
4 -> VerticalFlipTransformation()
|
4 -> VerticalFlipTransformation()
|
||||||
5 -> HingeTransformation()
|
5 -> HingeTransformation()
|
||||||
6 -> VerticalStackTransformer()
|
6 -> VerticalStackTransformer()
|
||||||
else -> ViewPager.PageTransformer { _, _ -> }
|
else -> ViewPager.PageTransformer { _, _ -> }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -19,10 +19,10 @@ import android.content.Intent
|
||||||
import android.provider.BaseColumns
|
import android.provider.BaseColumns
|
||||||
import android.provider.MediaStore
|
import android.provider.MediaStore
|
||||||
import android.provider.Settings
|
import android.provider.Settings
|
||||||
import android.widget.Toast
|
|
||||||
import androidx.core.net.toUri
|
import androidx.core.net.toUri
|
||||||
import code.name.monkey.appthemehelper.util.VersionUtils
|
import code.name.monkey.appthemehelper.util.VersionUtils
|
||||||
import code.name.monkey.retromusic.R
|
import code.name.monkey.retromusic.R
|
||||||
|
import code.name.monkey.retromusic.extensions.showToast
|
||||||
import code.name.monkey.retromusic.model.Song
|
import code.name.monkey.retromusic.model.Song
|
||||||
import code.name.monkey.retromusic.util.MusicUtil.getSongFileUri
|
import code.name.monkey.retromusic.util.MusicUtil.getSongFileUri
|
||||||
import com.google.android.material.dialog.MaterialAlertDialogBuilder
|
import com.google.android.material.dialog.MaterialAlertDialogBuilder
|
||||||
|
@ -45,7 +45,7 @@ class RingtoneManager(val context: Context) {
|
||||||
Settings.System.putString(resolver, Settings.System.RINGTONE, uri.toString())
|
Settings.System.putString(resolver, Settings.System.RINGTONE, uri.toString())
|
||||||
val message = context
|
val message = context
|
||||||
.getString(R.string.x_has_been_set_as_ringtone, cursorSong.getString(0))
|
.getString(R.string.x_has_been_set_as_ringtone, cursorSong.getString(0))
|
||||||
Toast.makeText(context, message, Toast.LENGTH_SHORT).show()
|
context.showToast(message)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} catch (ignored: SecurityException) {
|
} catch (ignored: SecurityException) {
|
||||||
|
|
|
@ -15,24 +15,24 @@ package code.name.monkey.retromusic.views
|
||||||
|
|
||||||
import android.content.Context
|
import android.content.Context
|
||||||
import android.util.AttributeSet
|
import android.util.AttributeSet
|
||||||
|
import androidx.core.content.withStyledAttributes
|
||||||
import code.name.monkey.retromusic.R
|
import code.name.monkey.retromusic.R
|
||||||
import com.bumptech.glide.Glide
|
import com.bumptech.glide.Glide
|
||||||
|
|
||||||
/** @author Hemanth S (h4h13).
|
/** @author Hemanth S (h4h13).
|
||||||
*/
|
*/
|
||||||
class NetworkImageView : CircularImageView {
|
class NetworkImageView @JvmOverloads constructor(
|
||||||
constructor(context: Context) : super(context) {
|
context: Context,
|
||||||
init(context, null)
|
attrs: AttributeSet? = null,
|
||||||
}
|
defStyleAttr: Int = 0
|
||||||
|
) :
|
||||||
|
CircularImageView(context, attrs, defStyleAttr) {
|
||||||
|
|
||||||
constructor(context: Context, attrs: AttributeSet?) : super(context, attrs) {
|
init {
|
||||||
init(context, attrs)
|
context.withStyledAttributes(attrs, R.styleable.NetworkImageView, 0, 0) {
|
||||||
}
|
val url = getString(R.styleable.NetworkImageView_url_link)
|
||||||
|
setImageUrl(context, url!!)
|
||||||
constructor(
|
}
|
||||||
context: Context, attrs: AttributeSet?, defStyleAttr: Int
|
|
||||||
) : super(context, attrs, defStyleAttr) {
|
|
||||||
init(context, attrs)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
fun setImageUrl(imageUrl: String) {
|
fun setImageUrl(imageUrl: String) {
|
||||||
|
@ -46,12 +46,4 @@ class NetworkImageView : CircularImageView {
|
||||||
.placeholder(R.drawable.ic_account)
|
.placeholder(R.drawable.ic_account)
|
||||||
.into(this)
|
.into(this)
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun init(context: Context, attributeSet: AttributeSet?) {
|
|
||||||
val attributes =
|
|
||||||
context.obtainStyledAttributes(attributeSet, R.styleable.NetworkImageView, 0, 0)
|
|
||||||
val url = attributes.getString(R.styleable.NetworkImageView_url_link)
|
|
||||||
setImageUrl(context, url!!)
|
|
||||||
attributes.recycle()
|
|
||||||
}
|
|
||||||
}
|
}
|
|
@ -15,6 +15,7 @@ package code.name.monkey.retromusic.views
|
||||||
|
|
||||||
import android.content.Context
|
import android.content.Context
|
||||||
import android.util.AttributeSet
|
import android.util.AttributeSet
|
||||||
|
import androidx.core.content.withStyledAttributes
|
||||||
import code.name.monkey.retromusic.R
|
import code.name.monkey.retromusic.R
|
||||||
import com.google.android.material.imageview.ShapeableImageView
|
import com.google.android.material.imageview.ShapeableImageView
|
||||||
import com.google.android.material.shape.CornerFamily
|
import com.google.android.material.shape.CornerFamily
|
||||||
|
@ -29,13 +30,12 @@ class RetroShapeableImageView @JvmOverloads constructor(
|
||||||
|
|
||||||
|
|
||||||
init {
|
init {
|
||||||
val typedArray =
|
context.withStyledAttributes(attrs, R.styleable.RetroShapeableImageView, defStyle, -1) {
|
||||||
context.obtainStyledAttributes(attrs, R.styleable.RetroShapeableImageView, defStyle, -1)
|
addOnLayoutChangeListener { _, _, _, _, _, _, _, _, _ ->
|
||||||
addOnLayoutChangeListener { _, _, _, _, _, _, _, _, _ ->
|
val radius = width / 2f
|
||||||
val radius = width / 2f
|
shapeAppearanceModel = ShapeAppearanceModel().withCornerSize(radius)
|
||||||
shapeAppearanceModel = ShapeAppearanceModel().withCornerSize(radius)
|
}
|
||||||
}
|
}
|
||||||
typedArray.recycle()
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun updateCornerSize(cornerSize: Float) {
|
private fun updateCornerSize(cornerSize: Float) {
|
||||||
|
|
|
@ -61,6 +61,14 @@
|
||||||
android:visibility="gone"
|
android:visibility="gone"
|
||||||
tools:text="100"
|
tools:text="100"
|
||||||
tools:visibility="visible" />
|
tools:visibility="visible" />
|
||||||
|
|
||||||
|
<code.name.monkey.retromusic.views.PlayingIndicatorView
|
||||||
|
android:id="@+id/playing_indicator"
|
||||||
|
android:layout_width="45dp"
|
||||||
|
android:layout_height="45dp"
|
||||||
|
android:padding="5dp"
|
||||||
|
android:visibility="gone"
|
||||||
|
tools:visibility="visible"/>
|
||||||
</com.google.android.material.card.MaterialCardView>
|
</com.google.android.material.card.MaterialCardView>
|
||||||
|
|
||||||
<com.google.android.material.textview.MaterialTextView
|
<com.google.android.material.textview.MaterialTextView
|
||||||
|
|
|
@ -53,8 +53,8 @@
|
||||||
</array>
|
</array>
|
||||||
|
|
||||||
<array name="pref_appbar_mode_titles">
|
<array name="pref_appbar_mode_titles">
|
||||||
<item>@string/collapsing</item>
|
<item>@string/expanded</item>
|
||||||
<item>@string/simple</item>
|
<item>@string/compact</item>
|
||||||
</array>
|
</array>
|
||||||
|
|
||||||
<string-array name="pref_appbar_mode_values">
|
<string-array name="pref_appbar_mode_values">
|
||||||
|
@ -229,5 +229,4 @@
|
||||||
<item>@string/choose_image</item>
|
<item>@string/choose_image</item>
|
||||||
<item>@string/remove_image</item>
|
<item>@string/remove_image</item>
|
||||||
</string-array>
|
</string-array>
|
||||||
<string name="collapsing">Collapsing</string>
|
|
||||||
</resources>
|
</resources>
|
|
@ -103,6 +103,7 @@
|
||||||
<string name="bug_report_no_password">Please enter your valid GitHub password</string>
|
<string name="bug_report_no_password">Please enter your valid GitHub password</string>
|
||||||
<string name="bug_report_no_title">Please enter an issue title</string>
|
<string name="bug_report_no_title">Please enter an issue title</string>
|
||||||
<string name="bug_report_no_username">Please enter your valid GitHub username</string>
|
<string name="bug_report_no_username">Please enter your valid GitHub username</string>
|
||||||
|
<string name="bug_report_success">Bug report successful</string>
|
||||||
<string name="bug_report_summary">An unexpected error occurred. Sorry you found this bug, if it keeps crashing \"Clear app data\" or send an Email </string>
|
<string name="bug_report_summary">An unexpected error occurred. Sorry you found this bug, if it keeps crashing \"Clear app data\" or send an Email </string>
|
||||||
<string name="bug_report_use_account">Send using GitHub account</string>
|
<string name="bug_report_use_account">Send using GitHub account</string>
|
||||||
<string name="buy_now">Buy now</string>
|
<string name="buy_now">Buy now</string>
|
||||||
|
@ -126,6 +127,7 @@
|
||||||
<string name="clear_playing_queue">Clear queue</string>
|
<string name="clear_playing_queue">Clear queue</string>
|
||||||
<string name="color">Color</string>
|
<string name="color">Color</string>
|
||||||
<string name="colors">Colors</string>
|
<string name="colors">Colors</string>
|
||||||
|
<string name="compact">Compact</string>
|
||||||
<string name="composer">Composer</string>
|
<string name="composer">Composer</string>
|
||||||
<string name="copied_device_info_to_clipboard">Copied device info to clipboard.</string>
|
<string name="copied_device_info_to_clipboard">Copied device info to clipboard.</string>
|
||||||
<string name="could_not_create_playlist">Couldn\u2019t create playlist.</string>
|
<string name="could_not_create_playlist">Couldn\u2019t create playlist.</string>
|
||||||
|
@ -168,6 +170,7 @@
|
||||||
<string name="edit_synced_lyrics">Edit Synced Lyrics</string>
|
<string name="edit_synced_lyrics">Edit Synced Lyrics</string>
|
||||||
<string name="empty">Empty</string>
|
<string name="empty">Empty</string>
|
||||||
<string name="equalizer">Equalizer</string>
|
<string name="equalizer">Equalizer</string>
|
||||||
|
<string name="expanded">Expanded</string>
|
||||||
<string name="faq">FAQ</string>
|
<string name="faq">FAQ</string>
|
||||||
<string name="favorites">Favorites</string>
|
<string name="favorites">Favorites</string>
|
||||||
<string name="finish_last_song">Finish last song</string>
|
<string name="finish_last_song">Finish last song</string>
|
||||||
|
@ -533,5 +536,4 @@
|
||||||
<string name="you_have_to_select_at_least_one_category">You have to select at least one category.</string>
|
<string name="you_have_to_select_at_least_one_category">You have to select at least one category.</string>
|
||||||
<string name="you_will_be_forwarded_to_the_issue_tracker_website">You will be forwarded to the issue tracker website.</string>
|
<string name="you_will_be_forwarded_to_the_issue_tracker_website">You will be forwarded to the issue tracker website.</string>
|
||||||
<string name="your_account_data_is_only_used_for_authentication">Your account data is only used for authentication.</string>
|
<string name="your_account_data_is_only_used_for_authentication">Your account data is only used for authentication.</string>
|
||||||
<string name="bug_report_success">Bug report successful</string>
|
|
||||||
</resources>
|
</resources>
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue