• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 2017 The Android Open Source Project
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License
15  */
16 package com.android.car.settings.users;
17 
18 import android.content.Intent;
19 import android.content.pm.UserInfo;
20 import android.os.Bundle;
21 import android.os.UserManager;
22 import android.provider.Settings;
23 import android.text.Editable;
24 import android.text.TextUtils;
25 import android.text.TextWatcher;
26 import android.view.View;
27 import android.widget.EditText;
28 
29 import androidx.annotation.LayoutRes;
30 import androidx.annotation.StringRes;
31 
32 import com.android.car.settings.R;
33 import com.android.car.settings.common.BaseFragment;
34 import com.android.car.ui.toolbar.MenuItem;
35 import com.android.internal.annotations.VisibleForTesting;
36 
37 import java.util.Arrays;
38 import java.util.List;
39 
40 /**
41  * Enables user to edit their username.
42  */
43 public class EditUsernameFragment extends BaseFragment {
44 
45     private static final String USER_NAME_SET = "user_name_set";
46 
47     private UserInfo mUserInfo;
48 
49     private EditText mUserNameEditText;
50     @VisibleForTesting UserManager mUserManager;
51     private MenuItem mOkButton;
52     private MenuItem mCancelButton;
53 
54     /**
55      * Creates instance of EditUsernameFragment.
56      */
newInstance(UserInfo userInfo)57     public static EditUsernameFragment newInstance(UserInfo userInfo) {
58         EditUsernameFragment
59                 userSettingsFragment = new EditUsernameFragment();
60         Bundle bundle = new Bundle();
61         bundle.putParcelable(Intent.EXTRA_USER, userInfo);
62         userSettingsFragment.setArguments(bundle);
63         return userSettingsFragment;
64     }
65 
66     @Override
getToolbarMenuItems()67     public List<MenuItem> getToolbarMenuItems() {
68         return Arrays.asList(mCancelButton, mOkButton);
69     }
70 
71     @Override
72     @LayoutRes
getLayoutId()73     protected int getLayoutId() {
74         return R.layout.edit_username_fragment;
75     }
76 
77     @Override
78     @StringRes
getTitleId()79     protected int getTitleId() {
80         return R.string.edit_user_name_title;
81     }
82 
83     @Override
onCreate(Bundle savedInstanceState)84     public void onCreate(Bundle savedInstanceState) {
85         super.onCreate(savedInstanceState);
86         mUserInfo = getArguments().getParcelable(Intent.EXTRA_USER);
87 
88         mCancelButton = new MenuItem.Builder(getContext())
89                 .setTitle(android.R.string.cancel)
90                 .setOnClickListener(i -> getActivity().onBackPressed())
91                 .build();
92         mOkButton = new MenuItem.Builder(getContext())
93                 .setTitle(android.R.string.ok)
94                 .setOnClickListener(i -> {
95                     // Save new user's name.
96                     mUserManager.setUserName(mUserInfo.id,
97                             mUserNameEditText.getText().toString());
98                     Settings.Secure.putInt(getActivity().getContentResolver(),
99                             USER_NAME_SET, 1);
100                     getActivity().onBackPressed();
101                 })
102                 .build();
103     }
104 
105     @Override
onViewCreated(View view, Bundle savedInstanceState)106     public void onViewCreated(View view, Bundle savedInstanceState) {
107         super.onViewCreated(view, savedInstanceState);
108         mUserNameEditText = view.findViewById(R.id.user_name_text_edit);
109     }
110 
111     @Override
onActivityCreated(Bundle savedInstanceState)112     public void onActivityCreated(Bundle savedInstanceState) {
113         super.onActivityCreated(savedInstanceState);
114 
115         if (mUserManager == null) {
116             mUserManager = UserManager.get(getContext());
117         }
118 
119         configureUsernameEditing();
120     }
121 
configureUsernameEditing()122     private void configureUsernameEditing() {
123         // Set the User's name.
124         mUserNameEditText.setText(mUserInfo.name);
125         mUserNameEditText.setEnabled(true);
126         mUserNameEditText.setSelectAllOnFocus(true);
127         mUserNameEditText.addTextChangedListener(new TextWatcher() {
128             @Override
129             public void onTextChanged(CharSequence s, int start, int before, int count) {
130                 if (TextUtils.isEmpty(s)) {
131                     mOkButton.setEnabled(false);
132                     mUserNameEditText.setError(getString(R.string.name_input_blank_error));
133                 } else if (!TextUtils.isGraphic(s)) {
134                     mOkButton.setEnabled(false);
135                     mUserNameEditText.setError(getString(R.string.name_input_invalid_error));
136                 } else {
137                     mOkButton.setEnabled(true);
138                     mUserNameEditText.setError(null);
139                 }
140             }
141 
142             @Override
143             public void beforeTextChanged(CharSequence s, int start, int count, int after) {
144             }
145 
146             @Override
147             public void afterTextChanged(Editable s) {
148             }
149         });
150     }
151 }
152