Notice
Recent Posts
Recent Comments
Link
«   2025/05   »
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
Tags
more
Archives
Today
Total
관리 메뉴

LITTLEBEAR

젤리빈 4.2.2 스타일 상단바 만들기(토글 확장 아닙니다) 본문

끄적끄적

젤리빈 4.2.2 스타일 상단바 만들기(토글 확장 아닙니다)

소심한작은곰 2013. 7. 13. 20:31

삼성 제 1세대 LTE 폰들(갤럭시 S2 LTE, 갤럭시 S2 HD LTE, 갤럭시 노트) 에 맞춘 글입니다.

먼저 이 기능은 Disaster Rom v4 에서 빼온 기능입니다.

상단바 교체니까 수정할 부분은 두부분입니다.

 

SystemUI.apk

SystemUI.odex

 

 

젤리빈 4.2.2 스타일 상단바.zip

준비물입니다. 먼저 받아주세요

 

SystemUI.apk 에서는 새로 추가한 이미지 파일의 id와 그걸 layout 에 배치해 주어야 합니다.

첨부파일에서 SystemUI.apk 안의 두 파일을 drawable-xhdpi 에 넣어주세요(HD 해상도 이미지입니다.)

tw_quickpanel_icon_settings.png 파일 같은 경우 원래 존재하지만...

tw_quickpanel_icon_toggles.png 파일이 회색이라 똑같이 맞춰주기 위해서 넣도록 하겠습니다.

그리고는 values/public.xml 에서

tw_quickpanel_icon_toggles 이름으로 drawable 형태로 하나 추가해주시고,

toggles_button 이름으로 id 형태로 하나 더 추가해주세요.

완성본은 이렇게 되겠지요.

    <public type="drawable" name="tw_quickpanel_icon_toggles" id="0x7f02007f" />

    <public type="id" name="toggles_button" id="0x7f0d0126" />

(drawable 형태 같은 경우는 APKTOOL_DUMMY 값 중에서 골라서 쓰시고

id형태 같은 경우는 id들이 모여있는 곳 밑에 추가해주시면 됩니다.)

     <public type="id" name="recent_remove_item" id="0x7f0d0124" />
    <public type="id" name="recent_inspect_item" id="0x7f0d0125" />
    <public type="plurals" name="status_bar_accessibility_recent_apps" id="0x7f0e0000" />

이렇게 되어있는 경우 id 타입의 끝값이 0x7f0d0125 이므로

     <public type="id" name="recent_remove_item" id="0x7f0d0124" />
    <public type="id" name="recent_inspect_item" id="0x7f0d0125" />

    <public type="id" name="toggles_button" id="0x7f0d0126" />
    <public type="plurals" name="status_bar_accessibility_recent_apps" id="0x7f0e0000" />

 

이런식으로 해주시면 됩니다. 뒤의 id값(0x블라블라블라)부분은 기종마다 다를 수 있습니다.

위에서 tw_quickpanel_icon_toggles 와 toggles_button 의 id값(0x블라블라)는 어디 따로 메모해두세요.

 

그리고는 vaules/ids.xml 파일에서는

 

 </resources>

위에

     <item type="id" name="toggles_button">false</item>

추가해주시면 됩니다.

다음으로는 layout/tw_status_bar_expanded.xml 파일을 보면

 <HorizontalScrollView android:id="@id/quicksetting_scroller"

이걸로 검색을 하셔서

그줄에 있는

 android:layout_height="@dimen/quick_setting_button_height"

이거를

 android:layout_height="wrap_content"

으로 고쳐주시고

 <LinearLayout android:orientation="vertical" android:id="@id/scrollCart"

 

이걸로 검색을 하셔서

  android:layout_height="wrap_content"

이거를

 android:layout_height="@dimen/quick_setting_button_height"

이걸로 고쳐주세요.

 

layout/tw_status_bar_expanded_header 파일에서는

 <Space android:layout_width="0.0dip" android:layout_height="0.0dip" android:layout_weight="1.0" />

