ColorBlendr icon indicating copy to clipboard operation
ColorBlendr copied to clipboard

Allow full control in OneUI?

Open asoulless opened this issue 2 years ago • 50 comments

In Repainter, you can get full control over the system colors in Samsung's OneUI, even with Shizuku. The only caveat is that you have to restart the phone to apply the new colors. As for me, Repainter's full control still works on OneUI 5, though I have seen that it doesn't seem to work at all on OneUI 6. Is it possible to have the app get full control over the system palette on OneUI even with Shizuku like Repainter can?

asoulless avatar Feb 10 '24 11:02 asoulless

Unfortunately I don't have a Samsung device.

Mahmud0808 avatar Feb 10 '24 11:02 Mahmud0808

Oh, I see. Is there any way I can help?

asoulless avatar Feb 10 '24 11:02 asoulless

Probably not but thanks. It's easier to develop and test on device I own instead of building blindly and testing by others.

Maybe any dev who has oneui can help, it's an open source project, you are free to fork, modify and release your own build.

Mahmud0808 avatar Feb 10 '24 11:02 Mahmud0808

Samsung has a free remote testing service if you want to test on Samsung devices.

coggy9 avatar Feb 14 '24 08:02 coggy9

Samsung has a free remote testing service if you want to test on Samsung devices.

Can any of you provide SystemUI.apk and framework-res.apk of samsung oneui 6? Then I can maybe make some progress.

Mahmud0808 avatar Feb 14 '24 08:02 Mahmud0808

Sure. Here they are from a Z Fold 5 with the latest One UI 6.0 build.

coggy9 avatar Feb 14 '24 08:02 coggy9

Samsung has a free remote testing service if you want to test on Samsung devices.

I just created an account and it gave me 10 free credits. Now everytime I visit that link, it asks me to login, after login it reloads the test lab page and asks to login again, stuck in a login loop lol.

Mahmud0808 avatar Feb 14 '24 20:02 Mahmud0808

Samsung has a free remote testing service if you want to test on Samsung devices.

I just created an account and it gave me 10 free credits. Now everytime I visit that link, it asks me to login, after login it reloads the test lab page and asks to login again, stuck in a login loop lol.

I just created an account too and it worked for me. What browser do you use? i used firefox

muznyo avatar Feb 14 '24 20:02 muznyo

Chrome on windows 11. I will try again later in incognito mode. Probably that 10 credits won't be enough at all, but let's give it a shot.

Mahmud0808 avatar Feb 14 '24 20:02 Mahmud0808

Chrome on windows 11. I will try again later in incognito mode. Probably that 10 credits won't be enough at all, but let's give it a shot.

i think credits wont be a problem image

muznyo avatar Feb 14 '24 20:02 muznyo

Oh please no, repainter ruins the default one UI theme if you use it and you cannot use the phone's default color palette again until you factory reset. I really like that this app is only for apps color and not the system theme.

You don't need to factory reset Just stop the app again and the color palette will work again

Hussain96o avatar Feb 17 '24 15:02 Hussain96o

Oh please no, repainter ruins the default one UI theme if you use it and you cannot use the phone's default color palette again until you factory reset. I really like that this app is only for apps color and not the system theme.

You don't need to factory reset Just stop the app again and the color palette will work again

When I used repainter even after disabling it won't let the default color palette settings work.

Xisrr1 avatar Feb 17 '24 16:02 Xisrr1

Unfortunately I still can't login in Samsung Test Lab. It keeps looping the login screen, I login and go to choose a device, it again asks me to login, after login it sends me back to choose a device, then again login and it keeps going on forever.

Mahmud0808 avatar Feb 21 '24 07:02 Mahmud0808

hi, is there any way I can maybe help with/contribute to this? I don't have a lot of experience in Android development (or Shizuku), but I do have general programming knowledge/experience and I'd love if I could contribute to this somehow. I have the following hardware available to me:

  • Samsung Galaxy S23+ (primary phone, OneUI 6)
  • Samsung Galaxy A51 (old phone, OneUI 5)

(I'd like to avoid targeting my main phone first, since I rely on it and don't want things to break)

Can you give me steps for getting started with this (e.g. important Material You/SystemUI internals)?

Also, thank you for creating this project in the first place ❤️

RoootTheFox avatar Feb 28 '24 10:02 RoootTheFox

Can you give me steps for getting started with this (e.g. important Material You/SystemUI internals)?

I can send a test build which I was working on blindly without any Samsung device :") don't get hopes too high cause totally blind build and most probably won't work.

Mahmud0808 avatar Feb 28 '24 11:02 Mahmud0808

Sure! If I can help in any way that's great :3 I'll test it first on my old phone (OneUI 5) in case something breaks, if it works there I'll test on my main phone. I'm not home yet though, so I don't have access to my old phone atm (will be in a couple hours)

RoootTheFox avatar Feb 28 '24 11:02 RoootTheFox

Sure! If I can help in any way that's great :3 I'll test it first on my old phone (OneUI 5) in case something breaks, if it works there I'll test on my main phone. I'm not home yet though, so I don't have access to my old phone atm (will be in a couple hours)

~~ColorBlendr v1.2 Debug Samsung.zip~~ Here you go. Not in a hurry ofcourse.

Mahmud0808 avatar Feb 28 '24 12:02 Mahmud0808

Tried it on my Fold 5, and it crashes when tapping a color.

