19e6ac3d25f55303887293e36eb288ef191ffd1bbAmith Yamasani/* 29e6ac3d25f55303887293e36eb288ef191ffd1bbAmith Yamasani * Copyright (C) 2014 The Android Open Source Project 39e6ac3d25f55303887293e36eb288ef191ffd1bbAmith Yamasani * 49e6ac3d25f55303887293e36eb288ef191ffd1bbAmith Yamasani * Licensed under the Apache License, Version 2.0 (the "License"); 59e6ac3d25f55303887293e36eb288ef191ffd1bbAmith Yamasani * you may not use this file except in compliance with the License. 69e6ac3d25f55303887293e36eb288ef191ffd1bbAmith Yamasani * You may obtain a copy of the License at 79e6ac3d25f55303887293e36eb288ef191ffd1bbAmith Yamasani * 89e6ac3d25f55303887293e36eb288ef191ffd1bbAmith Yamasani * http://www.apache.org/licenses/LICENSE-2.0 99e6ac3d25f55303887293e36eb288ef191ffd1bbAmith Yamasani * 109e6ac3d25f55303887293e36eb288ef191ffd1bbAmith Yamasani * Unless required by applicable law or agreed to in writing, software 119e6ac3d25f55303887293e36eb288ef191ffd1bbAmith Yamasani * distributed under the License is distributed on an "AS IS" BASIS, 129e6ac3d25f55303887293e36eb288ef191ffd1bbAmith Yamasani * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 139e6ac3d25f55303887293e36eb288ef191ffd1bbAmith Yamasani * See the License for the specific language governing permissions and 149e6ac3d25f55303887293e36eb288ef191ffd1bbAmith Yamasani * limitations under the License. 159e6ac3d25f55303887293e36eb288ef191ffd1bbAmith Yamasani */ 169e6ac3d25f55303887293e36eb288ef191ffd1bbAmith Yamasani 179e6ac3d25f55303887293e36eb288ef191ffd1bbAmith Yamasanipackage com.android.settings.users; 189e6ac3d25f55303887293e36eb288ef191ffd1bbAmith Yamasani 199e6ac3d25f55303887293e36eb288ef191ffd1bbAmith Yamasaniimport android.app.Dialog; 209e6ac3d25f55303887293e36eb288ef191ffd1bbAmith Yamasaniimport android.content.Context; 219e6ac3d25f55303887293e36eb288ef191ffd1bbAmith Yamasaniimport android.content.DialogInterface; 229e6ac3d25f55303887293e36eb288ef191ffd1bbAmith Yamasaniimport android.content.pm.UserInfo; 239e6ac3d25f55303887293e36eb288ef191ffd1bbAmith Yamasaniimport android.os.Bundle; 249e6ac3d25f55303887293e36eb288ef191ffd1bbAmith Yamasaniimport android.os.UserHandle; 259e6ac3d25f55303887293e36eb288ef191ffd1bbAmith Yamasaniimport android.os.UserManager; 2639b467482d1bf256a111c757e9b7621c6f523271Jason Monkimport android.support.v14.preference.SwitchPreference; 2739b467482d1bf256a111c757e9b7621c6f523271Jason Monkimport android.support.v7.preference.Preference; 289e6ac3d25f55303887293e36eb288ef191ffd1bbAmith Yamasani 29265d3c2a0c36251bf8a9f571d7239b6dd404d942Tamas Berghammerimport com.android.internal.logging.nano.MetricsProto; 30265d3c2a0c36251bf8a9f571d7239b6dd404d942Tamas Berghammerimport com.android.internal.logging.nano.MetricsProto.MetricsEvent; 319e6ac3d25f55303887293e36eb288ef191ffd1bbAmith Yamasaniimport com.android.settings.R; 329e6ac3d25f55303887293e36eb288ef191ffd1bbAmith Yamasaniimport com.android.settings.SettingsPreferenceFragment; 339e9e63b7b3b31fcae7242eb07f528487e0913402Sudheer Shankaimport com.android.settingslib.RestrictedLockUtils; 349e6ac3d25f55303887293e36eb288ef191ffd1bbAmith Yamasani 35a766bfa3de1dd87e15c9f0b5bedbdf10735e59ffAmith Yamasaniimport java.util.List; 36a766bfa3de1dd87e15c9f0b5bedbdf10735e59ffAmith Yamasani 379e6ac3d25f55303887293e36eb288ef191ffd1bbAmith Yamasani/** 389e6ac3d25f55303887293e36eb288ef191ffd1bbAmith Yamasani * Settings screen for configuring a specific user. It can contain user restrictions 399e6ac3d25f55303887293e36eb288ef191ffd1bbAmith Yamasani * and deletion controls. It is shown when you tap on the settings icon in the 409e6ac3d25f55303887293e36eb288ef191ffd1bbAmith Yamasani * user management (UserSettings) screen. 4151c6dac50ea8874181036f54c3a7e7aa8eb800bdAmith Yamasani * 429e6ac3d25f55303887293e36eb288ef191ffd1bbAmith Yamasani * Arguments to this fragment must include the userId of the user (in EXTRA_USER_ID) for whom 439e6ac3d25f55303887293e36eb288ef191ffd1bbAmith Yamasani * to display controls, or should contain the EXTRA_USER_GUEST = true. 449e6ac3d25f55303887293e36eb288ef191ffd1bbAmith Yamasani */ 459e6ac3d25f55303887293e36eb288ef191ffd1bbAmith Yamasanipublic class UserDetailsSettings extends SettingsPreferenceFragment 469e6ac3d25f55303887293e36eb288ef191ffd1bbAmith Yamasani implements Preference.OnPreferenceClickListener, Preference.OnPreferenceChangeListener { 479e6ac3d25f55303887293e36eb288ef191ffd1bbAmith Yamasani 489e6ac3d25f55303887293e36eb288ef191ffd1bbAmith Yamasani private static final String TAG = UserDetailsSettings.class.getSimpleName(); 499e6ac3d25f55303887293e36eb288ef191ffd1bbAmith Yamasani 509e6ac3d25f55303887293e36eb288ef191ffd1bbAmith Yamasani private static final String KEY_ENABLE_TELEPHONY = "enable_calling"; 519e6ac3d25f55303887293e36eb288ef191ffd1bbAmith Yamasani private static final String KEY_REMOVE_USER = "remove_user"; 529e6ac3d25f55303887293e36eb288ef191ffd1bbAmith Yamasani 539e6ac3d25f55303887293e36eb288ef191ffd1bbAmith Yamasani /** Integer extra containing the userId to manage */ 549e6ac3d25f55303887293e36eb288ef191ffd1bbAmith Yamasani static final String EXTRA_USER_ID = "user_id"; 559e6ac3d25f55303887293e36eb288ef191ffd1bbAmith Yamasani /** Boolean extra to indicate guest preferences */ 569e6ac3d25f55303887293e36eb288ef191ffd1bbAmith Yamasani static final String EXTRA_USER_GUEST = "guest_user"; 579e6ac3d25f55303887293e36eb288ef191ffd1bbAmith Yamasani 589e6ac3d25f55303887293e36eb288ef191ffd1bbAmith Yamasani private static final int DIALOG_CONFIRM_REMOVE = 1; 599e6ac3d25f55303887293e36eb288ef191ffd1bbAmith Yamasani private static final int DIALOG_CONFIRM_ENABLE_CALLING = 2; 60dbbd4fca442dc507cd478f26c5dbd5a94085c4e3Fyodor Kupolov private static final int DIALOG_CONFIRM_ENABLE_CALLING_AND_SMS = 3; 619e6ac3d25f55303887293e36eb288ef191ffd1bbAmith Yamasani 629e6ac3d25f55303887293e36eb288ef191ffd1bbAmith Yamasani private UserManager mUserManager; 639e6ac3d25f55303887293e36eb288ef191ffd1bbAmith Yamasani private SwitchPreference mPhonePref; 649e9e63b7b3b31fcae7242eb07f528487e0913402Sudheer Shanka private Preference mRemoveUserPref; 659e6ac3d25f55303887293e36eb288ef191ffd1bbAmith Yamasani 669e6ac3d25f55303887293e36eb288ef191ffd1bbAmith Yamasani private UserInfo mUserInfo; 679e6ac3d25f55303887293e36eb288ef191ffd1bbAmith Yamasani private boolean mGuestUser; 689e6ac3d25f55303887293e36eb288ef191ffd1bbAmith Yamasani private Bundle mDefaultGuestRestrictions; 699e6ac3d25f55303887293e36eb288ef191ffd1bbAmith Yamasani 709e6ac3d25f55303887293e36eb288ef191ffd1bbAmith Yamasani @Override 716507613ebcd22e4691c2af92a5c161bd327db336Fan Zhang public int getMetricsCategory() { 729d1bfd1e8de6e46137a9571507c03526880d6a46Chris Wren return MetricsEvent.USER_DETAILS; 738a963babe2e36b7a41f77b8d2598c97658196e58Chris Wren } 748a963babe2e36b7a41f77b8d2598c97658196e58Chris Wren 758a963babe2e36b7a41f77b8d2598c97658196e58Chris Wren @Override 769e6ac3d25f55303887293e36eb288ef191ffd1bbAmith Yamasani public void onCreate(Bundle icicle) { 779e6ac3d25f55303887293e36eb288ef191ffd1bbAmith Yamasani super.onCreate(icicle); 789e6ac3d25f55303887293e36eb288ef191ffd1bbAmith Yamasani 799e6ac3d25f55303887293e36eb288ef191ffd1bbAmith Yamasani final Context context = getActivity(); 809e6ac3d25f55303887293e36eb288ef191ffd1bbAmith Yamasani mUserManager = (UserManager) context.getSystemService(Context.USER_SERVICE); 819e6ac3d25f55303887293e36eb288ef191ffd1bbAmith Yamasani 829e6ac3d25f55303887293e36eb288ef191ffd1bbAmith Yamasani addPreferencesFromResource(R.xml.user_details_settings); 839e6ac3d25f55303887293e36eb288ef191ffd1bbAmith Yamasani mPhonePref = (SwitchPreference) findPreference(KEY_ENABLE_TELEPHONY); 849e9e63b7b3b31fcae7242eb07f528487e0913402Sudheer Shanka mRemoveUserPref = findPreference(KEY_REMOVE_USER); 859e6ac3d25f55303887293e36eb288ef191ffd1bbAmith Yamasani 869e6ac3d25f55303887293e36eb288ef191ffd1bbAmith Yamasani mGuestUser = getArguments().getBoolean(EXTRA_USER_GUEST, false); 879e6ac3d25f55303887293e36eb288ef191ffd1bbAmith Yamasani 889e6ac3d25f55303887293e36eb288ef191ffd1bbAmith Yamasani if (!mGuestUser) { 899e6ac3d25f55303887293e36eb288ef191ffd1bbAmith Yamasani // Regular user. Get the user id from the caller. 909e6ac3d25f55303887293e36eb288ef191ffd1bbAmith Yamasani final int userId = getArguments().getInt(EXTRA_USER_ID, -1); 919e6ac3d25f55303887293e36eb288ef191ffd1bbAmith Yamasani if (userId == -1) { 929e6ac3d25f55303887293e36eb288ef191ffd1bbAmith Yamasani throw new RuntimeException("Arguments to this fragment must contain the user id"); 939e6ac3d25f55303887293e36eb288ef191ffd1bbAmith Yamasani } 949e6ac3d25f55303887293e36eb288ef191ffd1bbAmith Yamasani mUserInfo = mUserManager.getUserInfo(userId); 95920c57d499740052f87a15fa1db411b075f943dfAmith Yamasani mPhonePref.setChecked(!mUserManager.hasUserRestriction( 96920c57d499740052f87a15fa1db411b075f943dfAmith Yamasani UserManager.DISALLOW_OUTGOING_CALLS, new UserHandle(userId))); 979e6ac3d25f55303887293e36eb288ef191ffd1bbAmith Yamasani mRemoveUserPref.setOnPreferenceClickListener(this); 989e6ac3d25f55303887293e36eb288ef191ffd1bbAmith Yamasani } else { 999e6ac3d25f55303887293e36eb288ef191ffd1bbAmith Yamasani // These are not for an existing user, just general Guest settings. 1009e6ac3d25f55303887293e36eb288ef191ffd1bbAmith Yamasani removePreference(KEY_REMOVE_USER); 1019e6ac3d25f55303887293e36eb288ef191ffd1bbAmith Yamasani // Default title is for calling and SMS. Change to calling-only here 1029e6ac3d25f55303887293e36eb288ef191ffd1bbAmith Yamasani mPhonePref.setTitle(R.string.user_enable_calling); 1039e6ac3d25f55303887293e36eb288ef191ffd1bbAmith Yamasani mDefaultGuestRestrictions = mUserManager.getDefaultGuestRestrictions(); 1049e6ac3d25f55303887293e36eb288ef191ffd1bbAmith Yamasani mPhonePref.setChecked( 105920c57d499740052f87a15fa1db411b075f943dfAmith Yamasani !mDefaultGuestRestrictions.getBoolean(UserManager.DISALLOW_OUTGOING_CALLS)); 1069e6ac3d25f55303887293e36eb288ef191ffd1bbAmith Yamasani } 1079e9e63b7b3b31fcae7242eb07f528487e0913402Sudheer Shanka if (RestrictedLockUtils.hasBaseUserRestriction(context, 1089e9e63b7b3b31fcae7242eb07f528487e0913402Sudheer Shanka UserManager.DISALLOW_REMOVE_USER, UserHandle.myUserId())) { 1099e9e63b7b3b31fcae7242eb07f528487e0913402Sudheer Shanka removePreference(KEY_REMOVE_USER); 1109e9e63b7b3b31fcae7242eb07f528487e0913402Sudheer Shanka } 1119e6ac3d25f55303887293e36eb288ef191ffd1bbAmith Yamasani mPhonePref.setOnPreferenceChangeListener(this); 1129e6ac3d25f55303887293e36eb288ef191ffd1bbAmith Yamasani } 1139e6ac3d25f55303887293e36eb288ef191ffd1bbAmith Yamasani 1149e6ac3d25f55303887293e36eb288ef191ffd1bbAmith Yamasani @Override 1159e6ac3d25f55303887293e36eb288ef191ffd1bbAmith Yamasani public boolean onPreferenceClick(Preference preference) { 1169e6ac3d25f55303887293e36eb288ef191ffd1bbAmith Yamasani if (preference == mRemoveUserPref) { 11732f1fe5b8a9053cf467ae9b304f5e693194fd9bcJulia Reynolds if (!mUserManager.isAdminUser()) { 11844879a387a6be6b93cdcc8894227d68af7dbbb1aXiaohui Chen throw new RuntimeException("Only admins can remove a user"); 1199e6ac3d25f55303887293e36eb288ef191ffd1bbAmith Yamasani } 1209e6ac3d25f55303887293e36eb288ef191ffd1bbAmith Yamasani showDialog(DIALOG_CONFIRM_REMOVE); 1219e6ac3d25f55303887293e36eb288ef191ffd1bbAmith Yamasani return true; 1229e6ac3d25f55303887293e36eb288ef191ffd1bbAmith Yamasani } 1239e6ac3d25f55303887293e36eb288ef191ffd1bbAmith Yamasani return false; 1249e6ac3d25f55303887293e36eb288ef191ffd1bbAmith Yamasani } 1259e6ac3d25f55303887293e36eb288ef191ffd1bbAmith Yamasani 1269e6ac3d25f55303887293e36eb288ef191ffd1bbAmith Yamasani @Override 1279e6ac3d25f55303887293e36eb288ef191ffd1bbAmith Yamasani public boolean onPreferenceChange(Preference preference, Object newValue) { 128dbbd4fca442dc507cd478f26c5dbd5a94085c4e3Fyodor Kupolov if (Boolean.TRUE.equals(newValue)) { 129b761ad1c6eefe153eb674d712ab444cee1b7b865Makoto Onuki showDialog(mGuestUser ? DIALOG_CONFIRM_ENABLE_CALLING 130b761ad1c6eefe153eb674d712ab444cee1b7b865Makoto Onuki : DIALOG_CONFIRM_ENABLE_CALLING_AND_SMS); 131dbbd4fca442dc507cd478f26c5dbd5a94085c4e3Fyodor Kupolov return false; 132dbbd4fca442dc507cd478f26c5dbd5a94085c4e3Fyodor Kupolov } 133dbbd4fca442dc507cd478f26c5dbd5a94085c4e3Fyodor Kupolov enableCallsAndSms(false); 134dbbd4fca442dc507cd478f26c5dbd5a94085c4e3Fyodor Kupolov return true; 135dbbd4fca442dc507cd478f26c5dbd5a94085c4e3Fyodor Kupolov } 136dbbd4fca442dc507cd478f26c5dbd5a94085c4e3Fyodor Kupolov 137dbbd4fca442dc507cd478f26c5dbd5a94085c4e3Fyodor Kupolov void enableCallsAndSms(boolean enabled) { 138dbbd4fca442dc507cd478f26c5dbd5a94085c4e3Fyodor Kupolov mPhonePref.setChecked(enabled); 1399e6ac3d25f55303887293e36eb288ef191ffd1bbAmith Yamasani if (mGuestUser) { 140dbbd4fca442dc507cd478f26c5dbd5a94085c4e3Fyodor Kupolov mDefaultGuestRestrictions.putBoolean(UserManager.DISALLOW_OUTGOING_CALLS, !enabled); 141920c57d499740052f87a15fa1db411b075f943dfAmith Yamasani // SMS is always disabled for guest 142920c57d499740052f87a15fa1db411b075f943dfAmith Yamasani mDefaultGuestRestrictions.putBoolean(UserManager.DISALLOW_SMS, true); 1439e6ac3d25f55303887293e36eb288ef191ffd1bbAmith Yamasani mUserManager.setDefaultGuestRestrictions(mDefaultGuestRestrictions); 144b761ad1c6eefe153eb674d712ab444cee1b7b865Makoto Onuki 145a766bfa3de1dd87e15c9f0b5bedbdf10735e59ffAmith Yamasani // Update the guest's restrictions, if there is a guest 146b761ad1c6eefe153eb674d712ab444cee1b7b865Makoto Onuki // TODO: Maybe setDefaultGuestRestrictions() can internally just set the restrictions 147b761ad1c6eefe153eb674d712ab444cee1b7b865Makoto Onuki // on any existing guest rather than do it here with multiple Binder calls. 148a766bfa3de1dd87e15c9f0b5bedbdf10735e59ffAmith Yamasani List<UserInfo> users = mUserManager.getUsers(true); 149a766bfa3de1dd87e15c9f0b5bedbdf10735e59ffAmith Yamasani for (UserInfo user: users) { 150a766bfa3de1dd87e15c9f0b5bedbdf10735e59ffAmith Yamasani if (user.isGuest()) { 15137d018e54b8da53f1cdf6782358f9ce358084157Fyodor Kupolov UserHandle userHandle = UserHandle.of(user.id); 152b761ad1c6eefe153eb674d712ab444cee1b7b865Makoto Onuki for (String key : mDefaultGuestRestrictions.keySet()) { 153b761ad1c6eefe153eb674d712ab444cee1b7b865Makoto Onuki mUserManager.setUserRestriction( 15437d018e54b8da53f1cdf6782358f9ce358084157Fyodor Kupolov key, mDefaultGuestRestrictions.getBoolean(key), userHandle); 155b761ad1c6eefe153eb674d712ab444cee1b7b865Makoto Onuki } 156a766bfa3de1dd87e15c9f0b5bedbdf10735e59ffAmith Yamasani } 157a766bfa3de1dd87e15c9f0b5bedbdf10735e59ffAmith Yamasani } 1589e6ac3d25f55303887293e36eb288ef191ffd1bbAmith Yamasani } else { 15937d018e54b8da53f1cdf6782358f9ce358084157Fyodor Kupolov UserHandle userHandle = UserHandle.of(mUserInfo.id); 160dbbd4fca442dc507cd478f26c5dbd5a94085c4e3Fyodor Kupolov mUserManager.setUserRestriction(UserManager.DISALLOW_OUTGOING_CALLS, !enabled, 161dbbd4fca442dc507cd478f26c5dbd5a94085c4e3Fyodor Kupolov userHandle); 162dbbd4fca442dc507cd478f26c5dbd5a94085c4e3Fyodor Kupolov mUserManager.setUserRestriction(UserManager.DISALLOW_SMS, !enabled, userHandle); 1639e6ac3d25f55303887293e36eb288ef191ffd1bbAmith Yamasani } 1649e6ac3d25f55303887293e36eb288ef191ffd1bbAmith Yamasani } 1659e6ac3d25f55303887293e36eb288ef191ffd1bbAmith Yamasani 1669e6ac3d25f55303887293e36eb288ef191ffd1bbAmith Yamasani @Override 1679e6ac3d25f55303887293e36eb288ef191ffd1bbAmith Yamasani public Dialog onCreateDialog(int dialogId) { 1689e6ac3d25f55303887293e36eb288ef191ffd1bbAmith Yamasani Context context = getActivity(); 1699e6ac3d25f55303887293e36eb288ef191ffd1bbAmith Yamasani if (context == null) return null; 1709e6ac3d25f55303887293e36eb288ef191ffd1bbAmith Yamasani switch (dialogId) { 171dbbd4fca442dc507cd478f26c5dbd5a94085c4e3Fyodor Kupolov case DIALOG_CONFIRM_REMOVE: 172dbbd4fca442dc507cd478f26c5dbd5a94085c4e3Fyodor Kupolov return UserDialogs.createRemoveDialog(getActivity(), mUserInfo.id, 1739e6ac3d25f55303887293e36eb288ef191ffd1bbAmith Yamasani new DialogInterface.OnClickListener() { 1749e6ac3d25f55303887293e36eb288ef191ffd1bbAmith Yamasani public void onClick(DialogInterface dialog, int which) { 1759e6ac3d25f55303887293e36eb288ef191ffd1bbAmith Yamasani removeUser(); 1769e6ac3d25f55303887293e36eb288ef191ffd1bbAmith Yamasani } 1779e6ac3d25f55303887293e36eb288ef191ffd1bbAmith Yamasani }); 1789e6ac3d25f55303887293e36eb288ef191ffd1bbAmith Yamasani case DIALOG_CONFIRM_ENABLE_CALLING: 179dbbd4fca442dc507cd478f26c5dbd5a94085c4e3Fyodor Kupolov return UserDialogs.createEnablePhoneCallsDialog(getActivity(), 180dbbd4fca442dc507cd478f26c5dbd5a94085c4e3Fyodor Kupolov new DialogInterface.OnClickListener() { 181dbbd4fca442dc507cd478f26c5dbd5a94085c4e3Fyodor Kupolov public void onClick(DialogInterface dialog, int which) { 182dbbd4fca442dc507cd478f26c5dbd5a94085c4e3Fyodor Kupolov enableCallsAndSms(true); 183dbbd4fca442dc507cd478f26c5dbd5a94085c4e3Fyodor Kupolov } 184dbbd4fca442dc507cd478f26c5dbd5a94085c4e3Fyodor Kupolov }); 185dbbd4fca442dc507cd478f26c5dbd5a94085c4e3Fyodor Kupolov case DIALOG_CONFIRM_ENABLE_CALLING_AND_SMS: 186dbbd4fca442dc507cd478f26c5dbd5a94085c4e3Fyodor Kupolov return UserDialogs.createEnablePhoneCallsAndSmsDialog(getActivity(), 187dbbd4fca442dc507cd478f26c5dbd5a94085c4e3Fyodor Kupolov new DialogInterface.OnClickListener() { 188dbbd4fca442dc507cd478f26c5dbd5a94085c4e3Fyodor Kupolov public void onClick(DialogInterface dialog, int which) { 189dbbd4fca442dc507cd478f26c5dbd5a94085c4e3Fyodor Kupolov enableCallsAndSms(true); 190dbbd4fca442dc507cd478f26c5dbd5a94085c4e3Fyodor Kupolov } 191dbbd4fca442dc507cd478f26c5dbd5a94085c4e3Fyodor Kupolov }); 1929e6ac3d25f55303887293e36eb288ef191ffd1bbAmith Yamasani } 193dbbd4fca442dc507cd478f26c5dbd5a94085c4e3Fyodor Kupolov throw new IllegalArgumentException("Unsupported dialogId " + dialogId); 1949e6ac3d25f55303887293e36eb288ef191ffd1bbAmith Yamasani } 1959e6ac3d25f55303887293e36eb288ef191ffd1bbAmith Yamasani 196d65184faef1076280e121c5cbc1db863f3f37924Fan Zhang @Override 197d65184faef1076280e121c5cbc1db863f3f37924Fan Zhang public int getDialogMetricsCategory(int dialogId) { 198d65184faef1076280e121c5cbc1db863f3f37924Fan Zhang switch (dialogId) { 199d65184faef1076280e121c5cbc1db863f3f37924Fan Zhang case DIALOG_CONFIRM_REMOVE: 200d65184faef1076280e121c5cbc1db863f3f37924Fan Zhang return MetricsProto.MetricsEvent.DIALOG_USER_REMOVE; 201d65184faef1076280e121c5cbc1db863f3f37924Fan Zhang case DIALOG_CONFIRM_ENABLE_CALLING: 202d65184faef1076280e121c5cbc1db863f3f37924Fan Zhang return MetricsProto.MetricsEvent.DIALOG_USER_ENABLE_CALLING; 203d65184faef1076280e121c5cbc1db863f3f37924Fan Zhang case DIALOG_CONFIRM_ENABLE_CALLING_AND_SMS: 204d65184faef1076280e121c5cbc1db863f3f37924Fan Zhang return MetricsProto.MetricsEvent.DIALOG_USER_ENABLE_CALLING_AND_SMS; 205d65184faef1076280e121c5cbc1db863f3f37924Fan Zhang default: 206d65184faef1076280e121c5cbc1db863f3f37924Fan Zhang return 0; 207d65184faef1076280e121c5cbc1db863f3f37924Fan Zhang } 208d65184faef1076280e121c5cbc1db863f3f37924Fan Zhang } 209d65184faef1076280e121c5cbc1db863f3f37924Fan Zhang 2109e6ac3d25f55303887293e36eb288ef191ffd1bbAmith Yamasani void removeUser() { 2119e6ac3d25f55303887293e36eb288ef191ffd1bbAmith Yamasani mUserManager.removeUser(mUserInfo.id); 2129e6ac3d25f55303887293e36eb288ef191ffd1bbAmith Yamasani finishFragment(); 2139e6ac3d25f55303887293e36eb288ef191ffd1bbAmith Yamasani } 2149e6ac3d25f55303887293e36eb288ef191ffd1bbAmith Yamasani} 215