[Galaxy S 4 i9505 Android Development] maanz "L":
Hello guys..

I want to share the sense recent app which I mod for my I9505 (XXUBMF8).

This should be able to apply on all other firmwares on the I9505 (not tested yet).

but first, you need:

1. Apktool

2. Some knowledge about compiling and decompiling

3. 7zip

4. notepad++

5. backsmali

P.S. I won't make mods for any other ROM versions. I've provided enough info.

For Dev cookers, you are allowed to use this mod in your project. Give proper credits and thanks.

Let's get started...

1. Decompile framework-res.apk,

-

/res/values/dimens.xml

: change thumbnail size to:

You can change the dip values the way you want.

Compile back as this is the only change needs to be done in framework-res.apk.

2. Decompile SystemUI.apk,

-

/res/values/bools.xml

and make the changes below:

-

/res/values/strings.xml

:

add this line at the of the file

--

/res/values/ids.xml

:

add this line at the of the file

-

/res/layout/status_bar_no_recent_apps.xml

:

<TextView android:textSize="20.0dip" android:textColor="@*android:color/[COLOR="Red"]white[/COLOR]" android:gravity="center_horizontal" android:layout_gravity="center" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/status_bar_no_recent_apps" />

-

/res/layout/status_bar_expanded_header.xml

:

<LinearLayout android:gravity="center_vertical" android:orientation="horizontal" android:background=[COLOR="Red"]"#ff000000"[/COLOR] android:layout_width="fill_parent" android:layout_height="wrap_content" android:baselineAligned="false"

-

/res/layout/status_bar_recent_item.xml

and make the following changes:

<?xml version="1.0" encoding="utf-8"?>
[COLOR="Red"]<FrameLayout android:paddingTop="@dimen/status_bar_recents_item_padding" android:paddingBottom="@dimen/status_bar_recents_item_padding" android:layout_width="fill_parent" android:layout_height="wrap_content"
xmlns:android="http://schemas.android.com/apk/res/android">
<RelativeLayout android:layout_gravity="center_vertical" android:id="@id/recent_item" android:paddingTop="@*android:dimen/status_bar_height" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerInParent="true">
<FrameLayout android:id="@id/app_thumbnail" android:background="#00000000" android:visibility="invisible" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginLeft="15.0dip" android:layout_marginRight="15.0dip" android:foreground="#00000000" android:layout_centerInParent="true">
<ImageView android:id="@id/app_thumbnail_image" android:layout_width="192.0dip" android:layout_height="305.0dip" android:layout_marginTop="15.0dip" android:layout_marginBottom="15.0dip" />
</FrameLayout>
<ImageView android:gravity="center_horizontal" android:id="@id/app_icon" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_marginTop="405.0dip" android:scaleType="centerInside" android:adjustViewBounds="true" android:maxWidth="@dimen/status_bar_recents_app_icon_max_width" android:maxHeight="@dimen/status_bar_recents_app_icon_max_height" />
<TextView android:textSize="@dimen/status_bar_recents_app_label_text_size" android:textColor="@color/status_bar_recents_app_label_color" android:ellipsize="marquee" android:gravity="center_horizontal" android:id="@id/app_label" android:paddingTop="0.0dip" android:fadingEdge="none" android:fadingEdgeLength="0.0dip" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_marginTop="3.0dip" android:scrollHorizontally="true" android:singleLine="true" android:layout_below="@id/app_icon" android:layout_alignParentBottom="true" />
<TextView android:textSize="@dimen/status_bar_recents_app_description_text_size" android:ellipsize="marquee" android:id="@id/app_description" android:fadingEdge="horizontal" android:fadingEdgeLength="@dimen/status_bar_recents_text_fading_edge_length" android:layout_width="@dimen/status_bar_recents_app_label_width" android:layout_height="wrap_content" android:layout_marginLeft="@dimen/status_bar_recents_app_label_left_margin" android:layout_marginTop="40.0dip" android:scrollHorizontally="true" android:singleLine="true" android:layout_below="@id/app_label" android:layout_alignParentBottom="true" />[/COLOR]
</RelativeLayout>
</FrameLayout>

