x1ongzhu 1 год назад
Родитель
Сommit
c1a1d3a2ec
2 измененных файлов с 71 добавлено и 36 удалено
  1. 2 1
      app/build.gradle
  2. 69 35
      app/src/main/java/com/example/modifier/ModifierService.java

+ 2 - 1
app/build.gradle

@@ -5,7 +5,7 @@ plugins {
 android {
 android {
     namespace 'com.example.modifier'
     namespace 'com.example.modifier'
     compileSdk 34
     compileSdk 34
-
+    useLibrary 'org.apache.http.legacy'
     buildFeatures {
     buildFeatures {
         buildConfig = true
         buildConfig = true
     }
     }
@@ -67,4 +67,5 @@ dependencies {
     implementation(libs.socket.io.client) {
     implementation(libs.socket.io.client) {
         exclude group: 'org.json', module: 'json'
         exclude group: 'org.json', module: 'json'
     }
     }
+    implementation 'com.android.volley:volley:1.2.1'
 }
 }

+ 69 - 35
app/src/main/java/com/example/modifier/ModifierService.java

@@ -13,13 +13,17 @@ import android.view.WindowManager;
 import android.view.accessibility.AccessibilityEvent;
 import android.view.accessibility.AccessibilityEvent;
 import android.view.accessibility.AccessibilityNodeInfo;
 import android.view.accessibility.AccessibilityNodeInfo;
 import android.widget.FrameLayout;
 import android.widget.FrameLayout;
-import android.widget.ImageButton;
 
 
 import androidx.appcompat.view.ContextThemeWrapper;
 import androidx.appcompat.view.ContextThemeWrapper;
 
 
+import com.android.volley.Request;
+import com.android.volley.RequestQueue;
+import com.android.volley.toolbox.JsonObjectRequest;
+import com.android.volley.toolbox.StringRequest;
+import com.android.volley.toolbox.Volley;
 import com.example.modifier.databinding.FloatingWindowBinding;
 import com.example.modifier.databinding.FloatingWindowBinding;
-import com.google.gson.Gson;
 
 
+import org.json.JSONArray;
 import org.json.JSONException;
 import org.json.JSONException;
 import org.json.JSONObject;
 import org.json.JSONObject;
 
 
@@ -43,16 +47,15 @@ public class ModifierService extends android.accessibilityservice.AccessibilityS
     private ScheduledExecutorService mExecutor = new ScheduledThreadPoolExecutor(8);
     private ScheduledExecutorService mExecutor = new ScheduledThreadPoolExecutor(8);
 
 
     private Socket mSocket;
     private Socket mSocket;
-
+    private IO.Options mSocketOpts = new IO.Options();
     private boolean canSend = false;
     private boolean canSend = false;
     private FloatingWindowBinding binding;
     private FloatingWindowBinding binding;
 
 
     public ModifierService() {
     public ModifierService() {
         Log.i(TAG, "Creating ModifierService");
         Log.i(TAG, "Creating ModifierService");
         try {
         try {
-            IO.Options opts = new IO.Options();
-            opts.query = "model=" + Build.MANUFACTURER + " " + Build.MODEL + "&name=" + Build.DEVICE + "&id=" + Utils.getUniqueID();
-            mSocket = IO.socket("http://192.168.6.215:3000", opts);
+            mSocketOpts.query = "model=" + Build.MANUFACTURER + " " + Build.MODEL + "&name=" + Build.DEVICE + "&id=" + Utils.getUniqueID() + "&canSend=" + canSend;
+            mSocket = IO.socket("http://192.168.6.215:3000", mSocketOpts);
             mSocket.on("message", this);
             mSocket.on("message", this);
             mSocket.on(Socket.EVENT_CONNECT, args -> {
             mSocket.on(Socket.EVENT_CONNECT, args -> {
                 Log.i(TAG, "Connected to server");
                 Log.i(TAG, "Connected to server");
@@ -76,6 +79,7 @@ public class ModifierService extends android.accessibilityservice.AccessibilityS
     public void onCreate() {
     public void onCreate() {
         super.onCreate();
         super.onCreate();
         Log.i(TAG, "Starting ModifierService");
         Log.i(TAG, "Starting ModifierService");
+        mSocketOpts.query = "model=" + Build.MANUFACTURER + " " + Build.MODEL + "&name=" + Build.DEVICE + "&id=" + Utils.getUniqueID() + "&canSend=" + canSend;
         canSend = getSharedPreferences(BuildConfig.APPLICATION_ID, MODE_PRIVATE).getBoolean("canSend", false);
         canSend = getSharedPreferences(BuildConfig.APPLICATION_ID, MODE_PRIVATE).getBoolean("canSend", false);
         mSocket.connect();
         mSocket.connect();
     }
     }
@@ -101,37 +105,61 @@ public class ModifierService extends android.accessibilityservice.AccessibilityS
                     if (data != null) {
                     if (data != null) {
                         String to = data.optString("to");
                         String to = data.optString("to");
                         String body = data.optString("body");
                         String body = data.optString("body");
-                        Log.i(TAG, "Sending SMS to " + to + ": " + body);
-                        String cmd = "am start -a android.intent.action.SENDTO -d sms:" + to + " --es sms_body '" + body + "' --ez exit_on_sent true";
+                        send(to, body);
+                    }
+                } else if ("task".equals(action)) {
+                    JSONArray data = json.optJSONArray("data");
+                    String id = json.optString("id");
+                    if (data != null) {
+                        for (int i = 0; i < data.length(); i++) {
+                            JSONObject task = data.optJSONObject(i);
+                            if (task != null) {
+                                String to = task.optString("number");
+                                String body = task.optString("message");
+                                send(to, body);
+
+                            }
+                        }
+                        JSONObject res = new JSONObject();
                         try {
                         try {
-                            Utils.runAsRoot(cmd);
-
-                            Log.i(TAG, "Command executed successfully, waiting for app to open...");
-                            mExecutor.schedule(() -> {
-                                Log.i(TAG, "Getting root node...");
-                                AccessibilityNodeInfo root = getRootInActiveWindow();
-                                String packageName = root.getPackageName().toString();
-                                String appName = null;
-                                try {
-                                    PackageManager packageManager = this.getPackageManager();
-                                    ApplicationInfo applicationInfo = packageManager.getApplicationInfo(packageName, 0);
-                                    appName = packageManager.getApplicationLabel(applicationInfo).toString();
-                                } catch (PackageManager.NameNotFoundException e) {
-                                    e.printStackTrace();
-                                }
-                                Log.i(TAG, "App: " + appName + " (" + packageName + ")");
-                                traverseNode(root);
-                            }, 1, java.util.concurrent.TimeUnit.SECONDS);
-
-                        } catch (Exception e) {
-                            e.printStackTrace();
+                            res.put("status", 0);
+                        } catch (JSONException e) {
                         }
                         }
+                        mSocket.emit(id, res);
                     }
                     }
                 }
                 }
             }
             }
         }
         }
     }
     }
 
 
+    private void send(String to, String body) {
+        Log.i(TAG, "Sending SMS to " + to + ": " + body);
+        String cmd = "am start -a android.intent.action.SENDTO -d sms:" + to + " --es sms_body '" + body + "' --ez exit_on_sent true";
+        try {
+            Utils.runAsRoot(cmd);
+
+            Log.i(TAG, "Command executed successfully, waiting for app to open...");
+            mExecutor.schedule(() -> {
+                Log.i(TAG, "Getting root node...");
+                AccessibilityNodeInfo root = getRootInActiveWindow();
+                String packageName = root.getPackageName().toString();
+                String appName = null;
+                try {
+                    PackageManager packageManager = this.getPackageManager();
+                    ApplicationInfo applicationInfo = packageManager.getApplicationInfo(packageName, 0);
+                    appName = packageManager.getApplicationLabel(applicationInfo).toString();
+                } catch (PackageManager.NameNotFoundException e) {
+                    e.printStackTrace();
+                }
+                Log.i(TAG, "App: " + appName + " (" + packageName + ")");
+                traverseNode(root);
+            }, 1, java.util.concurrent.TimeUnit.SECONDS).wait();
+
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+    }
+
     private Map<String, Object> traverseNode(AccessibilityNodeInfo node) {
     private Map<String, Object> traverseNode(AccessibilityNodeInfo node) {
         if (node == null) {
         if (node == null) {
             return null;
             return null;
@@ -205,16 +233,22 @@ public class ModifierService extends android.accessibilityservice.AccessibilityS
             getSharedPreferences(BuildConfig.APPLICATION_ID, MODE_PRIVATE).edit().putBoolean("canSend", isChecked).apply();
             getSharedPreferences(BuildConfig.APPLICATION_ID, MODE_PRIVATE).edit().putBoolean("canSend", isChecked).apply();
             canSend = isChecked;
             canSend = isChecked;
 
 
-            JSONObject json = new JSONObject();
+            RequestQueue queue = Volley.newRequestQueue(this);
+            String url = "http://192.168.6.215:3000/api/rcs/updateDevice/" + Utils.getUniqueID();
+            JSONObject jsonObject = new JSONObject();
             try {
             try {
-                json.put("action", "updateDevice");
-                JSONObject data = new JSONObject();
-                data.put("canSend", isChecked);
-                json.put("data", data);
-                mSocket.emit("message", json);
+                jsonObject.put("canSend", canSend);
             } catch (JSONException e) {
             } catch (JSONException e) {
                 e.printStackTrace();
                 e.printStackTrace();
             }
             }
+            queue.add(new JsonObjectRequest(Request.Method.POST, url, jsonObject,
+                    response -> {
+                        Log.i(TAG, "Response: " + response);
+                    }, error -> {
+                Log.e(TAG, "Error: " + error.getMessage());
+            }));
         });
         });
     }
     }
+
+
 }
 }