The final version for lede-gui (the phone app for device registration)
[iot2.git] / others / lede-gui / src / main / java / com / example / lede2 / DeleteDeviceActivity.java
index 30368058ed602f11d3832190983b41c54e63f2b5..3f4a7961cb14d3223756e219a6e180351dbdcf92 100644 (file)
-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