소심한작은곰
13.07.29
조회 수 9061
추천 수 25
댓글 23

휴대폰마다 상황이 각각 다 다르기 때문에...강좌 식으로 쓰긴 힘들 것 같습니다.

어떤 흐름으로 진행했는지 써보려고 합니다.

 


이런 식으로 만들어집니다.

(상단바에 있는 숨기기 버튼 부분은 나중에 쓰도록 하겠습니다)

 

 

먼저 상단바에 토글 부분을 담당하는 부분은

com/android/systemui/statusbar/policy/quicksetting/QuickSettingButton*.smali 와

com/android/systemui/statusbar/policy/quicksetting/QuickSettingPanel*.smali 입니다.

(PhoneStatusBar에서는 그냥 그...애니메이션 부분만 담당하더군요. prepare어쩌고저쩌고 메서드였는데..)

실제로 layout 에서도

 

com.android.systemui.statusbar.policy.quicksetting.QuickSettingPanel android:orientation="horizontal" android:id="@id/quicksetting_container" android:layout_width="wrap_content" android:layout_height="wrap_content" android:divider="@drawable/tw_black_bg" android:showDividers="middle" />

 

이렇게 나와있구요

마음 같았으면 QuickSettingPanel 파일을 수정해서 상황별로 다른 토글을 불러오도록 하고 싶었지만

java언어 상태라면 모를까..dalvik code 단계라서 수정하기도 어렵고 해서

저는 quicksetting 폴더 안에

QuickSettingTile*.smali 파일들과 QuickSettingTilePanel*.smali 파일을 새로 만들기로 하고

layout에서는

                GridLayout android:orientation="horizontal" android:id="@id/quicksetting_tile" android:layout_width="fill_parent" android:layout_height="wrap_content">
                    com.android.systemui.statusbar.policy.quicksetting.QuickSettingTilePanel android:orientation="horizontal" android:id="@id/quicksetting_tile_container" android:layout_width="fill_parent" android:layout_height="wrap_content" android:divider="@drawable/tw_black_bg" android:showDividers="middle" />
                </GridLayout

이런식으로 배치해뒀습니다.

새로 QuickSettingTile*.smali 파일과 QuickSettingTilePanel*.smali 파일을 추가할 때는

QuickSettingButton*.smali 파일과 QuickSettingPanel*.smali 파일을 복사해서

이름도 바꾸고, 내용에 있는

QuickSettingButton이라는 글자는 QuickSettingTile로,

QuickSettingPanel이라는 글자는 QuickSettingTilePanel 로 바꿔준 뒤 quicksetting 폴더 안에 추가했습니다.

