[Galaxy Note GT-N7000 Android Development] ReDroiD™:
Add-on tutorial for reflection

open this smali:

systemui\smali\com\android\systemui\recent\Recents PanelView.smali

search this line:

.method private updateThumbnail(Lcom/android/systemui/recent/RecentsPanelView$ViewHolder;Landroid/graphics/Bitmap;ZZ)V

locate the end of the .methode a few lines after:

.end method

replace the selection under ".method private xxxxxxxxxxxxxx" and ".end method" Replace the entire code selected with this one!

.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 409
if-eqz p2, :cond_4

.line 413
const/16 v26, 0x4

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

move-result v6

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

move-result v24

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

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

.line 418
.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 420
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 421
.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 423
.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 424
.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 425
new-instance v14, Landroid/graphics/Paint;

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

.line 426
.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 427
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 429
new-instance v25, Landroid/graphics/Paint;

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

.line 430
.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 433
.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 434
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 435
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 438
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 442
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 445
:cond_0
move-object/from16 v0, p0

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

if-eqz v3, :cond_5

.line 446
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 455
: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 456
if-eqz p4, :cond_2

.line 457
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, 0x7f04000f

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 460
: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 462
: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 464
.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 448
.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 449
.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 450
.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 451
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 452
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

recompil and voila ;)