이 줄 밑에

     <RelativeLayout android:id="@id/toggles_button" android:background="@drawable/tw_quick_panel_setting_button_bg" android:focusable="true" android:visibility="visible" android:layout_width="@dimen/status_bar_expanded_setting_width" android:layout_height="39.0dip">
        <ImageView android:id="@id/settings_button_icon" android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@drawable/tw_quickpanel_icon_toggles" android:scaleType="center" android:layout_centerHorizontal="true" android:layout_centerVertical="true" android:contentDescription="@string/accessibility_settings_button" />
    </RelativeLayout>

이걸 추가해주시면 됩니다.

 

이로서 apk 수정은 끝입니다. 컴파일 해주시면 됩니디...

 

 

SystemUI.odex 에서는

com/android/systemui/statusbar/phone/PhoneStatusBar.smali 파일에서

 .field private doNotDisturbIconShow:Z

아래에

 .field private intent:Landroid/content/Intent;

추가

 

 .field mDoNotDisturb:Lcom/android/systemui/statusbar/DoNotDisturb;

아래에

 .field mDropdownSettingsDefualtBehavior:Z

추가

 

 .field mTickingDoneListener:Landroid/view/animation/Animation$AnimationListener;

아래에

 .field mToggleButton:Landroid/view/View;

.field private mToggleButtonListener:Landroid/view/View$OnClickListener;

추가

 

     new-instance v0, Lcom/android/systemui/statusbar/phone/PhoneStatusBar$28;

    invoke-direct {v0, p0}, Lcom/android/systemui/statusbar/phone/PhoneStatusBar$28;-><init>(Lcom/android/systemui/statusbar/phone/PhoneStatusBar;)V

    iput-object v0, p0, Lcom/android/systemui/statusbar/phone/PhoneStatusBar;->mBroadcastReceiver:Landroid/content/BroadcastReceiver;

아래에

     new-instance v0, Lcom/android/systemui/statusbar/phone/PhoneStatusBar$33;

    invoke-direct {v0, p0}, Lcom/android/systemui/statusbar/phone/PhoneStatusBar$33;-><init>(Lcom/android/systemui/statusbar/phone/PhoneStatusBar;)V

    iput-object v0, p0, Lcom/android/systemui/statusbar/phone/PhoneStatusBar;->mToggleButtonListener:Landroid/view/View$OnClickListener;

 

추가

 

 

     new-instance v0, Lcom/android/systemui/statusbar/phone/PhoneStatusBar$31;

    invoke-direct {v0, p0}, Lcom/android/systemui/statusbar/phone/PhoneStatusBar$31;-><init>(Lcom/android/systemui/statusbar/phone/PhoneStatusBar;)V

    iput-object v0, p0, Lcom/android/systemui/statusbar/phone/PhoneStatusBar;->mStopTracing:Ljava/lang/Runnable;

아래에

    iput-boolean v2, p0, Lcom/android/systemui/statusbar/phone/PhoneStatusBar;->mDropdownSettingsDefualtBehavior:Z

추가

 

.method static synthetic access$5700(Lcom/android/systemui/statusbar/phone/PhoneStatusBar;Z)V
    .registers 2
    .parameter "x0"
    .parameter "x1"

    .prologue
    .line 157
    invoke-direct {p0, p1}, Lcom/android/systemui/statusbar/phone/PhoneStatusBar;->setBrightnessControllerVisivility(Z)V

    return-void
.end method 

아래에

.method static synthetic access$5800(Lcom/android/systemui/statusbar/phone/PhoneStatusBar;)Landroid/content/Intent;
    .registers 2
    .parameter "x0"

    .prologue
    .line 142
    iget-object v0, p0, Lcom/android/systemui/statusbar/phone/PhoneStatusBar;->intent:Landroid/content/Intent;

    return-object v0
.end method