(단, QuickSettingPanel 안에 한군데는 바꾸지 말아야 하는데 refreshView() 메서드 안의


    .line 294
    :try_start_61
    new-instance v6, Ljava/lang/StringBuilder;

    invoke-direct {v6}, Ljava/lang/StringBuilder;->()V

    const-string v7, "com.android.systemui.statusbar.policy.quicksetting."

    invoke-virtual {v6, v7}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;

    move-result-object v6

    aget-object v7, v0, v5

    invoke-virtual {v6, v7}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;

    move-result-object v6

    const-string v7, "QuickSettingButton"

    invoke-virtual {v6, v7}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;

    move-result-object v6

요부분에서 큰따옴표안에있는 저 QuickSettingButton 부분은 바꾸면 안됩니다.

notification_panel_active_app_list 에서 String[] 값을 받아와서

(그 값) + (QuickSettingButton) 이라는 파일이 quicksetting 폴더 안에 있으면 그 토글을 띄우는거기 때문에..

(WifiQuickSettingButton 이라든지, FlashlightQuickSettingButton 이라든지요)

그리고 나서 띄워보니, 스크롤 가능한 토글목록 말고 방금 새로 만든 토글 목록이 뜨더군요

근데 처음 생각에는, GridLayout 으로 parent를 지정해줬으니 자동으로 한 줄을 넘으면 토글이 밑줄으로 넘어가지 않을까, 하고 생각했었는데 안넘어가더군요(소스에서 직접 addView로 추가해줘서 그런지, 아니면 child가 LinearLayout이라서 그런지)

그래서 인터넷에 찾아본 결과 어느정도 프로그래밍을 하신 분들도

소스 단계에서 addView할때마다 남은 width를 구해서 만약 width가 한계가 되면 새로운 layout을 밑에 만들어 거기에 배치하라는 대답이시더군요

제가 하고자 하는 토글은 딱 한줄에 5개가 들어가기에 width를 구할 필요는 없었고, 그냥 3줄을 GridLayout으로 다 한번에 해결하려 하지 말고 각각 LinearLayout를 하나씩 정해줬죠

 

그래서 위에 QuickSettingTile*.smali 파일과 QuickSettingTilePanel*.smali 파일을 새로 추가해주듯이

QuickSettingTile1*.smali QuickSettingTile2*.smali 파일과 QuickSettingTilePanel1*.smali QuickSettingTilePanel2*.smali 파일을 새로 추가시켜줬죠

 

그리고 layout에서는

 

                <LinearLayout android:orientation="horizontal" android:id="@id/quicksetting_tile" android:layout_width="fill_parent" android:layout_height="wrap_content"
                    <com.android.systemui.statusbar.policy.quicksetting.QuickSettingTilePanel android:orientation="horizontal" android:id="@id/quicksetting_tile_container" android:layout_width="fill_parent" android:layout_height="wrap_content" android:divider="@drawable/tw_black_bg" android:showDividers="middle" /
                </LinearLayout
                <LinearLayout android:orientation="horizontal" android:id="@id/quicksetting_tile2" android:layout_width="fill_parent" android:layout_height="wrap_content"
                    <com.android.systemui.statusbar.policy.quicksetting.QuickSettingTilePanel1 android:orientation="horizontal" android:id="@id/quicksetting_tile_container2" android:layout_width="fill_parent" android:layout_height="wrap_content" android:divider="@drawable/tw_black_bg" android:showDividers="middle" /
                </LinearLayout
                <LinearLayout android:orientation="horizontal" android:id="@id/quicksetting_tile3" android:layout_width="fill_parent" android:layout_height="wrap_content"
                    <com.android.systemui.statusbar.policy.quicksetting.QuickSettingTilePanel2 android:orientation="horizontal" android:id="@id/quicksetting_tile_container3" android:layout_width="fill_parent" android:layout_height="wrap_content" android:divider="@drawable/tw_black_bg" android:showDividers="middle" /
                </LinearLayout

 

이런식으로 추가를 해줬습니다.

그런데 결과물을 보니...토글이 다 똑같이 앞에 5개만 나오는 겁니다

 

와이파이 GPS 소리 자동회전 블루투스

와이파이 GPS 소리 자동회전 블루투스

와이파이 GPS 소리 자동회전 블루투스

 

이런식으로 말이죠. 하긴 당연한 결과겠지요 QuickSettingTilePanel ~ QuickSettingTilePanel2 까지 전부다 같은 값인 notification_panel_active_app_list 값을 받아오니까 말이죠

그래서 저는 QuickSettingTilePanel ~ QuickSettingTilePanel2 는 notification_panel_active_app_list 말고 다른 값들(예를 들어 active_notification_list_tablet라든지, 아니면 candidate_notification_list_tablet라든지요.)을 사용하면 되지 않을까? 했는데

 

smali 에서 notification_panel_active_app_list 를 다른 걸로 교체하니(active_notification_list_tablet 같은걸로)

더이상 그 값에서 받아오지 않더군요..

예전 알림창 메뉴를 활성시키기 전에 불러왔던 SystemUI.apk 안의 QuickSettingButtonAttribute에서 받아오더군요

 

그래서 SystemUI.apk 안에 QuickSettingButtonAttribute도 역시 QuickSettingButtonAttribute1, QuickSettingButtonAttribute2 값을 새로 만들어주고 array값도 다 따로따로 지정을 해줬습니다.

 

    <string-array name="QuickSettingButtonAttribute"
        <item>Wifi</item
        <item>Location</item
        <item>SilentMode</item
        <item>AutoRotate</item
        <item>Bluetooth</item
    </string-array

    <string-array name="QuickSettingButtonAttribute1"
        <item>MobileData</item
        <item>DormantMode</ite
        <item>PowerSaving</item
        <item>AirplaneMode</item
        <item>MultiWindow</item
    </string-array
    <string-array name="QuickSettingButtonAttribute2"
        <item>DrivingMode</item
        <item>Flashlight</ite
        <item>WifiAp</item
        <item>NfcP2p</item
        <item>SmartStay</item
    </string-array
   

요렇게요. 그리고 QuickSettingTilePanel 안에 있는 QuickSettingButtonAttribute의 id 값은 각각

QuickSettingTilePanel1은 QuickSettingButtonAttribute1의 id값으로,

QuickSettingTilePanel2는 QuickSettingButtonAttribute2의 id값으로 수정했습니다.

 

완성!

 

제 기준으로 최대한 노력해봤지만...마음에 들지 않네요

smali 잘 다루시는 분은 QuickSettingPanel 파일 한 개로 다 해결했을 텐데...

 

 

아 그런데 한가지 버그는.....음악이 재생중이거나 이어폰을 꼽으면 상단바에 뭐가 뜨는데

그게 토글 첫번째 줄과 두번째 줄 사이에 뜹니다..수정해야 되는데 어딜 건드려야 할지 아직 감이 안오더군요

다음에 찾아내면 쓰도록 하겠습니다.


Extra Form
첨부
Screenshot_2013-07-29-01-05-18.png  [File Size:104.7KB/Download:0]
댓글을 남겨야 다운로드가 가능합니다. 감사의 댓글을 달고 오른쪽 확인버튼을 눌러주세요.
다운로드시 일주일에 한개 이상의 게시물 작성이 필요합니다. 지금 자유게시판에 회원님의 하루를 남겨보세요.
추천♡버튼을 잊지 마세요. 추천인과 회원님 모두 포인트가 적립됩니다.
댓글 23
댓글 쓰기 권한이 없습니다.
분류 정렬 목록 검색 쓰기
List of Articles
제목 글쓴이 추천 조회 날짜
MIUI V5 날씨가 안될때...해결법 2 Lycis7 2 3471 2013.08.07
옵티머스g프로 crt-off 하기(루팅사용자용) 10 옥달 1 10372 2013.08.07
잠금화면 상단바 투명화 관련 팁! 3 휘찐 3586 2013.08.07
갤럭시에서도 기본기능에 "플래시 알리미"가 있네요^^ 9 file 마키나 1 7303 2013.08.07
KT 갤럭시S3 MF6 상단바 아이콘 변경해주실분 XX이 3405 2013.08.06
갤3 시스템 어플 삭제 - kies 연결불가 만드는 항목 4 자유인512 3 3679 2013.08.06
테그라크님 홈피에 갤2 커널 업데이트 됫네요.. 1 Nzel 1 1858 2013.08.06
Thor kernel V0.24 slide2wake & touchwake 5 file 크램프 8 2693 2013.08.05
루팅없이 갤4 손전등기능 활성화하기 3 file 피알 1 5878 2013.08.05
몇일전에 소개했던 wanam xposed 어플이 업데이트가 됬네요 9 file Siesta:) 6 5236 2013.08.03
강좌 [ext4] 순정 펌웨어에서 필요한 파일 추출하기. 35 file 잉여불곰 38 12181 2013.08.03
하얀우유님 화면전환애니메이션4번,5번 오류 수정팁_옵G Pro 1 이필립 2 2057 2013.08.02
자동로그인 8 eprince1015 1 1259 2013.08.02
맛클 앱 업데이트 내역 file 햄프셔 1 1664 2013.08.02
멀티윈도우 되는 모든폰 멀윈 모든어플되게만들기 25 file skagud92 28 6806 2013.08.01
강좌 잠금화면 상단바 갤4처럼 투명화하기 191 file MuHyeon 100 17653 2013.08.01
노트2 아이페이스 레볼루션에서 3 넘어려워 1 1837 2013.08.01
갤럭시S4 화면꺼진 상태에서 볼륨버튼으로 손전등 켜기를 11 Siesta:) 2 9624 2013.08.01
삼성전자 서비스센터 갈때 팁! 10 sjnetsys 1 4317 2013.08.01
XPOSED 앱을 쓰고 싶은데 찾기가 힘들다면? 9 잉여불곰 28 4937 2013.08.01
-------------돌핀브라우져로 플래시재생하기!------------- 5 컄컄 5 5739 2013.08.01
갤투 젤리빈 스샷 팁이 맞는지는 모르겠네요. 3 ▶테그라 1 1798 2013.07.31
Adobe Bridge 이용한 파일명 일괄변경 file 짱구삼촌 3 3575 2013.07.30
안드로이드 4.3 SuperSU 문제에 관한 개인적인 의견 5 file 짱구삼촌 3 8290 2013.07.30
학생여러분 더우시죠^^ 옵티머스에 있는 Q리모컨 팁! 6 s6e9x 4236 2013.07.29
강좌 4.2 처럼 토글 확장하기 23 file 소심한작 25 9061 2013.07.29
Q트랜스레이터 오류생겼던 분들. 렁나이 1 3481 2013.07.29
화면에서 포인트 찾기 쉬운 포토샵 설정 1 file 짱구삼촌 2 1637 2013.07.29
SBS실시간 시청을 위한 어플 5 file sunpia77 7 1877 2013.07.29
무현님 질문이여~ 14 file Boss Hit! 2 1919 2013.07.28
1 - 44 - 135