[노트1 젤리빈 기준입니다./PC로 작성한 게시글입니다.]
〉퀵패널에 손전등 버튼을 추가하여 끄고 켤수있게 합니다.
〉xda의 가이드를 기준으로 설명해드리겠습니다.
http://forum.xda-developers.com/showpost.php?p=47555600&postcount=11
〉필요한 파일은 세가지 되겠습니다.
SystemUI.apk/SecSettings.apk/SecSettingsProvider.apk
〉디컴파일과 컴파일이 가능한 분들에게 해당됩니다.
1.위의 xda원문 링크에서 파일을 다운로드하여 압축을 푸세요.(파일은 이 게시글에도 첨부(resources.rar)해뒀습니다.)
2.SystemUI.apk 디컴파일 하세요.
3.첨부된 파일(resources)/SystemUI/res/drawable-xhdpi폴더안에 있는,
tw_quick_panel_icon_flashlight_on.png
tw_quick_panel_icon_flashlight_off.png
이 두개의 아이콘을 디컴파일한 SystemUI.apk의 같은 경로에 투척하세요.
(이 아이콘은 여러분 맘대로 딴걸로 바꾸면 됩니다.이름은 똑같이해서...)
4.SystemUI.apk/res/values/strings.xml을 열어
.<string name="quickpanel_flashlight_text">Torch</string>
이 구문을 맨 밑에 추가하세요.
5.Torch를 "손전등"같이 한글화시키는게 사용하기 편하니까 이번엔 SystemUI.apk/res/values/strings-ko.xml을 열어,
<string name="quickpanel_flashlight_text">손전등</string>
이 구문을 맨 밑에 추가하세요.
(당연히 사용자 마음대로 다른 한글로 수정하셔도 됩니다.예:후래쉬/렌튼/비상등...)
6.여기서 일단 컴파일 하세요.
7.그리고, 컴파일 완료와 동시에 방금 컴파일된 UnsignedSystemUI.apk파일을 다시 디컴파일 하세요.
》왜 이렇게 하냐면~??...조금전에 손전등에 필요한 아이콘파일과 string구문을 추가했는데, 그게 public.xml에서 새로 생성됐고, 새로 생성된 public의 값을 smali에 있는 값과 똑같이 해주기 위함입니다. 이걸 안해주면 손전등이 제대로 동작하지 않습니다.)
8.디컴파일한 UnsignedSystemUI.apk/res/values/public.xml을 열어,
<public type="drawable" name="tw_quick_panel_icon_flashlight_off" id="0x7f020281" />
<public type="drawable" name="tw_quick_panel_icon_flashlight_on" id="0x7f020282" />
<public type="string" name="quickpanel_flashlight_text" id="0x7f0a0150" />
이렇게 세가지 구문을 찾으세요.
(여기서 id값은 제 갤노트1 기준이므로 여러분들의 id값은 각자 다 다를수 있습니다.)
일단, 확인했으면 public.xml 창은 그대로 열어두세요.
9.이번엔 첨부된 파일(resources)/SystemUI/smali/com/android/systemui/statusbar/policy/quicksetting폴더에 있는 FlashlightQuickSettingButton.smali 를 디컴파일한 SystemUI.apk의 똑같은 경로에 투척하세요.
(주의:UnsignedSystemUI.apk에 넣으면 안됩니다.)
10.FlashlightQuickSettingButton.smali를 열어보면 아래와 같은 세개의 구문이 있습니다.
위의 8번에서 일단 열어두라고했던 public.xml의 id값과 여기의 값을 똑같이 해주면 됩니다.
초록색 글자를 public.xml에서 검색하여 값을 찾아, 왼쪽의 0x7f..값을 지우고 그 위치에 바꿔주면 됩니다.
const v3, 0x7f0a01b7 <!-- id of quickpanel_flashlight_text
const v4, 0x7f02033d <!-- id of tw_quick_panel_icon_flashlight_on
const v5, 0x7f02033c <!-- id of tw_quick_panel_icon_flashlight_off
11.SystemUI.apk작업은 끝났습니다.컴파일하면 됩니다.
12.이번엔, SecSettings.apk 디컴파일 하세요.
13.첨부된 파일(resources)/SecSettings/res/drawable-xhdpi폴더안에 있는 notification_panel_flashlight.png파일을 디컴파일한 SecSettings.apk의 똑같은 경로에 투척하세요.아이콘은 딴걸로 바꾸셔도 됩니다.(Airplane.png파일은 무시하시구요~..ㅋ)
14.이번엔 SecSettings/res/values/strings.xml을 열어 맨밑에,
<string name="notification_panel_flashlight">Torch</string>
이 구문을 추가하세요.
그리고, SystemUI.apk작업할때와 마찬가지로 strings-ko.xml에도 같은 구문을 추가하면 한글화가 되겠죠~^^
<string name="notification_panel_flashlight">손전등</string>
15.이번엔,SecSettings/smali/com/android/settings폴더에 있는 NotificationPanel.smlai를 여세요.
16.아래 메소드를 찾으세요.
.method public MakeConvertPanelName()V
그리고, 아래 파란색으로 돼있는 구문을 저 위치에 추가해주면 됩니다.
(.line번호는 각자 다를수 있습니다./앞에 주석(#)붙은 글자는 넣지마세요.)
Code:
.method public MakeConvertPanelName()V
.registers 4
.prologue
.line 119
iget-object v0, p0, Lcom/android/settings/NotificationPanel;->mConvertPanelItemstring:Ljava/util/HashMap;
const-string v1, "Wifi"
const-string v2, "notification_panel_wifi"
invoke-virtual {v0, v1, v2}, Ljava/util/HashMap;->put(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
...
...
.line 137
iget-object v0, p0, Lcom/android/settings/NotificationPanel;->mConvertPanelItemstring:Ljava/util/HashMap;
const-string v1, "Sync"
const-string v2, "notification_panel_sync"
invoke-virtual {v0, v1, v2}, Ljava/util/HashMap;->put(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
# Torch patch start
.line 148
iget-object v0, p0, Lcom/android/settings/NotificationPanel;->mConvertPanelItemstring:Ljava/util/HashMap;
const-string v1, "Flashlight"
const-string v2, "notification_panel_flashlight"
invoke-virtual {v0, v1, v2}, Ljava/util/HashMap;->put(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
# End
.line 138
iget-object v0, p0, Lcom/android/settings/NotificationPanel;->mConvertPanelItemstring:Ljava/util/HashMap;
const-string v1, "Empty"
const-string v2, "notification_panel_empty"
invoke-virtual {v0, v1, v2}, Ljava/util/HashMap;->put(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
.line 139
iget-object v0, p0, Lcom/android/settings/NotificationPanel;->mConvertPanelItemstring:Ljava/util/HashMap;
const-string v1, "notification_panel_wifi"
const-string v2, "Wifi"
invoke-virtual {v0, v1, v2}, Ljava/util/HashMap;->put(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
...
...
.line 157
iget-object v0, p0, Lcom/android/settings/NotificationPanel;->mConvertPanelItemstring:Ljava/util/HashMap;
const-string v1, "notification_panel_sync"
const-string v2, "Sync"
invoke-virtual {v0, v1, v2}, Ljava/util/HashMap;->put(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
# Torch patch start
.line 168
iget-object v0, p0, Lcom/android/settings/NotificationPanel;->mConvertPanelItemstring:Ljava/util/HashMap;
const-string v1, "notification_panel_flashlight"
const-string v2, "Flashlight"
invoke-virtual {v0, v1, v2}, Ljava/util/HashMap;->put(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
# End
.line 158
iget-object v0, p0, Lcom/android/settings/NotificationPanel;->mConvertPanelItemstring:Ljava/util/HashMap;
const-string v1, "notification_panel_empty"
const-string v2, "Empty"
invoke-virtual {v0, v1, v2}, Ljava/util/HashMap;->put(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
17.자, SecSettings.apk작업도 끝났습니다.컴파일 하세요.
18.이제 마지막으로 SecSettingsProvider.apk/res/values/strings.xml을 열어,
<string name="def_candidate_notification_list">여기에 Flashlight;를 추가해주세요</string>
19.진짜 마지막으로, 첨부파일(resources)에 있는 Torch.apk파일을 폰의 시스템으로 옮겨 퍼미션 644준 후 system/app에 투척하세요.
끝.
수고하셨습니다.^^