끄적끄적

알림창 수정기능 활성화

소심한작은곰 2013. 5. 3. 14:08

삼성 제 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-string v0, "notification_panel_candidate_app_list"

    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
    .registers 9
    .parameter

    .prologue
    const/4 v0, 0x0

    .line 1238
    invoke-virtual {p1}, Landroid/database/sqlite/SQLiteDatabase;->beginTransaction()V

    .line 1239
    const/4 v1, 0x0

    .line 1241
    :try_start_5
    const-string v2, "INSERT OR REPLACE INTO system(name,value) VALUES(?,?);"

    invoke-virtual {p1, v2}, Landroid/database/sqlite/SQLiteDatabase;->compileStatement(Ljava/lang/String;)Landroid/database/sqlite/SQLiteStatement;

    move-result-object v1

    .line 1250
    const-string v2, "notification_panel_active_app_list"

    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
    iget-object v2, p0, Lcom/android/providers/settings/DatabaseHelper;->mContext:Landroid/content/Context;

    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-string v2, "notification_panel_candidate_app_list"

    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
    iget-object v2, p0, Lcom/android/providers/settings/DatabaseHelper;->mContext:Landroid/content/Context;

    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
    :goto_37
    invoke-virtual {v4}, Ljava/lang/String;->length()I

    move-result v6

    if-ge v2, v6, :cond_48

    .line 1262
    const/16 v6, 0x3b

    invoke-virtual {v4, v6, v2}, Ljava/lang/String;->indexOf(II)I

    move-result v2

    .line 1263
    add-int/lit8 v3, v3, 0x1

    .line 1261
    add-int/lit8 v2, v2, 0x1

    goto :goto_37

    :cond_48
    move v2, v0

    .line 1266
    :goto_49
    invoke-virtual {v5}, Ljava/lang/String;->length()I

    move-result v4

    if-ge v0, v4, :cond_60

    .line 1267
    const/16 v4, 0x3b

    invoke-virtual {v5, v4, v0}, Ljava/lang/String;->indexOf(II)I

    move-result v0

    .line 1268
    const-string v4, "Empty"

    invoke-virtual {v5, v4}, Ljava/lang/String;->indexOf(Ljava/lang/String;)I

    move-result v4

    .line 1270
    const/4 v6, -0x1

    if-eq v4, v6, :cond_7e

    if-le v0, v4, :cond_7e

    .line 1276
    :cond_60
    const-string v0, "notification_panel_active_number_of_apps"

    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
    const-string v0, "notification_panel_candidate_number_of_apps"

    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
    invoke-virtual {p1}, Landroid/database/sqlite/SQLiteDatabase;->setTransactionSuccessful()V
    :try_end_75
    .catchall {:try_start_5 .. :try_end_75} :catchall_83

    .line 1280
    invoke-virtual {p1}, Landroid/database/sqlite/SQLiteDatabase;->endTransaction()V

    .line 1281
    if-eqz v1, :cond_7d

    .line 1282
    invoke-virtual {v1}, Landroid/database/sqlite/SQLiteStatement;->close()V

    .line 1284
    :cond_7d
    return-void

    .line 1273
    :cond_7e
    add-int/lit8 v2, v2, 0x1

    .line 1266
    add-int/lit8 v0, v0, 0x1

    goto :goto_49

    .line 1280
    :catchall_83
    move-exception v0

    invoke-virtual {p1}, Landroid/database/sqlite/SQLiteDatabase;->endTransaction()V

    .line 1281
    if-eqz v1, :cond_8c

    .line 1282
    invoke-virtual {v1}, Landroid/database/sqlite/SQLiteStatement;->close()V

    :cond_8c
    throw v0
.end method


중간에 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 폴더를 지워주신 후

재부팅해주시면 됩니다.

 

완성본 예제입니다.

 

알림창 수정기능 활성화.vol1.egg

 

알림창 수정기능 활성화.vol2.egg