-

/res/layout/tw_status_bar_recent_panel.xml

:

xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:systemui="http://schemas.android.com/apk/res/com.android.systemui">
[COLOR="Red"]<FrameLayout android:id="@id/recents_bg_protect" android:background="@drawable/status_bar_recents_background" android:layout_width="fill_parent" android:layout_height="fill_parent" android:layout_centerVertical="true">
<ImageView android:gravity="center" android:layout_width="fill_parent" android:layout_height="fill_parent" android:layout_marginTop="0.0dip" android:src="@drawable/status_bar_recents_background" />
<com.android.systemui.recent.RecentsHorizontalScrollView android:layout_gravity="bottom|left|center" android:id="@id/recents_container" android:scrollbars="none" android:fadingEdge="none" android:fadingEdgeLength="0.0dip" android:clipChildren="false" android:clipToPadding="false" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_marginRight="0.0dip" android:stackFromBottom="true" android:divider="@null">
<LinearLayout android:orientation="horizontal" android:id="@id/recents_linear_layout" android:clipChildren="false" android:clipToPadding="false" android:layout_width="fill_parent" android:layout_height="wrap_content" />
</com.android.systemui.recent.RecentsHorizontalScrollView>
<TextView android:textSize="20.0dip" android:textColor="@color/status_bar_recents_app_label_color" android:gravity="center_horizontal" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_marginTop="5.0dip" android:text="@string/recent_apps_title" />
<ImageView android:layout_gravity="top|right|center" android:id="@id/recents_clear" android:clickable="true" android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@drawable/ic_notify_clear" />[/COLOR]
<LinearLayout android:layout_gravity.......................

-

/res/layout-land/status_bar_recent_item.xml

:

<?xml version="1.0" encoding="utf-8"?>
[COLOR="Red"]<FrameLayout android:paddingLeft="@dimen/status_bar_recents_item_padding" android:paddingRight="@dimen/status_bar_recents_item_padding" android:layout_width="wrap_content" android:layout_height="fill_parent"
xmlns:android="http://schemas.android.com/apk/res/android">
<RelativeLayout android:layout_gravity="center_vertical" android:id="@id/recent_item" android:paddingTop="@*android:dimen/status_bar_height" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerInParent="true">
<FrameLayout android:id="@id/app_thumbnail" android:background="#00000000" android:visibility="invisible" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginLeft="15.0dip" android:layout_marginRight="15.0dip" android:foreground="#00000000" android:layout_centerInParent="true">
<ImageView android:id="@id/app_thumbnail_image" android:paddingTop="40.0dip" android:layout_width="192.0dip" android:layout_height="305.0dip" android:scaleType="centerInside" />
</FrameLayout>
<ImageView android:gravity="center_horizontal" android:id="@id/app_icon" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_marginTop="225.0dip" android:scaleType="centerInside" android:adjustViewBounds="true" android:maxWidth="20.0dip" android:maxHeight="20.0dip" />
<TextView android:textSize="12.0dip" android:textColor="@color/status_bar_recents_app_label_color" android:ellipsize="marquee" android:gravity="center_horizontal" android:id="@id/app_label" android:paddingTop="0.0dip" android:fadingEdge="none" android:fadingEdgeLength="0.0dip" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_marginTop="0.0dip" android:scrollHorizontally="true" android:singleLine="true" android:layout_below="@id/app_icon" android:layout_alignParentBottom="true" />
<TextView android:textSize="@dimen/status_bar_recents_app_description_text_size" android:ellipsize="marquee" android:id="@id/app_description" android:fadingEdge="none" android:fadingEdgeLength="0.0dip" android:layout_width="@dimen/status_bar_recents_app_label_width" android:layout_height="wrap_content" android:layout_marginLeft="@dimen/status_bar_recents_app_label_left_margin" android:layout_marginTop="3.0dip" android:scrollHorizontally="true" android:singleLine="true" android:layout_below="@id/app_label" android:layout_alignParentBottom="true" />[/COLOR]
</RelativeLayout>
</FrameLayout>