FATAL EXCEPTION: main
Process: com.drdisagree.colorblendr, PID: 24753
java.lang.ClassCastException: java.util.ArrayList cannot be cast to java.lang.Number
	at com.drdisagree.colorblendr.utils.MiscUtil.convertToIntArray(MiscUtil.java:65)
	at com.drdisagree.colorblendr.utils.OverlayManager.applyFabricatedColors(OverlayManager.java:221)
	at com.drdisagree.colorblendr.ui.fragments.ColorsFragment.lambda$addColorsToContainer$14(ColorsFragment.java:422)
	at com.drdisagree.colorblendr.ui.fragments.ColorsFragment.$r8$lambda$rieRlpZVMi0wGsq3TFo523NnDCQ(ColorsFragment.java:0)
	at com.drdisagree.colorblendr.ui.fragments.ColorsFragment$$ExternalSyntheticLambda8.onClick(R8$$SyntheticClass:0)
	at android.view.View.performClick(View.java:8043)
	at android.view.View.performClickInternal(View.java:8020)
	at android.view.View.-$$Nest$mperformClickInternal(Unknown Source:0)
	at android.view.View$PerformClick.run(View.java:31867)
	at android.os.Handler.handleCallback(Handler.java:958)
	at android.os.Handler.dispatchMessage(Handler.java:99)
	at android.os.Looper.loopOnce(Looper.java:230)
	at android.os.Looper.loop(Looper.java:319)
	at android.app.ActivityThread.main(ActivityThread.java:8913)
	at java.lang.reflect.Method.invoke(Native Method)
	at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:608)
	at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1103)

coggy9 avatar Feb 28 '24 13:02 coggy9

~~ColorBlendr v1.2.zip~~ What about this one?

Mahmud0808 avatar Feb 28 '24 13:02 Mahmud0808

just a small question - how (un)likely is it that this will break the system? (and if it does, would it be hard to recover without factory resetting?) asking mostly out of curiosity

RoootTheFox avatar Feb 28 '24 13:02 RoootTheFox

Doesn't crash, but nothing changes. I'll get a logcat later today if needed.

https://github.com/Mahmud0808/ColorBlendr/assets/352207/937f4455-8707-49f4-a390-09828f376560

coggy9 avatar Feb 28 '24 13:02 coggy9

@coggy9 iirc Repainter required you to reboot after applying on OneUI, I assume the same applies to ColorBlendr(?)

RoootTheFox avatar Feb 28 '24 13:02 RoootTheFox

You're correct, but even after rebooting, nothing changed.

coggy9 avatar Feb 28 '24 13:02 coggy9

Doesn't crash, but nothing changes. I'll get a logcat later today if needed.

Screen.Recording.20240228.074027.Colorblendr.mp4

@coggy9 for the actual Samsung UI/OneUI elements you need to use Samsung's Theme Park (Galaxy Store), can you try a Material You app? (e.g. Google Translate)

RoootTheFox avatar Feb 28 '24 13:02 RoootTheFox

Screenshot_20240228_075701_Translate Translate is a default blue color, but Gboard, which is set to use the dynamic colors, is still the pink color I selected before using ColorBlendr. 🤔

coggy9 avatar Feb 28 '24 13:02 coggy9

Well, I've hit my limit on what I can do here. Maybe a developer who has a Samsung device could pitch in and lend a hand with this.

Mahmud0808 avatar Feb 28 '24 14:02 Mahmud0808

as i said, I'd love to help, but I have no idea where to start.

RoootTheFox avatar Feb 28 '24 14:02 RoootTheFox

as i said, I'd love to help, but I have no idea where to start.

It's quite hard for me to explain as you said you don't have any experience with android application. You first need to find out which method is used for applying themes in OverlayManager class of framework. Then you need to study how exactly it applies colors, like what parameters are being used etc. Then you have to replicate the same behavior using Shizuku API. If it throws security warning, then you need root to call that method. I hope this will make it little bit more clear.

Mahmud0808 avatar Feb 28 '24 14:02 Mahmud0808

thanks! ill see if i can maybe get something working (although I doubt I will lmao)

RoootTheFox avatar Feb 28 '24 14:02 RoootTheFox

@Mahmud0808 I just tried the last build you posted, and it seems to have insufficient permissions to create a runtime resource overlay: Screenshot_20240229_095330_LogFox

text log

From my experiments, applying RROs through Galaxy Themes works fine (that is how 1st party themes get applied), so I have a theory on what could work:

  • generate overlay package*, install it to the system then:
  • settings put system THEMEKEY OVERLAYPKGNAME where THEMEKEY is any of the following:
    • current_sec_active_themepackage
    • current_sec_aod_theme_package
    • current_sec_appicon_theme_package
    • current_sec_home_theme_package
    • current_sec_iris_theme_package
    • current_sec_wallpaper_theme_package (not sure which of these actually work, or if they work at all, but OneUI sets those values so I'm assuming they work)
  • reboot (or reload theme overlays manually somehow?)

* i am not sure if this needs to be a full-blown OneUI theme (with RRO apks nested in assets/) or if it can be just a single overlay apk

I'm currently still in the process of reverse engineering and researching the OneUI theme format in an attempt to (more or less) fully understand how a OneUI theme package is structured, what keys/files/etc are needed and ways to apply them

(side note: the OneUI themes seem to have custom AndroidManifest.xml keys for which frameworks(?) are targeted, as well as some samsung-specific permission for themes (need to do more research on that))

RoootTheFox avatar Feb 29 '24 09:02 RoootTheFox