Guide Smali How to add Flip Animation Quick Settings
Flip Animation Quick Settings , Youtube https://www.youtube.com/watch?v=DBBE...ature=youtu.be
REQUIREMENT :
- ApkTool RC
- Notepad++
- Xperia KitKat
- Brain
- Patient
- Experience
STEP -1
Decompile SystemUI.apk
Download attached resources and sources, merge to your decompiled systemui
STEP -2
SystemUI.apk/res/layout/somc_statusbar_notification_tools_button.xml
add the red line
    
    
        
	
	
    
go to
com/sonymobile/systemui/statusbar/tools/ToolsButton.smali
Add the red line
    
    
        
	
	
    
Add the red line and pay attention to the register number in blue hint, each device can be different ,
it can be v3, v2, .. you must adapt it.
    
    
        
	
	
    
Next
add the red mehod
    
    
        
	
	
    
Next find this line
	
	
and add all red method
    
    
        
	
	
    
next search this method and add the red line
    
    
        
	
	
    
Compile your systemUI
STEP-3
Decompile the newly recompiled again
next go to systemui/res/values/public.xml
    
    
        
          
	
	
next go to 
com/sonymobile/systemui/statusbar/tools/ToolsButton.smali
serach this method
	
	
change the red value in the smali 
according to the value you got in your own public.xml
const v2, 0x7f05001c
with
    
	
	
and 
const v2, 0x7f05001b
with
    
	
	
    
Done and compile your systemUI
Credits :
- Sony
- Darck CM
- CyanogenMod
Flip Animation Quick Settings , Youtube https://www.youtube.com/watch?v=DBBE...ature=youtu.be
REQUIREMENT :
- ApkTool RC
- Notepad++
- Xperia KitKat
- Brain
- Patient
- Experience
STEP -1
Decompile SystemUI.apk
Download attached resources and sources, merge to your decompiled systemui
STEP -2
SystemUI.apk/res/layout/somc_statusbar_notification_tools_button.xml
add the red line
Code:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout android:gravity="center" android:orientation="vertical" android:id="@id/tools_button_layout" android:background="@drawable/somc_quick_settings_tool_button_bg" android:clickable="true" android:layout_width="wrap_content" android:layout_height="wrap_content" android:minHeight="1.0dip"
  xmlns:android="http://schemas.android.com/apk/res/android">
    <FrameLayout android:layout_width="wrap_content" android:layout_height="wrap_content">
        <ImageView android:id="@id/tools_button_img" android:layout_width="@dimen/qs_tile_icon_size" android:layout_height="@dimen/qs_tile_icon_size" android:scaleType="center" android:contentDescription="@null" />
        <ImageView android:id="@id/tools_button_anim" android:visibility="invisible" android:layout_width="fill_parent" android:layout_height="wrap_content" android:scaleType="center" android:contentDescription="@null" />
    </FrameLayout>
    <TextView android:textSize="@dimen/status_bar_tools_button_label_text_size" android:gravity="top|center" android:id="@id/tools_button_text" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginBottom="@dimen/status_bar_tools_button_margin_bottom" android:lines="2" android:scrollHorizontally="false" android:includeFontPadding="false" />
</LinearLayout>go to
com/sonymobile/systemui/statusbar/tools/ToolsButton.smali
Add the red line
Code:
# static fields
.field private static final TAG:Ljava/lang/String;
# instance fields
.field private mHandler:Landroid/os/Handler;
.field private mAccentColor:I
.field private mAnimationFrames:Ljava/util/ArrayList;
    .annotation system Ldalvik/annotation/Signature;Add the red line and pay attention to the register number in blue hint, each device can be different ,
