This commit is contained in:
h4h13 2018-12-09 12:08:34 +05:30
parent a0d79d5751
commit acc7e31d57
37 changed files with 695 additions and 363 deletions

File diff suppressed because one or more lines are too long

View file

@ -13,12 +13,12 @@ android {
vectorDrawables.useSupportLibrary = true vectorDrawables.useSupportLibrary = true
applicationId "code.name.monkey.retromusic" applicationId "code.name.monkey.retromusic"
versionCode 255 versionCode 260
versionName '2.2.100' versionName '3.0.010'
multiDexEnabled true multiDexEnabled true
buildConfigField("String", "GOOGLE_PLAY_LICENSE_KEY", "\"${getProperty(getProperties('../public.properties'), 'GOOGLE_PLAY_LICENSE_KEY')}\"") buildConfigField("String", "GOOGLE_PLAY_LICENSING_KEY", "\"${getProperty(getProperties('../public.properties'), 'GOOGLE_PLAY_LICENSE_KEY')}\"")
} }
signingConfigs { signingConfigs {
release { release {
@ -149,7 +149,8 @@ dependencies {
implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version" implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
implementation 'org.eclipse.mylyn.github:org.eclipse.egit.github.core:2.1.5' implementation 'org.eclipse.mylyn.github:org.eclipse.egit.github.core:2.1.5'
implementation 'com.github.jetradarmobile:android-snowfall:1.2.0'
implementation 'com.github.javiersantos:PiracyChecker:1.2.4'
} }
repositories { repositories {
mavenCentral() mavenCentral()

View file

@ -105,14 +105,14 @@
<activity android:name=".ui.activities.SettingsActivity" /> <activity android:name=".ui.activities.SettingsActivity" />
<activity <activity
android:name=".ui.activities.SearchActivity" android:name=".ui.activities.SearchActivity"
android:windowSoftInputMode="stateVisible"/> android:windowSoftInputMode="stateVisible" />
<activity android:name=".ui.activities.LyricsActivity" /> <activity android:name=".ui.activities.LyricsActivity" />
<activity android:name=".ui.activities.UserInfoActivity" /> <activity android:name=".ui.activities.UserInfoActivity" />
<activity android:name=".ui.activities.SupportDevelopmentActivity" /> <activity android:name=".ui.activities.SupportDevelopmentActivity" />
<activity android:name=".ui.activities.GenreDetailsActivity" /> <activity android:name=".ui.activities.GenreDetailsActivity" />
<activity android:name=".ui.activities.LicenseActivity" /> <activity android:name=".ui.activities.LicenseActivity" />
<activity android:name=".ui.activities.ProVersionActivity" /> <activity android:name=".ui.activities.PurchaseActivity" />
<activity android:name=".ui.activities.EqualizerActivity" /> <activity android:name=".ui.activities.EqualizerActivity" />
<activity android:name=".ui.activities.ErrorHandlerActivity" /> <activity android:name=".ui.activities.ErrorHandlerActivity" />
<activity android:name=".ui.activities.WhatsNewActivity" /> <activity android:name=".ui.activities.WhatsNewActivity" />
@ -122,10 +122,13 @@
android:launchMode="singleInstance" android:launchMode="singleInstance"
android:screenOrientation="portrait" android:screenOrientation="portrait"
android:theme="@style/AppTheme.ExpandedCastController" /> android:theme="@style/AppTheme.ExpandedCastController" />
<activity android:name=".ui.activities.bugreport.BugReportActivity" />
<activity android:name=".ui.activities.LockScreenActivity" />
<service <service
android:name=".service.MusicService" android:name=".service.MusicService"
android:enabled="true" /> android:enabled="true" />
<service <service
android:name=".service.WearBrowserService" android:name=".service.WearBrowserService"
android:exported="true"> android:exported="true">
@ -134,27 +137,11 @@
</intent-filter> </intent-filter>
</service> </service>
<!-- <service --> <receiver android:name=".service.MediaButtonIntentReceiver">
<!-- android:name=".service.daydream.RetroMusicAlbums" --> <intent-filter>
<!-- android:exported="true" --> <action android:name="android.intent.action.MEDIA_BUTTON" />
<!-- android:label="Retro Music Albums" --> </intent-filter>
<!-- android:permission="android.permission.BIND_DREAM_SERVICE"> --> </receiver>
<!-- <intent-filter> -->
<!-- <action android:name="android.service.dreams.DreamService" /> -->
<!-- <category android:name="android.intent.category.DEFAULT" /> -->
<!-- </intent-filter> -->
<!-- </service> -->
<!-- Widgets -->
<!--
<receiver
android:name=".headset.HeadsetReceiver"
android:enabled="true"
android:exported="true">
<intent-filter>
<action android:name="android.intent.action.HEADSET_PLUG" />
</intent-filter>
</receiver>
-->
<meta-data <meta-data
@ -173,12 +160,6 @@
android:name="com.google.android.gms.cast.framework.OPTIONS_PROVIDER_CLASS_NAME" android:name="com.google.android.gms.cast.framework.OPTIONS_PROVIDER_CLASS_NAME"
android:value="code.name.monkey.retromusic.cast.CastOptionsProvider" /> android:value="code.name.monkey.retromusic.cast.CastOptionsProvider" />
<!--
<meta-data
android:name="com.google.android.gms.car.application"
android:resource="@xml/automotive_app_desc" />
-->
<provider <provider
android:name="androidx.core.content.FileProvider" android:name="androidx.core.content.FileProvider"
android:authorities="${applicationId}" android:authorities="${applicationId}"
@ -189,6 +170,73 @@
android:resource="@xml/provider_paths" /> android:resource="@xml/provider_paths" />
</provider> </provider>
</application> <receiver android:name=".appwidgets.BootReceiver">
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED" />
<action android:name="android.intent.action.QUICKBOOT_POWERON" />
</intent-filter>
</receiver>
<receiver
android:name=".appwidgets.AppWidgetBig"
android:exported="false"
android:label="@string/app_widget_big_name">
<intent-filter>
<action android:name="android.appwidget.action.APPWIDGET_UPDATE" />
</intent-filter>
<meta-data
android:name="android.appwidget.provider"
android:resource="@xml/app_widget_big_info" />
</receiver>
<receiver
android:name=".appwidgets.AppWidgetClassic"
android:exported="false"
android:label="@string/app_widget_classic_name">
<intent-filter>
<action android:name="android.appwidget.action.APPWIDGET_UPDATE" />
</intent-filter>
<meta-data
android:name="android.appwidget.provider"
android:resource="@xml/app_widget_classic_info" />
</receiver>
<receiver
android:name=".appwidgets.AppWidgetSmall"
android:exported="false"
android:label="@string/app_widget_small_name">
<intent-filter>
<action android:name="android.appwidget.action.APPWIDGET_UPDATE" />
</intent-filter>
<meta-data
android:name="android.appwidget.provider"
android:resource="@xml/app_widget_small_info" />
</receiver>
<receiver
android:name=".appwidgets.AppWidgetText"
android:exported="false"
android:label="@string/app_widget_text_name">
<intent-filter>
<action android:name="android.appwidget.action.APPWIDGET_UPDATE" />
</intent-filter>
<meta-data
android:name="android.appwidget.provider"
android:resource="@xml/app_widget_text" />
</receiver>
<receiver
android:name=".appwidgets.AppWidgetCard"
android:exported="false"
android:label="@string/app_widget_card_name">
<intent-filter>
<action android:name="android.appwidget.action.APPWIDGET_UPDATE" />
</intent-filter>
<meta-data
android:name="android.appwidget.provider"
android:resource="@xml/app_widget_card_info" />
</receiver>
</application>
</manifest> </manifest>

View file

@ -1 +1 @@
<html> <head> <style type="text/css"> * { word-wrap: break-word; } {style-placeholder} a { color: #{link-color}; } a:active { color: #{link-color-active}; } ul { list-style-position: outside; padding-left: 0; padding-right: 0; margin-left: 1em; } li { padding-top: 8px; } </style> </head> <body> <h3>Version 3.0.00</h3> <ul style="line-height:150%"> <li>Converted app to kotlin</li> <li>Added good old side navigation bar</li> <li>Added bug report for better tracking with milestones</li> <li></li> <li>Click new music mix to play songs</li> <li>Gradient image option for gird list</li> <li>Clear button for playing queue</li> <li>Click toolbar (Library) to open options</li> <li>Folder list back button</li> <li>New theme Fit</li> <li>On library click on toolbar for accessing main menu </li> <li>On home click on toolbar for accessing search </li> <li>BottomSheetDialogue is now adaptable to screens, background colour and text size consistency. </li> <li>Removed coloured navigation bar option to making app adapt the primary colour</li> <li>Swipe up gesture for now playing removed, replaced with "tap to open", To achieve transparent navigation bar for desired themes. </li> <li>Improved tablet UI and home screen by adding suggestions toggle banner issues.</li> <li>Improving lyrics page</li> </ul> <p style="line-height:150%"><a href="https://github.com/h4h13/RetroMusicPlayer/wiki/FAQ">FAQ's</a> </p> <p style="line-height:150%">*If you face any UI related issues you clear app data and cache, if its not working try to uninstall and install again. </p> </body> <html> <head> <style type="text/css"> * { word-wrap: break-word; } {style-placeholder} a { color: #{link-color}; } a:active { color: #{link-color-active}; } ul { list-style-position: outside; padding-left: 0; padding-right: 0; margin-left: 1em; } li { padding-top: 8px; } </style> </head> <body> <h3>Version 3.0.00</h3> <ul style="line-height:150%"> <li>Converted app to kotlin</li> <li>Now you can add plain text home screen widget</li> <li>Good old side navigation bar for options</li> Added good old side navigation bar</li> <li>Snow fall effect can be enable from other settings</li> <li>Click new music mix to play songs</li> <li>Gradient image option for gird list</li> <li>Clear button for playing queue</li> <li>Folder list back button</li> <li>New theme Fit</li> <li>On library click on toolbar for accessing main menu </li> <li>On home click on toolbar for accessing search </li> <li>BottomSheetDialogue is now adaptable to screens, background colour and text size consistency. </li> <li>Removed coloured navigation bar option to making app adapt the primary colour</li> <li>Swipe up gesture for now playing removed, replaced with "tap to open", To achieve transparent navigation bar for desired themes. </li> <li>Improved tablet UI and home screen by adding suggestions toggle banner issues.</li> <li>Improving lyrics page</li> </ul> <p style="line-height:150%"><a href="https://github.com/h4h13/RetroMusicPlayer/wiki/FAQ">FAQ's</a> </p> <p style="line-height:150%">*If you face any UI related issues you clear app data and cache, if its not working try to uninstall and install again. </p> </body>

View file

@ -1,6 +1,7 @@
package code.name.monkey.retromusic package code.name.monkey.retromusic
import android.content.Context import android.content.Context
import android.widget.Toast
import androidx.multidex.MultiDexApplication import androidx.multidex.MultiDexApplication
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
@ -32,12 +33,12 @@ class App : MultiDexApplication() {
// automatically restores purchases // automatically restores purchases
billingProcessor = BillingProcessor(this, BuildConfig.GOOGLE_PLAY_LICENSE_KEY, billingProcessor = BillingProcessor(this, BuildConfig.GOOGLE_PLAY_LICENSING_KEY,
object : BillingProcessor.IBillingHandler { object : BillingProcessor.IBillingHandler {
override fun onProductPurchased(productId: String, details: TransactionDetails?) {} override fun onProductPurchased(productId: String, details: TransactionDetails?) {}
override fun onPurchaseHistoryRestored() { override fun onPurchaseHistoryRestored() {
//Toast.makeText(App.this, R.string.restored_previous_purchase_please_restart, Toast.LENGTH_LONG).show(); Toast.makeText(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?) {}

View file

@ -35,9 +35,9 @@ class AppWidgetSmall : BaseAppWidget() {
appWidgetView.setViewVisibility(R.id.media_titles, View.INVISIBLE) appWidgetView.setViewVisibility(R.id.media_titles, View.INVISIBLE)
appWidgetView.setImageViewResource(R.id.image, R.drawable.default_album_art) appWidgetView.setImageViewResource(R.id.image, R.drawable.default_album_art)
appWidgetView.setImageViewBitmap(R.id.button_next, BaseAppWidget.Companion.createBitmap(RetroUtil.getTintedVectorDrawable(context, R.drawable.ic_skip_next_white_24dp, MaterialValueHelper.getSecondaryTextColor(context, true))!!, 1f)) appWidgetView.setImageViewBitmap(R.id.button_next, BaseAppWidget.createBitmap(RetroUtil.getTintedVectorDrawable(context, R.drawable.ic_skip_next_white_24dp, MaterialValueHelper.getSecondaryTextColor(context, true))!!, 1f))
appWidgetView.setImageViewBitmap(R.id.button_prev, BaseAppWidget.Companion.createBitmap(RetroUtil.getTintedVectorDrawable(context, R.drawable.ic_skip_previous_white_24dp, MaterialValueHelper.getSecondaryTextColor(context, true))!!, 1f)) appWidgetView.setImageViewBitmap(R.id.button_prev, BaseAppWidget.createBitmap(RetroUtil.getTintedVectorDrawable(context, R.drawable.ic_skip_previous_white_24dp, MaterialValueHelper.getSecondaryTextColor(context, true))!!, 1f))
appWidgetView.setImageViewBitmap(R.id.button_toggle_play_pause, BaseAppWidget.Companion.createBitmap(RetroUtil.getTintedVectorDrawable(context, R.drawable.ic_play_arrow_white_24dp, MaterialValueHelper.getSecondaryTextColor(context, true))!!, 1f)) appWidgetView.setImageViewBitmap(R.id.button_toggle_play_pause, BaseAppWidget.createBitmap(RetroUtil.getTintedVectorDrawable(context, R.drawable.ic_play_arrow_white_24dp, MaterialValueHelper.getSecondaryTextColor(context, true))!!, 1f))
linkButtons(context, appWidgetView) linkButtons(context, appWidgetView)
pushUpdate(context, appWidgetIds, appWidgetView) pushUpdate(context, appWidgetIds, appWidgetView)

View file

@ -0,0 +1,106 @@
package code.name.monkey.retromusic.appwidgets
import android.app.PendingIntent
import android.content.ComponentName
import android.content.Context
import android.content.Intent
import android.text.TextUtils
import android.view.View
import android.widget.RemoteViews
import androidx.core.content.ContextCompat
import code.name.monkey.appthemehelper.ThemeStore
import code.name.monkey.retromusic.App.Companion.context
import code.name.monkey.retromusic.Constants
import code.name.monkey.retromusic.R
import code.name.monkey.retromusic.appwidgets.base.BaseAppWidget
import code.name.monkey.retromusic.service.MusicService
import code.name.monkey.retromusic.ui.activities.MainActivity
import code.name.monkey.retromusic.util.RetroUtil
class AppWidgetText : BaseAppWidget() {
override fun defaultAppWidget(context: Context, appWidgetIds: IntArray) {
val appWidgetView = RemoteViews(context.packageName, R.layout.app_widget_text)
appWidgetView.setImageViewBitmap(R.id.button_next, BaseAppWidget.createBitmap(RetroUtil.getTintedVectorDrawable(context, R.drawable.ic_skip_next_white_24dp, ContextCompat.getColor(context, R.color.md_white_1000)), 1f))
appWidgetView.setImageViewBitmap(R.id.button_prev, BaseAppWidget.createBitmap(RetroUtil.getTintedVectorDrawable(context, R.drawable.ic_skip_previous_white_24dp, ContextCompat.getColor(context, R.color.md_white_1000)), 1f))
appWidgetView.setImageViewBitmap(R.id.button_toggle_play_pause, BaseAppWidget.createBitmap(RetroUtil.getTintedVectorDrawable(context, R.drawable.ic_play_arrow_white_24dp, ContextCompat.getColor(context, R.color.md_white_1000)), 1f))
appWidgetView.setTextColor(R.id.title, ContextCompat.getColor(context, R.color.md_white_1000))
appWidgetView.setTextColor(R.id.text, ContextCompat.getColor(context, R.color.md_white_1000))
linkButtons(context, appWidgetView)
pushUpdate(context, appWidgetIds, appWidgetView)
}
/**
* Link up various button actions using [PendingIntent].
*/
private fun linkButtons(context: Context, views: RemoteViews) {
val action = Intent(context, MainActivity::class.java).putExtra("expand", true)
var pendingIntent: PendingIntent
val serviceName = ComponentName(context, MusicService::class.java)
// Home
action.flags = Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_ACTIVITY_CLEAR_TOP
pendingIntent = PendingIntent.getActivity(context, 0, action, 0)
views.setOnClickPendingIntent(R.id.image, pendingIntent)
views.setOnClickPendingIntent(R.id.media_titles, pendingIntent)
// Previous track
pendingIntent = buildPendingIntent(context, Constants.ACTION_REWIND, serviceName)
views.setOnClickPendingIntent(R.id.button_prev, pendingIntent)
// Play and pause
pendingIntent = buildPendingIntent(context, Constants.ACTION_TOGGLE_PAUSE, serviceName)
views.setOnClickPendingIntent(R.id.button_toggle_play_pause, pendingIntent)
// Next track
pendingIntent = buildPendingIntent(context, Constants.ACTION_SKIP, serviceName)
views.setOnClickPendingIntent(R.id.button_next, pendingIntent)
}
override fun performUpdate(service: MusicService, appWidgetIds: IntArray?) {
val appWidgetView = RemoteViews(service.packageName, R.layout.app_widget_text)
val isPlaying = service.isPlaying
val song = service.currentSong
// Set the titles and artwork
if (TextUtils.isEmpty(song.title) && TextUtils.isEmpty(song.artistName)) {
appWidgetView.setViewVisibility(R.id.media_titles, View.INVISIBLE)
} else {
appWidgetView.setViewVisibility(R.id.media_titles, View.VISIBLE)
appWidgetView.setTextViewText(R.id.title, song.title)
appWidgetView.setTextViewText(R.id.text, song.artistName)
}
// Link actions buttons to intents
linkButtons(service, appWidgetView)
// Set correct drawable for pause state
val playPauseRes = if (isPlaying)
R.drawable.ic_pause_white_24dp
else
R.drawable.ic_play_arrow_white_24dp
appWidgetView.setImageViewBitmap(R.id.button_toggle_play_pause, BaseAppWidget.createBitmap(RetroUtil.getTintedVectorDrawable(context, playPauseRes, ContextCompat.getColor(context, R.color.md_white_1000)), 1f))
pushUpdate(service.applicationContext, appWidgetIds, appWidgetView)
}
companion object {
const val NAME: String = "app_widget_text"
private var mInstance: AppWidgetText? = null
val instance: AppWidgetText
@Synchronized get() {
if (mInstance == null) {
mInstance = AppWidgetText()
}
return mInstance!!
}
}
}

View file

@ -52,6 +52,7 @@ import code.name.monkey.retromusic.appwidgets.AppWidgetBig;
import code.name.monkey.retromusic.appwidgets.AppWidgetCard; import code.name.monkey.retromusic.appwidgets.AppWidgetCard;
import code.name.monkey.retromusic.appwidgets.AppWidgetClassic; import code.name.monkey.retromusic.appwidgets.AppWidgetClassic;
import code.name.monkey.retromusic.appwidgets.AppWidgetSmall; import code.name.monkey.retromusic.appwidgets.AppWidgetSmall;
import code.name.monkey.retromusic.appwidgets.AppWidgetText;
import code.name.monkey.retromusic.glide.BlurTransformation; import code.name.monkey.retromusic.glide.BlurTransformation;
import code.name.monkey.retromusic.glide.SongGlideRequest; import code.name.monkey.retromusic.glide.SongGlideRequest;
import code.name.monkey.retromusic.helper.ShuffleHelper; import code.name.monkey.retromusic.helper.ShuffleHelper;
@ -129,6 +130,7 @@ public class MusicService extends Service implements SharedPreferences.OnSharedP
private AppWidgetClassic appWidgetClassic = AppWidgetClassic.Companion.getInstance(); private AppWidgetClassic appWidgetClassic = AppWidgetClassic.Companion.getInstance();
private AppWidgetSmall appWidgetSmall = AppWidgetSmall.Companion.getInstance(); private AppWidgetSmall appWidgetSmall = AppWidgetSmall.Companion.getInstance();
private AppWidgetCard appWidgetCard = AppWidgetCard.Companion.getInstance(); private AppWidgetCard appWidgetCard = AppWidgetCard.Companion.getInstance();
private AppWidgetText appWidgetText = AppWidgetText.Companion.getInstance();
private final BroadcastReceiver widgetIntentReceiver = new BroadcastReceiver() { private final BroadcastReceiver widgetIntentReceiver = new BroadcastReceiver() {
@Override @Override
public void onReceive(final Context context, final Intent intent) { public void onReceive(final Context context, final Intent intent) {
@ -152,6 +154,10 @@ public class MusicService extends Service implements SharedPreferences.OnSharedP
appWidgetCard.performUpdate(MusicService.this, ids); appWidgetCard.performUpdate(MusicService.this, ids);
break; break;
} }
case AppWidgetText.NAME: {
appWidgetText.performUpdate(MusicService.this, ids);
break;
}
} }
} }
@ -1114,6 +1120,7 @@ public class MusicService extends Service implements SharedPreferences.OnSharedP
appWidgetClassic.notifyChange(this, what); appWidgetClassic.notifyChange(this, what);
appWidgetSmall.notifyChange(this, what); appWidgetSmall.notifyChange(this, what);
appWidgetCard.notifyChange(this, what); appWidgetCard.notifyChange(this, what);
appWidgetText.notifyChange(this, what);
} }
private void handleChangeInternal(@NonNull final String what) { private void handleChangeInternal(@NonNull final String what) {

View file

@ -0,0 +1,15 @@
package code.name.monkey.retromusic.transform
import android.view.View
import androidx.viewpager.widget.ViewPager
class StackTransformer : ViewPager.PageTransformer {
override fun transformPage(page: View, position: Float) {
if (position >= 0) {
page.scaleX = (0.9f - 0.05f * position)
page.scaleY = 0.9f
page.translationX = -page.width * position
page.translationY = -30 * position
}
}
}

View file

@ -71,10 +71,11 @@ class AlbumDetailsActivity : AbsSlidingMusicPanelActivity(), AlbumDetailsContrac
setupWindowTransition() setupWindowTransition()
super.onCreate(savedInstanceState) super.onCreate(savedInstanceState)
toggleBottomNavigationView(true)
setLightNavigationBar(true) setLightNavigationBar(true)
setNavigationbarColorAuto() setNavigationbarColorAuto()
toggleBottomNavigationView(true)
ActivityCompat.postponeEnterTransition(this) ActivityCompat.postponeEnterTransition(this)
val albumId = intent.getIntExtra(EXTRA_ALBUM_ID, -1) val albumId = intent.getIntExtra(EXTRA_ALBUM_ID, -1)

View file

@ -1,24 +1,23 @@
package code.name.monkey.retromusic.ui.activities package code.name.monkey.retromusic.ui.activities
import android.content.Context
import android.os.Bundle import android.os.Bundle
import android.view.View import android.view.View
import androidx.core.view.ViewCompat
import android.view.WindowManager import android.view.WindowManager
import android.widget.ImageView import android.view.WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD
import androidx.core.view.ViewCompat
import com.bumptech.glide.Glide
import com.r0adkll.slidr.Slidr
import com.r0adkll.slidr.model.SlidrConfig
import com.r0adkll.slidr.model.SlidrPosition
import code.name.monkey.appthemehelper.ThemeStore import code.name.monkey.appthemehelper.ThemeStore
import code.name.monkey.retromusic.R import code.name.monkey.retromusic.R
import code.name.monkey.retromusic.glide.RetroMusicColoredTarget import code.name.monkey.retromusic.glide.RetroMusicColoredTarget
import code.name.monkey.retromusic.glide.SongGlideRequest import code.name.monkey.retromusic.glide.SongGlideRequest
import code.name.monkey.retromusic.helper.MusicPlayerRemote import code.name.monkey.retromusic.helper.MusicPlayerRemote
import code.name.monkey.retromusic.model.Song
import code.name.monkey.retromusic.ui.activities.base.AbsMusicServiceActivity import code.name.monkey.retromusic.ui.activities.base.AbsMusicServiceActivity
import code.name.monkey.retromusic.ui.fragments.player.lockscreen.LockScreenPlayerControlsFragment import code.name.monkey.retromusic.ui.fragments.player.lockscreen.LockScreenPlayerControlsFragment
import com.bumptech.glide.Glide
import com.r0adkll.slidr.Slidr
import com.r0adkll.slidr.model.SlidrConfig
import com.r0adkll.slidr.model.SlidrListener
import com.r0adkll.slidr.model.SlidrPosition
class LockScreenActivity : AbsMusicServiceActivity() { class LockScreenActivity : AbsMusicServiceActivity() {
private var mFragment: LockScreenPlayerControlsFragment? = null private var mFragment: LockScreenPlayerControlsFragment? = null
@ -47,13 +46,15 @@ class LockScreenActivity : AbsMusicServiceActivity() {
mFragment = supportFragmentManager.findFragmentById(R.id.playback_controls_fragment) as LockScreenPlayerControlsFragment? mFragment = supportFragmentManager.findFragmentById(R.id.playback_controls_fragment) as LockScreenPlayerControlsFragment?
findViewById<View>(R.id.slide).setTranslationY(100f) findViewById<View>(R.id.slide).apply {
findViewById<View>(R.id.slide).setAlpha(0f) translationY = 100f
ViewCompat.animate(findViewById<View>(R.id.slide)) alpha = 0f
.translationY(0f) ViewCompat.animate(this)
.alpha(1f) .translationY(0f)
.setDuration(1500) .alpha(1f)
.start() .setDuration(1500)
.start()
}
findViewById<View>(R.id.root_layout).setBackgroundColor(ThemeStore.primaryColor(this)) findViewById<View>(R.id.root_layout).setBackgroundColor(ThemeStore.primaryColor(this))
} }

View file

@ -59,7 +59,7 @@ class LyricsActivity : AbsMusicServiceActivity(), View.OnClickListener {
setStatusbarColorAuto() setStatusbarColorAuto()
setTaskDescriptionColorAuto() setTaskDescriptionColorAuto()
setNavigationbarColorAuto() setNavigationbarColorAuto()
setLightStatusbar(true)
toolbar.setBackgroundColor(ThemeStore.primaryColor(this)) toolbar.setBackgroundColor(ThemeStore.primaryColor(this))
toolbar.navigationIcon = TintHelper.createTintedDrawable(ContextCompat.getDrawable(this@LyricsActivity, R.drawable.ic_keyboard_backspace_black_24dp), ThemeStore.textColorSecondary(this@LyricsActivity)) toolbar.navigationIcon = TintHelper.createTintedDrawable(ContextCompat.getDrawable(this@LyricsActivity, R.drawable.ic_keyboard_backspace_black_24dp), ThemeStore.textColorSecondary(this@LyricsActivity))

View file

@ -13,6 +13,8 @@ import android.view.View
import android.view.ViewGroup import android.view.ViewGroup
import androidx.core.app.ActivityCompat import androidx.core.app.ActivityCompat
import androidx.core.app.ShareCompat import androidx.core.app.ShareCompat
import androidx.drawerlayout.widget.DrawerLayout
import androidx.drawerlayout.widget.DrawerLayout.*
import androidx.fragment.app.Fragment import androidx.fragment.app.Fragment
import code.name.monkey.appthemehelper.ThemeStore import code.name.monkey.appthemehelper.ThemeStore
import code.name.monkey.appthemehelper.util.ATHUtil import code.name.monkey.appthemehelper.util.ATHUtil
@ -272,7 +274,7 @@ class MainActivity : AbsSlidingMusicPanelActivity(), SharedPreferences.OnSharedP
private fun showPromotionalOffer() { private fun showPromotionalOffer() {
MaterialDialog.Builder(this) MaterialDialog.Builder(this)
.positiveText("Buy") .positiveText("Buy")
.onPositive { _, _ -> startActivity(Intent(this@MainActivity, ProVersionActivity::class.java)) } .onPositive { _, _ -> startActivity(Intent(this@MainActivity, PurchaseActivity::class.java)) }
.negativeText(android.R.string.cancel) .negativeText(android.R.string.cancel)
.customView(R.layout.dialog_promotional_offer, false) .customView(R.layout.dialog_promotional_offer, false)
.dismissListener { .dismissListener {
@ -305,7 +307,7 @@ class MainActivity : AbsSlidingMusicPanelActivity(), SharedPreferences.OnSharedP
R.id.nav_library -> Handler().postDelayed({ setMusicChooser(LIBRARY) }, 200) R.id.nav_library -> Handler().postDelayed({ setMusicChooser(LIBRARY) }, 200)
R.id.nav_home -> Handler().postDelayed({ setMusicChooser(HOME) }, 200) R.id.nav_home -> Handler().postDelayed({ setMusicChooser(HOME) }, 200)
R.id.nav_folders -> Handler().postDelayed({ setMusicChooser(FOLDERS) }, 200) R.id.nav_folders -> Handler().postDelayed({ setMusicChooser(FOLDERS) }, 200)
R.id.buy_pro -> Handler().postDelayed({ startActivityForResult(Intent(this@MainActivity, ProVersionActivity::class.java), PURCHASE_REQUEST) }, 200) R.id.buy_pro -> Handler().postDelayed({ startActivityForResult(Intent(this@MainActivity, PurchaseActivity::class.java), PURCHASE_REQUEST) }, 200)
R.id.nav_settings -> Handler().postDelayed({ NavigationUtil.goToSettings(this@MainActivity) }, 200) R.id.nav_settings -> Handler().postDelayed({ NavigationUtil.goToSettings(this@MainActivity) }, 200)
R.id.nav_equalizer -> Handler().postDelayed({ NavigationUtil.openEqualizer(this@MainActivity) }, 200) R.id.nav_equalizer -> Handler().postDelayed({ NavigationUtil.openEqualizer(this@MainActivity) }, 200)
R.id.nav_share_app -> Handler().postDelayed({ shareApp() }, 200) R.id.nav_share_app -> Handler().postDelayed({ shareApp() }, 200)
@ -336,7 +338,7 @@ class MainActivity : AbsSlidingMusicPanelActivity(), SharedPreferences.OnSharedP
when (key) { when (key) {
LIBRARY -> { LIBRARY -> {
navigationView.setCheckedItem(R.id.nav_library) navigationView.setCheckedItem(R.id.nav_library)
setCurrentFragment(LibraryFragment.newInstance()) setCurrentFragment(LibraryFragment.newInstance(PreferenceUtil.getInstance().lastPage))
} }
FOLDERS -> { FOLDERS -> {
navigationView.setCheckedItem(R.id.nav_folders) navigationView.setCheckedItem(R.id.nav_folders)
@ -376,6 +378,15 @@ class MainActivity : AbsSlidingMusicPanelActivity(), SharedPreferences.OnSharedP
return super.onOptionsItemSelected(item) return super.onOptionsItemSelected(item)
} }
override fun onPanelCollapsed() {
super.onPanelCollapsed()
drawerLayout.setDrawerLockMode(LOCK_MODE_UNLOCKED)
}
override fun onPanelExpanded() {
super.onPanelExpanded()
drawerLayout.setDrawerLockMode(DrawerLayout.LOCK_MODE_LOCKED_CLOSED)
}
companion object { companion object {
const val APP_INTRO_REQUEST = 2323 const val APP_INTRO_REQUEST = 2323
const val LIBRARY = 1 const val LIBRARY = 1

View file

@ -1,6 +1,5 @@
package code.name.monkey.retromusic.ui.activities package code.name.monkey.retromusic.ui.activities
import android.app.Activity
import android.content.Intent import android.content.Intent
import android.os.AsyncTask import android.os.AsyncTask
import android.os.Bundle import android.os.Bundle
@ -21,10 +20,10 @@ import kotlinx.android.synthetic.main.activity_pro_version_content.*
import java.lang.ref.WeakReference import java.lang.ref.WeakReference
class ProVersionActivity : AbsBaseActivity(), BillingProcessor.IBillingHandler { class PurchaseActivity : AbsBaseActivity(), BillingProcessor.IBillingHandler {
private var billingProcessor: BillingProcessor? = null private lateinit var billingProcessor: BillingProcessor
private var restorePurchaseAsyncTask: AsyncTask<*, *, *>? = null private var restorePurchaseAsyncTask: AsyncTask<*, *, *>? = null
override fun onCreate(savedInstanceState: Bundle?) { override fun onCreate(savedInstanceState: Bundle?) {
@ -32,7 +31,6 @@ class ProVersionActivity : AbsBaseActivity(), BillingProcessor.IBillingHandler {
setContentView(R.layout.activity_pro_version) setContentView(R.layout.activity_pro_version)
setDrawUnderStatusBar() setDrawUnderStatusBar()
setStatusbarColorAuto() setStatusbarColorAuto()
setNavigationbarColorAuto() setNavigationbarColorAuto()
setTaskDescriptionColorAuto() setTaskDescriptionColorAuto()
@ -52,7 +50,7 @@ class ProVersionActivity : AbsBaseActivity(), BillingProcessor.IBillingHandler {
restoreButton.isEnabled = false restoreButton.isEnabled = false
purchaseButton.isEnabled = false purchaseButton.isEnabled = false
billingProcessor = BillingProcessor(this, BuildConfig.GOOGLE_PLAY_LICENSE_KEY, this) billingProcessor = BillingProcessor(this, BuildConfig.GOOGLE_PLAY_LICENSING_KEY, this)
MaterialUtil.setTint(restoreButton, false) MaterialUtil.setTint(restoreButton, false)
MaterialUtil.setTint(purchaseButton, true) MaterialUtil.setTint(purchaseButton, true)
@ -64,7 +62,7 @@ class ProVersionActivity : AbsBaseActivity(), BillingProcessor.IBillingHandler {
} }
purchaseButton.setOnClickListener { purchaseButton.setOnClickListener {
billingProcessor!!.purchase(this@ProVersionActivity, App.PRO_VERSION_PRODUCT_ID) billingProcessor.purchase(this@PurchaseActivity, App.PRO_VERSION_PRODUCT_ID)
} }
} }
@ -102,7 +100,7 @@ class ProVersionActivity : AbsBaseActivity(), BillingProcessor.IBillingHandler {
public override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) { public override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
if (!billingProcessor!!.handleActivityResult(requestCode, resultCode, data)) { if (!billingProcessor.handleActivityResult(requestCode, resultCode, data)) {
super.onActivityResult(requestCode, resultCode, data) super.onActivityResult(requestCode, resultCode, data)
} }
} }
@ -115,15 +113,13 @@ class ProVersionActivity : AbsBaseActivity(), BillingProcessor.IBillingHandler {
} }
override fun onDestroy() { override fun onDestroy() {
if (billingProcessor != null) { billingProcessor.release()
billingProcessor!!.release()
}
super.onDestroy() super.onDestroy()
} }
private class RestorePurchaseAsyncTask internal constructor(purchaseActivity: ProVersionActivity) : AsyncTask<Void, Void, Boolean>() { private class RestorePurchaseAsyncTask internal constructor(purchaseActivity: PurchaseActivity) : AsyncTask<Void, Void, Boolean>() {
private val buyActivityWeakReference: WeakReference<ProVersionActivity> = WeakReference(purchaseActivity) private val buyActivityWeakReference: WeakReference<PurchaseActivity> = WeakReference(purchaseActivity)
override fun onPreExecute() { override fun onPreExecute() {
super.onPreExecute() super.onPreExecute()
@ -138,7 +134,7 @@ class ProVersionActivity : AbsBaseActivity(), BillingProcessor.IBillingHandler {
override fun doInBackground(vararg params: Void): Boolean? { override fun doInBackground(vararg params: Void): Boolean? {
val purchaseActivity = buyActivityWeakReference.get() val purchaseActivity = buyActivityWeakReference.get()
if (purchaseActivity != null) { if (purchaseActivity != null) {
return purchaseActivity.billingProcessor!!.loadOwnedPurchasesFromGoogle() return purchaseActivity.billingProcessor.loadOwnedPurchasesFromGoogle()
} }
cancel(false) cancel(false)
return null return null
@ -160,6 +156,6 @@ class ProVersionActivity : AbsBaseActivity(), BillingProcessor.IBillingHandler {
} }
companion object { companion object {
private const val TAG: String = "ProVersionActivity" private const val TAG: String = "PurchaseActivity"
} }
} }

View file

@ -1,7 +1,10 @@
package code.name.monkey.retromusic.ui.activities package code.name.monkey.retromusic.ui.activities
import android.app.Activity
import android.content.Intent
import android.content.SharedPreferences import android.content.SharedPreferences
import android.os.Bundle import android.os.Bundle
import android.util.Log
import android.view.MenuItem import android.view.MenuItem
import androidx.annotation.ColorInt import androidx.annotation.ColorInt
import androidx.annotation.StringRes import androidx.annotation.StringRes
@ -18,6 +21,7 @@ import code.name.monkey.retromusic.util.PreferenceUtil
import com.afollestad.materialdialogs.color.ColorChooserDialog import com.afollestad.materialdialogs.color.ColorChooserDialog
import kotlinx.android.synthetic.main.activity_settings.* import kotlinx.android.synthetic.main.activity_settings.*
class SettingsActivity : AbsBaseActivity(), ColorChooserDialog.ColorCallback, SharedPreferences.OnSharedPreferenceChangeListener { class SettingsActivity : AbsBaseActivity(), ColorChooserDialog.ColorCallback, SharedPreferences.OnSharedPreferenceChangeListener {
private val fragmentManager = supportFragmentManager private val fragmentManager = supportFragmentManager
@ -120,6 +124,7 @@ class SettingsActivity : AbsBaseActivity(), ColorChooserDialog.ColorCallback, Sh
} }
} }
companion object { companion object {
const val TAG: String = "SettingsActivity" const val TAG: String = "SettingsActivity"
} }

View file

@ -70,7 +70,7 @@ class SupportDevelopmentActivity : AbsBaseActivity(), BillingProcessor.IBillingH
setupToolbar() setupToolbar()
billingProcessor = BillingProcessor(this, BuildConfig.GOOGLE_PLAY_LICENSE_KEY, this) billingProcessor = BillingProcessor(this, BuildConfig.GOOGLE_PLAY_LICENSING_KEY, this)
TintHelper.setTint(progress, ThemeStore.accentColor(this)) TintHelper.setTint(progress, ThemeStore.accentColor(this))
donation.setTextColor(ThemeStore.accentColor(this)) donation.setTextColor(ThemeStore.accentColor(this))
donate.setOnClickListener { donate.setOnClickListener {

View file

@ -10,7 +10,7 @@ import com.google.android.gms.common.ConnectionResult
import com.google.android.gms.common.GoogleApiAvailability import com.google.android.gms.common.GoogleApiAvailability
import java.io.IOException import java.io.IOException
abstract class AbsCastActivity : AbsBaseActivity() { abstract class AbsCastActivity : AbsCheckPiracy() {
var playServicesAvailable = false var playServicesAvailable = false

View file

@ -0,0 +1,10 @@
package code.name.monkey.retromusic.ui.activities.base;
abstract public class AbsCheckPiracy extends AbsBaseActivity {
@Override
protected void onStart() {
super.onStart();
}
}

View file

@ -29,23 +29,19 @@ import code.name.monkey.retromusic.ui.fragments.player.material.MaterialFragment
import code.name.monkey.retromusic.ui.fragments.player.normal.PlayerFragment import code.name.monkey.retromusic.ui.fragments.player.normal.PlayerFragment
import code.name.monkey.retromusic.ui.fragments.player.plain.PlainPlayerFragment import code.name.monkey.retromusic.ui.fragments.player.plain.PlainPlayerFragment
import code.name.monkey.retromusic.ui.fragments.player.simple.SimplePlayerFragment import code.name.monkey.retromusic.ui.fragments.player.simple.SimplePlayerFragment
import code.name.monkey.retromusic.util.ColorUtils
import code.name.monkey.retromusic.util.PreferenceUtil import code.name.monkey.retromusic.util.PreferenceUtil
import code.name.monkey.retromusic.views.BottomNavigationBarTinted import code.name.monkey.retromusic.views.BottomNavigationBarTinted
import com.google.android.material.bottomnavigation.BottomNavigationView import com.google.android.material.bottomnavigation.BottomNavigationView
import com.sothree.slidinguppanel.SlidingUpPanelLayout import com.sothree.slidinguppanel.SlidingUpPanelLayout
import com.sothree.slidinguppanel.SlidingUpPanelLayout.PanelState import com.sothree.slidinguppanel.SlidingUpPanelLayout.PanelState
import kotlinx.android.synthetic.main.sliding_music_panel_layout.*
abstract class AbsSlidingMusicPanelActivity protected constructor() : AbsMusicServiceActivity(), SlidingUpPanelLayout.PanelSlideListener, AbsPlayerFragment.Callbacks { abstract class AbsSlidingMusicPanelActivity protected constructor() : AbsMusicServiceActivity(), SlidingUpPanelLayout.PanelSlideListener, AbsPlayerFragment.Callbacks {
lateinit var slidingUpPanelLayout: SlidingUpPanelLayout
private lateinit var bottomNavigationView: BottomNavigationBarTinted
private var miniPlayerFragment: MiniPlayerFragment? = null private var miniPlayerFragment: MiniPlayerFragment? = null
var playerFragment: AbsPlayerFragment? = null private var playerFragment: AbsPlayerFragment? = null
private var currentNowPlayingScreen: NowPlayingScreen? = null private var currentNowPlayingScreen: NowPlayingScreen? = null
private var navigationbarColor: Int = 0 private var navigationbarColor: Int = 0
private var taskColor: Int = 0 private var taskColor: Int = 0
private var lightStatusbar: Boolean = false private var lightStatusbar: Boolean = false
@ -54,7 +50,7 @@ abstract class AbsSlidingMusicPanelActivity protected constructor() : AbsMusicSe
private val argbEvaluator = ArgbEvaluator() private val argbEvaluator = ArgbEvaluator()
val panelState: SlidingUpPanelLayout.PanelState? val panelState: SlidingUpPanelLayout.PanelState?
get() = slidingUpPanelLayout.panelState get() = slidingLayout.panelState
private val isOneOfTheseThemes: Boolean private val isOneOfTheseThemes: Boolean
get() = (currentNowPlayingScreen == NowPlayingScreen.ADAPTIVE) get() = (currentNowPlayingScreen == NowPlayingScreen.ADAPTIVE)
@ -63,8 +59,6 @@ abstract class AbsSlidingMusicPanelActivity protected constructor() : AbsMusicSe
super.onCreate(savedInstanceState) super.onCreate(savedInstanceState)
setContentView(createContentView()) setContentView(createContentView())
slidingUpPanelLayout = findViewById(R.id.sliding_layout);
bottomNavigationView = findViewById(R.id.bottom_navigation);
chooseFragmentForTheme() chooseFragmentForTheme()
setupSlidingUpPanel() setupSlidingUpPanel()
@ -80,9 +74,9 @@ abstract class AbsSlidingMusicPanelActivity protected constructor() : AbsMusicSe
override fun onServiceConnected() { override fun onServiceConnected() {
super.onServiceConnected() super.onServiceConnected()
if (!MusicPlayerRemote.playingQueue.isEmpty()) { if (!MusicPlayerRemote.playingQueue.isEmpty()) {
slidingUpPanelLayout.viewTreeObserver.addOnGlobalLayoutListener(object : ViewTreeObserver.OnGlobalLayoutListener { slidingLayout.viewTreeObserver.addOnGlobalLayoutListener(object : ViewTreeObserver.OnGlobalLayoutListener {
override fun onGlobalLayout() { override fun onGlobalLayout() {
slidingUpPanelLayout.viewTreeObserver.removeOnGlobalLayoutListener(this) slidingLayout.viewTreeObserver.removeOnGlobalLayoutListener(this)
hideBottomBar(false) hideBottomBar(false)
} }
}) })
@ -99,11 +93,11 @@ abstract class AbsSlidingMusicPanelActivity protected constructor() : AbsMusicSe
val heightOfBarWithTabs = resources.getDimensionPixelSize(R.dimen.mini_player_height_expanded) val heightOfBarWithTabs = resources.getDimensionPixelSize(R.dimen.mini_player_height_expanded)
if (hide) { if (hide) {
slidingUpPanelLayout.panelHeight = 0 slidingLayout.panelHeight = 0
collapsePanel() collapsePanel()
} else { } else {
if (!MusicPlayerRemote.playingQueue.isEmpty()) { if (!MusicPlayerRemote.playingQueue.isEmpty()) {
slidingUpPanelLayout.panelHeight = if (bottomNavigationView.visibility == View.VISIBLE) heightOfBarWithTabs else heightOfBar slidingLayout.panelHeight = if (bottomNavigationView.visibility == View.VISIBLE) heightOfBarWithTabs else heightOfBar
} }
} }
} }
@ -111,7 +105,7 @@ abstract class AbsSlidingMusicPanelActivity protected constructor() : AbsMusicSe
protected fun wrapSlidingMusicPanel(@LayoutRes resId: Int): View { protected fun wrapSlidingMusicPanel(@LayoutRes resId: Int): View {
@SuppressLint("InflateParams") @SuppressLint("InflateParams")
val slidingMusicPanelLayout = layoutInflater.inflate(R.layout.sliding_music_panel_layout, null) val slidingMusicPanelLayout = layoutInflater.inflate(R.layout.sliding_music_panel_layout, null)
val contentContainer = slidingMusicPanelLayout.findViewById<ViewGroup>(R.id.content_container) val contentContainer = slidingMusicPanelLayout.findViewById<ViewGroup>(R.id.mainContentFrame)
layoutInflater.inflate(resId, contentContainer) layoutInflater.inflate(resId, contentContainer)
return slidingMusicPanelLayout return slidingMusicPanelLayout
} }
@ -122,7 +116,7 @@ abstract class AbsSlidingMusicPanelActivity protected constructor() : AbsMusicSe
} }
open fun handleBackPress(): Boolean { open fun handleBackPress(): Boolean {
if (slidingUpPanelLayout.panelHeight != 0 && playerFragment!!.onBackPressed()) if (slidingLayout.panelHeight != 0 && playerFragment!!.onBackPressed())
return true return true
if (panelState == SlidingUpPanelLayout.PanelState.EXPANDED) { if (panelState == SlidingUpPanelLayout.PanelState.EXPANDED) {
collapsePanel() collapsePanel()
@ -142,18 +136,18 @@ abstract class AbsSlidingMusicPanelActivity protected constructor() : AbsMusicSe
bottomNavigationView.visibility = if (toggle) View.GONE else View.VISIBLE bottomNavigationView.visibility = if (toggle) View.GONE else View.VISIBLE
} }
fun getBottomNavigationView(): BottomNavigationView? { fun getBottomNavigationView(): BottomNavigationBarTinted? {
return bottomNavigationView return bottomNavigationView
} }
private fun setupSlidingUpPanel() { private fun setupSlidingUpPanel() {
slidingUpPanelLayout.viewTreeObserver slidingLayout.viewTreeObserver
.addOnGlobalLayoutListener(object : ViewTreeObserver.OnGlobalLayoutListener { .addOnGlobalLayoutListener(object : ViewTreeObserver.OnGlobalLayoutListener {
override fun onGlobalLayout() { override fun onGlobalLayout() {
slidingUpPanelLayout.viewTreeObserver.removeOnGlobalLayoutListener(this) slidingLayout.viewTreeObserver.removeOnGlobalLayoutListener(this)
if (panelState == PanelState.EXPANDED) { if (panelState == PanelState.EXPANDED) {
onPanelSlide(slidingUpPanelLayout, 1f) onPanelSlide(slidingLayout, 1f)
onPanelExpanded() onPanelExpanded()
} else if (panelState == PanelState.COLLAPSED) { } else if (panelState == PanelState.COLLAPSED) {
onPanelCollapsed() onPanelCollapsed()
@ -163,7 +157,7 @@ abstract class AbsSlidingMusicPanelActivity protected constructor() : AbsMusicSe
} }
}) })
slidingUpPanelLayout.addPanelSlideListener(this) slidingLayout.addPanelSlideListener(this)
} }
@ -182,7 +176,7 @@ abstract class AbsSlidingMusicPanelActivity protected constructor() : AbsMusicSe
} }
} }
fun onPanelCollapsed() { open fun onPanelCollapsed() {
// restore values // restore values
super.setLightStatusbar(lightStatusbar) super.setLightStatusbar(lightStatusbar)
super.setTaskDescriptionColor(taskColor) super.setTaskDescriptionColor(taskColor)
@ -195,7 +189,7 @@ abstract class AbsSlidingMusicPanelActivity protected constructor() : AbsMusicSe
playerFragment!!.onHide() playerFragment!!.onHide()
} }
fun onPanelExpanded() { open fun onPanelExpanded() {
val playerFragmentColor = playerFragment!!.paletteColor val playerFragmentColor = playerFragment!!.paletteColor
super.setTaskDescriptionColor(playerFragmentColor) super.setTaskDescriptionColor(playerFragmentColor)
@ -231,11 +225,11 @@ abstract class AbsSlidingMusicPanelActivity protected constructor() : AbsMusicSe
NowPlayingScreen.COLOR -> ColorFragment() NowPlayingScreen.COLOR -> ColorFragment()
else -> PlayerFragment() else -> PlayerFragment()
} // must implement AbsPlayerFragment } // must implement AbsPlayerFragment
supportFragmentManager.beginTransaction().replace(R.id.player_fragment_container, fragment).commit() supportFragmentManager.beginTransaction().replace(R.id.playerFragmentContainer, fragment).commit()
supportFragmentManager.executePendingTransactions() supportFragmentManager.executePendingTransactions()
playerFragment = supportFragmentManager.findFragmentById(R.id.player_fragment_container) as AbsPlayerFragment playerFragment = supportFragmentManager.findFragmentById(R.id.playerFragmentContainer) as AbsPlayerFragment
miniPlayerFragment = supportFragmentManager.findFragmentById(R.id.mini_player_fragment) as MiniPlayerFragment miniPlayerFragment = supportFragmentManager.findFragmentById(R.id.miniPlayerFragment) as MiniPlayerFragment
miniPlayerFragment!!.view!!.setOnClickListener { expandPanel() } miniPlayerFragment!!.view!!.setOnClickListener { expandPanel() }
} }
@ -248,11 +242,11 @@ abstract class AbsSlidingMusicPanelActivity protected constructor() : AbsMusicSe
} }
private fun collapsePanel() { private fun collapsePanel() {
slidingUpPanelLayout.panelState = PanelState.COLLAPSED slidingLayout.panelState = PanelState.COLLAPSED
} }
private fun expandPanel() { private fun expandPanel() {
slidingUpPanelLayout.panelState = PanelState.EXPANDED slidingLayout.panelState = PanelState.EXPANDED
} }
@ -267,6 +261,7 @@ abstract class AbsSlidingMusicPanelActivity protected constructor() : AbsMusicSe
super.setLightNavigationBar(true) super.setLightNavigationBar(true)
super.setLightStatusbar(isColorLight) super.setLightStatusbar(isColorLight)
} else if (currentNowPlayingScreen == NowPlayingScreen.FULL || currentNowPlayingScreen == NowPlayingScreen.CARD || } else if (currentNowPlayingScreen == NowPlayingScreen.FULL || currentNowPlayingScreen == NowPlayingScreen.CARD ||
currentNowPlayingScreen == NowPlayingScreen.FIT ||
currentNowPlayingScreen == NowPlayingScreen.BLUR || currentNowPlayingScreen == NowPlayingScreen.BLUR_CARD) { currentNowPlayingScreen == NowPlayingScreen.BLUR || currentNowPlayingScreen == NowPlayingScreen.BLUR_CARD) {
super.setLightStatusbar(false) super.setLightStatusbar(false)
super.setLightNavigationBar(true) super.setLightNavigationBar(true)

View file

@ -43,13 +43,16 @@ class PlayerAlbumCoverFragment : AbsMusicServiceFragment(), ViewPager.OnPageChan
super.onViewCreated(view, savedInstanceState) super.onViewCreated(view, savedInstanceState)
viewPager.addOnPageChangeListener(this) viewPager.addOnPageChangeListener(this)
//noinspection ConstantConditions //noinspection ConstantConditions
if (PreferenceUtil.getInstance().carouselEffect() && !((PreferenceUtil.getInstance().nowPlayingScreen == NowPlayingScreen.FULL) || (PreferenceUtil.getInstance().nowPlayingScreen == NowPlayingScreen.FIT))) { if (PreferenceUtil.getInstance().carouselEffect() &&
viewPager.clipToPadding = false; !((PreferenceUtil.getInstance().nowPlayingScreen == NowPlayingScreen.FULL)
viewPager.setPadding(96, 0, 96, 0); || (PreferenceUtil.getInstance().nowPlayingScreen == NowPlayingScreen.FIT))) {
viewPager.pageMargin = 18; viewPager.clipToPadding = false
viewPager.setPageTransformer(false, CarousalPagerTransformer(context!!)); viewPager.setPadding(96, 0, 96, 0)
viewPager.pageMargin = 18
viewPager.setPageTransformer(false, CarousalPagerTransformer(context!!))
} else { } else {
viewPager.setPageTransformer(true, PreferenceUtil.getInstance().getAlbumCoverTransform(context!!)); viewPager.offscreenPageLimit = 2
viewPager.setPageTransformer(true, PreferenceUtil.getInstance().albumCoverTransform)
} }
} }
@ -123,6 +126,5 @@ class PlayerAlbumCoverFragment : AbsMusicServiceFragment(), ViewPager.OnPageChan
companion object { companion object {
val TAG: String = PlayerAlbumCoverFragment::class.java.simpleName val TAG: String = PlayerAlbumCoverFragment::class.java.simpleName
const val VISIBILITY_ANIM_DURATION: Long = 300
} }
} }

View file

@ -55,6 +55,9 @@ class FullPlaybackControlsFragment : AbsPlayerControlsFragment() {
val volumeFragment = childFragmentManager.findFragmentById(R.id.volumeFragment) as VolumeFragment? val volumeFragment = childFragmentManager.findFragmentById(R.id.volumeFragment) as VolumeFragment?
volumeFragment!!.tintWhiteColor() volumeFragment!!.tintWhiteColor()
songTotalTime.setTextColor(Color.WHITE)
songCurrentProgress.setTextColor(Color.WHITE)
} }
override fun onResume() { override fun onResume() {

View file

@ -1,14 +1,22 @@
package code.name.monkey.retromusic.ui.fragments.settings package code.name.monkey.retromusic.ui.fragments.settings
import android.app.ActivityManager
import android.app.admin.DevicePolicyManager
import android.content.ComponentName
import android.content.Context
import android.content.Intent
import android.content.SharedPreferences import android.content.SharedPreferences
import android.os.Bundle import android.os.Bundle
import android.view.View import android.view.View
import androidx.preference.TwoStatePreference import androidx.preference.TwoStatePreference
import code.name.monkey.retromusic.App import code.name.monkey.retromusic.App
import code.name.monkey.retromusic.R import code.name.monkey.retromusic.R
import code.name.monkey.retromusic.ui.activities.SettingsActivity.Companion.RESULT_ENABLE
import code.name.monkey.retromusic.util.PreferenceUtil import code.name.monkey.retromusic.util.PreferenceUtil
class PersonaizeSettingsFragment : AbsSettingsFragment(), SharedPreferences.OnSharedPreferenceChangeListener { class PersonaizeSettingsFragment : AbsSettingsFragment(), SharedPreferences.OnSharedPreferenceChangeListener {
override fun invalidateSettings() { override fun invalidateSettings() {
val cornerWindow = findPreference("corner_window") as TwoStatePreference val cornerWindow = findPreference("corner_window") as TwoStatePreference
cornerWindow.setOnPreferenceChangeListener { _, newValue -> cornerWindow.setOnPreferenceChangeListener { _, newValue ->
@ -17,15 +25,17 @@ class PersonaizeSettingsFragment : AbsSettingsFragment(), SharedPreferences.OnSh
return@setOnPreferenceChangeListener false return@setOnPreferenceChangeListener false
} }
activity!!.recreate() activity!!.recreate()
true return@setOnPreferenceChangeListener true
} }
val toggleFullScreen = findPreference("toggle_full_screen") as TwoStatePreference val toggleFullScreen = findPreference("toggle_full_screen") as TwoStatePreference
toggleFullScreen.setOnPreferenceChangeListener { _, newValue -> toggleFullScreen.setOnPreferenceChangeListener { _, _ ->
activity!!.recreate() activity!!.recreate()
true true
} }
} }
override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) { override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) {
@ -36,9 +46,8 @@ class PersonaizeSettingsFragment : AbsSettingsFragment(), SharedPreferences.OnSh
override fun onViewCreated(view: View, savedInstanceState: Bundle?) { override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState) super.onViewCreated(view, savedInstanceState)
PreferenceUtil.getInstance().registerOnSharedPreferenceChangedListener(this) PreferenceUtil.getInstance().registerOnSharedPreferenceChangedListener(this)
} }
override fun onDestroyView() { override fun onDestroyView() {
super.onDestroyView() super.onDestroyView()

View file

@ -26,7 +26,7 @@ import code.name.monkey.retromusic.ui.activities.LicenseActivity;
import code.name.monkey.retromusic.ui.activities.LyricsActivity; import code.name.monkey.retromusic.ui.activities.LyricsActivity;
import code.name.monkey.retromusic.ui.activities.PlayingQueueActivity; import code.name.monkey.retromusic.ui.activities.PlayingQueueActivity;
import code.name.monkey.retromusic.ui.activities.PlaylistDetailActivity; import code.name.monkey.retromusic.ui.activities.PlaylistDetailActivity;
import code.name.monkey.retromusic.ui.activities.ProVersionActivity; import code.name.monkey.retromusic.ui.activities.PurchaseActivity;
import code.name.monkey.retromusic.ui.activities.SearchActivity; import code.name.monkey.retromusic.ui.activities.SearchActivity;
import code.name.monkey.retromusic.ui.activities.SettingsActivity; import code.name.monkey.retromusic.ui.activities.SettingsActivity;
import code.name.monkey.retromusic.ui.activities.SupportDevelopmentActivity; import code.name.monkey.retromusic.ui.activities.SupportDevelopmentActivity;
@ -106,7 +106,7 @@ public class NavigationUtil {
} }
public static void goToProVersion(@NonNull Activity activity) { public static void goToProVersion(@NonNull Activity activity) {
ActivityCompat.startActivity(activity, new Intent(activity, ProVersionActivity.class), null); ActivityCompat.startActivity(activity, new Intent(activity, PurchaseActivity.class), null);
} }
public static void goToSettings(@NonNull Activity activity) { public static void goToSettings(@NonNull Activity activity) {

View file

@ -0,0 +1,13 @@
package code.name.monkey.retromusic.util;
import android.content.Context;
import com.github.javiersantos.piracychecker.utils.LibraryUtilsKt;
public class PiracyCheckerUtils {
public static String getAPKSignature(Context context) {
return LibraryUtilsKt.getCurrentSignature(context);
}
}

View file

@ -30,6 +30,8 @@ import code.name.monkey.retromusic.transform.DepthTransformation;
import code.name.monkey.retromusic.transform.HingeTransformation; import code.name.monkey.retromusic.transform.HingeTransformation;
import code.name.monkey.retromusic.transform.HorizontalFlipTransformation; import code.name.monkey.retromusic.transform.HorizontalFlipTransformation;
import code.name.monkey.retromusic.transform.NormalPageTransformer; import code.name.monkey.retromusic.transform.NormalPageTransformer;
import code.name.monkey.retromusic.transform.StackPagerTransformer;
import code.name.monkey.retromusic.transform.StackTransformer;
import code.name.monkey.retromusic.transform.VerticalFlipTransformation; import code.name.monkey.retromusic.transform.VerticalFlipTransformation;
import code.name.monkey.retromusic.ui.activities.MainActivity; import code.name.monkey.retromusic.ui.activities.MainActivity;
import code.name.monkey.retromusic.ui.fragments.AlbumCoverStyle; import code.name.monkey.retromusic.ui.fragments.AlbumCoverStyle;
@ -739,7 +741,7 @@ public final class PreferenceUtil {
} }
public ViewPager.PageTransformer getAlbumCoverTransform(Context context) { public ViewPager.PageTransformer getAlbumCoverTransform() {
int style = Integer.parseInt(Objects.requireNonNull(mPreferences.getString(ALBUM_COVER_TRANSFORM, "0"))); int style = Integer.parseInt(Objects.requireNonNull(mPreferences.getString(ALBUM_COVER_TRANSFORM, "0")));
switch (style) { switch (style) {
default: default:
@ -755,6 +757,8 @@ public final class PreferenceUtil {
return new VerticalFlipTransformation(); return new VerticalFlipTransformation();
case 5: case 5:
return new HingeTransformation(); return new HingeTransformation();
case 6:
return new StackTransformer();
} }
} }

Binary file not shown.

Before

Width:  |  Height:  |  Size: 63 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 17 KiB

View file

@ -25,16 +25,9 @@
<com.google.android.material.tabs.TabLayout <com.google.android.material.tabs.TabLayout
android:id="@+id/tabs" android:id="@+id/tabs"
android:layout_width="match_parent" style="@style/TabLayoutStyle"
android:layout_height="wrap_content"
app:tabGravity="fill"
android:background="@android:color/transparent" android:background="@android:color/transparent"
app:tabTextAppearance="@style/TabTextAppearance" app:tabTextAppearance="@style/TabTextAppearance">
app:tabIndicator="@drawable/tab_indicator"
app:tabIndicatorAnimationDuration="@integer/anim_duration_medium"
app:tabIndicatorFullWidth="false"
app:tabIndicatorHeight="4dp"
app:tabInlineLabel="true">
<com.google.android.material.tabs.TabItem <com.google.android.material.tabs.TabItem
android:layout_width="wrap_content" android:layout_width="wrap_content"

View file

@ -0,0 +1,85 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:background="@color/md_red_500">
<LinearLayout
android:id="@+id/media_titles"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="fill"
android:focusable="true"
android:gravity="center_vertical"
android:orientation="vertical"
android:paddingLeft="8dp"
android:paddingRight="8dp">
<TextView
android:id="@+id/title"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:ellipsize="end"
android:gravity="center"
android:paddingStart="4dp"
android:paddingEnd="4dp"
android:text="@string/normal_lyrics"
android:textAppearance="@style/TextAppearance.AppCompat.Subhead"
android:textColor="@color/md_white_1000" />
<TextView
android:id="@+id/text"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center"
android:paddingStart="4dp"
android:paddingEnd="4dp"
android:text="@string/normal_lyrics"
android:textAppearance="@style/TextAppearance.AppCompat.Caption"
android:textColor="@color/md_white_1000" />
</LinearLayout>
<LinearLayout
android:id="@+id/media_actions"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_gravity="center"
android:focusable="true"
android:gravity="center"
android:layoutDirection="ltr"
android:orientation="horizontal">
<ImageButton
android:id="@+id/button_prev"
android:layout_width="0dp"
android:layout_height="@dimen/app_widget_small_button_height"
android:layout_weight="1"
android:background="@drawable/widget_selector"
tools:ignore="ContentDescription"
tools:src="@drawable/ic_skip_previous_white_24dp"
tools:tint="@color/ate_secondary_text_dark" />
<ImageButton
android:id="@+id/button_toggle_play_pause"
android:layout_width="0dp"
android:layout_height="@dimen/app_widget_small_button_height"
android:layout_weight="1"
android:background="@drawable/widget_selector"
tools:ignore="ContentDescription"
tools:src="@drawable/ic_play_arrow_white_24dp"
tools:tint="@color/ate_secondary_text_dark" />
<ImageButton
android:id="@+id/button_next"
android:layout_width="0dp"
android:layout_height="@dimen/app_widget_small_button_height"
android:layout_weight="1"
android:background="@drawable/widget_selector"
tools:ignore="ContentDescription"
tools:src="@drawable/ic_skip_next_white_24dp"
tools:tint="@color/ate_secondary_text_dark" />
</LinearLayout>
</LinearLayout>

View file

@ -1,6 +1,5 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" <FrameLayout 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" 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"
@ -10,71 +9,63 @@
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:scaleType="centerCrop" android:scaleType="centerCrop"
android:src="@drawable/diwali" /> android:src="@drawable/img_offer" />
<com.google.android.material.card.MaterialCardView <LinearLayout
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:orientation="vertical">
app:cardCornerRadius="8dp"
app:cardBackgroundColor="@color/md_red_500"
app:cardUseCompatPadding="true">
<LinearLayout <LinearLayout
android:layout_width="match_parent" android:id="@+id/title_container"
android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:orientation="vertical"> android:layout_gravity="center">
<LinearLayout <TextView
android:id="@+id/title_container" android:id="@+id/title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center">
<code.name.monkey.appthemehelper.common.views.ATEPrimaryTextView xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:text="70"
android:textColor="@android:color/white"
android:textSize="108sp"
tools:ignore="MissingPrefix" />
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:orientation="vertical"
android:paddingTop="32dp"
android:paddingBottom="32dp">
<code.name.monkey.appthemehelper.common.views.ATESecondaryTextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="%"
android:textAppearance="@style/Base.TextAppearance.AppCompat.Title"
android:textColor="@android:color/white" />
<code.name.monkey.appthemehelper.common.views.ATESecondaryTextView
android:id="@+id/off"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="0"
android:text="Off"
android:textColor="@android:color/white"
android:textStyle="italic" />
</LinearLayout>
</LinearLayout>
<code.name.monkey.appthemehelper.common.views.ATESecondaryTextView
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_gravity="center" android:layout_gravity="center"
android:gravity="center" android:text="70"
android:text="Diwali offer" android:textAppearance="@style/TextAppearance.MaterialComponents.Headline1"
android:textAppearance="@style/Base.TextAppearance.AppCompat.Title" android:textColor="@android:color/black"
android:textColor="@android:color/white" /> tools:ignore="MissingPrefix" />
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical"
android:paddingTop="32dp"
android:paddingBottom="32dp">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="%"
android:textColor="@android:color/black" />
<TextView
android:id="@+id/off"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="0"
android:text="Off"
android:textColor="@android:color/black"
android:textStyle="italic" />
</LinearLayout>
</LinearLayout> </LinearLayout>
</com.google.android.material.card.MaterialCardView>
</LinearLayout>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal|bottom"
android:gravity="center"
android:text="Christmas offer"
android:textAppearance="@style/TextAppearance.MaterialComponents.Headline5"
android:textColor="@android:color/black" />
</FrameLayout> </FrameLayout>

View file

@ -3,11 +3,11 @@
xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:app="http://schemas.android.com/apk/res-auto"
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:id="@+id/main_content" android:id="@+id/mainContent"
android:layout_height="match_parent"> android:layout_height="match_parent">
<com.sothree.slidinguppanel.SlidingUpPanelLayout xmlns:sothree="http://schemas.android.com/apk/res-auto" <com.sothree.slidinguppanel.SlidingUpPanelLayout xmlns:sothree="http://schemas.android.com/apk/res-auto"
android:id="@+id/sliding_layout" android:id="@+id/slidingLayout"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent" android:layout_height="match_parent"
android:gravity="bottom" android:gravity="bottom"
@ -17,24 +17,24 @@
sothree:umanoShadowHeight="0dp"> sothree:umanoShadowHeight="0dp">
<FrameLayout <FrameLayout
android:id="@+id/content_container" android:id="@+id/mainContentFrame"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent" android:layout_height="match_parent"
android:layout_weight="1" /> android:layout_weight="1" />
<FrameLayout <FrameLayout
android:id="@+id/sliding_panel" android:id="@+id/slidingPanel"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent"> android:layout_height="match_parent">
<FrameLayout <FrameLayout
android:id="@+id/player_fragment_container" android:id="@+id/playerFragmentContainer"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent" /> android:layout_height="match_parent" />
<fragment <fragment
android:id="@+id/mini_player_fragment" android:id="@+id/miniPlayerFragment"
android:name="code.name.monkey.retromusic.ui.fragments.MiniPlayerFragment" android:name="code.name.monkey.retromusic.ui.fragments.MiniPlayerFragment"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="48dp" android:layout_height="48dp"
@ -44,7 +44,7 @@
</com.sothree.slidinguppanel.SlidingUpPanelLayout> </com.sothree.slidinguppanel.SlidingUpPanelLayout>
<code.name.monkey.retromusic.views.BottomNavigationBarTinted <code.name.monkey.retromusic.views.BottomNavigationBarTinted
android:id="@+id/bottom_navigation" android:id="@+id/bottomNavigationView"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="56dp" android:layout_height="56dp"
android:layout_gravity="bottom" android:layout_gravity="bottom"

View file

@ -7,6 +7,7 @@
<item>@string/vertical_flip</item> <item>@string/vertical_flip</item>
<item>@string/horizontal_flip</item> <item>@string/horizontal_flip</item>
<item>@string/hinge</item> <item>@string/hinge</item>
<item>@string/stack</item>
</array> </array>
<string-array name="pref_album_cover_transform_values"> <string-array name="pref_album_cover_transform_values">
@ -16,6 +17,7 @@
<item>3</item> <item>3</item>
<item>4</item> <item>4</item>
<item>5</item> <item>5</item>
<item>6</item>
</string-array> </string-array>
<string-array name="pref_tab_text_mode_values"> <string-array name="pref_tab_text_mode_values">
@ -208,4 +210,5 @@
</string-array> </string-array>
<string name="image_gradient">Gradient image</string> <string name="image_gradient">Gradient image</string>
<string name="stack">Stack</string>
</resources> </resources>

View file

@ -74,6 +74,7 @@
<string name="app_widget_card_name">Retro music - Card</string> <string name="app_widget_card_name">Retro music - Card</string>
<string name="app_widget_classic_name">Retro music - Classic</string> <string name="app_widget_classic_name">Retro music - Classic</string>
<string name="app_widget_small_name">Retro music - Small</string> <string name="app_widget_small_name">Retro music - Small</string>
<string name="app_widget_text_name">Retro music - Text</string>
<string name="artist">Artist</string> <string name="artist">Artist</string>

View file

@ -110,5 +110,20 @@
<style name="TabTextAppearance" parent="TextAppearance.Design.Tab"> <style name="TabTextAppearance" parent="TextAppearance.Design.Tab">
<item name="android:textAllCaps">false</item> <item name="android:textAllCaps">false</item>
<item name="textAllCaps">false</item>
<item name="android:fontFamily">@font/font</item>
<item name="android:textStyle">bold</item>
</style>
<style name="TabLayoutStyle" parent="Base.Widget.Design.TabLayout">
<item name="tabIndicator">@drawable/tab_indicator</item>
<item name="tabIndicatorFullWidth">false</item>
<item name="tabIndicatorAnimationDuration">@integer/anim_duration_medium</item>
<item name="tabGravity">fill</item>
<item name="tabIndicatorHeight">4dp</item>
<item name="tabInlineLabel">true</item>
<item name="tabTextAppearance">@style/TabTextAppearance</item>
<item name="android:layout_width">match_parent</item>
<item name="android:layout_height">wrap_content</item>
</style> </style>
</resources> </resources>

View file

@ -1,12 +1,12 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android" <appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools" xmlns:tools="http://schemas.android.com/tools"
android:initialLayout="@layout/app_widget_small" android:initialLayout="@layout/app_widget_small"
android:minHeight="@dimen/app_widget_small_min_height" android:minWidth="@dimen/app_widget_small_min_width"
android:minWidth="@dimen/app_widget_small_min_width" android:minHeight="@dimen/app_widget_small_min_height"
android:resizeMode="horizontal|vertical" android:resizeMode="horizontal|vertical"
android:updatePeriodMillis="0" android:updatePeriodMillis="0"
android:widgetCategory="keyguard|home_screen" android:widgetCategory="keyguard|home_screen"
tools:ignore="UnusedAttribute"/> tools:ignore="UnusedAttribute" />
<!--android:previewImage="@drawable/app_widget_classic"--> <!--android:previewImage="@drawable/app_widget_classic"-->

View file

@ -0,0 +1,8 @@
<?xml version="1.0" encoding="utf-8"?>
<appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android"
android:initialLayout="@layout/app_widget_text"
android:minWidth="@dimen/app_widget_small_min_width"
android:minHeight="@dimen/app_widget_small_min_height"
android:resizeMode="horizontal|vertical"
android:updatePeriodMillis="0"
android:widgetCategory="keyguard|home_screen" />

View file

@ -64,6 +64,7 @@
<sourceFolder url="file://$MODULE_DIR$/build/generated/res/rs/debug" type="java-resource" /> <sourceFolder url="file://$MODULE_DIR$/build/generated/res/rs/debug" type="java-resource" />
<sourceFolder url="file://$MODULE_DIR$/build/generated/res/resValues/debug" type="java-resource" /> <sourceFolder url="file://$MODULE_DIR$/build/generated/res/resValues/debug" type="java-resource" />
<sourceFolder url="file://$MODULE_DIR$/build/generated/source/apt/androidTest/debug" isTestSource="true" generated="true" /> <sourceFolder url="file://$MODULE_DIR$/build/generated/source/apt/androidTest/debug" isTestSource="true" generated="true" />
<sourceFolder url="file://$MODULE_DIR$/build/generated/not_namespaced_r_class_sources/debugAndroidTest/processDebugAndroidTestResources/r" isTestSource="true" generated="true" />
<sourceFolder url="file://$MODULE_DIR$/build/generated/source/aidl/androidTest/debug" isTestSource="true" generated="true" /> <sourceFolder url="file://$MODULE_DIR$/build/generated/source/aidl/androidTest/debug" isTestSource="true" generated="true" />
<sourceFolder url="file://$MODULE_DIR$/build/generated/source/buildConfig/androidTest/debug" isTestSource="true" generated="true" /> <sourceFolder url="file://$MODULE_DIR$/build/generated/source/buildConfig/androidTest/debug" isTestSource="true" generated="true" />
<sourceFolder url="file://$MODULE_DIR$/build/generated/source/rs/androidTest/debug" isTestSource="true" generated="true" /> <sourceFolder url="file://$MODULE_DIR$/build/generated/source/rs/androidTest/debug" isTestSource="true" generated="true" />
@ -112,21 +113,16 @@
<sourceFolder url="file://$MODULE_DIR$/src/test/java" isTestSource="true" /> <sourceFolder url="file://$MODULE_DIR$/src/test/java" isTestSource="true" />
<sourceFolder url="file://$MODULE_DIR$/src/test/rs" isTestSource="true" /> <sourceFolder url="file://$MODULE_DIR$/src/test/rs" isTestSource="true" />
<sourceFolder url="file://$MODULE_DIR$/src/test/shaders" isTestSource="true" /> <sourceFolder url="file://$MODULE_DIR$/src/test/shaders" isTestSource="true" />
<excludeFolder url="file://$MODULE_DIR$/build/generated/not_namespaced_r_class_sources" />
<excludeFolder url="file://$MODULE_DIR$/build/generated/source/r" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/aapt_friendly_merged_manifests" /> <excludeFolder url="file://$MODULE_DIR$/build/intermediates/aapt_friendly_merged_manifests" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/annotation_processor_list" /> <excludeFolder url="file://$MODULE_DIR$/build/intermediates/annotation_processor_list" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/annotations_typedef_file" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/annotations_zip" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/check-manifest" /> <excludeFolder url="file://$MODULE_DIR$/build/intermediates/check-manifest" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/consumer_proguard_file" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/incremental" /> <excludeFolder url="file://$MODULE_DIR$/build/intermediates/incremental" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/intermediate-jars" /> <excludeFolder url="file://$MODULE_DIR$/build/intermediates/intermediate-jars" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/javac" /> <excludeFolder url="file://$MODULE_DIR$/build/intermediates/javac" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/jniLibs" /> <excludeFolder url="file://$MODULE_DIR$/build/intermediates/jniLibs" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/library_and_local_jars_jni" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/library_assets" /> <excludeFolder url="file://$MODULE_DIR$/build/intermediates/library_assets" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/merged_manifests" /> <excludeFolder url="file://$MODULE_DIR$/build/intermediates/merged_manifests" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/packaged-classes" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/packaged_res" /> <excludeFolder url="file://$MODULE_DIR$/build/intermediates/packaged_res" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/public_res" /> <excludeFolder url="file://$MODULE_DIR$/build/intermediates/public_res" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/res" /> <excludeFolder url="file://$MODULE_DIR$/build/intermediates/res" />
@ -140,47 +136,47 @@
</content> </content>
<orderEntry type="jdk" jdkName="Android API 28 Platform" jdkType="Android SDK" /> <orderEntry type="jdk" jdkName="Android API 28 Platform" jdkType="Android SDK" />
<orderEntry type="sourceFolder" forTests="false" /> <orderEntry type="sourceFolder" forTests="false" />
<orderEntry type="library" name="Gradle: androidx.swiperefreshlayout:swiperefreshlayout:1.0.0@aar" level="project" /> <orderEntry type="library" name="Gradle: androidx.slidingpanelayout:slidingpanelayout-1.0.0" level="project" />
<orderEntry type="library" name="Gradle: androidx.legacy:legacy-support-core-ui:1.0.0@aar" level="project" />
<orderEntry type="library" name="Gradle: androidx.viewpager:viewpager:1.0.0@aar" level="project" />
<orderEntry type="library" name="Gradle: com.google.android.material:material:1.0.0@aar" level="project" />
<orderEntry type="library" name="Gradle: androidx.loader:loader:1.0.0@aar" level="project" />
<orderEntry type="library" name="Gradle: org.jetbrains.kotlin:kotlin-stdlib:1.3.10@jar" level="project" /> <orderEntry type="library" name="Gradle: org.jetbrains.kotlin:kotlin-stdlib:1.3.10@jar" level="project" />
<orderEntry type="library" name="Gradle: androidx.drawerlayout:drawerlayout:1.0.0@aar" level="project" /> <orderEntry type="library" name="Gradle: androidx.lifecycle:lifecycle-livedata-2.0.0" level="project" />
<orderEntry type="library" name="Gradle: androidx.documentfile:documentfile:1.0.0@aar" level="project" /> <orderEntry type="library" name="Gradle: androidx.lifecycle:lifecycle-runtime-2.0.0" level="project" />
<orderEntry type="library" name="Gradle: androidx.localbroadcastmanager:localbroadcastmanager:1.0.0@aar" level="project" /> <orderEntry type="library" name="Gradle: androidx.drawerlayout:drawerlayout-1.0.0" level="project" />
<orderEntry type="library" name="Gradle: androidx.appcompat:appcompat:1.0.2@aar" level="project" /> <orderEntry type="library" name="Gradle: androidx.lifecycle:lifecycle-livedata-core-2.0.0" level="project" />
<orderEntry type="library" name="Gradle: androidx.recyclerview:recyclerview:1.0.0@aar" level="project" /> <orderEntry type="library" name="Gradle: androidx.cardview:cardview-1.0.0" level="project" />
<orderEntry type="library" name="Gradle: androidx.cardview:cardview:1.0.0@aar" level="project" /> <orderEntry type="library" name="Gradle: androidx.core:core-1.0.1" level="project" />
<orderEntry type="library" name="Gradle: androidx.lifecycle:lifecycle-runtime:2.0.0@aar" level="project" /> <orderEntry type="library" name="Gradle: me.zhanghai.android.materialprogressbar:library-1.4.2" level="project" />
<orderEntry type="library" name="Gradle: androidx.lifecycle:lifecycle-livedata-core:2.0.0@aar" level="project" /> <orderEntry type="library" name="Gradle: androidx.appcompat:appcompat-1.0.2" level="project" />
<orderEntry type="library" name="Gradle: androidx.cursoradapter:cursoradapter:1.0.0@aar" level="project" /> <orderEntry type="library" name="Gradle: com.google.android.material:material-1.0.0" level="project" />
<orderEntry type="library" name="Gradle: androidx.lifecycle:lifecycle-livedata:2.0.0@aar" level="project" /> <orderEntry type="library" name="Gradle: androidx.transition:transition-1.0.0" level="project" />
<orderEntry type="library" name="Gradle: androidx.customview:customview:1.0.0@aar" level="project" /> <orderEntry type="library" name="Gradle: androidx.versionedparcelable:versionedparcelable-1.0.0" level="project" />
<orderEntry type="library" name="Gradle: androidx.vectordrawable:vectordrawable-animated:1.0.0@aar" level="project" /> <orderEntry type="library" name="Gradle: androidx.legacy:legacy-support-core-utils-1.0.0" level="project" />
<orderEntry type="library" name="Gradle: androidx.asynclayoutinflater:asynclayoutinflater:1.0.0@aar" level="project" /> <orderEntry type="library" name="Gradle: androidx.fragment:fragment-1.0.0" level="project" />
<orderEntry type="library" name="Gradle: androidx.vectordrawable:vectordrawable:1.0.1@aar" level="project" />
<orderEntry type="library" name="Gradle: androidx.interpolator:interpolator:1.0.0@aar" level="project" />
<orderEntry type="library" name="Gradle: androidx.fragment:fragment:1.0.0@aar" level="project" />
<orderEntry type="library" name="Gradle: androidx.lifecycle:lifecycle-common:2.0.0@jar" level="project" /> <orderEntry type="library" name="Gradle: androidx.lifecycle:lifecycle-common:2.0.0@jar" level="project" />
<orderEntry type="library" name="Gradle: androidx.legacy:legacy-support-core-utils:1.0.0@aar" level="project" /> <orderEntry type="library" name="Gradle: androidx.swiperefreshlayout:swiperefreshlayout-1.0.0" level="project" />
<orderEntry type="library" name="Gradle: androidx.print:print:1.0.0@aar" level="project" /> <orderEntry type="library" name="Gradle: com.afollestad.material-dialogs:commons-0.9.6.0" level="project" />
<orderEntry type="library" name="Gradle: androidx.versionedparcelable:versionedparcelable:1.0.0@aar" level="project" />
<orderEntry type="library" name="Gradle: me.zhanghai.android.materialprogressbar:library:1.4.2@aar" level="project" />
<orderEntry type="library" name="Gradle: org.jetbrains:annotations:13.0@jar" level="project" /> <orderEntry type="library" name="Gradle: org.jetbrains:annotations:13.0@jar" level="project" />
<orderEntry type="library" name="Gradle: androidx.lifecycle:lifecycle-viewmodel:2.0.0@aar" level="project" /> <orderEntry type="library" name="Gradle: androidx.lifecycle:lifecycle-viewmodel-2.0.0" level="project" />
<orderEntry type="library" name="Gradle: androidx.coordinatorlayout:coordinatorlayout-1.0.0" level="project" />
<orderEntry type="library" name="Gradle: org.jetbrains.kotlin:kotlin-stdlib-common:1.3.10@jar" level="project" /> <orderEntry type="library" name="Gradle: org.jetbrains.kotlin:kotlin-stdlib-common:1.3.10@jar" level="project" />
<orderEntry type="library" name="Gradle: androidx.documentfile:documentfile-1.0.0" level="project" />
<orderEntry type="library" name="Gradle: org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.3.10@jar" level="project" /> <orderEntry type="library" name="Gradle: org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.3.10@jar" level="project" />
<orderEntry type="library" name="Gradle: androidx.slidingpanelayout:slidingpanelayout:1.0.0@aar" level="project" />
<orderEntry type="library" name="Gradle: androidx.arch.core:core-common:2.0.0@jar" level="project" /> <orderEntry type="library" name="Gradle: androidx.arch.core:core-common:2.0.0@jar" level="project" />
<orderEntry type="library" name="Gradle: androidx.transition:transition:1.0.0@aar" level="project" /> <orderEntry type="library" name="Gradle: androidx.viewpager:viewpager-1.0.0" level="project" />
<orderEntry type="library" name="Gradle: androidx.recyclerview:recyclerview-1.0.0" level="project" />
<orderEntry type="library" name="Gradle: androidx.arch.core:core-runtime-2.0.0" level="project" />
<orderEntry type="library" name="Gradle: androidx.preference:preference-1.0.0" level="project" />
<orderEntry type="library" name="Gradle: androidx.legacy:legacy-support-core-ui-1.0.0" level="project" />
<orderEntry type="library" name="Gradle: androidx.annotation:annotation:1.0.0@jar" level="project" /> <orderEntry type="library" name="Gradle: androidx.annotation:annotation:1.0.0@jar" level="project" />
<orderEntry type="library" name="Gradle: androidx.coordinatorlayout:coordinatorlayout:1.0.0@aar" level="project" /> <orderEntry type="library" name="Gradle: androidx.interpolator:interpolator-1.0.0" level="project" />
<orderEntry type="library" name="Gradle: androidx.preference:preference:1.0.0@aar" level="project" /> <orderEntry type="library" name="Gradle: com.afollestad.material-dialogs:core-0.9.6.0" level="project" />
<orderEntry type="library" name="Gradle: androidx.arch.core:core-runtime:2.0.0@aar" level="project" /> <orderEntry type="library" name="Gradle: androidx.vectordrawable:vectordrawable-1.0.1" level="project" />
<orderEntry type="library" name="Gradle: androidx.core:core:1.0.1@aar" level="project" /> <orderEntry type="library" name="Gradle: androidx.vectordrawable:vectordrawable-animated-1.0.0" level="project" />
<orderEntry type="library" name="Gradle: com.afollestad.material-dialogs:core:0.9.6.0@aar" level="project" /> <orderEntry type="library" name="Gradle: androidx.loader:loader-1.0.0" level="project" />
<orderEntry type="library" name="Gradle: androidx.customview:customview-1.0.0" level="project" />
<orderEntry type="library" name="Gradle: androidx.localbroadcastmanager:localbroadcastmanager-1.0.0" level="project" />
<orderEntry type="library" name="Gradle: androidx.asynclayoutinflater:asynclayoutinflater-1.0.0" level="project" />
<orderEntry type="library" name="Gradle: androidx.cursoradapter:cursoradapter-1.0.0" level="project" />
<orderEntry type="library" name="Gradle: androidx.print:print-1.0.0" level="project" />
<orderEntry type="library" name="Gradle: androidx.collection:collection:1.0.0@jar" level="project" /> <orderEntry type="library" name="Gradle: androidx.collection:collection:1.0.0@jar" level="project" />
<orderEntry type="library" name="Gradle: com.afollestad.material-dialogs:commons:0.9.6.0@aar" level="project" />
</component> </component>
</module> </module>