A third-party modified version of Phonograph

Overview

Phonograph Modified Version

Phonograph 修改版

CI Status Crowdin

Phonograph 第三方修改版

A third-party modified version of Phonograph


This is a fork! -> 原仓库/Original Project Repo



Phonograph Plus is (partially) migrating to 🚀 Jetpack Compose -> see Branch Compose

Phonograph Plus 正在(部分)迁移至 🚀 Jetpack Compose -> 参见 Compose



特性 feature

  • 解锁 Pro | Unlock pro.

  • 自动夜间模式 | Automatic & adaptive dark mode.

  • 更新对话框样式 | Update dialogs style.

  • 允许标签固定并平铺 | Allow tabs fixed.

  • 详情对话框内显示Tag信息 | Show tag information in "Detail" Dialog

  • 歌词对话框内显示歌词时间轴信息, 并可以通过长按进行快速转跳 | Show Time Axis in "Lyrics" Dialog and allow seeking basing lyric's time axis.

  • 适配 Android 11 分区存储 (部分) | Fix Android 11 Scope Storage.(WIP)

  • 适当折叠歌曲弹出菜单 | Optimise song item menu.

  • 改进媒体库交互 | Improve “Library” pages user experience。

  • 增大“最近播放”和“最喜爱的歌曲(实际是“最常播放”的歌曲)”条目数量(100→150) | Increase history played tracks and top played tracks entries capacity (100->150).

  • 新增崩溃报告页面 | Handle app crash.

  • 支持更多排序方式 | Support more sort orders.

  • 在歌曲(或文件)弹出菜单中, 快速添加黑名单 | Add song menu shortcut to add new items to blacklist.

  • 适配" 墨·状态栏歌词 "Xposed模块 | Co-work-with/Support StatusBar Lyric Xposed Module (api)

  • 支持导出内部数据库以供备份 | Export internal databases for the need of backup.

  • // todo

  • 优化界面 | Optimus UI.

  • 以及更多细小特性 | and more small features/fixes.

// todo

Translation

Translate Phonograph Plus into your language -> crowdin

TO-DO list

  • 完成 Readme . md

  • 重构后台音乐服务 (WIP)

  • 将歌曲“详情” 迁移至 Compose WIP (基本信息显示)

  • 重构歌曲封面加载Glide模块

  • 重构文件视图

  • 重构媒体库UI

  • 重构更新对话框

  • 整理设置页

  • 尝试适配 FlyMe / EvolutionX(等一系类原生)状态栏歌词

  • 自建本地媒体数据库(使用 AndroidX Room) , 并解析 Tag 中 ‘;’, '&', '/', '', ',' , 改进搜索

  • 实现更好的播放频率计数, 统计听歌频率

  • 增强“播放列表详情”(信息展示, 支持搜索, 更好的修改本地列表方式 WIP)

  • 部分重构(所谓的)"主题引擎"

  • ...

  • 检查文件

  • 打开 .m3u (使用"播放列表详情")

  • 全屏滚动歌词页面

  • 桌面歌词(?)

  • 修改 SlidingMusicBar

  • 重构音乐标签编辑

  • 完美适配 Android11+ 的文件访问()

  • ???

  • 解析歌词中的 "\n"

  • 重构歌词系统

  • 优化歌曲“详情”

  • 万能歌曲 Adapter





Phonograph

License: GPL v3

A material designed local music player for Android.

Screenshots

