[Android Software Development] sandy7:
SONY SMALL APPS FOR CM BASED ROM

1-STEP

decompile framework-res.apk

goto res/values/strings.xml and add these lines a the end

<string name="permlab_externalTaskSwitcher">Start as an external task switcher</string>
<string name="permdesc_externalTaskSwitcher">Allows the application to be an external task switcher replacing the native task switcher</string>
<string name="permlab_smallapp">Small application overlay</string>
<string name="permdesc_smallapp">Allows running movable small applications on top of other applications.</string>

open AndroidManifest.xml

and add the following lines

<permission android:name="android.permission.SYSTEM_ALERT_WINDOW" android:label="@string/permlab_systemAlertWindow" android:description="@string/permdesc_systemAlertWindow" android:protectionLevel="dangerous" android:permissionGroup="android.permission-group.SYSTEM_TOOLS" />

and

<permission android:name="com.sony.smallapp.permission.SMALLAPP" android:label="@string/permlab_smallapp" android:description="@string/permdesc_smallapp" android:protectionLevel="dangerous" />

like this shown in the pic..

done recompile the framework-res.apk

2-STEP

decompile android.policy.jar

and open com\android\internal\policy\impl\PhoneWindowManager.smal

and add the red marked lines

.field static final RECENT_APPS_BEHAVIOR_DISMISS_AND_SWITCH:I = 0x3

.field static final RECENT_APPS_BEHAVIOR_EXIT_TOUCH_MODE_AND_SHOW:I = 0x1

.field static final RECENT_APPS_BEHAVIOR_SHOW_OR_DISMISS:I = 0x0

.field static final SHOW_PROCESSES_ON_ALT_MENU:Z = false

[COLOR="red"].field static final SHOW_STARTING_ANIMATIONS:Z = true ----------------------[COLOR="Blue"][B]add this line if u dont have[/B][/COLOR]

.field static final SMALLAPP_LAYER:I = 0x3[/COLOR]

.field public static final SYSTEM_DIALOG_REASON_ASSIST:Ljava/lang/String; = "assist"

.field public static final SYSTEM_DIALOG_REASON_GLOBAL_ACTIONS:Ljava/lang/String; = "globalactions"

.field public static final SYSTEM_DIALOG_REASON_HOME_KEY:Ljava/lang/String; = "homekey"

.field public static final SYSTEM_DIALOG_REASON_KEY:Ljava/lang/String; = "reason"

.field public static final SYSTEM_DIALOG_REASON_RECENT_APPS:Ljava/lang/String; = "recentapps"

and find these lines in the same file.

[COLOR="Blue"].method public checkAddPermission(Landroid/view/WindowManager$LayoutParams;)I
.locals 4
.parameter "attrs"

.prologue
const/4 v2, 0x0

.line 1588
iget v1, p1, Landroid/view/WindowManager$LayoutParams;->type:I

.line 1590
.local v1, type:I
const/16 v3, 0x7d0

if-lt v1, v3, :cond_0

const/16 v3, 0xbb7

if-le v1, v3, :cond_1

.line 1622
:cond_0
:goto_0
return v2

.line 1594
:cond_1
const/4 v0, 0x0

.line 1595
.local v0, permission:Ljava/lang/String;
sparse-switch v1, :sswitch_data_0

.line 1614
const-string v0, "android.permission.INTERNAL_SYSTEM_WINDOW"

.line 1616
:goto_1
:sswitch_0
if-eqz v0, :cond_0

.line 1617
iget-object v3, p0, Lcom/android/internal/policy/impl/PhoneWindowManager;->mContext:Landroid/content/Context;

invoke-virtual {v3, v0}, Landroid/content/Context;->checkCallingOrSelfPermission(Ljava/lang/String;)I

move-result v3

if-eqz v3, :cond_0

.line 1619
const/4 v2, -0x8

goto :goto_0

.line 1611
:sswitch_1
const-string v0, "android.permission.SYSTEM_ALERT_WINDOW"

.line 1612
goto :goto_1

.line 1595
nop

:sswitch_data_0
.sparse-switch
0x7d2 -> :sswitch_1
0x7d3 -> :sswitch_1
0x7d5 -> :sswitch_0
0x7d6 -> :sswitch_1
0x7d7 -> :sswitch_1
0x7da -> :sswitch_1
0x7db -> :sswitch_0
0x7dd -> :sswitch_0
0x7e7 -> :sswitch_0
.end sparse-switch
.end method[/COLOR]

no is the funny part replace all the above blue marked lines with the below red marked lines

[COLOR="red"].method public checkAddPermission(Landroid/view/WindowManager$LayoutParams;)I
.locals 4
.parameter "attrs"

.prologue
const/4 v2, 0x0

.line 1115
iget v1, p1, Landroid/view/WindowManager$LayoutParams;->type:I

.line 1117
.local v1, type:I
const/16 v3, 0x7d0

if-lt v1, v3, :cond_0

const/16 v3, 0xbb7

if-le v1, v3, :cond_1

.line 1152
:cond_0
:goto_0
return v2

.line 1121
:cond_1
const/4 v0, 0x0

.line 1122
.local v0, permission:Ljava/lang/String;
sparse-switch v1, :sswitch_data_0

.line 1144
const-string v0, "android.permission.INTERNAL_SYSTEM_WINDOW"

.line 1146
:goto_1
:sswitch_0
if-eqz v0, :cond_0

.line 1147
iget-object v3, p0, Lcom/android/internal/policy/impl/PhoneWindowManager;->mContext:Landroid/content/Context;

invoke-virtual {v3, v0}, Landroid/content/Context;->checkCallingOrSelfPermission(Ljava/lang/String;)I

move-result v3

if-eqz v3, :cond_0

.line 1149
const/4 v2, -0x8

goto :goto_0

.line 1137
:sswitch_1
const-string v0, "android.permission.SYSTEM_ALERT_WINDOW"

.line 1138
goto :goto_1

.line 1141
:sswitch_2
const-string v0, "com.sony.smallapp.permission.SMALLAPP"

.line 1142
goto :goto_1

.line 1122
:sswitch_data_0
.sparse-switch
0x7d2 -> :sswitch_1
0x7d3 -> :sswitch_1
0x7d5 -> :sswitch_0
0x7d6 -> :sswitch_1
0x7d7 -> :sswitch_1
0x7da -> :sswitch_1
0x7db -> :sswitch_0
0x7dd -> :sswitch_0
0xbb5 -> :sswitch_2
0xbb6 -> :sswitch_2
.end sparse-switch
.end method[/COLOR]

save it..done now recompile the android.policy.jar

3-STEP

decompile framework.jar

add the whole sony folder (provided in the resources.zip attached below ) in classout/com

and recompile framework.jar

4-STEP

now u need to add some files in system/app

system/etc

system/framework

all the files are provided in resources.zip so just take them and add those files in ur flashable zip

5-STEP

once u flash the mod .u need an Slauncher or Small app launcher app to launch the small apps...download it from google play

so its done enjoy the smalls on cm based roms..

This is the screenshots from galaxy SL Running CM10 xperia themed..

some more SS of more small apps

ROM THREAD LINK with working small apps using this tutorial..

http://xdaforums.com/showthread.php?t=1862705

This method is tested working on most xperia devices and GALAXY SL and also on CM9 , CM10 , PA , PACMAN

Also tested working CM10.1

Here is a video from CM10.1

[YOUTUBE]CavE5i_vMeU[/YOUTUBE]

might also work on Stock based FW but not tested

CREDITS

c3ma138 (for help , resources , app)