1 /*
2  * Copyright (C) 2021 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.companiondevicemanager;
18 
19 import static com.android.companiondevicemanager.Utils.getIcon;
20 import static com.android.companiondevicemanager.Utils.getImageColor;
21 
22 import android.content.Context;
23 import android.view.LayoutInflater;
24 import android.view.View;
25 import android.view.ViewGroup;
26 import android.widget.ImageView;
27 import android.widget.TextView;
28 
29 import androidx.recyclerview.widget.RecyclerView;
30 
31 import java.util.List;
32 /**
33  * Adapter for the list of "found" devices.
34  */
35 class DeviceListAdapter extends RecyclerView.Adapter<DeviceListAdapter.ViewHolder> {
36     public int mSelectedPosition = RecyclerView.NO_POSITION;
37 
38     private final Context mContext;
39 
40     // List if pairs (display name, address)
41     private List<DeviceFilterPair<?>> mDevices;
42 
43     private OnItemClickListener mListener;
44 
45     private static final int TYPE_WIFI = 0;
46     private static final int TYPE_BT = 1;
47 
DeviceListAdapter(Context context, OnItemClickListener listener)48     DeviceListAdapter(Context context, OnItemClickListener listener) {
49         mContext = context;
50         mListener = listener;
51     }
52 
getItem(int position)53     public DeviceFilterPair<?> getItem(int position) {
54         return mDevices.get(position);
55     }
56 
57     @Override
onCreateViewHolder(ViewGroup parent, int viewType)58     public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
59         View view = LayoutInflater.from(parent.getContext()).inflate(
60                 R.layout.list_item_device, parent, false);
61         ViewHolder viewHolder = new ViewHolder(view);
62         if (viewType == TYPE_WIFI) {
63             viewHolder.mImageView.setImageDrawable(
64                     getIcon(mContext, com.android.internal.R.drawable.ic_wifi_signal_3));
65         } else {
66             viewHolder.mImageView.setImageDrawable(
67                     getIcon(mContext, android.R.drawable.stat_sys_data_bluetooth));
68         }
69 
70         viewHolder.mImageView.setColorFilter(
71                 mContext.getResources().getColor(getImageColor(mContext), /* Theme= */null));
72 
73         return viewHolder;
74     }
75 
76     @Override
onBindViewHolder(ViewHolder holder, int position)77     public void onBindViewHolder(ViewHolder holder, int position) {
78         holder.itemView.setSelected(mSelectedPosition == position);
79         holder.mTextView.setText(mDevices.get(position).getDisplayName());
80         holder.itemView.setOnClickListener(v -> mListener.onItemClick(position));
81     }
82 
83     @Override
getItemViewType(int position)84     public int getItemViewType(int position) {
85         return isWifiDevice(position) ? TYPE_WIFI : TYPE_BT;
86     }
87 
88     @Override
getItemId(int position)89     public long getItemId(int position) {
90         return position;
91     }
92 
93     @Override
getItemCount()94     public int getItemCount() {
95         return mDevices != null ? mDevices.size() : 0;
96     }
97 
setSelectedPosition(int position)98     public void setSelectedPosition(int position) {
99         mSelectedPosition = position;
100     }
101 
setDevices(List<DeviceFilterPair<?>> devices)102     void setDevices(List<DeviceFilterPair<?>> devices) {
103         mDevices = devices;
104         notifyDataSetChanged();
105     }
106 
107     static class ViewHolder extends RecyclerView.ViewHolder {
108         private TextView mTextView;
109         private ImageView mImageView;
ViewHolder(View itemView)110         ViewHolder(View itemView) {
111             super(itemView);
112             mTextView = itemView.findViewById(android.R.id.text1);
113             mImageView = itemView.findViewById(android.R.id.icon);
114         }
115     }
116 
isWifiDevice(int position)117     private boolean isWifiDevice(int position) {
118         return mDevices.get(position).getDevice() instanceof android.net.wifi.ScanResult;
119     }
120 
121     public interface OnItemClickListener {
onItemClick(int position)122         void onItemClick(int position);
123     }
124 }
125