Comments
  • [Bug Report] Crash while scrolling albums

    [Bug Report] Crash while scrolling albums

    Describe the bug or unexpected behavior By scrolling my library (Albums, Songs, or Genres tabs), the app crashes.

    Crash log If app crashed, copy the logs if available.

    Crash Report:
    
    Package name:    player.phonograph.plus
    App version:     0.3.2 (310)
    Git Commit Hash: a219a0464086110fe2c8
    Android version: 12 (SDK 31)
    Device brand:    samsung  (by samsung)
    Device model:    SM-G981U (code: x1q)
    Product name:    x1qsqx
    Build version:   SP1A.210812.016.G981USQU3FVH1 
                     (G981USQU3FVH1)
    Hardware:        qcom
    Language:        fa
    
    java.lang.RuntimeException: Canvas: trying to draw too large(127916100bytes) bitmap.
    	at android.graphics.RecordingCanvas.throwIfCannotDraw(RecordingCanvas.java:266)
    	at android.graphics.BaseRecordingCanvas.drawBitmap(BaseRecordingCanvas.java:97)
    	at android.graphics.drawable.BitmapDrawable.draw(BitmapDrawable.java:560)
    	at android.widget.ImageView.onDraw(ImageView.java:1462)
    	at android.view.View.draw(View.java:23898)
    	at android.view.View.updateDisplayListIfDirty(View.java:22767)
    	at android.view.View.draw(View.java:23628)
    	at android.view.ViewGroup.drawChild(ViewGroup.java:5355)
    	at android.view.ViewGroup.dispatchDraw(ViewGroup.java:5112)
    	at android.view.View.updateDisplayListIfDirty(View.java:22753)
    	at android.view.View.draw(View.java:23628)
    	at android.view.ViewGroup.drawChild(ViewGroup.java:5355)
    	at android.view.ViewGroup.dispatchDraw(ViewGroup.java:5112)
    	at android.view.View.updateDisplayListIfDirty(View.java:22753)
    	at android.view.View.draw(View.java:23628)
    	at android.view.ViewGroup.drawChild(ViewGroup.java:5355)
    	at android.view.ViewGroup.dispatchDraw(ViewGroup.java:5112)
    	at android.view.View.draw(View.java:23901)
    	at android.view.View.updateDisplayListIfDirty(View.java:22767)
    	at android.view.View.draw(View.java:23628)
    	at android.view.ViewGroup.drawChild(ViewGroup.java:5355)
    	at androidx.recyclerview.widget.RecyclerView.drawChild(Unknown Source:0)
    	at android.view.ViewGroup.dispatchDraw(ViewGroup.java:5112)
    	at android.view.View.draw(View.java:23901)
    	at androidx.recyclerview.widget.RecyclerView.draw(Unknown Source:0)
    	at com.simplecityapps.recyclerview_fastscroll.views.FastScrollRecyclerView.draw(Unknown Source:0)
    	at android.view.View.updateDisplayListIfDirty(View.java:22767)
    	at android.view.View.draw(View.java:23628)
    	at android.view.ViewGroup.drawChild(ViewGroup.java:5355)
    	at android.view.ViewGroup.dispatchDraw(ViewGroup.java:5112)
    	at android.view.View.updateDisplayListIfDirty(View.java:22753)
    	at android.view.View.draw(View.java:23628)
    	at android.view.ViewGroup.drawChild(ViewGroup.java:5355)
    	at androidx.coordinatorlayout.widget.CoordinatorLayout.drawChild(Unknown Source:13)
    	at android.view.ViewGroup.dispatchDraw(ViewGroup.java:5112)
    	at android.view.View.updateDisplayListIfDirty(View.java:22753)
    	at android.view.View.draw(View.java:23628)
    	at android.view.ViewGroup.drawChild(ViewGroup.java:5355)
    	at android.view.ViewGroup.dispatchDraw(ViewGroup.java:5112)
    	at android.view.View.updateDisplayListIfDirty(View.java:22753)
    	at android.view.View.draw(View.java:23628)
    	at android.view.ViewGroup.drawChild(ViewGroup.java:5355)
    	at androidx.recyclerview.widget.RecyclerView.drawChild(Unknown Source:0)
    	at android.view.ViewGroup.dispatchDraw(ViewGroup.java:5112)
    	at android.view.View.draw(View.java:23901)
    	at androidx.recyclerview.widget.RecyclerView.draw(Unknown Source:0)
    	at android.view.View.updateDisplayListIfDirty(View.java:22767)
    	at android.view.View.draw(View.java:23628)
    	at android.view.ViewGroup.drawChild(ViewGroup.java:5355)
    	at android.view.ViewGroup.dispatchDraw(ViewGroup.java:5112)
    	at android.view.View.updateDisplayListIfDirty(View.java:22753)
    	at android.view.View.draw(View.java:23628)
    	at android.view.ViewGroup.drawChild(ViewGroup.java:5355)
    	at androidx.coordinatorlayout.widget.CoordinatorLayout.drawChild(Unknown Source:13)
    	at android.view.ViewGroup.dispatchDraw(ViewGroup.java:5112)
    	at android.view.View.updateDisplayListIfDirty(View.java:22753)
    	at android.view.View.draw(View.java:23628)
    	at android.view.ViewGroup.drawChild(ViewGroup.java:5355)
    	at android.view.ViewGroup.dispatchDraw(ViewGroup.java:5112)
    	at android.view.View.updateDisplayListIfDirty(View.java:22753)
    	at android.view.View.draw(View.java:23628)
    	at android.view.ViewGroup.drawChild(ViewGroup.java:5355)
    	at android.view.ViewGroup.dispatchDraw(ViewGroup.java:5112)
    	at android.view.View.updateDisplayListIfDirty(View.java:22753)
    	at android.view.View.draw(View.java:23628)
    	at android.view.ViewGroup.drawChild(ViewGroup.java:5355)
    	at android.view.ViewGroup.dispatchDraw(ViewGroup.java:5112)
    	at android.view.View.updateDisplayListIfDirty(View.java:22753)
    	at android.view.View.draw(View.java:23628)
    	at android.view.ViewGroup.drawChild(ViewGroup.java:5355)
    	at com.sothree.slidinguppanel.SlidingUpPanelLayout.drawChild(Unknown Source:65)
    	at android.view.ViewGroup.dispatchDraw(ViewGroup.java:5112)
    	at android.view.View.draw(View.java:23901)
    	at com.sothree.slidinguppanel.SlidingUpPanelLayout.draw(Unknown Source:0)
    	at android.view.View.updateDisplayListIfDirty(View.java:22767)
    	at android.view.View.draw(View.java:23628)
    	at android.view.ViewGroup.drawChild(ViewGroup.java:5355)
    	at android.view.ViewGroup.dispatchDraw(ViewGroup.java:5112)
    	at android.view.View.updateDisplayListIfDirty(View.java:22753)
    	at android.view.View.draw(View.java:23628)
    	at android.view.ViewGroup.drawChild(ViewGroup.java:5355)
    	at androidx.drawerlayout.widget.DrawerLayout.drawChild(SourceFile:2)
    	at android.view.ViewGroup.dispatchDraw(ViewGroup.java:5112)
    	at android.view.View.updateDisplayListIfDirty(View.java:22753)
    	at android.view.View.draw(View.java:23628)
    	at android.view.ViewGroup.drawChild(ViewGroup.java:5355)
    	at android.view.ViewGroup.dispatchDraw(ViewGroup.java:5112)
    	at android.view.View.updateDisplayListIfDirty(View.java:22753)
    	at android.view.View.draw(View.java:23628)
    	at android.view.ViewGroup.drawChild(ViewGroup.java:5355)
    	at android.view.ViewGroup.dispatchDraw(ViewGroup.java:5112)
    	at android.view.View.updateDisplayListIfDirty(View.java:22753)
    	at android.view.View.draw(View.java:23628)
    	at android.view.ViewGroup.drawChild(ViewGroup.java:5355)
    	at android.view.ViewGroup.dispatchDraw(ViewGroup.java:5112)
    	at android.view.View.updateDisplayListIfDirty(View.java:22753)
    	at android.view.View.draw(View.java:23628)
    	at android.view.ViewGroup.drawChild(ViewGroup.java:5355)
    	at android.view.ViewGroup.dispatchDraw(ViewGroup.java:5112)
    	at android.view.View.updateDisplayListIfDirty(View.java:22753)
    	at android.view.View.draw(View.java:23628)
    	at android.view.ViewGroup.drawChild(ViewGroup.java:5355)
    	at android.view.ViewGroup.dispatchDraw(ViewGroup.java:5112)
    	at android.view.View.draw(View.java:23901)
    	at com.android.internal.policy.DecorView.draw(DecorView.java:1378)
    	at android.view.View.updateDisplayListIfDirty(View.java:22767)
    	at android.view.ThreadedRenderer.updateViewTreeDisplayList(ThreadedRenderer.java:602)
    	at android.view.ThreadedRenderer.updateRootDisplayList(ThreadedRenderer.java:608)
    	at android.view.ThreadedRenderer.draw(ThreadedRenderer.java:684)
    	at android.view.ViewRootImpl.draw(ViewRootImpl.java:5440)
    	at android.view.ViewRootImpl.performDraw(ViewRootImpl.java:5148)
    	at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:4212)
    	at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:2919)
    	at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:10491)
    	at android.view.Choreographer$CallbackRecord.run(Choreographer.java:1108)
    	at android.view.Choreographer.doCallbacks(Choreographer.java:866)
    	at android.view.Choreographer.doFrame(Choreographer.java:797)
    	at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:1092)
    	at android.os.Handler.handleCallback(Handler.java:938)
    	at android.os.Handler.dispatchMessage(Handler.java:99)
    	at android.os.Looper.loopOnce(Looper.java:226)
    	at android.os.Looper.loop(Looper.java:313)
    	at android.app.ActivityThread.main(ActivityThread.java:8669)
    	at java.lang.reflect.Method.invoke(Native Method)
    	at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:571)
    	at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1135)
    
    
    

    How to reproduce Steps to reproduce the bugs or unexpected behaviors:

    Scroll through aforementioned tabs

    Screenshots (Optional) (if available)

    Other information …version 1.3.2

    Bug 
    opened by anaskaejdar 17
  • [Bug]: Can not change grid size of lists on large tablet devices

    [Bug]: Can not change grid size of lists on large tablet devices

    Bug Summary

    平板设备上,横屏时歌曲列表的网格尺寸被固定在6,无法修改 选择其它网格尺寸时不会生效,尺寸依然是6 (在手机上横屏时未发现此问题,可以正常修改网格尺寸)

    Version

    0.4.1

    Steps to reproduce the bug

    No response

    Screenshots or Screen recordings

    Screenshot_20221113-091707_Phonograph Plus Screenshot_20221113-091715_Phonograph Plus

    Environment

    Mi Pad 5 (nabu) ArrowOS 13.0 (Android 13)

    Other helpful information

    No response

    Bug 
    opened by Bejukoro 11
  • [Bug Report] Phonograph Plus crashed when resizing in Freeform Mode

    [Bug Report] Phonograph Plus crashed when resizing in Freeform Mode

    Describe the bug or unexpected behavior When open the app with freeform mode and try to resize the app, it will crash

    Crash log

    Crash Report:
    
    Package name:    player.phonograph.plus
    App version:     0.3.3 (311)
    Git Commit Hash: fec22849337fddb81837
    Android version: 11 (SDK 30)
    Device brand:    Android-x86  (by unknown)
    Device model:    Generic Android-x86_64 (code: x86_64)
    Product name:    bliss_x86_64
    Build version:   RSV1.210329.052 
                     (eng.hmtheb.20220924.071710)
    Hardware:        bliss_x86_64
    Language:        vi
    
    java.lang.NullPointerException
     at player.phonograph.ui.fragments.player.card.CardPlayerFragment.access$getViewBinding(Unknown Source:2)
     at player.phonograph.ui.fragments.player.card.CardPlayerFragment$b.c(Unknown Source:7)
     at player.phonograph.ui.fragments.player.card.CardPlayerFragment.onColorChanged(SourceFile:1)
     at player.phonograph.ui.fragments.player.h.invokeSuspend(Unknown Source:13)
     at q3.a.resumeWith(Unknown Source:8)
     at h4.m0.run(Unknown Source:86)
     at android.os.Handler.handleCallback(Handler.java:938)
     at android.os.Handler.dispatchMessage(Handler.java:99)
     at android.os.Looper.loop(Looper.java:223)
     at android.app.ActivityThread.main(ActivityThread.java:7669)
     at java.lang.reflect.Method.invoke(Native Method)
     at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:592)
     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:947)
     Suppressed: h4.k0: [w1{Cancelling}@17e95d9, Dispatchers.Main]
    

    How to reproduce

    • Open recents, press the app logo on and choose Freeform. If there is no freeform, open Developer Settings and turn on Enable Freeform windows
    • Try to resize, it will crash
    Bug Need More Info 
    opened by hmtheboy154 9
  • Crash

    Crash

    Describe the bug or unexpected behavior Crashed when choose a file to play. Then crased every time when it booted. Absolutely, data of the app was cleaned before, or i don't have a chance to choose a file.

    Crash log If app crashed, copy the logs if available. Crash Report:

    Package name: player.phonograph.plus App version: 0.2.0-RC1 (201) Git Commit Hash: 3bc4bda5f0570f111217 Android version: 12 (SDK 31) Device brand: Redmi (by Xiaomi) Device model: M2012K11AC (code: alioth) Product name: alioth Build version: SKQ1.211006.001 test-keys (21.12.27) Hardware: qcom Language: zh

    java.lang.ExceptionInInitializerError at v3.d.(Unknown Source:11) at v3.c.a(Unknown Source:0) at V2.g.a(Unknown Source:222) at V2.b.b(Unknown Source:2) at X2.c.c(Unknown Source:69) at O2.b.a(:4) at T3.c$c.o(Unknown Source:5) at d2.a.e(:2) at q2.I.run(Unknown Source:86) at kotlinx.coroutines.scheduling.a.u(Unknown Source:0) at kotlinx.coroutines.scheduling.a$a.run(:5) Caused by: java.lang.RuntimeException: java.lang.NoSuchMethodException: u3.d.values [] at java.lang.Enum.enumValues(Enum.java:270) at java.lang.Enum.access$000(Enum.java:61) at java.lang.Enum$1.create(Enum.java:277) at java.lang.Enum$1.create(Enum.java:275) at libcore.util.BasicLruCache.get(BasicLruCache.java:63) at java.lang.Enum.getSharedConstants(Enum.java:289) at java.lang.Class.getEnumConstantsShared(Class.java:2459) at java.util.EnumSet.getUniverse(EnumSet.java:407) at java.util.EnumSet.noneOf(EnumSet.java:109) at java.util.EnumSet.of(EnumSet.java:258) at v3.b.(Unknown Source:8) ... 11 more Caused by: java.lang.NoSuchMethodException: u3.d.values [] at java.lang.Class.getMethod(Class.java:2103) at java.lang.Class.getDeclaredMethod(Class.java:2081) at java.lang.Enum.enumValues(Enum.java:267) ... 21 more

    How to reproduce Steps to reproduce the bugs or unexpected boot the app, choose a file to play. behaviors: Crash

    Bug 
    opened by FX9590 8
  • [Bug Report] Lyrics error for opus files although all settings for lyrics are DISABLED

    [Bug Report] Lyrics error for opus files although all settings for lyrics are DISABLED

    Describe the bug or unexpected behavior When I play a song, I get a message: "Failed to read lyrics from song No Reader associated with this extension:opus". I have disabled all settings regarding lyrics. The app should respect those settings and not show an error message.

    Crash log Crash Report:

    Package name: player.phonograph.plus App version: 0.3.3 (311) Git Commit Hash: fec22849337fddb81837 Android version: 12 (SDK 32) Device brand: not important Device model: not important Product name: lineage_ABC Build version: lineage_ABC-userdebug 12 Hardware: qcom Language: it

    Failed to read lyrics from song No Reader associated with this extension:opus

    Bug 
    opened by klawdhfzasjhaa 7
  • App Crash

    App Crash

    Crash Report:

    Package name: player.phonograph.plus App version: 0.1.0 (104) Git Commit Hash: 5f2adcf0a7c0f5156627 Android version: 11 (SDK 30) Device brand: lge (by LGE) Device model: LM-G850 (code: mh2lm) Product name: mh2lm Build version: RKQ1.210420.001 (2202502174aca.OPEN_ESA_DS) Hardware: mh2lm Language: en

    java.lang.RuntimeException: An error occurred while executing doInBackground() at android.os.AsyncTask$4.done(AsyncTask.java:415) at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:383) at java.util.concurrent.FutureTask.setException(FutureTask.java:252) at java.util.concurrent.FutureTask.run(FutureTask.java:271) at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:305) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641) at java.lang.Thread.run(Thread.java:923) Caused by: java.lang.IllegalArgumentException: Invalid column audio_id at android.database.DatabaseUtils.readExceptionFromParcel(DatabaseUtils.java:172) at android.database.DatabaseUtils.readExceptionFromParcel(DatabaseUtils.java:142) at android.content.ContentProviderProxy.query(ContentProviderNative.java:472) at android.content.ContentResolver.query(ContentResolver.java:1191) at android.content.ContentResolver.query(ContentResolver.java:1122) at android.content.ContentResolver.query(ContentResolver.java:1078) at player.phonograph.util.PlaylistsUtil.doesPlaylistContain(Unknown Source:38) at player.phonograph.util.MusicUtil.isFavorite(Unknown Source:11) at player.phonograph.ui.fragments.player.card.CardPlayerFragment$2.a(Unknown Source:17) at player.phonograph.ui.fragments.player.card.CardPlayerFragment$2.doInBackground(Unknown Source:2) at android.os.AsyncTask$3.call(AsyncTask.java:394) at java.util.concurrent.FutureTask.run(FutureTask.java:266) ... 4 more

    Bug 
    opened by soumyabratabose 6
  • [Bug]: Bad search text legibility with a light primary color

    [Bug]: Bad search text legibility with a light primary color

    Bug Summary

    The foreground color of the search bar is white, hence If the user has a light primary color, the legibility is low.

    Version

    0.4.0

    Steps to reproduce the bug

    No response

    Screenshots or Screen recordings

    SmartSelect_20221025-081849_Phonograph Plus

    Environment

    No response

    Other helpful information

    No response

    Bug 
    opened by davquar 5
  • [Bug Report] Enqueue folder: no longer recursive

    [Bug Report] Enqueue folder: no longer recursive

    Describe the bug or unexpected behavior I used to be able to enqueue a folder and have all songs in that directory and in all subdirectories therein added to the queue recursively. This doesn't happen for anymore. Rather, when I enqueue a folder, only the top level audio files are added to queue.

    Crash log n/a

    How to reproduce Steps to reproduce the bugs or unexpected behaviors:

    1. find a directory in the files tab: one with subdirectories and songs in those subdirectories
    2. select that folder and add it to queue
    3. none of the subdirectories contents are enqueued

    Screenshots (Optional) (if available)

    Other information

    Bug 
    opened by anaskaejdar 5
  • [Bug Report]Crash when swiping covers in player / 最新预览版播放中报错

    [Bug Report]Crash when swiping covers in player / 最新预览版播放中报错

    Describe the bug or unexpected behavior 最新预览版播放中报错

    Crash log Crash Report:

    Package name: player.phonograph.plus.preview App version: 0.3-alpha08 (259) Git Commit Hash: c2673c5213408a2c7058 Android version: 12 (SDK 31) Device brand: realme (by realme) Device model: RMX3361 (code: RE507C) Product name: RMX3361 Build version: RMX3361_11_C.08 (R.202206222209) Hardware: qcom Language: zh

    j1.d: Unexpected exception thrown by non-Glide code at j1.n.c(Unknown Source:15) at j1.n$b.run(Unknown Source:35) at android.os.Handler.handleCallback(Handler.java:938) at android.os.Handler.dispatchMessage(Handler.java:99) at android.os.Looper.loopOnce(Looper.java:233) at android.os.Looper.loop(Looper.java:344) at android.app.ActivityThread.main(ActivityThread.java:8184) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:584) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1034) Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'void v6.b$a.loadAlbumCover()' on a null object reference at v6.b.requestLoadCover(Unknown Source:8) at player.phonograph.ui.fragments.player.PlayerAlbumCoverFragment.access$deployColor(SourceFile:3) at player.phonograph.ui.fragments.player.a.invoke(SourceFile:1) at v6.b$a.access$setColor(Unknown Source:12) at v6.b$a$b.invoke(SourceFile:1) at v6.a.onColorReady(Unknown Source:14) at f7.c.onResourceReady(SourceFile:1) at z1.h.s(SourceFile:2) at z1.h.r(SourceFile:4) at j1.n.c(Unknown Source:8) ... 9 more

    
    **How to reproduce**
    Steps to reproduce the bugs or unexpected behaviors:
    快速添加少量歌曲加入播放列表
    横滑封面切换歌曲
    报错
    
    
    Bug 
    opened by Tartuffe-X 5
  • [Bug Report] Crash when long pressing on any album

    [Bug Report] Crash when long pressing on any album

    Crash Report:

    Package name: player.phonograph.plus App version: 0.2.2 (204) Git Commit Hash: 8ece1e4f4973468432e7 Android version: 11 (SDK 30) Device brand: Redmi (by Xiaomi) Device model: M2004J19C (code: lancelot) Product name: lancelot_global Build version: RP1A.200720.011 (V12.5.5.0.RJCMIXM) Hardware: mt6768 Language: es

    java.lang.IllegalStateException: Two different ViewHolders have the same stable ID. Stable IDs in your adapter MUST BE unique and SHOULD NOT change. ViewHolder 1:a{aae0138 position=3 id=459805675864067378, oldPos=-1, pLpos:-1 not recyclable(1)} View Holder 2:a{c375125 position=1 id=459805675864067378, oldPos=-1, pLpos:-1} com.simplecityapps.recyclerview_fastscroll.views.FastScrollRecyclerView{9c5c511 VFED..... ......ID 0,0-1080,1826 #7f090274 app:id/recycler_view}, adapter:c8.a@7664676, layout:androidx.recyclerview.widget.GridLayoutManager@5482477, context:player.phonograph.ui.activities.MainActivity@fc47741 at androidx.recyclerview.widget.RecyclerView.y(:11) at androidx.recyclerview.widget.RecyclerView.onLayout(:2) at android.view.View.layout(View.java:23361) at android.view.ViewGroup.layout(ViewGroup.java:6534) at android.widget.FrameLayout.layoutChildren(FrameLayout.java:332) at android.widget.FrameLayout.onLayout(FrameLayout.java:270) at android.view.View.layout(View.java:23361) at android.view.ViewGroup.layout(ViewGroup.java:6534) at androidx.coordinatorlayout.widget.CoordinatorLayout.r(:14) at androidx.coordinatorlayout.widget.CoordinatorLayout.onLayout(:2) at android.view.View.layout(View.java:23361) at android.view.ViewGroup.layout(ViewGroup.java:6534) at android.widget.FrameLayout.layoutChildren(FrameLayout.java:332) at android.widget.FrameLayout.onLayout(FrameLayout.java:270) at android.view.View.layout(View.java:23361) at android.view.ViewGroup.layout(ViewGroup.java:6534) at androidx.recyclerview.widget.RecyclerView$m.l0(Unknown Source:32) at androidx.recyclerview.widget.LinearLayoutManager.y1(Unknown Source:166) at androidx.recyclerview.widget.LinearLayoutManager.i1(:2) at androidx.recyclerview.widget.LinearLayoutManager.B0(:17) at androidx.recyclerview.widget.RecyclerView.A(Unknown Source:66) at androidx.recyclerview.widget.RecyclerView.y(Unknown Source:71) at androidx.recyclerview.widget.RecyclerView.onLayout(:2) at android.view.View.layout(View.java:23361) at android.view.ViewGroup.layout(ViewGroup.java:6534) at androidx.viewpager2.widget.ViewPager2.onLayout(Unknown Source:70) at android.view.View.layout(View.java:23361) at android.view.ViewGroup.layout(ViewGroup.java:6534) at com.google.android.material.appbar.g.t(:2) at com.google.android.material.appbar.h.h(Unknown Source:0) at androidx.coordinatorlayout.widget.CoordinatorLayout.onLayout(:2) at android.view.View.layout(View.java:23361) at android.view.ViewGroup.layout(ViewGroup.java:6534) at android.widget.FrameLayout.layoutChildren(FrameLayout.java:332) at android.widget.FrameLayout.onLayout(FrameLayout.java:270) at android.view.View.layout(View.java:23361) at android.view.ViewGroup.layout(ViewGroup.java:6534) at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1829) at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1673) at android.widget.LinearLayout.onLayout(LinearLayout.java:1582) at android.view.View.layout(View.java:23361) at android.view.ViewGroup.layout(ViewGroup.java:6534) at android.widget.FrameLayout.layoutChildren(FrameLayout.java:332) at android.widget.FrameLayout.onLayout(FrameLayout.java:270) at android.view.View.layout(View.java:23361) at android.view.ViewGroup.layout(ViewGroup.java:6534) at com.sothree.slidinguppanel.SlidingUpPanelLayout.onLayout(Unknown Source:140) at android.view.View.layout(View.java:23361) at android.view.ViewGroup.layout(ViewGroup.java:6534) at android.widget.FrameLayout.layoutChildren(FrameLayout.java:332) at android.widget.FrameLayout.onLayout(FrameLayout.java:270) at android.view.View.layout(View.java:23361) at android.view.ViewGroup.layout(ViewGroup.java:6534) at androidx.drawerlayout.widget.DrawerLayout.onLayout(Unknown Source:56) at android.view.View.layout(View.java:23361) at android.view.ViewGroup.layout(ViewGroup.java:6534) at android.widget.FrameLayout.layoutChildren(FrameLayout.java:332) at android.widget.FrameLayout.onLayout(FrameLayout.java:270) at android.view.View.layout(View.java:23361) at android.view.ViewGroup.layout(ViewGroup.java:6534) at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1829) at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1673) at android.widget.LinearLayout.onLayout(LinearLayout.java:1582) at android.view.View.layout(View.java:23361) at android.view.ViewGroup.layout(ViewGroup.java:6534) at android.widget.FrameLayout.layoutChildren(FrameLayout.java:332) at android.widget.FrameLayout.onLayout(FrameLayout.java:270) at android.view.View.layout(View.java:23361) at android.view.ViewGroup.layout(ViewGroup.java:6534) at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1829) at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1673) at android.widget.LinearLayout.onLayout(LinearLayout.java:1582) at android.view.View.layout(View.java:23361) at android.view.ViewGroup.layout(ViewGroup.java:6534) at android.widget.FrameLayout.layoutChildren(FrameLayout.java:332) at android.widget.FrameLayout.onLayout(FrameLayout.java:270) at com.android.internal.policy.DecorView.onLayout(DecorView.java:804) at android.view.View.layout(View.java:23361) at android.view.ViewGroup.layout(ViewGroup.java:6534) at android.view.ViewRootImpl.performLayout(ViewRootImpl.java:3702) at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:3160) at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:2129) at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:8603) at android.view.Choreographer$CallbackRecord.run(Choreographer.java:975) at android.view.Choreographer.doCallbacks(Choreographer.java:799) at android.view.Choreographer.doFrame(Choreographer.java:734) at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:960) at android.os.Handler.handleCallback(Handler.java:938) at android.os.Handler.dispatchMessage(Handler.java:99) at android.os.Looper.loop(Looper.java:236) at android.app.ActivityThread.main(ActivityThread.java:7864) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:620) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1011)

    How to reproduce • long press on any album

    Bug 
    opened by WaifuPX-DG 5
  • [Bug Report] Cannot access SD card from Folders

    [Bug Report] Cannot access SD card from Folders

    Describe the bug or unexpected behavior A clear and concise description of what the bug is.

    Cannot access SD card from Folders (only built-in is available).

    Crash log If app crashed, copy the logs if available.

    [YOUR LOGS HERE]
    

    How to reproduce Steps to reproduce the bugs or unexpected behaviors:

    Try to go to folders -> Emulated. It says empty.

    Screenshots (Optional) (if available) Video recording attached.

    Other information … Motorola G 5g Plus. Android 11

    https://user-images.githubusercontent.com/2842118/162279262-92a925f7-00d4-4c0d-9d7e-3e4e914b152c.mp4

    .

    Bug Postponed 
    opened by xdaft 5
  • [Bug]: Crash during playback, Animator already started

    [Bug]: Crash during playback, Animator already started

    Bug Summary

    During song playback, I sometimes (seemingly random) have Phonograph Plus crash. I am using a Pixel 6, running GrapheneOS.

    This is the crashlog:

    Crash Report:
    
    Package name:    player.phonograph.plus
    App version:     0.5.0 (450)
    Git Commit Hash: 13b4722d48f77ccf81dd
    Android version: 13 (SDK 33)
    Device brand:    google  (by Google)
    Device model:    Pixel 6 (code: oriole)
    Product name:    oriole
    Build version:   TQ1A.221205.011.2022122000 
                     (2022122000)
    Hardware:        oriole
    Language:        en
    
    java.lang.IllegalStateException: Animator has already started, cannot change it now!
    	at android.graphics.animation.RenderNodeAnimator.checkMutable(RenderNodeAnimator.java:138)
    	at android.graphics.animation.RenderNodeAnimator.setDuration(RenderNodeAnimator.java:314)
    	at android.graphics.animation.RenderNodeAnimator.setDuration(RenderNodeAnimator.java:37)
    	at android.animation.AnimatorSet.updateAnimatorsDuration(AnimatorSet.java:774)
    	at android.animation.AnimatorSet.getTotalDuration(AnimatorSet.java:1744)
    	at android.animation.AnimationHandler.lambda$new$0$android-animation-AnimationHandler(AnimationHandler.java:224)
    	at android.animation.AnimationHandler$$ExternalSyntheticLambda0.doFrame(Unknown Source:2)
    	at android.view.Choreographer$CallbackRecord.run(Choreographer.java:1229)
    	at android.view.Choreographer$CallbackRecord.run(Choreographer.java:1239)
    	at android.view.Choreographer.doCallbacks(Choreographer.java:899)
    	at android.view.Choreographer.doFrame(Choreographer.java:827)
    	at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:1214)
    	at android.os.Handler.handleCallback(Handler.java:942)
    	at android.os.Handler.dispatchMessage(Handler.java:99)
    	at android.os.Looper.loopOnce(Looper.java:201)
    	at android.os.Looper.loop(Looper.java:288)
    	at android.app.ActivityThread.main(ActivityThread.java:7878)
    	at java.lang.reflect.Method.invoke(Native Method)
    	at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:548)
    	at com.android.internal.os.ExecInit.main(ExecInit.java:49)
    	at com.android.internal.os.RuntimeInit.nativeFinishInit(Native Method)
    	at com.android.internal.os.RuntimeInit.main(RuntimeInit.java:355)
    

    Version

    0.5.0

    Steps to reproduce the bug

    Unclear, appears randomly during song playback, usually pretty quickly after the song is clicked on for playback (in the first couple seconds)

    Screenshots or Screen recordings

    No response

    Environment

    OS: GrapheneOS Device: Pixel 6

    Other helpful information

    No response

    Bug 
    opened by dominikheinz 0
  • Crash when clicking

    Crash when clicking "Lyrics Following"

    Crash log

    Crash Report:

    Package name: player.phonograph.plus App version: 0.5.0 (450) Git Commit Hash: 13b4722d48f77ccf81dd Android version: 12 (SDK 31) Device brand: motorola (by motorola) Device model: XT2225-2 (code: rhodep) Product name: rhodep_cn Build version: S1SU32.73-112-4 (e8b769-403a5) Hardware: qcom Language: zh

    java.lang.IllegalArgumentException: Invalid target position at androidx.recyclerview.widget.RecyclerView$x.l(SourceFile:104) at androidx.recyclerview.widget.RecyclerView$m.O0(Unknown Source:21) at androidx.recyclerview.widget.LinearLayoutManager.N0(Unknown Source:12) at player.phonograph.dialogs.LyricsDialog.onUpdateProgressViews(SourceFile:33) at ma.a.handleMessage(SourceFile:31) at android.os.Handler.dispatchMessage(Handler.java:111) at android.os.Looper.loopOnce(Looper.java:238) at android.os.Looper.loop(Looper.java:357) at android.app.ActivityThread.main(ActivityThread.java:8089) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:548) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1026)

    Steps to reproduce the bug

    点击“歌词滚动”

    Screenshots or Screen recordings

    Screenshot_20221207-004747

    Other helpful information

    No response

    Version

    0.5.0

    Bug 
    opened by Accumulation142857 4
  • [Feature Request] Notification tap should open the queue screen

    [Feature Request] Notification tap should open the queue screen

    This issue is purely a UX suggestion.

    As a user, when I tap on the "now playing" notification I expect to go to the queue screen, or at least to the last visited screen before leaving the app.

    Currently the main screen gets opened.


    In the past I've used other music players that had this behavior, and I think it would be a good addition to improve the user experience of Phonograph Plus.

    Enhancement 
    opened by davquar 1
  • [Feature request] Audio keep on playing after interruption

    [Feature request] Audio keep on playing after interruption

    Navigation apps like OSMAnd interrupt audio playback if you set it like that.

    But when the music is paused, it doesnt keep on autoplaying.

    This is an integrateable feature, Retro Music player has it.

    Enhancement 
    opened by firefoxlover 1
  • [Feature Request] empty queue with button or on close.

    [Feature Request] empty queue with button or on close.

    If you use folders for your playlists, it is nessecary for using them like playlists, to be able to

    1. Add the folder to the queue (with shuffle?)
    2. Clear the qeue again to play another playlist

    Thanks for this great app!

    Enhancement Work-in-progress 
    opened by firefoxlover 1