-

/res/layout-land/tw_status_bar_recent_panel.xml

:

<?xml version="1.0" encoding="utf-8"?>
<com.android.systemui.recent.RecentsPanelView android:id="@id/recents_root" android:layout_width="fill_parent" android:layout_height="fill_parent" systemui:recentItemLayout="@layout/status_bar_recent_item"
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:systemui="http://schemas.android.com/apk/res/com.android.systemui">
[COLOR="Red"]<FrameLayout android:id="@id/recents_bg_protect" android:background="@drawable/status_bar_recents_background" android:layout_width="fill_parent" android:layout_height="fill_parent" android:layout_centerVertical="true">
<ImageView android:gravity="center" android:layout_width="fill_parent" android:layout_height="fill_parent" android:layout_marginTop="0.0dip" android:src="@drawable/status_bar_recents_background" />
<com.android.systemui.recent.RecentsHorizontalScrollView android:layout_gravity="bottom|left|center" android:id="@id/recents_container" android:scrollbars="none" android:fadingEdge="none" android:fadingEdgeLength="0.0dip" android:clipChildren="false" android:clipToPadding="false" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_marginRight="0.0dip" android:stackFromBottom="true" android:divider="@null">
<LinearLayout android:orientation="horizontal" android:id="@id/recents_linear_layout" android:clipChildren="false" android:clipToPadding="false" android:layout_width="fill_parent" android:layout_height="wrap_content" />
</com.android.systemui.recent.RecentsHorizontalScrollView>
<TextView android:textSize="20.0dip" android:textColor="@color/status_bar_recents_app_label_color" android:gravity="center_horizontal" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_marginTop="5.0dip" android:text="@string/recent_apps_title" />
<ImageView android:layout_gravity="top|right|center" android:id="@id/recents_clear" android:clickable="true" android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@drawable/ic_notify_clear" />[/COLOR]
<LinearLayout android:layout_gravity..........................

Download the png files needed for the background wallpaper recent app here.

Extract them to /res/drawable-nodpi/.

3. -

smali/com/android/systemui/recent/RecentsPanelView.smali

:

Inspect and make the following changes - (

only in 4.2.2 firmwares

)

(For 4.3 firmwares, refer to link below)

.method private updateThumbnail(Lcom/android/systemui/recent/RecentsPanelView$ViewHolder;Landroid/graphics/Bitmap;ZZ)V
.locals 30
.parameter "h"
.parameter "thumbnail"
.parameter "show"
.parameter "anim"

.prologue
.line 783
if-eqz p2, :cond_4

.line 787
const/16 v26, 0x4

.line 789
.local v26, reflectionGap:I
invoke-virtual/range {p2 .. p2}, Landroid/graphics/Bitmap;->getWidth()I

move-result v6

.line 780
.local v6, width:I
invoke-virtual/range {p2 .. p2}, Landroid/graphics/Bitmap;->getHeight()I

move-result v24

.line 782
.local v24, height:I
new-instance v8, Landroid/graphics/Matrix;

invoke-direct {v8}, Landroid/graphics/Matrix;-><init>()V

.line 783
.local v8, matrix:Landroid/graphics/Matrix;
const/high16 v3, 0x3f80

const/high16 v4, -0x4080

invoke-virtual {v8, v3, v4}, Landroid/graphics/Matrix;->preScale(FF)Z

.line 785
const/4 v4, 0x0

mul-int/lit8 v3, v24, 0x2

div-int/lit8 v5, v3, 0x3

div-int/lit8 v7, v24, 0x3

const/4 v9, 0x0

move-object/from16 v3, p2

invoke-static/range {v3 .. v9}, Landroid/graphics/Bitmap;->createBitmap(Landroid/graphics/Bitmap;IIIILandroid/graphics/Matrix;Z)Landroid/graphics/Bitmap;

