The final version for lede-gui (the phone app for device registration)
[iot2.git] / others / lede-gui / src / main / java / com / example / lede2 / ListActivity.java
index 5de1fd272b580f346e28e8dcac9a58148ab90317..b6faf9f96322b711a97d29b4ec8b3ec9e53dd9df 100644 (file)
@@ -1,6 +1,9 @@
 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
@@ -11,57 +14,111 @@ import android.widget.ArrayAdapter;
 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
@@ -69,10 +126,13 @@ public class ListActivity extends AppCompatActivity implements View.OnClickListe
             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
@@ -89,19 +149,19 @@ public class ListActivity extends AppCompatActivity implements View.OnClickListe
             //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