package com.nutomic.syncthingandroid.util; import android.content.Context; import android.content.res.Resources; import android.support.annotation.NonNull; import android.support.v4.content.ContextCompat; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.ArrayAdapter; import android.widget.TextView; import com.nutomic.syncthingandroid.R; import com.nutomic.syncthingandroid.syncthing.RestApi; import java.util.HashMap; import java.util.Map; /** * Generates item views for device items. */ public class DevicesAdapter extends ArrayAdapter<RestApi.Device> implements RestApi.OnReceiveConnectionsListener { private Map<String, RestApi.Connection> mConnections = new HashMap<>(); public DevicesAdapter(Context context) { super(context, R.layout.item_device_list); } @Override @NonNull public View getView(int position, View convertView, @NonNull ViewGroup parent) { if (convertView == null) { LayoutInflater inflater = (LayoutInflater) getContext() .getSystemService(Context.LAYOUT_INFLATER_SERVICE); convertView = inflater.inflate(R.layout.item_device_list, parent, false); } TextView name = (TextView) convertView.findViewById(R.id.name); TextView status = (TextView) convertView.findViewById(R.id.status); TextView download = (TextView) convertView.findViewById(R.id.download); TextView upload = (TextView) convertView.findViewById(R.id.upload); String deviceId = getItem(position).deviceID; RestApi.Connection conn = mConnections.get(deviceId); name.setText(RestApi.getDeviceDisplayName(getItem(position))); Resources r = getContext().getResources(); if (conn != null && conn.connected) { if (conn.completion == 100) { status.setText(r.getString(R.string.device_up_to_date)); status.setTextColor(ContextCompat.getColor(getContext(), R.color.text_green)); } else { status.setText(r.getString(R.string.device_syncing, conn.completion)); status.setTextColor(ContextCompat.getColor(getContext(), R.color.text_blue)); } download.setText(RestApi.readableTransferRate(getContext(), conn.inBits)); upload.setText(RestApi.readableTransferRate(getContext(), conn.outBits)); } else { download.setText(RestApi.readableTransferRate(getContext(), 0)); upload.setText(RestApi.readableTransferRate(getContext(), 0)); status.setText(r.getString(R.string.device_disconnected)); status.setTextColor(ContextCompat.getColor(getContext(), R.color.text_red)); } return convertView; } /** * Requests new connection info for all devices visible in listView. */ public void updateConnections(RestApi api) { for (int i = 0; i < getCount(); i++) { api.getConnections(this); } } @Override public void onReceiveConnections(Map<String, RestApi.Connection> connections) { mConnections = connections; notifyDataSetChanged(); } }