1 package com.example.lede2;
\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
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
27 public class ListActivity extends AppCompatActivity implements View.OnClickListener {
\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
36 protected String deviceIp;
\r
37 ArrayList<String> deviceList;
\r
40 Hashtable<String, String> nameAndValues;
\r
42 Spinner selectedDevice;
\r
46 //have to check wifi before delete
\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
57 tmp = ssh.getResultLines();
\r
58 while(tmp.size() == 0){
\r
60 tmp = ssh.getResultLines();
\r
63 catch (Exception e){
\r
64 e.printStackTrace();
\r
65 Log.d("cat device dat", "exception at cat device.dat");
\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
74 Set<String> nameAndValuesKeySet = nameAndValues.keySet();
\r
75 deviceList = new ArrayList<String>();
\r
76 for(String key: nameAndValuesKeySet){
\r
77 deviceList.add(key);
\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
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
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
100 selectedDevice.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
\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
106 mac.setText(scanner.next());
\r
107 ip.setText(scanner.next());
\r
110 public void onNothingSelected(AdapterView<?> adapterView) {
\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
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
140 //delete IoT device information in the router by sending command line to router
\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
148 adapter.notifyDataSetChanged();
\r
149 //delete checked mark in listview
\r
150 listview.clearChoices();
\r
153 else if (v == back && isNetworkAvailable()){
\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