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
1 package com.example.lede2;\r
2 \r
3 import android.content.Context;\r
4 import android.content.Intent;\r
5 import android.net.ConnectivityManager;\r
6 import android.net.NetworkInfo;\r
7 import android.support.v7.app.AppCompatActivity;\r
8 import android.os.Bundle;\r
9 import android.util.Log;\r
10 import android.util.SparseBooleanArray;\r
11 import android.view.View;\r
12 import android.widget.AdapterView;\r
13 import android.widget.ArrayAdapter;\r
14 import android.widget.Button;\r
15 import android.widget.EditText;\r
16 import android.widget.ListView;\r
17 import android.widget.Spinner;\r
18 import android.widget.TextView;\r
19 import android.widget.Toast;\r
20 \r
21 import java.util.ArrayList;\r
22 import java.util.Hashtable;\r
23 import java.util.List;\r
24 import java.util.Scanner;\r
25 import java.util.Set;\r
26 \r
27 public class ListActivity extends AppCompatActivity implements View.OnClickListener {\r
28 \r
29     Button delete;//delete button in UI\r
30     Button back;//select button in UI\r
31     ListView listview;//listview in UI\r
32     SSH ssh;//Connection object between Android & Router\r
33     List<String> tmp;//data structure which has IoT device information already registered on LEDE2\r
34     ArrayAdapter adapter;//adapter between tmp and listview\r
35     String device_info;\r
36     protected String deviceIp;\r
37     ArrayList<String> deviceList;\r
38     TextView ip;\r
39     TextView mac;\r
40     Hashtable<String, String> nameAndValues;\r
41     Scanner scanner;\r
42     Spinner selectedDevice;\r
43 \r
44 \r
45 \r
46     //have to check wifi before delete\r
47     @Override\r
48     protected void onCreate(Bundle savedInstanceState) {\r
49         super.onCreate(savedInstanceState);\r
50         setContentView(R.layout.activity_list);\r
51         nameAndValues = new Hashtable<>();\r
52         selectedDevice = (Spinner) findViewById(R.id.selectedName);\r
53         try{\r
54             ssh = new SSH();\r
55             ssh.execute("-ln");\r
56             Thread.sleep(1000);\r
57             tmp = ssh.getResultLines();\r
58             while(tmp.size() == 0){\r
59                 Thread.sleep(500);\r
60                 tmp = ssh.getResultLines();\r
61             }\r
62         }\r
63         catch (Exception e){\r
64             e.printStackTrace();\r
65             Log.d("cat device dat", "exception at cat device.dat");\r
66         }\r
67         tmp.remove(0);\r
68         for(int i = 0; i < tmp.size(); i++){\r
69             Scanner scanner = new Scanner(tmp.get(i));\r
70             if(scanner.hasNext()){\r
71                 nameAndValues.put(scanner.next(), tmp.get(i));\r
72             }\r
73         }\r
74         Set<String> nameAndValuesKeySet = nameAndValues.keySet();\r
75          deviceList  = new ArrayList<String>();\r
76         for(String key: nameAndValuesKeySet){\r
77             deviceList.add(key);\r
78         }\r
79 \r
80 \r
81         delete = (Button) findViewById(R.id.delete);\r
82         back = (Button) findViewById(R.id.list_back);\r
83         listview = (ListView) findViewById(R.id.listView1);\r
84         ip = (TextView) findViewById(R.id.txt_ip);\r
85         mac = (TextView) findViewById(R.id.txt_mac);\r
86         adapter = new ArrayAdapter(this, android.R.layout.simple_list_item_multiple_choice, deviceList);//register tmp array to adapter\r
87 \r
88         delete.setOnClickListener(this);\r
89         back.setOnClickListener(this);\r
90         listview.setAdapter(adapter);\r
91         listview.setOnItemClickListener(new AdapterView.OnItemClickListener() {\r
92             public void onItemClick(AdapterView<?> parent, View view, int position, long id) {\r
93                 device_info = listview.getItemAtPosition(position).toString();\r
94         }});\r
95 \r
96         ArrayAdapter typeAdapter = new ArrayAdapter(this, android.R.layout.simple_spinner_dropdown_item, deviceList);\r
97         typeAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);\r
98         selectedDevice.setAdapter(typeAdapter);\r
99 \r
100         selectedDevice.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {\r
101             @Override\r
102             public void onItemSelected(AdapterView<?> adapterView, View view, int i, long l) {\r
103                 String nameIPMac = nameAndValues.get(selectedDevice.getSelectedItem().toString()    );\r
104                 scanner = new Scanner(nameIPMac);\r
105                 scanner.next();\r
106                 mac.setText(scanner.next());\r
107                 ip.setText(scanner.next());\r
108             }\r
109             @Override\r
110             public void onNothingSelected(AdapterView<?> adapterView) {\r
111             }\r
112         });\r
113 \r
114 \r
115     }\r
116 \r
117     @Override\r
118     public void onClick(View v) {\r
119         System.out.println("device info: " + device_info);\r
120         if (v == delete && isNetworkAvailable()) {\r
121             //SparseBooleanArray's data is True or False\r
122             SparseBooleanArray checkedItems = listview.getCheckedItemPositions();//to check which devices are checked in listview(check -> true, no check -> false)\r
123             int count = adapter.getCount();//number of items in listview\r
124             String command = "-dn "; //after, +'name '\r
125 \r
126             for (int i = count - 1; i >= 0; i--) {//scan from back\r
127                 //i : index of IoT device which will be removed in tmp array\r
128                 if (checkedItems.get(i)) {//if check\r
129                     String selectedValue = (String)listview.getItemAtPosition(i);\r
130                     scanner = new Scanner(selectedValue);\r
131                     String name = scanner.next();\r
132                     command += name + " ";//complete command\r
133                     //remove this information on the listview\r
134                     nameAndValues.remove(name);\r
135                     deviceList.remove(name);\r
136                     //deviceIp = checkedItems.\r
137                 }\r
138             }\r
139             try {\r
140                 //delete IoT device information in the router by sending command line to router\r
141                 ssh = new SSH();\r
142                 ssh.execute(command);\r
143                 Thread.sleep(1000);//To execute asyntask in ssh object, we have to sleep main thread\r
144             } catch (Exception e) {\r
145                 Log.d("SLEEP EXCEPTION", "SLEEP EXCEPTION occurs in onClick method of ListActivity");\r
146             }\r
147             //update\r
148             adapter.notifyDataSetChanged();\r
149             //delete checked mark in listview\r
150             listview.clearChoices();\r
151 \r
152         }\r
153         else if (v == back && isNetworkAvailable()){\r
154             finish();\r
155         }\r
156 \r
157     }\r
158 \r
159     boolean isNetworkAvailable() {//check whether wifi connection is or not\r
160         Context context = getApplicationContext();\r
161         ConnectivityManager cm = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);\r
162         NetworkInfo activeNetwork = cm.getActiveNetworkInfo();\r
163         boolean isConnected = activeNetwork != null && activeNetwork.isConnectedOrConnecting();\r
164         return isConnected;\r
165     }\r
166 \r
167 }\r