it can be v3, v2, .. you must adapt it.
Code:
.method public constructor <init>(Landroid/content/Context;)V
    .locals 9
    .param p1, "context"    # Landroid/content/Context;
    .prologue
    const/4 v8, 0x1
    const/4 v7, 0x0
    const/4 v6, -0x1
    const/4 v5, 0x0
    invoke-direct {p0, p1}, Landroid/widget/FrameLayout;-><init>(Landroid/content/Context;)V
    const/high16 v3, -0x80000000
    iput v3, p0, Lcom/sonymobile/systemui/statusbar/tools/ToolsButton;->mState:I
    iput v7, p0, Lcom/sonymobile/systemui/statusbar/tools/ToolsButton;->mCurrentAnimationImage:I
    iput-object v5, p0, Lcom/sonymobile/systemui/statusbar/tools/ToolsButton;->mAnimationFrames:Ljava/util/ArrayList;
    new-instance v3, Landroid/util/SparseArray;
    const/16 v4, 0xa
    invoke-direct {v3, v4}, Landroid/util/SparseArray;-><init>(I)V
    iput-object v3, p0, Lcom/sonymobile/systemui/statusbar/tools/ToolsButton;->mBitmaps:Landroid/util/SparseArray;
    iput-boolean v7, p0, Lcom/sonymobile/systemui/statusbar/tools/ToolsButton;->mButtonClicked:Z
    iput v7, p0, Lcom/sonymobile/systemui/statusbar/tools/ToolsButton;->mButtonType:I
    iput-object p1, p0, Lcom/sonymobile/systemui/statusbar/tools/ToolsButton;->mContext:Landroid/content/Context;
    new-instance v3, Landroid/util/SparseArray;
    invoke-direct {v3}, Landroid/util/SparseArray;-><init>()V
    iput-object v3, p0, Lcom/sonymobile/systemui/statusbar/tools/ToolsButton;->mStateIcons:Landroid/util/SparseArray;
    new-instance v3, Landroid/os/Handler;
    invoke-direct {v3}, Landroid/os/Handler;-><init>()V
    iput-object v3, p0, Lcom/sonymobile/systemui/statusbar/tools/ToolsButton;->mHandler:Landroid/os/Handler;
    new-instance v3, Landroid/util/SparseIntArray;
    invoke-direct {v3}, Landroid/util/SparseIntArray;-><init>()V
    iput-object v3, p0, Lcom/sonymobile/systemui/statusbar/tools/ToolsButton;->mStateContentDescription:Landroid/util/SparseIntArray;
    new-instance v2, Landroid/widget/FrameLayout$LayoutParams;
    invoke-direct {v2, v6, v6}, Landroid/widget/FrameLayout$LayoutParams;-><init>(II)V
    .local v2, "params":Landroid/widget/FrameLayout$LayoutParams;
    invoke-static {p1}, Landroid/view/LayoutInflater;->from(Landroid/content/Context;)Landroid/view/LayoutInflater;
    move-result-object v1
    .local v1, "inflater":Landroid/view/LayoutInflater;
    const v3, 0x7f04001d
    invoke-virtual {v1, v3, v5}, Landroid/view/LayoutInflater;->inflate(ILandroid/view/ViewGroup;)Landroid/view/View;
    move-result-object v3
    check-cast v3, Landroid/widget/LinearLayout;
    iput-object v3, p0, Lcom/sonymobile/systemui/statusbar/tools/ToolsButton;->mVerticalLayout:Landroid/widget/LinearLayout;
    iget-object v3, p0, Lcom/sonymobile/systemui/statusbar/tools/ToolsButton;->mVerticalLayout:Landroid/widget/LinearLayout;
    invoke-virtual {v3, p0}, Landroid/widget/LinearLayout;->setOnClickListener(Landroid/view/View$OnClickListener;)V
    iget-object v3, p0, Lcom/sonymobile/systemui/statusbar/tools/ToolsButton;->mVerticalLayout:Landroid/widget/LinearLayout;
    invoke-virtual {v3, p0}, Landroid/widget/LinearLayout;->setOnLongClickListener(Landroid/view/View$OnLongClickListener;)V
Next
add the red mehod
Code:
.method private enableButton(Z)V
    .locals 1
    .param p1, "enable"    # Z
    .prologue
    if-eqz p1, :cond_0
    move-object v0, p0
    .local v0, "enableButton":Lcom/sonymobile/systemui/statusbar/tools/ToolsButton;
    :goto_0
    invoke-virtual {p0, v0}, Landroid/view/View;->setOnClickListener(Landroid/view/View$OnClickListener;)V
    invoke-virtual {p0, v0}, Landroid/view/View;->setOnLongClickListener(Landroid/view/View$OnLongClickListener;)V
    invoke-virtual {p0, v0}, Landroid/view/View;->setOnTouchListener(Landroid/view/View$OnTouchListener;)V
    return-void
    .end local v0    # "enableButton":Lcom/sonymobile/systemui/statusbar/tools/ToolsButton;
    :cond_0
    const/4 v0, 0x0
    goto :goto_0
