Home | History | Annotate | Download | only in users
      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