package de.plinzen.android.rttmanager.wifi; import android.content.Context; import android.net.wifi.ScanResult; import android.support.v7.widget.RecyclerView; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.RelativeLayout; import android.widget.TextView; import java.util.ArrayList; import java.util.List; import butterknife.BindView; import butterknife.ButterKnife; import de.plinzen.android.rttmanager.R; class WifiNetworkAdapter extends RecyclerView.Adapter<WifiNetworkAdapter.ViewHolder> { interface OnClickListener { void onItemClicked(final ScanResult wifiNetwork); } static class ViewHolder extends RecyclerView.ViewHolder { @BindView(R.id.wifi_network_item) RelativeLayout wifi_network_item; @BindView(R.id.txtSsid) TextView txtSsid; @BindView(R.id.txtMCResponder) TextView txtMcResponder; ViewHolder(final View itemView) { super(itemView); ButterKnife.bind(this, itemView); } } private final Context context; private List<ScanResult> wifiNetworks; private OnClickListener clickListener; WifiNetworkAdapter(final Context context) { this.context = context; wifiNetworks = null; } @Override public ViewHolder onCreateViewHolder(final ViewGroup parent, final int viewType) { return new ViewHolder(LayoutInflater.from(parent.getContext()).inflate(R.layout.item_wifi_network, parent, false)); } @Override public void onBindViewHolder(final ViewHolder holder, final int position) { if (position >= wifiNetworks.size()) { return; } final ScanResult result = wifiNetworks.get(position); holder.txtSsid.setText(result.SSID); holder.txtMcResponder.setText(String.valueOf(result.is80211mcResponder())); bind(holder.wifi_network_item, result, clickListener); } public void setClickListener(final OnClickListener clickListener) { this.clickListener = clickListener; } @Override public int getItemCount() { if (wifiNetworks == null) { return 0; } return wifiNetworks.size(); } void setWifiNetworks(final List<ScanResult> wifiNetworks) { if (wifiNetworks == null) { return; } final List<String> duplicates = new ArrayList<>(wifiNetworks.size()); final List<ScanResult> filteredResults = new ArrayList<>(wifiNetworks.size()); for (ScanResult result : wifiNetworks) { if (!duplicates.contains(result.SSID)) { duplicates.add(result.SSID); filteredResults.add(result); } } this.wifiNetworks = filteredResults; notifyDataSetChanged(); } private void bind(final View wifiNetworkItem, final ScanResult result, final OnClickListener listener) { wifiNetworkItem.setOnClickListener(view -> listener.onItemClicked(result)); } }