| // Copyright 2015 The Vanadium Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style |
| // license that can be found in the LICENSE file. |
| |
| package io.v.discoverysample; |
| |
| import android.app.Activity; |
| import android.content.Context; |
| import android.database.DataSetObserver; |
| import android.view.LayoutInflater; |
| import android.view.View; |
| import android.view.ViewGroup; |
| import android.widget.Adapter; |
| import android.widget.BaseAdapter; |
| import android.widget.ListAdapter; |
| import android.widget.ListView; |
| import android.widget.TextView; |
| |
| import com.google.common.base.Joiner; |
| |
| import org.w3c.dom.Text; |
| |
| import java.util.ArrayList; |
| import java.util.List; |
| |
| import io.v.impl.google.lib.discovery.ScanHandler; |
| import io.v.x.ref.lib.discovery.Advertisement; |
| |
| /** |
| * Created by bjornick on 10/14/15. |
| */ |
| public class ScanHandlerAdapter extends BaseAdapter implements ScanHandler{ |
| |
| List<Advertisement> knownAdvertisements; |
| |
| List<DataSetObserver> observers; |
| |
| LayoutInflater inflater; |
| |
| Activity activity; |
| |
| ScanHandlerAdapter(Activity activity) { |
| knownAdvertisements = new ArrayList<>(); |
| observers = new ArrayList<>(); |
| this.activity = activity; |
| inflater = (LayoutInflater) activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE); |
| } |
| |
| @Override |
| public int getCount() { |
| return knownAdvertisements.size(); |
| } |
| |
| @Override |
| public Object getItem(int i) { |
| if (i < knownAdvertisements.size()) { |
| return knownAdvertisements.get(i); |
| } |
| return null; |
| } |
| |
| @Override |
| public long getItemId(int i) { |
| if (i < knownAdvertisements.size()) { |
| return knownAdvertisements.get(i).hashCode(); |
| } |
| return 0; |
| } |
| |
| @Override |
| public View getView(int i, View view, ViewGroup viewGroup) { |
| if (view == null) { |
| view = inflater.inflate(R.layout.item, null); |
| } |
| Advertisement adv = knownAdvertisements.get(i); |
| TextView displayName = (TextView)view.findViewById(R.id.display_name); |
| displayName.setText(adv.getService().getInstanceName()); |
| TextView interfaceName = (TextView)view.findViewById(R.id.interface_name); |
| interfaceName.setText(adv.getService().getInterfaceName()); |
| TextView addrs = (TextView)view.findViewById(R.id.addrs); |
| addrs.setText(Joiner.on(",").join(adv.getService().getAddrs())); |
| ListView attrs = (ListView)view.findViewById(R.id.attributes); |
| attrs.setAdapter(new AttrAdapter(inflater, adv.getService().getAttrs())); |
| return view; |
| } |
| |
| @Override |
| public int getItemViewType(int i) { |
| return 0; |
| } |
| |
| @Override |
| public int getViewTypeCount() { |
| return 1; |
| } |
| |
| @Override |
| public boolean isEmpty() { |
| return knownAdvertisements.isEmpty(); |
| } |
| |
| @Override |
| public void handleUpdate(Advertisement advertisement) { |
| if (!advertisement.getLost()) { |
| knownAdvertisements.add(advertisement); |
| } else { |
| advertisement.setLost(false); |
| knownAdvertisements.remove(advertisement); |
| } |
| activity.runOnUiThread(new Runnable() { |
| @Override |
| public void run() { |
| notifyDataSetChanged(); |
| } |
| }); |
| } |
| } |