/* FPLUGConnectFragment.java Copyright (c) 2015 NTT DOCOMO,INC. Released under the MIT license http://opensource.org/licenses/mit-license.php */ package org.deviceconnect.android.deviceplugin.fplug.setting.fragment; import android.bluetooth.BluetoothDevice; import android.content.Context; import android.graphics.Color; import android.os.Bundle; import android.support.v4.app.Fragment; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.AdapterView; import android.widget.ArrayAdapter; import android.widget.ListView; import android.widget.TextView; import android.widget.Toast; import org.deviceconnect.android.deviceplugin.fplug.FPLUGApplication; import org.deviceconnect.android.deviceplugin.fplug.R; import org.deviceconnect.android.deviceplugin.fplug.fplug.FPLUGController; import org.deviceconnect.android.deviceplugin.fplug.fplug.FPLUGDiscover; import org.deviceconnect.android.deviceplugin.fplug.setting.SettingActivity; import java.util.List; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; /** * Fragment for connect to F-PLUG. * * @author NTT DOCOMO, INC. */ public class FPLUGConnectFragment extends Fragment { private ListAdapter mAdapter; @Override public View onCreateView(final LayoutInflater inflater, final ViewGroup container, final Bundle savedInstanceState) { mAdapter = new ListAdapter(getActivity(), -1); final View root = inflater.inflate(R.layout.connect_fplug, container, false); root.findViewById(R.id.search).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { discoverFPlug(root); } }); setupInitListener((ListView) root.findViewById(R.id.pluglist)); return root; } @Override public void onDestroy() { super.onDestroy(); ((FPLUGApplication) getActivity().getApplication()).removeConnectionListener(mConnectionListener); } private void setupInitListener(ListView listview) { listview.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { final FPlugItem fplug = (FPlugItem) parent.getItemAtPosition(position); if (fplug.isConnected) { ((SettingActivity) getActivity()).showControllerPage(fplug.mDevice.getAddress()); } else { Toast.makeText(getActivity(), getString(R.string.setting_connect_not_connected), Toast.LENGTH_LONG).show(); } } }); } private void discoverFPlug(final View root) { mAdapter.clear(); mAdapter.notifyDataSetChanged(); ExecutorService s = Executors.newSingleThreadExecutor(); s.submit(new Runnable() { @Override public void run() { final List<BluetoothDevice> fplugs = FPLUGDiscover.getAll(); getActivity().runOnUiThread(new Runnable() { @Override public void run() { if (fplugs == null || fplugs.size() == 0) { Toast.makeText(getActivity(), getString(R.string.setting_connect_not_found), Toast.LENGTH_SHORT).show(); } else { ListView listview = (ListView) root.findViewById(R.id.pluglist); for (BluetoothDevice fplug : fplugs) { FPlugItem item = new FPlugItem(); item.mDevice = fplug; item.isConnected = false; mAdapter.add(item); } listview.setAdapter(mAdapter); for (BluetoothDevice fplug : fplugs) { ((FPLUGApplication) getActivity().getApplication()).connectFPlug(fplug, mConnectionListener); } } } }); } }); } private class ListAdapter extends ArrayAdapter<FPlugItem> { public ListAdapter(Context context, int textViewId) { super(context, textViewId); } public View getView(final int position, View convertView, ViewGroup parent) { if (convertView == null) { LayoutInflater inflater = (LayoutInflater) getActivity().getSystemService(Context.LAYOUT_INFLATER_SERVICE); convertView = inflater.inflate(R.layout.text, null); } FPlugItem item = getItem(position); String text = getString(R.string.setting_connect_fplug_list, item.mDevice.getAddress()); TextView textView = (TextView) convertView.findViewById(R.id.text); textView.setText(text); if (item.isConnected) { textView.setTextColor(Color.BLUE); } else { textView.setTextColor(Color.RED); } convertView.setTag(item); return convertView; } } private class FPlugItem { BluetoothDevice mDevice; boolean isConnected = false; } private FPLUGController.FPLUGConnectionListener mConnectionListener = new FPLUGController.FPLUGConnectionListener() { @Override public void onConnected(String address) { updateStatus(address, true); } @Override public void onDisconnected(String address) { updateStatus(address, false); } @Override public void onConnectionError(String address, String message) { updateStatus(address, false); } private void updateStatus(String address, boolean isConnected) { for (int i = 0; i < mAdapter.getCount(); i++) { FPlugItem item = mAdapter.getItem(i); if (item.mDevice.getAddress().equals(address)) { item.isConnected = isConnected; } } getActivity().runOnUiThread(new Runnable() { @Override public void run() { mAdapter.notifyDataSetChanged(); } }); } }; }