GithubHelp home page GithubHelp logo

abh80 / smart-edge Goto Github PK

View Code? Open in Web Editor NEW
195.0 10.0 27.0 2.23 MB

Alternative to dynamic island for android.

Home Page: https://f-droid.org/packages/com.abh80.smartedge/

License: MIT License

Java 97.99% JavaScript 2.01%
android dynamic-island java f-droid fdroid foss

smart-edge's Introduction

Smart Edge (Early Access) Build & Publish Debug APK

Alternative to dynamic island for android.

Downloads

Download Button

Donations

Help support the project by donating โค๏ธ

Donate with PayPal

Previews

smart-edge's People

Contributors

abh80 avatar actions-user avatar deepsourcebot avatar twlite avatar wovencoast avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

smart-edge's Issues

Bug when scrolling down

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)]

Preview doesn't show correctly

It's lovely, however, I have one probably. I have two selfie cams on the left edge of my screen, so I moved the dynamic island to the left covering the two cams and it looks brilliant but when I long press, the preview won't show correctly. Half of it is hidden.
Screenshot_20221009-214156_1

Crashed on scroll main page

[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)]

Bug when tweaking settings

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)]

Hide on lockscreen / notification panel

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.

Skipping Tracks

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

App crashes when phone call is picked up

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.

Crashing on start (2.1-alpha3)

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.

Add explanation of required permissions

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.

Ability to fine-tune postion/size

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.

e.g. dynamicSpot
dynamicSpot settings

please increase versionCode with each release

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!

Can't enable notification permissions.

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.

Unexpected crashing on POCO devices on first startup

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.

Feature discussion and planning

Users can ask for features to be implemented and give suggestion.

For bugs kindly open a new issue

Tasks :-

  • Implement Notifications suggested in #1
  • Add auto updater
  • Add customization such as custom height, position, width

Allow Y offset to be set in the other direction.

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.

Add option to disable when empty

Please add an option to disable the overlay when there are no icons displayed. It looks distracting and redundant. Please fix that.

crashes

on giving all the pemission it got crashed with toast message of log submitted

App crashes when attempting to enable plugin

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

Error when enabling notifications

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)]

Crash

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)]

bug report Error receiving broadcast Intent

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)]

Blocklist for apps where the island should be hidden on

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.

Crash when enable plugin

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

Crash Report possibly connected to Youtube Vanced

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)]

major bugs

  1. after clicking on "record audio from other app" option app crashed and after reopening app it shows black screen
  2. after allowing permission app doesn't invoke dynamic island we have to reopen app 2-3 times again then dynamic island appears

Crash on Scroll down

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)

Crash right after enabling on pixel 6

[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)]

Permission

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 ๐Ÿ™๐Ÿ‘

Making the animations much more fluid

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.

issues in new update

  1. Previously on clicking the dynamic island it zooms and displays to play, pause and forward and now in latest update while playing music and clicking on dynamic island it does not creates the zoom view.
  2. if we don't do any activity like playing music and click on dynamic island it doesn't show anything you can try adding things in this condition with image attached.

image

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.

request: open app on tap when opened

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 ๐Ÿฅฐ

In my device Notification not showing how to fix it

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.