Improved app startup time
This commit is contained in:
parent
6b83421cab
commit
d0a600e016
13 changed files with 147 additions and 153 deletions
|
@ -23,7 +23,6 @@ import androidx.navigation.contains
|
||||||
import androidx.navigation.ui.setupWithNavController
|
import androidx.navigation.ui.setupWithNavController
|
||||||
import code.name.monkey.retromusic.R
|
import code.name.monkey.retromusic.R
|
||||||
import code.name.monkey.retromusic.activities.base.AbsCastActivity
|
import code.name.monkey.retromusic.activities.base.AbsCastActivity
|
||||||
import code.name.monkey.retromusic.databinding.SlidingMusicPanelLayoutBinding
|
|
||||||
import code.name.monkey.retromusic.extensions.*
|
import code.name.monkey.retromusic.extensions.*
|
||||||
import code.name.monkey.retromusic.fragments.settings.OnThemeChangedListener
|
import code.name.monkey.retromusic.fragments.settings.OnThemeChangedListener
|
||||||
import code.name.monkey.retromusic.helper.MusicPlayerRemote
|
import code.name.monkey.retromusic.helper.MusicPlayerRemote
|
||||||
|
@ -45,10 +44,6 @@ class MainActivity : AbsCastActivity(), OnThemeChangedListener {
|
||||||
const val EXPAND_PANEL = "expand_panel"
|
const val EXPAND_PANEL = "expand_panel"
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun createContentView(): SlidingMusicPanelLayoutBinding {
|
|
||||||
return wrapSlidingMusicPanel()
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun onCreate(savedInstanceState: Bundle?) {
|
override fun onCreate(savedInstanceState: Bundle?) {
|
||||||
super.onCreate(savedInstanceState)
|
super.onCreate(savedInstanceState)
|
||||||
setTaskDescriptionColorAuto()
|
setTaskDescriptionColorAuto()
|
||||||
|
@ -57,9 +52,7 @@ class MainActivity : AbsCastActivity(), OnThemeChangedListener {
|
||||||
AppRater.appLaunched(this)
|
AppRater.appLaunched(this)
|
||||||
|
|
||||||
setupNavigationController()
|
setupNavigationController()
|
||||||
if (!hasPermissions()) {
|
|
||||||
findNavController(R.id.fragment_container).navigate(R.id.permissionFragment)
|
|
||||||
}
|
|
||||||
WhatsNewFragment.showChangeLog(this)
|
WhatsNewFragment.showChangeLog(this)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -217,7 +210,7 @@ class MainActivity : AbsCastActivity(), OnThemeChangedListener {
|
||||||
private fun parseLongFromIntent(
|
private fun parseLongFromIntent(
|
||||||
intent: Intent,
|
intent: Intent,
|
||||||
longKey: String,
|
longKey: String,
|
||||||
stringKey: String
|
stringKey: String,
|
||||||
): Long {
|
): Long {
|
||||||
var id = intent.getLongExtra(longKey, -1)
|
var id = intent.getLongExtra(longKey, -1)
|
||||||
if (id < 0) {
|
if (id < 0) {
|
||||||
|
|
|
@ -63,7 +63,7 @@ class PermissionActivity : AbsMusicServiceActivity() {
|
||||||
binding.bluetoothPermission.setButtonClick {
|
binding.bluetoothPermission.setButtonClick {
|
||||||
ActivityCompat.requestPermissions(this,
|
ActivityCompat.requestPermissions(this,
|
||||||
arrayOf(BLUETOOTH_CONNECT),
|
arrayOf(BLUETOOTH_CONNECT),
|
||||||
PERMISSION_REQUEST)
|
BLUETOOTH_PERMISSION_REQUEST)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -25,6 +25,7 @@ import code.name.monkey.retromusic.BuildConfig
|
||||||
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.R
|
import code.name.monkey.retromusic.R
|
||||||
import code.name.monkey.retromusic.activities.base.AbsBaseActivity
|
import code.name.monkey.retromusic.activities.base.AbsBaseActivity
|
||||||
|
import code.name.monkey.retromusic.activities.base.AbsThemeActivity
|
||||||
import code.name.monkey.retromusic.databinding.ActivityProVersionBinding
|
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
|
||||||
|
@ -33,7 +34,7 @@ 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
|
||||||
|
|
||||||
class PurchaseActivity : AbsBaseActivity(), BillingProcessor.IBillingHandler {
|
class PurchaseActivity : AbsThemeActivity(), BillingProcessor.IBillingHandler {
|
||||||
|
|
||||||
private lateinit var binding: ActivityProVersionBinding
|
private lateinit var binding: ActivityProVersionBinding
|
||||||
private lateinit var billingProcessor: BillingProcessor
|
private lateinit var billingProcessor: BillingProcessor
|
||||||
|
|
|
@ -25,7 +25,7 @@ import androidx.core.net.toUri
|
||||||
import androidx.core.view.drawToBitmap
|
import androidx.core.view.drawToBitmap
|
||||||
import code.name.monkey.appthemehelper.util.ColorUtil
|
import code.name.monkey.appthemehelper.util.ColorUtil
|
||||||
import code.name.monkey.appthemehelper.util.MaterialValueHelper
|
import code.name.monkey.appthemehelper.util.MaterialValueHelper
|
||||||
import code.name.monkey.retromusic.activities.base.AbsBaseActivity
|
import code.name.monkey.retromusic.activities.base.AbsThemeActivity
|
||||||
import code.name.monkey.retromusic.databinding.ActivityShareInstagramBinding
|
import code.name.monkey.retromusic.databinding.ActivityShareInstagramBinding
|
||||||
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
|
||||||
|
@ -41,7 +41,7 @@ import code.name.monkey.retromusic.util.color.MediaNotificationProcessor
|
||||||
* Created by hemanths on 2020-02-02.
|
* Created by hemanths on 2020-02-02.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
class ShareInstagramStory : AbsBaseActivity() {
|
class ShareInstagramStory : AbsThemeActivity() {
|
||||||
|
|
||||||
private lateinit var binding: ActivityShareInstagramBinding
|
private lateinit var binding: ActivityShareInstagramBinding
|
||||||
|
|
||||||
|
|
|
@ -30,7 +30,7 @@ import code.name.monkey.appthemehelper.util.TintHelper
|
||||||
import code.name.monkey.appthemehelper.util.ToolbarContentTintHelper
|
import code.name.monkey.appthemehelper.util.ToolbarContentTintHelper
|
||||||
import code.name.monkey.retromusic.BuildConfig
|
import code.name.monkey.retromusic.BuildConfig
|
||||||
import code.name.monkey.retromusic.R
|
import code.name.monkey.retromusic.R
|
||||||
import code.name.monkey.retromusic.activities.base.AbsBaseActivity
|
import code.name.monkey.retromusic.activities.base.AbsThemeActivity
|
||||||
import code.name.monkey.retromusic.databinding.ActivityDonationBinding
|
import code.name.monkey.retromusic.databinding.ActivityDonationBinding
|
||||||
import code.name.monkey.retromusic.databinding.ItemDonationOptionBinding
|
import code.name.monkey.retromusic.databinding.ItemDonationOptionBinding
|
||||||
import code.name.monkey.retromusic.extensions.*
|
import code.name.monkey.retromusic.extensions.*
|
||||||
|
@ -38,7 +38,7 @@ import com.anjlab.android.iab.v3.BillingProcessor
|
||||||
import com.anjlab.android.iab.v3.PurchaseInfo
|
import com.anjlab.android.iab.v3.PurchaseInfo
|
||||||
import com.anjlab.android.iab.v3.SkuDetails
|
import com.anjlab.android.iab.v3.SkuDetails
|
||||||
|
|
||||||
class SupportDevelopmentActivity : AbsBaseActivity(), BillingProcessor.IBillingHandler {
|
class SupportDevelopmentActivity : AbsThemeActivity(), BillingProcessor.IBillingHandler {
|
||||||
|
|
||||||
lateinit var binding: ActivityDonationBinding
|
lateinit var binding: ActivityDonationBinding
|
||||||
|
|
||||||
|
@ -91,8 +91,7 @@ class SupportDevelopmentActivity : AbsBaseActivity(), BillingProcessor.IBillingH
|
||||||
private fun loadSkuDetails() {
|
private fun loadSkuDetails() {
|
||||||
binding.progressContainer.isVisible = true
|
binding.progressContainer.isVisible = true
|
||||||
binding.recyclerView.isVisible = false
|
binding.recyclerView.isVisible = false
|
||||||
val ids =
|
val ids = resources.getStringArray(DONATION_PRODUCT_IDS)
|
||||||
resources.getStringArray(DONATION_PRODUCT_IDS)
|
|
||||||
billingProcessor!!.getPurchaseListingDetailsAsync(
|
billingProcessor!!.getPurchaseListingDetailsAsync(
|
||||||
ArrayList(listOf(*ids)),
|
ArrayList(listOf(*ids)),
|
||||||
object : BillingProcessor.ISkuDetailsResponseListener {
|
object : BillingProcessor.ISkuDetailsResponseListener {
|
||||||
|
@ -139,7 +138,7 @@ class SupportDevelopmentActivity : AbsBaseActivity(), BillingProcessor.IBillingH
|
||||||
|
|
||||||
class SkuDetailsAdapter(
|
class SkuDetailsAdapter(
|
||||||
private var donationsDialog: SupportDevelopmentActivity,
|
private var donationsDialog: SupportDevelopmentActivity,
|
||||||
objects: List<SkuDetails>
|
objects: List<SkuDetails>,
|
||||||
) : RecyclerView.Adapter<SkuDetailsAdapter.ViewHolder>() {
|
) : RecyclerView.Adapter<SkuDetailsAdapter.ViewHolder>() {
|
||||||
|
|
||||||
private var skuDetailsList: List<SkuDetails> = ArrayList()
|
private var skuDetailsList: List<SkuDetails> = ArrayList()
|
||||||
|
@ -175,7 +174,7 @@ class SkuDetailsAdapter(
|
||||||
override fun onBindViewHolder(viewHolder: ViewHolder, i: Int) {
|
override fun onBindViewHolder(viewHolder: ViewHolder, i: Int) {
|
||||||
val skuDetails = skuDetailsList[i]
|
val skuDetails = skuDetailsList[i]
|
||||||
with(viewHolder.binding) {
|
with(viewHolder.binding) {
|
||||||
itemTitle.text = skuDetails.title.replace("Music Player - MP3 Player - Retro", "")
|
itemTitle.text = skuDetails.title.replace("Retro Music Player MP3 Player", "")
|
||||||
.trim { it <= ' ' }
|
.trim { it <= ' ' }
|
||||||
itemText.text = skuDetails.description
|
itemText.text = skuDetails.description
|
||||||
itemText.isVisible = false
|
itemText.isVisible = false
|
||||||
|
@ -200,7 +199,7 @@ class SkuDetailsAdapter(
|
||||||
strikeThrough(itemPrice, purchased)
|
strikeThrough(itemPrice, purchased)
|
||||||
}
|
}
|
||||||
|
|
||||||
viewHolder.itemView.setOnTouchListener { _, _ -> purchased }
|
viewHolder.itemView.isEnabled = !purchased
|
||||||
viewHolder.itemView.setOnClickListener { donationsDialog.donate(i) }
|
viewHolder.itemView.setOnClickListener { donationsDialog.donate(i) }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -32,6 +32,7 @@ import androidx.core.content.getSystemService
|
||||||
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.accentColor
|
import code.name.monkey.retromusic.extensions.accentColor
|
||||||
|
import code.name.monkey.retromusic.extensions.rootView
|
||||||
import com.google.android.material.snackbar.Snackbar
|
import com.google.android.material.snackbar.Snackbar
|
||||||
|
|
||||||
abstract class AbsBaseActivity : AbsThemeActivity() {
|
abstract class AbsBaseActivity : AbsThemeActivity() {
|
||||||
|
@ -52,7 +53,7 @@ abstract class AbsBaseActivity : AbsThemeActivity() {
|
||||||
}
|
}
|
||||||
|
|
||||||
private val snackBarContainer: View
|
private val snackBarContainer: View
|
||||||
get() = window.decorView
|
get() = rootView
|
||||||
|
|
||||||
override fun onCreate(savedInstanceState: Bundle?) {
|
override fun onCreate(savedInstanceState: Bundle?) {
|
||||||
super.onCreate(savedInstanceState)
|
super.onCreate(savedInstanceState)
|
||||||
|
@ -114,33 +115,19 @@ abstract class AbsBaseActivity : AbsThemeActivity() {
|
||||||
for (grantResult in grantResults) {
|
for (grantResult in grantResults) {
|
||||||
if (grantResult != PackageManager.PERMISSION_GRANTED) {
|
if (grantResult != PackageManager.PERMISSION_GRANTED) {
|
||||||
if (ActivityCompat.shouldShowRequestPermissionRationale(
|
if (ActivityCompat.shouldShowRequestPermissionRationale(
|
||||||
this@AbsBaseActivity, Manifest.permission.WRITE_EXTERNAL_STORAGE
|
this@AbsBaseActivity, Manifest.permission.READ_EXTERNAL_STORAGE,
|
||||||
|
) || ActivityCompat.shouldShowRequestPermissionRationale(
|
||||||
|
this@AbsBaseActivity, Manifest.permission.WRITE_EXTERNAL_STORAGE,
|
||||||
)
|
)
|
||||||
) {
|
) {
|
||||||
// User has deny from permission dialog
|
// User has deny from permission dialog
|
||||||
Snackbar.make(
|
Snackbar.make(
|
||||||
snackBarContainer,
|
snackBarContainer,
|
||||||
permissionDeniedMessage!!,
|
permissionDeniedMessage!!,
|
||||||
Snackbar.LENGTH_INDEFINITE
|
Snackbar.LENGTH_SHORT
|
||||||
)
|
)
|
||||||
.setAction(R.string.action_grant) { requestPermissions() }
|
.setAction(R.string.action_grant) { requestPermissions() }
|
||||||
.setActionTextColor(accentColor()).show()
|
.setActionTextColor(accentColor()).show()
|
||||||
} else if (ActivityCompat.shouldShowRequestPermissionRationale(
|
|
||||||
this@AbsBaseActivity, Manifest.permission.BLUETOOTH_CONNECT
|
|
||||||
)
|
|
||||||
) {
|
|
||||||
// User has deny from permission dialog
|
|
||||||
Snackbar.make(
|
|
||||||
snackBarContainer,
|
|
||||||
R.string.permission_bluetooth_denied,
|
|
||||||
Snackbar.LENGTH_INDEFINITE
|
|
||||||
)
|
|
||||||
.setAction(R.string.action_grant) {
|
|
||||||
ActivityCompat.requestPermissions(this,
|
|
||||||
arrayOf(Manifest.permission.BLUETOOTH_CONNECT),
|
|
||||||
PERMISSION_REQUEST)
|
|
||||||
}
|
|
||||||
.setActionTextColor(accentColor()).show()
|
|
||||||
} else {
|
} else {
|
||||||
// User has deny permission and checked never show permission dialog so you can redirect to Application settings page
|
// User has deny permission and checked never show permission dialog so you can redirect to Application settings page
|
||||||
Snackbar.make(
|
Snackbar.make(
|
||||||
|
@ -165,11 +152,34 @@ abstract class AbsBaseActivity : AbsThemeActivity() {
|
||||||
}
|
}
|
||||||
hadPermissions = true
|
hadPermissions = true
|
||||||
onHasPermissionsChanged(true)
|
onHasPermissionsChanged(true)
|
||||||
|
} else if (requestCode == BLUETOOTH_PERMISSION_REQUEST) {
|
||||||
|
for (grantResult in grantResults) {
|
||||||
|
if (grantResult != PackageManager.PERMISSION_GRANTED) {
|
||||||
|
if (ActivityCompat.shouldShowRequestPermissionRationale(
|
||||||
|
this@AbsBaseActivity, Manifest.permission.BLUETOOTH_CONNECT
|
||||||
|
)
|
||||||
|
) {
|
||||||
|
// User has deny from permission dialog
|
||||||
|
Snackbar.make(
|
||||||
|
snackBarContainer,
|
||||||
|
R.string.permission_bluetooth_denied,
|
||||||
|
Snackbar.LENGTH_SHORT
|
||||||
|
)
|
||||||
|
.setAction(R.string.action_grant) {
|
||||||
|
ActivityCompat.requestPermissions(this,
|
||||||
|
arrayOf(Manifest.permission.BLUETOOTH_CONNECT),
|
||||||
|
BLUETOOTH_PERMISSION_REQUEST)
|
||||||
|
}
|
||||||
|
.setActionTextColor(accentColor()).show()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
companion object {
|
companion object {
|
||||||
const val PERMISSION_REQUEST = 100
|
const val PERMISSION_REQUEST = 100
|
||||||
|
const val BLUETOOTH_PERMISSION_REQUEST = 101
|
||||||
}
|
}
|
||||||
|
|
||||||
// this lets keyboard close when clicked in background
|
// this lets keyboard close when clicked in background
|
||||||
|
|
|
@ -1,12 +1,10 @@
|
||||||
package code.name.monkey.retromusic.activities.base
|
package code.name.monkey.retromusic.activities.base
|
||||||
|
|
||||||
import android.os.Bundle
|
|
||||||
import code.name.monkey.retromusic.cast.RetroSessionManagerListener
|
import code.name.monkey.retromusic.cast.RetroSessionManagerListener
|
||||||
import code.name.monkey.retromusic.cast.RetroWebServer
|
import code.name.monkey.retromusic.cast.RetroWebServer
|
||||||
import code.name.monkey.retromusic.helper.MusicPlayerRemote
|
import code.name.monkey.retromusic.helper.MusicPlayerRemote
|
||||||
import com.google.android.gms.cast.framework.CastContext
|
import com.google.android.gms.cast.framework.CastContext
|
||||||
import com.google.android.gms.cast.framework.CastSession
|
import com.google.android.gms.cast.framework.CastSession
|
||||||
import com.google.android.gms.cast.framework.SessionManager
|
|
||||||
import com.google.android.gms.common.ConnectionResult
|
import com.google.android.gms.common.ConnectionResult
|
||||||
import com.google.android.gms.common.GoogleApiAvailability
|
import com.google.android.gms.common.GoogleApiAvailability
|
||||||
import org.koin.android.ext.android.inject
|
import org.koin.android.ext.android.inject
|
||||||
|
@ -15,10 +13,20 @@ import org.koin.android.ext.android.inject
|
||||||
abstract class AbsCastActivity : AbsSlidingMusicPanelActivity() {
|
abstract class AbsCastActivity : AbsSlidingMusicPanelActivity() {
|
||||||
|
|
||||||
private var mCastSession: CastSession? = null
|
private var mCastSession: CastSession? = null
|
||||||
private lateinit var sessionManager: SessionManager
|
private val sessionManager by lazy {
|
||||||
|
CastContext.getSharedInstance(this).sessionManager
|
||||||
|
}
|
||||||
|
|
||||||
private val webServer: RetroWebServer by inject()
|
private val webServer: RetroWebServer by inject()
|
||||||
|
|
||||||
private var playServicesAvailable: Boolean = false
|
private val playServicesAvailable: Boolean by lazy {
|
||||||
|
try {
|
||||||
|
GoogleApiAvailability
|
||||||
|
.getInstance().isGooglePlayServicesAvailable(this) == ConnectionResult.SUCCESS
|
||||||
|
} catch (e: Exception) {
|
||||||
|
false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private val sessionManagerListener by lazy {
|
private val sessionManagerListener by lazy {
|
||||||
object : RetroSessionManagerListener {
|
object : RetroSessionManagerListener {
|
||||||
|
@ -59,23 +67,6 @@ abstract class AbsCastActivity : AbsSlidingMusicPanelActivity() {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onCreate(savedInstanceState: Bundle?) {
|
|
||||||
super.onCreate(savedInstanceState)
|
|
||||||
playServicesAvailable = try {
|
|
||||||
GoogleApiAvailability
|
|
||||||
.getInstance().isGooglePlayServicesAvailable(this) == ConnectionResult.SUCCESS
|
|
||||||
} catch (e: Exception) {
|
|
||||||
false
|
|
||||||
}
|
|
||||||
if (playServicesAvailable) {
|
|
||||||
setupCast()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private fun setupCast() {
|
|
||||||
sessionManager = CastContext.getSharedInstance(this).sessionManager
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun onResume() {
|
override fun onResume() {
|
||||||
super.onResume()
|
super.onResume()
|
||||||
if (playServicesAvailable) {
|
if (playServicesAvailable) {
|
||||||
|
|
|
@ -16,6 +16,7 @@ package code.name.monkey.retromusic.activities.base
|
||||||
|
|
||||||
import android.animation.ArgbEvaluator
|
import android.animation.ArgbEvaluator
|
||||||
import android.animation.ValueAnimator
|
import android.animation.ValueAnimator
|
||||||
|
import android.content.Intent
|
||||||
import android.content.SharedPreferences
|
import android.content.SharedPreferences
|
||||||
import android.content.res.ColorStateList
|
import android.content.res.ColorStateList
|
||||||
import android.graphics.Color
|
import android.graphics.Color
|
||||||
|
@ -26,11 +27,14 @@ import android.view.ViewTreeObserver
|
||||||
import android.view.animation.PathInterpolator
|
import android.view.animation.PathInterpolator
|
||||||
import android.widget.FrameLayout
|
import android.widget.FrameLayout
|
||||||
import androidx.core.animation.doOnEnd
|
import androidx.core.animation.doOnEnd
|
||||||
import androidx.core.view.*
|
import androidx.core.view.WindowInsetsCompat
|
||||||
import androidx.fragment.app.Fragment
|
import androidx.core.view.isGone
|
||||||
|
import androidx.core.view.isVisible
|
||||||
|
import androidx.core.view.updateLayoutParams
|
||||||
import androidx.fragment.app.commit
|
import androidx.fragment.app.commit
|
||||||
import code.name.monkey.appthemehelper.util.VersionUtils
|
import code.name.monkey.appthemehelper.util.VersionUtils
|
||||||
import code.name.monkey.retromusic.*
|
import code.name.monkey.retromusic.*
|
||||||
|
import code.name.monkey.retromusic.activities.PermissionActivity
|
||||||
import code.name.monkey.retromusic.databinding.SlidingMusicPanelLayoutBinding
|
import code.name.monkey.retromusic.databinding.SlidingMusicPanelLayoutBinding
|
||||||
import code.name.monkey.retromusic.extensions.*
|
import code.name.monkey.retromusic.extensions.*
|
||||||
import code.name.monkey.retromusic.fragments.LibraryViewModel
|
import code.name.monkey.retromusic.fragments.LibraryViewModel
|
||||||
|
@ -76,13 +80,13 @@ abstract class AbsSlidingMusicPanelActivity : AbsMusicServiceActivity(),
|
||||||
private var windowInsets: WindowInsetsCompat? = null
|
private var windowInsets: WindowInsetsCompat? = null
|
||||||
protected val libraryViewModel by viewModel<LibraryViewModel>()
|
protected val libraryViewModel by viewModel<LibraryViewModel>()
|
||||||
private lateinit var bottomSheetBehavior: BottomSheetBehavior<FrameLayout>
|
private lateinit var bottomSheetBehavior: BottomSheetBehavior<FrameLayout>
|
||||||
private var playerFragment: AbsPlayerFragment? = null
|
private lateinit var playerFragment: AbsPlayerFragment
|
||||||
private var miniPlayerFragment: MiniPlayerFragment? = null
|
private var miniPlayerFragment: MiniPlayerFragment? = null
|
||||||
private var nowPlayingScreen: NowPlayingScreen? = null
|
private var nowPlayingScreen: NowPlayingScreen? = null
|
||||||
private var taskColor: Int = 0
|
private var taskColor: Int = 0
|
||||||
private var paletteColor: Int = Color.WHITE
|
private var paletteColor: Int = Color.WHITE
|
||||||
private var navigationBarColor = 0
|
private var navigationBarColor = 0
|
||||||
protected abstract fun createContentView(): SlidingMusicPanelLayoutBinding
|
|
||||||
private val panelState: Int
|
private val panelState: Int
|
||||||
get() = bottomSheetBehavior.state
|
get() = bottomSheetBehavior.state
|
||||||
private lateinit var binding: SlidingMusicPanelLayoutBinding
|
private lateinit var binding: SlidingMusicPanelLayoutBinding
|
||||||
|
@ -91,7 +95,8 @@ abstract class AbsSlidingMusicPanelActivity : AbsMusicServiceActivity(),
|
||||||
private var navigationBarColorAnimator: ValueAnimator? = null
|
private var navigationBarColorAnimator: ValueAnimator? = null
|
||||||
private val argbEvaluator: ArgbEvaluator = ArgbEvaluator()
|
private val argbEvaluator: ArgbEvaluator = ArgbEvaluator()
|
||||||
|
|
||||||
private val bottomSheetCallbackList = object : BottomSheetCallback() {
|
private val bottomSheetCallbackList by lazy {
|
||||||
|
object : BottomSheetCallback() {
|
||||||
|
|
||||||
override fun onSlide(bottomSheet: View, slideOffset: Float) {
|
override fun onSlide(bottomSheet: View, slideOffset: Float) {
|
||||||
setMiniPlayerAlphaProgress(slideOffset)
|
setMiniPlayerAlphaProgress(slideOffset)
|
||||||
|
@ -134,17 +139,20 @@ abstract class AbsSlidingMusicPanelActivity : AbsMusicServiceActivity(),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
fun getBottomSheetBehavior() = bottomSheetBehavior
|
fun getBottomSheetBehavior() = bottomSheetBehavior
|
||||||
|
|
||||||
override fun onCreate(savedInstanceState: Bundle?) {
|
override fun onCreate(savedInstanceState: Bundle?) {
|
||||||
super.onCreate(savedInstanceState)
|
super.onCreate(savedInstanceState)
|
||||||
binding = createContentView()
|
if (!hasPermissions()) {
|
||||||
|
startActivity(Intent(this, PermissionActivity::class.java))
|
||||||
|
finish()
|
||||||
|
}
|
||||||
|
binding = SlidingMusicPanelLayoutBinding.inflate(layoutInflater)
|
||||||
setContentView(binding.root)
|
setContentView(binding.root)
|
||||||
ViewCompat.setOnApplyWindowInsetsListener(
|
binding.root.setOnApplyWindowInsetsListener { _, insets ->
|
||||||
binding.root
|
windowInsets = WindowInsetsCompat.toWindowInsetsCompat(insets)
|
||||||
) { _, insets ->
|
|
||||||
windowInsets = insets
|
|
||||||
insets
|
insets
|
||||||
}
|
}
|
||||||
chooseFragmentForTheme()
|
chooseFragmentForTheme()
|
||||||
|
@ -197,8 +205,8 @@ abstract class AbsSlidingMusicPanelActivity : AbsMusicServiceActivity(),
|
||||||
chooseFragmentForTheme()
|
chooseFragmentForTheme()
|
||||||
onServiceConnected()
|
onServiceConnected()
|
||||||
}
|
}
|
||||||
SWIPE_ANYWHERE_NOW_PLAYING ->{
|
SWIPE_ANYWHERE_NOW_PLAYING -> {
|
||||||
playerFragment?.onResume()
|
playerFragment.onResume()
|
||||||
}
|
}
|
||||||
ADAPTIVE_COLOR_APP -> {
|
ADAPTIVE_COLOR_APP -> {
|
||||||
if (PreferenceUtil.nowPlayingScreen in listOf(Normal, Material, Flat)) {
|
if (PreferenceUtil.nowPlayingScreen in listOf(Normal, Material, Flat)) {
|
||||||
|
@ -225,10 +233,6 @@ abstract class AbsSlidingMusicPanelActivity : AbsMusicServiceActivity(),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
protected fun wrapSlidingMusicPanel(): SlidingMusicPanelLayoutBinding {
|
|
||||||
return SlidingMusicPanelLayoutBinding.inflate(layoutInflater)
|
|
||||||
}
|
|
||||||
|
|
||||||
fun collapsePanel() {
|
fun collapsePanel() {
|
||||||
bottomSheetBehavior.state = STATE_COLLAPSED
|
bottomSheetBehavior.state = STATE_COLLAPSED
|
||||||
}
|
}
|
||||||
|
@ -331,7 +335,7 @@ abstract class AbsSlidingMusicPanelActivity : AbsMusicServiceActivity(),
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun handleBackPress(): Boolean {
|
private fun handleBackPress(): Boolean {
|
||||||
if (bottomSheetBehavior.peekHeight != 0 && playerFragment!!.onBackPressed()) return true
|
if (bottomSheetBehavior.peekHeight != 0 && playerFragment.onBackPressed()) return true
|
||||||
if (panelState == STATE_EXPANDED) {
|
if (panelState == STATE_EXPANDED) {
|
||||||
collapsePanel()
|
collapsePanel()
|
||||||
return true
|
return true
|
||||||
|
@ -486,7 +490,7 @@ abstract class AbsSlidingMusicPanelActivity : AbsMusicServiceActivity(),
|
||||||
private fun chooseFragmentForTheme() {
|
private fun chooseFragmentForTheme() {
|
||||||
nowPlayingScreen = PreferenceUtil.nowPlayingScreen
|
nowPlayingScreen = PreferenceUtil.nowPlayingScreen
|
||||||
|
|
||||||
val fragment: Fragment = when (nowPlayingScreen) {
|
val fragment: AbsPlayerFragment = when (nowPlayingScreen) {
|
||||||
Blur -> BlurPlayerFragment()
|
Blur -> BlurPlayerFragment()
|
||||||
Adaptive -> AdaptiveFragment()
|
Adaptive -> AdaptiveFragment()
|
||||||
Normal -> PlayerFragment()
|
Normal -> PlayerFragment()
|
||||||
|
@ -510,8 +514,7 @@ abstract class AbsSlidingMusicPanelActivity : AbsMusicServiceActivity(),
|
||||||
supportFragmentManager.commit {
|
supportFragmentManager.commit {
|
||||||
replace(R.id.playerFragmentContainer, fragment)
|
replace(R.id.playerFragmentContainer, fragment)
|
||||||
}
|
}
|
||||||
supportFragmentManager.executePendingTransactions()
|
playerFragment = fragment
|
||||||
playerFragment = whichFragment<AbsPlayerFragment>(R.id.playerFragmentContainer)
|
|
||||||
miniPlayerFragment = whichFragment<MiniPlayerFragment>(R.id.miniPlayerFragment)
|
miniPlayerFragment = whichFragment<MiniPlayerFragment>(R.id.miniPlayerFragment)
|
||||||
miniPlayerFragment?.view?.setOnClickListener { expandPanel() }
|
miniPlayerFragment?.view?.setOnClickListener { expandPanel() }
|
||||||
}
|
}
|
||||||
|
|
|
@ -25,6 +25,7 @@ import code.name.monkey.appthemehelper.util.VersionUtils
|
||||||
import code.name.monkey.retromusic.BLUETOOTH_PLAYBACK
|
import code.name.monkey.retromusic.BLUETOOTH_PLAYBACK
|
||||||
import code.name.monkey.retromusic.EQUALIZER
|
import code.name.monkey.retromusic.EQUALIZER
|
||||||
import code.name.monkey.retromusic.R
|
import code.name.monkey.retromusic.R
|
||||||
|
import code.name.monkey.retromusic.activities.base.AbsBaseActivity.Companion.BLUETOOTH_PERMISSION_REQUEST
|
||||||
import code.name.monkey.retromusic.util.NavigationUtil
|
import code.name.monkey.retromusic.util.NavigationUtil
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -52,7 +53,7 @@ class AudioSettings : AbsSettingsFragment() {
|
||||||
BLUETOOTH_CONNECT) != PERMISSION_GRANTED
|
BLUETOOTH_CONNECT) != PERMISSION_GRANTED
|
||||||
) {
|
) {
|
||||||
ActivityCompat.requestPermissions(requireActivity(), arrayOf(
|
ActivityCompat.requestPermissions(requireActivity(), arrayOf(
|
||||||
BLUETOOTH_CONNECT), 100)
|
BLUETOOTH_CONNECT), BLUETOOTH_PERMISSION_REQUEST)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return@setOnPreferenceChangeListener true
|
return@setOnPreferenceChangeListener true
|
||||||
|
|
|
@ -28,10 +28,11 @@ import dev.chrisbanes.insetter.applyInsetter
|
||||||
class BottomNavigationBarTinted @JvmOverloads constructor(
|
class BottomNavigationBarTinted @JvmOverloads constructor(
|
||||||
context: Context,
|
context: Context,
|
||||||
attrs: AttributeSet? = null,
|
attrs: AttributeSet? = null,
|
||||||
defStyleAttr: Int = 0
|
defStyleAttr: Int = 0,
|
||||||
) : BottomNavigationView(context, attrs, defStyleAttr) {
|
) : BottomNavigationView(context, attrs, defStyleAttr) {
|
||||||
|
|
||||||
init {
|
init {
|
||||||
|
if (!isInEditMode) {
|
||||||
// If we are in Immersive mode we have to just set empty OnApplyWindowInsetsListener as
|
// If we are in Immersive mode we have to just set empty OnApplyWindowInsetsListener as
|
||||||
// bottom, start, and end padding is always applied (with the help of OnApplyWindowInsetsListener) to
|
// bottom, start, and end padding is always applied (with the help of OnApplyWindowInsetsListener) to
|
||||||
// BottomNavigationView to dodge the system navigation bar (so we basically clear that listener).
|
// BottomNavigationView to dodge the system navigation bar (so we basically clear that listener).
|
||||||
|
@ -67,6 +68,7 @@ class BottomNavigationBarTinted @JvmOverloads constructor(
|
||||||
itemActiveIndicatorColor = ColorStateList.valueOf(accentColor.addAlpha(0.12F))
|
itemActiveIndicatorColor = ColorStateList.valueOf(accentColor.addAlpha(0.12F))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fun Int.addAlpha(alpha: Float): Int {
|
fun Int.addAlpha(alpha: Float): Int {
|
||||||
|
|
|
@ -12,7 +12,7 @@ class InsetsConstraintLayout @JvmOverloads constructor(
|
||||||
defStyleAttr: Int = 0
|
defStyleAttr: Int = 0
|
||||||
) : ConstraintLayout(context, attrs, defStyleAttr) {
|
) : ConstraintLayout(context, attrs, defStyleAttr) {
|
||||||
init {
|
init {
|
||||||
if (!RetroUtil.isLandscape)
|
if (!isInEditMode && !RetroUtil.isLandscape)
|
||||||
drawAboveSystemBarsWithPadding()
|
drawAboveSystemBarsWithPadding()
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -25,7 +25,8 @@
|
||||||
app:behavior_peekHeight="0dp"
|
app:behavior_peekHeight="0dp"
|
||||||
app:enableEdgeToEdge="true"
|
app:enableEdgeToEdge="true"
|
||||||
app:gestureInsetBottomIgnored="true"
|
app:gestureInsetBottomIgnored="true"
|
||||||
app:layout_behavior="com.google.android.material.bottomsheet.BottomSheetBehavior">
|
app:layout_behavior="com.google.android.material.bottomsheet.BottomSheetBehavior"
|
||||||
|
tools:visibility="invisible">
|
||||||
|
|
||||||
<FrameLayout
|
<FrameLayout
|
||||||
android:id="@+id/playerFragmentContainer"
|
android:id="@+id/playerFragmentContainer"
|
||||||
|
@ -47,7 +48,6 @@
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:layout_gravity="bottom"
|
android:layout_gravity="bottom"
|
||||||
android:elevation="0dp"
|
|
||||||
android:minHeight="@dimen/bottom_nav_height"
|
android:minHeight="@dimen/bottom_nav_height"
|
||||||
app:itemHorizontalTranslationEnabled="false"
|
app:itemHorizontalTranslationEnabled="false"
|
||||||
app:itemPaddingBottom="8dp"
|
app:itemPaddingBottom="8dp"
|
||||||
|
|
|
@ -79,12 +79,6 @@
|
||||||
android:id="@+id/settings_fragment"
|
android:id="@+id/settings_fragment"
|
||||||
android:name="code.name.monkey.retromusic.fragments.settings.SettingsFragment" />
|
android:name="code.name.monkey.retromusic.fragments.settings.SettingsFragment" />
|
||||||
|
|
||||||
<activity
|
|
||||||
android:id="@+id/permissionFragment"
|
|
||||||
android:name="code.name.monkey.retromusic.activities.PermissionActivity"
|
|
||||||
android:label="PermissionFragment"
|
|
||||||
tools:layout="@layout/activity_permission" />
|
|
||||||
|
|
||||||
<fragment
|
<fragment
|
||||||
android:id="@+id/action_album"
|
android:id="@+id/action_album"
|
||||||
android:name="code.name.monkey.retromusic.fragments.albums.AlbumsFragment"
|
android:name="code.name.monkey.retromusic.fragments.albums.AlbumsFragment"
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue