|
|
@@ -13,13 +13,17 @@ import android.view.WindowManager;
|
|
|
import android.view.accessibility.AccessibilityEvent;
|
|
|
import android.view.accessibility.AccessibilityNodeInfo;
|
|
|
import android.widget.FrameLayout;
|
|
|
-import android.widget.ImageButton;
|
|
|
|
|
|
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.google.gson.Gson;
|
|
|
|
|
|
+import org.json.JSONArray;
|
|
|
import org.json.JSONException;
|
|
|
import org.json.JSONObject;
|
|
|
|
|
|
@@ -43,16 +47,15 @@ public class ModifierService extends android.accessibilityservice.AccessibilityS
|
|
|
private ScheduledExecutorService mExecutor = new ScheduledThreadPoolExecutor(8);
|
|
|
|
|
|
private Socket mSocket;
|
|
|
-
|
|
|
+ private IO.Options mSocketOpts = new IO.Options();
|
|
|
private boolean canSend = false;
|
|
|
private FloatingWindowBinding binding;
|
|
|
|
|
|
public ModifierService() {
|
|
|
Log.i(TAG, "Creating ModifierService");
|
|
|
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(Socket.EVENT_CONNECT, args -> {
|
|
|
Log.i(TAG, "Connected to server");
|
|
|
@@ -76,6 +79,7 @@ public class ModifierService extends android.accessibilityservice.AccessibilityS
|
|
|
public void onCreate() {
|
|
|
super.onCreate();
|
|
|
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);
|
|
|
mSocket.connect();
|
|
|
}
|
|
|
@@ -101,37 +105,61 @@ public class ModifierService extends android.accessibilityservice.AccessibilityS
|
|
|
if (data != null) {
|
|
|
String to = data.optString("to");
|
|
|
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 {
|
|
|
- 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) {
|
|
|
if (node == 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();
|
|
|
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 {
|
|
|
- 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) {
|
|
|
e.printStackTrace();
|
|
|
}
|
|
|
+ queue.add(new JsonObjectRequest(Request.Method.POST, url, jsonObject,
|
|
|
+ response -> {
|
|
|
+ Log.i(TAG, "Response: " + response);
|
|
|
+ }, error -> {
|
|
|
+ Log.e(TAG, "Error: " + error.getMessage());
|
|
|
+ }));
|
|
|
});
|
|
|
}
|
|
|
+
|
|
|
+
|
|
|
}
|