package com.example.lede2;\r
\r
+import android.content.Context;\r
import android.content.Intent;\r
+import android.net.ConnectivityManager;\r
+import android.net.NetworkInfo;\r
import android.support.v7.app.AppCompatActivity;\r
import android.os.Bundle;\r
import android.util.Log;\r
import android.widget.Button;\r
import android.widget.EditText;\r
import android.widget.ListView;\r
+import android.widget.Spinner;\r
import android.widget.TextView;\r
import android.widget.Toast;\r
\r
+import java.util.ArrayList;\r
+import java.util.Hashtable;\r
import java.util.List;\r
+import java.util.Scanner;\r
+import java.util.Set;\r
\r
public class ListActivity extends AppCompatActivity implements View.OnClickListener {\r
\r
Button delete;//delete button in UI\r
- Button deviceInfo;//select button in UI\r
+ Button back;//select button in UI\r
ListView listview;//listview in UI\r
SSH ssh;//Connection object between Android & Router\r
List<String> tmp;//data structure which has IoT device information already registered on LEDE2\r
ArrayAdapter adapter;//adapter between tmp and listview\r
String device_info;\r
protected String deviceIp;\r
+ ArrayList<String> deviceList;\r
TextView ip;\r
TextView mac;\r
+ Hashtable<String, String> nameAndValues;\r
+ Scanner scanner;\r
+ Spinner selectedDevice;\r
\r
+\r
+\r
+ //have to check wifi before delete\r
@Override\r
protected void onCreate(Bundle savedInstanceState) {\r
super.onCreate(savedInstanceState);\r
setContentView(R.layout.activity_list);\r
-\r
- ssh = new SSH();\r
- try {\r
- tmp = ssh.execute("-ln").get();\r
- Thread.sleep(1000);//To execute asyntask in ssh object, we have to sleep main thread\r
- } catch (Exception e) {\r
+ nameAndValues = new Hashtable<>();\r
+ selectedDevice = (Spinner) findViewById(R.id.selectedName);\r
+ try{\r
+ ssh = new SSH();\r
+ ssh.execute("-ln");\r
+ Thread.sleep(1000);\r
+ tmp = ssh.getResultLines();\r
+ while(tmp.size() == 0){\r
+ Thread.sleep(500);\r
+ tmp = ssh.getResultLines();\r
+ }\r
+ }\r
+ catch (Exception e){\r
+ e.printStackTrace();\r
+ Log.d("cat device dat", "exception at cat device.dat");\r
}\r
+ tmp.remove(0);\r
+ for(int i = 0; i < tmp.size(); i++){\r
+ Scanner scanner = new Scanner(tmp.get(i));\r
+ if(scanner.hasNext()){\r
+ nameAndValues.put(scanner.next(), tmp.get(i));\r
+ }\r
+ }\r
+ Set<String> nameAndValuesKeySet = nameAndValues.keySet();\r
+ deviceList = new ArrayList<String>();\r
+ for(String key: nameAndValuesKeySet){\r
+ deviceList.add(key);\r
+ }\r
+\r
\r
delete = (Button) findViewById(R.id.delete);\r
- deviceInfo = (Button) findViewById(R.id.deviceInfo);\r
+ back = (Button) findViewById(R.id.list_back);\r
listview = (ListView) findViewById(R.id.listView1);\r
ip = (TextView) findViewById(R.id.txt_ip);\r
mac = (TextView) findViewById(R.id.txt_mac);\r
-\r
- adapter = new ArrayAdapter(this, android.R.layout.simple_list_item_multiple_choice, tmp);//register tmp array to adapter\r
+ adapter = new ArrayAdapter(this, android.R.layout.simple_list_item_multiple_choice, deviceList);//register tmp array to adapter\r
\r
delete.setOnClickListener(this);\r
- deviceInfo.setOnClickListener(this);\r
+ back.setOnClickListener(this);\r
listview.setAdapter(adapter);\r
listview.setOnItemClickListener(new AdapterView.OnItemClickListener() {\r
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {\r
device_info = listview.getItemAtPosition(position).toString();\r
}});\r
+\r
+ ArrayAdapter typeAdapter = new ArrayAdapter(this, android.R.layout.simple_spinner_dropdown_item, deviceList);\r
+ typeAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);\r
+ selectedDevice.setAdapter(typeAdapter);\r
+\r
+ selectedDevice.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {\r
+ @Override\r
+ public void onItemSelected(AdapterView<?> adapterView, View view, int i, long l) {\r
+ String nameIPMac = nameAndValues.get(selectedDevice.getSelectedItem().toString() );\r
+ scanner = new Scanner(nameIPMac);\r
+ scanner.next();\r
+ mac.setText(scanner.next());\r
+ ip.setText(scanner.next());\r
+ }\r
+ @Override\r
+ public void onNothingSelected(AdapterView<?> adapterView) {\r
+ }\r
+ });\r
+\r
+\r
}\r
\r
@Override\r
public void onClick(View v) {\r
- if (v == delete) {\r
- //SparseBooleanArray's data is Ture or False\r
+ System.out.println("device info: " + device_info);\r
+ if (v == delete && isNetworkAvailable()) {\r
+ //SparseBooleanArray's data is True or False\r
SparseBooleanArray checkedItems = listview.getCheckedItemPositions();//to check which devices are checked in listview(check -> true, no check -> false)\r
int count = adapter.getCount();//number of items in listview\r
String command = "-dn "; //after, +'name '\r
for (int i = count - 1; i >= 0; i--) {//scan from back\r
//i : index of IoT device which will be removed in tmp array\r
if (checkedItems.get(i)) {//if check\r
- String rmName = tmp.get(i).toString();//save the name of checked IoT device\r
- command += rmName + " ";//complete command\r
+ String selectedValue = (String)listview.getItemAtPosition(i);\r
+ scanner = new Scanner(selectedValue);\r
+ String name = scanner.next();\r
+ command += name + " ";//complete command\r
//remove this information on the listview\r
- tmp.remove(i);\r
+ nameAndValues.remove(name);\r
+ deviceList.remove(name);\r
//deviceIp = checkedItems.\r
}\r
}\r
//delete checked mark in listview\r
listview.clearChoices();\r
\r
- } else if (v == deviceInfo) {\r
- String[] devInfo = device_info.split("\\s+");\r
- ip.setText(devInfo[1]);\r
- mac.setText(devInfo[2]);\r
- Toast t = Toast.makeText(this, device_info, Toast.LENGTH_SHORT);\r
- t.show();\r
- /*} else if (v == selectAll) {\r
- int count;\r
- count = adapter.getCount();\r
-\r
- for (int i = 0; i < count; i++) {\r
- listview.setItemChecked(i, true);\r
- }*/\r
}\r
+ else if (v == back && isNetworkAvailable()){\r
+ finish();\r
+ }\r
+\r
}\r
+\r
+ boolean isNetworkAvailable() {//check whether wifi connection is or not\r
+ Context context = getApplicationContext();\r
+ ConnectivityManager cm = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);\r
+ NetworkInfo activeNetwork = cm.getActiveNetworkInfo();\r
+ boolean isConnected = activeNetwork != null && activeNetwork.isConnectedOrConnecting();\r
+ return isConnected;\r
+ }\r
+\r
}\r