.end method
.method private mOnLongClickVerticalLayout()V
    .locals 6
    .prologue
    iget-object v0, p0, Lcom/sonymobile/systemui/statusbar/tools/ToolsButton;->mVerticalLayout:Landroid/widget/LinearLayout;
    return-void
.end method
.method private setImageBitmap(Landroid/widget/ImageView;Landroid/graphics/Bitmap;Z)V
    .locals 2
    .param p1, "imageView"    # Landroid/widget/ImageView;
    .param p2, "bitmap"    # Landroid/graphics/Bitmap;
    .param p3, "colorize"    # Z
    .prologue
    invoke-virtual {p1, p2}, Landroid/widget/ImageView;->setImageBitmap(Landroid/graphics/Bitmap;)V
    const v0, -0x55555556
    invoke-static {p3}, Ljava/lang/Boolean;->valueOf(Z)Ljava/lang/Boolean;
    move-result-object v1
    invoke-virtual {p1, v0, v1}, Landroid/view/View;->setTag(ILjava/lang/Object;)VNext find this line
Code:
# virtual methodsCode:
# virtual methods
.method public flip()V
    .locals 2
    .prologue
    const/4 v0, 0x0
    invoke-virtual {p0, v0}, Lcom/sonymobile/systemui/statusbar/tools/ToolsButton;->flipTile(I)V
    return-void
.end method
.method public flipTile(I)V
    .locals 1
    .param p1, "delay"    # I
    .prologue
    .line 159
    const/4 v0, 0x1
    invoke-virtual {p0, p1, v0}, Lcom/sonymobile/systemui/statusbar/tools/ToolsButton;->flipTile(IZ)V
    .line 160
    return-void
.end method
.method public flipTile(IZ)V
    .locals 5
    .param p1, "delay"    # I
    .param p2, "flipRight"    # Z
    .prologue
    .line 163
    invoke-virtual {p0}, Lcom/sonymobile/systemui/statusbar/tools/ToolsButton;->isFlipTilesEnabled()Z
    move-result v2
    if-nez v2, :cond_0
    .line 190
    :goto_0
    return-void
    .line 164
    :cond_0
    iget-object v3, p0, Lcom/sonymobile/systemui/statusbar/tools/ToolsButton;->mContext:Landroid/content/Context;
    if-eqz p2, :cond_1
    const v2, 0x7f05001c
    :goto_1
    invoke-static {v3, v2}, Landroid/animation/AnimatorInflater;->loadAnimator(Landroid/content/Context;I)Landroid/animation/Animator;
    move-result-object v0
    check-cast v0, Landroid/animation/AnimatorSet;
    .line 167
    .local v0, "anim":Landroid/animation/AnimatorSet;
    iget-object v2, p0, Lcom/sonymobile/systemui/statusbar/tools/ToolsButton;->mVerticalLayout:Landroid/widget/LinearLayout;
    invoke-virtual {v0, v2}, Landroid/animation/AnimatorSet;->setTarget(Ljava/lang/Object;)V
    .line 168
    const-wide/16 v2, 0xc8
    invoke-virtual {v0, v2, v3}, Landroid/animation/AnimatorSet;->setDuration(J)Landroid/animation/AnimatorSet;
    .line 169
    new-instance v2, Lcom/sonymobile/systemui/statusbar/tools/ToolsButton;
    invoke-direct {v2, p0}, Lcom/sonymobile/systemui/statusbar/tools/ToolsButton;-><init>(Lcom/sonymobile/systemui/statusbar/tools/ToolsButton;)V
    invoke-virtual {v0, v2}, Landroid/animation/AnimatorSet;->addListener(Landroid/animation/Animator$AnimatorListener;)V
    .line 182
    new-instance v1, Lcom/sonymobile/systemui/statusbar/tools/ToolsButton;
    invoke-direct {v1, p0, v0}, Lcom/sonymobile/systemui/statusbar/tools/ToolsButton;-><init>(Lcom/sonymobile/systemui/statusbar/tools/ToolsButton;Landroid/animation/AnimatorSet;)V
    .line 189
    .local v1, "doAnimation":Ljava/lang/Runnable;
    iget-object v2, p0, Lcom/sonymobile/systemui/statusbar/tools/ToolsButton;->mHandler:Landroid/os/Handler;
    int-to-long v3, p1
    invoke-virtual {v2, v1, v3, v4}, Landroid/os/Handler;->postDelayed(Ljava/lang/Runnable;J)Z
    goto :goto_0
    .line 164
    .end local v0    # "anim":Landroid/animation/AnimatorSet;
    .end local v1    # "doAnimation":Ljava/lang/Runnable;
    :cond_1
    const v2, 0x7f05001b
    goto :goto_1
