Merge pull request #1204 from prathameshmm02/dev

Bug fixes
This commit is contained in:
Daksh P. Jain 2021-12-28 16:21:43 +05:30 committed by GitHub
commit 017b14c383
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
51 changed files with 224 additions and 170 deletions

View file

@ -14,8 +14,8 @@ android {
vectorDrawables.useSupportLibrary = true vectorDrawables.useSupportLibrary = true
applicationId "code.name.monkey.retromusic" applicationId "code.name.monkey.retromusic"
versionCode 10551 versionCode 10555
versionName '5.5.0' versionName '5.6.1'
buildConfigField("String", "GOOGLE_PLAY_LICENSING_KEY", "\"${getProperty(getProperties('../public.properties'), 'GOOGLE_PLAY_LICENSE_KEY')}\"") buildConfigField("String", "GOOGLE_PLAY_LICENSING_KEY", "\"${getProperty(getProperties('../public.properties'), 'GOOGLE_PLAY_LICENSE_KEY')}\"")
} }
@ -137,7 +137,7 @@ dependencies {
implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk8:$kotlin_version" implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk8:$kotlin_version"
def kotlin_coroutines_version = '1.6.0-RC3' def kotlin_coroutines_version = '1.6.0'
implementation "org.jetbrains.kotlinx:kotlinx-coroutines-core:$kotlin_coroutines_version" implementation "org.jetbrains.kotlinx:kotlinx-coroutines-core:$kotlin_coroutines_version"
implementation "org.jetbrains.kotlinx:kotlinx-coroutines-android:$kotlin_coroutines_version" implementation "org.jetbrains.kotlinx:kotlinx-coroutines-android:$kotlin_coroutines_version"

View file

@ -34,11 +34,16 @@
# Glide # Glide
-keep public class * implements com.bumptech.glide.module.GlideModule -keep public class * implements com.bumptech.glide.module.GlideModule
-keep public class * extends com.bumptech.glide.module.AppGlideModule -keep class * extends com.bumptech.glide.module.AppGlideModule {
<init>(...);
}
-keep public enum com.bumptech.glide.load.ImageHeaderParser$** { -keep public enum com.bumptech.glide.load.ImageHeaderParser$** {
**[] $VALUES; **[] $VALUES;
public *; public *;
} }
-keep class com.bumptech.glide.load.data.ParcelFileDescriptorRewinder$InternalRewinder {
*** rewind();
}
# OkHttp # OkHttp
-keepattributes Signature -keepattributes Signature

View file

@ -63,8 +63,22 @@
<body> <body>
<div> <div>
<h5>December 24, 2021</h5> <h5>December 28, 2021</h5>
<h2>v5.5.0<span class="tag"><i>Beta</i></span></h2> <h2>v5.6.1<span class="tag"><i>Beta</i></span></h2>
<h3>Fixed</h3>
<ul>
<li>Fixed artist covers not updating and showing album cover images.</li>
<li>Fixed FAB's not visible (Shuffle, Save, etc.)</li>
<li>Fixed a crash when a Song is deleted in Artist Details</li>
<li>Fixed Snowfall effect</li>
<li>Fixed empty notification when queue is cleared</li>
<li>Fixed Fit theme button colors</li>
<li>Show Dismiss button in Notification only on A12</li>
</ul>
</div>
<div>
<h5>December 25, 2021</h5>
<h2>v5.6.0<span class="tag"><i>Beta</i></span></h2>
<h3>What's New</h3> <h3>What's New</h3>
<ul> <ul>
<li>Added Artwork editing for songs</li> <li>Added Artwork editing for songs</li>

Binary file not shown.

Before

Width:  |  Height:  |  Size: 18 KiB

After

Width:  |  Height:  |  Size: 17 KiB

Before After
Before After

View file

@ -25,7 +25,10 @@ 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.ViewCompat
import androidx.core.view.WindowInsetsCompat
import androidx.core.view.isGone
import androidx.core.view.isVisible
import androidx.fragment.app.Fragment import androidx.fragment.app.Fragment
import androidx.fragment.app.commit import androidx.fragment.app.commit
import code.name.monkey.appthemehelper.util.ColorUtil import code.name.monkey.appthemehelper.util.ColorUtil
@ -143,8 +146,11 @@ abstract class AbsSlidingMusicPanelActivity : AbsMusicServiceActivity() {
setupSlidingUpPanel() setupSlidingUpPanel()
setupBottomSheet() setupBottomSheet()
updateColor() updateColor()
binding.slidingPanel.backgroundTintList = ColorStateList.valueOf(darkAccentColor()) if (!PreferenceUtil.materialYou) {
bottomNavigationView.backgroundTintList = ColorStateList.valueOf(darkAccentColor()) binding.slidingPanel.backgroundTintList = ColorStateList.valueOf(darkAccentColor())
bottomNavigationView.backgroundTintList = ColorStateList.valueOf(darkAccentColor())
}
navigationBarColor = surfaceColor() navigationBarColor = surfaceColor()
} }
@ -395,12 +401,12 @@ abstract class AbsSlidingMusicPanelActivity : AbsMusicServiceActivity() {
bottomSheetBehavior.peekHeight = -windowInsets.safeGetBottomInsets() bottomSheetBehavior.peekHeight = -windowInsets.safeGetBottomInsets()
bottomSheetBehavior.state = STATE_COLLAPSED bottomSheetBehavior.state = STATE_COLLAPSED
libraryViewModel.setFabMargin(if (isBottomNavVisible) dip(R.dimen.bottom_nav_height) else 0) libraryViewModel.setFabMargin(if (isBottomNavVisible) dip(R.dimen.bottom_nav_height) else 0)
ViewCompat.setElevation(binding.slidingPanel, 0f) binding.slidingPanel.elevation = 0F
ViewCompat.setElevation(binding.bottomNavigationView, 10f) binding.bottomNavigationView.elevation = 10F
} else { } else {
if (MusicPlayerRemote.playingQueue.isNotEmpty()) { if (MusicPlayerRemote.playingQueue.isNotEmpty()) {
ViewCompat.setElevation(binding.slidingPanel, 10f) binding.slidingPanel.elevation = 0F
ViewCompat.setElevation(binding.bottomNavigationView, 10f) binding.bottomNavigationView.elevation = 10F
if (isBottomNavVisible) { if (isBottomNavVisible) {
println("List") println("List")
if (animate) { if (animate) {

View file

@ -24,6 +24,7 @@ import androidx.fragment.app.Fragment
import androidx.fragment.app.FragmentManager import androidx.fragment.app.FragmentManager
import androidx.lifecycle.lifecycleScope import androidx.lifecycle.lifecycleScope
import code.name.monkey.retromusic.R import code.name.monkey.retromusic.R
import code.name.monkey.retromusic.activities.MainActivity
import code.name.monkey.retromusic.fragments.AlbumCoverStyle import code.name.monkey.retromusic.fragments.AlbumCoverStyle
import code.name.monkey.retromusic.fragments.NowPlayingScreen.* import code.name.monkey.retromusic.fragments.NowPlayingScreen.*
import code.name.monkey.retromusic.fragments.base.goToLyrics import code.name.monkey.retromusic.fragments.base.goToLyrics
@ -35,6 +36,7 @@ import code.name.monkey.retromusic.model.Song
import code.name.monkey.retromusic.util.MusicUtil import code.name.monkey.retromusic.util.MusicUtil
import code.name.monkey.retromusic.util.PreferenceUtil import code.name.monkey.retromusic.util.PreferenceUtil
import code.name.monkey.retromusic.util.color.MediaNotificationProcessor import code.name.monkey.retromusic.util.color.MediaNotificationProcessor
import com.google.android.material.bottomsheet.BottomSheetBehavior.STATE_EXPANDED
import com.google.android.material.dialog.MaterialAlertDialogBuilder import com.google.android.material.dialog.MaterialAlertDialogBuilder
import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.launch import kotlinx.coroutines.launch
@ -89,6 +91,7 @@ class AlbumCoverPagerAdapter(
private lateinit var song: Song private lateinit var song: Song
private var colorReceiver: ColorReceiver? = null private var colorReceiver: ColorReceiver? = null
private var request: Int = 0 private var request: Int = 0
private val mainActivity get() = activity as MainActivity
override fun onCreate(savedInstanceState: Bundle?) { override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState) super.onCreate(savedInstanceState)
@ -105,6 +108,11 @@ class AlbumCoverPagerAdapter(
val view = inflater.inflate(getLayoutWithPlayerTheme(), container, false) val view = inflater.inflate(getLayoutWithPlayerTheme(), container, false)
ViewCompat.setTransitionName(view, "lyrics") ViewCompat.setTransitionName(view, "lyrics")
albumCover = view.findViewById(R.id.player_image) albumCover = view.findViewById(R.id.player_image)
view.setOnClickListener {
if (mainActivity.getBottomSheetBehavior().state == STATE_EXPANDED) {
showLyricsDialog()
}
}
return view return view
} }
@ -140,7 +148,6 @@ class AlbumCoverPagerAdapter(
AlbumCoverStyle.Flat -> R.layout.fragment_album_flat_cover AlbumCoverStyle.Flat -> R.layout.fragment_album_flat_cover
AlbumCoverStyle.Circle -> R.layout.fragment_album_circle_cover AlbumCoverStyle.Circle -> R.layout.fragment_album_circle_cover
AlbumCoverStyle.Card -> R.layout.fragment_album_card_cover AlbumCoverStyle.Card -> R.layout.fragment_album_card_cover
AlbumCoverStyle.Material -> R.layout.fragment_album_material_cover
AlbumCoverStyle.Full -> R.layout.fragment_album_full_cover AlbumCoverStyle.Full -> R.layout.fragment_album_full_cover
AlbumCoverStyle.FullCard -> R.layout.fragment_album_full_card_cover AlbumCoverStyle.FullCard -> R.layout.fragment_album_full_card_cover
} }

View file

@ -77,6 +77,10 @@ fun Context.colorControlNormal() = resolveColor(android.R.attr.colorControlNorma
fun Fragment.colorControlNormal() = resolveColor(android.R.attr.colorControlNormal) fun Fragment.colorControlNormal() = resolveColor(android.R.attr.colorControlNormal)
fun Context.colorBackground() = resolveColor(android.R.attr.colorBackground)
fun Fragment.colorBackground() = resolveColor(android.R.attr.colorBackground)
fun Context.textColorPrimary() = resolveColor(android.R.attr.textColorPrimary) fun Context.textColorPrimary() = resolveColor(android.R.attr.textColorPrimary)
fun Fragment.textColorPrimary() = resolveColor(android.R.attr.textColorPrimary) fun Fragment.textColorPrimary() = resolveColor(android.R.attr.textColorPrimary)
@ -244,9 +248,14 @@ fun Context.getColorCompat(@ColorRes colorRes: Int): Int {
@ColorInt @ColorInt
fun Context.darkAccentColor(): Int { fun Context.darkAccentColor(): Int {
val colorSurfaceVariant = if (surfaceColor().isColorLight) {
surfaceColor()
} else {
surfaceColor().lighterColor
}
return ColorUtils.blendARGB( return ColorUtils.blendARGB(
accentColor(), accentColor(),
surfaceColor(), colorSurfaceVariant,
if (surfaceColor().isColorLight) 0.96f else 0.975f if (surfaceColor().isColorLight) 0.96f else 0.975f
) )
} }
@ -262,3 +271,9 @@ fun Context.darkAccentColorVariant(): Int {
inline val @receiver:ColorInt Int.isColorLight inline val @receiver:ColorInt Int.isColorLight
get() = ColorUtil.isColorLight(this) get() = ColorUtil.isColorLight(this)
inline val @receiver:ColorInt Int.lighterColor
get() = ColorUtil.lightenColor(this)
inline val @receiver:ColorInt Int.darkerColor
get() = ColorUtil.darkenColor(this)

View file

@ -2,11 +2,12 @@ package code.name.monkey.retromusic.extensions
import androidx.core.view.WindowInsetsCompat import androidx.core.view.WindowInsetsCompat
import code.name.monkey.retromusic.util.PreferenceUtil import code.name.monkey.retromusic.util.PreferenceUtil
import code.name.monkey.retromusic.util.RetroUtil
fun WindowInsetsCompat?.safeGetBottomInsets(): Int { fun WindowInsetsCompat?.safeGetBottomInsets(): Int {
return if (PreferenceUtil.isFullScreenMode) { return if (PreferenceUtil.isFullScreenMode) {
return 0 return 0
} else { } else {
this?.getInsets(WindowInsetsCompat.Type.systemBars())?.bottom ?: 0 this?.getInsets(WindowInsetsCompat.Type.systemBars())?.bottom ?: RetroUtil.getNavigationBarHeight()
} }
} }

View file

@ -23,11 +23,10 @@ enum class AlbumCoverStyle(
@DrawableRes val drawableResId: Int, @DrawableRes val drawableResId: Int,
val id: Int val id: Int
) { ) {
Card(R.string.card, R.drawable.np_blur_card, 4), Card(R.string.card, R.drawable.np_blur_card, 3),
Circle(R.string.circular, R.drawable.np_circle, 2), Circle(R.string.circular, R.drawable.np_circle, 2),
Flat(R.string.flat, R.drawable.np_flat, 1), Flat(R.string.flat, R.drawable.np_flat, 1),
FullCard(R.string.full_card, R.drawable.np_adaptive, 6), FullCard(R.string.full_card, R.drawable.np_adaptive, 5),
Full(R.string.full, R.drawable.np_full, 5), Full(R.string.full, R.drawable.np_full, 4),
Material(R.string.material, R.drawable.np_material, 3),
Normal(R.string.normal, R.drawable.np_normal, 0), Normal(R.string.normal, R.drawable.np_normal, 0),
} }

View file

@ -206,6 +206,7 @@ class AlbumDetailsFragment : AbsMainActivityFragment(R.layout.fragment_album_det
private fun showAlbum(album: Album) { private fun showAlbum(album: Album) {
if (album.songs.isEmpty()) { if (album.songs.isEmpty()) {
findNavController().navigateUp()
return return
} }
this.album = album this.album = album

View file

@ -141,6 +141,10 @@ abstract class AbsArtistDetailsFragment : AbsMainActivityFragment(R.layout.fragm
} }
private fun showArtist(artist: Artist) { private fun showArtist(artist: Artist) {
if (artist.songCount == 0) {
findNavController().navigateUp()
return
}
this.artist = artist this.artist = artist
loadArtistImage(artist) loadArtistImage(artist)
if (RetroUtil.isAllowedToDownloadMetadata(requireContext())) { if (RetroUtil.isAllowedToDownloadMetadata(requireContext())) {

View file

@ -35,6 +35,7 @@ import code.name.monkey.retromusic.extensions.surfaceColor
import code.name.monkey.retromusic.fragments.NowPlayingScreen.* import code.name.monkey.retromusic.fragments.NowPlayingScreen.*
import code.name.monkey.retromusic.fragments.base.AbsMusicServiceFragment import code.name.monkey.retromusic.fragments.base.AbsMusicServiceFragment
import code.name.monkey.retromusic.fragments.base.AbsPlayerFragment import code.name.monkey.retromusic.fragments.base.AbsPlayerFragment
import code.name.monkey.retromusic.fragments.base.goToLyrics
import code.name.monkey.retromusic.helper.MusicPlayerRemote import code.name.monkey.retromusic.helper.MusicPlayerRemote
import code.name.monkey.retromusic.helper.MusicProgressViewUpdateHelper import code.name.monkey.retromusic.helper.MusicProgressViewUpdateHelper
import code.name.monkey.retromusic.lyrics.CoverLrcView import code.name.monkey.retromusic.lyrics.CoverLrcView
@ -141,6 +142,9 @@ class PlayerAlbumCoverFragment : AbsMusicServiceFragment(R.layout.fragment_playe
MusicPlayerRemote.resumePlaying() MusicPlayerRemote.resumePlaying()
true true
} }
setOnClickListener {
goToLyrics(requireActivity())
}
setOnFlingXListener { velocityX -> setOnFlingXListener { velocityX ->
when { when {
velocityX < 0 -> { velocityX < 0 -> {

View file

@ -128,7 +128,7 @@ class FitPlaybackControlsFragment :
} }
override fun setColor(color: MediaNotificationProcessor) { override fun setColor(color: MediaNotificationProcessor) {
if (ColorUtil.isColorLight(colorControlNormal())) { if (ColorUtil.isColorLight(colorBackground())) {
lastPlaybackControlsColor = lastPlaybackControlsColor =
MaterialValueHelper.getSecondaryTextColor(requireContext(), true) MaterialValueHelper.getSecondaryTextColor(requireContext(), true)
lastDisabledPlaybackControlsColor = lastDisabledPlaybackControlsColor =

View file

@ -21,7 +21,6 @@ import android.graphics.drawable.GradientDrawable
import android.os.Bundle import android.os.Bundle
import android.view.View import android.view.View
import androidx.appcompat.widget.Toolbar import androidx.appcompat.widget.Toolbar
import androidx.core.view.isGone
import androidx.core.view.isVisible import androidx.core.view.isVisible
import androidx.preference.PreferenceManager import androidx.preference.PreferenceManager
import code.name.monkey.appthemehelper.util.ToolbarContentTintHelper import code.name.monkey.appthemehelper.util.ToolbarContentTintHelper
@ -126,13 +125,7 @@ class PlayerFragment : AbsPlayerFragment(R.layout.fragment_player),
_binding = FragmentPlayerBinding.bind(view) _binding = FragmentPlayerBinding.bind(view)
setUpSubFragments() setUpSubFragments()
setUpPlayerToolbar() setUpPlayerToolbar()
if (PreferenceUtil.isSnowFalling) { startOrStopSnow(PreferenceUtil.isSnowFalling)
binding.snowfallView.isVisible = true
binding.snowfallView.restartFalling()
} else {
binding.snowfallView.isVisible = false
binding.snowfallView.stopFalling()
}
PreferenceManager.getDefaultSharedPreferences(requireContext()) PreferenceManager.getDefaultSharedPreferences(requireContext())
.registerOnSharedPreferenceChangeListener(this) .registerOnSharedPreferenceChangeListener(this)
@ -168,7 +161,13 @@ class PlayerFragment : AbsPlayerFragment(R.layout.fragment_player),
} }
override fun onSharedPreferenceChanged(sharedPreferences: SharedPreferences?, key: String?) { override fun onSharedPreferenceChanged(sharedPreferences: SharedPreferences?, key: String?) {
if (key == SNOWFALL && PreferenceUtil.isSnowFalling) { if (key == SNOWFALL) {
startOrStopSnow(PreferenceUtil.isSnowFalling)
}
}
private fun startOrStopSnow(isSnowFalling: Boolean) {
if (isSnowFalling) {
binding.snowfallView.isVisible = true binding.snowfallView.isVisible = true
binding.snowfallView.restartFalling() binding.snowfallView.restartFalling()
} else { } else {

View file

@ -30,6 +30,7 @@ import com.bumptech.glide.load.engine.GlideException
import com.bumptech.glide.request.BaseRequestOptions import com.bumptech.glide.request.BaseRequestOptions
import com.bumptech.glide.request.RequestListener import com.bumptech.glide.request.RequestListener
import com.bumptech.glide.request.target.Target import com.bumptech.glide.request.target.Target
import com.bumptech.glide.request.target.Target.SIZE_ORIGINAL
import com.bumptech.glide.request.transition.DrawableCrossFadeFactory import com.bumptech.glide.request.transition.DrawableCrossFadeFactory
import com.bumptech.glide.request.transition.Transition import com.bumptech.glide.request.transition.Transition
import com.bumptech.glide.signature.MediaStoreSignature import com.bumptech.glide.signature.MediaStoreSignature
@ -107,6 +108,7 @@ object RetroGlideExtension {
.priority(Priority.LOW) .priority(Priority.LOW)
.error(DEFAULT_ARTIST_IMAGE) .error(DEFAULT_ARTIST_IMAGE)
.placeholder(DEFAULT_ARTIST_IMAGE) .placeholder(DEFAULT_ARTIST_IMAGE)
.override(SIZE_ORIGINAL, SIZE_ORIGINAL)
.signature(createSignature(artist)) .signature(createSignature(artist))
} }

View file

@ -90,11 +90,19 @@ class ArtistImageFetcher(
} }
private fun getFallbackAlbumImage(): InputStream? { private fun getFallbackAlbumImage(): InputStream? {
val imageUri = MusicUtil.getMediaStoreAlbumCoverUri(model.artist.safeGetFirstAlbum().id) model.artist.safeGetFirstAlbum().id.let { id->
return try { return if (id != -1L) {
context.contentResolver.openInputStream(imageUri) val imageUri = MusicUtil.getMediaStoreAlbumCoverUri(model.artist.safeGetFirstAlbum().id)
} catch (e: FileNotFoundException){ try {
null context.contentResolver.openInputStream(imageUri)
} catch (e: FileNotFoundException){
null
} catch (e: UnsupportedOperationException) {
null
}
} else {
null
}
} }
} }

View file

@ -14,6 +14,7 @@
*/ */
package code.name.monkey.retromusic.helper package code.name.monkey.retromusic.helper
import android.annotation.SuppressLint
import android.annotation.TargetApi import android.annotation.TargetApi
import android.app.Activity import android.app.Activity
import android.content.* import android.content.*
@ -328,6 +329,7 @@ object MusicPlayerRemote : KoinComponent {
return false return false
} }
@SuppressLint("StringFormatInvalid")
fun playNext(songs: List<Song>): Boolean { fun playNext(songs: List<Song>): Boolean {
if (musicService != null) { if (musicService != null) {
if (playingQueue.isNotEmpty()) { if (playingQueue.isNotEmpty()) {

View file

@ -169,6 +169,9 @@ class CoverLrcView @JvmOverloads constructor(
mCurrentLine = centerLine mCurrentLine = centerLine
invalidate() invalidate()
return true return true
} else {
callOnClick()
return true
} }
} }
return super.onSingleTapConfirmed(e) return super.onSingleTapConfirmed(e)

View file

@ -24,8 +24,6 @@ import static code.name.monkey.retromusic.ConstantsKt.COLORED_NOTIFICATION;
import static code.name.monkey.retromusic.ConstantsKt.CROSS_FADE_DURATION; import static code.name.monkey.retromusic.ConstantsKt.CROSS_FADE_DURATION;
import static code.name.monkey.retromusic.ConstantsKt.TOGGLE_HEADSET; import static code.name.monkey.retromusic.ConstantsKt.TOGGLE_HEADSET;
import static code.name.monkey.retromusic.service.AudioFader.startFadeAnimator; import static code.name.monkey.retromusic.service.AudioFader.startFadeAnimator;
import static code.name.monkey.retromusic.service.notification.PlayingNotification.NOTIFY_MODE_BACKGROUND;
import static code.name.monkey.retromusic.service.notification.PlayingNotification.NOTIFY_MODE_FOREGROUND;
import android.app.NotificationManager; import android.app.NotificationManager;
import android.app.PendingIntent; import android.app.PendingIntent;
@ -101,8 +99,8 @@ import code.name.monkey.retromusic.providers.HistoryStore;
import code.name.monkey.retromusic.providers.MusicPlaybackQueueStore; import code.name.monkey.retromusic.providers.MusicPlaybackQueueStore;
import code.name.monkey.retromusic.providers.SongPlayCountStore; import code.name.monkey.retromusic.providers.SongPlayCountStore;
import code.name.monkey.retromusic.service.notification.PlayingNotification; import code.name.monkey.retromusic.service.notification.PlayingNotification;
import code.name.monkey.retromusic.service.notification.PlayingNotificationImpl; import code.name.monkey.retromusic.service.notification.PlayingNotificationClassic;
import code.name.monkey.retromusic.service.notification.PlayingNotificationOreo; import code.name.monkey.retromusic.service.notification.PlayingNotificationImpl24;
import code.name.monkey.retromusic.service.playback.Playback; import code.name.monkey.retromusic.service.playback.Playback;
import code.name.monkey.retromusic.util.MusicUtil; import code.name.monkey.retromusic.util.MusicUtil;
import code.name.monkey.retromusic.util.PackageValidator; import code.name.monkey.retromusic.util.PackageValidator;
@ -371,7 +369,6 @@ public class MusicService extends MediaBrowserServiceCompat
private PowerManager.WakeLock wakeLock; private PowerManager.WakeLock wakeLock;
private NotificationManager notificationManager; private NotificationManager notificationManager;
private boolean isForeground = false; private boolean isForeground = false;
private int notifyMode = NOTIFY_MODE_BACKGROUND;
private static Bitmap copy(Bitmap bitmap) { private static Bitmap copy(Bitmap bitmap) {
Bitmap.Config config = bitmap.getConfig(); Bitmap.Config config = bitmap.getConfig();
@ -784,9 +781,9 @@ public class MusicService extends MediaBrowserServiceCompat
public void initNotification() { public void initNotification() {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N
&& !PreferenceUtil.INSTANCE.isClassicNotification()) { && !PreferenceUtil.INSTANCE.isClassicNotification()) {
playingNotification = PlayingNotificationImpl.Companion.from(this, notificationManager, mediaSession); playingNotification = PlayingNotificationImpl24.Companion.from(this, notificationManager, mediaSession);
} else { } else {
playingNotification = PlayingNotificationOreo.Companion.from(this, notificationManager); playingNotification = PlayingNotificationClassic.Companion.from(this, notificationManager);
} }
} }
@ -1460,34 +1457,38 @@ public class MusicService extends MediaBrowserServiceCompat
} }
private Unit startForegroundOrNotify() { private Unit startForegroundOrNotify() {
int newNotifyMode = isPlaying() ? NOTIFY_MODE_FOREGROUND : NOTIFY_MODE_BACKGROUND; if (playingNotification != null && getCurrentSong().getId() != -1) {
boolean isPlaying = isPlaying();
if (notifyMode != newNotifyMode && newNotifyMode == NOTIFY_MODE_BACKGROUND) { if ((isForeground != isPlaying) && !isPlaying) {
// This makes the notification dismissible // This makes the notification dismissible
// We can't call stopForeground(false) on A12 though, which may result in crashes // We can't call stopForeground(false) on A12 though, which may result in crashes
// when we call startForeground after that e.g. when Alarm goes off, // when we call startForeground after that e.g. when Alarm goes off,
if (Build.VERSION.SDK_INT < VERSION_CODES.S) stopForeground(false); if (Build.VERSION.SDK_INT < VERSION_CODES.S) {
} stopForeground(false);
isForeground = false;
if (newNotifyMode == NOTIFY_MODE_FOREGROUND) { }
// Specify that this is a media service, if supported.
if (VersionUtils.hasQ()) {
startForeground(
PlayingNotification.NOTIFICATION_ID, playingNotification.build(),
ServiceInfo.FOREGROUND_SERVICE_TYPE_MEDIA_PLAYBACK
);
} else {
startForeground(PlayingNotification.NOTIFICATION_ID, playingNotification.build());
} }
isForeground = true; if (!isForeground && isPlaying) {
} else { // Specify that this is a media service, if supported.
// If we are already in foreground just update the notification if (VersionUtils.hasQ()) {
notificationManager.notify( startForeground(
PlayingNotification.NOTIFICATION_ID, playingNotification.build() PlayingNotification.NOTIFICATION_ID, playingNotification.build(),
); ServiceInfo.FOREGROUND_SERVICE_TYPE_MEDIA_PLAYBACK
);
} else {
startForeground(PlayingNotification.NOTIFICATION_ID, playingNotification.build());
}
isForeground = true;
} else {
// If we are already in foreground just update the notification
notificationManager.notify(
PlayingNotification.NOTIFICATION_ID, playingNotification.build()
);
}
} }
notifyMode = newNotifyMode;
return Unit.INSTANCE; return Unit.INSTANCE;
} }

View file

@ -37,8 +37,6 @@ abstract class PlayingNotification(context: Context) :
const val NOTIFICATION_CONTROLS_SIZE_MULTIPLIER = 1.0f const val NOTIFICATION_CONTROLS_SIZE_MULTIPLIER = 1.0f
internal const val NOTIFICATION_CHANNEL_ID = "playing_notification" internal const val NOTIFICATION_CHANNEL_ID = "playing_notification"
const val NOTIFICATION_ID = 1 const val NOTIFICATION_ID = 1
const val NOTIFY_MODE_FOREGROUND = 1
const val NOTIFY_MODE_BACKGROUND = 0
@RequiresApi(26) @RequiresApi(26)

View file

@ -50,7 +50,7 @@ import com.bumptech.glide.request.transition.Transition
* @author Hemanth S (h4h13). * @author Hemanth S (h4h13).
*/ */
@SuppressLint("RestrictedApi") @SuppressLint("RestrictedApi")
class PlayingNotificationOreo( class PlayingNotificationClassic(
val context: Context val context: Context
) : PlayingNotification(context) { ) : PlayingNotification(context) {
@ -313,7 +313,7 @@ class PlayingNotificationOreo(
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
createNotificationChannel(context, notificationManager) createNotificationChannel(context, notificationManager)
} }
return PlayingNotificationOreo(context) return PlayingNotificationClassic(context)
} }
} }
} }

View file

@ -20,6 +20,7 @@ import android.app.PendingIntent
import android.content.ComponentName import android.content.ComponentName
import android.content.Context import android.content.Context
import android.content.Intent import android.content.Intent
import android.graphics.BitmapFactory
import android.graphics.Color import android.graphics.Color
import android.graphics.drawable.Drawable import android.graphics.drawable.Drawable
import android.os.Build import android.os.Build
@ -47,7 +48,7 @@ import kotlinx.coroutines.launch
import kotlinx.coroutines.withContext import kotlinx.coroutines.withContext
@SuppressLint("RestrictedApi") @SuppressLint("RestrictedApi")
class PlayingNotificationImpl( class PlayingNotificationImpl24(
val context: Context, val context: Context,
mediaSessionToken: MediaSessionCompat.Token mediaSessionToken: MediaSessionCompat.Token
) : PlayingNotification(context) { ) : PlayingNotification(context) {
@ -91,7 +92,7 @@ class PlayingNotificationImpl(
) )
val dismissAction = NotificationCompat.Action( val dismissAction = NotificationCompat.Action(
R.drawable.ic_close, R.drawable.ic_close,
context.getString(R.string.customactivityoncrash_error_activity_error_details_close), context.getString(R.string.action_cancel),
retrievePlaybackAction(ACTION_QUIT) retrievePlaybackAction(ACTION_QUIT)
) )
setSmallIcon(R.drawable.ic_notification) setSmallIcon(R.drawable.ic_notification)
@ -102,7 +103,9 @@ class PlayingNotificationImpl(
addAction(previousAction) addAction(previousAction)
addAction(playPauseAction) addAction(playPauseAction)
addAction(nextAction) addAction(nextAction)
addAction(dismissAction) if (VersionUtils.hasS()) {
addAction(dismissAction)
}
setStyle( setStyle(
MediaStyle() MediaStyle()
@ -152,12 +155,20 @@ class PlayingNotificationImpl(
override fun onLoadFailed(errorDrawable: Drawable?) { override fun onLoadFailed(errorDrawable: Drawable?) {
super.onLoadFailed(errorDrawable) super.onLoadFailed(errorDrawable)
setLargeIcon(null) setLargeIcon(
BitmapFactory.decodeResource(
context.resources,
R.drawable.default_audio_art
)
)
onUpdate() onUpdate()
} }
override fun onLoadCleared(placeholder: Drawable?) { override fun onLoadCleared(placeholder: Drawable?) {
setLargeIcon(null) setLargeIcon(BitmapFactory.decodeResource(
context.resources,
R.drawable.default_audio_art
))
onUpdate() onUpdate()
} }
}) })
@ -184,23 +195,8 @@ class PlayingNotificationImpl(
).build() ).build()
} }
private fun buildDismissAction(): NotificationCompat.Action {
return NotificationCompat.Action.Builder(
R.drawable.ic_close,
context.getString(R.string.customactivityoncrash_error_activity_error_details_close),
retrievePlaybackAction(ACTION_QUIT)
).build()
}
override fun setPlaying(isPlaying: Boolean) { override fun setPlaying(isPlaying: Boolean) {
mActions[2] = buildPlayAction(isPlaying) mActions[2] = buildPlayAction(isPlaying)
// Show dismiss action if we are not playing but only for A12+, as we can't call stopForeground(false)
// on A12 which would result in crashes when we call startForeground after that
if (!isPlaying) {
addAction(buildDismissAction())
} else {
if (mActions.size == 5) mActions.removeAt(4)
}
} }
override fun updateFavorite(song: Song, onUpdate: () -> Unit) { override fun updateFavorite(song: Song, onUpdate: () -> Unit) {
@ -234,7 +230,7 @@ class PlayingNotificationImpl(
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
createNotificationChannel(context, notificationManager) createNotificationChannel(context, notificationManager)
} }
return PlayingNotificationImpl(context, mediaSession.sessionToken) return PlayingNotificationImpl24(context, mediaSession.sessionToken)
} }
} }
} }

View file

@ -1,10 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="108dp"
android:height="108dp"
android:viewportWidth="108"
android:viewportHeight="108">
<path
android:fillColor="@color/dark_color"
android:pathData="M0,0h108v108h-108z" />
</vector>

View file

@ -1,10 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="108dp"
android:height="108dp"
android:viewportWidth="108"
android:viewportHeight="108">
<path
android:fillColor="@color/window_color"
android:pathData="M0,0h108v108h-108z" />
</vector>

View file

@ -0,0 +1,41 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="108dp"
android:height="108dp"
android:viewportWidth="108"
android:viewportHeight="108">
<group android:scaleX="2.25"
android:scaleY="2.25"
android:translateX="27"
android:translateY="27">
<path
android:pathData="M20.8636,10.3382L6.8454,2.318C5.4474,1.5183 3.7022,2.5177 3.7022,4.1177V20.1576C3.7022,21.7576 5.4499,22.7571 6.8479,21.9572L20.8636,13.9371C22.2623,13.1374 22.2623,11.1379 20.8636,10.3382Z"
android:fillColor="#0D0754"/>
<path
android:pathData="M20.1755,10.3463C18.1822,10.4054 17.9373,11.4297 15.2074,12.2823C13.5363,12.8044 12.142,12.703 10.3899,12.66C8.1888,12.6059 7.7856,12.0888 5.5706,12.0626C4.817,12.0539 4.216,12.0471 3.6998,12.0813V20.1576C3.6992,20.3933 3.7387,20.6275 3.8166,20.8502C4.6788,21.1744 5.7081,21.5242 6.939,21.9051L20.8637,13.9396C22.2403,13.1523 22.2604,11.2014 20.9266,10.3799C20.6774,10.3514 20.4264,10.3401 20.1755,10.3463Z"
android:strokeAlpha="0.0625"
android:fillColor="#ffffff"
android:fillAlpha="0.0625"/>
<path
android:pathData="M3.7022,11.9058V19.987C4.7838,20.6867 5.9221,21.2965 7.1054,21.8099L20.8636,13.937C21.2889,13.6946 21.6149,13.3121 21.7846,12.8561C21.9543,12.4001 21.957,11.8994 21.7924,11.4416C21.1315,11.787 20.3965,11.9703 19.6491,11.9761C17.6232,12.0191 17.0196,10.9854 14.7708,11.365C13.3296,11.6083 13.1197,12.1118 11.6534,12.2755C9.8617,12.4777 8.7533,11.8884 7.6662,11.6457C6.4026,11.365 4.9865,11.5094 3.7022,11.9058Z"
android:strokeAlpha="0.07"
android:fillColor="#ffffff"
android:fillAlpha="0.07"/>
<path
android:pathData="M3.7022,18.0311C4.4696,19.2821 5.6352,20.6113 7.0746,21.8273L20.7495,14.0048C20.1009,14.2198 19.4235,14.3371 18.7398,14.3527C15.4013,14.4449 14.7778,12.2941 10.7817,11.8946C8.5448,11.6712 5.3181,12.0035 3.6978,13.222L3.7022,18.0311Z"
android:strokeAlpha="0.045"
android:fillColor="#ffffff"
android:fillAlpha="0.045"/>
<path
android:pathData="M13.4087,11.2667C13.4087,10.6865 13.2932,10.1119 13.0692,9.5759C12.8451,9.0398 12.5168,8.5527 12.1027,8.1425C11.6886,7.7322 11.1971,7.4067 10.6561,7.1847C10.1152,6.9626 9.5354,6.8483 8.9498,6.8483H5.4393L10.4401,15.4299C11.3083,15.1248 12.0598,14.5607 12.5913,13.8154C13.123,13.0699 13.4085,12.1795 13.4087,11.2667Z"
android:fillColor="#00F8BC"/>
<path
android:pathData="M11.9919,18.096L10.4401,15.4299L5.4405,6.8483H3.7022V20.1581C3.7022,21.7581 5.4499,22.7576 6.8479,21.958L12.3918,18.7841L11.9919,18.096Z"
android:fillColor="#00D1F7"/>
<path
android:pathData="M3.7022,15.6851V20.1601C3.7022,21.7601 5.4499,22.7594 6.8479,21.9598L12.3918,18.7861L11.9919,18.096L10.4401,15.4299C9.9621,15.5986 9.4585,15.6849 8.9511,15.6851H3.7022Z"
android:fillColor="#4E75F3"/>
<path
android:pathData="M3.7022,6.8483V15.6851H8.9536C9.4608,15.6855 9.9645,15.5999 10.4426,15.4319L5.4405,6.8483H3.7022Z"
android:fillColor="#00D1F7"/>
</group>
</vector>

View file

@ -9,7 +9,6 @@
android:id="@+id/image" android:id="@+id/image"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_alignBottom="@+id/content"
android:layout_alignParentEnd="true"> android:layout_alignParentEnd="true">
<ImageView <ImageView
@ -60,9 +59,8 @@
<LinearLayout <LinearLayout
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="match_parent" android:layout_height="match_parent"
android:orientation="horizontal" android:layout_marginTop="16dp"
android:paddingStart="8dp" android:orientation="horizontal">
android:paddingEnd="0dp">
<ImageButton <ImageButton
android:id="@+id/action_prev" android:id="@+id/action_prev"

View file

@ -22,7 +22,8 @@
app:expandedTitleMarginBottom="24dp" app:expandedTitleMarginBottom="24dp"
app:expandedTitleMarginEnd="24dp" app:expandedTitleMarginEnd="24dp"
app:expandedTitleMarginStart="24dp" app:expandedTitleMarginStart="24dp"
app:expandedTitleTextAppearance="@style/TextAppearance.Material3.HeadlineLarge" app:expandedTitleTextAppearance="@style/TextViewHeadline4"
app:collapsedTitleTextAppearance="@style/TextViewHeadline6"
app:layout_scrollFlags="scroll|exitUntilCollapsed|snap|enterAlwaysCollapsed"> app:layout_scrollFlags="scroll|exitUntilCollapsed|snap|enterAlwaysCollapsed">
<com.google.android.material.appbar.MaterialToolbar <com.google.android.material.appbar.MaterialToolbar

View file

@ -8,9 +8,8 @@
<com.google.android.material.card.MaterialCardView <com.google.android.material.card.MaterialCardView
android:layout_width="0dp" android:layout_width="0dp"
android:layout_height="0dp" android:layout_height="0dp"
android:layout_margin="16dp"
app:cardCornerRadius="@dimen/m3_card_corner_radius" app:cardCornerRadius="@dimen/m3_card_corner_radius"
app:cardElevation="8dp"
app:cardUseCompatPadding="true"
app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintDimensionRatio="1:1" app:layout_constraintDimensionRatio="1:1"
app:layout_constraintEnd_toEndOf="parent" app:layout_constraintEnd_toEndOf="parent"

View file

@ -1,28 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent">
<com.google.android.material.card.MaterialCardView
android:layout_width="0dp"
android:layout_height="0dp"
android:layout_margin="16dp"
app:cardCornerRadius="@dimen/m3_card_corner_radius"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintDimensionRatio="1:1"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent">
<androidx.appcompat.widget.AppCompatImageView
android:id="@+id/player_image"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:scaleType="centerCrop"
tools:ignore="ContentDescription,UnusedAttribute"
tools:srcCompat="@tools:sample/backgrounds/scenic[8]" />
</com.google.android.material.card.MaterialCardView>
</androidx.constraintlayout.widget.ConstraintLayout>

View file

@ -9,7 +9,7 @@
android:orientation="vertical" android:orientation="vertical"
tools:ignore="MissingPrefix"> tools:ignore="MissingPrefix">
<RelativeLayout <LinearLayout
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="@dimen/progress_container_height" android:layout_height="@dimen/progress_container_height"
android:background="@color/twenty_percent_black_overlay"> android:background="@color/twenty_percent_black_overlay">
@ -18,21 +18,26 @@
android:id="@+id/songCurrentProgress" android:id="@+id/songCurrentProgress"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="match_parent" android:layout_height="match_parent"
android:layout_alignParentLeft="true" android:gravity="center_vertical|start"
android:gravity="center_vertical|left|end" android:paddingStart="8dp"
android:paddingLeft="8dp" android:paddingEnd="0dp"
android:singleLine="true" android:singleLine="true"
android:textColor="?colorOnSecondary" android:textColor="?colorOnSecondary"
android:textSize="12sp" android:textSize="12sp"
tools:ignore="RtlHardcoded,RtlSymmetry"
tools:text="@tools:sample/date/hhmmss" /> tools:text="@tools:sample/date/hhmmss" />
<androidx.appcompat.widget.AppCompatSeekBar
android:id="@+id/progressSlider"
android:layout_width="0dp"
style="@style/MusicProgressSlider"
android:layout_height="match_parent"
android:layout_weight="1"/>
<com.google.android.material.textview.MaterialTextView <com.google.android.material.textview.MaterialTextView
android:id="@+id/songTotalTime" android:id="@+id/songTotalTime"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="match_parent" android:layout_height="match_parent"
android:layout_alignParentRight="true" android:gravity="center_vertical|end"
android:gravity="center_vertical|right|end"
android:paddingRight="8dp" android:paddingRight="8dp"
android:singleLine="true" android:singleLine="true"
android:textColor="?colorOnSecondary" android:textColor="?colorOnSecondary"
@ -40,15 +45,7 @@
tools:ignore="RtlHardcoded,RtlSymmetry" tools:ignore="RtlHardcoded,RtlSymmetry"
tools:text="@tools:sample/date/hhmmss" /> tools:text="@tools:sample/date/hhmmss" />
<androidx.appcompat.widget.AppCompatSeekBar </LinearLayout>
android:id="@+id/progressSlider"
style="@style/MusicProgressSlider"
android:layout_height="match_parent"
android:layout_toLeftOf="@id/songTotalTime"
android:layout_toRightOf="@id/songCurrentProgress"
tools:ignore="RtlHardcoded,UnusedAttribute" />
</RelativeLayout>
<include <include
android:id="@+id/media_button" android:id="@+id/media_button"
@ -71,7 +68,6 @@
android:orientation="horizontal" android:orientation="horizontal"
tools:ignore="UnusedAttribute"> tools:ignore="UnusedAttribute">
<androidx.appcompat.widget.AppCompatImageView <androidx.appcompat.widget.AppCompatImageView
android:id="@+id/image" android:id="@+id/image"
android:layout_width="wrap_content" android:layout_width="wrap_content"

View file

@ -17,7 +17,6 @@
xmlns:tools="http://schemas.android.com/tools" xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:background="?attr/colorSurface"
android:clickable="true" android:clickable="true"
android:focusable="true" android:focusable="true"
android:orientation="vertical"> android:orientation="vertical">

View file

@ -8,7 +8,7 @@
android:layoutDirection="ltr" android:layoutDirection="ltr"
android:paddingStart="4dp" android:paddingStart="4dp"
android:paddingEnd="4dp" android:paddingEnd="4dp"
tools:ignore="ContentDescription,UnusedAttribute"> android:clipToPadding="false">
<androidx.appcompat.widget.AppCompatImageButton <androidx.appcompat.widget.AppCompatImageButton
android:id="@+id/repeatButton" android:id="@+id/repeatButton"

View file

@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android"> <adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
<background android:drawable="@color/ic_launcher_background"/> <background android:drawable="@color/ic_launcher_background"/>
<foreground android:drawable="@mipmap/ic_launcher_foreground"/> <foreground android:drawable="@drawable/ic_launcher_foreground"/>
</adaptive-icon> </adaptive-icon>

View file

@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android"> <adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
<background android:drawable="@color/ic_launcher_background"/> <background android:drawable="@color/ic_launcher_background"/>
<foreground android:drawable="@mipmap/ic_launcher_foreground"/> <foreground android:drawable="@drawable/ic_launcher_foreground"/>
</adaptive-icon> </adaptive-icon>

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.8 KiB

After

Width:  |  Height:  |  Size: 1.9 KiB

Before After
Before After

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.7 KiB

After

Width:  |  Height:  |  Size: 3.9 KiB

Before After
Before After

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.3 KiB

After

Width:  |  Height:  |  Size: 1.3 KiB

Before After
Before After

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.3 KiB

After

Width:  |  Height:  |  Size: 2.4 KiB

Before After
Before After

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.5 KiB

After

Width:  |  Height:  |  Size: 2.6 KiB

Before After
Before After

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.3 KiB

After

Width:  |  Height:  |  Size: 5.5 KiB

Before After
Before After

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.9 KiB

After

Width:  |  Height:  |  Size: 3.9 KiB

Before After
Before After

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 8.3 KiB

After

Width:  |  Height:  |  Size: 8.7 KiB

Before After
Before After

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.5 KiB

After

Width:  |  Height:  |  Size: 5.5 KiB

Before After
Before After

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 12 KiB

After

Width:  |  Height:  |  Size: 12 KiB

Before After
Before After

View file

@ -35,4 +35,6 @@
</item> </item>
<item name="popupMenuBackground">@drawable/popup_background</item> <item name="popupMenuBackground">@drawable/popup_background</item>
</style> </style>
<style name="mcab_theme" parent="@style/ThemeOverlay.MaterialComponents.Dark" />
</resources> </resources>

View file

@ -46,12 +46,13 @@
<item name="titleMarginStart">16dp</item> <item name="titleMarginStart">16dp</item>
</style> </style>
<style name="mcab_theme" parent="@style/ThemeOverlay.MaterialComponents.Dark.ActionBar"> <style name="mcab_theme" parent="@style/ThemeOverlay.MaterialComponents.Light">
<item name="android:actionOverflowButtonStyle">@style/Widget.ActionButton.Overflow</item> <item name="android:actionOverflowButtonStyle">@style/mcab_overflow_style</item>
</style> </style>
<style name="mcab_overflow_style"> <style name="mcab_overflow_style" parent="Widget.AppCompat.ActionButton.Overflow">
<item name="srcCompat">@drawable/ic_more_vert</item> <item name="srcCompat">@drawable/ic_more_vert</item>
<item name="android:tint">?colorSurface</item>
</style> </style>
<style name="ToolbarTextAppearanceNormal"> <style name="ToolbarTextAppearanceNormal">