-package com.example.lede2;
-
-import android.content.Context;
-import android.os.Bundle;
-import android.support.v7.app.AppCompatActivity;
-import android.view.View;
-import android.view.inputmethod.InputMethodManager;
-import android.widget.Button;
-import android.widget.EditText;
-import android.widget.TextView;
-
-public class DeleteDeviceActivity extends AppCompatActivity implements View.OnClickListener, View.OnFocusChangeListener {
-
- Button deleteButton;
- Button doneButton;
- EditText device_id;
- EditText device_type;
- EditText device_subtype;
- EditText device_address_subtype;
- TextView status;
- private SSH_MySQL ssh;//Connection object between Android & Host
-
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.activity_delete_device);
-
- deleteButton = (Button) findViewById(R.id.delete);
- doneButton = (Button) findViewById(R.id.done);
- device_id = (EditText)findViewById(R.id.device_id);
- device_type = (EditText)findViewById(R.id.device_type);
- device_subtype = (EditText)findViewById(R.id.device_subtype);
- device_address_subtype = (EditText)findViewById(R.id.device_address_subtype);
- status = (TextView)findViewById(R.id.textStatus);
-
- deleteButton.setOnClickListener(this);
- doneButton.setOnClickListener(this);
- device_id.setOnFocusChangeListener(this);
- device_type.setOnFocusChangeListener(this);
- device_subtype.setOnFocusChangeListener(this);
- device_address_subtype.setOnFocusChangeListener(this);
- ssh = new SSH_MySQL();
- }
-
- @Override
- public void onClick(View v) {
- if(v == deleteButton){
- // Remove the entry based on ID, type, and subtype
- ssh.execute(MainActivity.DEF_DELETE_CMD + " " +
- device_id.getText().toString() + " " +
- device_type.getText().toString() + " " +
- device_subtype.getText().toString() + ";" +
- // Also remove the device address
- MainActivity.DEF_DELETE_ADDRESS_CMD + " " +
- device_id.getText().toString() + " " +
- device_address_subtype.getText().toString()
- );
- device_id.setText("");
- device_type.setText("");
- device_subtype.setText("");
- device_address_subtype.setText("");
- status.setText("Successfully deleted " + device_id.getText());
- /*try {
- Thread.sleep(2000);
- } catch (Exception ex) {
- ex.printStackTrace();
- }
- status.setText("");*/
- }
- if(v == doneButton){
- finish();
- }
-
- }
-
- @Override
- public void onFocusChange(View view, boolean hasFocus) {
- InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
- if (hasFocus) {
- imm.toggleSoftInput(InputMethodManager.SHOW_FORCED, 0);
- } else {
- imm.hideSoftInputFromWindow(view.getWindowToken(), 0);
- }
- }
-}
+package com.example.lede2;\r
+\r
+import android.app.ProgressDialog;\r
+import android.content.Context;\r
+import android.os.Bundle;\r
+import android.support.v7.app.AppCompatActivity;\r
+import android.util.Log;\r
+import android.view.View;\r
+import android.view.inputmethod.InputMethodManager;\r
+import android.widget.AdapterView;\r
+import android.widget.ArrayAdapter;\r
+import android.widget.Button;\r
+import android.widget.EditText;\r
+import android.widget.Spinner;\r
+\r
+import java.io.File;\r
+import java.util.ArrayList;\r
+import java.util.Collections;\r
+import java.util.List;\r
+import java.util.Scanner;\r
+import java.util.Set;\r
+\r
+public class DeleteDeviceActivity extends AppCompatActivity implements View.OnClickListener, View.OnFocusChangeListener {\r
+\r
+ DatabaseObject databaseObject;\r
+ protected String database_information_filename;\r
+ protected String id_information_filename;\r
+ protected String local_id_information_filename;\r
+ Button deleteButton;\r
+ Button doneButton;\r
+ Spinner spinner1;\r
+ Spinner spinner2;\r
+ Spinner spinner3;\r
+ Context context;\r
+ private SSH_MySQL ssh;//Connection object between Android & Host\r
+\r
+ @Override\r
+ protected void onCreate(Bundle savedInstanceState) {\r
+ super.onCreate(savedInstanceState);\r
+ setContentView(R.layout.activity_delete_device);\r
+\r
+ database_information_filename = this.getString(R.string.device_param_config_filename);\r
+ id_information_filename = this.getString(R.string.device_id_config_filename);\r
+ local_id_information_filename = this.getString(R.string.device_id_config_filename);\r
+ deleteButton = (Button) findViewById(R.id.delDoneButton);\r
+ spinner1 = (Spinner) findViewById(R.id.delspinner1);\r
+ spinner2 = (Spinner) findViewById(R.id.delspinner2);\r
+ spinner3 = (Spinner) findViewById(R.id.delspinner3);\r
+ context = this;\r
+\r
+ //similar to install format. Sets the subtypes to appear based on type chosen\r
+ spinner1.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {\r
+ @Override\r
+ public void onItemSelected(AdapterView<?> adapterView, View view, int i, long l) {\r
+ String selectedType = spinner1.getSelectedItem().toString();\r
+ Set<String> keysForSubType = (databaseObject.getTypeObject(selectedType)).getKeySet();\r
+ ArrayList<String> subtypes = new ArrayList<String>();\r
+ for(String key: keysForSubType){\r
+ subtypes.add(key);\r
+ }\r
+ Collections.sort(subtypes);\r
+ ArrayAdapter subtypeAdapter = new ArrayAdapter(context, android.R.layout.simple_spinner_dropdown_item, subtypes);\r
+ subtypeAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);\r
+ spinner2.setAdapter(subtypeAdapter);\r
+ }\r
+\r
+\r
+ @Override\r
+ public void onNothingSelected(AdapterView<?> adapterView) {\r
+\r
+ }\r
+ });\r
+ //sets the instances of devices to appear based on selected subtype\r
+ spinner2.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {\r
+ @Override\r
+ public void onItemSelected(AdapterView<?> adapterView, View view, int i, long l) {\r
+ DatabaseSubtypeObject subtypeObject = getCurrentSubtypeObject();\r
+ List<String> deviceList = subtypeObject.getDevices();\r
+ Collections.sort(deviceList);\r
+ ArrayList<String> devices = new ArrayList<>();\r
+ for(String device: deviceList){\r
+ devices.add(device);\r
+ }\r
+ Collections.sort(devices);\r
+ ArrayAdapter deviceAdapter = new ArrayAdapter(context, android.R.layout.simple_spinner_dropdown_item, devices);\r
+ deviceAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);\r
+ spinner3.setAdapter(deviceAdapter);\r
+ }\r
+\r
+ @Override\r
+ public void onNothingSelected(AdapterView<?> adapterView) {\r
+\r
+ }\r
+ });\r
+\r
+\r
+\r
+\r
+ deleteButton.setOnClickListener(this);\r
+ ssh = new SSH_MySQL();\r
+ String databaseInformation = ConfigFileIO.readFromFile(\r
+ database_information_filename, this);\r
+ String idInformation = ConfigFileIO.readFromFile(local_id_information_filename, this);\r
+ databaseObject = ConfigFileIO.createDatabaseObject(context, idInformation );\r
+ Set<String> keysForType = databaseObject.getKeySet();\r
+ ArrayList<String> types = new ArrayList<String>();\r
+ for(String key: keysForType){\r
+ types.add(key);\r
+ }\r
+ Collections.sort(types);\r
+ ArrayAdapter typeAdapter = new ArrayAdapter(this, android.R.layout.simple_spinner_dropdown_item, types);\r
+ typeAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);\r
+ spinner1.setAdapter(typeAdapter);\r
+ }\r
+\r
+ @Override\r
+ public void onClick(View v) {\r
+ if(v == deleteButton){\r
+ DatabaseSubtypeObject subtypeObject = getSubtypeObject();\r
+ // Remove the entry based on ID, type, and subtype\r
+ String deleteCommand = MainActivity.DEF_DELETE_CMD + " " +\r
+ spinner3.getSelectedItem().toString() + " " +\r
+ spinner1.getSelectedItem().toString() + " " +\r
+ spinner2.getSelectedItem().toString() + ";";\r
+\r
+\r
+ // Also remove the device address. Some need multiple address deletions such as ihome\r
+ if(subtypeObject.getNumAddresses() > 1) {\r
+ for(int i = 1; i <= subtypeObject.getNumAddresses(); i++){\r
+ deleteCommand += MainActivity.DEF_DELETE_ADDRESS_CMD + " " +\r
+ spinner3.getSelectedItem().toString() + " " +\r
+ spinner2.getSelectedItem().toString() + "Add" + i + ";";\r
+ }\r
+ }\r
+ else{\r
+ deleteCommand += MainActivity.DEF_DELETE_ADDRESS_CMD + " " +\r
+ spinner3.getSelectedItem().toString() + " " +\r
+ spinner2.getSelectedItem().toString() + "Add;";\r
+\r
+ }\r
+\r
+ deleteCommand += context.getResources().getString(R.string.delete_zb_cmd) + " " +\r
+ spinner3.getSelectedItem().toString() + " " +\r
+ spinner2.getSelectedItem().toString() + "ZBAdd;";\r
+ //need to add delete from zigbee\r
+\r
+\r
+\r
+ ProgressDialog dialog = new ProgressDialog(this);\r
+ dialog.setMessage("Please Wait");\r
+ dialog.setCancelable(false);\r
+ dialog.setInverseBackgroundForced(false);\r
+ dialog.show();\r
+\r
+\r
+ System.out.println(deleteCommand);\r
+ ssh = new SSH_MySQL();\r
+ ssh.execute(deleteCommand);\r
+\r
+ deleteDeviceFromDatabase();\r
+ updateIoTDeviceAddress();\r
+ updateSetList();\r
+\r
+ dialog.dismiss();\r
+ finish();\r
+\r
+ }\r
+\r
+\r
+ }\r
+\r
+ @Override\r
+ public void onFocusChange(View view, boolean hasFocus) {\r
+ InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);\r
+ if (hasFocus) {\r
+ imm.toggleSoftInput(InputMethodManager.SHOW_FORCED, 0);\r
+ } else {\r
+ imm.hideSoftInputFromWindow(view.getWindowToken(), 0);\r
+ }\r
+ }\r
+ public DatabaseSubtypeObject getCurrentSubtypeObject(){\r
+ return databaseObject.getTypeObject(spinner1.\r
+ getSelectedItem().toString()).getSubtypeObject(spinner2.getSelectedItem().toString());\r
+ }\r
+\r
+ //rewrites the local config file to not contain the deleted instance\r
+ public void deleteDeviceFromDatabase(){\r
+ DatabaseSubtypeObject subtypeObject = getCurrentSubtypeObject();\r
+ String subtype = spinner2.getSelectedItem().toString();\r
+ String id = spinner3.getSelectedItem().toString();\r
+ subtypeObject.deleteDevice(id);\r
+ String deviceToDelete = subtype + " " + id;\r
+ //do it for the database file. also need\r
+ String databaseInformation = ConfigFileIO.readFromFile(local_id_information_filename, this );\r
+ Scanner scanner = new Scanner(databaseInformation);\r
+ ConfigFileIO.writeToNewFile(local_id_information_filename, "", this);\r
+ while (scanner.hasNextLine()){\r
+ String temp = scanner.nextLine();\r
+ if (!temp.equals(deviceToDelete)){\r
+ ConfigFileIO.writeToFile(local_id_information_filename, temp, this);\r
+ }\r
+ }\r
+ }\r
+\r
+\r
+ private DatabaseSubtypeObject getSubtypeObject(){\r
+ DatabaseSubtypeObject subtypeObject = databaseObject.getTypeObject(\r
+ spinner1.getSelectedItem().toString()).getSubtypeObject(\r
+ spinner2.getSelectedItem().toString());\r
+ return subtypeObject;\r
+ }\r
+\r
+ private void addSSHResultsToConfig(List<String> results, String filename) {\r
+ File dir = getFilesDir();\r
+ File file = new File(dir, filename);\r
+ file.delete();\r
+ for (int i = 0; i < results.size(); i++) {\r
+ ConfigFileIO.writeToFile(filename, results.get(i), this);\r
+ }\r
+ finish();\r
+ }\r
+\r
+ private void updateSetList(){\r
+ SSH_MySQL ssh = new SSH_MySQL();\r
+ String command = this.getString(R.string.updateSetList);\r
+ List<String> results = new ArrayList<>();\r
+ String setListFilename = this.getString(R.string.setListFilename);\r
+ try {\r
+ ssh.execute(command);\r
+ Thread.sleep(1000);//To execute asyntask in ssh object, we have to sleep main thread\r
+ results = ssh.getResultLines();\r
+ while(results.size() == 0){\r
+ Thread.sleep(500);\r
+ results = ssh.getResultLines();\r
+ }\r
+ System.out.println(results);\r
+ } catch (Exception e) {\r
+ Log.d("Sleep exception", "exception at getSetsAndRelations");\r
+ }\r
+// ssh = new SSH_MySQL();\r
+// command = this.getString(R.string.getSetList);\r
+// try {\r
+// ssh.execute(command);\r
+// Thread.sleep(1000);//To execute asyntask in ssh object, we have to sleep main thread\r
+// results = ssh.getResultLines();\r
+// while(results.size() == 0){\r
+// Thread.sleep(500);\r
+// results = ssh.getResultLines();\r
+// }\r
+// System.out.println(results);\r
+// } catch (Exception e) {\r
+// Log.d("Sleep exception", "exception at getSetsAndRelations");\r
+// }\r
+// addSSHResultsToConfig(results, setListFilename);\r
+\r
+ }\r
+ private void updateIoTDeviceAddress(){\r
+ SSH_MySQL ssh = new SSH_MySQL();\r
+ String command = this.getString(R.string.updateIoTDeviceAddress);\r
+ List<String> results = new ArrayList<>();\r
+ String iotDeviceAddressFilename = this.getString(R.string.updateIoTDeviceAddress);\r
+ try {\r
+ ssh.execute(command);\r
+ Thread.sleep(1000);//To execute asyntask in ssh object, we have to sleep main thread\r
+ results = ssh.getResultLines();\r
+ while(results.size() == 0){\r
+ Thread.sleep(500);\r
+ results = ssh.getResultLines();\r
+ }\r
+ System.out.println(results);\r
+ } catch (Exception e) {\r
+ Log.d("Sleep exception", "exception at getSetsAndRelations");\r
+ }\r
+// ssh = new SSH_MySQL();\r
+// command = this.getString(R.string.getIoTDeviceAddress);\r
+// try {\r
+// ssh.execute(command);\r
+// Thread.sleep(1000);//To execute asyntask in ssh object, we have to sleep main thread\r
+// results = ssh.getResultLines();\r
+// while(results.size() == 0){\r
+// Thread.sleep(500);\r
+// results = ssh.getResultLines();\r
+// }\r
+// System.out.println(results);\r
+// } catch (Exception e) {\r
+// Log.d("Sleep exception", "exception at getSetsAndRelations");\r
+// }\r
+// addSSHResultsToConfig(results, iotDeviceAddressFilename);\r
+ }\r
+\r
+}\r