.end method
.method public isFlipTilesEnabled()Z
    .locals 3
    .prologue
    const/4 v0, 0x1
    .line 154
    iget-object v1, p0, Lcom/sonymobile/systemui/statusbar/tools/ToolsButton;->mContext:Landroid/content/Context;
    invoke-virtual {v1}, Landroid/content/Context;->getContentResolver()Landroid/content/ContentResolver;
    move-result-object v1
    const-string v2, "quick_settings_tiles_flip"
    invoke-static {v1, v2, v0}, Landroid/provider/Settings$System;->getInt(Landroid/content/ContentResolver;Ljava/lang/String;I)I
    move-result v1
    if-ne v1, v0, :cond_0
    :goto_0
    return v0
    :cond_0
    const/4 v0, 0x0
    goto :goto_0
.end method
.method protected varargs addState(ILjava/lang/Integer;Lcom/sonymobile/systemui/statusbar/tools/ToolsButton$ToolsIcon;[Lcom/sonymobile/systemui/statusbar/tools/ToolsButton$ToolsIcon;)V
    .locals 2
    .param p1, "stateId"    # I
    .param p2, "stringId"    # Ljava/lang/Integer;
    .param p3, "stateIcon"    # Lcom/sonymobile/systemui/statusbar/tools/ToolsButton$ToolsIcon;
    .param p4, "animationIcons"    # [Lcom/sonymobile/systemui/statusbar/tools/ToolsButton$ToolsIcon;
    .prologue
    iget-object v0, p0, Lcom/sonymobile/systemui/statusbar/tools/ToolsButton;->mStateIcons:Landroid/util/SparseArray;
    invoke-virtual {v0, p1, p3}, Landroid/util/SparseArray;->put(ILjava/lang/Object;)V
    iget-object v0, p0, Lcom/sonymobile/systemui/statusbar/tools/ToolsButton;->mStateContentDescription:Landroid/util/SparseIntArray;
    invoke-virtual {p2}, Ljava/lang/Integer;->intValue()Inext search this method and add the red line
Code:
.method public onClick(Landroid/view/View;)V
    .locals 2
    .param p1, "view"    # Landroid/view/View;
    .prologue
    iget-object v0, p0, Lcom/sonymobile/systemui/statusbar/tools/ToolsButton;->mAnimationView:Landroid/widget/ImageView;
    invoke-virtual {v0}, Landroid/view/View;->getVisibility()I
    move-result v0
    if-nez v0, :cond_0
    iget v0, p0, Lcom/sonymobile/systemui/statusbar/tools/ToolsButton;->mButtonType:I
    const/4 v1, 0x2
    if-ne v0, v1, :cond_1
    :cond_0
    invoke-virtual {p0}, Lcom/sonymobile/systemui/statusbar/tools/ToolsButton;->onAction()V
    invoke-virtual {p0}, Lcom/sonymobile/systemui/statusbar/tools/ToolsButton;->flip()V
    const/4 v0, 0x1
    iput-boolean v0, p0, Lcom/sonymobile/systemui/statusbar/tools/ToolsButton;->mButtonClicked:Z
        
    :cond_1
    return-void
.end method
.method public onLongClick(Landroid/view/View;)Z
    .locals 2
    .param p1, "view"    # Landroid/view/View;
    .prologue
    const/4 v0, 0x0
    .local v0, "clickHandled":Z
    iget-object v1, p0, Lcom/sonymobile/systemui/statusbar/tools/ToolsButton;->mAnimationView:Landroid/widget/ImageView;
    invoke-virtual {v1}, Landroid/view/View;->getVisibility()I
    move-result v1
    if-eqz v1, :cond_0
    invoke-virtual {p0}, Lcom/sonymobile/systemui/statusbar/tools/ToolsButton;->onLongClickPopup()Z
    move-result v1
    if-eqz v1, :cond_1
    const/4 v0, 0x1
    :cond_0
    :goto_0
    invoke-direct {p0}, Lcom/sonymobile/systemui/statusbar/tools/ToolsButton;->mOnLongClickVerticalLayout()V
    return v0
    :cond_1
    const/4 v0, 0x0
    goto :goto_0
.end methodCompile your systemUI
STEP-3
Decompile the newly recompiled again
next go to systemui/res/values/public.xml
Code:
<public type="anim" name="wallpaper_recents_launch_from_launcher_exit" id="0x7f05001a" />
    <public type="anim" name="flip_left" id="0x7f??????" />
    <public type="anim" name="flip_right" id="0x7f??????" />
    <public type="xml" name="somc_skin_permissions" id="0x7f060000" />com/sonymobile/systemui/statusbar/tools/ToolsButton.smali
serach this method
Code:
.method public flipTile(IZ)V
    .locals 5
    .param p1, "delay"    # I
    .param p2, "flipRight"    # Z
    .prologue
    .line 163
    invoke-virtual {p0}, Lcom/sonymobile/systemui/statusbar/tools/ToolsButton;->isFlipTilesEnabled()Z
    move-result v2
    if-nez v2, :cond_0
    .line 190
    :goto_0
    return-void
    .line 164
    :cond_0
    iget-object v3, p0, Lcom/sonymobile/systemui/statusbar/tools/ToolsButton;->mContext:Landroid/content/Context;
    if-eqz p2, :cond_1
    const v2, 0x7f05001c
    :goto_1
    invoke-static {v3, v2}, Landroid/animation/AnimatorInflater;->loadAnimator(Landroid/content/Context;I)Landroid/animation/Animator;
    move-result-object v0
    check-cast v0, Landroid/animation/AnimatorSet;
    .line 167
    .local v0, "anim":Landroid/animation/AnimatorSet;
    iget-object v2, p0, Lcom/sonymobile/systemui/statusbar/tools/ToolsButton;->mVerticalLayout:Landroid/widget/LinearLayout;
    invoke-virtual {v0, v2}, Landroid/animation/AnimatorSet;->setTarget(Ljava/lang/Object;)V
    .line 168
    const-wide/16 v2, 0xc8
    invoke-virtual {v0, v2, v3}, Landroid/animation/AnimatorSet;->setDuration(J)Landroid/animation/AnimatorSet;
    .line 169
    new-instance v2, Lcom/sonymobile/systemui/statusbar/tools/ToolsButton;
    invoke-direct {v2, p0}, Lcom/sonymobile/systemui/statusbar/tools/ToolsButton;-><init>(Lcom/sonymobile/systemui/statusbar/tools/ToolsButton;)V
    invoke-virtual {v0, v2}, Landroid/animation/AnimatorSet;->addListener(Landroid/animation/Animator$AnimatorListener;)V
    .line 182
    new-instance v1, Lcom/sonymobile/systemui/statusbar/tools/ToolsButton;
    invoke-direct {v1, p0, v0}, Lcom/sonymobile/systemui/statusbar/tools/ToolsButton;-><init>(Lcom/sonymobile/systemui/statusbar/tools/ToolsButton;Landroid/animation/AnimatorSet;)V
    .line 189
    .local v1, "doAnimation":Ljava/lang/Runnable;
    iget-object v2, p0, Lcom/sonymobile/systemui/statusbar/tools/ToolsButton;->mHandler:Landroid/os/Handler;
    int-to-long v3, p1
    invoke-virtual {v2, v1, v3, v4}, Landroid/os/Handler;->postDelayed(Ljava/lang/Runnable;J)Z
    goto :goto_0
    .line 164
    .end local v0    # "anim":Landroid/animation/AnimatorSet;
    .end local v1    # "doAnimation":Ljava/lang/Runnable;
    :cond_1
    const v2, 0x7f05001b
    goto :goto_1
.end methodaccording to the value you got in your own public.xml
const v2, 0x7f05001c
with
Code:
<public type="anim" name="flip_right" id="0x7f??????" />const v2, 0x7f05001b
with
Code:
<public type="anim" name="flip_left" id="0x7f??????" />Done and compile your systemUI
Credits :
- Sony
- Darck CM
- CyanogenMod
 
Aucun commentaire:
Enregistrer un commentaire