Merge "Embed the app restrictions fragment in the dual-pane settings." into jb-mr2-dev
This commit is contained in:
committed by
Android (Google) Code Review
commit
35f0237871
@@ -87,16 +87,6 @@
|
|||||||
</intent-filter>
|
</intent-filter>
|
||||||
</activity>
|
</activity>
|
||||||
|
|
||||||
<!-- User Restrictions activity -->
|
|
||||||
|
|
||||||
<activity android:name=".users.UserRestrictionsActivity"
|
|
||||||
android:label="@string/user_restrictions_title">
|
|
||||||
<intent-filter>
|
|
||||||
<action android:name="android.intent.action.MAIN" />
|
|
||||||
<category android:name="android.intent.category.DEFAULT" />
|
|
||||||
</intent-filter>
|
|
||||||
</activity>
|
|
||||||
|
|
||||||
<activity android:name=".SubSettings"
|
<activity android:name=".SubSettings"
|
||||||
android:taskAffinity="com.android.settings"
|
android:taskAffinity="com.android.settings"
|
||||||
android:parentActivityName="Settings">
|
android:parentActivityName="Settings">
|
||||||
|
@@ -16,6 +16,7 @@
|
|||||||
|
|
||||||
package com.android.settings.users;
|
package com.android.settings.users;
|
||||||
|
|
||||||
|
import android.app.Activity;
|
||||||
import android.app.AppGlobals;
|
import android.app.AppGlobals;
|
||||||
import android.appwidget.AppWidgetManager;
|
import android.appwidget.AppWidgetManager;
|
||||||
import android.content.BroadcastReceiver;
|
import android.content.BroadcastReceiver;
|
||||||
@@ -37,6 +38,7 @@ import android.graphics.drawable.Drawable;
|
|||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
import android.os.Parcelable;
|
import android.os.Parcelable;
|
||||||
import android.os.RemoteException;
|
import android.os.RemoteException;
|
||||||
|
import android.os.ServiceManager;
|
||||||
import android.os.UserHandle;
|
import android.os.UserHandle;
|
||||||
import android.os.UserManager;
|
import android.os.UserManager;
|
||||||
import android.preference.CheckBoxPreference;
|
import android.preference.CheckBoxPreference;
|
||||||
@@ -71,6 +73,7 @@ import java.util.Comparator;
|
|||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.HashSet;
|
import java.util.HashSet;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
import java.util.StringTokenizer;
|
import java.util.StringTokenizer;
|
||||||
|
|
||||||
@@ -95,9 +98,17 @@ public class AppRestrictionsFragment extends SettingsPreferenceFragment implemen
|
|||||||
private static final int MAX_APP_RESTRICTIONS = 100;
|
private static final int MAX_APP_RESTRICTIONS = 100;
|
||||||
|
|
||||||
private static final String DELIMITER = ";";
|
private static final String DELIMITER = ";";
|
||||||
|
|
||||||
|
/** Key for extra passed in from calling fragment for the userId of the user being edited */
|
||||||
|
public static final String EXTRA_USER_ID = "user_id";
|
||||||
|
|
||||||
|
/** Key for extra passed in from calling fragment to indicate if this is a newly created user */
|
||||||
|
public static final String EXTRA_NEW_USER = "new_user";
|
||||||
|
|
||||||
HashMap<String,Boolean> mSelectedPackages = new HashMap<String,Boolean>();
|
HashMap<String,Boolean> mSelectedPackages = new HashMap<String,Boolean>();
|
||||||
private boolean mFirstTime = true;
|
private boolean mFirstTime = true;
|
||||||
private boolean mNewUser;
|
private boolean mNewUser;
|
||||||
|
private boolean mAppListChanged;
|
||||||
|
|
||||||
private int mCustomRequestCode;
|
private int mCustomRequestCode;
|
||||||
private HashMap<Integer, AppRestrictionsPreference> mCustomRequestMap =
|
private HashMap<Integer, AppRestrictionsPreference> mCustomRequestMap =
|
||||||
@@ -117,16 +128,6 @@ public class AppRestrictionsFragment extends SettingsPreferenceFragment implemen
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public static class Activity extends PreferenceActivity {
|
|
||||||
@Override
|
|
||||||
public Intent getIntent() {
|
|
||||||
Intent modIntent = new Intent(super.getIntent());
|
|
||||||
modIntent.putExtra(EXTRA_SHOW_FRAGMENT, AppRestrictionsFragment.class.getName());
|
|
||||||
modIntent.putExtra(EXTRA_NO_HEADERS, true);
|
|
||||||
return modIntent;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
static class AppRestrictionsPreference extends SwitchPreference {
|
static class AppRestrictionsPreference extends SwitchPreference {
|
||||||
private boolean hasSettings;
|
private boolean hasSettings;
|
||||||
private OnClickListener listener;
|
private OnClickListener listener;
|
||||||
@@ -206,6 +207,17 @@ public class AppRestrictionsFragment extends SettingsPreferenceFragment implemen
|
|||||||
public void onCreate(Bundle icicle) {
|
public void onCreate(Bundle icicle) {
|
||||||
super.onCreate(icicle);
|
super.onCreate(icicle);
|
||||||
|
|
||||||
|
if (icicle != null) {
|
||||||
|
mNewUser = icicle.getBoolean(EXTRA_NEW_USER, false);
|
||||||
|
mUser = new UserHandle(icicle.getInt(EXTRA_USER_ID));
|
||||||
|
} else {
|
||||||
|
Bundle args = getArguments();
|
||||||
|
|
||||||
|
if (args.containsKey(EXTRA_USER_ID)) {
|
||||||
|
mUser = new UserHandle(args.getInt(EXTRA_USER_ID));
|
||||||
|
}
|
||||||
|
mNewUser = args.getBoolean(EXTRA_NEW_USER, false);
|
||||||
|
}
|
||||||
mUserManager = (UserManager) getActivity().getSystemService(Context.USER_SERVICE);
|
mUserManager = (UserManager) getActivity().getSystemService(Context.USER_SERVICE);
|
||||||
addPreferencesFromResource(R.xml.app_restrictions);
|
addPreferencesFromResource(R.xml.app_restrictions);
|
||||||
mAppList = getPreferenceScreen();
|
mAppList = getPreferenceScreen();
|
||||||
@@ -218,13 +230,16 @@ public class AppRestrictionsFragment extends SettingsPreferenceFragment implemen
|
|||||||
setHasOptionsMenu(true);
|
setHasOptionsMenu(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
void setUser(UserHandle user, boolean newUser) {
|
@Override
|
||||||
mUser = user;
|
public void onSaveInstanceState(Bundle outState) {
|
||||||
mNewUser = newUser;
|
super.onSaveInstanceState(outState);
|
||||||
|
outState.putBoolean(EXTRA_NEW_USER, mNewUser);
|
||||||
|
outState.putInt(EXTRA_USER_ID, mUser.getIdentifier());
|
||||||
}
|
}
|
||||||
|
|
||||||
public void onResume() {
|
public void onResume() {
|
||||||
super.onResume();
|
super.onResume();
|
||||||
|
mAppListChanged = false;
|
||||||
if (mFirstTime) {
|
if (mFirstTime) {
|
||||||
mFirstTime = false;
|
mFirstTime = false;
|
||||||
populateApps();
|
populateApps();
|
||||||
@@ -238,6 +253,34 @@ public class AppRestrictionsFragment extends SettingsPreferenceFragment implemen
|
|||||||
mUserPreference.setText(info.name);
|
mUserPreference.setText(info.name);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void onPause() {
|
||||||
|
super.onPause();
|
||||||
|
if (mAppListChanged) {
|
||||||
|
updateUserAppList();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void updateUserAppList() {
|
||||||
|
IPackageManager ipm = IPackageManager.Stub.asInterface(
|
||||||
|
ServiceManager.getService("package"));
|
||||||
|
for (Map.Entry<String,Boolean> entry : mSelectedPackages.entrySet()) {
|
||||||
|
if (entry.getValue()) {
|
||||||
|
// Enable selected apps
|
||||||
|
try {
|
||||||
|
ipm.installExistingPackageAsUser(entry.getKey(), mUser.getIdentifier());
|
||||||
|
} catch (RemoteException re) {
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
// Blacklist all other apps, system or downloaded
|
||||||
|
try {
|
||||||
|
ipm.deletePackageAsUser(entry.getKey(), null, mUser.getIdentifier(),
|
||||||
|
PackageManager.DELETE_SYSTEM_APP);
|
||||||
|
} catch (RemoteException re) {
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private void addSystemApps(List<SelectableAppInfo> visibleApps, Intent intent) {
|
private void addSystemApps(List<SelectableAppInfo> visibleApps, Intent intent) {
|
||||||
final PackageManager pm = getActivity().getPackageManager();
|
final PackageManager pm = getActivity().getPackageManager();
|
||||||
List<ResolveInfo> launchableApps = pm.queryIntentActivities(intent, 0);
|
List<ResolveInfo> launchableApps = pm.queryIntentActivities(intent, 0);
|
||||||
@@ -383,6 +426,7 @@ public class AppRestrictionsFragment extends SettingsPreferenceFragment implemen
|
|||||||
p.setOrder(MAX_APP_RESTRICTIONS * (i + 2));
|
p.setOrder(MAX_APP_RESTRICTIONS * (i + 2));
|
||||||
}
|
}
|
||||||
mSelectedPackages.put(packageName, p.isChecked());
|
mSelectedPackages.put(packageName, p.isChecked());
|
||||||
|
mAppListChanged = true;
|
||||||
i++;
|
i++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -437,6 +481,7 @@ public class AppRestrictionsFragment extends SettingsPreferenceFragment implemen
|
|||||||
pref.setChecked(!pref.isChecked());
|
pref.setChecked(!pref.isChecked());
|
||||||
mSelectedPackages.put(pref.getKey().substring(PKG_PREFIX.length()),
|
mSelectedPackages.put(pref.getKey().substring(PKG_PREFIX.length()),
|
||||||
pref.isChecked());
|
pref.isChecked());
|
||||||
|
mAppListChanged = true;
|
||||||
updateAllEntries(pref.getKey(), pref.isChecked());
|
updateAllEntries(pref.getKey(), pref.isChecked());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -689,6 +734,7 @@ public class AppRestrictionsFragment extends SettingsPreferenceFragment implemen
|
|||||||
arp.setChecked(!arp.isChecked());
|
arp.setChecked(!arp.isChecked());
|
||||||
mSelectedPackages.put(arp.getKey().substring(PKG_PREFIX.length()), arp.isChecked());
|
mSelectedPackages.put(arp.getKey().substring(PKG_PREFIX.length()), arp.isChecked());
|
||||||
updateAllEntries(arp.getKey(), arp.isChecked());
|
updateAllEntries(arp.getKey(), arp.isChecked());
|
||||||
|
mAppListChanged = true;
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
@@ -1,141 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright (C) 2013 The Android Open Source Project
|
|
||||||
*
|
|
||||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
||||||
* you may not use this file except in compliance with the License.
|
|
||||||
* You may obtain a copy of the License at
|
|
||||||
*
|
|
||||||
* http://www.apache.org/licenses/LICENSE-2.0
|
|
||||||
*
|
|
||||||
* Unless required by applicable law or agreed to in writing, software
|
|
||||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
||||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
||||||
* See the License for the specific language governing permissions and
|
|
||||||
* limitations under the License.
|
|
||||||
*/
|
|
||||||
|
|
||||||
package com.android.settings.users;
|
|
||||||
|
|
||||||
import android.accounts.Account;
|
|
||||||
import android.accounts.AccountManager;
|
|
||||||
import android.app.Activity;
|
|
||||||
import android.content.Context;
|
|
||||||
import android.content.pm.IPackageManager;
|
|
||||||
import android.content.pm.PackageManager;
|
|
||||||
import android.content.pm.UserInfo;
|
|
||||||
import android.graphics.Bitmap;
|
|
||||||
import android.graphics.BitmapFactory;
|
|
||||||
import android.os.Bundle;
|
|
||||||
import android.os.RemoteException;
|
|
||||||
import android.os.ServiceManager;
|
|
||||||
import android.os.UserHandle;
|
|
||||||
import android.os.UserManager;
|
|
||||||
import android.view.View;
|
|
||||||
import android.view.View.OnClickListener;
|
|
||||||
import android.widget.Button;
|
|
||||||
|
|
||||||
import com.android.settings.R;
|
|
||||||
|
|
||||||
import java.util.Map;
|
|
||||||
|
|
||||||
public class UserRestrictionsActivity extends Activity implements OnClickListener {
|
|
||||||
|
|
||||||
private static final String TAG = UserRestrictionsActivity.class.getSimpleName();
|
|
||||||
|
|
||||||
static final String EXTRA_USER_NAME = "user_name";
|
|
||||||
static final String EXTRA_USER_ID = "user_id";
|
|
||||||
static final String EXTRA_ACCOUNTS = "accounts";
|
|
||||||
|
|
||||||
private Button mFinishButton;
|
|
||||||
private Button mBackButton;
|
|
||||||
private AppRestrictionsFragment mAppsFragment;
|
|
||||||
private UserInfo mUserInfo;
|
|
||||||
private boolean mNewUser;
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onCreate(Bundle savedInstanceState) {
|
|
||||||
super.onCreate(savedInstanceState);
|
|
||||||
|
|
||||||
setContentView(R.layout.user_limits);
|
|
||||||
|
|
||||||
mBackButton = (Button) findViewById(R.id.back_button);
|
|
||||||
if (mBackButton != null) {
|
|
||||||
mBackButton.setOnClickListener(this);
|
|
||||||
}
|
|
||||||
mFinishButton = (Button) findViewById(R.id.next_button);
|
|
||||||
if (mFinishButton != null) {
|
|
||||||
mFinishButton.setOnClickListener(this);
|
|
||||||
}
|
|
||||||
mAppsFragment = (AppRestrictionsFragment)
|
|
||||||
getFragmentManager().findFragmentById(R.id.user_limits_fragment);
|
|
||||||
|
|
||||||
UserManager um = (UserManager) getSystemService(Context.USER_SERVICE);
|
|
||||||
String name = getIntent().getStringExtra(EXTRA_USER_NAME);
|
|
||||||
int userId = getIntent().getIntExtra(EXTRA_USER_ID, -1);
|
|
||||||
// Create the user so we have an id
|
|
||||||
if (userId == -1) {
|
|
||||||
mNewUser = true;
|
|
||||||
mUserInfo = um.createUser(name, UserInfo.FLAG_RESTRICTED);
|
|
||||||
um.setUserRestriction(UserManager.DISALLOW_MODIFY_ACCOUNTS, true,
|
|
||||||
new UserHandle(mUserInfo.id));
|
|
||||||
|
|
||||||
Bitmap bitmap = BitmapFactory.decodeResource(getResources(),
|
|
||||||
UserSettings.USER_DRAWABLES[
|
|
||||||
mUserInfo.id % UserSettings.USER_DRAWABLES.length]);
|
|
||||||
um.setUserIcon(mUserInfo.id, bitmap);
|
|
||||||
} else {
|
|
||||||
mUserInfo = um.getUserInfo(userId);
|
|
||||||
}
|
|
||||||
if (mAppsFragment != null) {
|
|
||||||
mAppsFragment.setUser(new UserHandle(mUserInfo.id), mNewUser);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onClick(View v) {
|
|
||||||
if (v == mFinishButton) {
|
|
||||||
if (mNewUser) {
|
|
||||||
AccountManager am = AccountManager.get(this);
|
|
||||||
Account [] accounts = am.getAccounts();
|
|
||||||
if (accounts != null) {
|
|
||||||
for (Account account : accounts) {
|
|
||||||
am.addSharedAccount(account,
|
|
||||||
new UserHandle(mUserInfo.id));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
IPackageManager ipm = IPackageManager.Stub.asInterface(
|
|
||||||
ServiceManager.getService("package"));
|
|
||||||
for (Map.Entry<String,Boolean> entry : mAppsFragment.mSelectedPackages.entrySet()) {
|
|
||||||
if (entry.getValue()) {
|
|
||||||
// Enable selected apps
|
|
||||||
try {
|
|
||||||
ipm.installExistingPackageAsUser(entry.getKey(), mUserInfo.id);
|
|
||||||
} catch (RemoteException re) {
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
// Blacklist all other apps, system or downloaded
|
|
||||||
try {
|
|
||||||
ipm.deletePackageAsUser(entry.getKey(), null, mUserInfo.id,
|
|
||||||
PackageManager.DELETE_SYSTEM_APP);
|
|
||||||
} catch (RemoteException re) {
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
setResult(RESULT_OK);
|
|
||||||
mUserInfo = null;
|
|
||||||
finish();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onDestroy() {
|
|
||||||
super.onDestroy();
|
|
||||||
|
|
||||||
if (mUserInfo != null && mNewUser) {
|
|
||||||
UserManager um = (UserManager) getSystemService(Context.USER_SERVICE);
|
|
||||||
um.removeUser(mUserInfo.id);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
@@ -42,6 +42,7 @@ import android.os.RemoteException;
|
|||||||
import android.os.UserHandle;
|
import android.os.UserHandle;
|
||||||
import android.os.UserManager;
|
import android.os.UserManager;
|
||||||
import android.preference.Preference;
|
import android.preference.Preference;
|
||||||
|
import android.preference.PreferenceActivity;
|
||||||
import android.preference.PreferenceScreen;
|
import android.preference.PreferenceScreen;
|
||||||
import android.preference.Preference.OnPreferenceClickListener;
|
import android.preference.Preference.OnPreferenceClickListener;
|
||||||
import android.preference.PreferenceGroup;
|
import android.preference.PreferenceGroup;
|
||||||
@@ -83,16 +84,20 @@ public class UserSettings extends SettingsPreferenceFragment
|
|||||||
private static final String KEY_ADD_RESTRICTED_USER = "user_add_restricted";
|
private static final String KEY_ADD_RESTRICTED_USER = "user_add_restricted";
|
||||||
private static final String KEY_ADD_TRUSTED_USER = "user_add_trusted";
|
private static final String KEY_ADD_TRUSTED_USER = "user_add_trusted";
|
||||||
|
|
||||||
private static final int MENU_ADD_USER = Menu.FIRST;
|
private static final int MENU_REMOVE_USER = Menu.FIRST;
|
||||||
private static final int MENU_REMOVE_USER = Menu.FIRST+1;
|
|
||||||
|
|
||||||
private static final int DIALOG_CONFIRM_REMOVE = 1;
|
private static final int DIALOG_CONFIRM_REMOVE = 1;
|
||||||
private static final int DIALOG_ADD_USER = 2;
|
private static final int DIALOG_ADD_USER_TRUSTED = 2;
|
||||||
private static final int DIALOG_SETUP_USER = 3;
|
private static final int DIALOG_ADD_USER_LIMITED = 3;
|
||||||
private static final int DIALOG_USER_CANNOT_MANAGE = 4;
|
private static final int DIALOG_SETUP_USER = 4;
|
||||||
|
private static final int DIALOG_USER_CANNOT_MANAGE = 5;
|
||||||
|
|
||||||
private static final int MESSAGE_UPDATE_LIST = 1;
|
private static final int MESSAGE_UPDATE_LIST = 1;
|
||||||
private static final int MESSAGE_SETUP_USER = 2;
|
private static final int MESSAGE_SETUP_USER = 2;
|
||||||
|
private static final int MESSAGE_CONFIG_USER = 3;
|
||||||
|
|
||||||
|
private static final int USER_TYPE_TRUSTED = 1;
|
||||||
|
private static final int USER_TYPE_LIMITED = 2;
|
||||||
|
|
||||||
private static final String KEY_ADD_USER_LONG_MESSAGE_DISPLAYED =
|
private static final String KEY_ADD_USER_LONG_MESSAGE_DISPLAYED =
|
||||||
"key_add_user_long_message_displayed";
|
"key_add_user_long_message_displayed";
|
||||||
@@ -135,6 +140,9 @@ public class UserSettings extends SettingsPreferenceFragment
|
|||||||
case MESSAGE_SETUP_USER:
|
case MESSAGE_SETUP_USER:
|
||||||
onUserCreated(msg.arg1);
|
onUserCreated(msg.arg1);
|
||||||
break;
|
break;
|
||||||
|
case MESSAGE_CONFIG_USER:
|
||||||
|
onManageUserClicked(msg.arg1, true);
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
@@ -237,10 +245,7 @@ public class UserSettings extends SettingsPreferenceFragment
|
|||||||
@Override
|
@Override
|
||||||
public boolean onOptionsItemSelected(MenuItem item) {
|
public boolean onOptionsItemSelected(MenuItem item) {
|
||||||
final int itemId = item.getItemId();
|
final int itemId = item.getItemId();
|
||||||
if (itemId == MENU_ADD_USER) {
|
if (itemId == MENU_REMOVE_USER) {
|
||||||
onAddUserClicked();
|
|
||||||
return true;
|
|
||||||
} else if (itemId == MENU_REMOVE_USER) {
|
|
||||||
onRemoveUserClicked(UserHandle.myUserId());
|
onRemoveUserClicked(UserHandle.myUserId());
|
||||||
return true;
|
return true;
|
||||||
} else {
|
} else {
|
||||||
@@ -278,10 +283,17 @@ public class UserSettings extends SettingsPreferenceFragment
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void onAddUserClicked() {
|
private void onAddUserClicked(int userType) {
|
||||||
synchronized (mUserLock) {
|
synchronized (mUserLock) {
|
||||||
if (mRemovingUserId == -1 && !mAddingUser) {
|
if (mRemovingUserId == -1 && !mAddingUser) {
|
||||||
showDialog(DIALOG_ADD_USER);
|
switch (userType) {
|
||||||
|
case USER_TYPE_TRUSTED:
|
||||||
|
showDialog(DIALOG_ADD_USER_TRUSTED);
|
||||||
|
break;
|
||||||
|
case USER_TYPE_LIMITED:
|
||||||
|
showDialog(DIALOG_ADD_USER_LIMITED);
|
||||||
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -295,11 +307,50 @@ public class UserSettings extends SettingsPreferenceFragment
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void onManageUserClicked(int userId) {
|
private UserInfo createLimitedUser() {
|
||||||
Intent appsChooser = new Intent();
|
UserInfo newUserInfo = mUserManager.createUser(
|
||||||
appsChooser.setClass(getActivity(), UserRestrictionsActivity.class);
|
getResources().getString(R.string.user_new_user_name),
|
||||||
appsChooser.putExtra(UserRestrictionsActivity.EXTRA_USER_ID, userId);
|
UserInfo.FLAG_RESTRICTED);
|
||||||
startActivity(appsChooser);
|
int userId = newUserInfo.id;
|
||||||
|
UserHandle user = new UserHandle(userId);
|
||||||
|
mUserManager.setUserRestriction(UserManager.DISALLOW_MODIFY_ACCOUNTS, true, user);
|
||||||
|
|
||||||
|
Bitmap bitmap = BitmapFactory.decodeResource(getResources(),
|
||||||
|
UserSettings.USER_DRAWABLES[
|
||||||
|
userId % UserSettings.USER_DRAWABLES.length]);
|
||||||
|
mUserManager.setUserIcon(userId, bitmap);
|
||||||
|
// Add shared accounts
|
||||||
|
AccountManager am = AccountManager.get(getActivity());
|
||||||
|
Account [] accounts = am.getAccounts();
|
||||||
|
if (accounts != null) {
|
||||||
|
for (Account account : accounts) {
|
||||||
|
am.addSharedAccount(account, user);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return newUserInfo;
|
||||||
|
}
|
||||||
|
|
||||||
|
private UserInfo createTrustedUser() {
|
||||||
|
UserInfo newUserInfo = mUserManager.createUser(
|
||||||
|
getActivity().getResources().getString(R.string.user_new_user_name), 0);
|
||||||
|
if (newUserInfo != null) {
|
||||||
|
assignDefaultPhoto(newUserInfo);
|
||||||
|
}
|
||||||
|
return newUserInfo;
|
||||||
|
}
|
||||||
|
|
||||||
|
private void onManageUserClicked(int userId, boolean newUser) {
|
||||||
|
Bundle extras = new Bundle();
|
||||||
|
extras.putInt(AppRestrictionsFragment.EXTRA_USER_ID, userId);
|
||||||
|
extras.putBoolean(AppRestrictionsFragment.EXTRA_NEW_USER, newUser);
|
||||||
|
String title = getResources().getString(R.string.user_new_user_name);
|
||||||
|
if (userId > UserHandle.USER_OWNER) {
|
||||||
|
title = mUserManager.getUserInfo(userId).name;
|
||||||
|
}
|
||||||
|
((PreferenceActivity) getActivity()).startPreferencePanel(
|
||||||
|
AppRestrictionsFragment.class.getName(),
|
||||||
|
extras, 0, title,
|
||||||
|
null, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void onUserCreated(int userId) {
|
private void onUserCreated(int userId) {
|
||||||
@@ -340,7 +391,8 @@ public class UserSettings extends SettingsPreferenceFragment
|
|||||||
.setMessage(R.string.user_cannot_manage_message)
|
.setMessage(R.string.user_cannot_manage_message)
|
||||||
.setPositiveButton(android.R.string.ok, null)
|
.setPositiveButton(android.R.string.ok, null)
|
||||||
.create();
|
.create();
|
||||||
case DIALOG_ADD_USER: {
|
case DIALOG_ADD_USER_TRUSTED:
|
||||||
|
case DIALOG_ADD_USER_LIMITED: {
|
||||||
final SharedPreferences preferences = getActivity().getPreferences(
|
final SharedPreferences preferences = getActivity().getPreferences(
|
||||||
Context.MODE_PRIVATE);
|
Context.MODE_PRIVATE);
|
||||||
final boolean longMessageDisplayed = preferences.getBoolean(
|
final boolean longMessageDisplayed = preferences.getBoolean(
|
||||||
@@ -348,13 +400,15 @@ public class UserSettings extends SettingsPreferenceFragment
|
|||||||
final int messageResId = longMessageDisplayed
|
final int messageResId = longMessageDisplayed
|
||||||
? R.string.user_add_user_message_short
|
? R.string.user_add_user_message_short
|
||||||
: R.string.user_add_user_message_long;
|
: R.string.user_add_user_message_long;
|
||||||
|
final int userType = dialogId == DIALOG_ADD_USER_TRUSTED
|
||||||
|
? USER_TYPE_TRUSTED : USER_TYPE_LIMITED;
|
||||||
Dialog dlg = new AlertDialog.Builder(getActivity())
|
Dialog dlg = new AlertDialog.Builder(getActivity())
|
||||||
.setTitle(R.string.user_add_user_title)
|
.setTitle(R.string.user_add_user_title)
|
||||||
.setMessage(messageResId)
|
.setMessage(messageResId)
|
||||||
.setPositiveButton(android.R.string.ok,
|
.setPositiveButton(android.R.string.ok,
|
||||||
new DialogInterface.OnClickListener() {
|
new DialogInterface.OnClickListener() {
|
||||||
public void onClick(DialogInterface dialog, int which) {
|
public void onClick(DialogInterface dialog, int which) {
|
||||||
addUserNow();
|
addUserNow(userType);
|
||||||
if (!longMessageDisplayed) {
|
if (!longMessageDisplayed) {
|
||||||
preferences.edit().putBoolean(KEY_ADD_USER_LONG_MESSAGE_DISPLAYED,
|
preferences.edit().putBoolean(KEY_ADD_USER_LONG_MESSAGE_DISPLAYED,
|
||||||
true).commit();
|
true).commit();
|
||||||
@@ -409,23 +463,29 @@ public class UserSettings extends SettingsPreferenceFragment
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void addUserNow() {
|
private void addUserNow(final int userType) {
|
||||||
synchronized (mUserLock) {
|
synchronized (mUserLock) {
|
||||||
mAddingUser = true;
|
mAddingUser = true;
|
||||||
updateUserList();
|
updateUserList();
|
||||||
new Thread() {
|
new Thread() {
|
||||||
public void run() {
|
public void run() {
|
||||||
|
UserInfo user = null;
|
||||||
// Could take a few seconds
|
// Could take a few seconds
|
||||||
UserInfo user = mUserManager.createUser(
|
if (userType == USER_TYPE_TRUSTED) {
|
||||||
getActivity().getResources().getString(R.string.user_new_user_name), 0);
|
user = createTrustedUser();
|
||||||
if (user != null) {
|
} else {
|
||||||
assignDefaultPhoto(user);
|
user = createLimitedUser();
|
||||||
}
|
}
|
||||||
synchronized (mUserLock) {
|
synchronized (mUserLock) {
|
||||||
mAddingUser = false;
|
mAddingUser = false;
|
||||||
mHandler.sendEmptyMessage(MESSAGE_UPDATE_LIST);
|
mHandler.sendEmptyMessage(MESSAGE_UPDATE_LIST);
|
||||||
mHandler.sendMessage(mHandler.obtainMessage(
|
if (userType == USER_TYPE_TRUSTED) {
|
||||||
MESSAGE_SETUP_USER, user.id, user.serialNumber));
|
mHandler.sendMessage(mHandler.obtainMessage(
|
||||||
|
MESSAGE_SETUP_USER, user.id, user.serialNumber));
|
||||||
|
} else {
|
||||||
|
mHandler.sendMessage(mHandler.obtainMessage(
|
||||||
|
MESSAGE_CONFIG_USER, user.id, user.serialNumber));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}.start();
|
}.start();
|
||||||
@@ -589,16 +649,9 @@ public class UserSettings extends SettingsPreferenceFragment
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else if (pref == mAddTrustedUser) {
|
} else if (pref == mAddTrustedUser) {
|
||||||
onAddUserClicked();
|
onAddUserClicked(USER_TYPE_TRUSTED);
|
||||||
} else if (pref == mAddRestrictedUser) {
|
} else if (pref == mAddRestrictedUser) {
|
||||||
Account[] accounts = ((AccountManager) getSystemService(Context.ACCOUNT_SERVICE))
|
onAddUserClicked(USER_TYPE_LIMITED);
|
||||||
.getAccounts();
|
|
||||||
Intent intent = new Intent(getActivity(), UserRestrictionsActivity.class);
|
|
||||||
intent.putExtra(UserRestrictionsActivity.EXTRA_USER_NAME,
|
|
||||||
getResources().getString(R.string.user_new_user_name));
|
|
||||||
intent.putExtra(UserRestrictionsActivity.EXTRA_ACCOUNTS,
|
|
||||||
accounts);
|
|
||||||
startActivity(intent);
|
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@@ -626,7 +679,7 @@ public class UserSettings extends SettingsPreferenceFragment
|
|||||||
onRemoveUserClicked(userId);
|
onRemoveUserClicked(userId);
|
||||||
break;
|
break;
|
||||||
case UserPreference.SETTINGS_ID:
|
case UserPreference.SETTINGS_ID:
|
||||||
onManageUserClicked(userId);
|
onManageUserClicked(userId, false);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user