This commit is contained in:
h4h13 2018-11-05 19:23:07 +05:30
parent 3d7ba2afc6
commit 08e00b89c5
341 changed files with 7612 additions and 6811 deletions

View file

@ -29,9 +29,9 @@
<content url="file://$MODULE_DIR$"> <content url="file://$MODULE_DIR$">
<sourceFolder url="file://$MODULE_DIR$/build/generated/source/apt/normal/debug" isTestSource="false" generated="true" /> <sourceFolder url="file://$MODULE_DIR$/build/generated/source/apt/normal/debug" isTestSource="false" generated="true" />
<sourceFolder url="file://$MODULE_DIR$/build/generated/not_namespaced_r_class_sources/normalDebug/processNormalDebugResources/r" isTestSource="false" generated="true" /> <sourceFolder url="file://$MODULE_DIR$/build/generated/not_namespaced_r_class_sources/normalDebug/processNormalDebugResources/r" isTestSource="false" generated="true" />
<sourceFolder url="file://$MODULE_DIR$/build/generated/aidl_source_output_dir/normalDebug/compileNormalDebugAidl/out" isTestSource="false" generated="true" /> <sourceFolder url="file://$MODULE_DIR$/build/generated/source/aidl/normal/debug" isTestSource="false" generated="true" />
<sourceFolder url="file://$MODULE_DIR$/build/generated/source/buildConfig/normal/debug" isTestSource="false" generated="true" /> <sourceFolder url="file://$MODULE_DIR$/build/generated/source/buildConfig/normal/debug" isTestSource="false" generated="true" />
<sourceFolder url="file://$MODULE_DIR$/build/generated/renderscript_source_output_dir/normalDebug/compileNormalDebugRenderscript/out" isTestSource="false" generated="true" /> <sourceFolder url="file://$MODULE_DIR$/build/generated/source/rs/normal/debug" isTestSource="false" generated="true" />
<sourceFolder url="file://$MODULE_DIR$/build/generated/res/rs/normal/debug" type="java-resource" /> <sourceFolder url="file://$MODULE_DIR$/build/generated/res/rs/normal/debug" type="java-resource" />
<sourceFolder url="file://$MODULE_DIR$/build/generated/res/resValues/normal/debug" type="java-resource" /> <sourceFolder url="file://$MODULE_DIR$/build/generated/res/resValues/normal/debug" type="java-resource" />
<sourceFolder url="file://$MODULE_DIR$/src/normalDebug/res" type="java-resource" /> <sourceFolder url="file://$MODULE_DIR$/src/normalDebug/res" type="java-resource" />
@ -43,9 +43,9 @@
<sourceFolder url="file://$MODULE_DIR$/src/normalDebug/shaders" isTestSource="false" /> <sourceFolder url="file://$MODULE_DIR$/src/normalDebug/shaders" isTestSource="false" />
<sourceFolder url="file://$MODULE_DIR$/build/generated/source/apt/androidTest/normal/debug" isTestSource="true" generated="true" /> <sourceFolder url="file://$MODULE_DIR$/build/generated/source/apt/androidTest/normal/debug" isTestSource="true" generated="true" />
<sourceFolder url="file://$MODULE_DIR$/build/generated/not_namespaced_r_class_sources/normalDebugAndroidTest/processNormalDebugAndroidTestResources/r" isTestSource="true" generated="true" /> <sourceFolder url="file://$MODULE_DIR$/build/generated/not_namespaced_r_class_sources/normalDebugAndroidTest/processNormalDebugAndroidTestResources/r" isTestSource="true" generated="true" />
<sourceFolder url="file://$MODULE_DIR$/build/generated/aidl_source_output_dir/normalDebugAndroidTest/compileNormalDebugAndroidTestAidl/out" isTestSource="true" generated="true" /> <sourceFolder url="file://$MODULE_DIR$/build/generated/source/aidl/androidTest/normal/debug" isTestSource="true" generated="true" />
<sourceFolder url="file://$MODULE_DIR$/build/generated/source/buildConfig/androidTest/normal/debug" isTestSource="true" generated="true" /> <sourceFolder url="file://$MODULE_DIR$/build/generated/source/buildConfig/androidTest/normal/debug" isTestSource="true" generated="true" />
<sourceFolder url="file://$MODULE_DIR$/build/generated/renderscript_source_output_dir/normalDebugAndroidTest/compileNormalDebugAndroidTestRenderscript/out" isTestSource="true" generated="true" /> <sourceFolder url="file://$MODULE_DIR$/build/generated/source/rs/androidTest/normal/debug" isTestSource="true" generated="true" />
<sourceFolder url="file://$MODULE_DIR$/build/generated/res/rs/androidTest/normal/debug" type="java-test-resource" /> <sourceFolder url="file://$MODULE_DIR$/build/generated/res/rs/androidTest/normal/debug" type="java-test-resource" />
<sourceFolder url="file://$MODULE_DIR$/build/generated/res/resValues/androidTest/normal/debug" type="java-test-resource" /> <sourceFolder url="file://$MODULE_DIR$/build/generated/res/resValues/androidTest/normal/debug" type="java-test-resource" />
<sourceFolder url="file://$MODULE_DIR$/src/androidTestNormalDebug/res" type="java-test-resource" /> <sourceFolder url="file://$MODULE_DIR$/src/androidTestNormalDebug/res" type="java-test-resource" />
@ -131,39 +131,33 @@
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/blame" /> <excludeFolder url="file://$MODULE_DIR$/build/intermediates/blame" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/build-info" /> <excludeFolder url="file://$MODULE_DIR$/build/intermediates/build-info" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/builds" /> <excludeFolder url="file://$MODULE_DIR$/build/intermediates/builds" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/check-libraries" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/check-manifest" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/checkNormalDebugClasspath" /> <excludeFolder url="file://$MODULE_DIR$/build/intermediates/checkNormalDebugClasspath" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/checkNormalReleaseClasspath" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/checkSansDebugClasspath" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/checkSansReleaseClasspath" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/check_manifest_result" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/compatible_screen_manifest" /> <excludeFolder url="file://$MODULE_DIR$/build/intermediates/compatible_screen_manifest" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/incremental" /> <excludeFolder url="file://$MODULE_DIR$/build/intermediates/incremental" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/incremental-classes" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/incremental-runtime-classes" /> <excludeFolder url="file://$MODULE_DIR$/build/intermediates/incremental-runtime-classes" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/incremental-verifier" /> <excludeFolder url="file://$MODULE_DIR$/build/intermediates/incremental-verifier" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/instant-run-apk" /> <excludeFolder url="file://$MODULE_DIR$/build/intermediates/instant-run-apk" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/instant_run_app_info_output_file" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/instant_run_main_apk_resources" /> <excludeFolder url="file://$MODULE_DIR$/build/intermediates/instant_run_main_apk_resources" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/instant_run_merged_manifests" /> <excludeFolder url="file://$MODULE_DIR$/build/intermediates/instant_run_merged_manifests" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/instant_run_split_apk_resources" /> <excludeFolder url="file://$MODULE_DIR$/build/intermediates/instant_run_split_apk_resources" />
<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/linked_res_for_bundle" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/manifest-checker" /> <excludeFolder url="file://$MODULE_DIR$/build/intermediates/manifest-checker" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/merged-not-compiled-resources" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/merged_assets" /> <excludeFolder url="file://$MODULE_DIR$/build/intermediates/merged_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/module_bundle" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/prebuild" /> <excludeFolder url="file://$MODULE_DIR$/build/intermediates/prebuild" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/processed_res" /> <excludeFolder url="file://$MODULE_DIR$/build/intermediates/processed_res" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/proguard-rules" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/reload-dex" /> <excludeFolder url="file://$MODULE_DIR$/build/intermediates/reload-dex" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/res" /> <excludeFolder url="file://$MODULE_DIR$/build/intermediates/res" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/resources" /> <excludeFolder url="file://$MODULE_DIR$/build/intermediates/resources" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/rs" /> <excludeFolder url="file://$MODULE_DIR$/build/intermediates/rs" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/shader_assets" /> <excludeFolder url="file://$MODULE_DIR$/build/intermediates/shader_assets" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/shaders" /> <excludeFolder url="file://$MODULE_DIR$/build/intermediates/shaders" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/shrunk_linked_res_for_bundle" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/split-apk" /> <excludeFolder url="file://$MODULE_DIR$/build/intermediates/split-apk" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/split_list" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/symbols" /> <excludeFolder url="file://$MODULE_DIR$/build/intermediates/symbols" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/transforms" /> <excludeFolder url="file://$MODULE_DIR$/build/intermediates/transforms" />
<excludeFolder url="file://$MODULE_DIR$/build/outputs" /> <excludeFolder url="file://$MODULE_DIR$/build/outputs" />
@ -172,82 +166,83 @@
<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: com.github.bumptech.glide:okhttp3-integration:1.5.0@jar" level="project" /> <orderEntry type="library" name="Gradle: com.github.bumptech.glide:okhttp3-integration:1.5.0@jar" level="project" />
<orderEntry type="library" name="Gradle: androidx.drawerlayout:drawerlayout:1.0.0-rc02@aar" level="project" /> <orderEntry type="library" name="Gradle: androidx.slidingpanelayout:slidingpanelayout-1.0.0" level="project" />
<orderEntry type="library" name="Gradle: com.github.ksoichiro:android-observablescrollview:1.6.0@aar" level="project" /> <orderEntry type="library" name="Gradle: com.google.android.gms:play-services-basement-15.0.1" level="project" />
<orderEntry type="library" name="Gradle: androidx.asynclayoutinflater:asynclayoutinflater:1.0.0-rc02@aar" level="project" /> <orderEntry type="library" name="Gradle: com.sothree.slidinguppanel:library-3.4.0" level="project" />
<orderEntry type="library" name="Gradle: androidx.multidex:multidex:2.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.preference:preference:1.0.0-rc01@aar" level="project" />
<orderEntry type="library" name="Gradle: androidx.lifecycle:lifecycle-viewmodel:2.0.0-rc01@aar" level="project" />
<orderEntry type="library" name="Gradle: com.squareup.retrofit2:retrofit:2.4.0@jar" level="project" /> <orderEntry type="library" name="Gradle: com.squareup.retrofit2:retrofit:2.4.0@jar" level="project" />
<orderEntry type="library" name="Gradle: androidx.arch.core:core-common:2.0.0-rc01@jar" level="project" /> <orderEntry type="library" name="Gradle: androidx.cardview:cardview-1.0.0" level="project" />
<orderEntry type="library" name="Gradle: androidx.localbroadcastmanager:localbroadcastmanager:1.0.0-rc02@aar" level="project" /> <orderEntry type="library" name="Gradle: androidx.appcompat:appcompat-1.0.0" level="project" />
<orderEntry type="library" name="Gradle: androidx.collection:collection:1.0.0-rc02@jar" level="project" /> <orderEntry type="library" name="Gradle: com.afollestad:material-cab-0.1.12" level="project" />
<orderEntry type="library" name="Gradle: uk.co.chrisjenx:calligraphy:2.3.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.palette:palette:1.0.0-rc02@aar" level="project" /> <orderEntry type="library" name="Gradle: androidx.versionedparcelable:versionedparcelable-1.0.0" level="project" />
<orderEntry type="library" name="Gradle: com.google.android.material:material:1.0.0-rc01@aar" level="project" /> <orderEntry type="library" name="Gradle: com.h6ah4i.android.widget.advrecyclerview:advrecyclerview-0.11.0" level="project" />
<orderEntry type="library" name="Gradle: androidx.legacy:legacy-support-v4:1.0.0-rc01@aar" level="project" /> <orderEntry type="library" name="Gradle: androidx.fragment:fragment-1.0.0" level="project" />
<orderEntry type="library" name="Gradle: androidx.documentfile:documentfile:1.0.0-rc02@aar" level="project" /> <orderEntry type="library" name="Gradle: androidx.swiperefreshlayout:swiperefreshlayout-1.0.0" level="project" />
<orderEntry type="library" name="Gradle: androidx.legacy:legacy-support-core-utils:1.0.0-rc02@aar" level="project" /> <orderEntry type="library" name="Gradle: androidx.lifecycle:lifecycle-viewmodel-2.0.0" level="project" />
<orderEntry type="library" name="Gradle: androidx.print:print:1.0.0-rc02@aar" level="project" /> <orderEntry type="library" name="Gradle: androidx.coordinatorlayout:coordinatorlayout-1.0.0" level="project" />
<orderEntry type="library" name="Gradle: com.google.android.gms:play-services-cast:16.0.2@aar" level="project" /> <orderEntry type="library" name="Gradle: com.github.kabouzeid:RecyclerView-FastScroll-1.0.16-kmod" level="project" />
<orderEntry type="library" name="Gradle: androidx.gridlayout:gridlayout:1.0.0-rc01@aar" level="project" />
<orderEntry type="library" name="Gradle: com.squareup.okio:okio:1.14.0@jar" level="project" /> <orderEntry type="library" name="Gradle: com.squareup.okio:okio:1.14.0@jar" level="project" />
<orderEntry type="library" name="Gradle: androidx.versionedparcelable:versionedparcelable:1.0.0-rc02@aar" level="project" /> <orderEntry type="library" name="Gradle: androidx.documentfile:documentfile-1.0.0" level="project" />
<orderEntry type="library" name="Gradle: androidx.lifecycle:lifecycle-common:2.0.0-rc01@jar" level="project" /> <orderEntry type="library" name="Gradle: com.github.ksoichiro:android-observablescrollview-1.6.0" level="project" />
<orderEntry type="library" name="Gradle: androidx.cursoradapter:cursoradapter:1.0.0-rc02@aar" level="project" /> <orderEntry type="library" name="Gradle: com.google.android.gms:play-services-cast-framework-16.0.2" level="project" />
<orderEntry type="library" name="Gradle: androidx.customview:customview:1.0.0-rc02@aar" level="project" /> <orderEntry type="library" name="Gradle: androidx.recyclerview:recyclerview-1.0.0" level="project" />
<orderEntry type="library" name="Gradle: com.google.android.gms:play-services-cast-framework:16.0.2@aar" level="project" />
<orderEntry type="library" name="Gradle: androidx.slidingpanelayout:slidingpanelayout:1.0.0-rc02@aar" level="project" />
<orderEntry type="library" name="Gradle: com.squareup.okhttp3:logging-interceptor:3.11.0@jar" level="project" /> <orderEntry type="library" name="Gradle: com.squareup.okhttp3:logging-interceptor:3.11.0@jar" level="project" />
<orderEntry type="library" name="Gradle: androidx.core:core:1.0.0-rc02@aar" level="project" /> <orderEntry type="library" name="Gradle: androidx.interpolator:interpolator-1.0.0" level="project" />
<orderEntry type="library" name="Gradle: com.jakewharton:butterknife-runtime:9.0.0-SNAPSHOT@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.appcompat:appcompat:1.0.0-rc02@aar" level="project" /> <orderEntry type="library" name="Gradle: androidx.vectordrawable:vectordrawable-1.0.0" level="project" />
<orderEntry type="library" name="Gradle: com.google.android.gms:play-services-base:15.0.1@aar" level="project" />
<orderEntry type="library" name="Gradle: androidx.lifecycle:lifecycle-livedata-core:2.0.0-rc01@aar" level="project" />
<orderEntry type="library" name="Gradle: com.squareup.retrofit2:adapter-rxjava2:2.4.0@jar" level="project" /> <orderEntry type="library" name="Gradle: com.squareup.retrofit2:adapter-rxjava2:2.4.0@jar" level="project" />
<orderEntry type="library" name="Gradle: com.anjlab.android.iab.v3:library:1.0.44@jar" level="project" /> <orderEntry type="library" name="Gradle: com.anjlab.android.iab.v3:library:1.0.44@jar" level="project" />
<orderEntry type="library" name="Gradle: uk.co.chrisjenx:calligraphy-2.3.0" level="project" />
<orderEntry type="library" name="Gradle: com.squareup.retrofit2:converter-gson:2.4.0@jar" level="project" /> <orderEntry type="library" name="Gradle: com.squareup.retrofit2:converter-gson:2.4.0@jar" level="project" />
<orderEntry type="library" name="Gradle: com.google.android.gms:play-services-tasks:15.0.1@aar" level="project" /> <orderEntry type="library" name="Gradle: androidx.legacy:legacy-support-v4-1.0.0" level="project" />
<orderEntry type="library" name="Gradle: androidx.mediarouter:mediarouter:1.0.0-beta01@aar" level="project" /> <orderEntry type="library" name="Gradle: androidx.palette:palette-1.0.0" level="project" />
<orderEntry type="library" name="Gradle: androidx.lifecycle:lifecycle-runtime:2.0.0-rc01@aar" level="project" /> <orderEntry type="library" name="Gradle: com.google.android.gms:play-services-tasks-15.0.1" level="project" />
<orderEntry type="library" name="Gradle: androidx.vectordrawable:vectordrawable-animated:1.0.0-rc02@aar" level="project" /> <orderEntry type="library" name="Gradle: androidx.asynclayoutinflater:asynclayoutinflater-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: com.jakewharton:butterknife-annotations:9.0.0-SNAPSHOT@jar" level="project" /> <orderEntry type="library" name="Gradle: com.jakewharton:butterknife-annotations:9.0.0-SNAPSHOT@jar" level="project" />
<orderEntry type="library" name="Gradle: __local_aars__:/Users/hemanths/Desktop/KeepSafe/RetroMusicPlayer/app/libs/juniversalchardet-1.0.3.jar:unspecified@jar" level="project" /> <orderEntry type="library" name="Gradle: __local_aars__:/Users/hemanths/Desktop/KeepSafe/RetroMusicPlayer/app/libs/juniversalchardet-1.0.3.jar:unspecified@jar" level="project" />
<orderEntry type="library" name="Gradle: androidx.fragment:fragment:1.0.0-rc02@aar" level="project" /> <orderEntry type="library" name="Gradle: io.reactivex.rxjava2:rxjava:2.1.17@jar" level="project" />
<orderEntry type="library" name="Gradle: androidx.transition:transition:1.0.0-rc01@aar" level="project" /> <orderEntry type="library" name="Gradle: com.jakewharton:butterknife-runtime-9.0.0-SNAPSHOT" level="project" />
<orderEntry type="library" name="Gradle: io.reactivex.rxjava2:rxandroid:2.0.2@aar" level="project" /> <orderEntry type="library" name="Gradle: androidx.gridlayout:gridlayout-1.0.0" level="project" />
<orderEntry type="library" name="Gradle: androidx.multidex:multidex-2.0.0" level="project" />
<orderEntry type="library" name="Gradle: androidx.lifecycle:lifecycle-runtime-2.0.0" level="project" />
<orderEntry type="library" name="Gradle: com.squareup.okhttp3:okhttp:3.11.0@jar" level="project" /> <orderEntry type="library" name="Gradle: com.squareup.okhttp3:okhttp:3.11.0@jar" level="project" />
<orderEntry type="library" name="Gradle: com.r0adkll:slidableactivity:2.0.6@aar" level="project" /> <orderEntry type="library" name="Gradle: androidx.drawerlayout:drawerlayout-1.0.0" level="project" />
<orderEntry type="library" name="Gradle: androidx.coordinatorlayout:coordinatorlayout:1.0.0-rc02@aar" level="project" /> <orderEntry type="library" name="Gradle: androidx.media:media-1.0.0" level="project" />
<orderEntry type="library" name="Gradle: io.reactivex.rxjava2:rxjava:2.1.9@jar" level="project" /> <orderEntry type="library" name="Gradle: com.r0adkll:slidableactivity-2.0.6" level="project" />
<orderEntry type="library" name="Gradle: androidx.lifecycle:lifecycle-livedata-core-2.0.0" level="project" />
<orderEntry type="library" name="Gradle: androidx.core:core-1.0.0" level="project" />
<orderEntry type="library" name="Gradle: org.reactivestreams:reactive-streams:1.0.2@jar" level="project" /> <orderEntry type="library" name="Gradle: org.reactivestreams:reactive-streams:1.0.2@jar" level="project" />
<orderEntry type="library" name="Gradle: com.github.AdrienPoupa:jaudiotagger:2.2.3@aar" level="project" /> <orderEntry type="library" name="Gradle: me.zhanghai.android.materialprogressbar:library-1.4.2" level="project" />
<orderEntry type="library" name="Gradle: com.github.bumptech.glide:glide:3.8.0@jar" level="project" /> <orderEntry type="library" name="Gradle: com.github.bumptech.glide:glide:3.8.0@jar" level="project" />
<orderEntry type="library" name="Gradle: androidx.recyclerview:recyclerview:1.0.0-rc02@aar" level="project" /> <orderEntry type="library" name="Gradle: com.google.android.gms:play-services-base-15.0.1" level="project" />
<orderEntry type="library" name="Gradle: androidx.legacy:legacy-support-core-ui:1.0.0-rc02@aar" level="project" />
<orderEntry type="library" name="Gradle: androidx.vectordrawable:vectordrawable:1.0.0-rc02@aar" level="project" />
<orderEntry type="library" name="Gradle: org.nanohttpd:nanohttpd:2.3.1@jar" level="project" /> <orderEntry type="library" name="Gradle: org.nanohttpd:nanohttpd:2.3.1@jar" level="project" />
<orderEntry type="library" name="Gradle: com.google.android.gms:play-services-basement:15.0.1@aar" level="project" /> <orderEntry type="library" name="Gradle: androidx.mediarouter:mediarouter-1.0.0" level="project" />
<orderEntry type="library" name="Gradle: com.simplecityapps:recyclerview-fastscroll:1.0.18@aar" level="project" /> <orderEntry type="library" name="Gradle: com.jakewharton:butterknife-9.0.0-SNAPSHOT" level="project" />
<orderEntry type="library" name="Gradle: androidx.swiperefreshlayout:swiperefreshlayout:1.0.0-rc02@aar" level="project" /> <orderEntry type="library" name="Gradle: androidx.transition:transition-1.0.0" level="project" />
<orderEntry type="library" name="Gradle: com.afollestad:material-cab:0.1.12@aar" level="project" /> <orderEntry type="library" name="Gradle: androidx.legacy:legacy-support-core-utils-1.0.0" level="project" />
<orderEntry type="library" name="Gradle: com.sothree.slidinguppanel:library:3.4.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.legacy:legacy-preference-v14:1.0.0-rc01@aar" level="project" /> <orderEntry type="library" name="Gradle: com.afollestad.material-dialogs:commons-0.9.6.0" level="project" />
<orderEntry type="library" name="Gradle: me.zhanghai.android.materialprogressbar:library:1.4.2@aar" level="project" /> <orderEntry type="library" name="Gradle: androidx.legacy:legacy-preference-v14-1.0.0" level="project" />
<orderEntry type="library" name="Gradle: com.jakewharton:butterknife:9.0.0-SNAPSHOT@aar" level="project" /> <orderEntry type="library" name="Gradle: com.google.android.gms:play-services-cast-16.0.2" level="project" />
<orderEntry type="library" name="Gradle: androidx.viewpager:viewpager:1.0.0-rc02@aar" level="project" /> <orderEntry type="library" name="Gradle: androidx.legacy:legacy-support-v13-1.0.0" level="project" />
<orderEntry type="library" name="Gradle: androidx.cardview:cardview:1.0.0-rc01@aar" level="project" /> <orderEntry type="library" name="Gradle: androidx.arch.core:core-common:2.0.0@jar" level="project" />
<orderEntry type="library" name="Gradle: com.h6ah4i.android.widget.advrecyclerview:advrecyclerview:0.11.0@aar" level="project" /> <orderEntry type="library" name="Gradle: androidx.viewpager:viewpager-1.0.0" level="project" />
<orderEntry type="library" name="Gradle: com.google.android.gms:play-services-flags:15.0.1@aar" level="project" /> <orderEntry type="library" name="Gradle: io.reactivex.rxjava2:rxandroid-2.0.2" 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: com.github.AdrienPoupa:jaudiotagger-2.2.3" 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.vectordrawable:vectordrawable-animated-1.0.0" level="project" />
<orderEntry type="library" name="Gradle: com.google.code.gson:gson:2.8.2@jar" level="project" /> <orderEntry type="library" name="Gradle: com.google.code.gson:gson:2.8.2@jar" level="project" />
<orderEntry type="library" name="Gradle: androidx.arch.core:core-runtime:2.0.0-rc01@aar" level="project" /> <orderEntry type="library" name="Gradle: androidx.loader:loader-1.0.0" level="project" />
<orderEntry type="library" name="Gradle: androidx.loader:loader:1.0.0-rc02@aar" level="project" /> <orderEntry type="library" name="Gradle: androidx.customview:customview-1.0.0" level="project" />
<orderEntry type="library" name="Gradle: androidx.interpolator:interpolator:1.0.0-rc02@aar" level="project" /> <orderEntry type="library" name="Gradle: androidx.localbroadcastmanager:localbroadcastmanager-1.0.0" level="project" />
<orderEntry type="library" name="Gradle: androidx.media:media:1.0.0-rc02@aar" level="project" /> <orderEntry type="library" name="Gradle: com.google.android.gms:play-services-flags-15.0.1" level="project" />
<orderEntry type="library" name="Gradle: androidx.annotation:annotation:1.0.0-rc02@jar" level="project" /> <orderEntry type="library" name="Gradle: androidx.cursoradapter:cursoradapter-1.0.0" level="project" />
<orderEntry type="library" name="Gradle: androidx.legacy:legacy-support-v13:1.0.0-rc01@aar" level="project" /> <orderEntry type="library" name="Gradle: androidx.print:print-1.0.0" level="project" />
<orderEntry type="library" name="Gradle: com.afollestad.material-dialogs:commons:0.9.6.0@aar" level="project" /> <orderEntry type="library" name="Gradle: androidx.collection:collection:1.0.0@jar" level="project" />
<orderEntry type="module" module-name="appthemehelper" /> <orderEntry type="module" module-name="appthemehelper" />
</component> </component>
</module> </module>

View file

