ステータスバー時計mod その2

昨日やってみた ステータスバー時計mod なんですが、 24 時間表記フォーマット全体を変えたのでどっかに弊害があるかもなぁと思ってました。


…ありました。


ロック画面の時計までなんかわけのわからん表記になってしまうんですねーw


てことで今日は、昨日は諦めた SystemUI.apk\smali\com\android\systemui\statusbar\policy\clock.smali をいじります。昨日いじった twenty_four_hour_time_format は元に戻しておきます。

まずは clock.smali とにらめっこ

私は smali の読み方がわからないので、なんとかそれっぽいところを探します。

.method private final getSmallTime()Ljava/lang/CharSequence;
    .locals 22

    .prologue
    .line 132
    invoke-virtual/range {p0 .. p0}, Lcom/android/systemui/statusbar/policy/Clock;->getContext()Landroid/content/Context;

    move-result-object v8

    .line 133
    .local v8, context:Landroid/content/Context;
    invoke-static {v8}, Landroid/text/format/DateFormat;->is24HourFormat(Landroid/content/Context;)Z

    move-result v6

    .line 136
    .local v6, b24:Z
    if-eqz v6, :cond_2

    .line 137
    const v16, 0x1040091


0x1040091 に見覚えがあったので grep すると framework-res.apk の public.xml がヒット。確認するとコレが twenty_four_hour_time_format のことらしい。

<public type="string" name="twenty_four_hour_time_format" id="0x01040091" />


じゃぁ 0x1040091 を書き換えてしまおうということで。

ここでフォーマット指定して書いてあげてもいいんだろうなと思いつつ、フォーマットの指定の仕方がちょっとよくわからんので違うリソース ID を割り振ってそちらに飛ばしてやることにしました。

修正1

public.xml 上で ID を作ってあげる。


こんな感じで作ってみました。 ID がダブらないようにします。

framework-res.apk の \res\values\public.xml です。

<public type="string" name="24H_and_Date" id="0x010405ec" />

ID は前の方にあるやつから連番で、名前は命名規則がわからなかったのでてきとーに 24H_and_Date としておきました。

修正2

clock.smali の該当箇所を public.xml で書き換えた ID に変更。


SystemUI.apk の \smali\com\android\systemui\statusbar\policy\clock.smali をさっきの ID を参照するように書き換えます。

    .line 137
    const v16, 0x10405ec

修正3

value を作ってあげる。


\res\values\strings.xml に修正1で作った 24H_and_date を追記します。

<string name="24H_and_Date">M/dd(E)\nHH:mm</string>

ここはお好みで。ステータスバー時計 mod の部分です。


同様に \res\values-ja\strings.xml も書き換えます。

あとは昨日と同じ

2 行表示対応などは前回のとおりです。そしてそれぞれコンパイルして端末に転送して cache 削除等などで。


ID の追加の仕方とかこれでいいのかわからんけど、前回と違い他から参照されるかもしれないものを修正したわけではないので、少なくとも前回みたいなことはない…はず。