Releases(v0.5.0)
  • v0.5.0(Nov 27, 2022)

    0.5.0 2022.11.27

    Commit Log : https://github.com/chr56/Phonograph_Plus/compare/v0.4.1...v0.5.0

    ZH

    1. 修复 在大屏设备上,横屏时无法调整列表列数,且锁定在6列
    2. 修复 浅色主色调下搜索页面上文本和图标的对比度低 (#43)
    3. 修复 某些颜色异常
    4. 新增 播放列表快照: 追踪当前播放列表, 在列表被替换时记录并存储(重启应用后失效), 以供恢复, 仅存储最近的变化, 位于播放器菜单(播放列表历史)
    5. 新增 允许自定义位于列表中的歌曲或文件的点击行为: 共 8 种模式和 2 种额外, 可自定义点击列表项目时的操作 (#12, 部分#33, #44)
    6. 移除 选项“记住随机播放” (意义模糊,与自定义点击行为和某些特意播放冲突)
    7. 删除 选项“保护播放列表不被肆意更改” (添加了播放列表快照与自定义点击行为后已无用)
    8. 新增 从外部播放时显示确认对话框 (如, 从文件管理器打开): 选项类似于自定义点击行为
    9. 修复 从桌面捷径播放失效
    10. 优化 歌词搜索加载速度
    11. 翻译 更新俄语翻译(by ElinaAndreeva)
    12. 开发 重构播放队列管理器, 清理代码, 更新依赖, 使用VersionCatalog

    EN

    1. Fix: on large tablets, the number of list columns cannot be adjusted and locked to 6 columns when the screen is landscaped
    2. Fix: low contrast color of the text and icon on Search Page if using a light primary color (close #43)
    3. Fix: some color glitch
    4. New: playing queue snapshot: track the current queue, record and save when playing queue is entirety replaced (keep till app rebooted), only store recent changes, to recovery queues, goto player menu (playing queue history)
    5. New: custom click-behavior: allow custom click-behavior for song items or file items in list: There are 8 modes and 2 extra behaviors allowing defining what player should do when clicking item in a list. (close #12, #33 partially, #44)
    6. Remove: the option "Remember Shuffle" (It's a very vague option, causing conflict with some intended playing actions and custom click-behavior)
    7. Remove: the option "Keep the playing queue intact" (It's useless now since queue snapshot and custom click-behavior were added)
    8. New: a confirm dialog when playing from outside (like open from file explorer): The options are similar to custom click-behavior.
    9. Fix: playing from shortcut won't work
    10. Optimise: lyrics fetching and loading performance
    11. Translation: updated Russian (by ElinaAndreeva)
    12. Development: refactor Queue Manager, clean up code, update dependencies, using Gradle VersionCatalog
    Source code(tar.gz)
    Source code(zip)
    Phonograph.Plus_0.5.0.apk(5.29 MB)
    Phonograph.Plus_0.5.0_mapping_13b4722d4.txt(9.44 MB)
  • v0.3.5.3-LTS(Nov 27, 2022)

    v0.3.5.3-LTS 2022.11.27

    Commit Log: https://github.com/chr56/Phonograph_Plus/compare/v0.3.5.2-LTS...v0.3.5.3-LTS

    ZH

    1. 修复 浅色主色调下搜索页面上文本和图标的对比度低
    2. 修复 在大屏设备上,横屏时无法调整列表列数,且锁定在6列

    EN

    1. Fix: low contrast color of the text and icon on Search Page if using a light primary color
    2. Fix: on large tablets, the number of list columns cannot be adjusted and locked to 6 columns when the screen is landscaped
    Source code(tar.gz)
    Source code(zip)
    Phonograph.Plus_0.3.5.3.apk(4.53 MB)
    Phonograph.Plus_0.3.5.3_mapping_14f05d15f.txt(6.15 MB)
  • preview_0.5-dev2(Nov 23, 2022)

    0.5-dev2 2022.11.23

    CN 与dev1相比:

    • 修复 在大屏设备上,横屏时无法调整列表列数,且锁定在6列
    • 修复 某些颜色异常
    • 新增 播放列表快照: 追踪当前播放列表, 在列表被替换时记录并存储(重启应用后失效), 以供恢复, 仅存储最近的变化, 位于播放器菜单(播放列表历史)
    • 翻译 更新俄语翻译(by ElinaAndreeva)
    • 开发 重构播放队列管理器, 清理代码, 更新依赖, 使用VersionCatalog

    EN Compared with dev1:

    • Fix: on large tablets, the number of list columns cannot be adjusted and locked to 6 columns when the screen is landscaped
    • Fix: some color glitch
    • New: playing queue snapshot: track the current queue, record and save when playing queue is entirety replaced (keep till app rebooted), only store recent changes, to recovery queues, goto player menu (playing queue history)
    • Translation: updated Russian (by ElinaAndreeva)
    • Development: refactor Queue Manager, clean up code, update dependencies, using Gradle VersionCatalog
    Source code(tar.gz)
    Source code(zip)
    mapping.txt(9.44 MB)
    PhonographPlus_0.5-dev2-preview.apk(5.37 MB)
  • preview_0.5-dev1(Nov 23, 2022)

    0.5-dev1 2022.11.6

    CN

    • 修复 浅色主色调下搜索页面上文本和图标的对比度低 (#43)
    • 新增 允许自定义位于列表中的歌曲或文件的点击行为: 共 8 种模式和 2 种额外, 可自定义点击列表项目时行为(#12, 部分#33, #44)
    • 移除 选项“记住随机播放” (意义模糊,与自定义点击行为和某些特意播放冲突)
    • 删除 选项“保护播放列表不被肆意更改” (添加了自定义点击行为后已无用)
    • 新增 从外部播放时显示确认对话框 (如, 从文件管理器打开): 选项类似于自定义点击行为
    • 修复 从桌面捷径播放失效
    • 开发 清理代码

    EN

    • Fix: low contrast color of the text and icon on Search Page if using a light primary color (close #43)
    • New: allow custom click-behavior for song items or file items in list: There are 8 modes and 2 extra behaviors allowing defining what player should do when clicking item in a list. (close #12, #33 partially, #44)
    • Remove: the option "Remember Shuffle" (It's a very vague option, causing conflict with some intended playing actions and custom click-behavior)
    • Remove: the option "Keep the playing queue intact" (It's useless now since custom click-behavior was added)
    • New: a confirm dialog when playing from outside (like open from file explorer): The options are similar to custom click-behavior.
    • Fix: playing from shortcut won't work
    • Development: clean up code
    Source code(tar.gz)
    Source code(zip)
    mapping.txt(9.06 MB)
    PhonographPlus_0.5-dev1-preview.apk(5.29 MB)
  • v0.4.1(Oct 28, 2022)

    v0.4.1 2022.10.28

    Commit log: https://github.com/chr56/Phonograph_Plus/compare/v0.4.0...v0.4.1

    ZH

    1. 修复 打开歌曲详情时卡死
    2. 修复 搜索页面的文字图标在浅色主色调下对比度问题(部分修复)
    3. 新增 歌词功能总开关
    4. 改进 崩溃界面,区分崩溃与内部错误
    5. 改进 优化菜单
    6. 开发 清理代码

    EN

    1. Fix: stuck when opening song details
    2. Fix: terrible contrast of the text and icon on Search Page when under light primary color (Partial Fix)
    3. Add: a general switch for all lyrics features
    4. Improve: Crash Report Page - to distinguish between crash and internal error
    5. Improve: menu
    6. Development: clean up code
    Source code(tar.gz)
    Source code(zip)
    Phonograph.Plus_0.4.1.apk(5.17 MB)
    Phonograph.Plus_0.4.1_mapping_7b4022394.txt(8.84 MB)
  • v0.4.0(Oct 23, 2022)

    v0.4.0 2022.10.23

    Commit log: https://github.com/chr56/Phonograph_Plus/compare/v0.3.5....v0.4.0

    🎉 Phonograph Plus 更名一周年纪念日 🎉 Phonograph Plus 1st Renaming Anniversary

    一年前的今天,正式更名为Phonograph Plus,并发布了第一个版本 v.0.0.1

    One year ago, it was renamed to Phonograph Plus, and first canonical stable version (v.0.0.1) was released.

    CN

    • 翻译 更新俄语(Photon Gilbert),土耳其语(Erdem Özdemir)
    • 翻译 清理各语言翻译
    • 修复 导入数据库时偶尔出错
    • 移除 黑名单
    • 新增 “路径过滤器“, 支持"排除模式"(黑名单)和"仅包含模式"(白名单), 两者暂时无法同时使用
    • 新增 全新的歌曲详情页面
    • 新增 全新的更详细的更新对话框等
    • 改进 菜单(几乎所有列表皆提供"播放","随机播放","下一个播放","加入列表"等)
    • 开发 重构媒体读取
    • 开发 引入 Jetpack Compose
    • 其他 APK体积膨胀, 不再”小而美“

    EN

    • Translation: update Russian (by Photon Gilbert),Turkish(by Erdem Özdemir)
    • Translation: clean up translations for all language
    • Fix: crash when importing databases
    • Remove: Blacklist
    • New: the Path filter, support "exclude mode" (blacklist) and "include mode" (whitelist), currently they can't be enabled at the same time
    • New: Song Details Page
    • New: brand new and detailed Upgrade Dialog and more
    • Improve: menus (almost all lists provide "Play", "Shuffle Play", "Play Next", "Add To Queues", etc.)
    • Development: Refactor media reading
    • Development: Introduce Jetpack Compose
    • Other: APK is bloated, no longer "tiny but versatile"
    Source code(tar.gz)
    Source code(zip)
    Phonograph.Plus_0.4.0.apk(5.16 MB)
    Phonograph.Plus_0.4.0_mapping_2fdd1d6c2.txt(8.75 MB)
  • preview_0.4-beta(Oct 22, 2022)

    0.4-dev1 2022.10.17

    CN

    对比 v0.3.5.2

    • 修复 导入数据库时偶尔出错
    • 移除 黑名单
    • 新增 “路径过滤器“, 支持"排除模式"(黑名单)和"仅包含模式"(白名单), 两者暂时无法同时使用
    • 新增 全新的歌曲详情页面
    • 新增 全新的更详细的更新对话框等
    • 改进 菜单(几乎所有列表皆提供"播放","随机播放","下一个播放","加入列表"等)
    • 开发 重构媒体读取
    • 开发 引入 Jetpack Compose
    • 其他 APK体积膨胀, 不再”小而美“

    EN

    Compare to v0.3.5.2

    • Fix: crash when importing databases
    • Remove: Blacklist
    • New: the Path filter, support "exclude mode" (blacklist) and "include mode" (whitelist), currently they can't be enabled at the same time
    • New: Song Details Page
    • New: brand new and detailed Upgrade Dialog and more
    • Improve: menus (almost all lists provide "Play", "Shuffle Play", "Play Next", "Add To Queues", etc.)
    • Development: Refactor media reading
    • Development: Introduce Jetpack Compose
    • Other: APK is bloated, no longer "tiny but versatile"
    Source code(tar.gz)
    Source code(zip)
    mapping.txt(8.77 MB)
    PhonographPlus_0.4-beta-preview-release-unsigned-signed.apk(5.24 MB)
  • preview_0.4-dev1(Oct 17, 2022)

    0.4-dev1 2022.10.17

    CN

    对比 v0.3.5.2

    • 移除 黑名单
    • 新增 “路径过滤器“, 支持"排除模式"(黑名单)和"仅包含模式"(白名单), 两者暂时无法同时使用
    • 新增 全新的歌曲详情页面
    • 新增 全新的更详细的更新对话框等
    • 改进 菜单(几乎所有列表皆提供"播放","随机播放","下一个播放","加入列表"等)
    • 开发 重构媒体读取
    • 开发 引入 Jetpack Compose
    • 其他 APK体积膨胀, 不再”小而美“

    EN

    Compare to v0.3.5.2

    • Remove: Blacklist
    • New: the Path filter, support "exclude mode" (blacklist) and "include mode" (whitelist), currently they can't be enabled at the same time
    • New: Song Details Page
    • New: brand new and detailed Upgrade Dialog and more
    • Improve: menus (almost all lists provide "Play", "Shuffle Play", "Play Next", "Add To Queues", etc.)
    • Development: Refactor media reading
    • Development: Introduce Jetpack Compose
    • Other: APK is bloated, no longer "tiny but versatile"
    Source code(tar.gz)
    Source code(zip)
    mapping.txt(8.76 MB)
    PhonographPlus_0.4-dev-preview-release-unsigned-signed.apk(5.24 MB)
  • v0.3.5.2-LTS(Oct 11, 2022)

    v0.3.5.2-LTS 2022.10.11

    Commit log: https://github.com/chr56/Phonograph_Plus/compare/v0.3.5.1-LTS...v0.3.5.2-LTS

    ZH

    1. 修复 因图片缓存配置错误而在主播放器出现的低像素图片
    2. 修复 扫描媒体对话框因加载结束前提前退出导致崩溃

    EN

    1. Fix: Low pixel images appearing in the main player due to image cache policy misconfiguration
    2. Fix: Scan Media Dialog crashes if early exit before the loading finished
    Source code(tar.gz)
    Source code(zip)
    Phonograph.Plus_0.3.5.2.apk(4.53 MB)
    Phonograph.Plus_0.3.5.2_mapping_fca5540b.txt(6.14 MB)
  • v0.3.5.1-LTS(Oct 8, 2022)

    v0.3.5.1-LTS 2022.10.8

    Commit log: https://github.com/chr56/Phonograph_Plus/compare/v0.3.5-LTS...v0.3.5.1-LTS

    ZH

    1. 修复 删除对话框不显示删除结果
    2. 修复 使用旧式方法浏览文件时无法解析歌曲
    3. 修复 歌曲内嵌图片过大时引起崩溃
    4. 修复 调整应用窗口大小时崩溃

    EN

    1. Fix: Delete Dialog does not show delete results
    2. Fix: songs can not being parsed when using the old way to browse files
    3. Fix: crash when embedded images in songs are too large
    4. Fix: crash when resizing app window
    Source code(tar.gz)
    Source code(zip)
    Phonograph.Plus_0.3.5.1.apk(4.53 MB)
    Phonograph.Plus_0.3.5.1_mapping_ec93a51d.txt(6.14 MB)
  • v0.3.5-LTS(Oct 6, 2022)

  • v0.3.4(Oct 3, 2022)

    v0.3.4 2022.10.3

    Commitlog: https://github.com/chr56/Phonograph_Plus/compare/v0.3.3...v0.3.4

    CN

    • 新增 删除歌曲时一并删除同名歌词文件(需管理全部文件权限)
    • 修复 选择文件夹进行播放时无法递归选择其下所有子文件夹
    • 修复 播放器界面崩溃,如调整窗口大小时(仅部分修复)
    • 改进 图片加载时限制大小以防止过大图片导致崩溃
    • 改进 关闭遇到opus格式时弹出的错误通知(目前暂时无法读取opus格式的标签)
    • 开发 补上部分库缺失的 License
    • 开发 更新 Gradle 至 7.5.1, 更新 AGP 至 7.3.0, 更新依赖

    EN

    • New: delete song along with the lyrics file with the same name (requires Manage all external files permission)
    • Fix: when play a folder, it cannot recursively select all subfolders
    • Fix: player interface crash, e.g. when resizing the window (partially fixed)
    • Improve: limit image size when loading to prevent crashes due to oversize images
    • Improve: mute error notifications when encountering opus format (currently we cannot read opus's tags)
    • Development: add missing licenses of some libraries
    • Development: update Gradle to 7.5.1, update AGP to 7.3.0, update dependencies
    Source code(tar.gz)
    Source code(zip)
    Phonograph.Plus_0.3.4.apk(4.52 MB)
    Phonograph.Plus_0.3.4_mapping_b6ce5aae.txt(6.14 MB)
  • v0.3.3(Sep 18, 2022)

    0.3.3 2022.9.18

    Commitlog: https://github.com/chr56/Phonograph_Plus/compare/v0.3.2...v0.3.3

    CN

    • 修复 打开应用时播放队列被随机刷新
    • 改进 将交换队列操作(随机播放、播放播放列表/专辑/艺术家)移动到后台,以修复更改队列时卡死(如果歌曲过多)
    • 改进 加载封面图时指定图片大小,尽量避免图片过大导致应用崩溃

    EN

    • Fix: randomly refresh playing queue on opening
    • Improve: move swapping-queue operations (e.g. shuffle all, play a playlist, play an album/artist) to background, to fix getting frozen when changing queue especially for users having to many song
    • Improve: designate a rational images size when loading cover artworks, to try to not crash app if the image is too large
    Source code(tar.gz)
    Source code(zip)
    Phonograph.Plus_0.3.3.apk(4.55 MB)
    Phonograph.Plus_0.3.3_mapping_fec22849.txt(5.61 MB)
  • v0.3.2(Sep 13, 2022)

    v0.3.2 2022.9.13

    Commitlog: https://github.com/chr56/Phonograph_Plus/compare/v0.3.1...v0.3.2

    ZH

    1. 翻译 更新 俄语(Photon_Gilber), 法语(Exylos)
    2. 开发 升级 targetSdk 至 33 (Android 13), 适配 Android 13 (实验性)
    3. 开发 移除 Glide , 使用 Coil 加载图片
    4. 开发 移除 Gson , 使用 kotlin.serialization 处理 Json
    5. 修复 浅色背景下图标颜色仍为白色
    6. 新增 在全部歌曲页面顶栏添加全部播放按钮
    7. 改进 添加请求“管理全部文件”权限的快捷方式
    8. 改进 扫描媒体与添加黑名单对话框使用新版UI
    9. 改进 重写部分字符串, 清理无用字符串
    10. 改进 改进更新日志对话框
    11. 改进 检查更新流程(防止更新提示重复弹出)
    12. 移除 报告错误界面, 使用对话框
    13. 移除 登录 Github 提交报告功能(对大多数人无用)
    14. 开发 清理更新依赖, 更新 AGP 至 7.2.2, 更新 kotlin 至 1.7.10, 增强混淆
    15. 发布 添加 fastlane metadata

    EN

    1. Translation: updated Russian (by Photon_Gilber), French (by Exylos)
    2. Development: upgrade targetSdk to 33 (Android 13) (experimental)
    3. Development: remove Glide, use Coil to load images
    4. Development: remove Gson, use kotlin.serialization to handle Json
    5. Fix: the icon color is still white under light background
    6. Add: "play all" buttons in the top bar of all songs page
    7. Improve: add shortcut to grant "Manage All Files" permission
    8. Improve: use new UI in "Scan Media" and "Add To Blacklist" dialogs
    9. Improve: rewrite many strings, clean up useless strings
    10. Improve: Improve changelog dialog
    11. Improve: the check update procedure (and prevent popping up the update prompt repeatedly)
    12. Remove: issues reporting page (use a smaller dialog instead now)
    13. Remove: the feature of logging into Github to submit an issue (useless for most people)
    14. Development: clean up and upgrade dependencies, upgrade AGP to 7.2.2, upgrade kotlin to 1.7.10, enhance obfuscation
    15. Release: adding fastlane metadata
    Source code(tar.gz)
    Source code(zip)
    Phonograph.Plus_0.3.2_a219a046.apk(4.55 MB)
    Phonograph.Plus_0.3.2_mapping_a219a046.txt(5.59 MB)
  • preview_0.3.2-beta01(Sep 12, 2022)

  • preview_0.3.2-dev04(Sep 11, 2022)

    0.3.2 dev04 2022.9.11

    CN

    • 改进 检查更新流程(防止更新提示重复弹出)
    • 移除 报告错误界面, 使用对话框
    • 移除 登录 Github 提交报告功能(对大多数人无用)
    • 开发 移除 Gson , 使用 kotlin.serialization 处理 Json
    • 开发 增强混淆

    EN

    • Improve: the check update procedure (and prevent popping up the update prompt repeatedly)
    • Remove: error reporting page (use dialog instead)
    • Remove: the feature of lodging into Github to submit a issue (useless for most people)
    • Development: remove Gson, use kotlin.serialization to handle Json
    • Development: enhance obfuscation
    Source code(tar.gz)
    Source code(zip)
    mapping.txt(5.60 MB)
    PhonographPlus_0.3.2-dev04.apk(4.63 MB)
  • preview_0.3.2-dev03(Sep 8, 2022)

    0.3.2 dev03 2022.9.8

    CN

    • 修复 各类色彩异常
    • 新增 在全部歌曲页面顶栏添加全部播放按钮
    • 改进 添加请求“管理全部文件”权限的快捷方式
    • 改进 扫描媒体与添加黑名单对话框使用新版UI
    • 开发 清理代码

    EN

    • Fix: more color anomalies
    • Add: "play all" buttons in the top bar of all songs page
    • Improve: add shortcut to grant "Manage All Files" permission
    • Improve: use new UI in "Scan Media" and "Add To Blacklist" dialogs
    • Development: clean code
    Source code(tar.gz)
    Source code(zip)
    mapping.txt(5.35 MB)
    PhonographPlus_0.3.2-dev03.apk(4.68 MB)
  • preview_0.3.2-dev02(Sep 3, 2022)

  • preview_0.3.2-dev01(Sep 2, 2022)

    0.3.2 dev 2022.9.2

    CN

    • 翻译 更新 俄语(Photon_Gilber), 法语(Exylos)
    • 开发 升级 targetSdk 至 33 (Android 13), 适配 Android 13 (实验性)
    • 开发 移除 Glide , 使用 Coil 加载图片
    • 修复 浅色背景下图标颜色仍为白色
    • 改进 重写部分字符串, 清理无用字符串
    • 改进 改进更新日志对话框
    • 发布 添加 fastlane metadata
    • 开发 清理依赖, 更新 AGP 至 7.2.2

    EN

    • Translation: updated Russian (by Photon_Gilber), French (by Exylos)
    • Development: upgrade targetSdk to 33 (Android 13) (experimental)
    • Development: remove Glide, use Coil to load images
    • Fix: the icon color is still white under light background
    • Improve: rewrite many strings, clean up useless strings
    • Improve: Improve changelog dialog
    • Release: adding fastlane metadata
    • Development: clean up dependencies, update AGP to 7.2.2
    Source code(tar.gz)
    Source code(zip)
    mapping.txt(5.30 MB)
    PhonographPlus_0.3.2-dev01.apk(4.71 MB)
  • v0.3.1(Aug 18, 2022)

    0.3.1 2022.8.18

    Commitlog: https://github.com/chr56/Phonograph_Plus/compare/v0.3.0...v0.3.1

    ZH

    1. 翻译 更新意大利语(Andrea Enzo Lattmann (Gh0stz0x)), 法语(Exylos),俄语(Photon_Gilbert)
    2. 翻译 清理英式英语,加拿大英语翻译(仅保留拼写差异项)
    3. 翻译 移除 瑞典语(Swedish) 与 新挪威语(Norwegian Nynorsk) 翻译 (翻译缺失过多)
    4. 新增 初步支持应用内切换语言(暂不完美)
    5. 修复 旋转屏幕时崩溃
    6. 修复 正在播放列表被修改后, 当前曲目播放完后, 继续播放的音频却仍然为先前播放列表的下一曲, 但显示为新播放列表的下一曲
    7. 修复 "保护播放列表不被肆意更改"选项关闭后, 无法正确播放新播放列表(包括起始位置与曲目顺序)
    8. 修复 主播放器界面, "即将播放" 的后续曲目总计时不正确
    9. 改进 微调 崩溃界面 外观
    10. 改进 保存崩溃报告至应用外部(/Android/data)缓存文件夹内
    11. 开发 清理代码

    EN

    1. Translation: updated Italian (by Andrea Enzo Lattmann (Gh0stz0x)), French (by Exylos), Russian (by Photon_Gilbert)
    2. Translation: clean up English(British), English(Canadian) translations (only keep words that are different from default English(US))
    3. Translation: Remove Swedish and Norwegian Nynorsk translations (missing too many translations)
    4. New: Initial support for changing language in app (imperfect yet)
    5. Fix: Crash after rotation to landscape
    6. Fix: After the playlist is modified, when the current track is finished, the audio of "Next Track" to play is still be "Next Track" of the PREVIOUS playlist, but player display the "correct" "Next Track" of the NEW playlist
    7. Fix: Couldn"t play new queue by clicking an Song item (including starting position and tracks order), when "Please do NOT touch my playing queue arbitrarily" option is turned off
    8. Fix: In main player, total time of subsequent tracks (after "Up Next") incorrectly
    9. Improve: The design of Crash Report
    10. Improve: Save crash report to external cache dir (/Android/data)
    11. Development: clean code
    Source code(tar.gz)
    Source code(zip)
    Phonograph.Plus_0.3.1.apk(4.66 MB)
    Phonograph.Plus_0.3.1_mapping_108df09c.txt(5.48 MB)
  • preview_0.3.1-beta01(Aug 17, 2022)

    0.3.1 beta01 2022.8.17

    Full Commit: https://github.com/chr56/Phonograph_Plus/compare/v0.3.0...preview_0.3.1-beta01

    CN

    • 翻译 移除 瑞典语(Swedish) 与 新挪威语(Norwegian Nynorsk) 翻译 (翻译缺失过多)
    • 新增 初步支持应用内切换语言(暂不完美)
    • 修复 正在播放列表被修改后, 当前曲目播放完后, 继续播放的音频却仍然为先前播放列表的下一曲, 但显示为新播放列表的下一曲
    • 修复 "保护播放列表不被肆意更改"选项关闭后, 无法正确播放新播放列表(包括起始位置与曲目顺序)
    • 修复 主播放器界面, "即将播放" 的后续曲目总计时不正确

    EN

    • Translation: Remove Swedish and Norwegian Nynorsk translations (missing too many translations)
    • New: Initial support for changing language in app (imperfect yet)
    • Fix: After the playlist is modified, when the current track is finished, the audio of "Next Track" to play is still be "Next Track" of the PREVIOUS playlist, but player display the "correct" "Next Track" of the NEW playlist
    • Fix: Couldn't play new queue by clicking an Song item (including starting position and tracks order), when "Please do NOT touch my playing queue arbitrarily" option is turned off
    • Fix: In main player, total time of subsequent tracks (after "Up Next") incorrectly
    Source code(tar.gz)
    Source code(zip)
    mapping.txt(5.47 MB)
    PhonographPlus_0.3.1-beta01.apk(4.75 MB)
  • preview_0.3.1-preview0814(Aug 14, 2022)

    0.3.1 preview 2022.8.14

    CN

    • 翻译 更新意大利语(Andrea Enzo Lattmann (Gh0stz0x)), 法语(Exylos),俄语(Photon_Gilbert)
    • 翻译 清理英式英语,加拿大英语翻译(仅保留拼写差异项)
    • 开发 清理代码

    EN

    • Translation: updated Italian (by Andrea Enzo Lattmann (Gh0stz0x)), French (by Exylos), Russian (by Photon_Gilbert)
    • Translation: clean up English(British), English(Canadian) translations (only keep words that are different from default English(US))
    • Development: clean code
    Source code(tar.gz)
    Source code(zip)
    mapping.txt(5.43 MB)
    PhonographPlus_0.3.1-preview0814.apk(4.78 MB)
  • v0.3.0(Aug 10, 2022)

    v0.3.0 2022.8.10 Commit log: https://github.com/chr56/Phonograph_Plus/compare/v0.3.0-rc1...v0.3.0

    🎉🎉🎉 Phonograph Plus 一周年纪念版!!!🎉🎉🎉 🎉🎉🎉 This is Phonograph Plus 1st Anniversary Version! 🎉🎉🎉

    ZH

    1. 修复 在启动器小部件存在时,小部件无法刷新且无法启动应用
    2. 开发 优化混淆配置

    EN

    1. Fix: when the app widgets exist, application would crash and widgets won't be refreshed
    2. Development: optimize obfuscation and shrink configuration
    Source code(tar.gz)
    Source code(zip)
    Phonograph.Plus_0.3.0.apk(4.67 MB)
    Phonograph.Plus_0.3.0_mapping_dd60debd.txt(5.33 MB)
  • v0.3.0-rc1(Aug 8, 2022)

    v0.3.0-RC1 2022.8.8

    此版本跨度极大, 可能存在潜在问题 This is a HUGE upgrade, may have some potential bugs.

    Commit Log: https://github.com/chr56/Phonograph_Plus/compare/v0.2.6.1...v0.3.0-rc1

    CN

    更新日志

    1. 新增 全新的 文件夹 页面: ├ 从 MediaStore 读取歌曲文件(可大幅改善在 Android10 以上的性能), 亦保留旧方式备用; ├ 尝试完全支持浏览外部可移除存储设备(如 SD 卡等); ├ 使用下拉刷新; └ 允许按照文件名,文件大小,添加日期,修改日期排序;
    2. 移除 旧的 文件夹 页面, 并清理抽屉
    3. 改进 重构 播放列表详情 , 简化编辑
    4. 改进 "最常听的歌曲"计算方法
    5. 新增 支持刷新并重新计算"最常听的歌曲"播放列表
    6. 新增 专辑与艺术家详情中的 last.fm 链接 (注: 目前仍未失效, 但无维护计划)
    7. 新增 设置项"保护播放列表不被肆意更改", 开启后,除非用户明确要求,应用将尽力保证当前播放队列不被清空或覆盖(仅加入队列)
    8. 新增 添加菜单项, 可在 正在播放界面 中修改当前 正在播放界面 样式
    9. 修复 第一次打开睡眠定时器崩溃
    10. 修复 多选时菜单图标颜色错误
    11. 开发 更新依赖(导致滚动条外观有所不同)
    12. 开发 重构大量历史代码, 包括 ├ 后台音乐服务(可能存在大量潜在的与音乐播放相关错误) ├ 专辑详情 ├ 播放列表详情 ├ 正在播放界面/主播放器界面 (歌曲封面图片) ├ 文件扫描 ├ 排序 ├ 列表控制菜单 ├ 主题控制 ├ 多选模式 └ 播放器托盘
    13. 开发 整治 Gradle 构建脚本与项目结构

    已知问题:

    1. 专辑详情转场动画异常
    2. 艺术家详情多选冲突
    3. 文件视图路径现阶段不显示历史记录
    4. 偶见主播放器歌曲封面错误 (部分场景已于beta01中修复)
    5. 在启动器小部件存在时,小部件无法刷新且无法启动应用(移除小部件可修复)

    EN

    Changes Log

    1. Add: a brand new Folders Page: ├ Read song files from MediaStore (significantly better performance on Android 10 and above), but you can still use old method to read song files; ├ (Try to) fully support browsing external removable storage devices (such as SD cards, etc.); ├ Use sweep-down-refresh; └ Allow sorting files by file name, file size, date added, date modified;
    2. Remove: the legacy Folders Page, and update drawer
    3. Improve: refactor Playlist Detail and simplify editing
    4. Improve: calculation for "My Top Tracks"
    5. Add: support for force to refresh and recalculate "My Top Tracks" playlists
    6. Add: responding last.fm link in Artist&Album Detail(Note: Currently, wiki of last.fm is still working, there is no plan to maintain.).
    7. Add: Preference Item "Please do NOT touch my playing queue arbitrarily", which would make app try not to clear or override playing queue without user's specific request (instead, just add songs to queue) if preference enabled.
    8. Add: a menu item to change the current Now Playing Screen in the Now Playing Screen
    9. Fix: crash when opening sleep timer dialog for first time.
    10. Fix: wrong color of context menu icon when multiple selection
    11. Development: clean up the code of Album Details Page, and begin to handle with the plan about redesigning
    12. Development: refactoring of plenty of historical codes, including ├ Background Music Service (possibly a HUGE number of potential bugs related to music playing) ├ Album Detail ├ Playlist Detail ├ Now Playing Screen / Main Player (about Song Cover Images) ├ File Scanning ├ Sort Order ├ List Appearance Popup Menu ├ Theme ├ Multi-selection └ Sliding Player Panel
    13. Development: cleanup Gradle build script and project structure

    Known Issues:

    1. Glitch Album Detail Transition Animation
    2. Multi-selection conflict in Artist Detail
    3. No path history for brand new File Page (currently)
    4. Glitch song cover in the main player (most circumstances were fix in beta02)
    5. When the app widgets on the launcher exist, application would crash and widgets won't be refreshed.(Workaround: Remove Phonograph Plus app widgets on the launcher)
    Source code(tar.gz)
    Source code(zip)
    Phonograph.Plus_0.3.0-rc01.apk(4.70 MB)
    Phonograph.Plus_0.3.0-rc01_mapping_a251ffe1.txt(5.11 MB)
  • preview_0.3-beta02(Aug 5, 2022)

  • preview_0.3-beta01(Aug 4, 2022)

    Beta01 2022.8.4

    Commit log: https://github.com/chr56/Phonograph_Plus/compare/v0.2.6.1...preview_0.3-beta01

    与前一预览版相比/Compared to the previous preview:

    CN

    • 移除 旧的文件夹视图
    • 变更 更新抽屉

    EN

    • Remove: the legacy Folders Page
    • Change: update drawers

    完整更新日志/Full changes log:

    ZH

    • 新增 全新的文件夹页面: ├ 与媒体库其他视图并列; ├ 从 MediaStore 读取歌曲文件(可大幅改善在 Android10 以上的性能), 当然也可以使用旧方式; ├ 尝试完全支持浏览外部可移除存储设备(如 SD 卡等); ├ 使用下拉刷新; └ 允许按照文件名,文件大小,添加日期,修改日期排序;
    • 移除 旧的文件夹页面, 并清理抽屉
    • 改进 重构播放列表详情, 简化编辑
    • 改进 "最常听的歌曲"计算方法
    • 新增 支持刷新并重新计算"最常听的歌曲"播放列表
    • 新增 专辑与艺术家详情中的 last.fm 链接 (注: 目前仍未失效, 但无维护计划)
    • 新增 设置项"保护播放列表不被肆意更改", 开启后,除非用户明确要求,应用将尽力保证当前播放队列不被清空或覆盖(仅加入队列)
    • 新增 添加菜单项, 可在 正在播放界面 中修改当前 正在播放界面 样式
    • 修复 第一次打开睡眠定时器崩溃
    • 修复 多选时菜单图标颜色错误
    • 改进 小幅度重构专辑页面
    • 开发 更新依赖(导致滚动条外观有所不同)
    • 开发 重构大量历史代码, 包括 ├ 后台音乐服务(可能存在大量潜在的与音乐播放相关错误) ├ 专辑详情 ├ 播放列表详情 ├ 正在播放界面 (歌曲封面图片) ├ 文件扫描 ├ 排序 ├ 列表控制菜单 ├ 主题控制(可能出现状态栏等色彩异常) ├ 多选模式(可能发生异常) └ 播放器托盘

    已知问题:

    • 专辑详情转场动画异常
    • 艺术家详情多选冲突
    • 文件视图路径现阶段不显示历史记录
    • 偶见主播放器歌曲封面错误
    • 点击歌曲过快(大约快于一秒一次)可能导致崩溃(已于alpha08中修复)

    EN

    • Add: a brand new Folders Page: ├ Among with other pages of the Library; ├ Read song files from MediaStore (significantly better performance on Android 10 and above), but you can still use old method to read song files; ├ (Try to) fully support browsing external removable storage devices (such as SD cards, etc.); ├ Use sweep-down-refresh; └ Allow sorting files by file name, file size, date added, date modified;
    • Remove: the legacy Folders Page, and update drawer
    • Improve: refactor Playlist Detail and simplify editing
    • Improve: calculation for "My Top Tracks"
    • Add: support for force to refresh and recalculate "My Top Tracks" playlists
    • Add: responding last.fm link in Artist&Album Detail(Note: Currently, wiki of last.fm is still working, there is no plan to maintain.).
    • Add: Preference Item "Please do NOT touch my playing queue arbitrarily", which would make app try not to clear or override playing queue without user's specific request (instead, just add songs to queue) if preference enabled.
    • Add: a menu item to change the current Now Playing Screen in the Now Playing Screen
    • Fix: crash when opening sleep timer dialog for first time.
    • Fix: wrong color of context menu icon when multiple selection
    • Improve: minor refactoring of the album page
    • Development: clean up the code of Album Details Page, and begin to handle with the plan about redesigning
    • Development: refactoring of plenty of historical codes, including ├ Background Music Service (possibly a HUGE number of potential bugs related to music playing) ├ Album Detail ├ Playlist Detail ├ Now Playing Screen / Player (about Song Cover Images) ├ File Scanning ├ Sort Order ├ List Appearance Popup Menu ├ Theme (may have bugs such as abnormal status bar color) ├ Multi-selection (may have glitch behavior) └ Sliding Player Panel

    Known Issues:

    • Glitch Album Detail Transition Animation
    • Multi-selection conflict in Artist Detail
    • No path history for brand new File Page (currently)
    • Glitch song cover in the main player (sometimes)
    • If you click items to add to queue too quickly (around clicking more than one time per second), the app might crash! (fixed in alpha08)
    Source code(tar.gz)
    Source code(zip)
    mapping.txt(4.92 MB)
    PhonographPlus_0.3-beta01.apk(4.55 MB)
  • preview_0.3-alpha10(Jul 26, 2022)

  • preview_0.3-alpha09(Jul 25, 2022)

  • preview_0.3-alpha08(Jul 25, 2022)

    Preview 2022.7.25

    CN 与前一预览版相比:

    • 修复: 因点击歌曲过快而导致的崩溃
    • 开发: 重构 MusicService
    • 开发: 正在播放歌曲界面歌曲封面使用 ViewPager2
    • 新增: 添加菜单项, 以支持在 正在播放界面 中修改当前 正在播放界面 样式

    注意: 从此版本起, MusicService 被重构, 也意味着存在大量潜在的与音乐播放相关错误, 如播放控件失效,当前正在播放的歌曲与ui不对应,通知异常,虚空播放等! 如有发现请尽快报告!

    EN Compared to the previous preview:

    • Fix: Crash caused by clicking songs too fast
    • Development: Refactor MusicService
    • Development: Use ViewPager2 for song cover in the playing song interface
    • New: Added a menu item to change the current Now Playing Screen in the Now Playing Screen

    Note: MusicService has been refactored since this version, this means there could be a HUGE number of potential bugs related to music playing, such as fails of playback controls, incorresponding current playing song with ui, notification glitches, ghostly playing... and crashes. If they occurs to you, please report this bugs as soon as you can!

    Source code(tar.gz)
    Source code(zip)
    mapping.txt(4.97 MB)
    PhonographPlus_0.3-alpha08-preview-release-unsigned-signed.apk(4.56 MB)
  • preview_0.3-alpha07(Jul 16, 2022)

    Preview 2022.7.16

    CN 与前一预览版相比:

    • 新增: 专辑与艺术家详情中的 last.fm 链接 (注: 目前任未失效, 但无维护计划)
    • 新增: 设置项"保护播放列表不被肆意更改", 开启后,除非用户明确要求,应用将尽力保证当前播放队列不被清空或覆盖(仅加入队列). (已知问题: 点击歌曲过快(大约快于一秒一次)可能导致崩溃)
    • 修复: 第一次打开睡眠定时器崩溃
    • 更新: 意大利语翻译(gdonisi)

    EN Compared to the previous preview:

    • Add: responding last.fm link in Artist&Album Detail(Note: Currently, wiki of last.fm is still working, there is no plan to maintain.).
    • Add: Preference Item "Please do NOT touch my playing queue arbitrarily", which would make app try not to clear or override playing queue without user's specific request (instead, just add songs to queue) if preference enabled. (Known issue: if you click items to add to queue too quickly (around clicking more than one time per second), the app might crash! And I'm working on it.)
    • Fix: crash when opening sleep timer dialog for first time.
    • Translation: update Italian (gdonisi)
    Source code(tar.gz)
    Source code(zip)
    mapping.txt(4.92 MB)
    PhonographPlus_0.3-alpha07-preview.apk(4.55 MB)
Owner
chr_56
chr_56
A modified version of Android's experimental StaggeredGridView. Includes own OnItemClickListener and OnItemLongClickListener, selector, and fixed position restore.

StaggeredGridView Introduction This is a modified version of Android's experimental StaggeredGridView. The StaggeredGridView allows the user to create

Maurycy Wojtowicz 1.7k Nov 28, 2022
Chandrasekar Kuppusamy 799 Nov 14, 2022
LicensesDialog is an open source library to display licenses of third-party libraries in an Android app.

LicensesDialog LicensesDialog is an open source library to display licenses of third-party libraries in an Android app. Download Download the latest R

PSDev 817 Dec 30, 2022
NekoX is an free and open source third-party Telegram client, based on Telegram-FOSS with features added.

NekoX NekoX is an free and open source third-party Telegram client, based on Telegram-FOSS with features added. We are no longer able to update versio

NekoX Dev 3.4k Dec 29, 2022
A third party app for android to manage your kindle.

Kindot - A third party app for android to manage your kindle.

null 5 Nov 23, 2021
The third-party Telegram android app.

The third-party Telegram android app.

NekoX Dev 3.5k Jan 8, 2023
Third-party native Jellyfin Android app

Findroid Findroid is third-party Android application for Jellyfin that provides a native user interface to browse and play movies and series. I am dev

Jarne Demeulemeester 513 Jan 1, 2023
Paper plugin for third-party AuthMe logins

Interactive Login Paper plugin that extends AuthMe (or AuthMeReloaded) with interactive third-party logins. Currently supports Discord as an external

Leonardo Giovanni Scur 0 Nov 25, 2021
A collection of Android build scripts for various third-party libraries and the tooling to build them

ndkports A collection of Android build scripts for various third-party libraries and the tooling to build them. If you're an Android app developer loo

reSIProcate project 0 Jan 17, 2022
Force enable gesture for third-party launcher in MIUI.

Fuck MIUI Gesture English Brief Enable this module to allow setting system gesture as nagation when using third party launcher. Strong Mode: Force usi

null 15 Dec 25, 2022
Let third-party launcher always get themed icon in MIUI (Maybe also works for other Android based OS).

English 简体中文 Introduction This module can let third party launcher always use icons with MIUI/Flyme Themes. It may also work with other custom Android

Strawing 5 Sep 18, 2022
Koguma a third-party tool for Tachiyomi

Koguma Koguma a tool that helps you create metadata for Tachiyomi's Local Source entries. The application uses AniList for getting metadata from onlin

Andreas 5 Nov 27, 2022
androidx window manager sample taken from the original source and modified for easy deploy and test

androidx-window-samples This project contains the WindowManager samples located in the androidx WM project location The goal of this project is to pro

Cesar Valiente 0 Nov 22, 2021
Xposed module to set the Signature Scheme for Android 30 >= to 1. This allows system apps to be modified

SetSignatureSchemeV1 Xposed module to set the Signature Scheme for Android 30+ to 1. This allows system apps to be modified. This module makes the met

null 4 Sep 20, 2022
Kotlin Multiplatform Mobile version of Tisdagsgolfen... yet another version.

TheCube in Kotlin Multiplatform Experimenting with KMM, and Kotlin, Jetpack, SwiftUI, and all the other new stuff... https://kotlinlang.org/docs/kmm-g

Kim Fransman 0 Dec 25, 2022
Starter code for the third independent project for Android Basics in Kotlin

Lunch Tray - Starter Code Starter code for the third independent project for Android Basics in Kotlin Introduction This is the starter code for the Lu

Dania Puertas 0 Nov 11, 2021
Starter code for the third independent project for Android Basics in Kotlin

Lunch Tray - Starter Code Starter code for the third independent project for And

Aaron Socas Gaspar 0 Dec 29, 2021
Third application for Big Brain Kotlin book, will be pokemon collection app

Big Brain Kotlin : Application #3 - PokemonHurddle Third application for Big Brain Kotlin book, will be pokemon collecting app 11285 Pokemon and becom

Chetan Gupta 3 May 12, 2022
The third project for Udacity's Android Nanodegree through Egypt FWD program

LoadApp In this project students will create an app to download a file from Internet by clicking on a custom-built button where: width of the button g

Ahmed Gamal 4 Sep 7, 2022