Mahmud0808 / ColorBlendr

An Android app for customizing Material You colors on devices with Android 12+. It lets you tweak accent colors, background saturation, and more for a personalized look.
GNU General Public License v3.0
765 stars 14 forks source link

Allow full control in OneUI? #42

Open nekorubu opened 6 months ago

nekorubu commented 6 months ago

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?

Mahmud0808 commented 6 months ago

Unfortunately I don't have a Samsung device.

nekorubu commented 6 months ago

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

Mahmud0808 commented 6 months ago

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.

coggy9 commented 6 months ago

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

Mahmud0808 commented 6 months ago

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.

coggy9 commented 6 months ago

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

Mahmud0808 commented 6 months ago

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.

muznyo commented 6 months ago

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

Mahmud0808 commented 6 months ago

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.

muznyo commented 6 months ago

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

Hussain69o commented 6 months ago

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

Xisrr1 commented 6 months ago

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.

Mahmud0808 commented 6 months ago

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.

RoootTheFox commented 6 months ago

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:

(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 ❤️

Mahmud0808 commented 6 months ago

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.

RoootTheFox commented 6 months ago

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)

Mahmud0808 commented 6 months ago

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.

coggy9 commented 6 months ago

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)
Mahmud0808 commented 6 months ago

ColorBlendr v1.2.zip What about this one?

RoootTheFox commented 6 months ago

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

coggy9 commented 6 months ago

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

RoootTheFox commented 6 months ago

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

coggy9 commented 6 months ago

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

RoootTheFox commented 6 months ago

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)

coggy9 commented 6 months ago

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. 🤔

Mahmud0808 commented 6 months ago

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.

RoootTheFox commented 6 months ago

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

Mahmud0808 commented 6 months ago

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.

RoootTheFox commented 6 months ago

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

RoootTheFox commented 6 months ago

@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:

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

Mahmud0808 commented 6 months ago

generate overlay package*, install it to the system

This can't be done without root I guess. Also the log says it requires root. So last hope is samsung-specific permission for themes that if we can grant through Shizuku, it theoretically should work.

Let's see what you can find. Good luck. :) Sadly can't help much in this case without a samsung device (and don't want one either). :(

RoootTheFox commented 6 months ago

I've made paste with some (maybe) helpful information (overlay list and the settings values)

the overlays/theme were installed using Hex Installer and applied through Galaxy Themes (com.samsung.High_contrast_theme_II.plus is the package name for the generated theme)

I'll probably keep infodumping here when I find new things, maybe someone else finds them useful if I can't get anything to work.

jack5mikemotown commented 5 months ago

Sorry if I'm misunderstanding something here, should this app be working with OneUI 6 or is that what's being figured out here? I'm not seeing any color changes, running with shizuku. None of the UI in the app or elsewhere seems to update to reflect it

Virkkunen commented 5 months ago

Sorry if I'm misunderstanding something here, should this app be working with OneUI 6 or is that what's being figured out here? I'm not seeing any color changes, running with shizuku. None of the UI in the app or elsewhere seems to update to reflect it

This app does work with One UI 6, but in a limited way, it can only set the main colour and the style. If you've set your colour with Theme Park, then you might not see any changes in most apps, apart from some that weren't respecting the dynamic colour theme (eg. most Google apps, the new Beeper app).

zelodev commented 1 month ago

generate overlay package*, install it to the system

This can't be done without root I guess. Also the log says it requires root. So last hope is samsung-specific permission for themes that if we can grant through Shizuku, it theoretically should work.

Let's see what you can find. Good luck. :) Sadly can't help much in this case without a samsung device (and don't want one either). :(

to clarify this CAN be done without root. take a look at synergy