@ -2,7 +2,7 @@ apply plugin: 'com.android.application'
android { android {
compileSdkVersion 28 compileSdkVersion 28
buildToolsVersion '28.0.2' buildToolsVersion '28.0.3'
defaultConfig { defaultConfig {
minSdkVersion 21 minSdkVersion 21
targetSdkVersion 28 targetSdkVersion 28
@ -11,12 +11,11 @@ android {
vectorDrawables.useSupportLibrary = true vectorDrawables.useSupportLibrary = true
applicationId "code.name.monkey.retromusic" applicationId "code.name.monkey.retromusic"
versionCode 232 versionCode 242
versionName '2.0.210' versionName '2.1.000'
multiDexEnabled true multiDexEnabled true
buildConfigField("String", "LASTFM_API_KEY", "\"${getProperty(getProperties('../public.properties'), 'LASTFM_API_KEY')}\"")
buildConfigField("String", "GOOGLE_PLAY_LICENSE_KEY", "\"${getProperty(getProperties('../public.properties'), 'GOOGLE_PLAY_LICENSE_KEY')}\"") buildConfigField("String", "GOOGLE_PLAY_LICENSE_KEY", "\"${getProperty(getProperties('../public.properties'), 'GOOGLE_PLAY_LICENSE_KEY')}\"")
} }
signingConfigs { signingConfigs {
@ -46,12 +45,14 @@ android {
flavorDimensions "default" flavorDimensions "default"
productFlavors { productFlavors {
normal { normal {
versionCode defaultConfig.versionCode + 10000 versionCode defaultConfig.versionCode + 10000
versionName defaultConfig.versionName + "_" + getDate() versionName defaultConfig.versionName + "_" + getDate()
dimension "default" dimension "default"
} }
} }
packagingOptions { packagingOptions {
@ -73,16 +74,7 @@ android {
resolutionStrategy.force 'com.google.code.findbugs:jsr305:1.3.9' resolutionStrategy.force 'com.google.code.findbugs:jsr305:1.3.9'
} }
/*configurations.all {
resolutionStrategy.eachDependency { DependencyResolveDetails details ->
def requested = details.requested
if (requested.group == 'com.android.support') {
if (!(requested.name.startsWith("multidex") || requested.name.startsWith("mediarouter"))) {
details.useVersion $supportLibVersion
}
}
}
}*/
} }
def getProperties(String fileName) { def getProperties(String fileName) {
@ -119,28 +111,30 @@ dependencies {
implementation "com.google.android.material:material:$supportLibVersion" implementation "com.google.android.material:material:$supportLibVersion"
//For casting //For casting
implementation 'androidx.mediarouter:mediarouter:1.0.0-beta01' implementation 'androidx.mediarouter:mediarouter:1.0.0'
implementation 'com.google.android.gms:play-services-cast-framework:16.0.2' implementation 'com.google.android.gms:play-services-cast-framework:16.0.2'
implementation "com.squareup.retrofit2:retrofit:2.4.0" implementation "com.squareup.retrofit2:retrofit:2.4.0"
implementation "com.squareup.retrofit2:converter-gson:2.4.0" implementation "com.squareup.retrofit2:converter-gson:2.4.0"
implementation "com.squareup.retrofit2:adapter-rxjava2:2.4.0" implementation "com.squareup.retrofit2:adapter-rxjava2:2.4.0"
implementation "com.jakewharton:butterknife:$butterKnife" implementation "com.jakewharton:butterknife:$butterKnife"
annotationProcessor "com.jakewharton:butterknife-compiler:$butterKnife" annotationProcessor "com.jakewharton:butterknife-compiler:$butterKnife"
implementation "com.afollestad.material-dialogs:core:$materialDialog" implementation "com.afollestad.material-dialogs:core:$materialDialog"
implementation "com.afollestad.material-dialogs:commons:$materialDialog" implementation "com.afollestad.material-dialogs:commons:$materialDialog"
implementation 'com.afollestad:material-cab:0.1.12' implementation 'com.afollestad:material-cab:0.1.12'
implementation 'com.github.bumptech.glide:glide:3.8.0' implementation 'com.github.bumptech.glide:glide:3.8.0'
implementation 'com.github.bumptech.glide:okhttp3-integration:1.5.0' implementation 'com.github.bumptech.glide:okhttp3-integration:1.5.0'
implementation 'io.reactivex.rxjava2:rxandroid:2.0.2' implementation 'io.reactivex.rxjava2:rxandroid:2.0.2'
implementation 'io.reactivex.rxjava2:rxjava:2.1.9' implementation 'io.reactivex.rxjava2:rxjava:2.1.17'
implementation 'com.squareup.okhttp3:logging-interceptor:3.11.0' implementation 'com.squareup.okhttp3:logging-interceptor:3.11.0'
implementation 'com.squareup.okhttp3:okhttp:3.11.0' implementation 'com.squareup.okhttp3:okhttp:3.11.0'
implementation('com.h6ah4i.android.widget.advrecyclerview:advrecyclerview:0.11.0@aar') { implementation('com.h6ah4i.android.widget.advrecyclerview:advrecyclerview:0.11.0@aar') {
transitive = true transitive = true
} }
implementation 'com.github.ksoichiro:android-observablescrollview:1.6.0' implementation 'com.github.ksoichiro:android-observablescrollview:1.6.0'
implementation 'com.simplecityapps:recyclerview-fastscroll:1.0.18' implementation 'com.github.kabouzeid:RecyclerView-FastScroll:1.0.16-kmod'
implementation 'com.anjlab.android.iab.v3:library:1.0.44' implementation 'com.anjlab.android.iab.v3:library:1.0.44'
/*UI Library*/ /*UI Library*/

View file

@ -95,7 +95,6 @@
<data android:mimeType="vnd.android.cursor.dir/audio" /> <data android:mimeType="vnd.android.cursor.dir/audio" />
</intent-filter> </intent-filter>
</activity> </activity>
<activity android:name=".ui.activities.AlbumDetailsActivity" /> <activity android:name=".ui.activities.AlbumDetailsActivity" />
<activity android:name=".ui.activities.ArtistDetailActivity" /> <activity android:name=".ui.activities.ArtistDetailActivity" />
<activity android:name=".ui.activities.PlaylistDetailActivity" /> <activity android:name=".ui.activities.PlaylistDetailActivity" />
@ -133,7 +132,6 @@
<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">
@ -153,14 +151,16 @@
<!-- </intent-filter> --> <!-- </intent-filter> -->
<!-- </service> --> <!-- </service> -->
<!-- Widgets --> <!-- Widgets -->
<!-- <receiver <!--
<receiver
android:name=".headset.HeadsetReceiver" android:name=".headset.HeadsetReceiver"
android:enabled="true" android:enabled="true"
android:exported="true"> android:exported="true">
<intent-filter> <intent-filter>
<action android:name="android.intent.action.HEADSET_PLUG" /> <action android:name="android.intent.action.HEADSET_PLUG" />
</intent-filter> </intent-filter>
</receiver>--> </receiver>
-->
<receiver android:name=".appwidgets.BootReceiver"> <receiver android:name=".appwidgets.BootReceiver">
<intent-filter> <intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED" /> <action android:name="android.intent.action.BOOT_COMPLETED" />
@ -222,7 +222,6 @@
</receiver> </receiver>
<!-- Widgets ends --> <!-- Widgets ends -->
<meta-data <meta-data
android:name="android.max_aspect" android:name="android.max_aspect"
android:value="2.1" /> android:value="2.1" />
@ -238,9 +237,12 @@
<meta-data <meta-data
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
<!--
<meta-data
android:name="com.google.android.gms.car.application" android:name="com.google.android.gms.car.application"
android:resource="@xml/automotive_app_desc" />--> android:resource="@xml/automotive_app_desc" />
-->
<provider <provider
android:name="androidx.core.content.FileProvider" android:name="androidx.core.content.FileProvider"
@ -252,6 +254,9 @@
android:resource="@xml/provider_paths" /> android:resource="@xml/provider_paths" />
</provider> </provider>
<activity android:name=".ui.activities.WhatsNewActivity"></activity>
<activity android:name=".ui.activities.album.SmallAlbumDetailsActivity" />
<activity android:name=".ui.activities.NowPayingActivity" />
</application> </application>
</manifest> </manifest>

View file

@ -5,6 +5,12 @@
"link": "https://t.me/FlixbusLennart", "link": "https://t.me/FlixbusLennart",
"profile_image": "https://i.imgur.com/Q5Nsx1R.jpg" "profile_image": "https://i.imgur.com/Q5Nsx1R.jpg"
}, },
{
"name": "Vitor Monteriro",
"summary": "Telegram contributor",
"link": "https://t.me/mluizvitor",
"profile_image": "https://i.imgur.com/vvpE4nn.jpg"
},
{ {
"name": "Elvan Putra", "name": "Elvan Putra",
"summary": "Design contributor", "summary": "Design contributor",
@ -14,7 +20,7 @@
{ {
"name": "Gaming Inc.", "name": "Gaming Inc.",
"summary": "Discord server maintainer", "summary": "Discord server maintainer",
"link": "https://t.me/Gaming_Inc", "link": "https://discord.gg/qTecXXn",
"profile_image": "https://i.imgur.com/5wXLrS2.jpg" "profile_image": "https://i.imgur.com/5wXLrS2.jpg"
}, },
{ {
@ -25,7 +31,7 @@
}, },
{ {
"name": "Gaurav Singh", "name": "Gaurav Singh",
"summary": "Moderator", "summary": "Telegram and Design contributor",
"link": "https://t.me/Allstargaurav", "link": "https://t.me/Allstargaurav",
"profile_image": "https://i.imgur.com/EertxDu.jpg" "profile_image": "https://i.imgur.com/EertxDu.jpg"
} }

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}; } ol { list-style-position: inside; padding-left: 0; padding-right: 0; } li { padding-top: 8px; } </style> </head> <body> <p>You can view the changelog dialog again at any time from the <i>about</i> section.</p> <h3>Version 2.0.200</h3> <ol> <li><b>Fix:</b> artist name on card theme</li> <li><b>Fix:</b> dialog navigation icons colors</li> <li><b>Fix:</b> album cover edit with last.fm for above Android 8.0</li> <li><b>Fix:</b> adaptive controls for material theme</li> <li><b>Added:</b> Now playing theme settings</li> <li><b>Added:</b> home artists cover style(Settings-> Personalize-> Home artist grid)</li> <li><b>Added:</b> now playing cover sliding style(Settings-> Now playing-> Now playing album cover style) </li> <li><b>Added:</b> now playing album cover style chooser(Settings->Now playing-> Album cover theme) </li> <li><b>Added:</b> extra controls toggle for mini player(Settings-> Now playing-> Extra controls) </li> <li><b>Added:</b> faq links in about</li> <li><b>Added:</b> volume toggle for lock screen to support small screen</li> <li><b>Added:</b> on-click artist icon to artist details in album details screen</li> <li><b>Added:</b> albums and artists list style(Settings->Personalize-> Artist grid or Album grid) </li> <li><b>Added:</b> toggle home banner(Settings->Personalize-> Home banner)</li> <li><b>Improved:</b> home page UI</li> <li><b>Updated:</b> internal libs</li> <li><b>Updated:</b> synced translations</li> </ol> <p><a href="https://github.com/h4h13/RetroMusicPlayer/wiki/FAQ">FAQ's</a></p> <p>*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}; } ol { list-style-position: inside; padding-left: 0; padding-right: 0; } li { padding-top: 8px; } </style> </head> <body> <p>You can view the changelog dialog again at any time from the <i>about</i> section.</p> <h3>Version 2.0.300</h3> <ol> <li><b>Fix:</b> offer dialog showing</li> <li><b>Added:</b> zero volume pause</li> <li><b>Added:</b> more album cover skipping styles</li> <li><b>Added:</b> new animations(WIP)</li> <li><b>Added:</b> more tab titles toggle</li> <li><b>Improved:</b> home screen</li> <li><b>Updated:</b> internal libraries</li> </ol> <p><a href="https://github.com/h4h13/RetroMusicPlayer/wiki/FAQ">FAQ's</a></p> <p>*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,5 +1,6 @@
package code.name.monkey.retromusic; package code.name.monkey.retromusic;
import android.content.Context;
import android.os.Build; import android.os.Build;
import com.anjlab.android.iab.v3.BillingProcessor; import com.anjlab.android.iab.v3.BillingProcessor;
@ -24,6 +25,10 @@ public class RetroApplication extends MultiDexApplication {
return app; return app;
} }
public static Context getContext() {
return app.getApplicationContext();
}
public static boolean isProVersion() { public static boolean isProVersion() {
return BuildConfig.DEBUG || app.billingProcessor.isPurchased(PRO_VERSION_PRODUCT_ID); return BuildConfig.DEBUG || app.billingProcessor.isPurchased(PRO_VERSION_PRODUCT_ID);
} }

View file

@ -22,7 +22,7 @@ import code.name.monkey.retromusic.util.RetroUtil;
@RequiresApi(Build.VERSION_CODES.N_MR1) @RequiresApi(Build.VERSION_CODES.N_MR1)
public final class AppShortcutIconGenerator { public final class AppShortcutIconGenerator {
public static Icon generateThemedIcon(Context context, int iconId) { public static Icon generateThemedIcon(Context context, int iconId) {
if (PreferenceUtil.getInstance(context).coloredAppShortcuts()){ if (PreferenceUtil.getInstance().coloredAppShortcuts()){
return generateUserThemedIcon(context, iconId); return generateUserThemedIcon(context, iconId);
} else { } else {
return generateDefaultThemedIcon(context, iconId); return generateDefaultThemedIcon(context, iconId);

View file

@ -7,10 +7,16 @@ import android.content.Intent;
import android.graphics.Bitmap; import android.graphics.Bitmap;
import android.graphics.Point; import android.graphics.Point;
import android.graphics.drawable.Drawable; import android.graphics.drawable.Drawable;
import androidx.annotation.Nullable;
import android.text.TextUtils; import android.text.TextUtils;
import android.view.View; import android.view.View;
import android.widget.RemoteViews; import android.widget.RemoteViews;
import com.bumptech.glide.Glide;
import com.bumptech.glide.request.animation.GlideAnimation;
import com.bumptech.glide.request.target.SimpleTarget;
import com.bumptech.glide.request.target.Target;
import androidx.annotation.Nullable;
import code.name.monkey.appthemehelper.util.MaterialValueHelper; import code.name.monkey.appthemehelper.util.MaterialValueHelper;
import code.name.monkey.retromusic.Constants; import code.name.monkey.retromusic.Constants;
import code.name.monkey.retromusic.R; import code.name.monkey.retromusic.R;
@ -19,11 +25,8 @@ import code.name.monkey.retromusic.glide.SongGlideRequest;
import code.name.monkey.retromusic.model.Song; import code.name.monkey.retromusic.model.Song;
import code.name.monkey.retromusic.service.MusicService; import code.name.monkey.retromusic.service.MusicService;
import code.name.monkey.retromusic.ui.activities.MainActivity; import code.name.monkey.retromusic.ui.activities.MainActivity;
import code.name.monkey.retromusic.ui.activities.NowPayingActivity;
import code.name.monkey.retromusic.util.RetroUtil; import code.name.monkey.retromusic.util.RetroUtil;
import com.bumptech.glide.Glide;
import com.bumptech.glide.request.animation.GlideAnimation;
import com.bumptech.glide.request.target.SimpleTarget;
import com.bumptech.glide.request.target.Target;
public class AppWidgetBig extends BaseAppWidget { public class AppWidgetBig extends BaseAppWidget {
@ -149,7 +152,7 @@ public class AppWidgetBig extends BaseAppWidget {
final ComponentName serviceName = new ComponentName(context, MusicService.class); final ComponentName serviceName = new ComponentName(context, MusicService.class);
// Home // Home
action = new Intent(context, MainActivity.class); action = new Intent(context, NowPayingActivity.class);
action.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TOP); action.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TOP);
pendingIntent = PendingIntent.getActivity(context, 0, action, 0); pendingIntent = PendingIntent.getActivity(context, 0, action, 0);
views.setOnClickPendingIntent(R.id.clickable_area, pendingIntent); views.setOnClickPendingIntent(R.id.clickable_area, pendingIntent);

View file

@ -26,6 +26,7 @@ import code.name.monkey.retromusic.glide.palette.BitmapPaletteWrapper;
import code.name.monkey.retromusic.model.Song; import code.name.monkey.retromusic.model.Song;
import code.name.monkey.retromusic.service.MusicService; import code.name.monkey.retromusic.service.MusicService;
import code.name.monkey.retromusic.ui.activities.MainActivity; import code.name.monkey.retromusic.ui.activities.MainActivity;
import code.name.monkey.retromusic.ui.activities.NowPayingActivity;
import code.name.monkey.retromusic.util.RetroUtil; import code.name.monkey.retromusic.util.RetroUtil;
public class AppWidgetCard extends BaseAppWidget { public class AppWidgetCard extends BaseAppWidget {
@ -175,7 +176,7 @@ public class AppWidgetCard extends BaseAppWidget {
final ComponentName serviceName = new ComponentName(context, MusicService.class); final ComponentName serviceName = new ComponentName(context, MusicService.class);
// Home // Home
action = new Intent(context, MainActivity.class); action = new Intent(context, NowPayingActivity.class);
action.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TOP); action.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TOP);
pendingIntent = PendingIntent.getActivity(context, 0, action, 0); pendingIntent = PendingIntent.getActivity(context, 0, action, 0);
views.setOnClickPendingIntent(R.id.image, pendingIntent); views.setOnClickPendingIntent(R.id.image, pendingIntent);

View file

@ -20,6 +20,7 @@ import code.name.monkey.retromusic.glide.palette.BitmapPaletteWrapper;
import code.name.monkey.retromusic.model.Song; import code.name.monkey.retromusic.model.Song;
import code.name.monkey.retromusic.service.MusicService; import code.name.monkey.retromusic.service.MusicService;
import code.name.monkey.retromusic.ui.activities.MainActivity; import code.name.monkey.retromusic.ui.activities.MainActivity;
import code.name.monkey.retromusic.ui.activities.NowPayingActivity;
import code.name.monkey.retromusic.util.RetroUtil; import code.name.monkey.retromusic.util.RetroUtil;
import com.bumptech.glide.Glide; import com.bumptech.glide.Glide;
import com.bumptech.glide.request.animation.GlideAnimation; import com.bumptech.glide.request.animation.GlideAnimation;
@ -160,7 +161,7 @@ public class AppWidgetClassic extends BaseAppWidget {
final ComponentName serviceName = new ComponentName(context, MusicService.class); final ComponentName serviceName = new ComponentName(context, MusicService.class);
// Home // Home
action = new Intent(context, MainActivity.class); action = new Intent(context, NowPayingActivity.class);
action.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TOP); action.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TOP);
pendingIntent = PendingIntent.getActivity(context, 0, action, 0); pendingIntent = PendingIntent.getActivity(context, 0, action, 0);
views.setOnClickPendingIntent(R.id.image, pendingIntent); views.setOnClickPendingIntent(R.id.image, pendingIntent);

View file

@ -20,6 +20,7 @@ import code.name.monkey.retromusic.glide.palette.BitmapPaletteWrapper;
import code.name.monkey.retromusic.model.Song; import code.name.monkey.retromusic.model.Song;
import code.name.monkey.retromusic.service.MusicService; import code.name.monkey.retromusic.service.MusicService;
import code.name.monkey.retromusic.ui.activities.MainActivity; import code.name.monkey.retromusic.ui.activities.MainActivity;
import code.name.monkey.retromusic.ui.activities.NowPayingActivity;
import code.name.monkey.retromusic.util.RetroUtil; import code.name.monkey.retromusic.util.RetroUtil;
import com.bumptech.glide.Glide; import com.bumptech.glide.Glide;
import com.bumptech.glide.request.animation.GlideAnimation; import com.bumptech.glide.request.animation.GlideAnimation;
@ -165,7 +166,7 @@ public class AppWidgetSmall extends BaseAppWidget {
final ComponentName serviceName = new ComponentName(context, MusicService.class); final ComponentName serviceName = new ComponentName(context, MusicService.class);
// Home // Home
action = new Intent(context, MainActivity.class); action = new Intent(context, NowPayingActivity.class);
action.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TOP); action.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TOP);
pendingIntent = PendingIntent.getActivity(context, 0, action, 0); pendingIntent = PendingIntent.getActivity(context, 0, action, 0);
views.setOnClickPendingIntent(R.id.image, pendingIntent); views.setOnClickPendingIntent(R.id.image, pendingIntent);

View file

@ -1,16 +1,18 @@
package code.name.monkey.retromusic.dialogs; package code.name.monkey.retromusic.dialogs;
import android.os.Bundle; import android.os.Bundle;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.recyclerview.widget.DefaultItemAnimator;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
import android.view.LayoutInflater; import android.view.LayoutInflater;
import android.view.View; import android.view.View;
import android.view.ViewGroup; import android.view.ViewGroup;
import android.widget.TextView; import android.widget.TextView;
import java.util.ArrayList;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.recyclerview.widget.DefaultItemAnimator;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
import butterknife.BindView; import butterknife.BindView;
import butterknife.ButterKnife; import butterknife.ButterKnife;
import butterknife.OnClick; import butterknife.OnClick;
@ -22,8 +24,6 @@ import code.name.monkey.retromusic.model.Song;
import code.name.monkey.retromusic.ui.adapter.playlist.AddToPlaylist; import code.name.monkey.retromusic.ui.adapter.playlist.AddToPlaylist;
import code.name.monkey.retromusic.views.RoundedBottomSheetDialogFragment; import code.name.monkey.retromusic.views.RoundedBottomSheetDialogFragment;
import java.util.ArrayList;
/** /**
* @author Karim Abou Zeid (kabouzeid), Aidan Follestad (afollestad) * @author Karim Abou Zeid (kabouzeid), Aidan Follestad (afollestad)
*/ */
@ -35,8 +35,6 @@ public class AddToPlaylistDialog extends RoundedBottomSheetDialogFragment {
@BindView(R.id.title) @BindView(R.id.title)
TextView title; TextView title;
ArrayList<Playlist> playlists;
@NonNull @NonNull
public static AddToPlaylistDialog create(Song song) { public static AddToPlaylistDialog create(Song song) {
ArrayList<Song> list = new ArrayList<>(); ArrayList<Song> list = new ArrayList<>();
@ -75,14 +73,10 @@ public class AddToPlaylistDialog extends RoundedBottomSheetDialogFragment {
@Override @Override
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) { public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState); super.onViewCreated(view, savedInstanceState);
title.setTextColor(ThemeStore.textColorPrimary(getContext())); title.setTextColor(ThemeStore.textColorPrimary(getContext()));
final ArrayList<Song> songs = getArguments().getParcelableArrayList("songs"); final ArrayList<Song> songs = getArguments().getParcelableArrayList("songs");
playlists = PlaylistLoader.getAllPlaylists(getActivity()).blockingFirst(); final ArrayList<Playlist> playlists = PlaylistLoader.getAllPlaylists(getActivity()).blockingFirst();
final AddToPlaylist playlistAdapter = new AddToPlaylist(getActivity(), playlists, R.layout.item_playlist, songs, getDialog());
AddToPlaylist playlistAdapter = new AddToPlaylist(getActivity(), playlists,
R.layout.item_playlist, songs, getDialog());
playlist.setLayoutManager(new LinearLayoutManager(getContext())); playlist.setLayoutManager(new LinearLayoutManager(getContext()));
playlist.setItemAnimator(new DefaultItemAnimator()); playlist.setItemAnimator(new DefaultItemAnimator());
playlist.setAdapter(playlistAdapter); playlist.setAdapter(playlistAdapter);

View file

@ -26,7 +26,7 @@ import code.name.monkey.retromusic.R;
*/ */
public class BlacklistFolderChooserDialog extends DialogFragment implements MaterialDialog.ListCallback { public class BlacklistFolderChooserDialog extends DialogFragment implements MaterialDialog.ListCallback {
String initialPath = Environment.getExternalStorageDirectory().getAbsolutePath(); private String initialPath = Environment.getExternalStorageDirectory().getAbsolutePath();
private File parentFolder; private File parentFolder;
private File[] parentContents; private File[] parentContents;
private boolean canGoUp = false; private boolean canGoUp = false;

View file

@ -1 +0,0 @@
package code.name.monkey.retromusic.dialogs; import android.content.Context; import android.content.pm.PackageInfo; import android.content.pm.PackageManager; import android.graphics.Color; import android.os.Bundle; import androidx.annotation.NonNull; import androidx.annotation.Nullable; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.webkit.WebView; import com.afollestad.materialdialogs.internal.ThemeSingleton; import java.io.BufferedReader; import java.io.InputStream; import java.io.InputStreamReader; import java.util.Objects; import butterknife.BindView; import butterknife.ButterKnife; import code.name.monkey.appthemehelper.util.ATHUtil; import code.name.monkey.appthemehelper.util.ColorUtil; import code.name.monkey.retromusic.R; import code.name.monkey.retromusic.util.PreferenceUtil; import code.name.monkey.retromusic.views.RoundedBottomSheetDialogFragment; public class ChangelogDialog extends RoundedBottomSheetDialogFragment { @BindView(R.id.web_view) WebView webView; public static ChangelogDialog create() { return new ChangelogDialog(); } private static void setChangelogRead(@NonNull Context context) { try { PackageInfo pInfo = context.getPackageManager().getPackageInfo(context.getPackageName(), 0); int currentVersion = pInfo.versionCode; PreferenceUtil.getInstance(context).setLastChangeLogVersion(currentVersion); } catch (PackageManager.NameNotFoundException e) { e.printStackTrace(); } } private static String colorToHex(int color) { return Integer.toHexString(color).substring(2); } @Nullable @Override public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { View layout = inflater.inflate(R.layout.dialog_changelog, container, false); ButterKnife.bind(this, layout); return layout; } @Override public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) { super.onViewCreated(view, savedInstanceState); try { // Load from phonograph-changelog.html in the assets folder StringBuilder buf = new StringBuilder(); InputStream json = Objects.requireNonNull(getActivity()).getAssets().open ("retro-changelog.html"); BufferedReader in = new BufferedReader(new InputStreamReader(json, "UTF-8")); String str; while ((str = in.readLine()) != null) buf.append(str); in.close(); // Inject color values for WebView body background and links final String backgroundColor = colorToHex(ATHUtil.resolveColor(getActivity(), R.attr.md_background_color, Color.parseColor(ThemeSingleton.get().darkTheme ? "#424242" : "#ffffff"))); final String contentColor = ThemeSingleton.get().darkTheme ? "#ffffff" : "#000000"; webView.loadData(buf.toString() .replace("{style-placeholder}", String.format("body { background-color: %s; color: %s; }", backgroundColor, contentColor)) .replace("{link-color}", colorToHex(ThemeSingleton.get().positiveColor.getDefaultColor())) .replace("{link-color-active}", colorToHex(ColorUtil.lightenColor(ThemeSingleton.get().positiveColor.getDefaultColor()))) , "text/html", "UTF-8"); } catch (Throwable e) { webView.loadData("<h1>Unable to load</h1><p>" + e.getLocalizedMessage() + "</p>", "text/html", "UTF-8"); } setChangelogRead(getActivity()); } }

View file

@ -2,13 +2,13 @@ package code.name.monkey.retromusic.dialogs;
import android.app.Dialog; import android.app.Dialog;
import android.os.Bundle; import android.os.Bundle;
import androidx.annotation.NonNull;
import androidx.fragment.app.DialogFragment;
import android.text.Html; import android.text.Html;
import com.afollestad.materialdialogs.DialogAction; import com.afollestad.materialdialogs.DialogAction;
import com.afollestad.materialdialogs.MaterialDialog; import com.afollestad.materialdialogs.MaterialDialog;
import androidx.annotation.NonNull;
import androidx.fragment.app.DialogFragment;
import code.name.monkey.retromusic.R; import code.name.monkey.retromusic.R;
import code.name.monkey.retromusic.model.smartplaylist.AbsSmartPlaylist; import code.name.monkey.retromusic.model.smartplaylist.AbsSmartPlaylist;

View file

@ -20,6 +20,7 @@ import butterknife.BindView;
import butterknife.ButterKnife; import butterknife.ButterKnife;
import butterknife.OnClick; import butterknife.OnClick;
import code.name.monkey.appthemehelper.ThemeStore; import code.name.monkey.appthemehelper.ThemeStore;
import code.name.monkey.appthemehelper.util.MaterialUtil;
import code.name.monkey.retromusic.R; import code.name.monkey.retromusic.R;
import code.name.monkey.retromusic.model.Song; import code.name.monkey.retromusic.model.Song;
import code.name.monkey.retromusic.util.PlaylistsUtil; import code.name.monkey.retromusic.util.PlaylistsUtil;
@ -80,18 +81,18 @@ public class CreatePlaylistDialog extends RoundedBottomSheetDialogFragment {
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) { public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState); super.onViewCreated(view, savedInstanceState);
int accentColor = ThemeStore.accentColor(Objects.requireNonNull(getContext())); int accentColor = ThemeStore.accentColor(Objects.requireNonNull(getContext()));
actionCreate.setBackgroundTintList(ColorStateList.valueOf(accentColor));
actionCancel.setStrokeColor(ColorStateList.valueOf(accentColor));
actionCancel.setTextColor(accentColor);
MaterialUtil.setTint(actionCreate, true);
MaterialUtil.setTint(actionCancel, false);
MaterialUtil.setTint(textInputLayout, true);
textInputLayout.setBoxStrokeColor(accentColor);
textInputLayout.setDefaultHintTextColor(ColorStateList.valueOf(accentColor));
playlistName.setHintTextColor(ColorStateList.valueOf(accentColor)); playlistName.setHintTextColor(ColorStateList.valueOf(accentColor));
playlistName.setTextColor(ThemeStore.textColorPrimary(getContext())); playlistName.setTextColor(ThemeStore.textColorPrimary(getContext()));
title.setTextColor(ThemeStore.textColorPrimary(getContext()));
title.setTextColor(ThemeStore.textColorPrimary(getContext()));
} }
@OnClick({R.id.action_cancel, R.id.action_create}) @OnClick({R.id.action_cancel, R.id.action_create})

View file

@ -1,6 +1,5 @@
package code.name.monkey.retromusic.dialogs; package code.name.monkey.retromusic.dialogs;
import android.content.res.ColorStateList;
import android.os.Bundle; import android.os.Bundle;
import android.text.Html; import android.text.Html;
import android.view.LayoutInflater; import android.view.LayoutInflater;
@ -11,7 +10,6 @@ import android.widget.TextView;
import com.google.android.material.button.MaterialButton; import com.google.android.material.button.MaterialButton;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Objects;
import androidx.annotation.NonNull; import androidx.annotation.NonNull;
import androidx.annotation.Nullable; import androidx.annotation.Nullable;
@ -19,6 +17,7 @@ import butterknife.BindView;
import butterknife.ButterKnife; import butterknife.ButterKnife;
import butterknife.OnClick; import butterknife.OnClick;
import code.name.monkey.appthemehelper.ThemeStore; import code.name.monkey.appthemehelper.ThemeStore;
import code.name.monkey.appthemehelper.util.MaterialUtil;
import code.name.monkey.retromusic.R; import code.name.monkey.retromusic.R;
import code.name.monkey.retromusic.model.Playlist; import code.name.monkey.retromusic.model.Playlist;
import code.name.monkey.retromusic.util.PlaylistsUtil; import code.name.monkey.retromusic.util.PlaylistsUtil;
@ -78,21 +77,10 @@ public class DeletePlaylistDialog extends RoundedBottomSheetDialogFragment {
this.title.setText(content); this.title.setText(content);
this.title.setTextColor(ThemeStore.textColorPrimary(getContext())); this.title.setTextColor(ThemeStore.textColorPrimary(getContext()));
actionDelete.setText(R.string.action_delete); actionDelete.setText(R.string.action_delete);
int accentColor = ThemeStore.accentColor(Objects.requireNonNull(getContext())); MaterialUtil.setTint(actionDelete, true);
actionDelete.setIconTint(ColorStateList.valueOf(accentColor)); MaterialUtil.setTint(actionCancel, false);
actionCancel.setIconTint(ColorStateList.valueOf(accentColor));
int iconColor = ThemeStore.textColorSecondary(getContext());
actionDelete.setStrokeColor(ColorStateList.valueOf(iconColor));
actionCancel.setStrokeColor(ColorStateList.valueOf(iconColor));
int textColor = ThemeStore.textColorPrimary(getContext());
actionDelete.setTextColor(ColorStateList.valueOf(textColor));
actionCancel.setTextColor(ColorStateList.valueOf(textColor));
} }

View file

@ -1,6 +1,5 @@
package code.name.monkey.retromusic.dialogs; package code.name.monkey.retromusic.dialogs;
import android.content.res.ColorStateList;
import android.os.Bundle; import android.os.Bundle;
import android.text.Html; import android.text.Html;
import android.view.LayoutInflater; import android.view.LayoutInflater;
@ -11,7 +10,6 @@ import android.widget.TextView;
import com.google.android.material.button.MaterialButton; import com.google.android.material.button.MaterialButton;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Objects;
import androidx.annotation.NonNull; import androidx.annotation.NonNull;
import androidx.annotation.Nullable; import androidx.annotation.Nullable;
@ -19,6 +17,7 @@ import butterknife.BindView;
import butterknife.ButterKnife; import butterknife.ButterKnife;
import butterknife.OnClick; import butterknife.OnClick;
import code.name.monkey.appthemehelper.ThemeStore; import code.name.monkey.appthemehelper.ThemeStore;
import code.name.monkey.appthemehelper.util.MaterialUtil;
import code.name.monkey.retromusic.R; import code.name.monkey.retromusic.R;
import code.name.monkey.retromusic.model.Song; import code.name.monkey.retromusic.model.Song;
import code.name.monkey.retromusic.util.MusicUtil; import code.name.monkey.retromusic.util.MusicUtil;
@ -72,12 +71,9 @@ public class DeleteSongsDialog extends RoundedBottomSheetDialogFragment {
@Override @Override
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) { public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState); super.onViewCreated(view, savedInstanceState);
title.setTextColor(ThemeStore.textColorPrimary(getContext())); title.setTextColor(ThemeStore.textColorPrimary(getContext()));
int accentColor = ThemeStore.accentColor(Objects.requireNonNull(getContext())); MaterialUtil.setTint(actionDelete, true);
actionDelete.setBackgroundTintList(ColorStateList.valueOf(accentColor)); MaterialUtil.setTint(actionCancel, false);
actionCancel.setStrokeColor(ColorStateList.valueOf(accentColor));
actionCancel.setTextColor(accentColor);
//noinspection unchecked,ConstantConditions //noinspection unchecked,ConstantConditions
final ArrayList<Song> songs = getArguments().getParcelableArrayList("songs"); final ArrayList<Song> songs = getArguments().getParcelableArrayList("songs");

View file

@ -1,6 +1,7 @@
package code.name.monkey.retromusic.dialogs; package code.name.monkey.retromusic.dialogs;
import android.content.res.ColorStateList; import android.content.res.ColorStateList;
import android.graphics.Bitmap;
import android.os.Bundle; import android.os.Bundle;
import android.view.LayoutInflater; import android.view.LayoutInflater;
import android.view.View; import android.view.View;
@ -9,10 +10,15 @@ import android.widget.TextView;
import com.google.android.material.button.MaterialButton; import com.google.android.material.button.MaterialButton;
import java.io.File;
import java.util.Calendar;
import java.util.List; import java.util.List;
import androidx.annotation.NonNull; import androidx.annotation.NonNull;
import androidx.annotation.Nullable; import androidx.annotation.Nullable;
import androidx.appcompat.widget.AppCompatTextView;
import androidx.core.content.ContextCompat;
import butterknife.BindView;
import butterknife.BindViews; import butterknife.BindViews;
import butterknife.ButterKnife; import butterknife.ButterKnife;
import butterknife.OnClick; import butterknife.OnClick;
@ -21,8 +27,16 @@ import code.name.monkey.retromusic.R;
import code.name.monkey.retromusic.RetroApplication; import code.name.monkey.retromusic.RetroApplication;
import code.name.monkey.retromusic.ui.activities.MainActivity; import code.name.monkey.retromusic.ui.activities.MainActivity;
import code.name.monkey.retromusic.ui.fragments.mainactivity.folders.FoldersFragment; import code.name.monkey.retromusic.ui.fragments.mainactivity.folders.FoldersFragment;
import code.name.monkey.retromusic.util.Compressor;
import code.name.monkey.retromusic.util.NavigationUtil; import code.name.monkey.retromusic.util.NavigationUtil;
import code.name.monkey.retromusic.util.PreferenceUtil;
import code.name.monkey.retromusic.views.CircularImageView;
import code.name.monkey.retromusic.views.RoundedBottomSheetDialogFragment; import code.name.monkey.retromusic.views.RoundedBottomSheetDialogFragment;
import io.reactivex.android.schedulers.AndroidSchedulers;
import io.reactivex.disposables.CompositeDisposable;
import io.reactivex.schedulers.Schedulers;
import static code.name.monkey.retromusic.Constants.USER_PROFILE;
public class MainOptionsBottomSheetDialogFragment extends RoundedBottomSheetDialogFragment { public class MainOptionsBottomSheetDialogFragment extends RoundedBottomSheetDialogFragment {
@ -30,10 +44,20 @@ public class MainOptionsBottomSheetDialogFragment extends RoundedBottomSheetDial
private static ButterKnife.Setter<TextView, Integer> textColor = (view, value, index) -> view.setTextColor(ColorStateList.valueOf(value)); private static ButterKnife.Setter<TextView, Integer> textColor = (view, value, index) -> view.setTextColor(ColorStateList.valueOf(value));
@BindViews({R.id.action_folders, R.id.action_settings, R.id.action_about, R.id.action_buy_pro, R.id.action_rate, @BindViews({R.id.action_folders, R.id.action_about, R.id.action_buy_pro, R.id.action_rate,
R.id.action_sleep_timer}) R.id.action_sleep_timer})
List<MaterialButton> materialButtons; List<MaterialButton> materialButtons;
@BindView(R.id.user_image_bottom)
CircularImageView userImageBottom;
@BindView(R.id.title_welcome)
AppCompatTextView titleWelcome;
@BindView(R.id.text)
AppCompatTextView text;
private CompositeDisposable disposable = new CompositeDisposable();
public static MainOptionsBottomSheetDialogFragment newInstance(int selected_id) { public static MainOptionsBottomSheetDialogFragment newInstance(int selected_id) {
Bundle bundle = new Bundle(); Bundle bundle = new Bundle();
@ -47,6 +71,11 @@ public class MainOptionsBottomSheetDialogFragment extends RoundedBottomSheetDial
return new MainOptionsBottomSheetDialogFragment(); return new MainOptionsBottomSheetDialogFragment();
} }
@Override
public void onDestroyView() {
super.onDestroyView();
disposable.clear();
}
@Nullable @Nullable
@Override @Override
@ -61,10 +90,13 @@ public class MainOptionsBottomSheetDialogFragment extends RoundedBottomSheetDial
@Override @Override
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) { public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState); super.onViewCreated(view, savedInstanceState);
text.setTextColor(ThemeStore.textColorSecondary(getContext()));
titleWelcome.setTextColor(ThemeStore.textColorPrimary(getContext()));
titleWelcome.setText(String.format("%s %s!", getTimeOfTheDay(), PreferenceUtil.getInstance().getUserName()));
loadImageFromStorage();
} }
@OnClick({R.id.action_folders, R.id.action_settings, R.id.action_sleep_timer, R.id.action_rate, @OnClick({R.id.action_folders, R.id.user_info_container, R.id.action_settings, R.id.action_sleep_timer, R.id.action_rate,
R.id.action_buy_pro, R.id.action_about}) R.id.action_buy_pro, R.id.action_about})
void onClick(View view) { void onClick(View view) {
MainActivity mainActivity = (MainActivity) getActivity(); MainActivity mainActivity = (MainActivity) getActivity();
@ -89,6 +121,9 @@ public class MainOptionsBottomSheetDialogFragment extends RoundedBottomSheetDial
new SleepTimerDialog().show(getFragmentManager(), TAG); new SleepTimerDialog().show(getFragmentManager(), TAG);
} }
break; break;
case R.id.user_info_container:
NavigationUtil.goToUserInfo(getActivity());
break;
case R.id.action_rate: case R.id.action_rate:
NavigationUtil.goToPlayStore(mainActivity); NavigationUtil.goToPlayStore(mainActivity);
break; break;
@ -96,5 +131,38 @@ public class MainOptionsBottomSheetDialogFragment extends RoundedBottomSheetDial
dismiss(); dismiss();
} }
private String getTimeOfTheDay() {
String message = getString(R.string.title_good_day);
Calendar c = Calendar.getInstance();
int timeOfDay = c.get(Calendar.HOUR_OF_DAY);
if (timeOfDay >= 0 && timeOfDay < 6) {
message = getString(R.string.title_good_night);
} else if (timeOfDay >= 6 && timeOfDay < 12) {
message = getString(R.string.title_good_morning);
} else if (timeOfDay >= 12 && timeOfDay < 16) {
message = getString(R.string.title_good_afternoon);
} else if (timeOfDay >= 16 && timeOfDay < 20) {
message = getString(R.string.title_good_evening);
} else if (timeOfDay >= 20 && timeOfDay < 24) {
message = getString(R.string.title_good_night);
}
return message;
}
private void loadImageFromStorage() {
//noinspection ConstantConditions
disposable.add(new Compressor(getContext())
.setMaxHeight(300)
.setMaxWidth(300)
.setQuality(75)
.setCompressFormat(Bitmap.CompressFormat.WEBP)
.compressToBitmapAsFlowable(
new File(PreferenceUtil.getInstance().getProfileImage(), USER_PROFILE))
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(userImageBottom::setImageBitmap,
throwable -> userImageBottom.setImageDrawable(ContextCompat
.getDrawable(getContext(), R.drawable.ic_person_flat))));
}
} }

View file

@ -1,9 +1,6 @@
package code.name.monkey.retromusic.dialogs; package code.name.monkey.retromusic.dialogs;
import android.os.Bundle; import android.os.Bundle;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import android.text.Html; import android.text.Html;
import android.view.LayoutInflater; import android.view.LayoutInflater;
import android.view.View; import android.view.View;
@ -12,9 +9,12 @@ import android.widget.TextView;
import java.util.ArrayList; import java.util.ArrayList;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import butterknife.BindView; import butterknife.BindView;
import butterknife.ButterKnife; import butterknife.ButterKnife;
import butterknife.OnClick; import butterknife.OnClick;
import code.name.monkey.appthemehelper.ThemeStore;
import code.name.monkey.retromusic.R; import code.name.monkey.retromusic.R;
import code.name.monkey.retromusic.model.PlaylistSong; import code.name.monkey.retromusic.model.PlaylistSong;
import code.name.monkey.retromusic.util.PlaylistsUtil; import code.name.monkey.retromusic.util.PlaylistsUtil;
@ -76,7 +76,7 @@ public class RemoveFromPlaylistDialog extends RoundedBottomSheetDialogFragment {
final ArrayList<PlaylistSong> songs = getArguments().getParcelableArrayList("songs"); final ArrayList<PlaylistSong> songs = getArguments().getParcelableArrayList("songs");
int title; int title;
CharSequence content; CharSequence content;
if (songs.size() > 1) { if (songs != null && songs.size() > 1) {
title = R.string.remove_songs_from_playlist_title; title = R.string.remove_songs_from_playlist_title;
content = Html.fromHtml(getString(R.string.remove_x_songs_from_playlist, songs.size())); content = Html.fromHtml(getString(R.string.remove_x_songs_from_playlist, songs.size()));
} else { } else {
@ -85,5 +85,9 @@ public class RemoveFromPlaylistDialog extends RoundedBottomSheetDialogFragment {
} }
this.remove.setText(content); this.remove.setText(content);
this.title.setText(title); this.title.setText(title);
this.title.setTextColor(ThemeStore.textColorPrimary(getContext()));
this.remove.setTextColor(ThemeStore.textColorSecondary(getContext()));
this.cancel.setTextColor(ThemeStore.textColorSecondary(getContext()));
} }
} }

View file

@ -19,6 +19,7 @@ import butterknife.BindView;
import butterknife.ButterKnife; import butterknife.ButterKnife;
import butterknife.OnClick; import butterknife.OnClick;
import code.name.monkey.appthemehelper.ThemeStore; import code.name.monkey.appthemehelper.ThemeStore;
import code.name.monkey.appthemehelper.util.MaterialUtil;
import code.name.monkey.retromusic.R; import code.name.monkey.retromusic.R;
import code.name.monkey.retromusic.util.PlaylistsUtil; import code.name.monkey.retromusic.util.PlaylistsUtil;
import code.name.monkey.retromusic.views.RoundedBottomSheetDialogFragment; import code.name.monkey.retromusic.views.RoundedBottomSheetDialogFragment;
@ -79,17 +80,13 @@ public class RenamePlaylistDialog extends RoundedBottomSheetDialogFragment {
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) { public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState); super.onViewCreated(view, savedInstanceState);
int accentColor = ThemeStore.accentColor(Objects.requireNonNull(getContext())); int accentColor = ThemeStore.accentColor(Objects.requireNonNull(getContext()));
rename.setBackgroundTintList(ColorStateList.valueOf(accentColor)); MaterialUtil.setTint(rename,true);
actionCancel.setStrokeColor(ColorStateList.valueOf(accentColor)); MaterialUtil.setTint(actionCancel,false);
actionCancel.setTextColor(accentColor); MaterialUtil.setTint(textInputLayout,false);
playlistName.setHintTextColor(ColorStateList.valueOf(accentColor)); playlistName.setHintTextColor(ColorStateList.valueOf(accentColor));
textInputLayout.setBoxStrokeColor(accentColor);
textInputLayout.setDefaultHintTextColor(ColorStateList.valueOf(accentColor));
playlistName.setHintTextColor(accentColor);
playlistName.setTextColor(ThemeStore.textColorPrimary(getContext())); playlistName.setTextColor(ThemeStore.textColorPrimary(getContext()));
title.setTextColor(ThemeStore.textColorPrimary(getContext())); title.setTextColor(ThemeStore.textColorPrimary(getContext()));
long playlistId = 0; long playlistId = 0;

File diff suppressed because one or more lines are too long

View file

@ -5,7 +5,6 @@ import android.app.PendingIntent;
import android.content.Context; import android.content.Context;
import android.content.DialogInterface; import android.content.DialogInterface;
import android.content.Intent; import android.content.Intent;
import android.content.res.ColorStateList;
import android.graphics.PorterDuff; import android.graphics.PorterDuff;
import android.graphics.drawable.ClipDrawable; import android.graphics.drawable.ClipDrawable;
import android.graphics.drawable.LayerDrawable; import android.graphics.drawable.LayerDrawable;
@ -20,10 +19,8 @@ import android.widget.TextView;
import android.widget.Toast; import android.widget.Toast;
import com.google.android.material.button.MaterialButton; import com.google.android.material.button.MaterialButton;
import com.google.android.material.textfield.TextInputLayout;
import java.util.Locale; import java.util.Locale;
import java.util.Objects;
import androidx.annotation.NonNull; import androidx.annotation.NonNull;
import androidx.annotation.Nullable; import androidx.annotation.Nullable;
@ -31,6 +28,7 @@ import butterknife.BindView;
import butterknife.ButterKnife; import butterknife.ButterKnife;
import butterknife.OnClick; import butterknife.OnClick;
import code.name.monkey.appthemehelper.ThemeStore; import code.name.monkey.appthemehelper.ThemeStore;
import code.name.monkey.appthemehelper.util.MaterialUtil;
import code.name.monkey.retromusic.R; import code.name.monkey.retromusic.R;
import code.name.monkey.retromusic.service.MusicService; import code.name.monkey.retromusic.service.MusicService;
import code.name.monkey.retromusic.util.MusicUtil; import code.name.monkey.retromusic.util.MusicUtil;
@ -89,17 +87,15 @@ public class SleepTimerDialog extends RoundedBottomSheetDialogFragment {
@Override @Override
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) { public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState); super.onViewCreated(view, savedInstanceState);
int accentColor = ThemeStore.accentColor(Objects.requireNonNull(getContext())); MaterialUtil.setTint(setButton, true);
setButton.setBackgroundTintList(ColorStateList.valueOf(accentColor)); MaterialUtil.setTint(cancelButton, false);
cancelButton.setStrokeColor(ColorStateList.valueOf(accentColor));
cancelButton.setTextColor(accentColor);
title.setTextColor(ThemeStore.textColorPrimary(getContext())); title.setTextColor(ThemeStore.textColorPrimary(getContext()));
timerDisplay.setTextColor(ThemeStore.textColorSecondary(getContext())); timerDisplay.setTextColor(ThemeStore.textColorSecondary(getContext()));
timerUpdater = new TimerUpdater(); timerUpdater = new TimerUpdater();
seekArcProgress = PreferenceUtil.getInstance(getActivity()).getLastSleepTimerValue(); seekArcProgress = PreferenceUtil.getInstance().getLastSleepTimerValue();
updateTimeDisplayTime(); updateTimeDisplayTime();
seekArc.setProgress(seekArcProgress); seekArc.setProgress(seekArcProgress);
setProgressBarColor(ThemeStore.accentColor(getContext())); setProgressBarColor(ThemeStore.accentColor(getContext()));
@ -122,7 +118,7 @@ public class SleepTimerDialog extends RoundedBottomSheetDialogFragment {
@Override @Override
public void onStopTrackingTouch(SeekBar seekBar) { public void onStopTrackingTouch(SeekBar seekBar) {
PreferenceUtil.getInstance(getActivity()).setLastSleepTimerValue(seekArcProgress); PreferenceUtil.getInstance().setLastSleepTimerValue(seekArcProgress);
} }
}); });
} }
@ -151,7 +147,7 @@ public class SleepTimerDialog extends RoundedBottomSheetDialogFragment {
final int minutes = seekArcProgress; final int minutes = seekArcProgress;
PendingIntent pi = makeTimerPendingIntent(PendingIntent.FLAG_CANCEL_CURRENT); PendingIntent pi = makeTimerPendingIntent(PendingIntent.FLAG_CANCEL_CURRENT);
final long nextSleepTimerElapsedTime = SystemClock.elapsedRealtime() + minutes * 60 * 1000; final long nextSleepTimerElapsedTime = SystemClock.elapsedRealtime() + minutes * 60 * 1000;
PreferenceUtil.getInstance(getActivity()).setNextSleepTimerElapsedRealtime(nextSleepTimerElapsedTime); PreferenceUtil.getInstance().setNextSleepTimerElapsedRealtime(nextSleepTimerElapsedTime);
AlarmManager am = (AlarmManager) getActivity().getSystemService(Context.ALARM_SERVICE); AlarmManager am = (AlarmManager) getActivity().getSystemService(Context.ALARM_SERVICE);
if (am != null) { if (am != null) {
am.set(AlarmManager.ELAPSED_REALTIME_WAKEUP, nextSleepTimerElapsedTime, pi); am.set(AlarmManager.ELAPSED_REALTIME_WAKEUP, nextSleepTimerElapsedTime, pi);
@ -178,7 +174,7 @@ public class SleepTimerDialog extends RoundedBottomSheetDialogFragment {
private class TimerUpdater extends CountDownTimer { private class TimerUpdater extends CountDownTimer {
TimerUpdater() { TimerUpdater() {
//noinspection ConstantConditions //noinspection ConstantConditions
super(PreferenceUtil.getInstance(getActivity()).getNextSleepTimerElapsedRealTime() - SystemClock.elapsedRealtime(), 1000); super(PreferenceUtil.getInstance().getNextSleepTimerElapsedRealTime() - SystemClock.elapsedRealtime(), 1000);
} }
@Override @Override

View file

@ -3,17 +3,17 @@ package code.name.monkey.retromusic.dialogs;
import android.annotation.SuppressLint; import android.annotation.SuppressLint;
import android.content.Intent; import android.content.Intent;
import android.os.Bundle; import android.os.Bundle;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import android.view.LayoutInflater; import android.view.LayoutInflater;
import android.view.View; import android.view.View;
import android.view.ViewGroup; import android.view.ViewGroup;
import android.widget.TextView; import android.widget.TextView;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import butterknife.BindView; import butterknife.BindView;
import butterknife.ButterKnife; import butterknife.ButterKnife;
import butterknife.OnClick; import butterknife.OnClick;
import code.name.monkey.appthemehelper.ThemeStore;
import code.name.monkey.retromusic.R; import code.name.monkey.retromusic.R;
import code.name.monkey.retromusic.model.Song; import code.name.monkey.retromusic.model.Song;
import code.name.monkey.retromusic.util.MusicUtil; import code.name.monkey.retromusic.util.MusicUtil;
@ -21,8 +21,12 @@ import code.name.monkey.retromusic.views.RoundedBottomSheetDialogFragment;
public class SongShareDialog extends RoundedBottomSheetDialogFragment { public class SongShareDialog extends RoundedBottomSheetDialogFragment {
@BindView(R.id.option_1)
TextView audioFile;
@BindView(R.id.option_2) @BindView(R.id.option_2)
TextView currentSong; TextView audioText;
@BindView(R.id.title)
TextView title;
@NonNull @NonNull
public static SongShareDialog create(final Song song) { public static SongShareDialog create(final Song song) {
@ -46,7 +50,11 @@ public class SongShareDialog extends RoundedBottomSheetDialogFragment {
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) { public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState); super.onViewCreated(view, savedInstanceState);
final Song song = getArguments().getParcelable("song"); final Song song = getArguments().getParcelable("song");
currentSong.setText(getString(R.string.currently_listening_to_x_by_x, song.title, song.artistName));
audioFile.setText(getString(R.string.currently_listening_to_x_by_x, song.title, song.artistName));
audioFile.setTextColor(ThemeStore.textColorSecondary(getContext()));
audioText.setTextColor(ThemeStore.textColorSecondary(getContext()));
title.setTextColor(ThemeStore.textColorPrimary(getContext()));
} }
@OnClick({R.id.option_2, R.id.option_1}) @OnClick({R.id.option_2, R.id.option_1})
@ -55,13 +63,11 @@ public class SongShareDialog extends RoundedBottomSheetDialogFragment {
final String currentlyListening = getString(R.string.currently_listening_to_x_by_x, song.title, song.artistName); final String currentlyListening = getString(R.string.currently_listening_to_x_by_x, song.title, song.artistName);
switch (view.getId()) { switch (view.getId()) {
case R.id.option_1: case R.id.option_1:
startActivity( startActivity(Intent.createChooser(
Intent.createChooser(
MusicUtil.createShareSongFileIntent(song, getContext()), null)); MusicUtil.createShareSongFileIntent(song, getContext()), null));
break; break;
case R.id.option_2: case R.id.option_2:
getActivity().startActivity(Intent.createChooser( getActivity().startActivity(Intent.createChooser(new Intent().setAction(Intent.ACTION_SEND)
new Intent().setAction(Intent.ACTION_SEND)
.putExtra(Intent.EXTRA_TEXT, currentlyListening) .putExtra(Intent.EXTRA_TEXT, currentlyListening)
.setType("text/plain"), null)); .setType("text/plain"), null));
break; break;

View file

@ -26,7 +26,7 @@ import code.name.monkey.retromusic.util.CustomArtistImageUtil;
public class ArtistGlideRequest { public class ArtistGlideRequest {
private static final int DEFAULT_ANIMATION = android.R.anim.fade_in; private static final int DEFAULT_ANIMATION = android.R.anim.fade_in;
private static final DiskCacheStrategy DEFAULT_DISK_CACHE_STRATEGY = DiskCacheStrategy.SOURCE; private static final DiskCacheStrategy DEFAULT_DISK_CACHE_STRATEGY = DiskCacheStrategy.ALL;
private static final int DEFAULT_ERROR_IMAGE = R.drawable.default_artist_art; private static final int DEFAULT_ERROR_IMAGE = R.drawable.default_artist_art;
private static DrawableTypeRequest createBaseRequest(RequestManager requestManager, Artist artist, private static DrawableTypeRequest createBaseRequest(RequestManager requestManager, Artist artist,
@ -129,6 +129,7 @@ public class ArtistGlideRequest {
builder.forceDownload) builder.forceDownload)
.asBitmap() .asBitmap()
.transcode(new BitmapPaletteTranscoder(context), BitmapPaletteWrapper.class) .transcode(new BitmapPaletteTranscoder(context), BitmapPaletteWrapper.class)
.diskCacheStrategy(DEFAULT_DISK_CACHE_STRATEGY) .diskCacheStrategy(DEFAULT_DISK_CACHE_STRATEGY)
.error(DEFAULT_ERROR_IMAGE) .error(DEFAULT_ERROR_IMAGE)
.animate(DEFAULT_ANIMATION) .animate(DEFAULT_ANIMATION)

View file

@ -37,7 +37,7 @@ public abstract class RetroMusicColoredTarget extends BitmapPaletteTarget {
int primaryColor = getColor(resource.getPalette(), defaultColor); int primaryColor = getColor(resource.getPalette(), defaultColor);
int dominantColor = getDominantColor(resource.getBitmap(), defaultColor); int dominantColor = getDominantColor(resource.getBitmap(), defaultColor);
onColorReady(PreferenceUtil.getInstance(RetroApplication.getInstance()).isDominantColor() ? onColorReady(PreferenceUtil.getInstance().isDominantColor() ?
dominantColor : primaryColor); dominantColor : primaryColor);
} }

View file

@ -63,7 +63,7 @@ public class SongGlideRequest {
} }
public Builder checkIgnoreMediaStore(Context context) { public Builder checkIgnoreMediaStore(Context context) {
return ignoreMediaStore(PreferenceUtil.getInstance(context).ignoreMediaStoreArtwork()); return ignoreMediaStore(PreferenceUtil.getInstance().ignoreMediaStoreArtwork());
} }
Builder ignoreMediaStore(boolean ignoreMediaStore) { Builder ignoreMediaStore(boolean ignoreMediaStore) {

View file

@ -167,7 +167,7 @@ public class MusicPlayerRemote {
public static void openQueue(final ArrayList<Song> queue, final int startPosition, final boolean startPlaying) { public static void openQueue(final ArrayList<Song> queue, final int startPosition, final boolean startPlaying) {
if (!tryToHandleOpenPlayingQueue(queue, startPosition, startPlaying) && musicService != null) { if (!tryToHandleOpenPlayingQueue(queue, startPosition, startPlaying) && musicService != null) {
musicService.openQueue(queue, startPosition, startPlaying); musicService.openQueue(queue, startPosition, startPlaying);
if (PreferenceUtil.getInstance(musicService).isShuffleModeOn()) if (PreferenceUtil.getInstance().isShuffleModeOn())
setShuffleMode(MusicService.SHUFFLE_MODE_NONE); setShuffleMode(MusicService.SHUFFLE_MODE_NONE);
} }
} }

View file

@ -93,6 +93,9 @@ public final class SortOrder {
/* Song sort order date */ /* Song sort order date */
String SONG_DATE = MediaStore.Audio.Media.DATE_ADDED + " DESC"; String SONG_DATE = MediaStore.Audio.Media.DATE_ADDED + " DESC";
/* Song sort order date */
String COMPOSER = MediaStore.Audio.Media.COMPOSER;
} }
/** /**

View file

@ -97,8 +97,8 @@ public class AlbumLoader {
} }
public static String getSongLoaderSortOrder(Context context) { public static String getSongLoaderSortOrder(Context context) {
return PreferenceUtil.getInstance(context).getAlbumSortOrder() + ", " + return PreferenceUtil.getInstance().getAlbumSortOrder() + ", " +
//PreferenceUtil.getInstance(context).getAlbumSongSortOrder() + "," + //PreferenceUtil.getInstance().getAlbumSongSortOrder() + "," +
PreferenceUtil.getInstance(context).getAlbumDetailSongSortOrder(); PreferenceUtil.getInstance().getAlbumDetailSongSortOrder();
} }
} }

View file

@ -14,10 +14,10 @@ import io.reactivex.Observable;
public class ArtistLoader { public class ArtistLoader {
private static String getSongLoaderSortOrder(Context context) { private static String getSongLoaderSortOrder(Context context) {
return PreferenceUtil.getInstance(context).getArtistSortOrder() + ", " + return PreferenceUtil.getInstance().getArtistSortOrder() + ", " +
PreferenceUtil.getInstance(context).getArtistAlbumSortOrder() + ", " + PreferenceUtil.getInstance().getArtistAlbumSortOrder() + ", " +
PreferenceUtil.getInstance(context).getAlbumDetailSongSortOrder() + ", " + PreferenceUtil.getInstance().getAlbumDetailSongSortOrder() + ", " +
PreferenceUtil.getInstance(context).getArtistDetailSongSortOrder(); PreferenceUtil.getInstance().getArtistDetailSongSortOrder();
} }
@NonNull @NonNull

View file

@ -28,7 +28,7 @@ public class ArtistSongLoader extends SongLoader {
new String[]{ new String[]{
String.valueOf(artistId) String.valueOf(artistId)
}, },
PreferenceUtil.getInstance(context).getArtistSongSortOrder() PreferenceUtil.getInstance().getArtistSongSortOrder()
); );
} catch (SecurityException e) { } catch (SecurityException e) {
return null; return null;

View file

@ -79,7 +79,7 @@ public class GenreLoader {
try { try {
return context.getContentResolver().query( return context.getContentResolver().query(
Genres.Members.getContentUri("external", genreId), Genres.Members.getContentUri("external", genreId),
SongLoader.BASE_PROJECTION, SongLoader.BASE_SELECTION, null, PreferenceUtil.getInstance(context).getSongSortOrder()); SongLoader.BASE_PROJECTION, SongLoader.BASE_SELECTION, null, PreferenceUtil.getInstance().getSongSortOrder());
} catch (SecurityException e) { } catch (SecurityException e) {
return null; return null;
} }
@ -124,7 +124,7 @@ public class GenreLoader {
try { try {
return context.getContentResolver().query( return context.getContentResolver().query(
Genres.EXTERNAL_CONTENT_URI, Genres.EXTERNAL_CONTENT_URI,
projection, null, null, PreferenceUtil.getInstance(context).getGenreSortOrder()); projection, null, null, PreferenceUtil.getInstance().getGenreSortOrder());
} catch (SecurityException e) { } catch (SecurityException e) {
return null; return null;
} }

View file

@ -4,13 +4,12 @@ import android.content.Context;
import android.database.Cursor; import android.database.Cursor;
import android.provider.MediaStore; import android.provider.MediaStore;
import android.provider.MediaStore.Audio.AudioColumns; import android.provider.MediaStore.Audio.AudioColumns;
import androidx.annotation.NonNull;
import code.name.monkey.retromusic.model.Song;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
import androidx.annotation.NonNull;
import code.name.monkey.retromusic.model.Song;
import io.reactivex.Observable; import io.reactivex.Observable;
/** /**
@ -19,7 +18,7 @@ import io.reactivex.Observable;
public class GenreSongsLoader { public class GenreSongsLoader {
public static Observable<ArrayList<Song>> getGenreSongsList(@NonNull Context context, @NonNull int genreId) { public static Observable<ArrayList<Song>> getGenreSongsList(@NonNull Context context, int genreId) {
return Observable.create(e -> { return Observable.create(e -> {
ArrayList<Song> list = new ArrayList<>(); ArrayList<Song> list = new ArrayList<>();
Cursor cursor = makeGenreSongCursor(context, genreId); Cursor cursor = makeGenreSongCursor(context, genreId);
@ -49,8 +48,9 @@ public class GenreSongsLoader {
final String albumName = cursor.getString(8); final String albumName = cursor.getString(8);
final int artistId = cursor.getInt(9); final int artistId = cursor.getInt(9);
final String artistName = cursor.getString(10); final String artistName = cursor.getString(10);
final String composer = cursor.getString(11);
return new Song(id, title, trackNumber, year, duration, data, dateModified, albumId, albumName, artistId, artistName); return new Song(id, title, trackNumber, year, duration, data, dateModified, albumId, albumName, artistId, artistName, composer);
} }
private static Cursor makeGenreSongCursor(Context context, long genreId) { private static Cursor makeGenreSongCursor(Context context, long genreId) {
@ -69,6 +69,7 @@ public class GenreSongsLoader {
AudioColumns.ALBUM,// 8 AudioColumns.ALBUM,// 8
AudioColumns.ARTIST_ID,// 9 AudioColumns.ARTIST_ID,// 9
AudioColumns.ARTIST,// 10 AudioColumns.ARTIST,// 10
AudioColumns.COMPOSER,// 11
}, SongLoader.BASE_SELECTION, null, }, SongLoader.BASE_SELECTION, null,
MediaStore.Audio.Genres.Members.DEFAULT_SORT_ORDER); MediaStore.Audio.Genres.Members.DEFAULT_SORT_ORDER);
} catch (SecurityException e) { } catch (SecurityException e) {

View file

@ -4,12 +4,11 @@ import android.content.Context;
import android.database.Cursor; import android.database.Cursor;
import android.provider.MediaStore; import android.provider.MediaStore;
import java.util.ArrayList;
import code.name.monkey.retromusic.model.Album; import code.name.monkey.retromusic.model.Album;
import code.name.monkey.retromusic.model.Artist; import code.name.monkey.retromusic.model.Artist;
import code.name.monkey.retromusic.model.Song; import code.name.monkey.retromusic.model.Song;
import java.util.ArrayList;
import code.name.monkey.retromusic.util.PreferenceUtil; import code.name.monkey.retromusic.util.PreferenceUtil;
import io.reactivex.Observable; import io.reactivex.Observable;
import io.reactivex.annotations.NonNull; import io.reactivex.annotations.NonNull;
@ -26,7 +25,7 @@ public class LastAddedSongsLoader {
} }
public static Cursor makeLastAddedCursor(@NonNull final Context context) { public static Cursor makeLastAddedCursor(@NonNull final Context context) {
long cutoff = PreferenceUtil.getInstance(context).getLastAddedCutoff(); long cutoff = PreferenceUtil.getInstance().getLastAddedCutoff();
return SongLoader.makeSongCursor( return SongLoader.makeSongCursor(
context, context,

View file

@ -5,14 +5,13 @@ import android.database.Cursor;
import android.provider.MediaStore; import android.provider.MediaStore;
import android.provider.MediaStore.Audio.AudioColumns; import android.provider.MediaStore.Audio.AudioColumns;
import java.util.ArrayList;
import java.util.List;
import code.name.monkey.retromusic.model.AbsCustomPlaylist; import code.name.monkey.retromusic.model.AbsCustomPlaylist;
import code.name.monkey.retromusic.model.Playlist; import code.name.monkey.retromusic.model.Playlist;
import code.name.monkey.retromusic.model.PlaylistSong; import code.name.monkey.retromusic.model.PlaylistSong;
import code.name.monkey.retromusic.model.Song; import code.name.monkey.retromusic.model.Song;
import java.util.ArrayList;
import java.util.List;
import io.reactivex.Observable; import io.reactivex.Observable;
import io.reactivex.annotations.NonNull; import io.reactivex.annotations.NonNull;
@ -65,11 +64,12 @@ public class PlaylistSongsLoader {
final int artistId = cursor.getInt(9); final int artistId = cursor.getInt(9);
final String artistName = cursor.getString(10); final String artistName = cursor.getString(10);
final int idInPlaylist = cursor.getInt(11); final int idInPlaylist = cursor.getInt(11);
final String composer = cursor.getString(12);
return new PlaylistSong(id, title, trackNumber, year, duration, data, dateModified, albumId, albumName, artistId, artistName, playlistId, idInPlaylist); return new PlaylistSong(id, title, trackNumber, year, duration, data, dateModified, albumId, albumName, artistId, artistName, playlistId, idInPlaylist, composer);
} }
public static Cursor makePlaylistSongCursor(@NonNull final Context context, final int playlistId) { private static Cursor makePlaylistSongCursor(@NonNull final Context context, final int playlistId) {
try { try {
return context.getContentResolver().query( return context.getContentResolver().query(
MediaStore.Audio.Playlists.Members.getContentUri("external", playlistId), MediaStore.Audio.Playlists.Members.getContentUri("external", playlistId),
@ -85,7 +85,8 @@ public class PlaylistSongsLoader {
AudioColumns.ALBUM,// 8 AudioColumns.ALBUM,// 8
AudioColumns.ARTIST_ID,// 9 AudioColumns.ARTIST_ID,// 9
AudioColumns.ARTIST,// 10 AudioColumns.ARTIST,// 10
MediaStore.Audio.Playlists.Members._ID // 11 MediaStore.Audio.Playlists.Members._ID, // 11
AudioColumns.COMPOSER,// 12
}, SongLoader.BASE_SELECTION, null, }, SongLoader.BASE_SELECTION, null,
MediaStore.Audio.Playlists.Members.DEFAULT_SORT_ORDER); MediaStore.Audio.Playlists.Members.DEFAULT_SORT_ORDER);
} catch (SecurityException e) { } catch (SecurityException e) {

View file

@ -5,16 +5,18 @@ import android.database.Cursor;
import android.provider.BaseColumns; import android.provider.BaseColumns;
import android.provider.MediaStore; import android.provider.MediaStore;
import android.provider.MediaStore.Audio.AudioColumns; import android.provider.MediaStore.Audio.AudioColumns;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import java.util.ArrayList; import java.util.ArrayList;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import code.name.monkey.retromusic.helper.ShuffleHelper; import code.name.monkey.retromusic.helper.ShuffleHelper;
import code.name.monkey.retromusic.model.Song; import code.name.monkey.retromusic.model.Song;
import code.name.monkey.retromusic.providers.BlacklistStore; import code.name.monkey.retromusic.providers.BlacklistStore;
import code.name.monkey.retromusic.util.PreferenceUtil; import code.name.monkey.retromusic.util.PreferenceUtil;
import io.reactivex.Observable; import io.reactivex.Observable;
import io.reactivex.ObservableSource;
import io.reactivex.functions.Function;
/** /**
* Created by hemanths on 10/08/17. * Created by hemanths on 10/08/17.
@ -36,6 +38,7 @@ public class SongLoader {
AudioColumns.ALBUM,// 8 AudioColumns.ALBUM,// 8
AudioColumns.ARTIST_ID,// 9 AudioColumns.ARTIST_ID,// 9
AudioColumns.ARTIST,// 10 AudioColumns.ARTIST,// 10
AudioColumns.COMPOSER,// 11
}; };
@NonNull @NonNull
@ -83,16 +86,17 @@ public class SongLoader {
final String albumName = cursor.getString(8); final String albumName = cursor.getString(8);
final int artistId = cursor.getInt(9); final int artistId = cursor.getInt(9);
final String artistName = cursor.getString(10); final String artistName = cursor.getString(10);
final String composer = cursor.getString(11);
return new Song(id, title, trackNumber, year, duration, data, dateModified, albumId, albumName, return new Song(id, title, trackNumber, year, duration, data, dateModified, albumId, albumName,
artistId, artistName); artistId, artistName, composer);
} }
@Nullable @Nullable
public static Cursor makeSongCursor(@NonNull final Context context, public static Cursor makeSongCursor(@NonNull final Context context,
@Nullable final String selection, final String[] selectionValues) { @Nullable final String selection, final String[] selectionValues) {
return makeSongCursor(context, selection, selectionValues, return makeSongCursor(context, selection, selectionValues,
PreferenceUtil.getInstance(context).getSongSortOrder()); PreferenceUtil.getInstance().getSongSortOrder());
} }
@Nullable @Nullable
@ -167,13 +171,18 @@ public class SongLoader {
} }
public static Observable<ArrayList<Song>> suggestSongs(@NonNull Context context) { public static Observable<ArrayList<Song>> suggestSongs(@NonNull Context context) {
return Observable.create(observer -> { return SongLoader.getAllSongs(context)
SongLoader.getAllSongs(context) .flatMap((Function<ArrayList<Song>, ObservableSource<ArrayList<Song>>>) songs -> {
.subscribe(songs -> { ArrayList<Song> list = new ArrayList<>();
ShuffleHelper.makeShuffleList(songs, -1);
if (songs.size() > 10) {
list.addAll(songs.subList(0, 10));
}
return Observable.just(list);
});
/*.subscribe(songs -> {
ArrayList<Song> list = new ArrayList<>(); ArrayList<Song> list = new ArrayList<>();
if (songs.isEmpty()) { if (songs.isEmpty()) {
observer.onNext(new ArrayList<>());
observer.onComplete();
return; return;
} }
ShuffleHelper.makeShuffleList(songs, -1); ShuffleHelper.makeShuffleList(songs, -1);
@ -182,10 +191,8 @@ public class SongLoader {
} else { } else {
list.addAll(songs); list.addAll(songs);
} }
observer.onNext(list); return;
observer.onComplete(); });*/
});
});
} }
} }

View file

@ -4,17 +4,31 @@ import android.os.Parcel;
import android.os.Parcelable; import android.os.Parcelable;
public class PlaylistSong extends Song { public class PlaylistSong extends Song {
public static final PlaylistSong EMPTY_PLAYLIST_SONG = new PlaylistSong(-1, "", -1, -1, -1, "", -1, -1, "", -1, "", -1, -1); public static final PlaylistSong EMPTY_PLAYLIST_SONG = new PlaylistSong(-1, "", -1, -1, -1, "", -1, -1, "", -1, "", -1, -1, "");
public static final Parcelable.Creator<PlaylistSong> CREATOR = new Parcelable.Creator<PlaylistSong>() {
public PlaylistSong createFromParcel(Parcel source) {
return new PlaylistSong(source);
}
public PlaylistSong[] newArray(int size) {
return new PlaylistSong[size];
}
};
public final int playlistId; public final int playlistId;
public final int idInPlayList; public final int idInPlayList;
public PlaylistSong(int id, String title, int trackNumber, int year, long duration, String data, int dateModified, int albumId, String albumName, int artistId, String artistName, final int playlistId, final int idInPlayList) { public PlaylistSong(int id, String title, int trackNumber, int year, long duration, String data, int dateModified, int albumId, String albumName, int artistId, String artistName, final int playlistId, final int idInPlayList, final String composer) {
super(id, title, trackNumber, year, duration, data, dateModified, albumId, albumName, artistId, artistName); super(id, title, trackNumber, year, duration, data, dateModified, albumId, albumName, artistId, artistName, composer);
this.playlistId = playlistId; this.playlistId = playlistId;
this.idInPlayList = idInPlayList; this.idInPlayList = idInPlayList;
} }
protected PlaylistSong(Parcel in) {
super(in);
this.playlistId = in.readInt();
this.idInPlayList = in.readInt();
}
@Override @Override
public boolean equals(Object o) { public boolean equals(Object o) {
if (this == o) return true; if (this == o) return true;
@ -45,7 +59,6 @@ public class PlaylistSong extends Song {
'}'; '}';
} }
@Override @Override
public int describeContents() { public int describeContents() {
return 0; return 0;
@ -57,20 +70,4 @@ public class PlaylistSong extends Song {
dest.writeInt(this.playlistId); dest.writeInt(this.playlistId);
dest.writeInt(this.idInPlayList); dest.writeInt(this.idInPlayList);
} }
protected PlaylistSong(Parcel in) {
super(in);
this.playlistId = in.readInt();
this.idInPlayList = in.readInt();
}
public static final Parcelable.Creator<PlaylistSong> CREATOR = new Parcelable.Creator<PlaylistSong>() {
public PlaylistSong createFromParcel(Parcel source) {
return new PlaylistSong(source);
}
public PlaylistSong[] newArray(int size) {
return new PlaylistSong[size];
}
};
} }

View file

@ -5,8 +5,16 @@ import android.os.Parcelable;
public class Song implements Parcelable { public class Song implements Parcelable {
public static final Song EMPTY_SONG = new Song(-1, "", -1, -1, -1, "", -1, -1, "", -1, ""); public static final Song EMPTY_SONG = new Song(-1, "", -1, -1, -1, "", -1, -1, "", -1, "", "");
public static final Creator<Song> CREATOR = new Creator<Song>() {
public Song createFromParcel(Parcel source) {
return new Song(source);
}
public Song[] newArray(int size) {
return new Song[size];
}
};
public final int id; public final int id;
public final String title; public final String title;
public final int trackNumber; public final int trackNumber;
@ -18,8 +26,9 @@ public class Song implements Parcelable {
public final String albumName; public final String albumName;
public final int artistId; public final int artistId;
public final String artistName; public final String artistName;
public final String composer;
public Song(int id, String title, int trackNumber, int year, long duration, String data, long dateModified, int albumId, String albumName, int artistId, String artistName) { public Song(int id, String title, int trackNumber, int year, long duration, String data, long dateModified, int albumId, String albumName, int artistId, String artistName, String composer) {
this.id = id; this.id = id;
this.title = title; this.title = title;
this.trackNumber = trackNumber; this.trackNumber = trackNumber;
@ -31,6 +40,22 @@ public class Song implements Parcelable {
this.albumName = albumName; this.albumName = albumName;
this.artistId = artistId; this.artistId = artistId;
this.artistName = artistName; this.artistName = artistName;
this.composer = composer;
}
protected Song(Parcel in) {
this.id = in.readInt();
this.title = in.readString();
this.trackNumber = in.readInt();
this.year = in.readInt();
this.duration = in.readLong();
this.data = in.readString();
this.dateModified = in.readLong();
this.albumId = in.readInt();
this.albumName = in.readString();
this.artistId = in.readInt();
this.artistName = in.readString();
this.composer = in.readString();
} }
@Override @Override
@ -68,6 +93,7 @@ public class Song implements Parcelable {
result = 31 * result + (albumName != null ? albumName.hashCode() : 0); result = 31 * result + (albumName != null ? albumName.hashCode() : 0);
result = 31 * result + artistId; result = 31 * result + artistId;
result = 31 * result + (artistName != null ? artistName.hashCode() : 0); result = 31 * result + (artistName != null ? artistName.hashCode() : 0);
result = 31 * result + (composer != null ? composer.hashCode() : 0);
return result; return result;
} }
@ -85,10 +111,10 @@ public class Song implements Parcelable {
", albumName='" + albumName + '\'' + ", albumName='" + albumName + '\'' +
", artistId=" + artistId + ", artistId=" + artistId +
", artistName='" + artistName + '\'' + ", artistName='" + artistName + '\'' +
", composer='" + composer + '\'' +
'}'; '}';
} }
@Override @Override
public int describeContents() { public int describeContents() {
return 0; return 0;
@ -107,29 +133,6 @@ public class Song implements Parcelable {
dest.writeString(this.albumName); dest.writeString(this.albumName);
dest.writeInt(this.artistId); dest.writeInt(this.artistId);
dest.writeString(this.artistName); dest.writeString(this.artistName);
dest.writeString(this.composer);
} }
protected Song(Parcel in) {
this.id = in.readInt();
this.title = in.readString();
this.trackNumber = in.readInt();
this.year = in.readInt();
this.duration = in.readLong();
this.data = in.readString();
this.dateModified = in.readLong();
this.albumId = in.readInt();
this.albumName = in.readString();
this.artistId = in.readInt();
this.artistName = in.readString();
}
public static final Creator<Song> CREATOR = new Creator<Song>() {
public Song createFromParcel(Parcel source) {
return new Song(source);
}
public Song[] newArray(int size) {
return new Song[size];
}
};
} }

View file

@ -2,10 +2,12 @@ package code.name.monkey.retromusic.mvp.contract;
import java.util.ArrayList; import java.util.ArrayList;
import code.name.monkey.retromusic.model.AbsCustomPlaylist;
import code.name.monkey.retromusic.model.Album; import code.name.monkey.retromusic.model.Album;
import code.name.monkey.retromusic.model.Artist; import code.name.monkey.retromusic.model.Artist;
import code.name.monkey.retromusic.model.Genre; import code.name.monkey.retromusic.model.Genre;
import code.name.monkey.retromusic.model.Playlist; import code.name.monkey.retromusic.model.Playlist;
import code.name.monkey.retromusic.model.Song;
import code.name.monkey.retromusic.mvp.BasePresenter; import code.name.monkey.retromusic.mvp.BasePresenter;
import code.name.monkey.retromusic.mvp.BaseView; import code.name.monkey.retromusic.mvp.BaseView;
@ -21,7 +23,9 @@ public interface HomeContract {
void topAlbums(ArrayList<Album> albums); void topAlbums(ArrayList<Album> albums);
void suggestions(ArrayList<Playlist> songs); void suggestions(ArrayList<Song> songs);
void playlists(ArrayList<Playlist> playlists);
void geners(ArrayList<Genre> songs); void geners(ArrayList<Genre> songs);
} }

View file

@ -1,7 +1,6 @@
package code.name.monkey.retromusic.mvp.presenter; package code.name.monkey.retromusic.mvp.presenter;
import androidx.annotation.NonNull; import androidx.annotation.NonNull;
import code.name.monkey.retromusic.RetroApplication;
import code.name.monkey.retromusic.mvp.Presenter; import code.name.monkey.retromusic.mvp.Presenter;
import code.name.monkey.retromusic.mvp.contract.HomeContract; import code.name.monkey.retromusic.mvp.contract.HomeContract;
import code.name.monkey.retromusic.util.PreferenceUtil; import code.name.monkey.retromusic.util.PreferenceUtil;
@ -20,14 +19,11 @@ public class HomePresenter extends Presenter implements HomeContract.HomePresent
loadRecentAlbums(); loadRecentAlbums();
loadRecentArtists(); loadRecentArtists();
loadTopAlbums(); loadTopAlbums();
loadTopArtists(); loadTopArtists();
loadSuggestions(); loadSuggestions();
if (PreferenceUtil.getInstance(RetroApplication.getInstance()).isGenreShown()) loadGenres(); if (PreferenceUtil.getInstance().isGenreShown()) loadGenres();
} }
@ -40,9 +36,9 @@ public class HomePresenter extends Presenter implements HomeContract.HomePresent
disposable.add(repository.getAllPlaylists() disposable.add(repository.getAllPlaylists()
.observeOn(schedulerProvider.ui()) .observeOn(schedulerProvider.ui())
.subscribeOn(schedulerProvider.io()) .subscribeOn(schedulerProvider.io())
.subscribe(playlists -> { .subscribe(playlist -> {
if (!playlists.isEmpty()) { if (!playlist.isEmpty()) {
view.suggestions(playlists); view.playlists(playlist);
} }
}, },
throwable -> view.showEmptyView(), () -> view.completed())); throwable -> view.showEmptyView(), () -> view.completed()));
@ -107,7 +103,11 @@ public class HomePresenter extends Presenter implements HomeContract.HomePresent
@Override @Override
public void loadSuggestions() { public void loadSuggestions() {
disposable.add(repository.getSuggestionSongs()
.observeOn(schedulerProvider.ui())
.subscribeOn(schedulerProvider.io())
.doOnSubscribe(disposable1 -> view.loading())
.subscribe(songs -> view.suggestions(songs), throwable -> view.showEmptyView(), () -> view.completed()));
} }
@Override @Override

View file

@ -44,7 +44,7 @@ public class AlbumCoverStylePreferenceDialog extends DialogFragment implements
viewPager.setAdapter(new AlbumCoverStyleAdapter(getActivity())); viewPager.setAdapter(new AlbumCoverStyleAdapter(getActivity()));
viewPager.addOnPageChangeListener(this); viewPager.addOnPageChangeListener(this);
viewPager.setPageMargin((int) ViewUtil.convertDpToPixel(32, getResources())); viewPager.setPageMargin((int) ViewUtil.convertDpToPixel(32, getResources()));
viewPager.setCurrentItem(PreferenceUtil.getInstance(getActivity()).getAlbumCoverStyle().ordinal()); viewPager.setCurrentItem(PreferenceUtil.getInstance().getAlbumCoverStyle().ordinal());
return new MaterialDialog.Builder(getActivity()) return new MaterialDialog.Builder(getActivity())
.title(R.string.pref_title_album_cover_style) .title(R.string.pref_title_album_cover_style)
@ -67,7 +67,7 @@ public class AlbumCoverStylePreferenceDialog extends DialogFragment implements
super.onDismiss(dialog); super.onDismiss(dialog);
if (whichButtonClicked == DialogAction.POSITIVE) { if (whichButtonClicked == DialogAction.POSITIVE) {
AlbumCoverStyle nowPlayingScreen = AlbumCoverStyle.values()[viewPagerPosition]; AlbumCoverStyle nowPlayingScreen = AlbumCoverStyle.values()[viewPagerPosition];
PreferenceUtil.getInstance(getActivity()).setAlbumCoverStyle(nowPlayingScreen); PreferenceUtil.getInstance().setAlbumCoverStyle(nowPlayingScreen);
} }
} }

View file

@ -48,7 +48,7 @@ public class NowPlayingScreenPreferenceDialog extends DialogFragment implements
viewPager.setAdapter(new NowPlayingScreenAdapter(getActivity())); viewPager.setAdapter(new NowPlayingScreenAdapter(getActivity()));
viewPager.addOnPageChangeListener(this); viewPager.addOnPageChangeListener(this);
viewPager.setPageMargin((int) ViewUtil.convertDpToPixel(32, getResources())); viewPager.setPageMargin((int) ViewUtil.convertDpToPixel(32, getResources()));
viewPager.setCurrentItem(PreferenceUtil.getInstance(getActivity()).getNowPlayingScreen().ordinal()); viewPager.setCurrentItem(PreferenceUtil.getInstance().getNowPlayingScreen().ordinal());
return new MaterialDialog.Builder(getActivity()) return new MaterialDialog.Builder(getActivity())
.title(R.string.pref_title_now_playing_screen_appearance) .title(R.string.pref_title_now_playing_screen_appearance)
@ -76,7 +76,7 @@ public class NowPlayingScreenPreferenceDialog extends DialogFragment implements
Toast.makeText(getContext(), result, Toast.LENGTH_SHORT).show(); Toast.makeText(getContext(), result, Toast.LENGTH_SHORT).show();
NavigationUtil.goToProVersion(getActivity()); NavigationUtil.goToProVersion(getActivity());
} else { } else {
PreferenceUtil.getInstance(getActivity()).setNowPlayingScreen(nowPlayingScreen); PreferenceUtil.getInstance().setNowPlayingScreen(nowPlayingScreen);
} }
} }
} }
@ -84,8 +84,8 @@ public class NowPlayingScreenPreferenceDialog extends DialogFragment implements
private boolean isNowPlayingThemes(NowPlayingScreen nowPlayingScreen) { private boolean isNowPlayingThemes(NowPlayingScreen nowPlayingScreen) {
if (nowPlayingScreen.equals(NowPlayingScreen.BLUR_CARD)) { if (nowPlayingScreen.equals(NowPlayingScreen.BLUR_CARD)) {
PreferenceUtil.getInstance(getContext()).resetCarouselEffect(); PreferenceUtil.getInstance().resetCarouselEffect();
PreferenceUtil.getInstance(getContext()).resetCircularAlbumArt(); PreferenceUtil.getInstance().resetCircularAlbumArt();
} }
return (nowPlayingScreen.equals(NowPlayingScreen.FULL) || return (nowPlayingScreen.equals(NowPlayingScreen.FULL) ||

View file

@ -31,13 +31,13 @@ public class BlacklistStore extends SQLiteOpenHelper {
public static synchronized BlacklistStore getInstance(@NonNull final Context context) { public static synchronized BlacklistStore getInstance(@NonNull final Context context) {
if (sInstance == null) { if (sInstance == null) {
sInstance = new BlacklistStore(context.getApplicationContext()); sInstance = new BlacklistStore(context.getApplicationContext());
if (!PreferenceUtil.getInstance(context).initializedBlacklist()) { if (!PreferenceUtil.getInstance().initializedBlacklist()) {
// blacklisted by default // blacklisted by default
sInstance.addPathImpl(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_ALARMS)); sInstance.addPathImpl(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_ALARMS));
sInstance.addPathImpl(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_NOTIFICATIONS)); sInstance.addPathImpl(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_NOTIFICATIONS));
sInstance.addPathImpl(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_RINGTONES)); sInstance.addPathImpl(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_RINGTONES));
PreferenceUtil.getInstance(context).setInitializedBlacklist(); PreferenceUtil.getInstance().setInitializedBlacklist();
} }
} }
return sInstance; return sInstance;

View file

@ -41,7 +41,7 @@ public class MusicPlaybackQueueStore extends SQLiteOpenHelper {
public static final String DATABASE_NAME = "music_playback_state.db"; public static final String DATABASE_NAME = "music_playback_state.db";
public static final String PLAYING_QUEUE_TABLE_NAME = "playing_queue"; public static final String PLAYING_QUEUE_TABLE_NAME = "playing_queue";
public static final String ORIGINAL_PLAYING_QUEUE_TABLE_NAME = "original_playing_queue"; public static final String ORIGINAL_PLAYING_QUEUE_TABLE_NAME = "original_playing_queue";
private static final int VERSION = 3; private static final int VERSION = 4;
@Nullable @Nullable
private static MusicPlaybackQueueStore sInstance = null; private static MusicPlaybackQueueStore sInstance = null;
@ -110,6 +110,9 @@ public class MusicPlaybackQueueStore extends SQLiteOpenHelper {
builder.append(" INT NOT NULL,"); builder.append(" INT NOT NULL,");
builder.append(AudioColumns.ARTIST); builder.append(AudioColumns.ARTIST);
builder.append(" STRING NOT NULL,");
builder.append(AudioColumns.COMPOSER);
builder.append(" STRING NOT NULL);"); builder.append(" STRING NOT NULL);");
db.execSQL(builder.toString()); db.execSQL(builder.toString());
@ -173,6 +176,7 @@ public class MusicPlaybackQueueStore extends SQLiteOpenHelper {
values.put(AudioColumns.ALBUM, song.albumName); values.put(AudioColumns.ALBUM, song.albumName);
values.put(AudioColumns.ARTIST_ID, song.artistId); values.put(AudioColumns.ARTIST_ID, song.artistId);
values.put(AudioColumns.ARTIST, song.artistName); values.put(AudioColumns.ARTIST, song.artistName);
values.put(AudioColumns.COMPOSER, song.composer);
database.insert(tableName, null, values); database.insert(tableName, null, values);
} }

View file

@ -52,8 +52,8 @@ public class RepositoryImpl implements Repository {
} }
@Override @Override
public Observable<ArrayList<AbsSmartPlaylist>> getSuggestionSongs() { public Observable<ArrayList<Song>> getSuggestionSongs() {
return HomeLoader.getRecentAndTopThings(context); return SongLoader.suggestSongs(context);
} }
@Override @Override

View file

@ -18,7 +18,7 @@ public interface Repository {
Observable<ArrayList<Song>> getAllSongs(); Observable<ArrayList<Song>> getAllSongs();
Observable<ArrayList<AbsSmartPlaylist>> getSuggestionSongs(); Observable<ArrayList<Song>> getSuggestionSongs();
Observable<Song> getSong(int id); Observable<Song> getSong(int id);

View file

@ -1,12 +1,9 @@
package code.name.monkey.retromusic.rest.service; package code.name.monkey.retromusic.rest.service;
import androidx.annotation.Nullable; import androidx.annotation.Nullable;
import code.name.monkey.retromusic.BuildConfig;
import code.name.monkey.retromusic.rest.model.LastFmAlbum; import code.name.monkey.retromusic.rest.model.LastFmAlbum;
import code.name.monkey.retromusic.rest.model.LastFmArtist; import code.name.monkey.retromusic.rest.model.LastFmArtist;
import code.name.monkey.retromusic.rest.model.LastFmTrack; import code.name.monkey.retromusic.rest.model.LastFmTrack;
import io.reactivex.Observable; import io.reactivex.Observable;
import retrofit2.Call; import retrofit2.Call;
import retrofit2.http.GET; import retrofit2.http.GET;
@ -14,18 +11,16 @@ import retrofit2.http.Header;
import retrofit2.http.Query; import retrofit2.http.Query;
public interface LastFMService { public interface LastFMService {
String API_KEY = "bd9c6ea4d55ec9ed3af7d276e5ece304"; String API_KEY_BAK = "bd9c6ea4d55ec9ed3af7d276e5ece304";
//String API_KEY = BuildConfig.LASTFM_API_KEY; String API_KEY = "c679c8d3efa84613dc7dcb2e8d42da4c";
//String BASE_QUERY_PARAMETERS = "?format=json&autocorrect=1&api_key=" + API_KEY;
String BASE_QUERY_PARAMETERS = "?format=json&autocorrect=1&api_key=" + API_KEY; String BASE_QUERY_PARAMETERS = "?format=json&autocorrect=1&api_key=" + API_KEY;
String METHOD_TRACK = "track.getInfo"; String METHOD_TRACK = "track.getInfo";
@GET(BASE_QUERY_PARAMETERS + "&method=album.getinfo") @GET(BASE_QUERY_PARAMETERS + "&method=album.getinfo")
Observable<LastFmAlbum> getAlbumInfo(@Query("album") String albumName, @Query("artist") String artistName, @Nullable @Query("lang") String language); Observable<LastFmAlbum> getAlbumInfo(@Query("album") String albumName, @Query("artist") String artistName, @Nullable @Query("lang") String language);
@GET("?api_key=" + BuildConfig.LASTFM_API_KEY + "&format=json&autocorrect=1" + "&method=" + METHOD_TRACK) @GET("?api_key=" + API_KEY + "&format=json&autocorrect=1" + "&method=" + METHOD_TRACK)
Observable<LastFmTrack> getTrackInfo(@Query("artist") String artist, @Query("track") String track); Observable<LastFmTrack> getTrackInfo(@Query("artist") String artist, @Query("track") String track);
@GET(BASE_QUERY_PARAMETERS + "&method=artist.getinfo") @GET(BASE_QUERY_PARAMETERS + "&method=artist.getinfo")

View file

@ -115,7 +115,7 @@ public class MultiPlayer implements Playback, MediaPlayer.OnErrorListener, Media
if (path == null) { if (path == null) {
return; return;
} }
if (PreferenceUtil.getInstance(context).gaplessPlayback()) { if (PreferenceUtil.getInstance().gaplessPlayback()) {
mNextMediaPlayer = new MediaPlayer(); mNextMediaPlayer = new MediaPlayer();
mNextMediaPlayer.setWakeMode(context, PowerManager.PARTIAL_WAKE_LOCK); mNextMediaPlayer.setWakeMode(context, PowerManager.PARTIAL_WAKE_LOCK);
mNextMediaPlayer.setAudioSessionId(getAudioSessionId()); mNextMediaPlayer.setAudioSessionId(getAudioSessionId());

View file

@ -27,8 +27,6 @@ import android.os.PowerManager;
import android.os.Process; import android.os.Process;
import android.preference.PreferenceManager; import android.preference.PreferenceManager;
import android.provider.MediaStore; import android.provider.MediaStore;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import android.support.v4.media.MediaMetadataCompat; import android.support.v4.media.MediaMetadataCompat;
import android.support.v4.media.session.MediaSessionCompat; import android.support.v4.media.session.MediaSessionCompat;
import android.support.v4.media.session.PlaybackStateCompat; import android.support.v4.media.session.PlaybackStateCompat;
@ -37,7 +35,6 @@ import android.telephony.TelephonyManager;
import android.util.Log; import android.util.Log;
import android.widget.Toast; import android.widget.Toast;
import code.name.monkey.retromusic.service.notification.PlayingNotificationOreo;
import com.bumptech.glide.BitmapRequestBuilder; import com.bumptech.glide.BitmapRequestBuilder;
import com.bumptech.glide.Glide; import com.bumptech.glide.Glide;
import com.bumptech.glide.request.animation.GlideAnimation; import com.bumptech.glide.request.animation.GlideAnimation;
@ -48,6 +45,8 @@ import java.util.ArrayList;
import java.util.List; import java.util.List;
import java.util.Random; import java.util.Random;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import code.name.monkey.retromusic.R; import code.name.monkey.retromusic.R;
import code.name.monkey.retromusic.appwidgets.AppWidgetBig; import code.name.monkey.retromusic.appwidgets.AppWidgetBig;
import code.name.monkey.retromusic.appwidgets.AppWidgetCard; import code.name.monkey.retromusic.appwidgets.AppWidgetCard;
@ -66,6 +65,7 @@ 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.PlayingNotificationImpl24; import code.name.monkey.retromusic.service.notification.PlayingNotificationImpl24;
import code.name.monkey.retromusic.service.notification.PlayingNotificationOreo;
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.PreferenceUtil; import code.name.monkey.retromusic.util.PreferenceUtil;
@ -295,7 +295,7 @@ public class MusicService extends Service implements SharedPreferences.OnSharedP
getContentResolver().registerContentObserver( getContentResolver().registerContentObserver(
MediaStore.Audio.Media.EXTERNAL_CONTENT_URI, true, mediaStoreObserver); MediaStore.Audio.Media.EXTERNAL_CONTENT_URI, true, mediaStoreObserver);
PreferenceUtil.getInstance(this).registerOnSharedPreferenceChangedListener(this); PreferenceUtil.getInstance().registerOnSharedPreferenceChangedListener(this);
restoreState(); restoreState();
@ -446,7 +446,7 @@ public class MusicService extends Service implements SharedPreferences.OnSharedP
quit(); quit();
releaseResources(); releaseResources();
getContentResolver().unregisterContentObserver(mediaStoreObserver); getContentResolver().unregisterContentObserver(mediaStoreObserver);
PreferenceUtil.getInstance(this).unregisterOnSharedPreferenceChangedListener(this); PreferenceUtil.getInstance().unregisterOnSharedPreferenceChangedListener(this);
wakeLock.release(); wakeLock.release();
sendBroadcast(new Intent("code.name.monkey.retromusic.RETRO_MUSIC_MUSIC_SERVICE_DESTROYED")); sendBroadcast(new Intent("code.name.monkey.retromusic.RETRO_MUSIC_MUSIC_SERVICE_DESTROYED"));
@ -627,7 +627,7 @@ public class MusicService extends Service implements SharedPreferences.OnSharedP
} }
public void initNotification() { public void initNotification() {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N && !PreferenceUtil.getInstance(this).classicNotification()) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N && !PreferenceUtil.getInstance().classicNotification()) {
playingNotification = new PlayingNotificationImpl24(); playingNotification = new PlayingNotificationImpl24();
} else { } else {
playingNotification = new PlayingNotificationOreo(); playingNotification = new PlayingNotificationOreo();
@ -672,12 +672,12 @@ public class MusicService extends Service implements SharedPreferences.OnSharedP
metaData.putLong(MediaMetadataCompat.METADATA_KEY_NUM_TRACKS, getPlayingQueue().size()); metaData.putLong(MediaMetadataCompat.METADATA_KEY_NUM_TRACKS, getPlayingQueue().size());
} }
if (PreferenceUtil.getInstance(this).albumArtOnLockscreen()) { if (PreferenceUtil.getInstance().albumArtOnLockscreen()) {
final Point screenSize = RetroUtil.getScreenSize(MusicService.this); final Point screenSize = RetroUtil.getScreenSize(MusicService.this);
final BitmapRequestBuilder<?, Bitmap> request = SongGlideRequest.Builder.from(Glide.with(MusicService.this), song) final BitmapRequestBuilder<?, Bitmap> request = SongGlideRequest.Builder.from(Glide.with(MusicService.this), song)
.checkIgnoreMediaStore(MusicService.this) .checkIgnoreMediaStore(MusicService.this)
.asBitmap().build(); .asBitmap().build();
if (PreferenceUtil.getInstance(this).blurredAlbumArt()) { if (PreferenceUtil.getInstance().blurredAlbumArt()) {
request.transform(new BlurTransformation.Builder(MusicService.this).build()); request.transform(new BlurTransformation.Builder(MusicService.this).build());
} }
runOnUiThread(new Runnable() { runOnUiThread(new Runnable() {
@ -1090,16 +1090,12 @@ public class MusicService extends Service implements SharedPreferences.OnSharedP
final Song song = getCurrentSong(); final Song song = getCurrentSong();
intent.putExtra("id", song.id); intent.putExtra("id", song.id);
intent.putExtra("artist", song.artistName); intent.putExtra("artist", song.artistName);
intent.putExtra("album", song.albumName); intent.putExtra("album", song.albumName);
intent.putExtra("track", song.title); intent.putExtra("track", song.title);
intent.putExtra("duration", song.duration); intent.putExtra("duration", song.duration);
intent.putExtra("position", (long) getSongProgressMillis()); intent.putExtra("position", (long) getSongProgressMillis());
intent.putExtra("playing", isPlaying()); intent.putExtra("playing", isPlaying());
intent.putExtra("scrobbling_source", RETRO_MUSIC_PACKAGE_NAME); intent.putExtra("scrobbling_source", RETRO_MUSIC_PACKAGE_NAME);
sendStickyBroadcast(intent); sendStickyBroadcast(intent);
@ -1196,7 +1192,7 @@ public class MusicService extends Service implements SharedPreferences.OnSharedP
} }
private void registerHeadsetEvents() { private void registerHeadsetEvents() {
if (!headsetReceiverRegistered && PreferenceUtil.getInstance(this).getHeadsetPlugged()) { if (!headsetReceiverRegistered && PreferenceUtil.getInstance().getHeadsetPlugged()) {
registerReceiver(headsetReceiver, headsetReceiverIntentFilter); registerReceiver(headsetReceiver, headsetReceiverIntentFilter);
headsetReceiverRegistered = true; headsetReceiverRegistered = true;
} }
@ -1252,7 +1248,7 @@ public class MusicService extends Service implements SharedPreferences.OnSharedP
switch (msg.what) { switch (msg.what) {
case DUCK: case DUCK:
if (PreferenceUtil.getInstance(service).audioDucking()) { if (PreferenceUtil.getInstance().audioDucking()) {
currentDuckVolume -= .05f; currentDuckVolume -= .05f;
if (currentDuckVolume > .2f) { if (currentDuckVolume > .2f) {
sendEmptyMessageDelayed(DUCK, 10); sendEmptyMessageDelayed(DUCK, 10);
@ -1266,7 +1262,7 @@ public class MusicService extends Service implements SharedPreferences.OnSharedP
break; break;
case UNDUCK: case UNDUCK:
if (PreferenceUtil.getInstance(service).audioDucking()) { if (PreferenceUtil.getInstance().audioDucking()) {
currentDuckVolume += .03f; currentDuckVolume += .03f;
if (currentDuckVolume < 1f) { if (currentDuckVolume < 1f) {
sendEmptyMessageDelayed(UNDUCK, 10); sendEmptyMessageDelayed(UNDUCK, 10);

View file

@ -1,16 +1,17 @@
package code.name.monkey.retromusic.service.notification; package code.name.monkey.retromusic.service.notification;
import static android.content.Context.NOTIFICATION_SERVICE;
import android.app.Notification; import android.app.Notification;
import android.app.NotificationChannel; import android.app.NotificationChannel;
import android.app.NotificationManager; import android.app.NotificationManager;
import android.os.Build; import android.os.Build;
import androidx.annotation.RequiresApi; import androidx.annotation.RequiresApi;
import code.name.monkey.retromusic.R; import code.name.monkey.retromusic.R;
import code.name.monkey.retromusic.service.MusicService; import code.name.monkey.retromusic.service.MusicService;
import static android.content.Context.NOTIFICATION_SERVICE;
public abstract class PlayingNotification { public abstract class PlayingNotification {

View file

@ -9,8 +9,6 @@ import android.content.Intent;
import android.graphics.Bitmap; import android.graphics.Bitmap;
import android.graphics.Color; import android.graphics.Color;
import android.graphics.drawable.Drawable; import android.graphics.drawable.Drawable;
import androidx.annotation.Nullable;
import androidx.core.app.NotificationCompat;
import android.text.TextUtils; import android.text.TextUtils;
import android.view.View; import android.view.View;
import android.widget.RemoteViews; import android.widget.RemoteViews;
@ -20,6 +18,8 @@ import com.bumptech.glide.request.animation.GlideAnimation;
import com.bumptech.glide.request.target.SimpleTarget; import com.bumptech.glide.request.target.SimpleTarget;
import com.bumptech.glide.request.target.Target; import com.bumptech.glide.request.target.Target;
import androidx.annotation.Nullable;
import androidx.core.app.NotificationCompat;
import code.name.monkey.appthemehelper.util.ColorUtil; import code.name.monkey.appthemehelper.util.ColorUtil;
import code.name.monkey.appthemehelper.util.MaterialValueHelper; import code.name.monkey.appthemehelper.util.MaterialValueHelper;
import code.name.monkey.retromusic.R; import code.name.monkey.retromusic.R;
@ -28,6 +28,7 @@ import code.name.monkey.retromusic.glide.palette.BitmapPaletteWrapper;
import code.name.monkey.retromusic.model.Song; import code.name.monkey.retromusic.model.Song;
import code.name.monkey.retromusic.service.MusicService; import code.name.monkey.retromusic.service.MusicService;
import code.name.monkey.retromusic.ui.activities.MainActivity; import code.name.monkey.retromusic.ui.activities.MainActivity;
import code.name.monkey.retromusic.ui.activities.NowPayingActivity;
import code.name.monkey.retromusic.util.PreferenceUtil; import code.name.monkey.retromusic.util.PreferenceUtil;
import code.name.monkey.retromusic.util.RetroColorUtil; import code.name.monkey.retromusic.util.RetroColorUtil;
import code.name.monkey.retromusic.util.RetroUtil; import code.name.monkey.retromusic.util.RetroUtil;
@ -76,7 +77,7 @@ public class PlayingNotificationImpl extends PlayingNotification {
linkButtons(notificationLayout, notificationLayoutBig); linkButtons(notificationLayout, notificationLayoutBig);
Intent action = new Intent(service, MainActivity.class); Intent action = new Intent(service, NowPayingActivity.class);
action.putExtra("expand", true); action.putExtra("expand", true);
action.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TOP); action.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TOP);
@ -114,7 +115,7 @@ public class PlayingNotificationImpl extends PlayingNotification {
public void onResourceReady(BitmapPaletteWrapper resource, public void onResourceReady(BitmapPaletteWrapper resource,
GlideAnimation<? super BitmapPaletteWrapper> glideAnimation) { GlideAnimation<? super BitmapPaletteWrapper> glideAnimation) {
update(resource.getBitmap(), update(resource.getBitmap(),
PreferenceUtil.getInstance(service).isDominantColor() ? PreferenceUtil.getInstance().isDominantColor() ?
RetroColorUtil.getDominantColor(resource.getBitmap(), Color.TRANSPARENT) : RetroColorUtil.getDominantColor(resource.getBitmap(), Color.TRANSPARENT) :
RetroColorUtil.getColor(resource.getPalette(), Color.TRANSPARENT)); RetroColorUtil.getColor(resource.getPalette(), Color.TRANSPARENT));
} }
@ -135,7 +136,7 @@ public class PlayingNotificationImpl extends PlayingNotification {
.setImageViewResource(R.id.image, R.drawable.default_album_art); .setImageViewResource(R.id.image, R.drawable.default_album_art);
} }
if (!PreferenceUtil.getInstance(service).coloredNotification()) { if (!PreferenceUtil.getInstance().coloredNotification()) {
bgColor = Color.WHITE; bgColor = Color.WHITE;
} }
setBackgroundColor(bgColor); setBackgroundColor(bgColor);

View file

@ -1,10 +1,5 @@
package code.name.monkey.retromusic.service.notification; package code.name.monkey.retromusic.service.notification;
import static code.name.monkey.retromusic.Constants.ACTION_QUIT;
import static code.name.monkey.retromusic.Constants.ACTION_REWIND;
import static code.name.monkey.retromusic.Constants.ACTION_SKIP;
import static code.name.monkey.retromusic.Constants.ACTION_TOGGLE_PAUSE;
import android.app.PendingIntent; import android.app.PendingIntent;
import android.content.ComponentName; import android.content.ComponentName;
import android.content.Intent; import android.content.Intent;
@ -13,22 +8,28 @@ 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;
import android.text.Html;
import com.bumptech.glide.Glide;
import com.bumptech.glide.request.animation.GlideAnimation;
import com.bumptech.glide.request.target.SimpleTarget;
import androidx.core.app.NotificationCompat; import androidx.core.app.NotificationCompat;
import androidx.media.app.NotificationCompat.MediaStyle; import androidx.media.app.NotificationCompat.MediaStyle;
import android.text.Html;
import code.name.monkey.retromusic.Constants; import code.name.monkey.retromusic.Constants;
import code.name.monkey.retromusic.R; import code.name.monkey.retromusic.R;
import code.name.monkey.retromusic.RetroApplication;
import code.name.monkey.retromusic.glide.SongGlideRequest; import code.name.monkey.retromusic.glide.SongGlideRequest;
import code.name.monkey.retromusic.glide.palette.BitmapPaletteWrapper; import code.name.monkey.retromusic.glide.palette.BitmapPaletteWrapper;
import code.name.monkey.retromusic.model.Song; import code.name.monkey.retromusic.model.Song;
import code.name.monkey.retromusic.service.MusicService; import code.name.monkey.retromusic.service.MusicService;
import code.name.monkey.retromusic.ui.activities.MainActivity; import code.name.monkey.retromusic.ui.activities.NowPayingActivity;
import code.name.monkey.retromusic.util.PreferenceUtil; import code.name.monkey.retromusic.util.PreferenceUtil;
import code.name.monkey.retromusic.util.RetroColorUtil; import code.name.monkey.retromusic.util.RetroColorUtil;
import com.bumptech.glide.Glide;
import com.bumptech.glide.request.animation.GlideAnimation; import static code.name.monkey.retromusic.Constants.ACTION_QUIT;
import com.bumptech.glide.request.target.SimpleTarget; import static code.name.monkey.retromusic.Constants.ACTION_REWIND;
import static code.name.monkey.retromusic.Constants.ACTION_SKIP;
import static code.name.monkey.retromusic.Constants.ACTION_TOGGLE_PAUSE;
public class PlayingNotificationImpl24 extends PlayingNotification { public class PlayingNotificationImpl24 extends PlayingNotification {
@ -42,7 +43,7 @@ public class PlayingNotificationImpl24 extends PlayingNotification {
final int playButtonResId = isPlaying ? R.drawable.ic_pause_white_24dp : final int playButtonResId = isPlaying ? R.drawable.ic_pause_white_24dp :
R.drawable.ic_play_arrow_white_24dp; R.drawable.ic_play_arrow_white_24dp;
Intent action = new Intent(service, MainActivity.class); Intent action = new Intent(service, NowPayingActivity.class);
action.putExtra("expand", true); action.putExtra("expand", true);
action.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TOP); action.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TOP);
final PendingIntent clickIntent = PendingIntent final PendingIntent clickIntent = PendingIntent
@ -64,7 +65,7 @@ public class PlayingNotificationImpl24 extends PlayingNotification {
public void onResourceReady(BitmapPaletteWrapper resource, public void onResourceReady(BitmapPaletteWrapper resource,
GlideAnimation<? super BitmapPaletteWrapper> glideAnimation) { GlideAnimation<? super BitmapPaletteWrapper> glideAnimation) {
update(resource.getBitmap(), update(resource.getBitmap(),
PreferenceUtil.getInstance(RetroApplication.getInstance()).isDominantColor() ? PreferenceUtil.getInstance().isDominantColor() ?
RetroColorUtil.getDominantColor(resource.getBitmap(), Color.TRANSPARENT) : RetroColorUtil.getDominantColor(resource.getBitmap(), Color.TRANSPARENT) :
RetroColorUtil.getColor(resource.getPalette(), Color.TRANSPARENT)); RetroColorUtil.getColor(resource.getPalette(), Color.TRANSPARENT));
} }
@ -120,8 +121,8 @@ public class PlayingNotificationImpl24 extends PlayingNotification {
.setMediaSession(service.getMediaSession().getSessionToken()) .setMediaSession(service.getMediaSession().getSessionToken())
.setShowActionsInCompactView(0, 1, 2, 3, 4)) .setShowActionsInCompactView(0, 1, 2, 3, 4))
.setVisibility(NotificationCompat.VISIBILITY_PUBLIC); .setVisibility(NotificationCompat.VISIBILITY_PUBLIC);
if (Build.VERSION.SDK_INT <= Build.VERSION_CODES.O && PreferenceUtil if (Build.VERSION.SDK_INT <= Build.VERSION_CODES.O &&
.getInstance(service).coloredNotification()) { PreferenceUtil.getInstance().coloredNotification()) {
builder.setColor(color); builder.setColor(color);
} }
} }

View file

@ -1,11 +1,5 @@
package code.name.monkey.retromusic.service.notification; package code.name.monkey.retromusic.service.notification;
import static code.name.monkey.retromusic.Constants.ACTION_QUIT;
import static code.name.monkey.retromusic.Constants.ACTION_REWIND;
import static code.name.monkey.retromusic.Constants.ACTION_SKIP;
import static code.name.monkey.retromusic.Constants.ACTION_TOGGLE_PAUSE;
import static code.name.monkey.retromusic.util.RetroUtil.createBitmap;
import android.app.PendingIntent; import android.app.PendingIntent;
import android.content.ComponentName; import android.content.ComponentName;
import android.content.Context; import android.content.Context;
@ -14,9 +8,15 @@ import android.content.res.TypedArray;
import android.graphics.Bitmap; import android.graphics.Bitmap;
import android.graphics.Color; import android.graphics.Color;
import android.graphics.drawable.Drawable; import android.graphics.drawable.Drawable;
import android.widget.RemoteViews;
import com.bumptech.glide.Glide;
import com.bumptech.glide.request.animation.GlideAnimation;
import com.bumptech.glide.request.target.SimpleTarget;
import com.bumptech.glide.request.target.Target;
import androidx.annotation.Nullable; import androidx.annotation.Nullable;
import androidx.core.app.NotificationCompat; import androidx.core.app.NotificationCompat;
import android.widget.RemoteViews;
import code.name.monkey.appthemehelper.util.ColorUtil; import code.name.monkey.appthemehelper.util.ColorUtil;
import code.name.monkey.appthemehelper.util.MaterialValueHelper; import code.name.monkey.appthemehelper.util.MaterialValueHelper;
import code.name.monkey.retromusic.R; import code.name.monkey.retromusic.R;
@ -24,14 +24,16 @@ import code.name.monkey.retromusic.glide.SongGlideRequest;
import code.name.monkey.retromusic.glide.palette.BitmapPaletteWrapper; import code.name.monkey.retromusic.glide.palette.BitmapPaletteWrapper;
import code.name.monkey.retromusic.model.Song; import code.name.monkey.retromusic.model.Song;
import code.name.monkey.retromusic.service.MusicService; import code.name.monkey.retromusic.service.MusicService;
import code.name.monkey.retromusic.ui.activities.MainActivity; import code.name.monkey.retromusic.ui.activities.NowPayingActivity;
import code.name.monkey.retromusic.util.PreferenceUtil; import code.name.monkey.retromusic.util.PreferenceUtil;
import code.name.monkey.retromusic.util.RetroUtil; import code.name.monkey.retromusic.util.RetroUtil;
import code.name.monkey.retromusic.util.color.MediaNotificationProcessor; import code.name.monkey.retromusic.util.color.MediaNotificationProcessor;
import com.bumptech.glide.Glide;
import com.bumptech.glide.request.animation.GlideAnimation; import static code.name.monkey.retromusic.Constants.ACTION_QUIT;
import com.bumptech.glide.request.target.SimpleTarget; import static code.name.monkey.retromusic.Constants.ACTION_REWIND;
import com.bumptech.glide.request.target.Target; import static code.name.monkey.retromusic.Constants.ACTION_SKIP;
import static code.name.monkey.retromusic.Constants.ACTION_TOGGLE_PAUSE;
import static code.name.monkey.retromusic.util.RetroUtil.createBitmap;
/** /**
* @author Hemanth S (h4h13). * @author Hemanth S (h4h13).
@ -71,7 +73,7 @@ public class PlayingNotificationOreo extends PlayingNotification {
final RemoteViews notificationLayout = getCombinedRemoteViews(true, song); final RemoteViews notificationLayout = getCombinedRemoteViews(true, song);
final RemoteViews notificationLayoutBig = getCombinedRemoteViews(false, song); final RemoteViews notificationLayoutBig = getCombinedRemoteViews(false, song);
Intent action = new Intent(service, MainActivity.class); Intent action = new Intent(service, NowPayingActivity.class);
action.putExtra("expand", true); action.putExtra("expand", true);
action.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TOP); action.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TOP);
@ -131,7 +133,7 @@ public class PlayingNotificationOreo extends PlayingNotification {
.setImageViewResource(R.id.largeIcon, R.drawable.default_album_art); .setImageViewResource(R.id.largeIcon, R.drawable.default_album_art);
} }
if (!PreferenceUtil.getInstance(service).coloredNotification()) { if (!PreferenceUtil.getInstance().coloredNotification()) {
bgColor = Color.WHITE; bgColor = Color.WHITE;
} }
setBackgroundColor(bgColor); setBackgroundColor(bgColor);

View file

@ -13,7 +13,6 @@ import androidx.viewpager.widget.ViewPager;
* * * * * * * * * * *.Yang Web site:www.ocnyang.com * * * * * * * * * * *.Yang Web site:www.ocnyang.com
*******************************************************************/ *******************************************************************/
public class CascadingPageTransformer implements ViewPager.PageTransformer { public class CascadingPageTransformer implements ViewPager.PageTransformer {
/** /**
* 偏移量 * 偏移量

View file

@ -0,0 +1,30 @@
package code.name.monkey.retromusic.transform;
import android.view.View;
import androidx.annotation.NonNull;
import androidx.viewpager.widget.ViewPager;
public class DepthTransformation implements ViewPager.PageTransformer {
@Override
public void transformPage(@NonNull View page, float position) {
if (position < -1) { // [-Infinity,-1)
// This page is way off-screen to the left.
page.setAlpha(0);
} else if (position <= 0) { // [-1,0]
page.setAlpha(1);
page.setTranslationX(0);
page.setScaleX(1);
page.setScaleY(1);
} else if (position <= 1) { // (0,1]
page.setTranslationX(-position * page.getWidth());
page.setAlpha(1 - Math.abs(position));
page.setScaleX(1 - Math.abs(position));
page.setScaleY(1 - Math.abs(position));
} else { // (1,+Infinity]
// This page is way off-screen to the right.
page.setAlpha(0);
}
}
}

View file

@ -0,0 +1,35 @@
package code.name.monkey.retromusic.transform;
import android.view.View;
import androidx.annotation.NonNull;
import androidx.viewpager.widget.ViewPager;
public class HingeTransformation implements ViewPager.PageTransformer {
@Override
public void transformPage(@NonNull View page, float position) {
page.setTranslationX(-position * page.getWidth());
page.setPivotX(0);
page.setPivotY(0);
if (position < -1) { // [-Infinity,-1)
// This page is way off-screen to the left.
page.setAlpha(0);
} else if (position <= 0) { // [-1,0]
page.setRotation(90 * Math.abs(position));
page.setAlpha(1 - Math.abs(position));
} else if (position <= 1) { // (0,1]
page.setRotation(0);
page.setAlpha(1);
} else { // (1,+Infinity]
// This page is way off-screen to the right.
page.setAlpha(0);
}
}
}

View file

@ -0,0 +1,39 @@
package code.name.monkey.retromusic.transform;
import android.view.View;
import androidx.annotation.NonNull;
import androidx.viewpager.widget.ViewPager;
public class HorizontalFlipTransformation implements ViewPager.PageTransformer {
@Override
public void transformPage(@NonNull View page, float position) {
page.setTranslationX(-position * page.getWidth());
page.setCameraDistance(20000);
if (position < 0.5 && position > -0.5) {
page.setVisibility(View.VISIBLE);
} else {
page.setVisibility(View.INVISIBLE);
}
if (position < -1) { // [-Infinity,-1)
// This page is way off-screen to the left.
page.setAlpha(0);
} else if (position <= 0) { // [-1,0]
page.setAlpha(1);
page.setRotationX(180 * (1 - Math.abs(position) + 1));
} else if (position <= 1) { // (0,1]
page.setAlpha(1);
page.setRotationX(-180 * (1 - Math.abs(position) + 1));
} else { // (1,+Infinity]
// This page is way off-screen to the right.
page.setAlpha(0);
}
}
}

View file

@ -0,0 +1,42 @@
package code.name.monkey.retromusic.transform;
import android.view.View;
import androidx.annotation.NonNull;
import androidx.viewpager.widget.ViewPager;
public class VerticalFlipTransformation implements ViewPager.PageTransformer {
@Override
public void transformPage(@NonNull View page, float position) {
page.setTranslationX(-position * page.getWidth());
page.setCameraDistance(100000);
if (position < 0.5 && position > -0.5) {
page.setVisibility(View.VISIBLE);
} else {
page.setVisibility(View.INVISIBLE);
}
if (position < -1) { // [-Infinity,-1)
// This page is way off-screen to the left.
page.setAlpha(0);
} else if (position <= 0) { // [-1,0]
page.setAlpha(1);
page.setRotationY(180 * (1 - Math.abs(position) + 1));
} else if (position <= 1) { // (0,1]
page.setAlpha(1);
page.setRotationY(-180 * (1 - Math.abs(position) + 1));
} else { // (1,+Infinity]
// This page is way off-screen to the right.
page.setAlpha(0);
}
}
}

View file

@ -10,6 +10,7 @@ import android.view.View;
import android.widget.TextView; import android.widget.TextView;
import com.afollestad.materialdialogs.MaterialDialog; import com.afollestad.materialdialogs.MaterialDialog;
import com.google.android.material.appbar.AppBarLayout;
import com.google.gson.Gson; import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken; import com.google.gson.reflect.TypeToken;
@ -28,9 +29,9 @@ import butterknife.BindView;
import butterknife.ButterKnife; import butterknife.ButterKnife;
import butterknife.OnClick; import butterknife.OnClick;
import code.name.monkey.appthemehelper.ThemeStore; import code.name.monkey.appthemehelper.ThemeStore;
import code.name.monkey.appthemehelper.util.ToolbarContentTintHelper;
import code.name.monkey.retromusic.Constants; import code.name.monkey.retromusic.Constants;
import code.name.monkey.retromusic.R; import code.name.monkey.retromusic.R;
import code.name.monkey.retromusic.dialogs.ChangelogDialog;
import code.name.monkey.retromusic.model.Contributor; import code.name.monkey.retromusic.model.Contributor;
import code.name.monkey.retromusic.ui.activities.base.AbsBaseActivity; import code.name.monkey.retromusic.ui.activities.base.AbsBaseActivity;
import code.name.monkey.retromusic.ui.adapter.ContributorAdapter; import code.name.monkey.retromusic.ui.adapter.ContributorAdapter;
@ -50,12 +51,12 @@ import static code.name.monkey.retromusic.Constants.TRANSLATE;
public class AboutActivity extends AbsBaseActivity { public class AboutActivity extends AbsBaseActivity {
@BindView(R.id.app_bar)
AppBarLayout appBarLayout;
@BindView(R.id.toolbar) @BindView(R.id.toolbar)
Toolbar toolbar; Toolbar toolbar;
@BindView(R.id.app_bar)
View background;
@BindView(R.id.app_version) @BindView(R.id.app_version)
TextView appVersion; TextView appVersion;
@ -73,7 +74,6 @@ public class AboutActivity extends AbsBaseActivity {
setStatusbarColorAuto(); setStatusbarColorAuto();
setNavigationbarColorAuto(); setNavigationbarColorAuto();
setTaskDescriptionColorAuto();
setLightNavigationBar(true); setLightNavigationBar(true);
loadContributors(); loadContributors();
@ -92,16 +92,15 @@ public class AboutActivity extends AbsBaseActivity {
} }
private void setUpToolbar() { private void setUpToolbar() {
title.setTextColor(ThemeStore.textColorPrimary(this)); appBarLayout.setBackgroundColor(ThemeStore.primaryColor(this));
int primaryColor = ThemeStore.primaryColor(this); toolbar.setBackgroundColor(ThemeStore.primaryColor(this));
toolbar.setBackgroundColor(primaryColor);
toolbar.setNavigationIcon(R.drawable.ic_keyboard_backspace_black_24dp);
toolbar.setNavigationOnClickListener(v -> onBackPressed());
setTitle(null);
setSupportActionBar(toolbar); setSupportActionBar(toolbar);
//noinspection ConstantConditions
//getSupportActionBar().setDisplayHomeAsUpEnabled(true);
setTitle(null);
ToolbarContentTintHelper.colorBackButton(toolbar, ThemeStore.accentColor(this));
} }
private void openUrl(String url) { private void openUrl(String url) {
Intent i = new Intent(Intent.ACTION_VIEW); Intent i = new Intent(Intent.ACTION_VIEW);
i.setData(Uri.parse(url)); i.setData(Uri.parse(url));
@ -166,7 +165,7 @@ public class AboutActivity extends AbsBaseActivity {
if (position == 0) { if (position == 0) {
openUrl(TELEGRAM_CHANGE_LOG); openUrl(TELEGRAM_CHANGE_LOG);
} else { } else {
ChangelogDialog.create().show(getSupportFragmentManager(), "change-log"); NavigationUtil.gotoWhatNews(AboutActivity.this);
} }
} }
}) })

View file

@ -1,41 +1,42 @@
package code.name.monkey.retromusic.ui.activities; package code.name.monkey.retromusic.ui.activities;
import android.content.Intent; import android.content.Intent;
import android.graphics.Color;
import android.os.Bundle; import android.os.Bundle;
import androidx.annotation.NonNull; import android.transition.Slide;
import androidx.annotation.Nullable; import android.view.Gravity;
import com.google.android.material.appbar.AppBarLayout;
import com.google.android.material.appbar.CollapsingToolbarLayout;
import com.google.android.material.floatingactionbutton.FloatingActionButton;
import androidx.core.content.ContextCompat;
import androidx.core.util.Pair;
import androidx.appcompat.widget.AppCompatTextView;
import androidx.recyclerview.widget.DefaultItemAnimator;
import androidx.recyclerview.widget.GridLayoutManager;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
import androidx.appcompat.widget.Toolbar;
import android.view.Menu; import android.view.Menu;
import android.view.MenuItem; import android.view.MenuItem;
import android.view.SubMenu; import android.view.SubMenu;
import android.view.View; import android.view.View;
import android.view.ViewGroup; import android.view.ViewGroup;
import android.view.ViewStub; import android.view.animation.AnimationUtils;
import android.widget.ImageView; import android.widget.ImageView;
import android.widget.TextView; import android.widget.TextView;
import com.bumptech.glide.Glide; import com.bumptech.glide.Glide;
import com.bumptech.glide.request.RequestListener; import com.google.android.material.appbar.AppBarLayout;
import com.bumptech.glide.request.target.Target; import com.google.android.material.appbar.CollapsingToolbarLayout;
import com.google.android.material.button.MaterialButton;
import java.util.ArrayList; import java.util.ArrayList;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.appcompat.widget.AppCompatTextView;
import androidx.appcompat.widget.Toolbar;
import androidx.core.app.ActivityCompat;
import androidx.core.util.Pair;
import androidx.recyclerview.widget.DefaultItemAnimator;
import androidx.recyclerview.widget.GridLayoutManager;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
import butterknife.BindView; import butterknife.BindView;
import butterknife.ButterKnife; import butterknife.ButterKnife;
import butterknife.OnClick; import butterknife.OnClick;
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.ColorUtil; import code.name.monkey.appthemehelper.util.ColorUtil;
import code.name.monkey.appthemehelper.util.MaterialUtil;
import code.name.monkey.appthemehelper.util.TintHelper; import code.name.monkey.appthemehelper.util.TintHelper;
import code.name.monkey.appthemehelper.util.ToolbarContentTintHelper; import code.name.monkey.appthemehelper.util.ToolbarContentTintHelper;
import code.name.monkey.retromusic.R; import code.name.monkey.retromusic.R;
@ -44,7 +45,6 @@ import code.name.monkey.retromusic.dialogs.DeleteSongsDialog;
import code.name.monkey.retromusic.glide.ArtistGlideRequest; import code.name.monkey.retromusic.glide.ArtistGlideRequest;
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.glide.palette.BitmapPaletteWrapper;
import code.name.monkey.retromusic.helper.MusicPlayerRemote; import code.name.monkey.retromusic.helper.MusicPlayerRemote;
import code.name.monkey.retromusic.helper.SortOrder.AlbumSongSortOrder; import code.name.monkey.retromusic.helper.SortOrder.AlbumSongSortOrder;
import code.name.monkey.retromusic.loaders.ArtistLoader; import code.name.monkey.retromusic.loaders.ArtistLoader;
@ -85,7 +85,7 @@ public class AlbumDetailsActivity extends AbsSlidingMusicPanelActivity implement
AppCompatTextView songTitle; AppCompatTextView songTitle;
@BindView(R.id.action_shuffle_all) @BindView(R.id.action_shuffle_all)
FloatingActionButton shuffleButton; MaterialButton shuffleButton;
@BindView(R.id.collapsing_toolbar) @BindView(R.id.collapsing_toolbar)
@Nullable @Nullable
@ -108,35 +108,49 @@ public class AlbumDetailsActivity extends AbsSlidingMusicPanelActivity implement
TextView moreTitle; TextView moreTitle;
@BindView(R.id.artist_image) @BindView(R.id.artist_image)
@Nullable
ImageView artistImage; ImageView artistImage;
private AlbumDetailsPresenter albumDetailsPresenter; private AlbumDetailsPresenter albumDetailsPresenter;
private Album album;
private SimpleSongAdapter adapter; private SimpleSongAdapter adapter;
private Album album;
@Override @Override
protected View createContentView() { protected View createContentView() {
return wrapSlidingMusicPanel(R.layout.activity_album); return wrapSlidingMusicPanel(R.layout.activity_album);
} }
void setupWindowTransition() {
Slide slide = new Slide(Gravity.BOTTOM);
slide.setInterpolator(
AnimationUtils.loadInterpolator(this, android.R.interpolator.linear_out_slow_in));
getWindow().setEnterTransition(slide);
}
@Override @Override
protected void onCreate(Bundle savedInstanceState) { protected void onCreate(Bundle savedInstanceState) {
setDrawUnderStatusBar(true); setDrawUnderStatusBar();
setupWindowTransition();
super.onCreate(savedInstanceState); super.onCreate(savedInstanceState);
ButterKnife.bind(this); ButterKnife.bind(this);
setBottomBarVisibility(View.GONE); toggleBottomNavigationView(true);
setLightNavigationBar(true); setLightNavigationBar(true);
setNavigationbarColorAuto(); setNavigationbarColorAuto();
supportPostponeEnterTransition(); ActivityCompat.postponeEnterTransition(this);
setupToolbarMarginHeight();
adapter = new SimpleSongAdapter(this, new ArrayList<>(), R.layout.item_song);
recyclerView.setLayoutManager(new LinearLayoutManager(this));
recyclerView.setItemAnimator(new DefaultItemAnimator());
recyclerView.setNestedScrollingEnabled(false);
recyclerView.setAdapter(adapter);
setupToolbarMarginHeight();
int albumId = getIntent().getIntExtra(EXTRA_ALBUM_ID, -1); int albumId = getIntent().getIntExtra(EXTRA_ALBUM_ID, -1);
albumDetailsPresenter = new AlbumDetailsPresenter(this, albumId); albumDetailsPresenter = new AlbumDetailsPresenter(this, albumId);
} }
private void setupToolbarMarginHeight() { private void setupToolbarMarginHeight() {
@ -153,7 +167,7 @@ public class AlbumDetailsActivity extends AbsSlidingMusicPanelActivity implement
getSupportActionBar().setTitle(null); getSupportActionBar().setTitle(null);
if (toolbar != null && !PreferenceUtil.getInstance(this).getFullScreenMode()) { if (toolbar != null && !PreferenceUtil.getInstance().getFullScreenMode()) {
ViewGroup.MarginLayoutParams params = (ViewGroup.MarginLayoutParams) toolbar.getLayoutParams(); ViewGroup.MarginLayoutParams params = (ViewGroup.MarginLayoutParams) toolbar.getLayoutParams();
params.topMargin = RetroUtil.getStatusBarHeight(this); params.topMargin = RetroUtil.getStatusBarHeight(this);
toolbar.setLayoutParams(params); toolbar.setLayoutParams(params);
@ -166,21 +180,20 @@ public class AlbumDetailsActivity extends AbsSlidingMusicPanelActivity implement
int color; int color;
switch (state) { switch (state) {
case COLLAPSED: case COLLAPSED:
setLightStatusbar(!ATHUtil.isWindowBackgroundDark(AlbumDetailsActivity.this)); setLightStatusbar(ColorUtil.isColorLight(ThemeStore.primaryColor(AlbumDetailsActivity.this)));
color = ATHUtil.resolveColor(AlbumDetailsActivity.this, R.attr.iconColor); color = ThemeStore.primaryColor(AlbumDetailsActivity.this);
break; break;
default: default:
case EXPANDED: case EXPANDED:
case IDLE: case IDLE:
setLightStatusbar(false); setLightStatusbar(false);
color = ContextCompat.getColor(AlbumDetailsActivity.this, R.color.md_white_1000); color = Color.TRANSPARENT;
break; break;
} }
ToolbarContentTintHelper.colorizeToolbar(toolbar, color, AlbumDetailsActivity.this); ToolbarContentTintHelper.setToolbarContentColorBasedOnToolbarColor(AlbumDetailsActivity.this, toolbar, color);
} }
}); });
} }
} }
@OnClick({R.id.action_shuffle_all, R.id.artist_image}) @OnClick({R.id.action_shuffle_all, R.id.artist_image})
@ -193,8 +206,8 @@ public class AlbumDetailsActivity extends AbsSlidingMusicPanelActivity implement
artistPairs); artistPairs);
break; break;
case R.id.action_shuffle_all: case R.id.action_shuffle_all:
if (album.songs != null) { if (getAlbum().songs != null) {
MusicPlayerRemote.openAndShuffleQueue(album.songs, true); MusicPlayerRemote.openAndShuffleQueue(getAlbum().songs, true);
} }
break; break;
} }
@ -224,7 +237,7 @@ public class AlbumDetailsActivity extends AbsSlidingMusicPanelActivity implement
@Override @Override
public void completed() { public void completed() {
supportStartPostponedEnterTransition(); ActivityCompat.startPostponedEnterTransition(this);
} }
@Override @Override
@ -241,20 +254,12 @@ public class AlbumDetailsActivity extends AbsSlidingMusicPanelActivity implement
MusicUtil.getReadableDurationString(MusicUtil.getTotalDuration(this, album.songs)))); MusicUtil.getReadableDurationString(MusicUtil.getTotalDuration(this, album.songs))));
loadAlbumCover(); loadAlbumCover();
adapter = new SimpleSongAdapter(this, this.album.songs, R.layout.item_song);
recyclerView.setLayoutManager(new LinearLayoutManager(this));
recyclerView.setItemAnimator(new DefaultItemAnimator());
recyclerView.setAdapter(adapter);
recyclerView.setNestedScrollingEnabled(false);
loadMoreFrom(album); loadMoreFrom(album);
adapter.swapDataSet(album.songs);
} }
private void loadMoreFrom(Album album) { private void loadMoreFrom(Album album) {
if (artistImage != null) {
ArtistGlideRequest.Builder.from(Glide.with(this), ArtistGlideRequest.Builder.from(Glide.with(this),
ArtistLoader.getArtist(this, album.getArtistId()).blockingFirst()) ArtistLoader.getArtist(this, album.getArtistId()).blockingFirst())
.forceDownload(false) .forceDownload(false)
@ -266,6 +271,7 @@ public class AlbumDetailsActivity extends AbsSlidingMusicPanelActivity implement
//setColors(color); //setColors(color);
} }
}); });
}
ArrayList<Album> albums = ArtistLoader.getArtist(this, album.getArtistId()) ArrayList<Album> albums = ArtistLoader.getArtist(this, album.getArtistId())
.blockingFirst().albums; .blockingFirst().albums;
@ -278,11 +284,11 @@ public class AlbumDetailsActivity extends AbsSlidingMusicPanelActivity implement
} }
moreTitle.setText(String.format("More from %s", album.getArtistName())); moreTitle.setText(String.format("More from %s", album.getArtistName()));
AlbumAdapter albumAdapter = new HorizontalAlbumAdapter(this, albums, AlbumAdapter albumAdapter = new HorizontalAlbumAdapter(this, albums, false, null);
false, null); moreRecyclerView.setLayoutManager(new GridLayoutManager(this, 1, GridLayoutManager.HORIZONTAL, false));
moreRecyclerView
.setLayoutManager(new GridLayoutManager(this, 1, GridLayoutManager.HORIZONTAL, false));
moreRecyclerView.setAdapter(albumAdapter); moreRecyclerView.setAdapter(albumAdapter);
ActivityCompat.startPostponedEnterTransition(this);
} }
public Album getAlbum() { public Album getAlbum() {
@ -294,22 +300,6 @@ public class AlbumDetailsActivity extends AbsSlidingMusicPanelActivity implement
.checkIgnoreMediaStore(this) .checkIgnoreMediaStore(this)
.generatePalette(this).build() .generatePalette(this).build()
.dontAnimate() .dontAnimate()
.listener(new RequestListener<Object, BitmapPaletteWrapper>() {
@Override
public boolean onException(Exception e, Object model, Target<BitmapPaletteWrapper> target,
boolean isFirstResource) {
supportStartPostponedEnterTransition();
return false;
}
@Override
public boolean onResourceReady(BitmapPaletteWrapper resource, Object model,
Target<BitmapPaletteWrapper> target, boolean isFromMemoryCache,
boolean isFirstResource) {
supportStartPostponedEnterTransition();
return false;
}
})
.into(new RetroMusicColoredTarget(image) { .into(new RetroMusicColoredTarget(image) {
@Override @Override
public void onColorReady(int color) { public void onColorReady(int color) {
@ -320,14 +310,15 @@ public class AlbumDetailsActivity extends AbsSlidingMusicPanelActivity implement
private void setColors(int color) { private void setColors(int color) {
int themeColor = int themeColor =
PreferenceUtil.getInstance(this).getAdaptiveColor() ? color : ThemeStore.accentColor(this); PreferenceUtil.getInstance().getAdaptiveColor() ? color : ThemeStore.accentColor(this);
songTitle.setTextColor(themeColor); songTitle.setTextColor(themeColor);
moreTitle.setTextColor(themeColor); moreTitle.setTextColor(themeColor);
TintHelper.setTintAuto(shuffleButton, themeColor, true); MaterialUtil.setTint(shuffleButton, true, themeColor);
//findViewById(R.id.root).setBackgroundColor(ThemeStore.primaryColor(this)); //findViewById(R.id.root).setBackgroundColor(ThemeStore.primaryColor(this));
} }
@Override @Override
public boolean onCreateOptionsMenu(Menu menu) { public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.menu_album_detail, menu); getMenuInflater().inflate(R.menu.menu_album_detail, menu);
@ -390,7 +381,7 @@ public class AlbumDetailsActivity extends AbsSlidingMusicPanelActivity implement
} }
private String getSavedSortOrder() { private String getSavedSortOrder() {
return PreferenceUtil.getInstance(this).getAlbumDetailSongSortOrder(); return PreferenceUtil.getInstance().getAlbumDetailSongSortOrder();
} }
private void setUpSortOrderMenu(@NonNull SubMenu sortOrder) { private void setUpSortOrderMenu(@NonNull SubMenu sortOrder) {
@ -411,7 +402,7 @@ public class AlbumDetailsActivity extends AbsSlidingMusicPanelActivity implement
} }
private void setSaveSortOrder(String sortOrder) { private void setSaveSortOrder(String sortOrder) {
PreferenceUtil.getInstance(this).setAlbumDetailSongSortOrder(sortOrder); PreferenceUtil.getInstance().setAlbumDetailSongSortOrder(sortOrder);
reload(); reload();
} }

View file

@ -2,41 +2,45 @@ package code.name.monkey.retromusic.ui.activities;
import android.content.Intent; import android.content.Intent;
import android.content.res.ColorStateList; import android.content.res.ColorStateList;
import android.graphics.Color;
import android.os.Bundle; import android.os.Bundle;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import com.google.android.material.appbar.AppBarLayout;
import com.google.android.material.appbar.CollapsingToolbarLayout;
import com.google.android.material.floatingactionbutton.FloatingActionButton;
import androidx.core.content.ContextCompat;
import androidx.appcompat.widget.AppCompatTextView;
import androidx.recyclerview.widget.DefaultItemAnimator;
import androidx.recyclerview.widget.GridLayoutManager;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
import androidx.appcompat.widget.Toolbar;
import android.text.Html; import android.text.Html;
import android.text.Spanned; import android.text.Spanned;
import android.transition.Slide;
import android.view.Gravity;
import android.view.Menu; import android.view.Menu;
import android.view.MenuItem; import android.view.MenuItem;
import android.view.View; import android.view.View;
import android.view.ViewGroup; import android.view.ViewGroup;
import android.view.ViewGroup.LayoutParams; import android.view.ViewGroup.LayoutParams;
import android.view.animation.AnimationUtils;
import android.widget.ImageView; import android.widget.ImageView;
import android.widget.TextView; import android.widget.TextView;
import android.widget.Toast; import android.widget.Toast;
import com.bumptech.glide.Glide; import com.bumptech.glide.Glide;
import com.google.android.material.appbar.AppBarLayout;
import com.google.android.material.appbar.CollapsingToolbarLayout;
import com.google.android.material.button.MaterialButton;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Locale; import java.util.Locale;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.appcompat.widget.AppCompatTextView;
import androidx.appcompat.widget.Toolbar;
import androidx.core.app.ActivityCompat;
import androidx.recyclerview.widget.DefaultItemAnimator;
import androidx.recyclerview.widget.GridLayoutManager;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
import butterknife.BindView; import butterknife.BindView;
import butterknife.ButterKnife; import butterknife.ButterKnife;
import butterknife.OnClick; import butterknife.OnClick;
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.ColorUtil; import code.name.monkey.appthemehelper.util.ColorUtil;
import code.name.monkey.appthemehelper.util.MaterialUtil;
import code.name.monkey.appthemehelper.util.TintHelper; import code.name.monkey.appthemehelper.util.TintHelper;
import code.name.monkey.appthemehelper.util.ToolbarContentTintHelper; import code.name.monkey.appthemehelper.util.ToolbarContentTintHelper;
import code.name.monkey.retromusic.R; import code.name.monkey.retromusic.R;
@ -105,7 +109,7 @@ public class ArtistDetailActivity extends AbsSlidingMusicPanelActivity implement
TextView text; TextView text;
@BindView(R.id.action_shuffle_all) @BindView(R.id.action_shuffle_all)
FloatingActionButton shuffleButton; MaterialButton shuffleButton;
@BindView(R.id.gradient_background) @BindView(R.id.gradient_background)
@Nullable @Nullable
@ -130,6 +134,15 @@ public class ArtistDetailActivity extends AbsSlidingMusicPanelActivity implement
private AlbumAdapter albumAdapter; private AlbumAdapter albumAdapter;
private boolean forceDownload; private boolean forceDownload;
void setupWindowTransistion() {
Slide slide = new Slide(Gravity.BOTTOM);
slide.setInterpolator(
AnimationUtils.loadInterpolator(this, android.R.interpolator.linear_out_slow_in));
getWindow().setEnterTransition(slide);
}
@Override @Override
protected View createContentView() { protected View createContentView() {
return wrapSlidingMusicPanel(R.layout.activity_artist_details); return wrapSlidingMusicPanel(R.layout.activity_artist_details);
@ -137,17 +150,16 @@ public class ArtistDetailActivity extends AbsSlidingMusicPanelActivity implement
@Override @Override
protected void onCreate(Bundle bundle) { protected void onCreate(Bundle bundle) {
setDrawUnderStatusBar(true); setDrawUnderStatusBar();
setupWindowTransistion();
super.onCreate(bundle); super.onCreate(bundle);
ButterKnife.bind(this); ButterKnife.bind(this);
setBottomBarVisibility(View.GONE); toggleBottomNavigationView(true);
setNavigationbarColorAuto(); setNavigationbarColorAuto();
setLightNavigationBar(true); setLightNavigationBar(true);
supportPostponeEnterTransition(); ActivityCompat.postponeEnterTransition(this);
lastFMRestClient = new LastFMRestClient(this); lastFMRestClient = new LastFMRestClient(this);
@ -159,7 +171,7 @@ public class ArtistDetailActivity extends AbsSlidingMusicPanelActivity implement
private void setUpViews() { private void setUpViews() {
setupRecyclerView(); setupRecyclerView();
setupToolbar(); setupToolbarMarginHeight();
setupContainerHeight(); setupContainerHeight();
} }
@ -171,49 +183,47 @@ public class ArtistDetailActivity extends AbsSlidingMusicPanelActivity implement
} }
} }
private void setupToolbar() { private void setupToolbarMarginHeight() {
int primaryColor = ThemeStore.primaryColor(this);
TintHelper.setTintAuto(contentContainer, primaryColor, true);
if (collapsingToolbarLayout != null) {
collapsingToolbarLayout.setContentScrimColor(primaryColor);
collapsingToolbarLayout.setStatusBarScrimColor(ColorUtil.darkenColor(primaryColor));
}
toolbar.setNavigationIcon(R.drawable.ic_keyboard_backspace_black_24dp); toolbar.setNavigationIcon(R.drawable.ic_keyboard_backspace_black_24dp);
setSupportActionBar(toolbar); setSupportActionBar(toolbar);
//noinspection ConstantConditions //noinspection ConstantConditions
getSupportActionBar().setTitle(null); getSupportActionBar().setTitle(null);
if (toolbar != null && !PreferenceUtil.getInstance(this).getFullScreenMode()) {
ViewGroup.MarginLayoutParams params = (ViewGroup.MarginLayoutParams) toolbar if (toolbar != null && !PreferenceUtil.getInstance().getFullScreenMode()) {
.getLayoutParams(); ViewGroup.MarginLayoutParams params = (ViewGroup.MarginLayoutParams) toolbar.getLayoutParams();
params.topMargin = RetroUtil.getStatusBarHeight(this); params.topMargin = RetroUtil.getStatusBarHeight(this);
toolbar.setLayoutParams(params); toolbar.setLayoutParams(params);
} }
int primaryColor = ThemeStore.primaryColor(this);
TintHelper.setTintAuto(contentContainer, primaryColor, true);
if (appBarLayout != null) { if (appBarLayout != null) {
appBarLayout.setBackgroundColor(primaryColor);
appBarLayout.addOnOffsetChangedListener(new AppBarStateChangeListener() { appBarLayout.addOnOffsetChangedListener(new AppBarStateChangeListener() {
@Override @Override
public void onStateChanged(AppBarLayout appBarLayout, public void onStateChanged(AppBarLayout appBarLayout, State state) {
AppBarStateChangeListener.State state) {
int color; int color;
switch (state) { switch (state) {
case COLLAPSED: case COLLAPSED:
setLightStatusbar(!ATHUtil.isWindowBackgroundDark(ArtistDetailActivity.this)); setLightStatusbar(ColorUtil.isColorLight(ThemeStore.primaryColor(appBarLayout.getContext())));
color = ATHUtil.resolveColor(ArtistDetailActivity.this, R.attr.iconColor); color = ThemeStore.primaryColor(appBarLayout.getContext());
break; break;
default: default:
case EXPANDED: case EXPANDED:
case IDLE: case IDLE:
setLightStatusbar(false); setLightStatusbar(false);
color = ContextCompat.getColor(ArtistDetailActivity.this, R.color.md_white_1000); color = Color.TRANSPARENT;
break; break;
} }
ToolbarContentTintHelper.colorizeToolbar(toolbar, color, ArtistDetailActivity.this); ToolbarContentTintHelper.setToolbarContentColorBasedOnToolbarColor(appBarLayout.getContext(), toolbar, color);
} }
}); });
} }
if (collapsingToolbarLayout != null) {
collapsingToolbarLayout.setContentScrimColor(primaryColor);
collapsingToolbarLayout.setStatusBarScrimColor(ColorUtil.darkenColor(primaryColor));
}
} }
private void setupRecyclerView() { private void setupRecyclerView() {
@ -270,7 +280,7 @@ public class ArtistDetailActivity extends AbsSlidingMusicPanelActivity implement
@Override @Override
public void completed() { public void completed() {
supportStartPostponedEnterTransition(); ActivityCompat.startPostponedEnterTransition(this);
} }
@Override @Override
@ -367,14 +377,13 @@ public class ArtistDetailActivity extends AbsSlidingMusicPanelActivity implement
private void setColors(int color) { private void setColors(int color) {
int textColor = int textColor = PreferenceUtil.getInstance().getAdaptiveColor() ? color : ThemeStore.accentColor(this);
PreferenceUtil.getInstance(this).getAdaptiveColor() ? color : ThemeStore.accentColor(this);
albumTitle.setTextColor(textColor); albumTitle.setTextColor(textColor);
songTitle.setTextColor(textColor); songTitle.setTextColor(textColor);
biographyTitle.setTextColor(textColor); biographyTitle.setTextColor(textColor);
TintHelper.setTintAuto(shuffleButton, textColor, true); MaterialUtil.setTint(shuffleButton, true, textColor);
if (background != null) { if (background != null) {
background.setBackgroundTintList(ColorStateList.valueOf(color)); background.setBackgroundTintList(ColorStateList.valueOf(color));

View file

@ -1,13 +1,6 @@
package code.name.monkey.retromusic.ui.activities; package code.name.monkey.retromusic.ui.activities;
import android.os.Bundle; import android.os.Bundle;
import androidx.annotation.NonNull;
import com.google.android.material.appbar.AppBarLayout;
import com.google.android.material.floatingactionbutton.FloatingActionButton;
import androidx.recyclerview.widget.DefaultItemAnimator;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
import androidx.appcompat.widget.Toolbar;
import android.view.Menu; import android.view.Menu;
import android.view.MenuItem; import android.view.MenuItem;
import android.view.View; import android.view.View;
@ -17,22 +10,27 @@ import android.widget.ProgressBar;
import android.widget.TextView; import android.widget.TextView;
import com.afollestad.materialcab.MaterialCab; import com.afollestad.materialcab.MaterialCab;
import com.google.android.material.appbar.AppBarLayout;
import com.google.android.material.floatingactionbutton.FloatingActionButton;
import com.simplecityapps.recyclerview_fastscroll.views.FastScrollRecyclerView; import com.simplecityapps.recyclerview_fastscroll.views.FastScrollRecyclerView;
import java.util.ArrayList; import java.util.ArrayList;
import androidx.annotation.NonNull;
import androidx.appcompat.widget.Toolbar;
import androidx.recyclerview.widget.DefaultItemAnimator;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
import butterknife.BindView; import butterknife.BindView;
import butterknife.ButterKnife; import butterknife.ButterKnife;
import butterknife.OnClick; import butterknife.OnClick;
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.TintHelper; import code.name.monkey.appthemehelper.util.TintHelper;
import code.name.monkey.appthemehelper.util.ToolbarContentTintHelper; import code.name.monkey.appthemehelper.util.ToolbarContentTintHelper;
import code.name.monkey.retromusic.R; import code.name.monkey.retromusic.R;
import code.name.monkey.retromusic.helper.MusicPlayerRemote; import code.name.monkey.retromusic.helper.MusicPlayerRemote;
import code.name.monkey.retromusic.helper.menu.GenreMenuHelper; import code.name.monkey.retromusic.helper.menu.GenreMenuHelper;
import code.name.monkey.retromusic.interfaces.CabHolder; import code.name.monkey.retromusic.interfaces.CabHolder;
import code.name.monkey.retromusic.misc.AppBarStateChangeListener;
import code.name.monkey.retromusic.model.Genre; import code.name.monkey.retromusic.model.Genre;
import code.name.monkey.retromusic.model.Song; import code.name.monkey.retromusic.model.Song;
import code.name.monkey.retromusic.mvp.contract.GenreDetailsContract; import code.name.monkey.retromusic.mvp.contract.GenreDetailsContract;
@ -83,14 +81,14 @@ public class GenreDetailsActivity extends AbsSlidingMusicPanelActivity implement
@Override @Override
protected void onCreate(Bundle savedInstanceState) { protected void onCreate(Bundle savedInstanceState) {
setDrawUnderStatusBar(true); setDrawUnderStatusBar();
super.onCreate(savedInstanceState); super.onCreate(savedInstanceState);
ButterKnife.bind(this); ButterKnife.bind(this);
setBottomBarVisibility(View.GONE);
setStatusbarColorAuto(); setStatusbarColorAuto();
setNavigationbarColorAuto(); setNavigationbarColorAuto();
setTaskDescriptionColorAuto(); setTaskDescriptionColorAuto();
toggleBottomNavigationView(true);
setLightNavigationBar(true); setLightNavigationBar(true);
@ -113,29 +111,14 @@ public class GenreDetailsActivity extends AbsSlidingMusicPanelActivity implement
private void setUpToolBar() { private void setUpToolBar() {
title.setText(genre.name); title.setText(genre.name);
title.setTextColor(ThemeStore.textColorPrimary(this)); title.setTextColor(ThemeStore.textColorPrimary(this));
int primaryColor = ThemeStore.primaryColor(this); int primaryColor = ThemeStore.primaryColor(this);
toolbar.setNavigationIcon(R.drawable.ic_keyboard_backspace_black_24dp);
toolbar.setBackgroundColor(primaryColor); toolbar.setBackgroundColor(primaryColor);
appBarLayout.setBackgroundColor(primaryColor); appBarLayout.setBackgroundColor(primaryColor);
toolbar.setNavigationIcon(R.drawable.ic_keyboard_backspace_black_24dp); ToolbarContentTintHelper.colorBackButton(toolbar, ThemeStore.accentColor(this));
setTitle(null); setTitle(null);
setSupportActionBar(toolbar); setSupportActionBar(toolbar);
appBarLayout.addOnOffsetChangedListener(new AppBarStateChangeListener() {
@Override
public void onStateChanged(AppBarLayout appBarLayout, AppBarStateChangeListener.State state) {
int color;
switch (state) {
default:
case COLLAPSED:
case EXPANDED:
case IDLE:
color = ATHUtil.resolveColor(GenreDetailsActivity.this, android.R.attr.textColorPrimary);
break;
}
ToolbarContentTintHelper.colorizeToolbar(toolbar, color, GenreDetailsActivity.this);
}
});
TintHelper.setTintAuto(shuffleButton, ThemeStore.accentColor(this), true); TintHelper.setTintAuto(shuffleButton, ThemeStore.accentColor(this), true);
} }
@ -208,30 +191,6 @@ public class GenreDetailsActivity extends AbsSlidingMusicPanelActivity implement
songAdapter.swapDataSet(songs); songAdapter.swapDataSet(songs);
} }
public void showHeartAnimation() {
shuffleButton.clearAnimation();
shuffleButton.setScaleX(0.9f);
shuffleButton.setScaleY(0.9f);
shuffleButton.setVisibility(View.VISIBLE);
shuffleButton.setPivotX(shuffleButton.getWidth() / 2);
shuffleButton.setPivotY(shuffleButton.getHeight() / 2);
shuffleButton.animate()
.setDuration(200)
.setInterpolator(new DecelerateInterpolator())
.scaleX(1.1f)
.scaleY(1.1f)
.withEndAction(() -> shuffleButton.animate()
.setDuration(200)
.setInterpolator(new AccelerateInterpolator())
.scaleX(1f)
.scaleY(1f)
.alpha(1f)
.start())
.start();
}
@NonNull @NonNull
@Override @Override
public MaterialCab openCab(final int menu, final MaterialCab.Callback callback) { public MaterialCab openCab(final int menu, final MaterialCab.Callback callback) {

View file

@ -11,6 +11,7 @@ import android.widget.TextView;
import butterknife.BindView; import butterknife.BindView;
import butterknife.ButterKnife; import butterknife.ButterKnife;
import code.name.monkey.appthemehelper.ThemeStore; import code.name.monkey.appthemehelper.ThemeStore;
import code.name.monkey.appthemehelper.util.ToolbarContentTintHelper;
import code.name.monkey.retromusic.R; import code.name.monkey.retromusic.R;
import code.name.monkey.retromusic.ui.activities.base.AbsBaseActivity; import code.name.monkey.retromusic.ui.activities.base.AbsBaseActivity;
@ -19,7 +20,7 @@ public class LicenseActivity extends AbsBaseActivity {
WebView mLicense; WebView mLicense;
@BindView(R.id.toolbar) @BindView(R.id.toolbar)
Toolbar mToolbar; Toolbar toolbar;
@BindView(R.id.app_bar) @BindView(R.id.app_bar)
AppBarLayout mAppbar; AppBarLayout mAppbar;
@ -50,11 +51,12 @@ public class LicenseActivity extends AbsBaseActivity {
mLicense.loadUrl("file:///android_asset/index.html"); mLicense.loadUrl("file:///android_asset/index.html");
title.setTextColor(ThemeStore.textColorPrimary(this)); title.setTextColor(ThemeStore.textColorPrimary(this));
mToolbar.setNavigationIcon(R.drawable.ic_keyboard_backspace_black_24dp); toolbar.setNavigationIcon(R.drawable.ic_keyboard_backspace_black_24dp);
mToolbar.setNavigationOnClickListener(view -> onBackPressed()); toolbar.setNavigationOnClickListener(view -> onBackPressed());
mToolbar.setBackgroundColor(ThemeStore.primaryColor(this)); toolbar.setBackgroundColor(ThemeStore.primaryColor(this));
mAppbar.setBackgroundColor(ThemeStore.primaryColor(this)); mAppbar.setBackgroundColor(ThemeStore.primaryColor(this));
setTitle(null); setTitle(null);
setSupportActionBar(mToolbar); setSupportActionBar(toolbar);
ToolbarContentTintHelper.colorBackButton(toolbar, ThemeStore.accentColor(this));
} }
} }

View file

@ -30,7 +30,7 @@ public class LockScreenActivity extends AbsMusicServiceActivity {
| WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS | WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS
| WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED); | WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED);
setDrawUnderStatusBar(true); setDrawUnderStatusBar();
setContentView(R.layout.activity_lock_screen_old_style); setContentView(R.layout.activity_lock_screen_old_style);
hideStatusBar(); hideStatusBar();

View file

@ -92,11 +92,11 @@ public class LyricsActivity extends AbsMusicServiceActivity implements
loadLrcFile(); loadLrcFile();
actionsLayout.setOnCheckedChangeListener((group, checkedId) -> selectLyricsTye(checkedId)); actionsLayout.setOnCheckedChangeListener((group, checkedId) -> selectLyricsTye(checkedId));
actionsLayout.check(PreferenceUtil.getInstance(this).getLastLyricsType()); actionsLayout.check(PreferenceUtil.getInstance().getLastLyricsType());
} }
private void selectLyricsTye(int group) { private void selectLyricsTye(int group) {
PreferenceUtil.getInstance(this).setLastLyricsType(group); PreferenceUtil.getInstance().setLastLyricsType(group);
RadioButton radioButton = actionsLayout.findViewById(group); RadioButton radioButton = actionsLayout.findViewById(group);
if (radioButton != null) { if (radioButton != null) {
radioButton.setBackgroundTintList(ColorStateList.valueOf(ThemeStore.accentColor(this))); radioButton.setBackgroundTintList(ColorStateList.valueOf(ThemeStore.accentColor(this)));
@ -198,7 +198,7 @@ public class LyricsActivity extends AbsMusicServiceActivity implements
.into(new RetroMusicColoredTarget(findViewById(R.id.image)) { .into(new RetroMusicColoredTarget(findViewById(R.id.image)) {
@Override @Override
public void onColorReady(int color) { public void onColorReady(int color) {
if (PreferenceUtil.getInstance(LyricsActivity.this).getAdaptiveColor()) { if (PreferenceUtil.getInstance( ).getAdaptiveColor()) {
background.setBackgroundColor(color); background.setBackgroundColor(color);
} }
} }

View file

@ -33,7 +33,6 @@ import butterknife.BindView;
import butterknife.ButterKnife; import butterknife.ButterKnife;
import code.name.monkey.retromusic.R; import code.name.monkey.retromusic.R;
import code.name.monkey.retromusic.RetroApplication; import code.name.monkey.retromusic.RetroApplication;
import code.name.monkey.retromusic.dialogs.ChangelogDialog;
import code.name.monkey.retromusic.helper.MusicPlayerRemote; import code.name.monkey.retromusic.helper.MusicPlayerRemote;
import code.name.monkey.retromusic.helper.SearchQueryHelper; import code.name.monkey.retromusic.helper.SearchQueryHelper;
import code.name.monkey.retromusic.interfaces.MainActivityFragmentCallbacks; import code.name.monkey.retromusic.interfaces.MainActivityFragmentCallbacks;
@ -45,12 +44,10 @@ import code.name.monkey.retromusic.service.MusicService;
import code.name.monkey.retromusic.ui.activities.base.AbsSlidingMusicPanelActivity; import code.name.monkey.retromusic.ui.activities.base.AbsSlidingMusicPanelActivity;
import code.name.monkey.retromusic.ui.fragments.mainactivity.LibraryFragment; import code.name.monkey.retromusic.ui.fragments.mainactivity.LibraryFragment;
import code.name.monkey.retromusic.ui.fragments.mainactivity.home.BannerHomeFragment; import code.name.monkey.retromusic.ui.fragments.mainactivity.home.BannerHomeFragment;
import code.name.monkey.retromusic.ui.fragments.mainactivity.home.HomeFragment;
import code.name.monkey.retromusic.util.PreferenceUtil; import code.name.monkey.retromusic.util.PreferenceUtil;
import io.reactivex.disposables.CompositeDisposable; import io.reactivex.disposables.CompositeDisposable;
public class MainActivity extends AbsSlidingMusicPanelActivity implements SharedPreferences.OnSharedPreferenceChangeListener, BottomNavigationView.OnNavigationItemSelectedListener { public class MainActivity extends AbsSlidingMusicPanelActivity implements SharedPreferences.OnSharedPreferenceChangeListener, BottomNavigationView.OnNavigationItemSelectedListener {
public static final int APP_INTRO_REQUEST = 2323; public static final int APP_INTRO_REQUEST = 2323;
public static final int LIBRARY = 1; public static final int LIBRARY = 1;
public static final int FOLDERS = 3; public static final int FOLDERS = 3;
@ -65,15 +62,15 @@ public class MainActivity extends AbsSlidingMusicPanelActivity implements Shared
@BindView(R.id.parent_container) @BindView(R.id.parent_container)
FrameLayout drawerLayout; FrameLayout drawerLayout;
private boolean blockRequestPermissions; private boolean blockRequestPermissions;
private CompositeDisposable disposable = new CompositeDisposable(); private CompositeDisposable disposable = new CompositeDisposable();
private BroadcastReceiver broadcastReceiver = new BroadcastReceiver() { private BroadcastReceiver broadcastReceiver = new BroadcastReceiver() {
@Override @Override
public void onReceive(Context context, Intent intent) { public void onReceive(Context context, Intent intent) {
String action = intent.getAction(); String action = intent.getAction();
if (action != null && action.equals(Intent.ACTION_SCREEN_OFF)) { if (action != null && action.equals(Intent.ACTION_SCREEN_OFF)) {
if (PreferenceUtil.getInstance(context).getLockScreen() && MusicPlayerRemote.isPlaying()) { if (PreferenceUtil.getInstance().getLockScreen() && MusicPlayerRemote.isPlaying()) {
Intent activity = new Intent(context, LockScreenActivity.class); Intent activity = new Intent(context, LockScreenActivity.class);
activity.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); activity.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
activity.addFlags(Intent.FLAG_ACTIVITY_NO_HISTORY); activity.addFlags(Intent.FLAG_ACTIVITY_NO_HISTORY);
@ -94,7 +91,7 @@ public class MainActivity extends AbsSlidingMusicPanelActivity implements Shared
@Override @Override
protected void onCreate(Bundle savedInstanceState) { protected void onCreate(Bundle savedInstanceState) {
setDrawUnderStatusBar(true); setDrawUnderStatusBar();
super.onCreate(savedInstanceState); super.onCreate(savedInstanceState);
ButterKnife.bind(this); ButterKnife.bind(this);
@ -103,7 +100,8 @@ public class MainActivity extends AbsSlidingMusicPanelActivity implements Shared
drawerLayout.setOnApplyWindowInsetsListener((view, windowInsets) -> windowInsets.replaceSystemWindowInsets(0, 0, 0, 0)); drawerLayout.setOnApplyWindowInsetsListener((view, windowInsets) -> windowInsets.replaceSystemWindowInsets(0, 0, 0, 0));
if (savedInstanceState == null) { if (savedInstanceState == null) {
selectedFragment(PreferenceUtil.getInstance(this).getLastPage()); selectedFragment(PreferenceUtil.getInstance().getLastPage());
//setCurrentFragment(new LibraryFragment(), false, LibraryFragment.TAG);
} else { } else {
restoreCurrentFragment(); restoreCurrentFragment();
} }
@ -118,8 +116,8 @@ public class MainActivity extends AbsSlidingMusicPanelActivity implements Shared
try { try {
PackageInfo pInfo = getPackageManager().getPackageInfo(getPackageName(), 0); PackageInfo pInfo = getPackageManager().getPackageInfo(getPackageName(), 0);
int currentVersion = pInfo.versionCode; int currentVersion = pInfo.versionCode;
if (currentVersion != PreferenceUtil.getInstance(this).getLastChangelogVersion()) { if (currentVersion != PreferenceUtil.getInstance().getLastChangelogVersion()) {
ChangelogDialog.create().show(getSupportFragmentManager(), "CHANGE_LOG_DIALOG"); startActivity(new Intent(this, WhatsNewActivity.class));
} }
} catch (PackageManager.NameNotFoundException e) { } catch (PackageManager.NameNotFoundException e) {
e.printStackTrace(); e.printStackTrace();
@ -133,11 +131,11 @@ public class MainActivity extends AbsSlidingMusicPanelActivity implements Shared
screenOnOff.addAction(Intent.ACTION_SCREEN_OFF); screenOnOff.addAction(Intent.ACTION_SCREEN_OFF);
registerReceiver(broadcastReceiver, screenOnOff); registerReceiver(broadcastReceiver, screenOnOff);
PreferenceUtil.getInstance(this).registerOnSharedPreferenceChangedListener(this); PreferenceUtil.getInstance().registerOnSharedPreferenceChangedListener(this);
if (getIntent().hasExtra("expand")) { if (getIntent().hasExtra("expand")) {
if (getIntent().getBooleanExtra("expand", false)) { if (getIntent().getBooleanExtra("expand", false)) {
expandPanel(); //expandPanel();
getIntent().putExtra("expand", false); getIntent().putExtra("expand", false);
} }
} }
@ -152,7 +150,7 @@ public class MainActivity extends AbsSlidingMusicPanelActivity implements Shared
return; return;
} }
unregisterReceiver(broadcastReceiver); unregisterReceiver(broadcastReceiver);
PreferenceUtil.getInstance(this).unregisterOnSharedPreferenceChangedListener(this); PreferenceUtil.getInstance().unregisterOnSharedPreferenceChangedListener(this);
} }
public void setCurrentFragment(@NonNull Fragment fragment, boolean isStackAdd, String tag) { public void setCurrentFragment(@NonNull Fragment fragment, boolean isStackAdd, String tag) {
@ -327,9 +325,10 @@ public class MainActivity extends AbsSlidingMusicPanelActivity implements Shared
.show(); .show();
} }
@Override @Override
public boolean onNavigationItemSelected(@NonNull MenuItem menuItem) { public boolean onNavigationItemSelected(@NonNull MenuItem menuItem) {
PreferenceUtil.getInstance(this).setLastPage(menuItem.getItemId()); PreferenceUtil.getInstance().setLastPage(menuItem.getItemId());
selectedFragment(menuItem.getItemId()); selectedFragment(menuItem.getItemId());
return true; return true;
} }
@ -343,8 +342,7 @@ public class MainActivity extends AbsSlidingMusicPanelActivity implements Shared
setCurrentFragment(LibraryFragment.newInstance(itemId), false, LibraryFragment.TAG); setCurrentFragment(LibraryFragment.newInstance(itemId), false, LibraryFragment.TAG);
break; break;
case R.id.action_home: case R.id.action_home:
setCurrentFragment(PreferenceUtil.getInstance(this).toggleHomeBanner() ? HomeFragment.newInstance() : setCurrentFragment(BannerHomeFragment.newInstance(), false, BannerHomeFragment.TAG);
BannerHomeFragment.newInstance(), false, HomeFragment.TAG);
break; break;
} }

View file

@ -0,0 +1,162 @@
package code.name.monkey.retromusic.ui.activities;
import android.content.SharedPreferences;
import android.graphics.Color;
import android.os.Bundle;
import android.transition.Slide;
import android.view.Gravity;
import android.view.animation.AnimationUtils;
import androidx.fragment.app.Fragment;
import code.name.monkey.appthemehelper.ThemeStore;
import code.name.monkey.appthemehelper.util.ColorUtil;
import code.name.monkey.retromusic.R;
import code.name.monkey.retromusic.helper.MusicPlayerRemote;
import code.name.monkey.retromusic.ui.activities.base.AbsMusicServiceActivity;
import code.name.monkey.retromusic.ui.fragments.NowPlayingScreen;
import code.name.monkey.retromusic.ui.fragments.base.AbsPlayerFragment;
import code.name.monkey.retromusic.ui.fragments.player.adaptive.AdaptiveFragment;
import code.name.monkey.retromusic.ui.fragments.player.blur.BlurPlayerFragment;
import code.name.monkey.retromusic.ui.fragments.player.card.CardFragment;
import code.name.monkey.retromusic.ui.fragments.player.cardblur.CardBlurFragment;
import code.name.monkey.retromusic.ui.fragments.player.color.ColorFragment;
import code.name.monkey.retromusic.ui.fragments.player.fit.FitFragment;
import code.name.monkey.retromusic.ui.fragments.player.flat.FlatPlayerFragment;
import code.name.monkey.retromusic.ui.fragments.player.full.FullPlayerFragment;
import code.name.monkey.retromusic.ui.fragments.player.hmm.HmmPlayerFragment;
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.plain.PlainPlayerFragment;
import code.name.monkey.retromusic.ui.fragments.player.simple.SimplePlayerFragment;
import code.name.monkey.retromusic.util.PreferenceUtil;
public class NowPayingActivity extends AbsMusicServiceActivity implements AbsPlayerFragment.Callbacks, SharedPreferences.OnSharedPreferenceChangeListener {
private NowPlayingScreen currentNowPlayingScreen;
private AbsPlayerFragment playerFragment;
void setupWindowTransition() {
Slide slide = new Slide(Gravity.BOTTOM);
slide.setInterpolator(
AnimationUtils.loadInterpolator(this, android.R.interpolator.linear_out_slow_in));
getWindow().setEnterTransition(slide);
//getWindow().setExitTransition(slide);
}
@Override
protected void onCreate(Bundle savedInstanceState) {
setLightNavigationBar(true);
setupWindowTransition();
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_now_playng);
chooseFragmentForTheme();
}
private boolean isOneOfTheseThemes() {
return currentNowPlayingScreen == NowPlayingScreen.FLAT
|| currentNowPlayingScreen == NowPlayingScreen.PLAIN
|| currentNowPlayingScreen == NowPlayingScreen.SIMPLE
|| currentNowPlayingScreen == NowPlayingScreen.NORMAL
|| currentNowPlayingScreen == NowPlayingScreen.ADAPTIVE
|| currentNowPlayingScreen == NowPlayingScreen.TINY
|| currentNowPlayingScreen == NowPlayingScreen.MATERIAL;
}
@Override
public void onPaletteColorChanged() {
int paletteColor = playerFragment.getPaletteColor();
if ((currentNowPlayingScreen == NowPlayingScreen.FLAT || currentNowPlayingScreen == NowPlayingScreen.NORMAL) && PreferenceUtil.getInstance().getAdaptiveColor()) {
setNavigationbarColor(Color.TRANSPARENT);
setLightStatusbar(ColorUtil.isColorLight(paletteColor));
} else if (currentNowPlayingScreen == NowPlayingScreen.COLOR) {
setLightStatusbar(ColorUtil.isColorLight(paletteColor));
} else if (currentNowPlayingScreen == NowPlayingScreen.BLUR || currentNowPlayingScreen == NowPlayingScreen.BLUR_CARD) {
setLightStatusbar(false);
} else {
setLightStatusbar(isOneOfTheseThemes() && ColorUtil.isColorLight(ThemeStore.primaryColor(this)));
}
}
@Override
protected void onResume() {
super.onResume();
if (currentNowPlayingScreen != PreferenceUtil.getInstance().getNowPlayingScreen()) {
postRecreate();
}
PreferenceUtil.getInstance().registerOnSharedPreferenceChangedListener(this);
}
@Override
protected void onPause() {
super.onPause();
PreferenceUtil.getInstance().unregisterOnSharedPreferenceChangedListener(this);
}
@Override
public void onQueueChanged() {
super.onQueueChanged();
if (MusicPlayerRemote.getPlayingQueue().isEmpty()) {
finish();
}
}
private void chooseFragmentForTheme() {
currentNowPlayingScreen = PreferenceUtil.getInstance().getNowPlayingScreen();
Fragment fragment; // must implement AbsPlayerFragment
switch (currentNowPlayingScreen) {
case MATERIAL:
fragment = new MaterialFragment();
break;
case FIT:
fragment = new FitFragment();
break;
case BLUR:
fragment = new BlurPlayerFragment();
break;
case FLAT:
fragment = new FlatPlayerFragment();
break;
case PLAIN:
fragment = new PlainPlayerFragment();
break;
case FULL:
fragment = new FullPlayerFragment();
break;
case COLOR:
fragment = new ColorFragment();
break;
case CARD:
fragment = new CardFragment();
break;
case SIMPLE:
fragment = new SimplePlayerFragment();
break;
case TINY:
fragment = new HmmPlayerFragment();
break;
case BLUR_CARD:
fragment = new CardBlurFragment();
break;
case ADAPTIVE:
fragment = new AdaptiveFragment();
break;
case NORMAL:
default:
fragment = new PlayerFragment();
break;
}
getSupportFragmentManager().beginTransaction().replace(R.id.player_fragment_container, fragment).commit();
getSupportFragmentManager().executePendingTransactions();
playerFragment = (AbsPlayerFragment) getSupportFragmentManager()
.findFragmentById(R.id.player_fragment_container);
}
@Override
public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) {
if (key.equals(PreferenceUtil.ALBUM_COVER_STYLE) || key.equals(PreferenceUtil.ALBUM_COVER_TRANSFORM)) {
recreate();
}
}
}

View file

@ -12,6 +12,7 @@ import butterknife.BindString;
import butterknife.BindView; import butterknife.BindView;
import butterknife.ButterKnife; import butterknife.ButterKnife;
import code.name.monkey.appthemehelper.ThemeStore; import code.name.monkey.appthemehelper.ThemeStore;
import code.name.monkey.appthemehelper.util.ToolbarContentTintHelper;
import code.name.monkey.retromusic.R; import code.name.monkey.retromusic.R;
import code.name.monkey.retromusic.helper.MusicPlayerRemote; import code.name.monkey.retromusic.helper.MusicPlayerRemote;
import code.name.monkey.retromusic.ui.activities.base.AbsMusicServiceActivity; import code.name.monkey.retromusic.ui.activities.base.AbsMusicServiceActivity;
@ -22,19 +23,19 @@ import code.name.monkey.retromusic.util.MusicUtil;
public class PlayingQueueActivity extends AbsMusicServiceActivity { public class PlayingQueueActivity extends AbsMusicServiceActivity {
@BindView(R.id.toolbar) @BindView(R.id.toolbar)
Toolbar mToolbar; Toolbar toolbar;
@BindDrawable(R.drawable.ic_keyboard_backspace_black_24dp) @BindDrawable(R.drawable.ic_keyboard_backspace_black_24dp)
Drawable mClose; Drawable close;
@BindView(R.id.player_queue_sub_header) @BindView(R.id.player_queue_sub_header)
TextView mPlayerQueueSubHeader; TextView textView;
@BindString(R.string.queue) @BindString(R.string.queue)
String queue; String queue;
@BindView(R.id.app_bar) @BindView(R.id.app_bar)
AppBarLayout mAppBarLayout; AppBarLayout appBarLayout;
@BindView(R.id.title) @BindView(R.id.title)
TextView title; TextView title;
@ -64,13 +65,15 @@ public class PlayingQueueActivity extends AbsMusicServiceActivity {
private void setupToolbar() { private void setupToolbar() {
title.setTextColor(ThemeStore.textColorPrimary(this)); title.setTextColor(ThemeStore.textColorPrimary(this));
mPlayerQueueSubHeader.setText(getUpNextAndQueueTime()); textView.setText(getUpNextAndQueueTime());
mPlayerQueueSubHeader.setTextColor(ThemeStore.accentColor(this)); textView.setTextColor(ThemeStore.accentColor(this));
mAppBarLayout.setBackgroundColor(ThemeStore.primaryColor(this));
mToolbar.setBackgroundColor(ThemeStore.primaryColor(this)); appBarLayout.setBackgroundColor(ThemeStore.primaryColor(this));
mToolbar.setNavigationIcon(mClose); toolbar.setBackgroundColor(ThemeStore.primaryColor(this));
setSupportActionBar(mToolbar); toolbar.setNavigationIcon(close);
setSupportActionBar(toolbar);
setTitle(null); setTitle(null);
mToolbar.setNavigationOnClickListener(v -> onBackPressed()); toolbar.setNavigationOnClickListener(v -> onBackPressed());
ToolbarContentTintHelper.colorBackButton(toolbar, ThemeStore.accentColor(this));
} }
} }

View file

@ -28,6 +28,7 @@ import butterknife.ButterKnife;
import butterknife.OnClick; import butterknife.OnClick;
import code.name.monkey.appthemehelper.ThemeStore; import code.name.monkey.appthemehelper.ThemeStore;
import code.name.monkey.appthemehelper.util.TintHelper; import code.name.monkey.appthemehelper.util.TintHelper;
import code.name.monkey.appthemehelper.util.ToolbarContentTintHelper;
import code.name.monkey.retromusic.R; import code.name.monkey.retromusic.R;
import code.name.monkey.retromusic.helper.MusicPlayerRemote; import code.name.monkey.retromusic.helper.MusicPlayerRemote;
import code.name.monkey.retromusic.helper.menu.PlaylistMenuHelper; import code.name.monkey.retromusic.helper.menu.PlaylistMenuHelper;
@ -80,16 +81,15 @@ public class PlaylistDetailActivity extends AbsSlidingMusicPanelActivity impleme
@Override @Override
protected void onCreate(Bundle savedInstanceState) { protected void onCreate(Bundle savedInstanceState) {
setDrawUnderStatusBar(true); setDrawUnderStatusBar();
super.onCreate(savedInstanceState); super.onCreate(savedInstanceState);
ButterKnife.bind(this); ButterKnife.bind(this);
setBottomBarVisibility(View.GONE);
setStatusbarColorAuto(); setStatusbarColorAuto();
setNavigationbarColorAuto(); setNavigationbarColorAuto();
setTaskDescriptionColorAuto(); setTaskDescriptionColorAuto();
setLightNavigationBar(true); setLightNavigationBar(true);
toggleBottomNavigationView(true);
playlist = getIntent().getExtras().getParcelable(EXTRA_PLAYLIST); playlist = getIntent().getExtras().getParcelable(EXTRA_PLAYLIST);
@ -106,7 +106,7 @@ public class PlaylistDetailActivity extends AbsSlidingMusicPanelActivity impleme
shuffleButton.setScaleX(0.9f); shuffleButton.setScaleX(0.9f);
shuffleButton.setScaleY(0.9f); shuffleButton.setScaleY(0.9f);
shuffleButton.setVisibility(View.VISIBLE); shuffleButton.show();
shuffleButton.setPivotX(shuffleButton.getWidth() / 2); shuffleButton.setPivotX(shuffleButton.getWidth() / 2);
shuffleButton.setPivotY(shuffleButton.getHeight() / 2); shuffleButton.setPivotY(shuffleButton.getHeight() / 2);
@ -185,6 +185,8 @@ public class PlaylistDetailActivity extends AbsSlidingMusicPanelActivity impleme
setTitle(null); setTitle(null);
setSupportActionBar(toolbar); setSupportActionBar(toolbar);
toolbar.setNavigationIcon(R.drawable.ic_keyboard_backspace_black_24dp); toolbar.setNavigationIcon(R.drawable.ic_keyboard_backspace_black_24dp);
ToolbarContentTintHelper.colorBackButton(toolbar, ThemeStore.accentColor(this));
} }
@Override @Override

View file

@ -3,10 +3,6 @@ package code.name.monkey.retromusic.ui.activities;
import android.content.Intent; import android.content.Intent;
import android.os.AsyncTask; import android.os.AsyncTask;
import android.os.Bundle; import android.os.Bundle;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import com.google.android.material.appbar.AppBarLayout;
import androidx.appcompat.widget.Toolbar;
import android.util.Log; import android.util.Log;
import android.view.MenuItem; import android.view.MenuItem;
import android.view.View; import android.view.View;
@ -15,13 +11,20 @@ import android.widget.Toast;
import com.anjlab.android.iab.v3.BillingProcessor; import com.anjlab.android.iab.v3.BillingProcessor;
import com.anjlab.android.iab.v3.TransactionDetails; import com.anjlab.android.iab.v3.TransactionDetails;
import com.google.android.material.appbar.AppBarLayout;
import com.google.android.material.button.MaterialButton;
import java.lang.ref.WeakReference; import java.lang.ref.WeakReference;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.appcompat.widget.Toolbar;
import butterknife.BindView; import butterknife.BindView;
import butterknife.ButterKnife; import butterknife.ButterKnife;
import butterknife.OnClick; import butterknife.OnClick;
import code.name.monkey.appthemehelper.ThemeStore; import code.name.monkey.appthemehelper.ThemeStore;
import code.name.monkey.appthemehelper.util.MaterialUtil;
import code.name.monkey.appthemehelper.util.ToolbarContentTintHelper;
import code.name.monkey.retromusic.BuildConfig; import code.name.monkey.retromusic.BuildConfig;
import code.name.monkey.retromusic.R; import code.name.monkey.retromusic.R;
import code.name.monkey.retromusic.RetroApplication; import code.name.monkey.retromusic.RetroApplication;
@ -39,10 +42,10 @@ public class ProVersionActivity extends AbsBaseActivity implements
Toolbar toolbar; Toolbar toolbar;
@BindView(R.id.restore_button) @BindView(R.id.restore_button)
View restoreButton; MaterialButton restoreButton;
@BindView(R.id.purchase_button) @BindView(R.id.purchase_button)
View purchaseButton; MaterialButton purchaseButton;
@BindView(R.id.app_bar) @BindView(R.id.app_bar)
AppBarLayout appBar; AppBarLayout appBar;
@ -57,7 +60,7 @@ public class ProVersionActivity extends AbsBaseActivity implements
protected void onCreate(Bundle savedInstanceState) { protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState); super.onCreate(savedInstanceState);
setContentView(R.layout.activity_pro_version); setContentView(R.layout.activity_pro_version);
setDrawUnderStatusBar(true); setDrawUnderStatusBar();
ButterKnife.bind(this); ButterKnife.bind(this);
setStatusbarColorAuto(); setStatusbarColorAuto();
@ -73,14 +76,17 @@ public class ProVersionActivity extends AbsBaseActivity implements
toolbar.setNavigationOnClickListener(v -> onBackPressed()); toolbar.setNavigationOnClickListener(v -> onBackPressed());
title.setTextColor(ThemeStore.textColorPrimary(this)); title.setTextColor(ThemeStore.textColorPrimary(this));
setSupportActionBar(toolbar); setSupportActionBar(toolbar);
//noinspection ConstantConditions setTitle(null);
getSupportActionBar().setTitle(null); ToolbarContentTintHelper.colorBackButton(toolbar, ThemeStore.accentColor(this));
restoreButton.setEnabled(false); restoreButton.setEnabled(false);
purchaseButton.setEnabled(false); purchaseButton.setEnabled(false);
billingProcessor = new BillingProcessor(this, BuildConfig.GOOGLE_PLAY_LICENSE_KEY, this); billingProcessor = new BillingProcessor(this, BuildConfig.GOOGLE_PLAY_LICENSE_KEY, this);
MaterialUtil.setTint(restoreButton, false);
MaterialUtil.setTint(purchaseButton, true);
} }
private void restorePurchase() { private void restorePurchase() {

View file

@ -60,7 +60,7 @@ public class SearchActivity extends AbsMusicServiceActivity implements OnQueryTe
@Override @Override
protected void onCreate(Bundle savedInstanceState) { protected void onCreate(Bundle savedInstanceState) {
setDrawUnderStatusBar(true); setDrawUnderStatusBar();
super.onCreate(savedInstanceState); super.onCreate(savedInstanceState);
setContentView(R.layout.activity_search); setContentView(R.layout.activity_search);

View file

@ -24,6 +24,7 @@ import butterknife.BindView;
import butterknife.ButterKnife; import butterknife.ButterKnife;
import code.name.monkey.appthemehelper.ThemeStore; import code.name.monkey.appthemehelper.ThemeStore;
import code.name.monkey.appthemehelper.util.ColorUtil; import code.name.monkey.appthemehelper.util.ColorUtil;
import code.name.monkey.appthemehelper.util.ToolbarContentTintHelper;
import code.name.monkey.retromusic.R; import code.name.monkey.retromusic.R;
import code.name.monkey.retromusic.appshortcuts.DynamicShortcutManager; import code.name.monkey.retromusic.appshortcuts.DynamicShortcutManager;
import code.name.monkey.retromusic.ui.activities.base.AbsBaseActivity; import code.name.monkey.retromusic.ui.activities.base.AbsBaseActivity;
@ -32,6 +33,8 @@ import code.name.monkey.retromusic.util.PreferenceUtil;
public class SettingsActivity extends AbsBaseActivity implements ColorChooserDialog.ColorCallback, SharedPreferences.OnSharedPreferenceChangeListener { public class SettingsActivity extends AbsBaseActivity implements ColorChooserDialog.ColorCallback, SharedPreferences.OnSharedPreferenceChangeListener {
private static final String TAG = "SettingsActivity";
@BindView(R.id.toolbar) @BindView(R.id.toolbar)
Toolbar toolbar; Toolbar toolbar;
@ -44,6 +47,7 @@ public class SettingsActivity extends AbsBaseActivity implements ColorChooserDia
@BindView(R.id.detail_content_frame) @BindView(R.id.detail_content_frame)
@Nullable @Nullable
FrameLayout detailsFrame; FrameLayout detailsFrame;
private FragmentManager fragmentManager = getSupportFragmentManager(); private FragmentManager fragmentManager = getSupportFragmentManager();
@Override @Override
@ -80,7 +84,7 @@ public class SettingsActivity extends AbsBaseActivity implements ColorChooserDia
setStatusbarColorAuto(); setStatusbarColorAuto();
setNavigationbarColorAuto(); setNavigationbarColorAuto();
setTaskDescriptionColorAuto();
setLightNavigationBar(true); setLightNavigationBar(true);
setupToolbar(); setupToolbar();
@ -92,17 +96,15 @@ public class SettingsActivity extends AbsBaseActivity implements ColorChooserDia
} }
private void setupToolbar() { private void setupToolbar() {
title.setTextColor(ThemeStore.textColorPrimary(this)); toolbar.setBackgroundColor(ThemeStore.primaryColor(this));
int primaryColor = ThemeStore.primaryColor(this); appBarLayout.setBackgroundColor(ThemeStore.primaryColor(this));
toolbar.setBackgroundColor(primaryColor);
appBarLayout.setBackgroundColor(primaryColor);
setTitle(null);
setSupportActionBar(toolbar); setSupportActionBar(toolbar);
toolbar.setNavigationIcon(R.drawable.ic_keyboard_backspace_black_24dp); setTitle(null);
toolbar.setNavigationOnClickListener(v -> onBackPressed()); toolbar.setNavigationOnClickListener(v -> onBackPressed());
title.setTextColor(ThemeStore.textColorPrimary(this));
ToolbarContentTintHelper.colorBackButton(toolbar, ThemeStore.accentColor(this));
} }
public void setupFragment(Fragment fragment, @StringRes int titleName) { public void setupFragment(Fragment fragment, @StringRes int titleName) {
FragmentTransaction fragmentTransaction = fragmentManager FragmentTransaction fragmentTransaction = fragmentManager
.beginTransaction() .beginTransaction()
@ -120,7 +122,6 @@ public class SettingsActivity extends AbsBaseActivity implements ColorChooserDia
} }
} }
@Override @Override
public void onBackPressed() { public void onBackPressed() {
if (fragmentManager.getBackStackEntryCount() == 0) { if (fragmentManager.getBackStackEntryCount() == 0) {
@ -145,20 +146,18 @@ public class SettingsActivity extends AbsBaseActivity implements ColorChooserDia
appBarLayout.setElevation(v); appBarLayout.setElevation(v);
} }
@Override @Override
public void onPause() { public void onPause() {
super.onPause(); super.onPause();
PreferenceUtil.getInstance(this).unregisterOnSharedPreferenceChangedListener(this); PreferenceUtil.getInstance().unregisterOnSharedPreferenceChangedListener(this);
} }
@Override @Override
public void onResume() { public void onResume() {
super.onResume(); super.onResume();
PreferenceUtil.getInstance(this).registerOnSharedPreferenceChangedListener(this); PreferenceUtil.getInstance().registerOnSharedPreferenceChangedListener(this);
} }
private static final String TAG = "SettingsActivity";
@Override @Override
public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) { public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) {
Log.i(TAG, "onSharedPreferenceChanged: "); Log.i(TAG, "onSharedPreferenceChanged: ");

View file

@ -1,6 +1,7 @@
package code.name.monkey.retromusic.ui.activities; package code.name.monkey.retromusic.ui.activities;
import android.content.Intent; import android.content.Intent;
import android.content.res.ColorStateList;
import android.graphics.Paint; import android.graphics.Paint;
import android.os.AsyncTask; import android.os.AsyncTask;
import android.os.Bundle; import android.os.Bundle;
@ -18,6 +19,7 @@ import com.anjlab.android.iab.v3.BillingProcessor;
import com.anjlab.android.iab.v3.SkuDetails; import com.anjlab.android.iab.v3.SkuDetails;
import com.anjlab.android.iab.v3.TransactionDetails; import com.anjlab.android.iab.v3.TransactionDetails;
import com.google.android.material.appbar.AppBarLayout; import com.google.android.material.appbar.AppBarLayout;
import com.google.android.material.button.MaterialButton;
import org.json.JSONException; import org.json.JSONException;
import org.json.JSONObject; import org.json.JSONObject;
@ -39,6 +41,7 @@ import butterknife.ButterKnife;
import butterknife.OnClick; import butterknife.OnClick;
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;
import code.name.monkey.appthemehelper.util.ToolbarContentTintHelper;
import code.name.monkey.retromusic.BuildConfig; import code.name.monkey.retromusic.BuildConfig;
import code.name.monkey.retromusic.R; import code.name.monkey.retromusic.R;
import code.name.monkey.retromusic.ui.activities.base.AbsBaseActivity; import code.name.monkey.retromusic.ui.activities.base.AbsBaseActivity;
@ -56,26 +59,30 @@ public class SupportDevelopmentActivity extends AbsBaseActivity implements Billi
private static final int DONATION_PRODUCT_IDS = R.array.donation_ids; private static final int DONATION_PRODUCT_IDS = R.array.donation_ids;
@BindView(R.id.progress) @BindView(R.id.progress)
ProgressBar mProgressBar; ProgressBar progressBar;
@BindView(R.id.progress_container) @BindView(R.id.progress_container)
View mProgressContainer; View progressContainer;
@BindView(R.id.list) @BindView(R.id.list)
RecyclerView mListView; RecyclerView recyclerView;
@BindView(R.id.toolbar) @BindView(R.id.toolbar)
Toolbar mToolbar; Toolbar toolbar;
@BindView(R.id.app_bar) @BindView(R.id.app_bar)
AppBarLayout mAppBarLayout; AppBarLayout appBarLayout;
@BindView(R.id.root) @BindView(R.id.root)
ViewGroup mViewGroup; ViewGroup viewGroup;
@BindView(R.id.title) @BindView(R.id.title)
TextView title; TextView title;
private BillingProcessor mBillingProcessor;
@BindView(R.id.donate)
MaterialButton materialButton;
private BillingProcessor billingProcessor;
private AsyncTask skuDetailsLoadAsyncTask; private AsyncTask skuDetailsLoadAsyncTask;
private static List<SkuDetails> getDetails() { private static List<SkuDetails> getDetails() {
@ -107,7 +114,7 @@ public class SupportDevelopmentActivity extends AbsBaseActivity implements Billi
private void donate(int i) { private void donate(int i) {
final String[] ids = getResources().getStringArray(DONATION_PRODUCT_IDS); final String[] ids = getResources().getStringArray(DONATION_PRODUCT_IDS);
mBillingProcessor.purchase(this, ids[i]); billingProcessor.purchase(this, ids[i]);
} }
@OnClick(R.id.donate) @OnClick(R.id.donate)
@ -129,9 +136,8 @@ public class SupportDevelopmentActivity extends AbsBaseActivity implements Billi
setupToolbar(); setupToolbar();
mBillingProcessor billingProcessor = new BillingProcessor(this, BuildConfig.GOOGLE_PLAY_LICENSE_KEY, this);
= new BillingProcessor(this, BuildConfig.GOOGLE_PLAY_LICENSE_KEY, this); MDTintHelper.setTint(progressBar, ThemeStore.accentColor(this));
MDTintHelper.setTint(mProgressBar, ThemeStore.accentColor(this));
((TextView) findViewById(R.id.donation)).setTextColor(ThemeStore.accentColor(this)); ((TextView) findViewById(R.id.donation)).setTextColor(ThemeStore.accentColor(this));
} }
@ -139,12 +145,16 @@ public class SupportDevelopmentActivity extends AbsBaseActivity implements Billi
private void setupToolbar() { private void setupToolbar() {
title.setTextColor(ThemeStore.textColorPrimary(this)); title.setTextColor(ThemeStore.textColorPrimary(this));
int primaryColor = ThemeStore.primaryColor(this); int primaryColor = ThemeStore.primaryColor(this);
mAppBarLayout.setBackgroundColor(primaryColor); appBarLayout.setBackgroundColor(primaryColor);
mToolbar.setBackgroundColor(primaryColor); toolbar.setBackgroundColor(primaryColor);
mToolbar.setNavigationOnClickListener(view -> onBackPressed());
mToolbar.setNavigationIcon(R.drawable.ic_keyboard_backspace_black_24dp); toolbar.setNavigationOnClickListener(view -> onBackPressed());
setSupportActionBar(mToolbar); toolbar.setNavigationIcon(R.drawable.ic_keyboard_backspace_black_24dp);
setSupportActionBar(toolbar);
setTitle(null); setTitle(null);
materialButton.setBackgroundTintList(ColorStateList.valueOf(ThemeStore.accentColor(this)));
ToolbarContentTintHelper.colorBackButton(toolbar, ThemeStore.accentColor(this));
} }
@Override @Override
@ -179,15 +189,15 @@ public class SupportDevelopmentActivity extends AbsBaseActivity implements Billi
@Override @Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) { protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (!mBillingProcessor.handleActivityResult(requestCode, resultCode, data)) { if (!billingProcessor.handleActivityResult(requestCode, resultCode, data)) {
super.onActivityResult(requestCode, resultCode, data); super.onActivityResult(requestCode, resultCode, data);
} }
} }
@Override @Override
public void onDestroy() { public void onDestroy() {
if (mBillingProcessor != null) { if (billingProcessor != null) {
mBillingProcessor.release(); billingProcessor.release();
} }
if (skuDetailsLoadAsyncTask != null) { if (skuDetailsLoadAsyncTask != null) {
skuDetailsLoadAsyncTask.cancel(true); skuDetailsLoadAsyncTask.cancel(true);
@ -208,8 +218,8 @@ public class SupportDevelopmentActivity extends AbsBaseActivity implements Billi
SupportDevelopmentActivity dialog = donationDialogWeakReference.get(); SupportDevelopmentActivity dialog = donationDialogWeakReference.get();
if (dialog == null) return; if (dialog == null) return;
dialog.mProgressContainer.setVisibility(View.VISIBLE); dialog.progressContainer.setVisibility(View.VISIBLE);
dialog.mListView.setVisibility(View.GONE); dialog.recyclerView.setVisibility(View.GONE);
} }
@Override @Override
@ -217,7 +227,7 @@ public class SupportDevelopmentActivity extends AbsBaseActivity implements Billi
SupportDevelopmentActivity dialog = donationDialogWeakReference.get(); SupportDevelopmentActivity dialog = donationDialogWeakReference.get();
if (dialog != null) { if (dialog != null) {
final String[] ids = dialog.getResources().getStringArray(DONATION_PRODUCT_IDS); final String[] ids = dialog.getResources().getStringArray(DONATION_PRODUCT_IDS);
return dialog.mBillingProcessor.getPurchaseListingDetails(new ArrayList<>(Arrays.asList(ids))); return dialog.billingProcessor.getPurchaseListingDetails(new ArrayList<>(Arrays.asList(ids)));
} }
cancel(false); cancel(false);
return null; return null;
@ -230,16 +240,16 @@ public class SupportDevelopmentActivity extends AbsBaseActivity implements Billi
if (dialog == null) return; if (dialog == null) return;
if (skuDetails == null || skuDetails.isEmpty()) { if (skuDetails == null || skuDetails.isEmpty()) {
dialog.mProgressContainer.setVisibility(View.GONE); dialog.progressContainer.setVisibility(View.GONE);
return; return;
} }
//noinspection ConstantConditions //noinspection ConstantConditions
dialog.mProgressContainer.setVisibility(View.GONE); dialog.progressContainer.setVisibility(View.GONE);
dialog.mListView.setItemAnimator(new DefaultItemAnimator()); dialog.recyclerView.setItemAnimator(new DefaultItemAnimator());
dialog.mListView.setLayoutManager(new GridLayoutManager(dialog, 2)); dialog.recyclerView.setLayoutManager(new GridLayoutManager(dialog, 2));
dialog.mListView.setAdapter(new SkuDetailsAdapter(dialog, skuDetails)); dialog.recyclerView.setAdapter(new SkuDetailsAdapter(dialog, skuDetails));
dialog.mListView.setVisibility(View.VISIBLE); dialog.recyclerView.setVisibility(View.VISIBLE);
} }
@ -300,7 +310,7 @@ public class SupportDevelopmentActivity extends AbsBaseActivity implements Billi
viewHolder.price.setText(skuDetails.priceText); viewHolder.price.setText(skuDetails.priceText);
viewHolder.image.setImageResource(getIcon(i)); viewHolder.image.setImageResource(getIcon(i));
final boolean purchased = donationsDialog.mBillingProcessor.isPurchased(skuDetails.productId); final boolean purchased = donationsDialog.billingProcessor.isPurchased(skuDetails.productId);
int titleTextColor = purchased ? ATHUtil.resolveColor(donationsDialog, android.R.attr.textColorHint) : ThemeStore.textColorPrimary(donationsDialog); int titleTextColor = purchased ? ATHUtil.resolveColor(donationsDialog, android.R.attr.textColorHint) : ThemeStore.textColorPrimary(donationsDialog);
int contentTextColor = purchased ? titleTextColor : ThemeStore.textColorSecondary(donationsDialog); int contentTextColor = purchased ? titleTextColor : ThemeStore.textColorSecondary(donationsDialog);

View file

@ -31,6 +31,7 @@ import butterknife.BindView;
import butterknife.ButterKnife; import butterknife.ButterKnife;
import butterknife.OnClick; import butterknife.OnClick;
import code.name.monkey.appthemehelper.ThemeStore; import code.name.monkey.appthemehelper.ThemeStore;
import code.name.monkey.appthemehelper.util.TintHelper;
import code.name.monkey.retromusic.R; import code.name.monkey.retromusic.R;
import code.name.monkey.retromusic.ui.activities.base.AbsBaseActivity; import code.name.monkey.retromusic.ui.activities.base.AbsBaseActivity;
import code.name.monkey.retromusic.util.Compressor; import code.name.monkey.retromusic.util.Compressor;
@ -95,20 +96,20 @@ public class UserInfoActivity extends AbsBaseActivity {
title.setTextColor(ThemeStore.textColorPrimary(this)); title.setTextColor(ThemeStore.textColorPrimary(this));
nameLayout.setBoxStrokeColor(ThemeStore.accentColor(this)); nameLayout.setBoxStrokeColor(ThemeStore.accentColor(this));
name.setText(PreferenceUtil.getInstance(this).getUserName()); name.setText(PreferenceUtil.getInstance().getUserName());
if (!PreferenceUtil.getInstance(this).getProfileImage().isEmpty()) { if (!PreferenceUtil.getInstance().getProfileImage().isEmpty()) {
loadImageFromStorage(PreferenceUtil.getInstance(this).getProfileImage()); loadImageFromStorage(PreferenceUtil.getInstance().getProfileImage());
} }
if (!PreferenceUtil.getInstance(this).getBannerImage().isEmpty()) { if (!PreferenceUtil.getInstance().getBannerImage().isEmpty()) {
loadBannerFromStorage(PreferenceUtil.getInstance(this).getBannerImage()); loadBannerFromStorage(PreferenceUtil.getInstance().getBannerImage());
} }
} }
private void setupToolbar() { private void setupToolbar() {
toolbar.setBackgroundColor(ThemeStore.primaryColor(this)); toolbar.setBackgroundColor(ThemeStore.primaryColor(this));
appBarLayout.setBackgroundColor(ThemeStore.primaryColor(this)); appBarLayout.setBackgroundColor(ThemeStore.primaryColor(this));
nextButton.setBackgroundTintList(ColorStateList.valueOf(ThemeStore.accentColor(this))); TintHelper.setTintAuto(nextButton, ThemeStore.accentColor(this), true);
} }
@OnClick({R.id.next, R.id.banner_select}) @OnClick({R.id.next, R.id.banner_select})
@ -124,7 +125,7 @@ public class UserInfoActivity extends AbsBaseActivity {
return; return;
} }
//noinspection ConstantConditions //noinspection ConstantConditions
PreferenceUtil.getInstance(this).setUserName(nameString); PreferenceUtil.getInstance().setUserName(nameString);
setResult(RESULT_OK); setResult(RESULT_OK);
//((UserInfoActivity) getActivity()).setFragment(new ChooseThemeFragment(), true); //((UserInfoActivity) getActivity()).setFragment(new ChooseThemeFragment(), true);
finish(); finish();
@ -144,7 +145,7 @@ public class UserInfoActivity extends AbsBaseActivity {
selectBannerImage(); selectBannerImage();
break; break;
case 1: case 1:
PreferenceUtil.getInstance(this).setBannerImagePath(""); PreferenceUtil.getInstance().setBannerImagePath("");
break; break;
} }
}).show(); }).show();
@ -152,7 +153,7 @@ public class UserInfoActivity extends AbsBaseActivity {
private void selectBannerImage() { private void selectBannerImage() {
//noinspection ConstantConditions //noinspection ConstantConditions
if (PreferenceUtil.getInstance(this).getBannerImage().isEmpty()) { if (PreferenceUtil.getInstance().getBannerImage().isEmpty()) {
Intent pickImageIntent = new Intent(Intent.ACTION_PICK, MediaStore.Images.Media.EXTERNAL_CONTENT_URI); Intent pickImageIntent = new Intent(Intent.ACTION_PICK, MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
pickImageIntent.setType("image/*"); pickImageIntent.setType("image/*");
pickImageIntent.putExtra("crop", "true"); pickImageIntent.putExtra("crop", "true");
@ -165,7 +166,7 @@ public class UserInfoActivity extends AbsBaseActivity {
startActivityForResult(Intent.createChooser(pickImageIntent, startActivityForResult(Intent.createChooser(pickImageIntent,
"Select Picture"), PICK_BANNER_REQUEST); "Select Picture"), PICK_BANNER_REQUEST);
} else { } else {
PreferenceUtil.getInstance(this).setBannerImagePath(""); PreferenceUtil.getInstance().setBannerImagePath("");
image.setImageResource(android.R.color.transparent); image.setImageResource(android.R.color.transparent);
} }
} }
@ -183,7 +184,7 @@ public class UserInfoActivity extends AbsBaseActivity {
pickNewPhoto(); pickNewPhoto();
break; break;
case 1: case 1:
PreferenceUtil.getInstance(this).saveProfileImage(""); PreferenceUtil.getInstance().saveProfileImage("");
break; break;
} }
}).show(); }).show();
@ -211,7 +212,7 @@ public class UserInfoActivity extends AbsBaseActivity {
try { try {
Bitmap bitmap = ImageUtil.getResizedBitmap(Media.getBitmap(getContentResolver(), uri), PROFILE_ICON_SIZE); Bitmap bitmap = ImageUtil.getResizedBitmap(Media.getBitmap(getContentResolver(), uri), PROFILE_ICON_SIZE);
String profileImagePath = saveToInternalStorage(bitmap, USER_PROFILE); String profileImagePath = saveToInternalStorage(bitmap, USER_PROFILE);
PreferenceUtil.getInstance(this).saveProfileImage(profileImagePath); PreferenceUtil.getInstance().saveProfileImage(profileImagePath);
loadImageFromStorage(profileImagePath); loadImageFromStorage(profileImagePath);
} catch (IOException e) { } catch (IOException e) {
@ -224,7 +225,7 @@ public class UserInfoActivity extends AbsBaseActivity {
try { try {
Bitmap bitmap = Media.getBitmap(getContentResolver(), uri); Bitmap bitmap = Media.getBitmap(getContentResolver(), uri);
String profileImagePath = saveToInternalStorage(bitmap, USER_BANNER); String profileImagePath = saveToInternalStorage(bitmap, USER_BANNER);
PreferenceUtil.getInstance(this).setBannerImagePath(profileImagePath); PreferenceUtil.getInstance().setBannerImagePath(profileImagePath);
loadBannerFromStorage(profileImagePath); loadBannerFromStorage(profileImagePath);
} catch (IOException e) { } catch (IOException e) {
e.printStackTrace(); e.printStackTrace();

View file

@ -0,0 +1,98 @@
package code.name.monkey.retromusic.ui.activities;
import android.content.Context;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
import android.os.Bundle;
import android.webkit.WebView;
import android.widget.TextView;
import com.afollestad.materialdialogs.internal.ThemeSingleton;
import com.google.android.material.appbar.AppBarLayout;
import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import androidx.annotation.NonNull;
import androidx.appcompat.widget.Toolbar;
import butterknife.BindView;
import butterknife.ButterKnife;
import code.name.monkey.appthemehelper.ThemeStore;
import code.name.monkey.appthemehelper.util.ColorUtil;
import code.name.monkey.appthemehelper.util.ToolbarContentTintHelper;
import code.name.monkey.retromusic.R;
import code.name.monkey.retromusic.ui.activities.base.AbsBaseActivity;
import code.name.monkey.retromusic.util.PreferenceUtil;
public class WhatsNewActivity extends AbsBaseActivity {
@BindView(R.id.web_view)
WebView webView;
@BindView(R.id.title)
TextView title;
@BindView(R.id.toolbar)
Toolbar toolbar;
@BindView(R.id.app_bar)
AppBarLayout appBarLayout;
private static void setChangelogRead(@NonNull Context context) {
try {
PackageInfo pInfo = context.getPackageManager().getPackageInfo(context.getPackageName(), 0);
int currentVersion = pInfo.versionCode;
PreferenceUtil.getInstance().setLastChangeLogVersion(currentVersion);
} catch (PackageManager.NameNotFoundException e) {
e.printStackTrace();
}
}
private static String colorToHex(int color) {
return Integer.toHexString(color).substring(2);
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_whats_new);
ButterKnife.bind(this);
setStatusbarColorAuto();
setNavigationbarColorAuto();
setTaskDescriptionColorAuto();
toolbar.setBackgroundColor(ThemeStore.primaryColor(this));
appBarLayout.setBackgroundColor(ThemeStore.primaryColor(this));
setSupportActionBar(toolbar);
setTitle(null);
toolbar.setNavigationOnClickListener(v -> onBackPressed());
title.setTextColor(ThemeStore.textColorPrimary(this));
ToolbarContentTintHelper.colorBackButton(toolbar, ThemeStore.accentColor(this));
try {
// Load from phonograph-changelog.html in the assets folder
StringBuilder buf = new StringBuilder();
InputStream json = getAssets().open("retro-changelog.html");
BufferedReader in = new BufferedReader(new InputStreamReader(json, "UTF-8"));
String str;
while ((str = in.readLine()) != null)
buf.append(str);
in.close();
// Inject color values for WebView body background and links
final String backgroundColor = colorToHex(ThemeStore.primaryColor(this));
final String contentColor = ThemeSingleton.get().darkTheme ? "#ffffff" : "#000000";
webView.loadData(buf.toString()
.replace("{style-placeholder}",
String.format("body { background-color: %s; color: %s; }", backgroundColor, contentColor))
.replace("{link-color}", colorToHex(ThemeSingleton.get().positiveColor.getDefaultColor()))
.replace("{link-color-active}", colorToHex(ColorUtil.lightenColor(ThemeSingleton.get().positiveColor.getDefaultColor())))
, "text/html", "UTF-8");
} catch (Throwable e) {
webView.loadData("<h1>Unable to load</h1><p>" + e.getLocalizedMessage() + "</p>", "text/html", "UTF-8");
}
setChangelogRead(this);
}
}

View file

@ -9,13 +9,16 @@ import android.net.Uri;
import android.os.Build; import android.os.Build;
import android.os.Bundle; import android.os.Bundle;
import android.provider.Settings; import android.provider.Settings;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import com.google.android.material.snackbar.Snackbar;
import androidx.core.app.ActivityCompat;
import android.view.KeyEvent; import android.view.KeyEvent;
import android.view.View; import android.view.View;
import android.view.ViewGroup;
import com.google.android.material.snackbar.Snackbar;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.core.app.ActivityCompat;
import androidx.core.view.ViewCompat;
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 uk.co.chrisjenx.calligraphy.CalligraphyContextWrapper; import uk.co.chrisjenx.calligraphy.CalligraphyContextWrapper;
@ -32,7 +35,6 @@ public abstract class AbsBaseActivity extends AbsThemeActivity {
@Override @Override
protected void onCreate(Bundle savedInstanceState) { protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState); super.onCreate(savedInstanceState);
setVolumeControlStream(AudioManager.STREAM_MUSIC); setVolumeControlStream(AudioManager.STREAM_MUSIC);
permissions = getPermissionsToRequest(); permissions = getPermissionsToRequest();
@ -59,7 +61,6 @@ public abstract class AbsBaseActivity extends AbsThemeActivity {
onHasPermissionsChanged(hasPermissions); onHasPermissionsChanged(hasPermissions);
} }
} }
} }
protected void onHasPermissionsChanged(boolean hasPermissions) { protected void onHasPermissionsChanged(boolean hasPermissions) {

View file

@ -1,22 +1,15 @@
package code.name.monkey.retromusic.ui.activities.base; package code.name.monkey.retromusic.ui.activities.base;
import android.animation.ValueAnimator;
import android.annotation.SuppressLint; import android.annotation.SuppressLint;
import android.os.Bundle; import android.os.Bundle;
import android.view.View; import android.view.View;
import android.view.ViewGroup; import android.view.ViewGroup;
import android.view.ViewTreeObserver; import android.view.ViewTreeObserver;
import android.view.animation.PathInterpolator;
import com.google.android.gms.cast.framework.CastSession; import com.google.android.gms.cast.framework.CastSession;
import com.google.android.material.bottomnavigation.BottomNavigationView; import com.google.android.material.bottomnavigation.BottomNavigationView;
import com.sothree.slidinguppanel.SlidingUpPanelLayout;
import com.sothree.slidinguppanel.SlidingUpPanelLayout.PanelState;
import androidx.annotation.ColorInt;
import androidx.annotation.FloatRange;
import androidx.annotation.LayoutRes; import androidx.annotation.LayoutRes;
import androidx.fragment.app.Fragment;
import butterknife.BindView; import butterknife.BindView;
import butterknife.ButterKnife; import butterknife.ButterKnife;
import code.name.monkey.appthemehelper.ThemeStore; import code.name.monkey.appthemehelper.ThemeStore;
@ -27,169 +20,69 @@ import code.name.monkey.retromusic.R;
import code.name.monkey.retromusic.cast.CastHelper; import code.name.monkey.retromusic.cast.CastHelper;
import code.name.monkey.retromusic.helper.MusicPlayerRemote; import code.name.monkey.retromusic.helper.MusicPlayerRemote;
import code.name.monkey.retromusic.ui.fragments.MiniPlayerFragment; import code.name.monkey.retromusic.ui.fragments.MiniPlayerFragment;
import code.name.monkey.retromusic.ui.fragments.NowPlayingScreen;
import code.name.monkey.retromusic.ui.fragments.base.AbsPlayerFragment;
import code.name.monkey.retromusic.ui.fragments.player.adaptive.AdaptiveFragment;
import code.name.monkey.retromusic.ui.fragments.player.blur.BlurPlayerFragment;
import code.name.monkey.retromusic.ui.fragments.player.card.CardFragment;
import code.name.monkey.retromusic.ui.fragments.player.cardblur.CardBlurFragment;
import code.name.monkey.retromusic.ui.fragments.player.color.ColorFragment;
import code.name.monkey.retromusic.ui.fragments.player.flat.FlatPlayerFragment;
import code.name.monkey.retromusic.ui.fragments.player.full.FullPlayerFragment;
import code.name.monkey.retromusic.ui.fragments.player.hmm.HmmPlayerFragment;
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.plain.PlainPlayerFragment;
import code.name.monkey.retromusic.ui.fragments.player.simple.SimplePlayerFragment;
import code.name.monkey.retromusic.util.NavigationUtil;
import code.name.monkey.retromusic.util.PreferenceUtil; import code.name.monkey.retromusic.util.PreferenceUtil;
import code.name.monkey.retromusic.util.ViewUtil;
public abstract class AbsSlidingMusicPanelActivity extends AbsMusicServiceActivity implements SlidingUpPanelLayout.PanelSlideListener, PlayerFragment.Callbacks { public abstract class AbsSlidingMusicPanelActivity extends AbsMusicServiceActivity {
public static final String TAG = AbsSlidingMusicPanelActivity.class.getSimpleName(); public static final String TAG = AbsSlidingMusicPanelActivity.class.getSimpleName();
@BindView(R.id.sliding_layout)
SlidingUpPanelLayout slidingUpPanelLayout;
@BindView(R.id.bottom_navigation) @BindView(R.id.bottom_navigation)
BottomNavigationView bottomNavigationView; BottomNavigationView bottomNavigationView;
private int navigationbarColor; @BindView(R.id.parentPanel)
private int taskColor; ViewGroup parentPanel;
private boolean lightStatusBar;
private boolean lightNavigationBar;
private NowPlayingScreen currentNowPlayingScreen;
private AbsPlayerFragment playerFragment;
private MiniPlayerFragment miniPlayerFragment;
private ValueAnimator navigationBarColorAnimator;
@BindView(R.id.mini_player_container)
ViewGroup miniPlayerContainer;
private MiniPlayerFragment miniPlayerFragment;
protected AbsSlidingMusicPanelActivity() {
}
@Override @Override
protected void onCreate(Bundle savedInstanceState) { protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState); super.onCreate(savedInstanceState);
setContentView(createContentView()); setContentView(createContentView());
ButterKnife.bind(this); ButterKnife.bind(this);
setLightStatusbar(true);
choosFragmentForTheme(); setLightNavigationBar(true);
//noinspection ConstantConditions
miniPlayerFragment.getView().setOnClickListener(v -> {
CastSession castSession = getCastSession();
if (castSession != null) {
NavigationUtil.gotoExpandedController(AbsSlidingMusicPanelActivity.this);
} else {
expandPanel();
}
}
);
slidingUpPanelLayout.getViewTreeObserver()
.addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
slidingUpPanelLayout.getViewTreeObserver().removeOnGlobalLayoutListener(this);
if (getPanelState() == PanelState.EXPANDED) {
onPanelSlide(slidingUpPanelLayout, 1);
onPanelExpanded(slidingUpPanelLayout);
} else if (getPanelState() == PanelState.COLLAPSED) {
onPanelCollapsed(slidingUpPanelLayout);
} else {
playerFragment.onHide();
}
}
});
slidingUpPanelLayout.addPanelSlideListener(this);
setupBottomView(); setupBottomView();
miniPlayerFragment = (MiniPlayerFragment) getSupportFragmentManager().findFragmentById(R.id.mini_player_fragment);
} }
private void choosFragmentForTheme() { private void setupBottomView() {
currentNowPlayingScreen = PreferenceUtil.getInstance(this).getNowPlayingScreen(); bottomNavigationView.setBackgroundColor(ThemeStore.primaryColor(this));
bottomNavigationView.setSelectedItemId(PreferenceUtil.getInstance().getLastPage());
Fragment fragment; // must implement AbsPlayerFragment int iconColor = ATHUtil.resolveColor(this, R.attr.iconColor);
switch (currentNowPlayingScreen) { int accentColor = ThemeStore.accentColor(this);
case MATERIAL: NavigationViewUtil.setItemIconColors(bottomNavigationView, ColorUtil.withAlpha(iconColor, 0.5f), accentColor);
fragment = new MaterialFragment(); NavigationViewUtil.setItemTextColors(bottomNavigationView, ColorUtil.withAlpha(iconColor, 0.5f), accentColor);
break;
case BLUR:
fragment = new BlurPlayerFragment();
break;
case FLAT:
fragment = new FlatPlayerFragment();
break;
case PLAIN:
fragment = new PlainPlayerFragment();
break;
case FULL:
fragment = new FullPlayerFragment();
break;
case COLOR:
fragment = new ColorFragment();
break;
case CARD:
fragment = new CardFragment();
break;
case SIMPLE:
fragment = new SimplePlayerFragment();
break;
case TINY:
fragment = new HmmPlayerFragment();
break;
case BLUR_CARD:
fragment = new CardBlurFragment();
break;
case ADAPTIVE:
fragment = new AdaptiveFragment();
break;
case NORMAL: bottomNavigationView.setLabelVisibilityMode(PreferenceUtil.getInstance().getTabTitleMode());
default: //bottomNavigationView.getMenu().removeItem(R.id.action_playlist);
fragment = new PlayerFragment();
break;
}
getSupportFragmentManager().beginTransaction().replace(R.id.player_fragment_container, fragment)
.commit();
getSupportFragmentManager().executePendingTransactions();
playerFragment = (AbsPlayerFragment) getSupportFragmentManager()
.findFragmentById(R.id.player_fragment_container);
miniPlayerFragment = (MiniPlayerFragment) getSupportFragmentManager()
.findFragmentById(R.id.mini_player_fragment);
} }
@Override public void setBottomBarVisibility(int gone) {
protected void onResume() { if (bottomNavigationView != null) {
super.onResume(); bottomNavigationView.setVisibility(gone);
if (currentNowPlayingScreen != PreferenceUtil.getInstance(this).getNowPlayingScreen()) {
postRecreate();
} }
} }
@Override
public void onDestroy() {
super.onDestroy();
if (navigationBarColorAnimator != null) {
navigationBarColorAnimator.cancel(); // just in case
}
}
protected abstract View createContentView(); protected abstract View createContentView();
@Override @Override
public void onServiceConnected() { public void onServiceConnected() {
super.onServiceConnected(); super.onServiceConnected();
if (!MusicPlayerRemote.getPlayingQueue().isEmpty()) { if (!MusicPlayerRemote.getPlayingQueue().isEmpty())
slidingUpPanelLayout.getViewTreeObserver() parentPanel.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
.addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
@Override @Override
public void onGlobalLayout() { public void onGlobalLayout() {
slidingUpPanelLayout.getViewTreeObserver().removeOnGlobalLayoutListener(this); parentPanel.getViewTreeObserver().removeOnGlobalLayoutListener(this);
hideBottomBar(false); hideBottomBar(false);
} }
}); });
}// don't call hideBottomBar(true) here as it causes a bug with the SlidingUpPanelLayout
} }
@Override @Override
@ -198,145 +91,9 @@ public abstract class AbsSlidingMusicPanelActivity extends AbsMusicServiceActivi
hideBottomBar(MusicPlayerRemote.getPlayingQueue().isEmpty()); hideBottomBar(MusicPlayerRemote.getPlayingQueue().isEmpty());
} }
@Override
public void onPanelSlide(View panel, @FloatRange(from = 0, to = 1) float slideOffset) {
bottomNavigationView.setTranslationY(slideOffset * 400);
setMiniPlayerAlphaProgress(slideOffset);
}
@Override
public void onPanelStateChanged(View panel, PanelState previousState, PanelState newState) {
switch (newState) {
case COLLAPSED:
onPanelCollapsed(panel);
break;
case EXPANDED:
onPanelExpanded(panel);
break;
case ANCHORED:
collapsePanel(); // this fixes a bug where the panel would get stuck for some reason
break;
}
}
public void onPanelCollapsed(View panel) {
// restore values
super.setLightStatusbar(lightStatusBar);
super.setTaskDescriptionColor(taskColor);
super.setNavigationbarColor(navigationbarColor);
super.setLightNavigationBar(lightNavigationBar);
playerFragment.setMenuVisibility(false);
playerFragment.setUserVisibleHint(false);
playerFragment.onHide();
}
public void onPanelExpanded(View panel) {
// setting fragments values
int playerFragmentColor = playerFragment.getPaletteColor();
super.setTaskDescriptionColor(playerFragmentColor);
if (currentNowPlayingScreen == NowPlayingScreen.COLOR) {
super.setNavigationbarColor(playerFragmentColor);
} else {
super.setNavigationbarColor(ThemeStore.primaryColor(this));
}
setLightStatusBar();
playerFragment.setMenuVisibility(true);
playerFragment.setUserVisibleHint(true);
playerFragment.onShow();
}
private void setLightStatusBar() {
super.setLightStatusbar(PreferenceUtil.getInstance(this).getAdaptiveColor() &&
ColorUtil.isColorLight(ThemeStore.primaryColor(this)) &&
(currentNowPlayingScreen == NowPlayingScreen.FLAT
|| currentNowPlayingScreen == NowPlayingScreen.PLAIN
|| currentNowPlayingScreen == NowPlayingScreen.SIMPLE
|| currentNowPlayingScreen == NowPlayingScreen.NORMAL
|| currentNowPlayingScreen == NowPlayingScreen.ADAPTIVE
|| currentNowPlayingScreen == NowPlayingScreen.TINY
|| currentNowPlayingScreen == NowPlayingScreen.MATERIAL));
}
@Override
public void setLightStatusbar(boolean enabled) {
lightStatusBar = enabled;
if (getPanelState() == SlidingUpPanelLayout.PanelState.COLLAPSED) {
super.setLightStatusbar(enabled);
}
}
@Override
public void setLightNavigationBar(boolean enabled) {
lightNavigationBar = enabled;
/*if (getPanelState() == SlidingUpPanelLayout.PanelState.COLLAPSED) {
super.setLightNavigationBar(enabled);
}*/
}
@Override
public void setTaskDescriptionColor(@ColorInt int color) {
taskColor = color;
if (getPanelState() == null || getPanelState() == SlidingUpPanelLayout.PanelState.COLLAPSED) {
super.setTaskDescriptionColor(color);
}
}
@Override
public void setNavigationbarColor(int color) {
navigationbarColor = color;
if (getPanelState() == SlidingUpPanelLayout.PanelState.COLLAPSED) {
if (navigationBarColorAnimator != null) {
navigationBarColorAnimator.cancel();
}
super.setNavigationbarColor(color);
}
}
@Override
public void onPaletteColorChanged() {
int playerFragmentColor = playerFragment.getPaletteColor();
if (getPanelState() == PanelState.EXPANDED) {
super.setTaskDescriptionColor(playerFragmentColor);
if (currentNowPlayingScreen == NowPlayingScreen.COLOR) {
super.setNavigationbarColor(playerFragmentColor);
}
}
}
private void setMiniPlayerAlphaProgress(@FloatRange(from = 0, to = 1) float progress) {
if (miniPlayerFragment == null) {
return;
}
float alpha = 1 - progress;
miniPlayerFragment.getView().setAlpha(alpha);
// necessary to make the views below clickable
miniPlayerFragment.getView().setVisibility(alpha == 0 ? View.GONE : View.VISIBLE);
}
public void hideBottomBar(final boolean hide) { public void hideBottomBar(final boolean hide) {
miniPlayerContainer.setVisibility(hide ? View.GONE : View.VISIBLE);
int heightOfBar =
getResources().getDimensionPixelSize(R.dimen.mini_player_height);
int heightOfBarWithTabs =
getResources().getDimensionPixelSize(R.dimen.mini_player_height_expanded);
if (hide) {
slidingUpPanelLayout.setPanelHeight(0);
collapsePanel();
} else {
if (!MusicPlayerRemote.getPlayingQueue().isEmpty()) {
slidingUpPanelLayout.setPanelHeight(bottomNavigationView.getVisibility() == View.VISIBLE ?
heightOfBarWithTabs : heightOfBar);
} }
}
}
protected View wrapSlidingMusicPanel(@LayoutRes int resId) { protected View wrapSlidingMusicPanel(@LayoutRes int resId) {
@SuppressLint("InflateParams") @SuppressLint("InflateParams")
@ -348,83 +105,20 @@ public abstract class AbsSlidingMusicPanelActivity extends AbsMusicServiceActivi
@Override @Override
public void onBackPressed() { public void onBackPressed() {
if (!handleBackPress()) { if (handleBackPress()) {
super.onBackPressed(); super.onBackPressed();
} }
} }
public boolean handleBackPress() { public boolean handleBackPress() {
if (slidingUpPanelLayout.getPanelHeight() != 0 && playerFragment.onBackPressed()) {
return true; return true;
} }
if (getPanelState() == SlidingUpPanelLayout.PanelState.EXPANDED) {
collapsePanel();
return true;
}
return false;
}
private void animateNavigationBarColor(int color) {
if (navigationBarColorAnimator != null) {
navigationBarColorAnimator.cancel();
}
navigationBarColorAnimator = ValueAnimator.ofArgb(getWindow().getNavigationBarColor(), color)
.setDuration(ViewUtil.RETRO_MUSIC_ANIM_TIME);
navigationBarColorAnimator.setInterpolator(new PathInterpolator(0.4f, 0f, 1f, 1f));
navigationBarColorAnimator.addUpdateListener(animation -> {
int playerFragmentColorDark = ColorUtil.darkenColor((Integer) animation.getAnimatedValue());
//bottomNavigationView.setBackgroundColor(playerFragmentColorDark);
miniPlayerFragment.setColor(playerFragmentColorDark);
AbsSlidingMusicPanelActivity.super.setNavigationbarColor(playerFragmentColorDark);
View view = getWindow().getDecorView().getRootView();
view.setBackgroundColor(playerFragmentColorDark);
if (view.findViewById(R.id.toolbar) != null) {
view.findViewById(R.id.toolbar).setBackgroundColor(playerFragmentColorDark);
}
if (view.findViewById(R.id.app_bar) != null) {
view.findViewById(R.id.app_bar).setBackgroundColor(playerFragmentColorDark);
}
if (view.findViewById(R.id.status_bar) != null) {
view.findViewById(R.id.status_bar)
.setBackgroundColor(ColorUtil.darkenColor(playerFragmentColorDark));
}
});
navigationBarColorAnimator.start();
}
@Override @Override
protected View getSnackBarContainer() { protected View getSnackBarContainer() {
return findViewById(R.id.content_container); return findViewById(R.id.content_container);
} }
public SlidingUpPanelLayout getSlidingUpPanelLayout() {
return slidingUpPanelLayout;
}
public MiniPlayerFragment getMiniPlayerFragment() {
return miniPlayerFragment;
}
public AbsPlayerFragment getPlayerFragment() {
return playerFragment;
}
public SlidingUpPanelLayout.PanelState getPanelState() {
return slidingUpPanelLayout == null ? null : slidingUpPanelLayout.getPanelState();
}
public void collapsePanel() {
slidingUpPanelLayout.setPanelState(SlidingUpPanelLayout.PanelState.COLLAPSED);
}
public void expandPanel() {
slidingUpPanelLayout.setPanelState(SlidingUpPanelLayout.PanelState.EXPANDED);
}
@Override @Override
public void hideCastMiniController() { public void hideCastMiniController() {
super.hideCastMiniController(); super.hideCastMiniController();
@ -436,16 +130,6 @@ public abstract class AbsSlidingMusicPanelActivity extends AbsMusicServiceActivi
MusicPlayerRemote.setZeroVolume(); MusicPlayerRemote.setZeroVolume();
} }
private void setupBottomView() {
bottomNavigationView.setBackgroundColor(ThemeStore.primaryColor(this));
bottomNavigationView.setSelectedItemId(PreferenceUtil.getInstance(this).getLastPage());
int iconColor = ATHUtil.resolveColor(this, R.attr.iconColor);
int accentColor = ThemeStore.accentColor(this);
NavigationViewUtil.setItemIconColors(bottomNavigationView, ColorUtil.withAlpha(iconColor, 0.5f), accentColor);
NavigationViewUtil.setItemTextColors(bottomNavigationView, ColorUtil.withAlpha(iconColor, 0.5f), accentColor);
bottomNavigationView.setLabelVisibilityMode(PreferenceUtil.getInstance(this).getTabTitleMode());
}
@Override @Override
public void onPlayingMetaChanged() { public void onPlayingMetaChanged() {
super.onPlayingMetaChanged(); super.onPlayingMetaChanged();
@ -457,17 +141,12 @@ public abstract class AbsSlidingMusicPanelActivity extends AbsMusicServiceActivi
CastHelper.startCasting(castSession, MusicPlayerRemote.getCurrentSong()); CastHelper.startCasting(castSession, MusicPlayerRemote.getCurrentSong());
} }
public void setBottomBarVisibility(int gone) { public void toggleBottomNavigationView(boolean toggle) {
if (bottomNavigationView != null) { bottomNavigationView.setVisibility(toggle ? View.GONE : View.VISIBLE);
//TransitionManager.beginDelayedTransition(bottomNavigationView);
bottomNavigationView.setVisibility(gone);
hideBottomBar(false);
}
} }
public BottomNavigationView getBottomNavigationView() { public BottomNavigationView getBottomNavigationView() {
return bottomNavigationView; return bottomNavigationView;
} }
} }

View file

@ -5,12 +5,12 @@ import android.graphics.drawable.Drawable;
import android.os.Build; import android.os.Build;
import android.os.Bundle; import android.os.Bundle;
import android.os.Handler; import android.os.Handler;
import androidx.annotation.ColorInt;
import androidx.core.content.ContextCompat;
import android.view.KeyEvent; import android.view.KeyEvent;
import android.view.View; import android.view.View;
import android.view.WindowManager; import android.view.WindowManager;
import androidx.annotation.ColorInt;
import androidx.core.content.ContextCompat;
import code.name.monkey.appthemehelper.ATH; import code.name.monkey.appthemehelper.ATH;
import code.name.monkey.appthemehelper.ATHActivity; import code.name.monkey.appthemehelper.ATHActivity;
import code.name.monkey.appthemehelper.ThemeStore; import code.name.monkey.appthemehelper.ThemeStore;
@ -29,7 +29,7 @@ public abstract class AbsThemeActivity extends ATHActivity implements Runnable {
@Override @Override
protected void onCreate(Bundle savedInstanceState) { protected void onCreate(Bundle savedInstanceState) {
setTheme(PreferenceUtil.getInstance(this).getGeneralTheme()); setTheme(PreferenceUtil.getInstance().getGeneralTheme());
hideStatusBar(); hideStatusBar();
super.onCreate(savedInstanceState); super.onCreate(savedInstanceState);
MaterialDialogsUtil.updateMaterialDialogsThemeSingleton(this); MaterialDialogsUtil.updateMaterialDialogsThemeSingleton(this);
@ -41,7 +41,7 @@ public abstract class AbsThemeActivity extends ATHActivity implements Runnable {
} }
private void toggleScreenOn() { private void toggleScreenOn() {
if (PreferenceUtil.getInstance(this).isScreenOnEnabled()) { if (PreferenceUtil.getInstance().isScreenOnEnabled()) {
getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON); getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
} else { } else {
getWindow().clearFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON); getWindow().clearFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
@ -61,7 +61,7 @@ public abstract class AbsThemeActivity extends ATHActivity implements Runnable {
} }
public void hideStatusBar() { public void hideStatusBar() {
hideStatusBar(PreferenceUtil.getInstance(this).getFullScreenMode()); hideStatusBar(PreferenceUtil.getInstance().getFullScreenMode());
} }
private void hideStatusBar(boolean fullscreen) { private void hideStatusBar(boolean fullscreen) {
@ -73,14 +73,14 @@ public abstract class AbsThemeActivity extends ATHActivity implements Runnable {
private void changeBackgroundShape() { private void changeBackgroundShape() {
Drawable background = PreferenceUtil.getInstance(this).isRoundCorners() ? Drawable background = PreferenceUtil.getInstance().isRoundCorners() ?
ContextCompat.getDrawable(this, R.drawable.round_window) ContextCompat.getDrawable(this, R.drawable.round_window)
: ContextCompat.getDrawable(this, R.drawable.square_window); : ContextCompat.getDrawable(this, R.drawable.square_window);
background = TintHelper.createTintedDrawable(background, ThemeStore.primaryColor(this)); background = TintHelper.createTintedDrawable(background, ThemeStore.primaryColor(this));
getWindow().setBackgroundDrawable(background); getWindow().setBackgroundDrawable(background);
} }
protected void setDrawUnderStatusBar(boolean drawUnderStatusbar) { public void setDrawUnderStatusBar() {
if (VersionUtils.hasLollipop()) { if (VersionUtils.hasLollipop()) {
RetroUtil.setAllowDrawUnderStatusBar(getWindow()); RetroUtil.setAllowDrawUnderStatusBar(getWindow());
} else if (VersionUtils.hasKitKat()) { } else if (VersionUtils.hasKitKat()) {
@ -88,6 +88,14 @@ public abstract class AbsThemeActivity extends ATHActivity implements Runnable {
} }
} }
public void setDrawUnderNavigationBar() {
if (VersionUtils.hasLollipop()) {
RetroUtil.setAllowDrawUnderNavigationBar(getWindow());
} else if (VersionUtils.hasKitKat()) {
RetroUtil.setStatusBarTranslucent(getWindow());
}
}
/** /**
* This will set the color of the view with the id "status_bar" on KitKat and Lollipop. On * This will set the color of the view with the id "status_bar" on KitKat and Lollipop. On
* Lollipop if no such view is found it will set the statusbar color using the native method. * Lollipop if no such view is found it will set the statusbar color using the native method.
@ -104,6 +112,9 @@ public abstract class AbsThemeActivity extends ATHActivity implements Runnable {
} else { } else {
statusBar.setBackgroundColor(color); statusBar.setBackgroundColor(color);
} }
} else if (VersionUtils.hasMarshmallow()) {
getWindow().setStatusBarColor(color);
setLightStatusbarAuto(color);
} else if (Build.VERSION.SDK_INT >= 21) { } else if (Build.VERSION.SDK_INT >= 21) {
getWindow().setStatusBarColor(ColorUtil.darkenColor(color)); getWindow().setStatusBarColor(ColorUtil.darkenColor(color));
setLightStatusbarAuto(color); setLightStatusbarAuto(color);
@ -171,7 +182,7 @@ public abstract class AbsThemeActivity extends ATHActivity implements Runnable {
View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION |
View.SYSTEM_UI_FLAG_HIDE_NAVIGATION | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION |
View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY; View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY;
if (PreferenceUtil.getInstance(this).getFullScreenMode()) { if (PreferenceUtil.getInstance().getFullScreenMode()) {
getWindow().getDecorView().setSystemUiVisibility(flags); getWindow().getDecorView().setSystemUiVisibility(flags);
} }
} }

View file

@ -345,6 +345,15 @@ public abstract class AbsTagEditorActivity extends AbsBaseActivity {
} }
} }
@Nullable
protected String getComposer() {
try {
return getAudioFile(songPaths.get(0)).getTagOrCreateAndSetDefault().getFirst(FieldKey.COMPOSER);
} catch (Exception ignored) {
return null;
}
}
@Nullable @Nullable
protected Bitmap getAlbumArt() { protected Bitmap getAlbumArt() {
try { try {

View file

@ -39,6 +39,7 @@ import butterknife.ButterKnife;
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;
import code.name.monkey.appthemehelper.util.TintHelper; import code.name.monkey.appthemehelper.util.TintHelper;
import code.name.monkey.appthemehelper.util.ToolbarContentTintHelper;
import code.name.monkey.retromusic.R; import code.name.monkey.retromusic.R;
import code.name.monkey.retromusic.glide.palette.BitmapPaletteTranscoder; import code.name.monkey.retromusic.glide.palette.BitmapPaletteTranscoder;
import code.name.monkey.retromusic.glide.palette.BitmapPaletteWrapper; import code.name.monkey.retromusic.glide.palette.BitmapPaletteWrapper;
@ -50,6 +51,7 @@ import code.name.monkey.retromusic.util.ImageUtil;
import code.name.monkey.retromusic.util.LastFMUtil; import code.name.monkey.retromusic.util.LastFMUtil;
import code.name.monkey.retromusic.util.RetroColorUtil; import code.name.monkey.retromusic.util.RetroColorUtil;
import io.reactivex.android.schedulers.AndroidSchedulers; import io.reactivex.android.schedulers.AndroidSchedulers;
import io.reactivex.disposables.CompositeDisposable;
import io.reactivex.schedulers.Schedulers; import io.reactivex.schedulers.Schedulers;
@ -92,11 +94,12 @@ public class AlbumTagEditorActivity extends AbsTagEditorActivity implements Text
private Bitmap albumArtBitmap; private Bitmap albumArtBitmap;
private boolean deleteAlbumArt; private boolean deleteAlbumArt;
private LastFMRestClient lastFMRestClient; private LastFMRestClient lastFMRestClient;
private CompositeDisposable disposable = new CompositeDisposable();
private void setupToolbar() { private void setupToolbar() {
title.setTextColor(ThemeStore.textColorPrimary(this)); title.setTextColor(Color.WHITE);
// toolbar.setBackgroundColor(ThemeStore.primaryColor(this));
toolbar.setNavigationOnClickListener(v -> onBackPressed()); toolbar.setNavigationOnClickListener(v -> onBackPressed());
ToolbarContentTintHelper.setToolbarContentColorBasedOnToolbarColor(this, toolbar, Color.TRANSPARENT);
setTitle(null); setTitle(null);
setSupportActionBar(toolbar); setSupportActionBar(toolbar);
TintHelper.setTintAuto(content, ThemeStore.primaryColor(this), true); TintHelper.setTintAuto(content, ThemeStore.primaryColor(this), true);
@ -104,7 +107,7 @@ public class AlbumTagEditorActivity extends AbsTagEditorActivity implements Text
@Override @Override
protected void onCreate(Bundle savedInstanceState) { protected void onCreate(Bundle savedInstanceState) {
setDrawUnderStatusBar(true); setDrawUnderStatusBar();
super.onCreate(savedInstanceState); super.onCreate(savedInstanceState);
ButterKnife.bind(this); ButterKnife.bind(this);
ButterKnife.apply(textInputLayouts, textColor, ThemeStore.accentColor((this))); ButterKnife.apply(textInputLayouts, textColor, ThemeStore.accentColor((this)));
@ -128,7 +131,6 @@ public class AlbumTagEditorActivity extends AbsTagEditorActivity implements Text
year.addTextChangedListener(this); year.addTextChangedListener(this);
} }
private void fillViewsWithFileTags() { private void fillViewsWithFileTags() {
albumTitle.setText(getAlbumTitle()); albumTitle.setText(getAlbumTitle());
albumArtist.setText(getAlbumArtistName()); albumArtist.setText(getAlbumArtistName());
@ -154,11 +156,17 @@ public class AlbumTagEditorActivity extends AbsTagEditorActivity implements Text
return; return;
} }
lastFMRestClient.getApiService() disposable.add(lastFMRestClient.getApiService()
.getAlbumInfo(albumTitleStr, albumArtistNameStr, null) .getAlbumInfo(albumTitleStr, albumArtistNameStr, null)
.observeOn(AndroidSchedulers.mainThread()) .observeOn(AndroidSchedulers.mainThread())
.subscribeOn(Schedulers.computation()) .subscribeOn(Schedulers.computation())
.subscribe(this::extractDetails); .subscribe(this::extractDetails));
}
@Override
protected void onPause() {
super.onPause();
disposable.clear();
} }
private void extractDetails(@NonNull LastFmAlbum lastFmAlbum) { private void extractDetails(@NonNull LastFmAlbum lastFmAlbum) {

View file

@ -2,14 +2,13 @@ package code.name.monkey.retromusic.ui.activities.tageditor;
import android.net.Uri; import android.net.Uri;
import android.os.Bundle; import android.os.Bundle;
import androidx.annotation.NonNull;
import com.google.android.material.appbar.AppBarLayout;
import androidx.appcompat.widget.Toolbar;
import android.text.Editable; import android.text.Editable;
import android.text.TextWatcher; import android.text.TextWatcher;
import android.widget.EditText; import android.widget.EditText;
import android.widget.TextView; import android.widget.TextView;
import com.google.android.material.appbar.AppBarLayout;
import org.jaudiotagger.tag.FieldKey; import org.jaudiotagger.tag.FieldKey;
import java.util.ArrayList; import java.util.ArrayList;
@ -17,6 +16,8 @@ import java.util.EnumMap;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import androidx.annotation.NonNull;
import androidx.appcompat.widget.Toolbar;
import butterknife.BindView; import butterknife.BindView;
import butterknife.ButterKnife; import butterknife.ButterKnife;
import code.name.monkey.appthemehelper.ThemeStore; import code.name.monkey.appthemehelper.ThemeStore;
@ -60,6 +61,9 @@ public class SongTagEditorActivity extends AbsTagEditorActivity implements TextW
@BindView(R.id.album_artist) @BindView(R.id.album_artist)
EditText albumArtist; EditText albumArtist;
@BindView(R.id.composer)
EditText composer;
private void setupToolbar() { private void setupToolbar() {
appBarLayout.setBackgroundColor(ThemeStore.primaryColor(this)); appBarLayout.setBackgroundColor(ThemeStore.primaryColor(this));
toolbar.setBackgroundColor(ThemeStore.primaryColor(this)); toolbar.setBackgroundColor(ThemeStore.primaryColor(this));
@ -90,7 +94,7 @@ public class SongTagEditorActivity extends AbsTagEditorActivity implements TextW
year.addTextChangedListener(this); year.addTextChangedListener(this);
trackNumber.addTextChangedListener(this); trackNumber.addTextChangedListener(this);
lyrics.addTextChangedListener(this); lyrics.addTextChangedListener(this);
composer.addTextChangedListener(this);
} }
private void fillViewsWithFileTags() { private void fillViewsWithFileTags() {
@ -102,6 +106,7 @@ public class SongTagEditorActivity extends AbsTagEditorActivity implements TextW
year.setText(getSongYear()); year.setText(getSongYear());
trackNumber.setText(getTrackNumber()); trackNumber.setText(getTrackNumber());
lyrics.setText(getLyrics()); lyrics.setText(getLyrics());
composer.setText(getComposer());
} }
@Override @Override
@ -135,6 +140,7 @@ public class SongTagEditorActivity extends AbsTagEditorActivity implements TextW
fieldKeyValueMap.put(FieldKey.TRACK, trackNumber.getText().toString()); fieldKeyValueMap.put(FieldKey.TRACK, trackNumber.getText().toString());
fieldKeyValueMap.put(FieldKey.LYRICS, lyrics.getText().toString()); fieldKeyValueMap.put(FieldKey.LYRICS, lyrics.getText().toString());
fieldKeyValueMap.put(FieldKey.ALBUM_ARTIST, albumArtist.getText().toString()); fieldKeyValueMap.put(FieldKey.ALBUM_ARTIST, albumArtist.getText().toString());
fieldKeyValueMap.put(FieldKey.COMPOSER, composer.getText().toString());
writeValuesToFiles(fieldKeyValueMap, null); writeValuesToFiles(fieldKeyValueMap, null);
} }

View file

@ -1,9 +1,6 @@
package code.name.monkey.retromusic.ui.adapter; package code.name.monkey.retromusic.ui.adapter;
import android.app.Activity; import android.app.Activity;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.recyclerview.widget.RecyclerView;
import android.view.LayoutInflater; import android.view.LayoutInflater;
import android.view.View; import android.view.View;
import android.view.ViewGroup; import android.view.ViewGroup;
@ -14,10 +11,14 @@ import com.bumptech.glide.Glide;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.recyclerview.widget.RecyclerView;
import butterknife.BindViews; import butterknife.BindViews;
import butterknife.ButterKnife; import butterknife.ButterKnife;
import code.name.monkey.retromusic.R; import code.name.monkey.retromusic.R;
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.model.Song; import code.name.monkey.retromusic.model.Song;
import code.name.monkey.retromusic.ui.adapter.CollageSongAdapter.CollageSongViewHolder; import code.name.monkey.retromusic.ui.adapter.CollageSongAdapter.CollageSongViewHolder;
import code.name.monkey.retromusic.ui.adapter.base.MediaEntryViewHolder; import code.name.monkey.retromusic.ui.adapter.base.MediaEntryViewHolder;
@ -37,10 +38,7 @@ public class CollageSongAdapter extends RecyclerView.Adapter<CollageSongViewHold
@Override @Override
public void onBindViewHolder(@NonNull CollageSongViewHolder holder, int position) { public void onBindViewHolder(@NonNull CollageSongViewHolder holder, int position) {
holder.bindSongs(); holder.bindSongs();
if (dataSet.size() > 9) { if (dataSet.size() > 9) {
for (int i = 0; i < dataSet.subList(0, 9).size(); i++) { for (int i = 0; i < dataSet.subList(0, 9).size(); i++) {
if (holder.imageViews != null) { if (holder.imageViews != null) {
@ -83,7 +81,7 @@ public class CollageSongAdapter extends RecyclerView.Adapter<CollageSongViewHold
final int startPosition = i; final int startPosition = i;
ImageView imageView = imageViews.get(i); ImageView imageView = imageViews.get(i);
imageView.setOnClickListener(view -> { imageView.setOnClickListener(view -> {
MusicPlayerRemote.playNext(dataSet.get(startPosition));
}); });
} }
} }

View file

@ -1,9 +1,6 @@
package code.name.monkey.retromusic.ui.adapter; package code.name.monkey.retromusic.ui.adapter;
import android.app.Activity; import android.app.Activity;
import android.graphics.PorterDuff;
import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView;
import android.view.LayoutInflater; import android.view.LayoutInflater;
import android.view.View; import android.view.View;
import android.view.ViewGroup; import android.view.ViewGroup;
@ -11,7 +8,8 @@ import android.view.ViewGroup;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Locale; import java.util.Locale;
import code.name.monkey.appthemehelper.util.ATHUtil; import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView;
import code.name.monkey.retromusic.R; import code.name.monkey.retromusic.R;
import code.name.monkey.retromusic.model.Genre; import code.name.monkey.retromusic.model.Genre;
import code.name.monkey.retromusic.ui.adapter.base.MediaEntryViewHolder; import code.name.monkey.retromusic.ui.adapter.base.MediaEntryViewHolder;
@ -36,13 +34,14 @@ public class GenreAdapter extends RecyclerView.Adapter<GenreAdapter.ViewHolder>
return mGenres; return mGenres;
} }
@NonNull
@Override @Override
public GenreAdapter.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { public GenreAdapter.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
return new ViewHolder(LayoutInflater.from(mActivity).inflate(mItemLayoutRes, parent, false)); return new ViewHolder(LayoutInflater.from(mActivity).inflate(mItemLayoutRes, parent, false));
} }
@Override @Override
public void onBindViewHolder(GenreAdapter.ViewHolder holder, int position) { public void onBindViewHolder(@NonNull GenreAdapter.ViewHolder holder, int position) {
Genre genre = mGenres.get(position); Genre genre = mGenres.get(position);
if (holder.title != null) { if (holder.title != null) {
holder.title.setText(genre.name); holder.title.setText(genre.name);
@ -52,11 +51,9 @@ public class GenreAdapter extends RecyclerView.Adapter<GenreAdapter.ViewHolder>
mActivity.getString(R.string.songs) : mActivity.getString(R.string.songs) :
mActivity.getString(R.string.song))); mActivity.getString(R.string.song)));
} }
if (holder.image != null) {
holder.image.setImageResource(R.drawable.ic_recent_actors_white_24dp); if (holder.separator != null) {
} holder.separator.setVisibility(View.VISIBLE);
if (holder.shortSeparator != null) {
holder.shortSeparator.setVisibility(View.VISIBLE);
} }
} }
@ -76,11 +73,8 @@ public class GenreAdapter extends RecyclerView.Adapter<GenreAdapter.ViewHolder>
if (menu != null) { if (menu != null) {
menu.setVisibility(View.GONE); menu.setVisibility(View.GONE);
} }
if (image != null) { assert imageContainer != null;
int iconPadding = mActivity.getResources().getDimensionPixelSize(R.dimen.list_item_image_icon_padding); imageContainer.setVisibility(View.GONE);
image.setPadding(iconPadding, iconPadding, iconPadding, iconPadding);
image.setColorFilter(ATHUtil.resolveColor(mActivity, R.attr.iconColor), PorterDuff.Mode.SRC_IN);
}
} }
@Override @Override

View file

@ -205,7 +205,7 @@ public class AlbumAdapter extends AbsMultiSelectAdapter<AlbumAdapter.ViewHolder,
@Override @Override
public String getSectionName(int position) { public String getSectionName(int position) {
@Nullable String sectionName = null; @Nullable String sectionName = null;
switch (PreferenceUtil.getInstance(activity).getAlbumSortOrder()) { switch (PreferenceUtil.getInstance().getAlbumSortOrder()) {
case SortOrder.AlbumSortOrder.ALBUM_A_Z: case SortOrder.AlbumSortOrder.ALBUM_A_Z:
case SortOrder.AlbumSortOrder.ALBUM_Z_A: case SortOrder.AlbumSortOrder.ALBUM_Z_A:
sectionName = dataSet.get(position).getTitle(); sectionName = dataSet.get(position).getTitle();
@ -235,8 +235,8 @@ public class AlbumAdapter extends AbsMultiSelectAdapter<AlbumAdapter.ViewHolder,
if (isInQuickSelectMode()) { if (isInQuickSelectMode()) {
toggleChecked(getAdapterPosition()); toggleChecked(getAdapterPosition());
} else { } else {
Pair[] albumPairs = new Pair[]{
Pair.create(image, activity.getResources().getString(R.string.transition_album_art))}; Pair[] albumPairs = new Pair[]{Pair.create(image, activity.getResources().getString(R.string.transition_album_art))};
NavigationUtil.goToAlbum(activity, dataSet.get(getAdapterPosition()).getId(), albumPairs); NavigationUtil.goToAlbum(activity, dataSet.get(getAdapterPosition()).getId(), albumPairs);
} }
} }

View file

@ -116,7 +116,7 @@ public class AlbumCoverPagerAdapter extends CustomFragmentStatePagerAdapter {
private int getLayout() { private int getLayout() {
int layout; int layout;
switch (PreferenceUtil.getInstance(getContext()).getAlbumCoverStyle()) { switch (PreferenceUtil.getInstance().getAlbumCoverStyle()) {
default: default:
case NORMAL: case NORMAL:
layout = R.layout.fragment_album_cover; layout = R.layout.fragment_album_cover;

View file

@ -2,23 +2,20 @@ package code.name.monkey.retromusic.ui.adapter.playlist;
import android.app.Activity; import android.app.Activity;
import android.app.Dialog; import android.app.Dialog;
import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView;
import android.view.LayoutInflater; import android.view.LayoutInflater;
import android.view.View; import android.view.View;
import android.view.ViewGroup; import android.view.ViewGroup;
import java.util.ArrayList; import java.util.ArrayList;
import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView;
import code.name.monkey.retromusic.model.Playlist; import code.name.monkey.retromusic.model.Playlist;
import code.name.monkey.retromusic.model.Song; import code.name.monkey.retromusic.model.Song;
import code.name.monkey.retromusic.ui.adapter.base.MediaEntryViewHolder; import code.name.monkey.retromusic.ui.adapter.base.MediaEntryViewHolder;
import code.name.monkey.retromusic.ui.adapter.playlist.AddToPlaylist.ViewHolder; import code.name.monkey.retromusic.ui.adapter.playlist.AddToPlaylist.ViewHolder;
import code.name.monkey.retromusic.util.PlaylistsUtil; import code.name.monkey.retromusic.util.PlaylistsUtil;
/**
* @author Hemanth S (h4h13).
*/
public class AddToPlaylist extends RecyclerView.Adapter<ViewHolder> { public class AddToPlaylist extends RecyclerView.Adapter<ViewHolder> {
private Activity activity; private Activity activity;

View file

@ -2,11 +2,6 @@ package code.name.monkey.retromusic.ui.adapter.playlist;
import android.graphics.Bitmap; import android.graphics.Bitmap;
import android.graphics.PorterDuff; import android.graphics.PorterDuff;
import androidx.annotation.LayoutRes;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.appcompat.app.AppCompatActivity;
import androidx.appcompat.widget.PopupMenu;
import android.util.Log; import android.util.Log;
import android.view.LayoutInflater; import android.view.LayoutInflater;
import android.view.MenuItem; import android.view.MenuItem;
@ -20,6 +15,11 @@ import java.util.List;
import java.util.Locale; import java.util.Locale;
import java.util.concurrent.ExecutionException; import java.util.concurrent.ExecutionException;
import androidx.annotation.LayoutRes;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.appcompat.app.AppCompatActivity;
import androidx.appcompat.widget.PopupMenu;
import butterknife.ButterKnife; import butterknife.ButterKnife;
import code.name.monkey.appthemehelper.util.ATHUtil; import code.name.monkey.appthemehelper.util.ATHUtil;
import code.name.monkey.retromusic.R; import code.name.monkey.retromusic.R;
@ -41,9 +41,6 @@ import code.name.monkey.retromusic.util.NavigationUtil;
import code.name.monkey.retromusic.util.RetroUtil; import code.name.monkey.retromusic.util.RetroUtil;
import io.reactivex.Observable; import io.reactivex.Observable;
/**
* Created by BlackFootSanji on 9/19/2016.
*/
public class PlaylistAdapter extends AbsMultiSelectAdapter<PlaylistAdapter.ViewHolder, Playlist> { public class PlaylistAdapter extends AbsMultiSelectAdapter<PlaylistAdapter.ViewHolder, Playlist> {
public static final String TAG = PlaylistAdapter.class.getSimpleName(); public static final String TAG = PlaylistAdapter.class.getSimpleName();

View file

@ -15,11 +15,9 @@ import java.util.ArrayList;
import androidx.annotation.LayoutRes; import androidx.annotation.LayoutRes;
import androidx.annotation.NonNull; import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.appcompat.app.AppCompatActivity; import androidx.appcompat.app.AppCompatActivity;
import code.name.monkey.retromusic.R; import code.name.monkey.retromusic.R;
import code.name.monkey.retromusic.helper.MusicPlayerRemote; import code.name.monkey.retromusic.helper.MusicPlayerRemote;
import code.name.monkey.retromusic.interfaces.CabHolder;
import code.name.monkey.retromusic.model.Song; 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.ViewUtil; import code.name.monkey.retromusic.util.ViewUtil;
@ -34,8 +32,8 @@ public class PlayingQueueAdapter extends SongAdapter implements DraggableItemAda
private int current; private int current;
public PlayingQueueAdapter(AppCompatActivity activity, ArrayList<Song> dataSet, int current, public PlayingQueueAdapter(AppCompatActivity activity, ArrayList<Song> dataSet, int current,
@LayoutRes int itemLayoutRes, boolean usePalette, @Nullable CabHolder cabHolder) { @LayoutRes int itemLayoutRes) {
super(activity, dataSet, itemLayoutRes, usePalette, cabHolder); super(activity, dataSet, itemLayoutRes, false, null);
this.current = current; this.current = current;
} }

View file

@ -198,7 +198,7 @@ public class SongAdapter extends AbsMultiSelectAdapter<SongAdapter.ViewHolder, S
return ""; return "";
} }
@Nullable String sectionName = null; @Nullable String sectionName = null;
switch (PreferenceUtil.getInstance(activity).getSongSortOrder()) { switch (PreferenceUtil.getInstance().getSongSortOrder()) {
case SortOrder.SongSortOrder.SONG_A_Z: case SortOrder.SongSortOrder.SONG_A_Z:
case SortOrder.SongSortOrder.SONG_Z_A: case SortOrder.SongSortOrder.SONG_Z_A:
sectionName = dataSet.get(position).title; sectionName = dataSet.get(position).title;
@ -211,6 +211,9 @@ public class SongAdapter extends AbsMultiSelectAdapter<SongAdapter.ViewHolder, S
break; break;
case SortOrder.SongSortOrder.SONG_YEAR: case SortOrder.SongSortOrder.SONG_YEAR:
return MusicUtil.getYearString(dataSet.get(position).year); return MusicUtil.getYearString(dataSet.get(position).year);
case SortOrder.SongSortOrder.COMPOSER:
sectionName = dataSet.get(position).composer;
break;
} }
return MusicUtil.getSectionName(sectionName); return MusicUtil.getSectionName(sectionName);

View file

@ -19,12 +19,12 @@ import android.widget.TextView;
import androidx.annotation.NonNull; import androidx.annotation.NonNull;
import androidx.annotation.Nullable; import androidx.annotation.Nullable;
import androidx.core.util.Pair;
import butterknife.BindView; import butterknife.BindView;
import butterknife.ButterKnife; import butterknife.ButterKnife;
import butterknife.OnClick; import butterknife.OnClick;
import butterknife.Unbinder; import butterknife.Unbinder;
import code.name.monkey.appthemehelper.ThemeStore; import code.name.monkey.appthemehelper.ThemeStore;
import code.name.monkey.appthemehelper.util.ColorUtil;
import code.name.monkey.retromusic.R; import code.name.monkey.retromusic.R;
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;
@ -78,8 +78,9 @@ public class MiniPlayerFragment extends AbsMusicServiceFragment implements Music
public void onViewCreated(@NonNull View view, Bundle savedInstanceState) { public void onViewCreated(@NonNull View view, Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState); super.onViewCreated(view, savedInstanceState);
//noinspection ConstantConditions //noinspection ConstantConditions
view.setBackgroundColor(ColorUtil.darkenColor(ThemeStore.primaryColor(getContext()))); view.setBackgroundColor(ThemeStore.primaryColor(getContext()));
view.setOnTouchListener(new FlingPlayBackController(getActivity())); view.setOnTouchListener(new FlingPlayBackController(getActivity()));
view.setOnClickListener(v -> NavigationUtil.gotoNowPlayingActivity(getContext(), Pair.create(v, getString(R.string.transition_mini_player))));
setUpMiniPlayer(); setUpMiniPlayer();
if (RetroUtil.isTablet(getResources())) { if (RetroUtil.isTablet(getResources())) {
@ -87,9 +88,9 @@ public class MiniPlayerFragment extends AbsMusicServiceFragment implements Music
previous.setVisibility(View.VISIBLE); previous.setVisibility(View.VISIBLE);
playingQueue.setVisibility(View.VISIBLE); playingQueue.setVisibility(View.VISIBLE);
} else { } else {
next.setVisibility(PreferenceUtil.getInstance(getContext()).isExtraMiniExtraControls() ? View.VISIBLE : View.GONE); next.setVisibility(PreferenceUtil.getInstance().isExtraMiniExtraControls() ? View.VISIBLE : View.GONE);
playingQueue.setVisibility(PreferenceUtil.getInstance(getContext()).isExtraMiniExtraControls() ? View.GONE : View.VISIBLE); playingQueue.setVisibility(PreferenceUtil.getInstance().isExtraMiniExtraControls() ? View.GONE : View.VISIBLE);
previous.setVisibility(PreferenceUtil.getInstance(getContext()).isExtraMiniExtraControls() ? View.VISIBLE : View.GONE); previous.setVisibility(PreferenceUtil.getInstance().isExtraMiniExtraControls() ? View.VISIBLE : View.GONE);
} }
} }

View file

@ -18,7 +18,8 @@ public enum NowPlayingScreen {
SIMPLE(R.string.simple, R.drawable.np_simple, 8), SIMPLE(R.string.simple, R.drawable.np_simple, 8),
BLUR_CARD(R.string.blur_card, R.drawable.np_blur_card, 9), BLUR_CARD(R.string.blur_card, R.drawable.np_blur_card, 9),
ADAPTIVE(R.string.adaptive, R.drawable.np_adaptive, 10), ADAPTIVE(R.string.adaptive, R.drawable.np_adaptive, 10),
MATERIAL(R.string.material, R.drawable.np_material, 11); MATERIAL(R.string.material, R.drawable.np_material, 11),
FIT(R.string.fit, R.drawable.np_adaptive, 12);
@StringRes @StringRes
public final int titleRes; public final int titleRes;

View file

@ -56,9 +56,7 @@ public class PlayingQueueFragment extends AbsMusicServiceFragment {
(AppCompatActivity) getActivity(), (AppCompatActivity) getActivity(),
MusicPlayerRemote.getPlayingQueue(), MusicPlayerRemote.getPlayingQueue(),
MusicPlayerRemote.getPosition(), MusicPlayerRemote.getPosition(),
R.layout.item_queue, R.layout.item_queue);
false,
null);
mWrappedAdapter = mRecyclerViewDragDropManager.createWrappedAdapter(mPlayingQueueAdapter); mWrappedAdapter = mRecyclerViewDragDropManager.createWrappedAdapter(mPlayingQueueAdapter);
mLayoutManager = new LinearLayoutManager(getContext()); mLayoutManager = new LinearLayoutManager(getContext());

View file

@ -1,10 +1,8 @@
package code.name.monkey.retromusic.ui.fragments; package code.name.monkey.retromusic.ui.fragments;
import android.content.Context; import android.content.Context;
import android.content.res.ColorStateList;
import android.graphics.Color; import android.graphics.Color;
import android.graphics.PorterDuff; import android.graphics.PorterDuff;
import android.graphics.drawable.ColorDrawable;
import android.media.AudioManager; import android.media.AudioManager;
import android.os.Bundle; import android.os.Bundle;
import android.view.LayoutInflater; import android.view.LayoutInflater;
@ -20,9 +18,11 @@ import butterknife.BindView;
import butterknife.ButterKnife; import butterknife.ButterKnife;
import butterknife.OnClick; import butterknife.OnClick;
import butterknife.Unbinder; import butterknife.Unbinder;
import code.name.monkey.appthemehelper.ThemeStore; import code.name.monkey.appthemehelper.util.ATHUtil;
import code.name.monkey.appthemehelper.util.TintHelper; import code.name.monkey.appthemehelper.util.TintHelper;
import code.name.monkey.retromusic.R; import code.name.monkey.retromusic.R;
import code.name.monkey.retromusic.helper.MusicPlayerRemote;
import code.name.monkey.retromusic.util.PreferenceUtil;
import code.name.monkey.retromusic.volume.AudioVolumeObserver; import code.name.monkey.retromusic.volume.AudioVolumeObserver;
import code.name.monkey.retromusic.volume.OnAudioVolumeChangedListener; import code.name.monkey.retromusic.volume.OnAudioVolumeChangedListener;
@ -31,10 +31,13 @@ public class VolumeFragment extends Fragment implements SeekBar.OnSeekBarChangeL
@BindView(R.id.volume_seekbar) @BindView(R.id.volume_seekbar)
SeekBar volumeSeekbar; SeekBar volumeSeekbar;
@BindView(R.id.volume_down) @BindView(R.id.volume_down)
ImageView volumeDown; ImageView volumeDown;
@BindView(R.id.container) @BindView(R.id.container)
ViewGroup viewGroup; ViewGroup viewGroup;
@BindView(R.id.volume_up) @BindView(R.id.volume_up)
ImageView volumeUp; ImageView volumeUp;
@ -58,7 +61,7 @@ public class VolumeFragment extends Fragment implements SeekBar.OnSeekBarChangeL
public void onViewCreated(@NonNull View view, Bundle savedInstanceState) { public void onViewCreated(@NonNull View view, Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState); super.onViewCreated(view, savedInstanceState);
//noinspection ConstantConditions //noinspection ConstantConditions
setTintable(ThemeStore.textColorSecondary(getContext())); setTintable(ATHUtil.resolveColor(getContext(), R.attr.iconColor));
} }
@Override @Override
@ -108,8 +111,9 @@ public class VolumeFragment extends Fragment implements SeekBar.OnSeekBarChangeL
if (audioManager != null) { if (audioManager != null) {
audioManager.setStreamVolume(AudioManager.STREAM_MUSIC, i, 0); audioManager.setStreamVolume(AudioManager.STREAM_MUSIC, i, 0);
} }
volumeDown.setImageResource( setPauseWhenZeroVolume(i < 1);
i == 0 ? R.drawable.ic_volume_off_white_24dp : R.drawable.ic_volume_down_white_24dp); volumeDown.setImageResource(i == 0 ? R.drawable.ic_volume_off_white_24dp : R.drawable.ic_volume_down_white_24dp);
} }
@Override @Override
@ -139,10 +143,6 @@ public class VolumeFragment extends Fragment implements SeekBar.OnSeekBarChangeL
} }
} }
public void setColor(int color) {
volumeSeekbar.setProgressTintList(ColorStateList.valueOf(color));
}
public void tintWhiteColor() { public void tintWhiteColor() {
setProgressBarColor(Color.WHITE); setProgressBarColor(Color.WHITE);
} }
@ -160,4 +160,13 @@ public class VolumeFragment extends Fragment implements SeekBar.OnSeekBarChangeL
public void removeThumb() { public void removeThumb() {
volumeSeekbar.setThumb(null); volumeSeekbar.setThumb(null);
} }
private void setPauseWhenZeroVolume(boolean pauseWhenZeroVolume) {
if (PreferenceUtil.getInstance().pauseOnZeroVolume() && pauseWhenZeroVolume)
if (MusicPlayerRemote.isPlaying()) {
MusicPlayerRemote.pauseSong();
} else {
MusicPlayerRemote.resumePlaying();
}
}
} }

View file

@ -1,20 +1,20 @@
package code.name.monkey.retromusic.ui.fragments.base; package code.name.monkey.retromusic.ui.fragments.base;
import android.os.Bundle; import android.os.Bundle;
import androidx.annotation.LayoutRes;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.annotation.StringRes;
import com.google.android.material.appbar.AppBarLayout;
import com.google.android.material.appbar.AppBarLayout.OnOffsetChangedListener;
import androidx.recyclerview.widget.RecyclerView;
import android.view.LayoutInflater; import android.view.LayoutInflater;
import android.view.View; import android.view.View;
import android.view.ViewGroup; import android.view.ViewGroup;
import android.widget.TextView; import android.widget.TextView;
import com.google.android.material.appbar.AppBarLayout;
import com.google.android.material.appbar.AppBarLayout.OnOffsetChangedListener;
import com.simplecityapps.recyclerview_fastscroll.views.FastScrollRecyclerView; import com.simplecityapps.recyclerview_fastscroll.views.FastScrollRecyclerView;
import androidx.annotation.LayoutRes;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.annotation.StringRes;
import androidx.recyclerview.widget.RecyclerView;
import butterknife.BindView; import butterknife.BindView;
import butterknife.ButterKnife; import butterknife.ButterKnife;
import butterknife.Unbinder; import butterknife.Unbinder;

View file

@ -6,6 +6,7 @@ import android.view.View;
import code.name.monkey.appthemehelper.ThemeStore; import code.name.monkey.appthemehelper.ThemeStore;
import code.name.monkey.appthemehelper.util.ColorUtil; import code.name.monkey.appthemehelper.util.ColorUtil;
import code.name.monkey.appthemehelper.util.VersionUtils;
import code.name.monkey.retromusic.R; import code.name.monkey.retromusic.R;
import code.name.monkey.retromusic.dialogs.MainOptionsBottomSheetDialogFragment; import code.name.monkey.retromusic.dialogs.MainOptionsBottomSheetDialogFragment;
import code.name.monkey.retromusic.ui.activities.MainActivity; import code.name.monkey.retromusic.ui.activities.MainActivity;
@ -46,8 +47,12 @@ public abstract class AbsMainActivityFragment extends AbsMusicServiceFragment {
public void setStatusbarColorAuto(View view) { public void setStatusbarColorAuto(View view) {
// we don't want to use statusbar color because we are doing the color darkening on our own to support KitKat // we don't want to use statusbar color because we are doing the color darkening on our own to support KitKat
//noinspection ConstantConditions //noinspection ConstantConditions
if (VersionUtils.hasMarshmallow()) {
setStatusbarColor(view, ThemeStore.primaryColor(getContext()));
} else {
setStatusbarColor(view, ColorUtil.darkenColor(ThemeStore.primaryColor(getContext()))); setStatusbarColor(view, ColorUtil.darkenColor(ThemeStore.primaryColor(getContext())));
} }
}
protected void showMainMenu() { protected void showMainMenu() {
MainOptionsBottomSheetDialogFragment.newInstance().show(getChildFragmentManager(), "Main Menu"); MainOptionsBottomSheetDialogFragment.newInstance().show(getChildFragmentManager(), "Main Menu");

View file

@ -2,10 +2,11 @@ package code.name.monkey.retromusic.ui.fragments.base;
import android.content.Context; import android.content.Context;
import android.os.Bundle; import android.os.Bundle;
import androidx.annotation.NonNull;
import androidx.fragment.app.Fragment;
import android.view.View; import android.view.View;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.fragment.app.Fragment;
import code.name.monkey.retromusic.interfaces.MusicServiceEventListener; import code.name.monkey.retromusic.interfaces.MusicServiceEventListener;
import code.name.monkey.retromusic.ui.activities.base.AbsMusicServiceActivity; import code.name.monkey.retromusic.ui.activities.base.AbsMusicServiceActivity;
@ -17,6 +18,10 @@ public class AbsMusicServiceFragment extends Fragment implements MusicServiceEve
private AbsMusicServiceActivity activity; private AbsMusicServiceActivity activity;
@Nullable
public AbsMusicServiceActivity getPlayerActivity() {
return activity;
}
@Override @Override
public void onAttach(Context context) { public void onAttach(Context context) {

View file

@ -1,5 +1,9 @@
package code.name.monkey.retromusic.ui.fragments.base; package code.name.monkey.retromusic.ui.fragments.base;
import android.view.View;
import android.view.animation.AccelerateInterpolator;
import android.view.animation.DecelerateInterpolator;
import code.name.monkey.retromusic.helper.MusicProgressViewUpdateHelper; import code.name.monkey.retromusic.helper.MusicProgressViewUpdateHelper;
/** /**
@ -20,4 +24,29 @@ public abstract class AbsPlayerControlsFragment extends AbsMusicServiceFragment
protected abstract void setUpProgressSlider(); protected abstract void setUpProgressSlider();
public abstract void setDark(int color); public abstract void setDark(int color);
public void showBouceAnimation(View view) {
view.clearAnimation();
view.setScaleX(0.9f);
view.setScaleY(0.9f);
view.setVisibility(View.VISIBLE);
view.setPivotX(view.getWidth() / 2);
view.setPivotY(view.getHeight() / 2);
view.animate()
.setDuration(200)
.setInterpolator(new DecelerateInterpolator())
.scaleX(1.1f)
.scaleY(1.1f)
.withEndAction(() -> view.animate()
.setDuration(200)
.setInterpolator(new AccelerateInterpolator())
.scaleX(1f)
.scaleY(1f)
.alpha(1f)
.start())
.start();
}
} }

View file

@ -34,6 +34,7 @@ import code.name.monkey.retromusic.util.MusicUtil;
import code.name.monkey.retromusic.util.NavigationUtil; import code.name.monkey.retromusic.util.NavigationUtil;
import code.name.monkey.retromusic.util.PreferenceUtil; import code.name.monkey.retromusic.util.PreferenceUtil;
import code.name.monkey.retromusic.util.RetroUtil; import code.name.monkey.retromusic.util.RetroUtil;
import code.name.monkey.retromusic.views.FitSystemWindowsLayout;
public abstract class AbsPlayerFragment extends AbsMusicServiceFragment implements Toolbar.OnMenuItemClickListener, PaletteColorHolder { public abstract class AbsPlayerFragment extends AbsMusicServiceFragment implements Toolbar.OnMenuItemClickListener, PaletteColorHolder {
public static final String TAG = AbsPlayerFragment.class.getSimpleName(); public static final String TAG = AbsPlayerFragment.class.getSimpleName();
@ -51,6 +52,14 @@ public abstract class AbsPlayerFragment extends AbsMusicServiceFragment implemen
} }
} }
protected void addSafeArea(View view) {
FitSystemWindowsLayout safeArea = view.findViewById(R.id.safeArea);
if (safeArea != null) {
if (PreferenceUtil.getInstance().getFullScreenMode()) safeArea.setFit(false);
else safeArea.setFit(true);
}
}
@Override @Override
public void onDetach() { public void onDetach() {
super.onDetach(); super.onDetach();
@ -117,6 +126,9 @@ public abstract class AbsPlayerFragment extends AbsMusicServiceFragment implemen
case R.id.action_set_as_ringtone: case R.id.action_set_as_ringtone:
MusicUtil.setRingtone(getActivity(), song.id); MusicUtil.setRingtone(getActivity(), song.id);
return true; return true;
case R.id.action_settings:
NavigationUtil.goToSettings(getActivity());
return true;
case R.id.action_go_to_genre: case R.id.action_go_to_genre:
MediaMetadataRetriever retriever = new MediaMetadataRetriever(); MediaMetadataRetriever retriever = new MediaMetadataRetriever();
Uri trackUri = ContentUris.withAppendedId(MediaStore.Audio.Media.EXTERNAL_CONTENT_URI, song.id); Uri trackUri = ContentUris.withAppendedId(MediaStore.Audio.Media.EXTERNAL_CONTENT_URI, song.id);
@ -148,23 +160,19 @@ public abstract class AbsPlayerFragment extends AbsMusicServiceFragment implemen
@Override @Override
public void onServiceConnected() { public void onServiceConnected() {
updateIsFavorite(); updateIsFavorite();
//updateLyrics();
} }
@Override @Override
public void onPlayingMetaChanged() { public void onPlayingMetaChanged() {
updateIsFavorite(); updateIsFavorite();
//updateLyrics();
} }
@Override @Override
public void onDestroyView() { public void onDestroyView() {
if (updateIsFavoriteTask != null && !updateIsFavoriteTask.isCancelled()) { if (updateIsFavoriteTask != null && !updateIsFavoriteTask.isCancelled()) {
updateIsFavoriteTask.cancel(true); updateIsFavoriteTask.cancel(true);
} }
super.onDestroyView(); super.onDestroyView();
} }
@SuppressLint("StaticFieldLeak") @SuppressLint("StaticFieldLeak")
@ -209,7 +217,8 @@ public abstract class AbsPlayerFragment extends AbsMusicServiceFragment implemen
public void onViewCreated(@NonNull View view, Bundle savedInstanceState) { public void onViewCreated(@NonNull View view, Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState); super.onViewCreated(view, savedInstanceState);
view.setBackgroundColor(ThemeStore.primaryColor(getActivity())); view.setBackgroundColor(ThemeStore.primaryColor(getActivity()));
if (PreferenceUtil.getInstance(getContext()).getFullScreenMode()) { if (PreferenceUtil.getInstance().getFullScreenMode()) {
if (view.findViewById(R.id.status_bar) != null)
view.findViewById(R.id.status_bar).setVisibility(View.GONE); view.findViewById(R.id.status_bar).setVisibility(View.GONE);
} }
} }

View file

@ -40,7 +40,7 @@ public class AlbumsFragment extends AbsLibraryPagerRecyclerViewCustomGridSizeFra
notifyLayoutResChanged(itemLayoutRes); notifyLayoutResChanged(itemLayoutRes);
if (itemLayoutRes != R.layout.item_list) { if (itemLayoutRes != R.layout.item_list) {
//noinspection ConstantConditions //noinspection ConstantConditions
itemLayoutRes = PreferenceUtil.getInstance(getContext()).getAlbumGridStyle(getContext()); itemLayoutRes = PreferenceUtil.getInstance().getAlbumGridStyle(getContext());
} }
ArrayList<Album> dataSet = getAdapter() == null ? new ArrayList<>() : getAdapter().getDataSet(); ArrayList<Album> dataSet = getAdapter() == null ? new ArrayList<>() : getAdapter().getDataSet();
return new AlbumAdapter(getLibraryFragment().getMainActivity(), dataSet, itemLayoutRes, loadUsePalette(), getLibraryFragment()); return new AlbumAdapter(getLibraryFragment().getMainActivity(), dataSet, itemLayoutRes, loadUsePalette(), getLibraryFragment());
@ -54,7 +54,7 @@ public class AlbumsFragment extends AbsLibraryPagerRecyclerViewCustomGridSizeFra
@Override @Override
public boolean loadUsePalette() { public boolean loadUsePalette() {
//noinspection ConstantConditions //noinspection ConstantConditions
return PreferenceUtil.getInstance(getActivity()).albumColoredFooters(); return PreferenceUtil.getInstance().albumColoredFooters();
} }
@Override @Override
@ -76,43 +76,43 @@ public class AlbumsFragment extends AbsLibraryPagerRecyclerViewCustomGridSizeFra
@Override @Override
protected String loadSortOrder() { protected String loadSortOrder() {
//noinspection ConstantConditions //noinspection ConstantConditions
return PreferenceUtil.getInstance(getActivity()).getAlbumSortOrder(); return PreferenceUtil.getInstance().getAlbumSortOrder();
} }
@Override @Override
protected void saveSortOrder(String sortOrder) { protected void saveSortOrder(String sortOrder) {
//noinspection ConstantConditions //noinspection ConstantConditions
PreferenceUtil.getInstance(getActivity()).setAlbumSortOrder(sortOrder); PreferenceUtil.getInstance().setAlbumSortOrder(sortOrder);
} }
@Override @Override
protected int loadGridSize() { protected int loadGridSize() {
//noinspection ConstantConditions //noinspection ConstantConditions
return PreferenceUtil.getInstance(getActivity()).getAlbumGridSize(getActivity()); return PreferenceUtil.getInstance().getAlbumGridSize(getActivity());
} }
@Override @Override
protected void saveGridSize(int gridSize) { protected void saveGridSize(int gridSize) {
//noinspection ConstantConditions //noinspection ConstantConditions
PreferenceUtil.getInstance(getActivity()).setAlbumGridSize(gridSize); PreferenceUtil.getInstance().setAlbumGridSize(gridSize);
} }
@Override @Override
protected int loadGridSizeLand() { protected int loadGridSizeLand() {
//noinspection ConstantConditions //noinspection ConstantConditions
return PreferenceUtil.getInstance(getActivity()).getAlbumGridSizeLand(getActivity()); return PreferenceUtil.getInstance().getAlbumGridSizeLand(getActivity());
} }
@Override @Override
protected void saveGridSizeLand(int gridSize) { protected void saveGridSizeLand(int gridSize) {
//noinspection ConstantConditions //noinspection ConstantConditions
PreferenceUtil.getInstance(getActivity()).setAlbumGridSizeLand(gridSize); PreferenceUtil.getInstance().setAlbumGridSizeLand(gridSize);
} }
@Override @Override
protected void saveUsePalette(boolean usePalette) { protected void saveUsePalette(boolean usePalette) {
//noinspection ConstantConditions //noinspection ConstantConditions
PreferenceUtil.getInstance(getActivity()).setAlbumColoredFooters(usePalette); PreferenceUtil.getInstance().setAlbumColoredFooters(usePalette);
} }
@Override @Override
@ -132,7 +132,7 @@ public class AlbumsFragment extends AbsLibraryPagerRecyclerViewCustomGridSizeFra
if (menuVisible) { if (menuVisible) {
//noinspection ConstantConditions //noinspection ConstantConditions
getLibraryFragment().setTitle( getLibraryFragment().setTitle(
PreferenceUtil.getInstance(getContext()).tabTitles() ? R.string.library PreferenceUtil.getInstance().tabTitles() ? R.string.library
: R.string.albums); : R.string.albums);
} }
} }
@ -142,7 +142,7 @@ public class AlbumsFragment extends AbsLibraryPagerRecyclerViewCustomGridSizeFra
super.onResume(); super.onResume();
//noinspection ConstantConditions //noinspection ConstantConditions
getLibraryFragment().setTitle( getLibraryFragment().setTitle(
PreferenceUtil.getInstance(getContext()).tabTitles() ? R.string.library : R.string.albums); PreferenceUtil.getInstance().tabTitles() ? R.string.library : R.string.albums);
if (getAdapter().getDataSet().isEmpty()) { if (getAdapter().getDataSet().isEmpty()) {
presenter.subscribe(); presenter.subscribe();
} }

Some files were not shown because too many files have changed in this diff Show more