알림창 수정기능 활성화
삼성 제 1세대 LTE 폰들(갤럭시 S2 LTE, 갤럭시 S2 HD LTE, 갤럭시 노트) 에 맞춘 글입니다.
수정해야 될 부분은 총
SecSettingsProvider.apk
SecSettingsProvider.odex
SecSettings.odex
입니다.
SecSettingsProvider.apk 에서는 apk 파일을 디컴파일 해주시고
res/values/strings.xml 파일에서
def_active_notification_list 항목과
def_candidate_notification_list 항목이 있을 겁니다.
<string name="def_active_notification_list">Wifi;Location;SilentMode;.....(이하 생략)</string> <string name="def_candidate_notification_list">SBeam;Nfc;DrivingMode;SmartStay;Sync;</string> |
여기서 def_active_notification_list 라는 이름과 def_candidate_notification_list 라는 이름을
def_notification_panel_active_app_list 과 def_notification_panel_candidate_app_list 로 바꿔줍니다.
또 def_notification_panel_candidate_app_list 에 있는 Nfc; 부분을 지워줍니다.
완성될 경우 아래와 같은 모습이 되겠지요
<string name="def_notification_panel_active_app_list">Wifi;Location;...(이하 생략)</string> <string name="def_notification_panel_candidate_app_list">SBeam;DrivingMode;SmartStay;Sync;</string> |
이제 res/values/public.xml 파일에 들어가셔서
<public type="string" name="def_active_notification_list" id="0x7f060022"> <public type="string" name="def_candidate_notification_list" id="0x7f060023"> |
(앞의 name="def_active_notification_list" 로 찾으시면 됩니다. 뒤의 id 값은 폰마다 다를 수 있습니다.)
을 찾은후 여기서도 역시 def_active_notification_list 는 def_notification_panel_active_app_list 로,
def_candidate_notification_list 도 def_notification_panel_candidate_app_list 로 바꿔줍니다.
또한 2개의 id 값은 따로 메모해 놓으세요
완성될 경우 모습입니다.
SecSettingsProvider.odex 에서는
디컴파일 하신 후 com/android/providers/settings/DatabaseHelper.smali 에서
const-string v0, "auto_time" const v3, 0x7f040002 invoke-direct {p0, v1, v0, v3}, Lcom/android/providers/settings/DatabaseHelper;->loadBooleanSetting(Landroid/database/sqlite/SQLiteStatement;Ljava/lang/String;I)V |
찾습니다. 여기서 v0, v3 은 다를 수 있습니다.
그럼 이걸 메모장에 복사하신후(두번 복사하세요)
첫번째 auto_time 부분에는 notification_panel_active_app_list 로
두번째 auto_time 부분에는 notification_panel_candidate_app_list 로 바꿔줍니다.
첫번째 0x7f040002 에는 위에서 메모해둿던 id 값 중 첫번째 값으로
두번째 0x7f040002 에는 위에서 메모해뒀던 id 값 중 두번째 값으로 바꿔줍니다.
완성본은 이렇게 되겠죠
const-string v0, "notification_panel_active_app_list"
const v3, 0x7f060022 invoke-direct {p0, v1, v0, v3}, Lcom/android/providers/settings/DatabaseHelper;->loadStringSetting(Landroid/database/sqlite/SQLiteStatement;Ljava/lang/String;I)V
const v3, 0x7f060023 invoke-direct {p0, v1, v0, v3}, Lcom/android/providers/settings/DatabaseHelper;->loadStringSetting(Landroid/database/sqlite/SQLiteStatement;Ljava/lang/String;I)V |
이제
const-string v0, "airplane_mode_radios"
const/high16 v3, 0x7f06 invoke-direct {p0, v1, v0, v3}, Lcom/android/providers/settings/DatabaseHelper;->loadStringSetting(Landroid/database/sqlite/SQLiteStatement;Ljava/lang/String;I)V |
이부분을 찾아줍니다(airplane_mode_radios 로 검색해주세요. 3개정도 나오실텐데 그중 중간것입니다)
바로 밑에 방금 메모장에서 만든 것을 추가해주세요.
이제 제일 밑부분에
.method private upgradeNotificationPanel(Landroid/database/sqlite/SQLiteDatabase;)V .prologue .line 1238 .line 1239 .line 1241 invoke-virtual {p1, v2}, Landroid/database/sqlite/SQLiteDatabase;->compileStatement(Ljava/lang/String;)Landroid/database/sqlite/SQLiteStatement; move-result-object v1 .line 1250 const v3, 0x7f060022 invoke-direct {p0, v1, v2, v3}, Lcom/android/providers/settings/DatabaseHelper;->loadStringSetting(Landroid/database/sqlite/SQLiteStatement;Ljava/lang/String;I)V .line 1251 invoke-virtual {v2}, Landroid/content/Context;->getResources()Landroid/content/res/Resources; move-result-object v2 const v3, 0x7f060022 invoke-virtual {v2, v3}, Landroid/content/res/Resources;->getString(I)Ljava/lang/String; move-result-object v4 .line 1252 const v3, 0x7f060023 invoke-direct {p0, v1, v2, v3}, Lcom/android/providers/settings/DatabaseHelper;->loadStringSetting(Landroid/database/sqlite/SQLiteStatement;Ljava/lang/String;I)V .line 1253 invoke-virtual {v2}, Landroid/content/Context;->getResources()Landroid/content/res/Resources; move-result-object v2 const v3, 0x7f060023 invoke-virtual {v2, v3}, Landroid/content/res/Resources;->getString(I)Ljava/lang/String; move-result-object v5 move v2, v0 move v3, v0 .line 1261 move-result v6 if-ge v2, v6, :cond_48 .line 1262 invoke-virtual {v4, v6, v2}, Ljava/lang/String;->indexOf(II)I move-result v2 .line 1263 .line 1261 goto :goto_37 :cond_48 .line 1266 move-result v4 if-ge v0, v4, :cond_60 .line 1267 invoke-virtual {v5, v4, v0}, Ljava/lang/String;->indexOf(II)I move-result v0 .line 1268 invoke-virtual {v5, v4}, Ljava/lang/String;->indexOf(Ljava/lang/String;)I move-result v4 .line 1270 if-eq v4, v6, :cond_7e if-le v0, v4, :cond_7e .line 1276 invoke-static {v3}, Ljava/lang/Integer;->valueOf(I)Ljava/lang/Integer; move-result-object v3 invoke-direct {p0, v1, v0, v3}, Lcom/android/providers/settings/DatabaseHelper;->loadSetting(Landroid/database/sqlite/SQLiteStatement;Ljava/lang/String;Ljava/lang/Object;)V .line 1277 invoke-static {v2}, Ljava/lang/Integer;->valueOf(I)Ljava/lang/Integer; move-result-object v2 invoke-direct {p0, v1, v0, v2}, Lcom/android/providers/settings/DatabaseHelper;->loadSetting(Landroid/database/sqlite/SQLiteStatement;Ljava/lang/String;Ljava/lang/Object;)V .line 1278 .line 1280 .line 1281 .line 1282 .line 1284 .line 1273 .line 1266 goto :goto_49 .line 1280 invoke-virtual {p1}, Landroid/database/sqlite/SQLiteDatabase;->endTransaction()V .line 1281 .line 1282 :cond_8c |
중간에 0x0x7f060022, 0x7f060023 역시 위와 동일하게 바꿔줍니다.
복사하셔서 통채로 붙여넣어주세요
SecSettings.odex 에서는 알림창 항목을 활성화 시켜주시면 됩니다.
디컴파일 하신 후 com/android/settings/DisplaySettings.smali 에서
invoke-virtual {p0}, Lcom/android/settings/DisplaySettings;->getPreferenceScreen()Landroid/preference/PreferenceScreen; move-result-object v10 const-string v11, "notification_panel_edit" invoke-virtual {p0, v11}, Lcom/android/settings/DisplaySettings;->findPreference(Ljava/lang/CharSequence;)Landroid/preference/Preference; move-result-object v11 invoke-virtual {v10, v11}, Landroid/preference/PreferenceScreen;->removePreference(Landroid/preference/Preference;)Z |
찾습니다. p0, v11, v10 등은 다를 수도 있습니다. 이 형식대로 된 부분을 찾아주세요
(notification_panel_edit 으로 검색하시면 쉽습니다)
그리고 위에서 찾은 부분을 다 지워주시면 됩니다 (위의 빨간글씨 부분)
마지막으로 완성된 파일들을 넣어주신 후에는
data/data/com.android.providers.settingsprovider 폴더를 지워주신 후
재부팅해주시면 됩니다.
완성본 예제입니다.