1 package com.example.lede2;
\r
3 import android.app.ProgressDialog;
\r
4 import android.content.Context;
\r
5 import android.os.Bundle;
\r
6 import android.support.v7.app.AppCompatActivity;
\r
7 import android.util.Log;
\r
8 import android.view.View;
\r
9 import android.view.inputmethod.InputMethodManager;
\r
10 import android.widget.AdapterView;
\r
11 import android.widget.ArrayAdapter;
\r
12 import android.widget.Button;
\r
13 import android.widget.EditText;
\r
14 import android.widget.Spinner;
\r
16 import java.io.File;
\r
17 import java.util.ArrayList;
\r
18 import java.util.Collections;
\r
19 import java.util.List;
\r
20 import java.util.Scanner;
\r
21 import java.util.Set;
\r
23 public class DeleteDeviceActivity extends AppCompatActivity implements View.OnClickListener, View.OnFocusChangeListener {
\r
25 DatabaseObject databaseObject;
\r
26 protected String database_information_filename;
\r
27 protected String id_information_filename;
\r
28 protected String local_id_information_filename;
\r
29 Button deleteButton;
\r
35 private SSH_MySQL ssh;//Connection object between Android & Host
\r
38 protected void onCreate(Bundle savedInstanceState) {
\r
39 super.onCreate(savedInstanceState);
\r
40 setContentView(R.layout.activity_delete_device);
\r
42 database_information_filename = this.getString(R.string.device_param_config_filename);
\r
43 id_information_filename = this.getString(R.string.device_id_config_filename);
\r
44 local_id_information_filename = this.getString(R.string.device_id_config_filename);
\r
45 deleteButton = (Button) findViewById(R.id.delDoneButton);
\r
46 spinner1 = (Spinner) findViewById(R.id.delspinner1);
\r
47 spinner2 = (Spinner) findViewById(R.id.delspinner2);
\r
48 spinner3 = (Spinner) findViewById(R.id.delspinner3);
\r
51 //similar to install format. Sets the subtypes to appear based on type chosen
\r
52 spinner1.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
\r
54 public void onItemSelected(AdapterView<?> adapterView, View view, int i, long l) {
\r
55 String selectedType = spinner1.getSelectedItem().toString();
\r
56 Set<String> keysForSubType = (databaseObject.getTypeObject(selectedType)).getKeySet();
\r
57 ArrayList<String> subtypes = new ArrayList<String>();
\r
58 for(String key: keysForSubType){
\r
61 Collections.sort(subtypes);
\r
62 ArrayAdapter subtypeAdapter = new ArrayAdapter(context, android.R.layout.simple_spinner_dropdown_item, subtypes);
\r
63 subtypeAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
\r
64 spinner2.setAdapter(subtypeAdapter);
\r
69 public void onNothingSelected(AdapterView<?> adapterView) {
\r
73 //sets the instances of devices to appear based on selected subtype
\r
74 spinner2.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
\r
76 public void onItemSelected(AdapterView<?> adapterView, View view, int i, long l) {
\r
77 DatabaseSubtypeObject subtypeObject = getCurrentSubtypeObject();
\r
78 List<String> deviceList = subtypeObject.getDevices();
\r
79 Collections.sort(deviceList);
\r
80 ArrayList<String> devices = new ArrayList<>();
\r
81 for(String device: deviceList){
\r
82 devices.add(device);
\r
84 Collections.sort(devices);
\r
85 ArrayAdapter deviceAdapter = new ArrayAdapter(context, android.R.layout.simple_spinner_dropdown_item, devices);
\r
86 deviceAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
\r
87 spinner3.setAdapter(deviceAdapter);
\r
91 public void onNothingSelected(AdapterView<?> adapterView) {
\r
99 deleteButton.setOnClickListener(this);
\r
100 ssh = new SSH_MySQL();
\r
101 String databaseInformation = ConfigFileIO.readFromFile(
\r
102 database_information_filename, this);
\r
103 String idInformation = ConfigFileIO.readFromFile(local_id_information_filename, this);
\r
104 databaseObject = ConfigFileIO.createDatabaseObject(context, idInformation );
\r
105 Set<String> keysForType = databaseObject.getKeySet();
\r
106 ArrayList<String> types = new ArrayList<String>();
\r
107 for(String key: keysForType){
\r
110 Collections.sort(types);
\r
111 ArrayAdapter typeAdapter = new ArrayAdapter(this, android.R.layout.simple_spinner_dropdown_item, types);
\r
112 typeAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
\r
113 spinner1.setAdapter(typeAdapter);
\r
117 public void onClick(View v) {
\r
118 if(v == deleteButton){
\r
119 DatabaseSubtypeObject subtypeObject = getSubtypeObject();
\r
120 // Remove the entry based on ID, type, and subtype
\r
121 String deleteCommand = MainActivity.DEF_DELETE_CMD + " " +
\r
122 spinner3.getSelectedItem().toString() + " " +
\r
123 spinner1.getSelectedItem().toString() + " " +
\r
124 spinner2.getSelectedItem().toString() + ";";
\r
127 // Also remove the device address. Some need multiple address deletions such as ihome
\r
128 if(subtypeObject.getNumAddresses() > 1) {
\r
129 for(int i = 1; i <= subtypeObject.getNumAddresses(); i++){
\r
130 deleteCommand += MainActivity.DEF_DELETE_ADDRESS_CMD + " " +
\r
131 spinner3.getSelectedItem().toString() + " " +
\r
132 spinner2.getSelectedItem().toString() + "Add" + i + ";";
\r
136 deleteCommand += MainActivity.DEF_DELETE_ADDRESS_CMD + " " +
\r
137 spinner3.getSelectedItem().toString() + " " +
\r
138 spinner2.getSelectedItem().toString() + "Add;";
\r
142 deleteCommand += context.getResources().getString(R.string.delete_zb_cmd) + " " +
\r
143 spinner3.getSelectedItem().toString() + " " +
\r
144 spinner2.getSelectedItem().toString() + "ZBAdd;";
\r
145 //need to add delete from zigbee
\r
149 ProgressDialog dialog = new ProgressDialog(this);
\r
150 dialog.setMessage("Please Wait");
\r
151 dialog.setCancelable(false);
\r
152 dialog.setInverseBackgroundForced(false);
\r
156 System.out.println(deleteCommand);
\r
157 ssh = new SSH_MySQL();
\r
158 ssh.execute(deleteCommand);
\r
160 deleteDeviceFromDatabase();
\r
161 updateIoTDeviceAddress();
\r
173 public void onFocusChange(View view, boolean hasFocus) {
\r
174 InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
\r
176 imm.toggleSoftInput(InputMethodManager.SHOW_FORCED, 0);
\r
178 imm.hideSoftInputFromWindow(view.getWindowToken(), 0);
\r
181 public DatabaseSubtypeObject getCurrentSubtypeObject(){
\r
182 return databaseObject.getTypeObject(spinner1.
\r
183 getSelectedItem().toString()).getSubtypeObject(spinner2.getSelectedItem().toString());
\r
186 //rewrites the local config file to not contain the deleted instance
\r
187 public void deleteDeviceFromDatabase(){
\r
188 DatabaseSubtypeObject subtypeObject = getCurrentSubtypeObject();
\r
189 String subtype = spinner2.getSelectedItem().toString();
\r
190 String id = spinner3.getSelectedItem().toString();
\r
191 subtypeObject.deleteDevice(id);
\r
192 String deviceToDelete = subtype + " " + id;
\r
193 //do it for the database file. also need
\r
194 String databaseInformation = ConfigFileIO.readFromFile(local_id_information_filename, this );
\r
195 Scanner scanner = new Scanner(databaseInformation);
\r
196 ConfigFileIO.writeToNewFile(local_id_information_filename, "", this);
\r
197 while (scanner.hasNextLine()){
\r
198 String temp = scanner.nextLine();
\r
199 if (!temp.equals(deviceToDelete)){
\r
200 ConfigFileIO.writeToFile(local_id_information_filename, temp, this);
\r
206 private DatabaseSubtypeObject getSubtypeObject(){
\r
207 DatabaseSubtypeObject subtypeObject = databaseObject.getTypeObject(
\r
208 spinner1.getSelectedItem().toString()).getSubtypeObject(
\r
209 spinner2.getSelectedItem().toString());
\r
210 return subtypeObject;
\r
213 private void addSSHResultsToConfig(List<String> results, String filename) {
\r
214 File dir = getFilesDir();
\r
215 File file = new File(dir, filename);
\r
217 for (int i = 0; i < results.size(); i++) {
\r
218 ConfigFileIO.writeToFile(filename, results.get(i), this);
\r
223 private void updateSetList(){
\r
224 SSH_MySQL ssh = new SSH_MySQL();
\r
225 String command = this.getString(R.string.updateSetList);
\r
226 List<String> results = new ArrayList<>();
\r
227 String setListFilename = this.getString(R.string.setListFilename);
\r
229 ssh.execute(command);
\r
230 Thread.sleep(1000);//To execute asyntask in ssh object, we have to sleep main thread
\r
231 results = ssh.getResultLines();
\r
232 while(results.size() == 0){
\r
234 results = ssh.getResultLines();
\r
236 System.out.println(results);
\r
237 } catch (Exception e) {
\r
238 Log.d("Sleep exception", "exception at getSetsAndRelations");
\r
240 // ssh = new SSH_MySQL();
\r
241 // command = this.getString(R.string.getSetList);
\r
243 // ssh.execute(command);
\r
244 // Thread.sleep(1000);//To execute asyntask in ssh object, we have to sleep main thread
\r
245 // results = ssh.getResultLines();
\r
246 // while(results.size() == 0){
\r
247 // Thread.sleep(500);
\r
248 // results = ssh.getResultLines();
\r
250 // System.out.println(results);
\r
251 // } catch (Exception e) {
\r
252 // Log.d("Sleep exception", "exception at getSetsAndRelations");
\r
254 // addSSHResultsToConfig(results, setListFilename);
\r
257 private void updateIoTDeviceAddress(){
\r
258 SSH_MySQL ssh = new SSH_MySQL();
\r
259 String command = this.getString(R.string.updateIoTDeviceAddress);
\r
260 List<String> results = new ArrayList<>();
\r
261 String iotDeviceAddressFilename = this.getString(R.string.updateIoTDeviceAddress);
\r
263 ssh.execute(command);
\r
264 Thread.sleep(1000);//To execute asyntask in ssh object, we have to sleep main thread
\r
265 results = ssh.getResultLines();
\r
266 while(results.size() == 0){
\r
268 results = ssh.getResultLines();
\r
270 System.out.println(results);
\r
271 } catch (Exception e) {
\r
272 Log.d("Sleep exception", "exception at getSetsAndRelations");
\r
274 // ssh = new SSH_MySQL();
\r
275 // command = this.getString(R.string.getIoTDeviceAddress);
\r
277 // ssh.execute(command);
\r
278 // Thread.sleep(1000);//To execute asyntask in ssh object, we have to sleep main thread
\r
279 // results = ssh.getResultLines();
\r
280 // while(results.size() == 0){
\r
281 // Thread.sleep(500);
\r
282 // results = ssh.getResultLines();
\r
284 // System.out.println(results);
\r
285 // } catch (Exception e) {
\r
286 // Log.d("Sleep exception", "exception at getSetsAndRelations");
\r
288 // addSSHResultsToConfig(results, iotDeviceAddressFilename);
\r