.method static synthetic access$5802(Lcom/android/systemui/statusbar/phone/PhoneStatusBar;Landroid/content/Intent;)Landroid/content/Intent;
    .registers 2
    .parameter "x0"
    .parameter "x1"

    .prologue
    .line 142
    iput-object p1, p0, Lcom/android/systemui/statusbar/phone/PhoneStatusBar;->intent:Landroid/content/Intent;

    return-object p1
.end method

.method static synthetic access$5900(Lcom/android/systemui/statusbar/phone/PhoneStatusBar;)V
    .registers 1
    .parameter "x0"

    .prologue
    .line 142
    invoke-direct {p0}, Lcom/android/systemui/statusbar/phone/PhoneStatusBar;->mSettingsBehaviorOpenToggles()V

    return-void
.end method 

추가

 

    iget-object v10, p0, Lcom/android/systemui/statusbar/phone/PhoneStatusBar;->mSettingsButton:Landroid/view/View; 

아래에

     iget-object v10, p0, Lcom/android/systemui/statusbar/phone/PhoneStatusBar;->mToggleButton:Landroid/view/View;

추가

 

iget-object v10, p0, Lcom/android/systemui/statusbar/phone/PhoneStatusBar;->mSettingsButton:Landroid/view/View;  

살짝 밑에 보시면 .end method 있으실텐데 그밑에

 .method private mSettingsBehaviorOpenSettings()V
    .registers 4

    .prologue
    .line 3008
    invoke-virtual {p0}, Lcom/android/systemui/statusbar/phone/PhoneStatusBar;->isDeviceProvisioned()Z

    move-result v0

    if-nez v0, :cond_7

    .line 3017
    :goto_6
    return-void

    .line 3011
    :cond_7
    :try_start_7
    invoke-static {}, Landroid/app/ActivityManagerNative;->getDefault()Landroid/app/IActivityManager;

    move-result-object v0

    invoke-interface {v0}, Landroid/app/IActivityManager;->dismissKeyguardOnNextActivity()V
    :try_end_e
    .catch Landroid/os/RemoteException; {:try_start_7 .. :try_end_e} :catch_24

    .line 3014
    :goto_e
    iget-object v0, p0, Lcom/android/systemui/statusbar/phone/PhoneStatusBar;->mContext:Landroid/content/Context;

    new-instance v1, Landroid/content/Intent;

    const-string v2, "android.settings.SETTINGS"

    invoke-direct {v1, v2}, Landroid/content/Intent;-><init>(Ljava/lang/String;)V

    const/high16 v2, 0x1000

    invoke-virtual {v1, v2}, Landroid/content/Intent;->setFlags(I)Landroid/content/Intent;

    move-result-object v1

    invoke-virtual {v0, v1}, Landroid/content/Context;->startActivity(Landroid/content/Intent;)V

    .line 3016
    invoke-virtual {p0}, Lcom/android/systemui/statusbar/phone/PhoneStatusBar;->animateCollapse()V

    goto :goto_6

    .line 3012
    :catch_24
    move-exception v0

    goto :goto_e
.end method

