LockScreenSEMC.smaliを読んでみる

2010年9月13日 by
カテゴリ: Android, 電話 

XPERIA X10 mini proのロックスクリーンで日付の表記がおかしいのをそれとなく調査しててたどり着いたandroid.policy.jarです。
正直良くわからんです。

.method private getSystemDateFormat()Ljava/lang/String;

//変数が5個? v0~v4
.locals 5

.prologue
.line 528
invoke-virtual {p0}, Lcom/android/internal/policy/impl/LockScreenSEMC;->getContext()Landroid/content/Context;

move-result-object v2

//Android的な日付のフォーマットを取得(日本だとyyyy/MM/dd)
invoke-static {v2}, Landroid/text/format/DateFormat;->getDateFormat(Landroid/content/Context;)Ljava/text/DateFormat;

move-result-object v0

//v0をSimpleDateFormatに変換して結局同じ文字列に戻してる?
check-cast v0, Ljava/text/SimpleDateFormat;

.line 530
.local v0, dateFormat:Ljava/text/SimpleDateFormat;
invoke-virtual {v0}, Ljava/text/SimpleDateFormat;->toPattern()Ljava/lang/String;

move-result-object v1

.line 535
.local v1, format:Ljava/lang/String;
new-instance v2, Ljava/lang/StringBuilder;

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

//appendで曜日(EEE, )を追加するので曜日が先にくる
const-string v3, "EEE, "

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

move-result-object v2

//正規表現(M{1,3})で月が短い形式(09とか)のでもMMMに置換してるので、長い形式(9月)になる
const-string v3, "M{1,3}"

const-string v4, "MMM"

invoke-virtual {v1, v3, v4}, Ljava/lang/String;->replaceAll(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;

move-result-object v3

//v2にv3をくっつける (たぶんEEE, yyyy/MMM/dd)
invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;

move-result-object v2

//文字列にする
invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;

move-result-object v2

//文字列を返して糸冬
return-object v2
.end method

というわけで、どんなフォーマットを指定されていても最初に曜日が来て月は長い形式になるということのようです。

ふーん。

曜日を含めて想定したように返すにはこの関数を使わないでいきなり  android.text.format.DateUtils.formatDateTime を使えばいいのかな?

コメント

Comments are closed.