10ca80fe4cdbfa2a9298ab332770eef9890798c60Amith Yamasani/* 20ca80fe4cdbfa2a9298ab332770eef9890798c60Amith Yamasani * Copyright (C) 2013 The Android Open Source Project 30ca80fe4cdbfa2a9298ab332770eef9890798c60Amith Yamasani * 40ca80fe4cdbfa2a9298ab332770eef9890798c60Amith Yamasani * Licensed under the Apache License, Version 2.0 (the "License"); 50ca80fe4cdbfa2a9298ab332770eef9890798c60Amith Yamasani * you may not use this file except in compliance with the License. 60ca80fe4cdbfa2a9298ab332770eef9890798c60Amith Yamasani * You may obtain a copy of the License at 70ca80fe4cdbfa2a9298ab332770eef9890798c60Amith Yamasani * 80ca80fe4cdbfa2a9298ab332770eef9890798c60Amith Yamasani * http://www.apache.org/licenses/LICENSE-2.0 90ca80fe4cdbfa2a9298ab332770eef9890798c60Amith Yamasani * 100ca80fe4cdbfa2a9298ab332770eef9890798c60Amith Yamasani * Unless required by applicable law or agreed to in writing, software 110ca80fe4cdbfa2a9298ab332770eef9890798c60Amith Yamasani * distributed under the License is distributed on an "AS IS" BASIS, 120ca80fe4cdbfa2a9298ab332770eef9890798c60Amith Yamasani * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 130ca80fe4cdbfa2a9298ab332770eef9890798c60Amith Yamasani * See the License for the specific language governing permissions and 140ca80fe4cdbfa2a9298ab332770eef9890798c60Amith Yamasani * limitations under the License. 150ca80fe4cdbfa2a9298ab332770eef9890798c60Amith Yamasani */ 160ca80fe4cdbfa2a9298ab332770eef9890798c60Amith Yamasani 170ca80fe4cdbfa2a9298ab332770eef9890798c60Amith Yamasanipackage com.android.settings.users; 180ca80fe4cdbfa2a9298ab332770eef9890798c60Amith Yamasani 190ca80fe4cdbfa2a9298ab332770eef9890798c60Amith Yamasaniimport android.app.Dialog; 20247520c369370885a1c085e53ee679dce0fd55ceAmith Yamasaniimport android.content.DialogInterface; 210ca80fe4cdbfa2a9298ab332770eef9890798c60Amith Yamasaniimport android.content.Intent; 220ca80fe4cdbfa2a9298ab332770eef9890798c60Amith Yamasaniimport android.content.pm.UserInfo; 230ca80fe4cdbfa2a9298ab332770eef9890798c60Amith Yamasaniimport android.graphics.drawable.Drawable; 240ca80fe4cdbfa2a9298ab332770eef9890798c60Amith Yamasaniimport android.os.Bundle; 2538e761051242b2129a30e482404e6f87ea9ad75aAmith Yamasaniimport android.os.UserHandle; 260ca80fe4cdbfa2a9298ab332770eef9890798c60Amith Yamasaniimport android.view.LayoutInflater; 270ca80fe4cdbfa2a9298ab332770eef9890798c60Amith Yamasaniimport android.view.View; 280ca80fe4cdbfa2a9298ab332770eef9890798c60Amith Yamasaniimport android.widget.ImageView; 290ca80fe4cdbfa2a9298ab332770eef9890798c60Amith Yamasaniimport android.widget.TextView; 300ca80fe4cdbfa2a9298ab332770eef9890798c60Amith Yamasani 310ca80fe4cdbfa2a9298ab332770eef9890798c60Amith Yamasaniimport com.android.settings.R; 32247520c369370885a1c085e53ee679dce0fd55ceAmith Yamasaniimport com.android.settings.Utils; 330ca80fe4cdbfa2a9298ab332770eef9890798c60Amith Yamasani 340ca80fe4cdbfa2a9298ab332770eef9890798c60Amith Yamasaniimport java.util.List; 350ca80fe4cdbfa2a9298ab332770eef9890798c60Amith Yamasani 36ee3987475e1d29e8355bdb9e068149eb01e3fd43Amith Yamasanipublic class RestrictedProfileSettings extends AppRestrictionsFragment 37ee3987475e1d29e8355bdb9e068149eb01e3fd43Amith Yamasani implements EditUserInfoController.OnContentChangedCallback { 380ca80fe4cdbfa2a9298ab332770eef9890798c60Amith Yamasani 392ad96254628675a86de330263487abe39dc024bbAmith Yamasani public static final String FILE_PROVIDER_AUTHORITY = "com.android.settings.files"; 40247520c369370885a1c085e53ee679dce0fd55ceAmith Yamasani static final int DIALOG_ID_EDIT_USER_INFO = 1; 41247520c369370885a1c085e53ee679dce0fd55ceAmith Yamasani private static final int DIALOG_CONFIRM_REMOVE = 2; 420ca80fe4cdbfa2a9298ab332770eef9890798c60Amith Yamasani 430ca80fe4cdbfa2a9298ab332770eef9890798c60Amith Yamasani private View mHeaderView; 440ca80fe4cdbfa2a9298ab332770eef9890798c60Amith Yamasani private ImageView mUserIconView; 450ca80fe4cdbfa2a9298ab332770eef9890798c60Amith Yamasani private TextView mUserNameView; 46247520c369370885a1c085e53ee679dce0fd55ceAmith Yamasani private ImageView mDeleteButton; 470ca80fe4cdbfa2a9298ab332770eef9890798c60Amith Yamasani 48ee3987475e1d29e8355bdb9e068149eb01e3fd43Amith Yamasani private EditUserInfoController mEditUserInfoController = 49ee3987475e1d29e8355bdb9e068149eb01e3fd43Amith Yamasani new EditUserInfoController(); 500ca80fe4cdbfa2a9298ab332770eef9890798c60Amith Yamasani 510ca80fe4cdbfa2a9298ab332770eef9890798c60Amith Yamasani @Override 520ca80fe4cdbfa2a9298ab332770eef9890798c60Amith Yamasani public void onCreate(Bundle icicle) { 530ca80fe4cdbfa2a9298ab332770eef9890798c60Amith Yamasani super.onCreate(icicle); 540ca80fe4cdbfa2a9298ab332770eef9890798c60Amith Yamasani 550ca80fe4cdbfa2a9298ab332770eef9890798c60Amith Yamasani if (icicle != null) { 56ee3987475e1d29e8355bdb9e068149eb01e3fd43Amith Yamasani mEditUserInfoController.onRestoreInstanceState(icicle); 570ca80fe4cdbfa2a9298ab332770eef9890798c60Amith Yamasani } 580ca80fe4cdbfa2a9298ab332770eef9890798c60Amith Yamasani 590ca80fe4cdbfa2a9298ab332770eef9890798c60Amith Yamasani init(icicle); 600ca80fe4cdbfa2a9298ab332770eef9890798c60Amith Yamasani } 610ca80fe4cdbfa2a9298ab332770eef9890798c60Amith Yamasani 620ca80fe4cdbfa2a9298ab332770eef9890798c60Amith Yamasani @Override 630ca80fe4cdbfa2a9298ab332770eef9890798c60Amith Yamasani public void onActivityCreated(Bundle savedInstanceState) { 640ca80fe4cdbfa2a9298ab332770eef9890798c60Amith Yamasani if (mHeaderView == null) { 650ca80fe4cdbfa2a9298ab332770eef9890798c60Amith Yamasani mHeaderView = LayoutInflater.from(getActivity()).inflate( 660ca80fe4cdbfa2a9298ab332770eef9890798c60Amith Yamasani R.layout.user_info_header, null); 6786159283c98fd862723ce317f1621bcb16d451ceFabrice Di Meglio setPinnedHeaderView(mHeaderView); 680ca80fe4cdbfa2a9298ab332770eef9890798c60Amith Yamasani mHeaderView.setOnClickListener(this); 690ca80fe4cdbfa2a9298ab332770eef9890798c60Amith Yamasani mUserIconView = (ImageView) mHeaderView.findViewById(android.R.id.icon); 700ca80fe4cdbfa2a9298ab332770eef9890798c60Amith Yamasani mUserNameView = (TextView) mHeaderView.findViewById(android.R.id.title); 71247520c369370885a1c085e53ee679dce0fd55ceAmith Yamasani mDeleteButton = (ImageView) mHeaderView.findViewById(R.id.delete); 72247520c369370885a1c085e53ee679dce0fd55ceAmith Yamasani mDeleteButton.setOnClickListener(this); 7351c6dac50ea8874181036f54c3a7e7aa8eb800bdAmith Yamasani getListView().setFastScrollEnabled(true); 740ca80fe4cdbfa2a9298ab332770eef9890798c60Amith Yamasani } 750ca80fe4cdbfa2a9298ab332770eef9890798c60Amith Yamasani // This is going to bind the preferences. 760ca80fe4cdbfa2a9298ab332770eef9890798c60Amith Yamasani super.onActivityCreated(savedInstanceState); 770ca80fe4cdbfa2a9298ab332770eef9890798c60Amith Yamasani } 780ca80fe4cdbfa2a9298ab332770eef9890798c60Amith Yamasani 790ca80fe4cdbfa2a9298ab332770eef9890798c60Amith Yamasani @Override 800ca80fe4cdbfa2a9298ab332770eef9890798c60Amith Yamasani public void onSaveInstanceState(Bundle outState) { 810ca80fe4cdbfa2a9298ab332770eef9890798c60Amith Yamasani super.onSaveInstanceState(outState); 82ee3987475e1d29e8355bdb9e068149eb01e3fd43Amith Yamasani mEditUserInfoController.onSaveInstanceState(outState); 830ca80fe4cdbfa2a9298ab332770eef9890798c60Amith Yamasani } 840ca80fe4cdbfa2a9298ab332770eef9890798c60Amith Yamasani 850ca80fe4cdbfa2a9298ab332770eef9890798c60Amith Yamasani @Override 860ca80fe4cdbfa2a9298ab332770eef9890798c60Amith Yamasani public void onResume() { 870ca80fe4cdbfa2a9298ab332770eef9890798c60Amith Yamasani super.onResume(); 880ca80fe4cdbfa2a9298ab332770eef9890798c60Amith Yamasani 8938e761051242b2129a30e482404e6f87ea9ad75aAmith Yamasani // Check if user still exists 9038e761051242b2129a30e482404e6f87ea9ad75aAmith Yamasani UserInfo info = getExistingUser(mUser); 9138e761051242b2129a30e482404e6f87ea9ad75aAmith Yamasani if (info == null) { 9238e761051242b2129a30e482404e6f87ea9ad75aAmith Yamasani finishFragment(); 9338e761051242b2129a30e482404e6f87ea9ad75aAmith Yamasani } else { 9438e761051242b2129a30e482404e6f87ea9ad75aAmith Yamasani ((TextView) mHeaderView.findViewById(android.R.id.title)).setText(info.name); 9538e761051242b2129a30e482404e6f87ea9ad75aAmith Yamasani ((ImageView) mHeaderView.findViewById(android.R.id.icon)).setImageDrawable( 9638e761051242b2129a30e482404e6f87ea9ad75aAmith Yamasani getCircularUserIcon()); 9738e761051242b2129a30e482404e6f87ea9ad75aAmith Yamasani } 9838e761051242b2129a30e482404e6f87ea9ad75aAmith Yamasani } 9938e761051242b2129a30e482404e6f87ea9ad75aAmith Yamasani 10038e761051242b2129a30e482404e6f87ea9ad75aAmith Yamasani private UserInfo getExistingUser(UserHandle thisUser) { 10138e761051242b2129a30e482404e6f87ea9ad75aAmith Yamasani final List<UserInfo> users = mUserManager.getUsers(true); // Only get non-dying 10238e761051242b2129a30e482404e6f87ea9ad75aAmith Yamasani for (UserInfo user : users) { 10338e761051242b2129a30e482404e6f87ea9ad75aAmith Yamasani if (user.id == thisUser.getIdentifier()) { 10438e761051242b2129a30e482404e6f87ea9ad75aAmith Yamasani return user; 10538e761051242b2129a30e482404e6f87ea9ad75aAmith Yamasani } 10638e761051242b2129a30e482404e6f87ea9ad75aAmith Yamasani } 10738e761051242b2129a30e482404e6f87ea9ad75aAmith Yamasani return null; 1080ca80fe4cdbfa2a9298ab332770eef9890798c60Amith Yamasani } 1090ca80fe4cdbfa2a9298ab332770eef9890798c60Amith Yamasani 1100ca80fe4cdbfa2a9298ab332770eef9890798c60Amith Yamasani @Override 1117f5f0bb2aead332d4c9c8e66c818480be9fa680bAmith Yamasani public void startActivityForResult(Intent intent, int requestCode) { 112ee3987475e1d29e8355bdb9e068149eb01e3fd43Amith Yamasani mEditUserInfoController.startingActivityForResult(); 1137f5f0bb2aead332d4c9c8e66c818480be9fa680bAmith Yamasani super.startActivityForResult(intent, requestCode); 1147f5f0bb2aead332d4c9c8e66c818480be9fa680bAmith Yamasani } 1157f5f0bb2aead332d4c9c8e66c818480be9fa680bAmith Yamasani 1167f5f0bb2aead332d4c9c8e66c818480be9fa680bAmith Yamasani @Override 1170ca80fe4cdbfa2a9298ab332770eef9890798c60Amith Yamasani public void onActivityResult(int requestCode, int resultCode, Intent data) { 1180ca80fe4cdbfa2a9298ab332770eef9890798c60Amith Yamasani super.onActivityResult(requestCode, resultCode, data); 1190ca80fe4cdbfa2a9298ab332770eef9890798c60Amith Yamasani 120ee3987475e1d29e8355bdb9e068149eb01e3fd43Amith Yamasani mEditUserInfoController.onActivityResult(requestCode, resultCode, data); 1210ca80fe4cdbfa2a9298ab332770eef9890798c60Amith Yamasani } 1220ca80fe4cdbfa2a9298ab332770eef9890798c60Amith Yamasani 1230ca80fe4cdbfa2a9298ab332770eef9890798c60Amith Yamasani @Override 1240ca80fe4cdbfa2a9298ab332770eef9890798c60Amith Yamasani public void onClick(View view) { 1250ca80fe4cdbfa2a9298ab332770eef9890798c60Amith Yamasani if (view == mHeaderView) { 1260ca80fe4cdbfa2a9298ab332770eef9890798c60Amith Yamasani showDialog(DIALOG_ID_EDIT_USER_INFO); 127247520c369370885a1c085e53ee679dce0fd55ceAmith Yamasani } else if (view == mDeleteButton) { 128247520c369370885a1c085e53ee679dce0fd55ceAmith Yamasani showDialog(DIALOG_CONFIRM_REMOVE); 1290ca80fe4cdbfa2a9298ab332770eef9890798c60Amith Yamasani } else { 1300ca80fe4cdbfa2a9298ab332770eef9890798c60Amith Yamasani super.onClick(view); // in AppRestrictionsFragment 1310ca80fe4cdbfa2a9298ab332770eef9890798c60Amith Yamasani } 1320ca80fe4cdbfa2a9298ab332770eef9890798c60Amith Yamasani } 1330ca80fe4cdbfa2a9298ab332770eef9890798c60Amith Yamasani 1340ca80fe4cdbfa2a9298ab332770eef9890798c60Amith Yamasani @Override 1350ca80fe4cdbfa2a9298ab332770eef9890798c60Amith Yamasani public Dialog onCreateDialog(int dialogId) { 1360ca80fe4cdbfa2a9298ab332770eef9890798c60Amith Yamasani if (dialogId == DIALOG_ID_EDIT_USER_INFO) { 137ee3987475e1d29e8355bdb9e068149eb01e3fd43Amith Yamasani return mEditUserInfoController.createDialog(this, mUserIconView.getDrawable(), 138ee3987475e1d29e8355bdb9e068149eb01e3fd43Amith Yamasani mUserNameView.getText(), R.string.profile_info_settings_title, 139ee3987475e1d29e8355bdb9e068149eb01e3fd43Amith Yamasani this, mUser); 140247520c369370885a1c085e53ee679dce0fd55ceAmith Yamasani } else if (dialogId == DIALOG_CONFIRM_REMOVE) { 141247520c369370885a1c085e53ee679dce0fd55ceAmith Yamasani Dialog dlg = 142247520c369370885a1c085e53ee679dce0fd55ceAmith Yamasani Utils.createRemoveConfirmationDialog(getActivity(), mUser.getIdentifier(), 143247520c369370885a1c085e53ee679dce0fd55ceAmith Yamasani new DialogInterface.OnClickListener() { 144247520c369370885a1c085e53ee679dce0fd55ceAmith Yamasani public void onClick(DialogInterface dialog, int which) { 145247520c369370885a1c085e53ee679dce0fd55ceAmith Yamasani removeUser(); 146247520c369370885a1c085e53ee679dce0fd55ceAmith Yamasani } 147247520c369370885a1c085e53ee679dce0fd55ceAmith Yamasani } 148247520c369370885a1c085e53ee679dce0fd55ceAmith Yamasani ); 149247520c369370885a1c085e53ee679dce0fd55ceAmith Yamasani return dlg; 1500ca80fe4cdbfa2a9298ab332770eef9890798c60Amith Yamasani } 1510ca80fe4cdbfa2a9298ab332770eef9890798c60Amith Yamasani 1520ca80fe4cdbfa2a9298ab332770eef9890798c60Amith Yamasani return null; 1530ca80fe4cdbfa2a9298ab332770eef9890798c60Amith Yamasani } 1540ca80fe4cdbfa2a9298ab332770eef9890798c60Amith Yamasani 155247520c369370885a1c085e53ee679dce0fd55ceAmith Yamasani private void removeUser() { 156247520c369370885a1c085e53ee679dce0fd55ceAmith Yamasani getView().post(new Runnable() { 157247520c369370885a1c085e53ee679dce0fd55ceAmith Yamasani public void run() { 158247520c369370885a1c085e53ee679dce0fd55ceAmith Yamasani mUserManager.removeUser(mUser.getIdentifier()); 159247520c369370885a1c085e53ee679dce0fd55ceAmith Yamasani finishFragment(); 160247520c369370885a1c085e53ee679dce0fd55ceAmith Yamasani } 161247520c369370885a1c085e53ee679dce0fd55ceAmith Yamasani }); 162247520c369370885a1c085e53ee679dce0fd55ceAmith Yamasani } 163247520c369370885a1c085e53ee679dce0fd55ceAmith Yamasani 164ee3987475e1d29e8355bdb9e068149eb01e3fd43Amith Yamasani @Override 165ee3987475e1d29e8355bdb9e068149eb01e3fd43Amith Yamasani public void onPhotoChanged(Drawable photo) { 166ee3987475e1d29e8355bdb9e068149eb01e3fd43Amith Yamasani mUserIconView.setImageDrawable(photo); 1670ca80fe4cdbfa2a9298ab332770eef9890798c60Amith Yamasani } 1680ca80fe4cdbfa2a9298ab332770eef9890798c60Amith Yamasani 169ee3987475e1d29e8355bdb9e068149eb01e3fd43Amith Yamasani @Override 170ee3987475e1d29e8355bdb9e068149eb01e3fd43Amith Yamasani public void onLabelChanged(CharSequence label) { 171ee3987475e1d29e8355bdb9e068149eb01e3fd43Amith Yamasani mUserNameView.setText(label); 1720ca80fe4cdbfa2a9298ab332770eef9890798c60Amith Yamasani } 1730ca80fe4cdbfa2a9298ab332770eef9890798c60Amith Yamasani} 174