move-result-object v27

.line 786
.local v27, reflectionImage:Landroid/graphics/Bitmap;
div-int/lit8 v3, v24, 0x3

add-int v3, v3, v24

sget-object v4, Landroid/graphics/Bitmap$Config;->ARGB_8888:Landroid/graphics/Bitmap$Config;

invoke-static {v6, v3, v4}, Landroid/graphics/Bitmap;->createBitmap(IILandroid/graphics/Bitmap$Config;)Landroid/graphics/Bitmap;

move-result-object v23

.line 788
.local v23, bitmapWithReflection:Landroid/graphics/Bitmap;
new-instance v9, Landroid/graphics/Canvas;

move-object/from16 v0, v23

invoke-direct {v9, v0}, Landroid/graphics/Canvas;-><init>(Landroid/graphics/Bitmap;)V

.line 789
.local v9, canvas:Landroid/graphics/Canvas;
const/4 v3, 0x0

const/4 v4, 0x0

const/4 v5, 0x0

move-object/from16 v0, p2

invoke-virtual {v9, v0, v3, v4, v5}, Landroid/graphics/Canvas;->drawBitmap(Landroid/graphics/Bitmap;FFLandroid/graphics/Paint;)V

.line 800
new-instance v14, Landroid/graphics/Paint;

invoke-direct {v14}, Landroid/graphics/Paint;-><init>()V

.line 801
.local v14, defaultPaint:Landroid/graphics/Paint;
const/4 v10, 0x0

move/from16 v0, v24

int-to-float v11, v0

int-to-float v12, v6

add-int/lit8 v3, v24, 0x4

int-to-float v13, v3

invoke-virtual/range {v9 .. v14}, Landroid/graphics/Canvas;->drawRect(FFFFLandroid/graphics/Paint;)V

.line 802
const/4 v3, 0x0

add-int/lit8 v4, v24, 0x4

int-to-float v4, v4

const/4 v5, 0x0

move-object/from16 v0, v27

invoke-virtual {v9, v0, v3, v4, v5}, Landroid/graphics/Canvas;->drawBitmap(Landroid/graphics/Bitmap;FFLandroid/graphics/Paint;)V

.line 804
new-instance v25, Landroid/graphics/Paint;

invoke-direct/range {v25 .. v25}, Landroid/graphics/Paint;-><init>()V

.line 805
.local v25, paint:Landroid/graphics/Paint;
new-instance v15, Landroid/graphics/LinearGradient;

const/16 v16, 0x0

invoke-virtual/range {p2 .. p2}, Landroid/graphics/Bitmap;->getHeight()I

move-result v3

int-to-float v0, v3

move/from16 v17, v0

const/16 v18, 0x0

invoke-virtual/range {v23 .. v23}, Landroid/graphics/Bitmap;->getHeight()I

move-result v3

add-int/lit8 v3, v3, 0x4

int-to-float v0, v3

move/from16 v19, v0

const v20, 0x70ffffff

const v21, 0xffffff

sget-object v22, Landroid/graphics/Shader$TileMode;->CLAMP:Landroid/graphics/Shader$TileMode;

invoke-direct/range {v15 .. v22}, Landroid/graphics/LinearGradient;-><init>(FFFFIILandroid/graphics/Shader$TileMode;)V

.line 808
.local v15, shader:Landroid/graphics/LinearGradient;
move-object/from16 v0, v25

invoke-virtual {v0, v15}, Landroid/graphics/Paint;->setShader(Landroid/graphics/Shader;)Landroid/graphics/Shader;

.line 809
new-instance v3, Landroid/graphics/PorterDuffXfermode;

sget-object v4, Landroid/graphics/PorterDuff$Mode;->DST_IN:Landroid/graphics/PorterDuff$Mode;

invoke-direct {v3, v4}, Landroid/graphics/PorterDuffXfermode;-><init>(Landroid/graphics/PorterDuff$Mode;)V

move-object/from16 v0, v25

