android 4.1のマルチユーザーについて 〜その1〜

4.2で対応になるマルチユーザーについて、4.1でも仕組み自体はあるとのことなので色々試してみた。

知っている限りではadb上でのpmコマンドでしか作成は出来ない模様(要root)
※2012/11/04 20:21 追記
 [設定アプリ -> ユーザーと制限 -> ユーザーを追加] からユーザーが追加出来ました…。
 ソースは packages/apps/Settings/src/com/android/settings/user/ あたりに。

 ・ユーザー作成
  pm create-user USER_NAME

 ・ユーザー削除
  pm create-user USER_ID

 ・ユーザーリスト表示
  pm list-users

 ※こんな感じで表示される

    Users:
UserInfo{0:Primary:3}
UserInfo{1:test01:0}

コマンドはここで定義されている。

 Android/frameworks/base/cmds/pm/src/com/android/commands/pm/Pm.java

で、追加したユーザーに切り替えて設定アプリを立ち上げると、表示される項目が少ない。

なので調べてみると、以下の様に設定アプリの方でUSER_IDを見ているようで

    } else if (id == R.id.user_settings) {
if (!mEnableUserManagement
|| !UserId.MU_ENABLED || UserId.myUserId() != 0
|| !getResources().getBoolean(R.bool.enable_user_management)
|| Utils.isMonkeyRunning()) {
target.remove(header);
}
}
if (UserId.MU_ENABLED && UserId.myUserId() != 0
&& !ArrayUtils.contains(SETTINGS_FOR_RESTRICTED, id)) {
target.remove(header);
}

このmyUserId()の判別を無効にすると、Primaryユーザーと同様の項目が見えるようになった。

※2012/11/04 20:54 追記
どうやら Settings.java の SETTINGS_FOR_RESTRICTED にて見せる項目を設定している様です。

    // Show only these settings for restricted users
private int[] SETTINGS_FOR_RESTRICTED = {
R.id.wifi_settings,
R.id.bluetooth_settings,
R.id.sound_settings,
R.id.display_settings,
R.id.security_settings,
R.id.account_settings,
R.id.about_settings
};

正直試すのは4.2でいいような気がするけど、予習ということでwww