• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 
UsersItemProvider(Context context, UserClickListener userClickListener, CarUserManagerHelper userManagerHelper)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
get(int position)54     public ListItem get(int position) {
55         return mItems.get(position);
56     }
57 
58     @Override
size()59     public int size() {
60         return mItems.size();
61     }
62 
63     /**
64      * Clears and recreates the list of items.
65      */
refreshItems()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.
createUserItem(UserInfo userInfo, String title)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.
createGuestItem()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          */
onUserClicked(UserInfo userInfo)134         void onUserClicked(UserInfo userInfo);
135 
136         /**
137          * Invoked when guest is clicked.
138          */
onGuestClicked()139         void onGuestClicked();
140     }
141 }
142