LITTLEBEAR
젤리빈 4.2.2 스타일 상단바 만들기(토글 확장 아닙니다) 본문
삼성 제 1세대 LTE 폰들(갤럭시 S2 LTE, 갤럭시 S2 HD LTE, 갤럭시 노트) 에 맞춘 글입니다.
먼저 이 기능은 Disaster Rom v4 에서 빼온 기능입니다.
상단바 교체니까 수정할 부분은 두부분입니다.
SystemUI.apk
SystemUI.odex
준비물입니다. 먼저 받아주세요
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" /> |
이렇게 되어있는 경우 id 타입의 끝값이 0x7f0d0125 이므로
<public type="id" name="recent_remove_item" id="0x7f0d0124" /> <public type="id" name="toggles_button" id="0x7f0d0126" /> |
이런식으로 해주시면 됩니다. 뒤의 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"> |
이걸 추가해주시면 됩니다.
이로서 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 .prologue return-void |
아래에
.method static synthetic access$5800(Lcom/android/systemui/statusbar/phone/PhoneStatusBar;)Landroid/content/Intent; .prologue return-object v0 .method static synthetic access$5802(Lcom/android/systemui/statusbar/phone/PhoneStatusBar;Landroid/content/Intent;)Landroid/content/Intent; .prologue return-object p1 .method static synthetic access$5900(Lcom/android/systemui/statusbar/phone/PhoneStatusBar;)V .prologue return-void |
추가
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 .prologue move-result v0 if-nez v0, :cond_7 .line 3017 .line 3011 move-result-object v0 invoke-interface {v0}, Landroid/app/IActivityManager;->dismissKeyguardOnNextActivity()V .line 3014 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 goto :goto_6 .line 3012 goto :goto_e .method private mSettingsBehaviorOpenToggles()V .prologue const-wide/16 v5, 0x190 const/4 v4, 0x1 .line 3020 invoke-virtual {v3}, Lcom/android/systemui/statusbar/policy/quicksetting/QuickSettingPanel;->getVisibility()I move-result v3 if-nez v3, :cond_3f .line 3021 invoke-virtual {v3}, Lcom/android/systemui/statusbar/policy/quicksetting/QuickSettingPanel;->getHeight()I move-result v2 .line 3023 invoke-static {v3, v4}, Landroid/view/animation/AnimationUtils;->makeOutAnimation(Landroid/content/Context;Z)Landroid/view/animation/Animation; move-result-object v0 .line 3025 .line 3026 invoke-static {v3, v4}, Landroid/view/animation/AnimationUtils;->makeInAnimation(Landroid/content/Context;Z)Landroid/view/animation/Animation; move-result-object v1 .line 3028 .line 3030 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 invoke-virtual {v3, v0}, Lcom/android/systemui/statusbar/policy/quicksetting/QuickSettingPanel;->startAnimation(Landroid/view/animation/Animation;)V .line 3152 .line 3063 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 invoke-virtual {v3, v0}, Lcom/android/systemui/statusbar/policy/quicksetting/QuickSettingPanel;->startAnimation(Landroid/view/animation/Animation;)V .line 3087 invoke-static {v3, v4}, Landroid/view/animation/AnimationUtils;->makeInAnimation(Landroid/content/Context;Z)Landroid/view/animation/Animation; move-result-object v0 .line 3089 .line 3090 invoke-static {v3, v4}, Landroid/view/animation/AnimationUtils;->makeOutAnimation(Landroid/content/Context;Z)Landroid/view/animation/Animation; move-result-object v1 .line 3092 .line 3094 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 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 invoke-virtual {v3, v0}, Lcom/android/systemui/statusbar/policy/quicksetting/QuickSettingPanel;->startAnimation(Landroid/view/animation/Animation;)V goto :goto_31 |
추가
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 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 |