invoke-virtual {v0, v3}, Landroid/graphics/Paint;->setXfermode(Landroid/graphics/Xfermode;)Landroid/graphics/Xfermode;

.line 810
const/16 v17, 0x0

move/from16 v0, v24

int-to-float v0, v0

move/from16 v18, v0

int-to-float v0, v6

move/from16 v19, v0

invoke-virtual/range {v23 .. v23}, Landroid/graphics/Bitmap;->getHeight()I

move-result v3

add-int/lit8 v3, v3, 0x4

int-to-float v0, v3

move/from16 v20, v0

move-object/from16 v16, v9

move-object/from16 v21, v25

invoke-virtual/range {v16 .. v21}, Landroid/graphics/Canvas;->drawRect(FFFFLandroid/graphics/Paint;)V

.line 813
move-object/from16 v0, p1

iget-object v3, v0, Lcom/android/systemui/recent/RecentsPanelView$ViewHolder;->thumbnailViewImage:Landroid/widget/ImageView;

move-object/from16 v0, v23

invoke-virtual {v3, v0}, Landroid/widget/ImageView;->setImageBitmap(Landroid/graphics/Bitmap;)V

.line 817
move-object/from16 v0, p1

iget-object v3, v0, Lcom/android/systemui/recent/RecentsPanelView$ViewHolder;->thumbnailViewImageBitmap:Landroid/graphics/Bitmap;

if-eqz v3, :cond_0

move-object/from16 v0, p1

iget-object v3, v0, Lcom/android/systemui/recent/RecentsPanelView$ViewHolder;->thumbnailViewImageBitmap:Landroid/graphics/Bitmap;

invoke-virtual {v3}, Landroid/graphics/Bitmap;->getWidth()I

move-result v3

invoke-virtual/range {p2 .. p2}, Landroid/graphics/Bitmap;->getWidth()I

move-result v4

if-ne v3, v4, :cond_0

move-object/from16 v0, p1

iget-object v3, v0, Lcom/android/systemui/recent/RecentsPanelView$ViewHolder;->thumbnailViewImageBitmap:Landroid/graphics/Bitmap;

invoke-virtual {v3}, Landroid/graphics/Bitmap;->getHeight()I

move-result v3

invoke-virtual/range {p2 .. p2}, Landroid/graphics/Bitmap;->getHeight()I

move-result v4

if-eq v3, v4, :cond_1

.line 820
:cond_0
move-object/from16 v0, p0

iget-boolean v3, v0, Lcom/android/systemui/recent/RecentsPanelView;->mFitThumbnailToXY:Z

if-eqz v3, :cond_5

.line 821
move-object/from16 v0, p1

iget-object v3, v0, Lcom/android/systemui/recent/RecentsPanelView$ViewHolder;->thumbnailViewImage:Landroid/widget/ImageView;

const/high16 v4, 0x41c8

invoke-virtual {v3, v4}, Landroid/widget/ImageView;->setRotationY(F)V

.line 830
:cond_1
:goto_0
if-eqz p3, :cond_3

move-object/from16 v0, p1

iget-object v3, v0, Lcom/android/systemui/recent/RecentsPanelView$ViewHolder;->thumbnailView:Landroid/view/View;

invoke-virtual {v3}, Landroid/view/View;->getVisibility()I

move-result v3

if-eqz v3, :cond_3

.line 831
if-eqz p4, :cond_2

.line 833
move-object/from16 v0, p1

iget-object v3, v0, Lcom/android/systemui/recent/RecentsPanelView$ViewHolder;->thumbnailView:Landroid/view/View;

move-object/from16 v0, p0

iget-object v4, v0, Lcom/android/systemui/recent/RecentsPanelView;->mContext:Landroid/content/Context;

const v5, 0x7f05000c

invoke-static {v4, v5}, Landroid/view/animation/AnimationUtils;->loadAnimation(Landroid/content/Context;I)Landroid/view/animation/Animation;

move-result-object v4

