1 /* 2 * Copyright (C) 2018 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 17 package com.android.car.settings.users; 18 19 import android.car.user.CarUserManagerHelper; 20 import android.content.Context; 21 import android.content.pm.UserInfo; 22 import android.graphics.drawable.Drawable; 23 24 import androidx.car.widget.ListItem; 25 import androidx.car.widget.ListItemProvider; 26 import androidx.car.widget.TextListItem; 27 28 import com.android.car.settings.R; 29 30 import java.util.ArrayList; 31 import java.util.List; 32 33 /** 34 * Implementation of {@link ListItemProvider} for {@link UsersListFragment}. 35 * Creates items that represent users on the system. 36 */ 37 class UsersItemProvider extends ListItemProvider { 38 private final List<ListItem> mItems = new ArrayList<>(); 39 private final Context mContext; 40 private final UserClickListener mUserClickListener; 41 private final CarUserManagerHelper mCarUserManagerHelper; 42 private final UserIconProvider mUserIconProvider; 43 44 UsersItemProvider(Context context, UserClickListener userClickListener, 45 CarUserManagerHelper userManagerHelper) { 46 mContext = context; 47 mUserClickListener = userClickListener; 48 mCarUserManagerHelper = userManagerHelper; 49 mUserIconProvider = new UserIconProvider(mCarUserManagerHelper); 50 refreshItems(); 51 } 52 53 @Override 54 public ListItem get(int position) { 55 return mItems.get(position); 56 } 57 58 @Override 59 public int size() { 60 return mItems.size(); 61 } 62 63 /** 64 * Clears and recreates the list of items. 65 */ 66 public void refreshItems() { 67 mItems.clear(); 68 69 UserInfo currUserInfo = mCarUserManagerHelper.getCurrentForegroundUserInfo(); 70 71 // Show current user 72 mItems.add(createUserItem(currUserInfo, 73 mContext.getString(R.string.current_user_name, currUserInfo.name))); 74 75 // If the current user is a demo user, don't list any of the other users. 76 if (currUserInfo.isDemo()) { 77 return; 78 } 79 80 // Display other users on the system 81 List<UserInfo> infos = mCarUserManagerHelper.getAllSwitchableUsers(); 82 for (UserInfo userInfo : infos) { 83 if (!userInfo.isGuest()) { // Do not show guest users. 84 mItems.add(createUserItem(userInfo, userInfo.name)); 85 } 86 } 87 88 // Display guest session option. 89 if (!currUserInfo.isGuest()) { 90 mItems.add(createGuestItem()); 91 } 92 } 93 94 // Creates a line for a user, clicking on it leads to the user details page. 95 private ListItem createUserItem(UserInfo userInfo, String title) { 96 TextListItem item = new TextListItem(mContext); 97 item.setPrimaryActionIcon(mUserIconProvider.getUserIcon(userInfo, mContext), 98 /* useLargeIcon= */ false); 99 item.setTitle(title); 100 101 if (!userInfo.isInitialized()) { 102 // Indicate that the user has not been initialized yet. 103 item.setBody(mContext.getString(R.string.user_summary_not_set_up)); 104 } 105 106 item.setOnClickListener(view -> mUserClickListener.onUserClicked(userInfo)); 107 item.setSupplementalIcon(R.drawable.ic_chevron_right, false); 108 return item; 109 } 110 111 // Creates a line for a guest session. 112 private ListItem createGuestItem() { 113 Drawable icon = UserIconProvider.scaleUserIcon(mCarUserManagerHelper.getGuestDefaultIcon(), 114 mCarUserManagerHelper, mContext); 115 116 TextListItem item = new TextListItem(mContext); 117 item.setPrimaryActionIcon(icon, /* useLargeIcon= */ false); 118 item.setTitle(mContext.getString(R.string.user_guest)); 119 120 item.setOnClickListener(view -> mUserClickListener.onGuestClicked()); 121 item.setSupplementalIcon(R.drawable.ic_chevron_right, false); 122 return item; 123 } 124 125 /** 126 * Interface for registering clicks on users. 127 */ 128 interface UserClickListener { 129 /** 130 * Invoked when user is clicked. 131 * 132 * @param userInfo User for which the click is registered. 133 */ 134 void onUserClicked(UserInfo userInfo); 135 136 /** 137 * Invoked when guest is clicked. 138 */ 139 void onGuestClicked(); 140 } 141 } 142