.method private mSettingsBehaviorOpenToggles()V
    .registers 9

    .prologue
    const/4 v7, 0x2

    const-wide/16 v5, 0x190

    const/4 v4, 0x1

    .line 3020
    iget-object v3, p0, Lcom/android/systemui/statusbar/phone/PhoneStatusBar;->mQuickSettingView:Lcom/android/systemui/statusbar/policy/quicksetting/QuickSettingPanel;

    invoke-virtual {v3}, Lcom/android/systemui/statusbar/policy/quicksetting/QuickSettingPanel;->getVisibility()I

    move-result v3

    if-nez v3, :cond_3f

    .line 3021
    iget-object v3, p0, Lcom/android/systemui/statusbar/phone/PhoneStatusBar;->mQuickSettingView:Lcom/android/systemui/statusbar/policy/quicksetting/QuickSettingPanel;

    invoke-virtual {v3}, Lcom/android/systemui/statusbar/policy/quicksetting/QuickSettingPanel;->getHeight()I

    move-result v2

    .line 3023
    .local v2, height:I
    iget-object v3, p0, Lcom/android/systemui/statusbar/phone/PhoneStatusBar;->mContext:Landroid/content/Context;

    invoke-static {v3, v4}, Landroid/view/animation/AnimationUtils;->makeOutAnimation(Landroid/content/Context;Z)Landroid/view/animation/Animation;

    move-result-object v0

    .line 3025
    .local v0, a:Landroid/view/animation/Animation;
    invoke-virtual {v0, v5, v6}, Landroid/view/animation/Animation;->setDuration(J)V

    .line 3026
    iget-object v3, p0, Lcom/android/systemui/statusbar/phone/PhoneStatusBar;->mContext:Landroid/content/Context;

    invoke-static {v3, v4}, Landroid/view/animation/AnimationUtils;->makeInAnimation(Landroid/content/Context;Z)Landroid/view/animation/Animation;

    move-result-object v1

    .line 3028
    .local v1, b:Landroid/view/animation/Animation;
    invoke-virtual {v1, v5, v6}, Landroid/view/animation/Animation;->setDuration(J)V

    .line 3030
    new-instance v3, Lcom/android/systemui/statusbar/phone/PhoneStatusBar$36;

    invoke-direct {v3, p0, v1}, Lcom/android/systemui/statusbar/phone/PhoneStatusBar$36;-><init>(Lcom/android/systemui/statusbar/phone/PhoneStatusBar;Landroid/view/animation/Animation;)V

    invoke-virtual {v0, v3}, Landroid/view/animation/Animation;->setAnimationListener(Landroid/view/animation/Animation$AnimationListener;)V

    .line 3061
    iget-object v3, p0, Lcom/android/systemui/statusbar/phone/PhoneStatusBar;->mQuickSettingView:Lcom/android/systemui/statusbar/policy/quicksetting/QuickSettingPanel;

    invoke-virtual {v3, v0}, Lcom/android/systemui/statusbar/policy/quicksetting/QuickSettingPanel;->startAnimation(Landroid/view/animation/Animation;)V

    .line 3152
    .end local v2           #height:I
    :goto_31
    return-void

    .line 3063
    .restart local v2       #height:I
    new-instance v3, Lcom/android/systemui/statusbar/phone/PhoneStatusBar$32;

    invoke-direct {v3, p0}, Lcom/android/systemui/statusbar/phone/PhoneStatusBar$32;-><init>(Lcom/android/systemui/statusbar/phone/PhoneStatusBar;)V

    invoke-virtual {v0, v3}, Landroid/view/animation/Animation;->setAnimationListener(Landroid/view/animation/Animation$AnimationListener;)V

    .line 3081
    iget-object v3, p0, Lcom/android/systemui/statusbar/phone/PhoneStatusBar;->mQuickSettingView:Lcom/android/systemui/statusbar/policy/quicksetting/QuickSettingPanel;

    invoke-virtual {v3, v0}, Lcom/android/systemui/statusbar/policy/quicksetting/QuickSettingPanel;->startAnimation(Landroid/view/animation/Animation;)V

    .line 3087
    .end local v0           #a:Landroid/view/animation/Animation;
    .end local v1           #b:Landroid/view/animation/Animation;
    .end local v2           #height:I
    :cond_3f
    iget-object v3, p0, Lcom/android/systemui/statusbar/phone/PhoneStatusBar;->mContext:Landroid/content/Context;

    invoke-static {v3, v4}, Landroid/view/animation/AnimationUtils;->makeInAnimation(Landroid/content/Context;Z)Landroid/view/animation/Animation;

    move-result-object v0

    .line 3089
    .restart local v0       #a:Landroid/view/animation/Animation;
    invoke-virtual {v0, v5, v6}, Landroid/view/animation/Animation;->setDuration(J)V

    .line 3090
    iget-object v3, p0, Lcom/android/systemui/statusbar/phone/PhoneStatusBar;->mContext:Landroid/content/Context;

    invoke-static {v3, v4}, Landroid/view/animation/AnimationUtils;->makeOutAnimation(Landroid/content/Context;Z)Landroid/view/animation/Animation;

    move-result-object v1

    .line 3092
    .restart local v1       #b:Landroid/view/animation/Animation;
    invoke-virtual {v1, v5, v6}, Landroid/view/animation/Animation;->setDuration(J)V

    .line 3094
    new-instance v3, Lcom/android/systemui/statusbar/phone/PhoneStatusBar$35;

    invoke-direct {v3, p0, v0}, Lcom/android/systemui/statusbar/phone/PhoneStatusBar$35;-><init>(Lcom/android/systemui/statusbar/phone/PhoneStatusBar;Landroid/view/animation/Animation;)V

    invoke-virtual {v1, v3}, Landroid/view/animation/Animation;->setAnimationListener(Landroid/view/animation/Animation$AnimationListener;)V

    .line 3127
    new-instance v3, Lcom/android/systemui/statusbar/phone/PhoneStatusBar$34;

    invoke-direct {v3, p0}, Lcom/android/systemui/statusbar/phone/PhoneStatusBar$34;-><init>(Lcom/android/systemui/statusbar/phone/PhoneStatusBar;)V

    invoke-virtual {v0, v3}, Landroid/view/animation/Animation;->setAnimationListener(Landroid/view/animation/Animation$AnimationListener;)V

    .line 3145
    iget-object v3, p0, Lcom/android/systemui/statusbar/phone/PhoneStatusBar;->mQuickSettingView:Lcom/android/systemui/statusbar/policy/quicksetting/QuickSettingPanel;

    invoke-virtual {v3, v0}, Lcom/android/systemui/statusbar/policy/quicksetting/QuickSettingPanel;->startAnimation(Landroid/view/animation/Animation;)V

    goto :goto_31
