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