blob: 9036a9707c5ef4bf7dc236fc0885e89423700ca7 [file] [log] [blame]
// 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.BaseAdapter;
import android.widget.ListView;
import android.widget.TextView;
import com.google.common.base.Joiner;
import java.util.ArrayList;
import java.util.List;
import io.v.v23.discovery.Service;
import io.v.v23.discovery.Update;
import io.v.v23.rpc.Callback;
import io.v.v23.verror.VException;
public class ScanHandlerAdapter extends BaseAdapter implements Callback<Update> {
List<Service> 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);
}
Service service = knownAdvertisements.get(i);
TextView displayName = (TextView) view.findViewById(R.id.display_name);
displayName.setText(service.getInstanceName());
TextView interfaceName = (TextView) view.findViewById(R.id.interface_name);
interfaceName.setText(service.getInterfaceName());
TextView addrs = (TextView) view.findViewById(R.id.addrs);
addrs.setText(Joiner.on(",").join(service.getAddrs()));
ListView attrs = (ListView) view.findViewById(R.id.attributes);
attrs.setAdapter(new AttrAdapter(inflater, service.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 onSuccess(Update update) { // executed on UI thread
if (update instanceof Update.Found) {
Update.Found found = (Update.Found) update;
knownAdvertisements.add(found.getElem().getService());
} else {
Update.Lost lost = (Update.Lost) update;
for (int i = 0; i < knownAdvertisements.size(); i++) {
if (lost.getElem().getInstanceId().equals(
knownAdvertisements.get(i).getInstanceId())) {
knownAdvertisements.remove(i);
break;
}
}
}
notifyDataSetChanged();
}
@Override
public void onFailure(VException e) {} // never invoked.
}