.end method

추가

 

    iget-object v9, p0, Lcom/android/systemui/statusbar/phone/PhoneStatusBar;->mSettingsButton:Landroid/view/View;

    iget-object v10, p0, Lcom/android/systemui/statusbar/phone/PhoneStatusBar;->mSettingsButtonListener:Landroid/view/View$OnClickListener;

    invoke-virtual {v9, v10}, Landroid/view/View;->setOnClickListener(Landroid/view/View$OnClickListener;)V 

이거 밑에

    iget-object v9, p0, Lcom/android/systemui/statusbar/phone/PhoneStatusBar;->mStatusBarWindow:Lcom/android/systemui/statusbar/phone/StatusBarWindowView;

    const v10, 0x7f0d0126

    invoke-virtual {v9, v10}, Lcom/android/systemui/statusbar/phone/StatusBarWindowView;->findViewById(I)Landroid/view/View;

    move-result-object v9

    iput-object v9, p0, Lcom/android/systemui/statusbar/phone/PhoneStatusBar;->mToggleButton:Landroid/view/View;

    .line 684
    iget-object v9, p0, Lcom/android/systemui/statusbar/phone/PhoneStatusBar;->mToggleButton:Landroid/view/View;

    iget-object v10, p0, Lcom/android/systemui/statusbar/phone/PhoneStatusBar;->mToggleButtonListener:Landroid/view/View$OnClickListener;

    invoke-virtual {v9, v10}, Landroid/view/View;->setOnClickListener(Landroid/view/View$OnClickListener;)V 

추가

저기서 7f0d0126 은 아까 따로 메모해주셨던 toggles_button id 로 바꿔주세요.

그리고 첨부파일에 있는 PhoneStatusBar$32 ~ $36 파일들은

com/android/systemui/statusbar/phone/ 경로에 넣어주시면 됩니다.

 

 

 

'끄적끄적' 카테고리의 다른 글

4.2.2처럼 토글 확장  (4) 2013.07.29
[뻘팁]CSC에 잇는 설정들  (0) 2013.07.14
핫스팟/플래시 토글 추가  (1) 2013.07.14
smali 수정을 좀더 쉽게..  (1) 2013.07.14
알림창 수정기능 활성화  (5) 2013.05.03