invoke-virtual {v3, v4}, Landroid/view/View;->setAnimation(Landroid/view/animation/Animation;)V

.line 837
:cond_2
move-object/from16 v0, p1

iget-object v3, v0, Lcom/android/systemui/recent/RecentsPanelView$ViewHolder;->thumbnailView:Landroid/view/View;

const/4 v4, 0x0

invoke-virtual {v3, v4}, Landroid/view/View;->setVisibility(I)V

.line 839
:cond_3
move-object/from16 v0, p2

move-object/from16 v1, p1

iput-object v0, v1, Lcom/android/systemui/recent/RecentsPanelView$ViewHolder;->thumbnailViewImageBitmap:Landroid/graphics/Bitmap;

.line 841
.end local v6 #width:I
.end local v8 #matrix:Landroid/graphics/Matrix;
.end local v9 #canvas:Landroid/graphics/Canvas;
.end local v14 #defaultPaint:Landroid/graphics/Paint;
.end local v15 #shader:Landroid/graphics/LinearGradient;
.end local v23 #bitmapWithReflection:Landroid/graphics/Bitmap;
.end local v24 #height:I
.end local v25 #paint:Landroid/graphics/Paint;
.end local v26 #reflectionGap:I
.end local v27 #reflectionImage:Landroid/graphics/Bitmap;
:cond_4
return-void

.line 823
.restart local v6 #width:I
.restart local v8 #matrix:Landroid/graphics/Matrix;
.restart local v9 #canvas:Landroid/graphics/Canvas;
.restart local v14 #defaultPaint:Landroid/graphics/Paint;
.restart local v15 #shader:Landroid/graphics/LinearGradient;
.restart local v23 #bitmapWithReflection:Landroid/graphics/Bitmap;
.restart local v24 #height:I
.restart local v25 #paint:Landroid/graphics/Paint;
.restart local v26 #reflectionGap:I
.restart local v27 #reflectionImage:Landroid/graphics/Bitmap;
:cond_5
new-instance v29, Landroid/graphics/Matrix;

invoke-direct/range {v29 .. v29}, Landroid/graphics/Matrix;-><init>()V

.line 824
.local v29, scaleMatrix:Landroid/graphics/Matrix;
move-object/from16 v0, p0

iget v3, v0, Lcom/android/systemui/recent/RecentsPanelView;->mThumbnailWidth:I

int-to-float v3, v3

invoke-virtual/range {p2 .. p2}, Landroid/graphics/Bitmap;->getWidth()I

move-result v4

int-to-float v4, v4

div-float v28, v3, v4

.line 825
.local v28, scale:F
move-object/from16 v0, v29

move/from16 v1, v28

move/from16 v2, v28

invoke-virtual {v0, v1, v2}, Landroid/graphics/Matrix;->setScale(FF)V

.line 826
move-object/from16 v0, p1

iget-object v3, v0, Lcom/android/systemui/recent/RecentsPanelView$ViewHolder;->thumbnailViewImage:Landroid/widget/ImageView;

sget-object v4, Landroid/widget/ImageView$ScaleType;->MATRIX:Landroid/widget/ImageView$ScaleType;

invoke-virtual {v3, v4}, Landroid/widget/ImageView;->setScaleType(Landroid/widget/ImageView$ScaleType;)V

.line 827
move-object/from16 v0, p1

iget-object v3, v0, Lcom/android/systemui/recent/RecentsPanelView$ViewHolder;->thumbnailViewImage:Landroid/widget/ImageView;

move-object/from16 v0, v29

invoke-virtual {v3, v0}, Landroid/widget/ImageView;->setImageMatrix(Landroid/graphics/Matrix;)V

goto :goto_0
.end method

For 4.3 firmwares, go here: http://xdaforums.com/showpost.php?p=48163246&postcount=15

Compile back the SystemUI.apk and flash the 2 files.

That's it.

Special thanks to mnemonyc and grgsiocl for the informative guides in CM10.1 and note 2.

Press the thanks button if this mod has made your day.