Alternative to dynamic island for android.
Help support the project by donating โค๏ธ
![Donate with PayPal](https://raw.githubusercontent.com/stefan-niedermann/paypal-donate-button/master/paypal-donate-button.png)
Alternative to dynamic island for android.
Home Page: https://f-droid.org/packages/com.abh80.smartedge/
License: MIT License
when i try to scroll down on the main menu the app crashes
[com.abh80.smartedge.activities.MainActivity$ItemDecoration.onDraw(MainActivity.java:261), androidx.recyclerview.widget.RecyclerView.onDraw(RecyclerView.java:4494), android.view.View.draw(View.java:22704), androidx.recyclerview.widget.RecyclerView.draw(RecyclerView.java:4429), android.view.View.updateDisplayListIfDirty(View.java:21579), android.view.ViewGroup.recreateChildDisplayList(ViewGroup.java:4512), android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:4485), android.view.View.updateDisplayListIfDirty(View.java:21535), android.view.ViewGroup.recreateChildDisplayList(ViewGroup.java:4512), android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:4485), android.view.View.updateDisplayListIfDirty(View.java:21535), android.view.ViewGroup.recreateChildDisplayList(ViewGroup.java:4512), android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:4485), android.view.View.updateDisplayListIfDirty(View.java:21535), android.view.ViewGroup.recreateChildDisplayList(ViewGroup.java:4512), android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:4485), android.view.View.updateDisplayListIfDirty(View.java:21535), android.view.ViewGroup.recreateChildDisplayList(ViewGroup.java:4512), android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:4485), android.view.View.updateDisplayListIfDirty(View.java:21535), android.view.ViewGroup.recreateChildDisplayList(ViewGroup.java:4512), android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:4485), android.view.View.updateDisplayListIfDirty(View.java:21535), android.view.ViewGroup.recreateChildDisplayList(ViewGroup.java:4512), android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:4485), android.view.View.updateDisplayListIfDirty(View.java:21535), android.view.ThreadedRenderer.updateViewTreeDisplayList(ThreadedRenderer.java:534), android.view.ThreadedRenderer.updateRootDisplayList(ThreadedRenderer.java:540), android.view.ThreadedRenderer.draw(ThreadedRenderer.java:616), android.view.ViewRootImpl.draw(ViewRootImpl.java:4525), android.view.ViewRootImpl.performDraw(ViewRootImpl.java:4245), android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:3374), android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:2179), android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:8787), android.view.Choreographer$CallbackRecord.run(Choreographer.java:1037), android.view.Choreographer.doCallbacks(Choreographer.java:845), android.view.Choreographer.doFrame(Choreographer.java:780), android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:1022), android.os.Handler.handleCallback(Handler.java:938), android.os.Handler.dispatchMessage(Handler.java:99), android.os.Looper.loopOnce(Looper.java:201), android.os.Looper.loop(Looper.java:288), android.app.ActivityThread.main(ActivityThread.java:7878), java.lang.reflect.Method.invoke(Native Method), com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:548), com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1029)]
Error log
Error receiving broadcast Intent { act=com.abh80.smartedge.SETTINGS_CHANGED flg=0x10 (has extras) } in com.abh80.smartedge.services.OverlayService$1@cca1fc4
version- 2.1 alpha5 fdroid
When the music is paused from a call, the app crashes with this error message
Attempt to invoke virtual method 'int android.media.session.PlaybackState.getState()' on a null object reference : [com.abh80.smartedge.plugins.MediaSession.MediaSessionPlugin.lambda$getActiveCurrent$0(MediaSessionPlugin.java:110), com.abh80.smartedge.plugins.MediaSession.MediaSessionPlugin$$ExternalSyntheticLambda9.test(Unknown Source:2), java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:184), java.util.ArrayList$ArrayListSpliterator.tryAdvance(ArrayList.java:1367), java.util.stream.ReferencePipeline.forEachWithCancel(ReferencePipeline.java:133), java.util.stream.AbstractPipeline.copyIntoWithCancel(AbstractPipeline.java:502), java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:489), java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:475), java.util.stream.FindOps$FindOp.evaluateSequential(FindOps.java:152), java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:236), java.util.stream.ReferencePipeline.findFirst(ReferencePipeline.java:482), com.abh80.smartedge.plugins.MediaSession.MediaSessionPlugin.getActiveCurrent(MediaSessionPlugin.java:110), com.abh80.smartedge.plugins.MediaSession.MediaSessionPlugin.lambda$onPlayerPaused$1$com-abh80-smartedge-plugins-MediaSession-MediaSessionPlugin(MediaSessionPlugin.java:173), com.abh80.smartedge.plugins.MediaSession.MediaSessionPlugin$$ExternalSyntheticLambda6.run(Unknown Source:2), android.os.Handler.handleCallback(Handler.java:938), android.os.Handler.dispatchMessage(Handler.java:99), android.os.Looper.loopOnce(Looper.java:226), android.os.Looper.loop(Looper.java:313), android.app.ActivityThread.main(ActivityThread.java:8751), java.lang.reflect.Method.invoke(Native Method), com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:571), com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1135)]
Looking through the code, MediaSessionPlugin.Java#L110, seems to be the line causing this issue.
[com.abh80.smartedge.activities.MainActivity$ItemDecoration.onDraw(MainActivity.java:261), androidx.recyclerview.widget.RecyclerView.onDraw(RecyclerView.java:4494), android.view.View.draw(View.java:23195), androidx.recyclerview.widget.RecyclerView.draw(RecyclerView.java:4429), android.view.View.updateDisplayListIfDirty(View.java:22062), android.view.ViewGroup.recreateChildDisplayList(ViewGroup.java:4513), android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:4486), android.view.View.updateDisplayListIfDirty(View.java:22018), android.view.ViewGroup.recreateChildDisplayList(ViewGroup.java:4513), android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:4486), android.view.View.updateDisplayListIfDirty(View.java:22018), android.view.ViewGroup.recreateChildDisplayList(ViewGroup.java:4513), android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:4486), android.view.View.updateDisplayListIfDirty(View.java:22018), android.view.ViewGroup.recreateChildDisplayList(ViewGroup.java:4513), android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:4486), android.view.View.updateDisplayListIfDirty(View.java:22018), android.view.ViewGroup.recreateChildDisplayList(ViewGroup.java:4513), android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:4486), android.view.View.updateDisplayListIfDirty(View.java:22018), android.view.ViewGroup.recreateChildDisplayList(ViewGroup.java:4513), android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:4486), android.view.View.updateDisplayListIfDirty(View.java:22018), android.view.ViewGroup.recreateChildDisplayList(ViewGroup.java:4513), android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:4486), android.view.View.updateDisplayListIfDirty(View.java:22018), android.view.ThreadedRenderer.updateViewTreeDisplayList(ThreadedRenderer.java:682), android.view.ThreadedRenderer.updateRootDisplayList(ThreadedRenderer.java:688), android.view.ThreadedRenderer.draw(ThreadedRenderer.java:786), android.view.ViewRootImpl.draw(ViewRootImpl.java:4579), android.view.ViewRootImpl.performDraw(ViewRootImpl.java:4290), android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:3517), android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:2286), android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:8948), android.view.Choreographer$CallbackRecord.run(Choreographer.java:1231), android.view.Choreographer$CallbackRecord.run(Choreographer.java:1239), android.view.Choreographer.doCallbacks(Choreographer.java:899), android.view.Choreographer.doFrame(Choreographer.java:832), android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:1214), android.os.Handler.handleCallback(Handler.java:942), android.os.Handler.dispatchMessage(Handler.java:99), android.os.Looper.loopOnce(Looper.java:201), android.os.Looper.loop(Looper.java:288), android.app.ActivityThread.main(ActivityThread.java:7898), java.lang.reflect.Method.invoke(Native Method), com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:548), com.android.internal.os.ZygoteInit.main(ZygoteInit.java:936)]
Error receiving broadcast Intent { act=com.abh80.smartedge.SETTINGS_CHANGED flg=0x10 (has extras) } in com.abh80.smartedge.services.OverlayService$1@231b157 : [android.app.LoadedApk$ReceiverDispatcher$Args.lambda$getRunnable$0$android-app-LoadedApk$ReceiverDispatcher$Args(LoadedApk.java:1800), android.app.LoadedApk$ReceiverDispatcher$Args$$ExternalSyntheticLambda0.run(Unknown Source:2), android.os.Handler.handleCallback(Handler.java:942), android.os.Handler.dispatchMessage(Handler.java:99), android.os.Looper.loopOnce(Looper.java:201), android.os.Looper.loop(Looper.java:288), android.app.ActivityThread.main(ActivityThread.java:7898), java.lang.reflect.Method.invoke(Native Method), com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:548), com.android.internal.os.ZygoteInit.main(ZygoteInit.java:936)]
When playing music and you get a notification the audio should move to another small bubble and stay like that until the notifications are cleared
Hi first really thankful for your handwork and beautiful app second I'll like to ask is it possible if you can remove Internet permission it will be nice ๐๐
After installing the latest releases (v2.1-alpha3 and alpha4) the app crashes on startup on a POCO X3 Pro using stock ROM, however using the first release (v2.1-alpha1) it works perfectly fine.
Here's a copy of the crash logs:
(v2.1-alpha3)
java.lang.RuntimeException: Unable to create service com.abh80.smartedge.services.UpdaterService: java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String android.content.Context.getPackageName()' on a null object reference at android.app.ActivityThread.handleCreateService(ActivityThread.java:4648) at android.app.ActivityThread.access$1800(ActivityThread.java:276) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2149) at android.os.Handler.dispatchMessage(Handler.java:106) at android.os.Looper.loopOnce(Looper.java:210) at android.os.Looper.loop(Looper.java:299) at android.app.ActivityThread.main(ActivityThread.java:8261) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:556) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1045) Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String android.content.Context.getPackageName()' on a null object reference at android.content.ContextWrapper.getPackageName(ContextWrapper.java:162) at com.abh80.smartedge.services.UpdaterService.<init>(UpdaterService.java:117) at java.lang.Class.newInstance(Native Method) at android.app.AppComponentFactory.instantiateService(AppComponentFactory.java:129) at androidx.core.app.CoreComponentFactory.instantiateService(CoreComponentFactory.java:75) at android.app.ActivityThread.handleCreateService(ActivityThread.java:4617) ... 9 more
(v2.1-alpha4)
java.lang.RuntimeException: Unable to create service com.abh80.smartedge.services.UpdaterService: java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String android.content.Context.getPackageName()' on a null object reference at android.app.ActivityThread.handleCreateService(ActivityThread.java:4648) at android.app.ActivityThread.access$1800(ActivityThread.java:276) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2149) at android.os.Handler.dispatchMessage(Handler.java:106) at android.os.Looper.loopOnce(Looper.java:210) at android.os.Looper.loop(Looper.java:299) at android.app.ActivityThread.main(ActivityThread.java:8261) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:556) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1045) Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String android.content.Context.getPackageName()' on a null object reference at android.content.ContextWrapper.getPackageName(ContextWrapper.java:162) at com.abh80.smartedge.services.UpdaterService.<init>(UpdaterService.java:117) at java.lang.Class.newInstance(Native Method) at android.app.AppComponentFactory.instantiateService(AppComponentFactory.java:129) at androidx.core.app.CoreComponentFactory.instantiateService(CoreComponentFactory.java:75) at android.app.ActivityThread.handleCreateService(ActivityThread.java:4617) ... 9 more
I checked both crash logs and they both look the same in both instances, even I tried to grant all the necessary permissions to both versions of the app without success, as mentioned before only version 2.1-alpha1 seems to work on my device.
Please add an option to disable the overlay when there are no icons displayed. It looks distracting and redundant. Please fix that.
It would be really nice, if I could delete notifications without it opening the corresponding app
I was wondering if it would be possible to maybe support devices that have the camera on the top left instead of the top center of the screen?
although it works fine but i want to know that
why this app uses
It cannot work on landscape mode ๐
java.lang.NullPointerException: Attempt to read from field 'java.lang.String com.abh80.smartedge.utils.SettingStruct.category' on a null object reference
at com.abh80.smartedge.activities.MainActivity$ItemDecoration.onDraw(MainActivity.java:269)
at androidx.recyclerview.widget.RecyclerView.onDraw(RecyclerView.java:4668)
at android.view.View.draw(View.java:22704)
at androidx.recyclerview.widget.RecyclerView.draw(RecyclerView.java:4603)
at android.view.View.updateDisplayListIfDirty(View.java:21579)
at android.view.ViewGroup.recreateChildDisplayList(ViewGroup.java:4512)
at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:4485)
at android.view.View.updateDisplayListIfDirty(View.java:21535)
at android.view.ViewGroup.recreateChildDisplayList(ViewGroup.java:4512)
at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:4485)
at android.view.View.updateDisplayListIfDirty(View.java:21535)
at android.view.ViewGroup.recreateChildDisplayList(ViewGroup.java:4512)
at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:4485)
at android.view.View.updateDisplayListIfDirty(View.java:21535)
at android.view.ViewGroup.recreateChildDisplayList(ViewGroup.java:4512)
at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:4485)
at android.view.View.updateDisplayListIfDirty(View.java:21535)
at android.view.ViewGroup.recreateChildDisplayList(ViewGroup.java:4512)
at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:4485)
at android.view.View.updateDisplayListIfDirty(View.java:21535)
at android.view.ViewGroup.recreateChildDisplayList(ViewGroup.java:4512)
at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:4485)
at android.view.View.updateDisplayListIfDirty(View.java:21535)
at android.view.ViewGroup.recreateChildDisplayList(ViewGroup.java:4512)
at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:4485)
at android.view.View.updateDisplayListIfDirty(View.java:21535)
at android.view.ThreadedRenderer.updateViewTreeDisplayList(ThreadedRenderer.java:534)
at android.view.ThreadedRenderer.updateRootDisplayList(ThreadedRenderer.java:540)
at android.view.ThreadedRenderer.draw(ThreadedRenderer.java:616)
at android.view.ViewRootImpl.draw(ViewRootImpl.java:4525)
at android.view.ViewRootImpl.performDraw(ViewRootImpl.java:4245)
at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:3374)
at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:2179)
at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:8787)
at android.view.Choreographer$CallbackRecord.run(Choreographer.java:1037)
at android.view.Choreographer.doCallbacks(Choreographer.java:845)
at android.view.Choreographer.doFrame(Choreographer.java:780)
at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:1022)
at android.os.Handler.handleCallback(Handler.java:938)
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:7842)
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:1003)
not sure what caused this, its happened a few times seemingly at random (to me)
Attempt to invoke virtual method 'void com.abh80.smartedge.plugins.BasePlugin.onBindComplete()' on a null object reference : [com.abh80.smartedge.services.OverlayService.bindPlugin(OverlayService.java:524), com.abh80.smartedge.services.OverlayService.dequeue(OverlayService.java:321), com.abh80.smartedge.plugins.MediaSession.MediaSessionPlugin.shouldRemoveOverlay(MediaSessionPlugin.java:230), com.abh80.smartedge.plugins.MediaSession.MediaSessionPlugin.closeOverlay(MediaSessionPlugin.java:96), com.abh80.smartedge.plugins.MediaSession.MediaSessionPlugin$1.run(MediaSessionPlugin.java:75), android.os.Handler.handleCallback(Handler.java:938), android.os.Handler.dispatchMessage(Handler.java:99), android.os.Looper.loopOnce(Looper.java:201), android.os.Looper.loop(Looper.java:288), android.app.ActivityThread.main(ActivityThread.java:7870), java.lang.reflect.Method.invoke(Native Method), com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:548), com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1003)]
[com.abh80.smartedge.activities.MainActivity$ItemDecoration.onDraw(MainActivity.java:261), androidx.recyclerview.widget.RecyclerView.onDraw(RecyclerView.java:4494), android.view.View.draw(View.java:22808), androidx.recyclerview.widget.RecyclerView.draw(RecyclerView.java:4429), android.view.View.updateDisplayListIfDirty(View.java:21662), android.view.ViewGroup.recreateChildDisplayList(ViewGroup.java:4588), android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:4561), android.view.View.updateDisplayListIfDirty(View.java:21619), android.view.ViewGroup.recreateChildDisplayList(ViewGroup.java:4588), android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:4561), android.view.View.updateDisplayListIfDirty(View.java:21619), android.view.ViewGroup.recreateChildDisplayList(ViewGroup.java:4588), android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:4561), android.view.View.updateDisplayListIfDirty(View.java:21619), android.view.ViewGroup.recreateChildDisplayList(ViewGroup.java:4588), android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:4561), android.view.View.updateDisplayListIfDirty(View.java:21619), android.view.ViewGroup.recreateChildDisplayList(ViewGroup.java:4588), android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:4561), android.view.View.updateDisplayListIfDirty(View.java:21619), android.view.ViewGroup.recreateChildDisplayList(ViewGroup.java:4588), android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:4561), android.view.View.updateDisplayListIfDirty(View.java:21619), android.view.ViewGroup.recreateChildDisplayList(ViewGroup.java:4588), android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:4561), android.view.View.updateDisplayListIfDirty(View.java:21619), android.view.ThreadedRenderer.updateViewTreeDisplayList(ThreadedRenderer.java:534), android.view.ThreadedRenderer.updateRootDisplayList(ThreadedRenderer.java:540), android.view.ThreadedRenderer.draw(ThreadedRenderer.java:620), android.view.ViewRootImpl.draw(ViewRootImpl.java:4743), android.view.ViewRootImpl.performDraw(ViewRootImpl.java:4447), android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:3529), android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:2305), android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:9133), android.view.Choreographer$CallbackRecord.run(Choreographer.java:1232), android.view.Choreographer.doCallbacks(Choreographer.java:1029), android.view.Choreographer.doFrame(Choreographer.java:934), android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:1217), android.os.Handler.handleCallback(Handler.java:938), android.os.Handler.dispatchMessage(Handler.java:99), android.os.Looper.loopOnce(Looper.java:233), android.os.Looper.loop(Looper.java:344), android.app.ActivityThread.main(ActivityThread.java:8212), java.lang.reflect.Method.invoke(Native Method), com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:584), com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1034)]
Please add an option so that users can tap on the according icon to pause the music/video.
Bug when randomly tweaking location and size.
[android.app.LoadedApk$ReceiverDispatcher$Args.lambda$getRunnable$0$android-app-LoadedApk$ReceiverDispatcher$Args(LoadedApk.java:1800), android.app.LoadedApk$ReceiverDispatcher$Args$$ExternalSyntheticLambda0.run(Unknown Source:2), android.os.Handler.handleCallback(Handler.java:942), android.os.Handler.dispatchMessage(Handler.java:99), android.os.Looper.loopOnce(Looper.java:201), android.os.Looper.loop(Looper.java:288), android.app.ActivityThread.main(ActivityThread.java:7893), java.lang.reflect.Method.invoke(Native Method), com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:548), com.android.internal.os.ZygoteInit.main(ZygoteInit.java:936)]
I installed the APK from GitHub, but when I try to enable the permissions, it says I can't enable notification permissions because of security reasons.
I'm on my Google Pixel 4a running Android 13.
I've noticed that the animation is missing for this screen size
Originally posted by @abdelmohcen in #1 (comment)
While there are already 5 releases listed, the APK at the last one still identifies with versionCode: 1
. As versionCode
is used by Android internally to keep versions apart, it would not consider newer releases as newer versions, and thus not consider them for update.
Can you please increase this integer with each new release? How much is up to you as long as the new one is higher (some use it as "release counter", others prefer a timestamp or have the versionName
reflected e.g. by a calculation like major * 10000 + minor * 100 + patch
, ie. 20103
for a v2.1.3). Thanks in advance!
if user click on dynamic island and no music is playing or no active notification are there then u can display as displayed in image.
Error receiving broadcast Intent { act=com.abh80.smartedge.SETTINGS_CHANGED flg=0x10 (has extras) } in com.abh80.smartedge.services.OverlayService$1@d0a9680 : [android.app.LoadedApk$ReceiverDispatcher$Args.lambda$getRunnable$0$LoadedApk$ReceiverDispatcher$Args(LoadedApk.java:1816), android.app.LoadedApk$ReceiverDispatcher$Args$$ExternalSyntheticLambda0.run(Unknown Source:2), android.os.Handler.handleCallback(Handler.java:938), android.os.Handler.dispatchMessage(Handler.java:99), android.os.Looper.loopOnce(Looper.java:226), android.os.Looper.loop(Looper.java:313), android.app.ActivityThread.main(ActivityThread.java:8751), java.lang.reflect.Method.invoke(Native Method), com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:571), com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1135)]
My best guess is something somewhere inside of onReceive is throwing an error
Pixel 6 with latest v2.2.1, can unfortunately provide no details, have not exactly witnessed the crash:
Error receiving broadcast Intent { act=com.abh80.smartedge.NOTIFICATION_POSTED flg=0x10 (has extras) } in com.abh80.smartedge.plugins.Notification.NotificationPlugin$1@b56dcbb : [android.app.LoadedApk$ReceiverDispatcher$Args.lambda$getRunnable$0$android-app-LoadedApk$ReceiverDispatcher$Args(LoadedApk.java:1800), android.app.LoadedApk$ReceiverDispatcher$Args$$ExternalSyntheticLambda0.run(Unknown Source:2), android.os.Handler.handleCallback(Handler.java:942), android.os.Handler.dispatchMessage(Handler.java:99), android.os.Looper.loopOnce(Looper.java:201), android.os.Looper.loop(Looper.java:288), android.app.ActivityThread.main(ActivityThread.java:7898), java.lang.reflect.Method.invoke(Native Method), com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:548), com.android.internal.os.ZygoteInit.main(ZygoteInit.java:936)]
I inverted the tap/hold, as often in want to skip track or similar.
When i tap to open it would be nice to be able to tap again on the opened 'modal'(?) to open the music app.
Thanks for the nice app ๐ฅฐ
Thanks for the great app! With the latest V2.1-alpha8 on Pixel 6 I got the following crash report. Possibly this is related to Youtube Vanced, which was the last app used.
Attempt to invoke virtual method 'java.lang.String android.media.MediaMetadata.getString(java.lang.String)' on a null object reference : [com.abh80.smartedge.plugins.MediaSession.MediaCallback.onPlaybackStateChanged(MediaCallback.java:53), android.media.session.MediaController$MessageHandler.handleMessage(MediaController.java:1233), android.os.Handler.dispatchMessage(Handler.java:106), android.os.Looper.loopOnce(Looper.java:201), android.os.Looper.loop(Looper.java:288), android.app.ActivityThread.main(ActivityThread.java:7898), java.lang.reflect.Method.invoke(Native Method), com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:548), com.android.internal.os.ZygoteInit.main(ZygoteInit.java:936)]
Even though on most games the dynamic island is hidden from view, on some games the dynamic island blocks some of the game itself, which is less than ideal.
It would be pretty useful to have the smart edge overlay not show up on certain user defined applications, not just with games.
When this option is checked and you change size or position afterwards, long press still expands it when it should not.
Device : Pixel 3a, GrapheneOS (Android 12)
on giving all the pemission it got crashed with toast message of log submitted
Currently you can only offset Y direction so that edge goes down. I would like to be able to allow it to go at least slightly up, so that it would "stick" to top, because default Y looks strange (for me) with notch on my phone.
Error receiving broadcast Intent { act=com.brightmaster.dynamic_fourteen_pro.NOTIFICATION_POSTED flg=0x80010 (has extras) } in com.brightmaster.dynamic_fourteen_pro.plugins.Notification.NotificationPlugin$1@e65cc7 : [android.app.LoadedApk
When music is playing and next song button is clicked song changes but not name or album art. Edit: it works most of the time but if your skipping tracks a bit faster or press pause and play fast on certain tracks it does not work (but this is only occasional)
Edit : Also, the setting "open music app on touch when expanded" does not work.
Edit : if music is playing and app is closed without music bring pauses smart edge crashes some times
Either in-app when granting these permissions and/or f-droid description. The more detailed the better obviously.
Privacy centered users like to know why certain permissions that seems intrusive are in fact necessary for the app to run.
Users can ask for features to be implemented and give suggestion.
For bugs kindly open a new issue
Tasks :-
In dynamicSpot, you have the possibility to adjust the size/position of dynamic island pixel by pixel thanks to buttons and not only slider and know the actual value of it.
It would be nice to have this in Smart Edge, where it's difficult to have the pixel perfect size with the slider only.
If this is gonna be a dynamic island kinda thing, then the animations can be much more fluid.
Really appreciate this effort from your side to develop this app.
I love that it's on GitHub and not on some obscure website.
App (2.1-alpha3) instantly crashes when starting on my Poco X3 Pro with the latest build of LineageOS 19.1 rom
Very nice app and the only one on F-Droid implementing the dynamic island notification.
They're unnecessary when using the f-droid build
Please, add an option to hide the overlay when lockscreen is showing or when notification panel is expanded.
Since that music controls already exist on these system screens, the pill becomes redundant.
A declarative, efficient, and flexible JavaScript library for building user interfaces.
๐ Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. ๐๐๐
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google โค๏ธ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.