This is handy one :crying:
To do this you will need to play with 2 files (android.policy.jar and SecSettings.apk) and lib folder.
Please download ink effect resources with ALL default colors enabled from
here.
A. android.policy.jar file:
1. Copy the contents of “to android.policy.jar” folder.
2. Decompile
android.policy.jar by backsmali/smali program.
3. Go to classout\com\android\internal\policy\impl\sec\ folder and paste the content of “to android.policy.jar” folder there and accept overwriting.
4. Now compile (smali), the result will be class.dex file. Open the original android.policy.jar by WinRAR and drag drop class.dex file inside android.policy.jar file
Now push the new modified android.policy.jar to system\framework in your phone
B. SecSettings.apk file:
Decompile SecSettings.apk by APK-Multi tool
I. Image resource
Copy all images in “to res.drawable-xhdpi” folder to res\drawable-xhdpi
II. Adding lines to strings.xml resources
1. Go to res\values and open
strings.xml by notepad++
2. You should make sure that the following strings are all there; if some missing, please add before
</resources> line at the bottom:
Code:
<string name="ink_effect">Ink effect</string>
<string name="inkeffect_help_body">Show ink effect on the lock screen. If a live wallpaper is set on the lock screen, the ink effect will be disabled automatically</string>
<string name="ink_effect_color_none">None</string>
<string name="ink_effect_color_pink">Pink</string>
<string name="ink_effect_color_orange">Orange</string>
<string name="ink_effect_color_green">Green</string>
<string name="ink_effect_color_blue">Blue</string>
<string name="ink_effect_color_navy">Navy</string>
<string name="ink_effect_color_purple">Purple</string>
<string name="ink_effect_color_brown">Brown</string>
<string name="ink_effect_color_lightblue">Light Blue</string>
<string name="ink_effect_color_red">Red</string>
<string name="ink_effect_color_black">Black</string>
3. Now save your file.
III. Adding command line to Lockscreen_settings.xml <!-- if it is not there already
1. Go to \res\xml folder and open
lockscreen_settings.xml
2. Add these lines bellow ripple effect line (the blue color lines):
Code:
<CheckBoxPreference android:title="@string/ripple_effect" android:key="ripple_effect" android:summary="@string/ripple_effect_summary" />
[b][color=blue] <PreferenceScreen android:title="@string/ink_effect" android:key="ink_effect">
<intent android:targetPackage="com.android.settings" android:action="android.intent.action.MAIN" android:targetClass="com.android.settings.InkeffectPreview" />
</PreferenceScreen>[/b][/color]
3. Save changes.
IV. InkeffectPreview.smali
1. Copy the files InkeffectPreview.smali
2. Go to smali\com\android\settings and paste it there and accept changes.
Now this is the tricky part..!!
3. Open it and go to the following section:
Code:
:array_14
.array-data 0x4
0xb7t 0x3t 0x2t 0x7ft
0xb9t 0x3t 0x2t 0x7ft
0xcet 0x1t 0x2t 0x7ft
0xcat 0x1t 0x2t 0x7ft
0xc6t 0x1t 0x2t 0x7ft
0xcct 0x1t 0x2t 0x7ft
0xd0t 0x1t 0x2t 0x7ft
0xc8t 0x1t 0x2t 0x7ft
0xb5t 0x3t 0x2t 0x7ft
.end array-data
:array_2a
.array-data 0x4
0xb8t 0x3t 0x2t 0x7ft
0xbat 0x3t 0x2t 0x7ft
0xcft 0x1t 0x2t 0x7ft
0xcbt 0x1t 0x2t 0x7ft
0xc7t 0x1t 0x2t 0x7ft
0xcdt 0x1t 0x2t 0x7ft
0xd1t 0x1t 0x2t 0x7ft
0xc9t 0x1t 0x2t 0x7ft
0xb6t 0x3t 0x2t 0x7ft
.end array-data
4. You can see here several numbers... these are [ink_ nameofcolor] ids for array_14 and [ink_ nameofcolor _h] ids for array_2a in public.xml.
5. So you have to open
public.xml file from res\values folder
6. Search for colors ids you added… for start search for “
ink_none” for array_14 section and “
ink_none_h” for array_2a section.
We will start with “
ink_none”
The line will be something like this:
Code:
<public type="drawable" name="ink_none" id="0x7f0203b7" />
And if you noticed the
array_14 section in
InkeffectPreview.smali the first line will represent the
ink_none in
public.xml file. So we have to convert public.xml ids to array_14, SO PLEASE match to colors here:
Code:
<public type="drawable" name="ink_none" id="[B][COLOR="DarkOrchid"]0x7f[/COLOR][COLOR="DeepSkyBlue"]02[/COLOR][COLOR="Lime"]03[/COLOR][COLOR="Red"]b7[/COLOR][/B]" />
to in array_14 section:
Code:
[B]0x[COLOR="Red"]b7[/COLOR]t 0x[COLOR="Lime"]03[/COLOR]t 0x[COLOR="DeepSkyBlue"]02[/COLOR]t [COLOR="DarkOrchid"]0x7f[/COLOR]t[/B]
Yes that’s it!! Do the same for “
ink_none_h” id in array_2a section.
Code:
<public type="drawable" name="ink_none_h" id="[B][COLOR="DarkOrchid"]0x7f[/COLOR][COLOR="DeepSkyBlue"]02[/COLOR][COLOR="Lime"]03[/COLOR][COLOR="Red"]b8[/COLOR][/B]" />
to in array_2a section:
Code:
[B]0x[COLOR="Red"]b8[/COLOR]t 0x[COLOR="Lime"]03[/COLOR]t 0x[COLOR="DeepSkyBlue"]02[/COLOR]t [COLOR="DarkOrchid"]0x7f[/COLOR]t[/B]
7. Now we have finished editing InkeffectPreview.smali for the two none color ids (ink_none & ink_none_h)
8. Do the same for the rest of colors (the orders of array_14 & array_2a will represent the order of ink colors in your settings menu later on, so it must be in exact order). Also if went down you will see these colors orders as following (None, Pink, Orange, Green, Blue, Navy, Purple, Brown, Light blue, Red, Black) so again you need to keep same order while you are entering ids in array_14 and array_2a... so your arrays should be represented like this (imaginary for learning purpose only):
Code:
:array_14
.array-data 0x4
[B] ink_none
ink_pink
ink_orange
ink_green
ink_blue
ink_navy
ink_purple
ink_brown
ink_lightblue
ink_red
ink_black[/B]
.end array-data
:array_2a
.array-data 0x4
[B] ink_none_h
ink_pink_h
ink_orange_h
ink_green_h
ink_blue_h
ink_navy_h
ink_purple_h
ink_brown_h
ink_lightblue_h
ink_red_h
ink_black_h[/B]
.end array-data
9. We didn't finish yet, you have to link all ids inside InkeffectPreview.smali to correct ids in public.xml file (very annoying!!). Search for all ids inside InkeffectPreview.smali and change them to their corresponding ones inside public.xml. Here is the correct order of ids inside public.xml:
- inkeffect_preview
- ink_effect_color_none
- ink_effect_color_pink
- ink_effect_color_orange
- ink_effect_color_green
- ink_effect_color_blue
- ink_effect_color_navy
- ink_effect_color_purple
- ink_effect_color_brown
- ink_effect_color_lightblue
- ink_effect_color_red
- ink_effect_color_black
- preview_image
- ink_help
- mode_list
- inkeffect_preview_list_item
- button_layout
- inkeffect_menu
- menu_cancel --> (type="string")
- menu_save
- menu_cancel --> (type="id")
Here is example:
You searched for first id in InkeffectPreview.smali (all ids begin with 0x7f) and it was for example (0x7f090514) and you know this should represent "
inkeffect_preview" inside public.xml (according to the order above). So now open public.xml and search for "
inkeffect_preview", if you find it, it will have an id like (0x7f040072) copy this id and put it instead of that one inside InkeffectPreview.smali and that is it. Do the same for the rest of ids as well.
Pay attention to "menu_cancel" id, it has two variables inside public.xml, type="string" and type="id". So make sure you use the correct one in public.xml for the correct one in InkeffectPreview.smali !!!
10. Now save changes.
V. LockScreenSettings.smali
1. Copy the files LockScreenSettings.smali
2. Go to smali\com\android\settings and paste it there and accept changes.
3. Open it and go to the following section:
Code:
:array_10
.array-data 0x4
0x09t 0xft 0x9t 0x7ft
0x0at 0xft 0x9t 0x7ft
0x4ft 0xdt 0x9t 0x7ft
0x50t 0xdt 0x9t 0x7ft
0x52t 0xdt 0x9t 0x7ft
0x53t 0xdt 0x9t 0x7ft
0x54t 0xdt 0x9t 0x7ft
0x51t 0xdt 0x9t 0x7ft
0x0bt 0xft 0x9t 0x7ft
.end array-data
4. You can see here several numbers... these are [ink_effect_color_nameofcolor] ids in public.xml
5. The first line will represent the “
ink_effect_color_none” text in
public.xml file. So we have to convert public.xml ids to array_10, SO PLEASE match to colors here:
Code:
<public type="string" name="ink_effect_color_none" id="[B][COLOR="DarkOrchid"]0x7f[/COLOR][COLOR="DeepSkyBlue"]09[/COLOR][COLOR="Lime"]0f[/COLOR][COLOR="Red"]09[/COLOR][/B]" />
to in array_10:
Code:
[B]0x[COLOR="Red"]09[/COLOR]t 0x[COLOR="Lime"]0f[/COLOR]t 0x[COLOR="DeepSkyBlue"]09[/COLOR]t [COLOR="DarkOrchid"]0x7f[/COLOR]t[/B]
6. Now we finish editing LockScreenSettings.smali for the none color ids (
ink_effect_color_none) this will represent the text color name in settings menu later on, so make color orders as same as order in InkeffectPreview.smali or you will have wrong color to wrong text color name in settings menu!!
7. Do the same for the rest of colors.
8. Again we haven't finished yet, you have to link all ids inside LockScreenSettings.smali to correct ids in public.xml file (very annoying!!). Search for all ids inside LockScreenSettings.smali and change them to their corresponding ones inside public.xml. Here is the correct order of ids inside public.xml:
- lockscreen_settings
- information_ticker_only_weibo_summary
- ripple_effect_summary
- ripple_effect_second_summary
- wakeup_in_lockscreen_summary_nomotion
- information_ticker_weibo_summary
- information_ticker_facebook_summary
- message_network_unavailable
- motion_camera_short_cut_turn_on_motion
- motion_activation
- dlg_ok
- cancel --> (type="string")
Here is example:
You searched for first id in LockScreenSettings.smali (all ids begin with 0x7f) and it was for example (0x7f09071b) and you know this should represent "
lockscreen_settings" inside public.xml (according to the order above). So now open public.xml and search for "
lockscreen_settings", if you find it, it will have an id like (0x7f07003a) copy this id and put it instead of that one inside LockScreenSettings.smali and that is it. Do the same for the rest of ids as well.
Pay attention to "cancel" id inside public.xml, the one that we want is with type="string" variable. So make sure you use the correct one in public.xml for the one in LockScreenSettings.smali !!!
9. Now save changes.
NOW we finally finish editing SecSettings.apk. Recompile the finished project and push it to your phone.
C. lib folder
Just copy the content of “to lib folder” to lib folder in system\lib in your phone.
Adding new ink colors
You are not satisfied with ink colors you have, so why you don't create your own!!
Let's start:
I. Image resource
Create new images of two forms [
ink_nameofnewcolor.png] and [
ink_nameofnewcolor_h.png] for the new color that you want to add and put them inside res\drawable-xhdpi folder.
II. Adding lines to strings.xml resources
1. Open strings.xml file and add new line just before </resources>
Code:
<string name="ink_effect_color_nameofnewcolor">Name of the new color</string>
2. And again you need to recompile your SecSettings.apk to generate new ids in public.xml files automatically!!
THEN decompile the new SecSettings.apk (we will work on this one now, so delete the previous SecSettings.apk project to not cause confusion!!)
III. LockScreenSettings.smali
1. Find the following line:
This will represent how many ink colors you have in your ink colors list; here it is b (i.e 11 colors) so we will increase it to c (i.e 12 colors) and the line will be like this:
2. Now go to array_10 list and add new array for your new color:
Code:
:array_10
.array-data 0x4
0xact 0x0t 0x9t 0x7ft
0xact 0x0t 0x9t 0x7ft
0xact 0x0t 0x9t 0x7ft
0xact 0x0t 0x9t 0x7ft
0xact 0x0t 0x9t 0x7ft
0xact 0x0t 0x9t 0x7ft
0xact 0x0t 0x9t 0x7ft
0xact 0x0t 0x9t 0x7ft
0xact 0x0t 0x9t 0x7ft
0xact 0x0t 0x9t 0x7ft
0xact 0x0t 0x9t 0x7ft
[B][COLOR="Red"]0xact 0x0t 0x9t 0x7ft[/COLOR][/B] [COLOR="Green"]<!-- New array line[/COLOR]
.end array-data
.end method
3. And as usual link it to "
ink_effect_color_nameofnewcolor" id in public.xml
4. Save changes.
IV. InkeffectPreview.smali
1. Find the following line:
This will represent how many ink colors you have in your ink colors list; here it is b (i.e 11 colors) so we will increase it to c (i.e 12 colors) and the line will be like this:
2. Now go to array_14 list and array_2a and add new array for your new color:
Code:
.line 50
:array_14
.array-data 0x4
0xact 0x1t 0x2t 0x7ft
0xact 0x1t 0x2t 0x7ft
0xact 0x1t 0x2t 0x7ft
0xact 0x1t 0x2t 0x7ft
0xact 0x1t 0x2t 0x7ft
0xact 0x1t 0x2t 0x7ft
0xact 0x1t 0x2t 0x7ft
0xact 0x1t 0x2t 0x7ft
0xact 0x1t 0x2t 0x7ft
0xact 0x1t 0x2t 0x7ft
0xact 0x1t 0x2t 0x7ft
[B][COLOR="Red"]0xact 0x1t 0x2t 0x7ft[/COLOR][/B] [COLOR="Green"]<!-- New array line[/COLOR]
.end array-data
.line 62
:array_2a
.array-data 0x4
0xadt 0x1t 0x2t 0x7ft
0xadt 0x1t 0x2t 0x7ft
0xadt 0x1t 0x2t 0x7ft
0xadt 0x1t 0x2t 0x7ft
0xadt 0x1t 0x2t 0x7ft
0xadt 0x1t 0x2t 0x7ft
0xadt 0x1t 0x2t 0x7ft
0xadt 0x1t 0x2t 0x7ft
0xadt 0x1t 0x2t 0x7ft
0xadt 0x1t 0x2t 0x7ft
0xadt 0x1t 0x2t 0x7ft
[B][COLOR="Red"]0xadt 0x1t 0x2t 0x7ft[/COLOR][/B] [COLOR="Green"]<!-- New array line[/COLOR]
.end array-data
.end method
And as usual link the one in array_14 to "
ink_nameofnewcolor" id in public.xml and the one in array_2a to "
ink_nameofnewcolor_h" id in public.xml
3. Search down for this line:
And yes change b to c to be like this:
4. Now we need to add the new color to the list, so search for these lines:
Code:
sget-object v2, Lcom/android/settings/InkeffectPreview;->mInkcolorItem:[Ljava/lang/String;
const/16 v3, 0x[B][COLOR="Red"]a[/COLOR][/B]
invoke-virtual {p0}, Lcom/android/settings/InkeffectPreview;->getResources()Landroid/content/res/Resources;
move-result-object v4
const v5, [B][COLOR="Red"]0x7f090d55[/COLOR][/B]
invoke-virtual {v4, v5}, Landroid/content/res/Resources;->getString(I)Ljava/lang/String;
const-string v4, "[B][COLOR="Red"]Black[/COLOR][/B]"
aput-object v4, v2, v3
Copy these lines and paste them again bellow them, and change the red color values above to blue ones:
Code:
sget-object v2, Lcom/android/settings/InkeffectPreview;->mInkcolorItem:[Ljava/lang/String;
const/16 v3, 0x[B][COLOR="Blue"]b[/COLOR][/B] [COLOR="Green"]<!-- Next number in the list[/COLOR]
invoke-virtual {p0}, Lcom/android/settings/InkeffectPreview;->getResources()Landroid/content/res/Resources;
move-result-object v4
const v5, [B][COLOR="Blue"]0x7f??????[/COLOR][/B] [COLOR="Green"]<!-- id of "ink_effect_color_nameofnewcolor" in public.xml[/COLOR]
invoke-virtual {v4, v5}, Landroid/content/res/Resources;->getString(I)Ljava/lang/String;
const-string v4, "[B][COLOR="Blue"]Name of the new color[/COLOR][/B]" [COLOR="Green"]<!-- Name of the new color[/COLOR]
aput-object v4, v2, v3
5. Save changes.
V. CircleUnlockRippleRenderer.smali
This file is found in android.policy.jar and it determines the RGB value of the color when rendering.
1. Find the following line:
And yes change b to c to be like this:
2. Find these lines:
Code:
const/16 v4, 0x[B][COLOR="Red"]a[/COLOR][/B]
new-array v5, v7, [F
fill-array-data v5, :array_[B][COLOR="Red"]26a[/COLOR][/B]
aput-object v5, v3, v4
Copy these lines and paste them again bellow them, and change the red color values above to blue ones:
Code:
const/16 v4, 0x[B][COLOR="Blue"]b[/COLOR][/B] [COLOR="Green"]<!-- Next number in the list
[/COLOR]
new-array v5, v7, [F
fill-array-data v5, :array_[B][COLOR="Blue"]26b[/COLOR][/B] [COLOR="Green"]<!-- Next number in the list[/COLOR]
aput-object v5, v3, v4
3. As we have new array_26b, so we have to make RGB hex code for it. Find "
.end method" and add array data above it like this:
Code:
:array_26b [COLOR="Green"]<!-- Our new array[/COLOR]
.array-data 0x4
0x[B][COLOR="Purple"]00[/COLOR][/B]t 0x[B][COLOR="Purple"]00[/COLOR][/B]t 0x[B][COLOR="Purple"]00[/COLOR][/B]t 0x[B][COLOR="Purple"]00[/COLOR][/B]t [COLOR="Green"]<!-- Red value in hex[/COLOR]
0x[B][COLOR="Purple"]00[/COLOR][/B]t 0x[B][COLOR="Purple"]00[/COLOR][/B]t 0x[B][COLOR="Purple"]00[/COLOR][/B]t 0x[B][COLOR="Purple"]00[/COLOR][/B]t [COLOR="Green"]<!-- Green value in hex[/COLOR]
0x[B][COLOR="Purple"]00[/COLOR][/B]t 0x[B][COLOR="Purple"]00[/COLOR][/B]t 0x[B][COLOR="Purple"]00[/COLOR][/B]t 0x[B][COLOR="Purple"]00[/COLOR][/B]t [COLOR="Green"]<!-- Blue value in hex[/COLOR]
.end array-data
.end method
You need to change these values to their RGB Hex, Hex, Hex coding; but how!!
You need first to have RGB in decimal value (0-255) by using photoshop for example; then convert it to float value by dividing your decimal value on 255, then use
IEEE floating point calculator (for Windows) to convert the result to hex.
Example:
You open your photoshop and choose this color values (light blue):
Here R=0, G=159, B=180
For R=0, we need to divide it on 255, the result will be 0
For G=159, we need to divide it on 255, the result will be about 0.62353
For B=180, we need to divide it on 255, the result will be about 0.70588
Now open IEEE floating point calculator and enter these numbers to convert them to hex
So..
For R:
For G:
For B:
So if we return back to our array_26b the result will be like this:
Code:
:array_26b
.array-data 0x4
0x[B][COLOR="Purple"]00[/COLOR][/B]t 0x[B][COLOR="Purple"]00[/COLOR][/B]t 0x[B][COLOR="Purple"]00[/COLOR][/B]t 0x[B][COLOR="Purple"]00[/COLOR][/B]t [COLOR="Green"]<!-- Red value in hex[/COLOR]
0x[B][COLOR="Purple"]a9[/COLOR][/B]t 0x[B][COLOR="Purple"]9f[/COLOR][/B]t 0x[B][COLOR="Purple"]1f[/COLOR][/B]t 0x[B][COLOR="Purple"]3f[/COLOR][/B]t [COLOR="Green"]<!-- Green value in hex[/COLOR]
0x[B][COLOR="Purple"]8d[/COLOR][/B]t 0x[B][COLOR="Purple"]b4[/COLOR][/B]t 0x[B][COLOR="Purple"]34[/COLOR][/B]t 0x[B][COLOR="Purple"]3f[/COLOR][/B]t [COLOR="Green"]<!-- Blue value in hex[/COLOR]
.end array-data
.end method
And viola we finished!!
4. Save changes.
Now recompile both SecSettings.apk and android.policy.jar and push them to your device