From ff6938280e5e37bba7965b2fc59c76b2c6bc7c65 Mon Sep 17 00:00:00 2001
From: topjohnwu <topjohnwu@gmail.com>
Date: Thu, 1 Jun 2017 03:18:41 +0800
Subject: [PATCH] Switch to DB based su configs

---
 .../com/topjohnwu/magisk/MagiskManager.java   | 14 ++---------
 .../topjohnwu/magisk/SettingsActivity.java    | 19 +++-----------
 .../magisk/database/SuDatabaseHelper.java     | 25 +++++++++++++++++++
 3 files changed, 31 insertions(+), 27 deletions(-)

diff --git a/app/src/main/java/com/topjohnwu/magisk/MagiskManager.java b/app/src/main/java/com/topjohnwu/magisk/MagiskManager.java
index d0b1a04d5..c9dc25c19 100644
--- a/app/src/main/java/com/topjohnwu/magisk/MagiskManager.java
+++ b/app/src/main/java/com/topjohnwu/magisk/MagiskManager.java
@@ -161,18 +161,8 @@ public class MagiskManager extends Application {
             isSuClient = suVersion.toUpperCase().contains("MAGISK");
         }
         if (isSuClient) {
-            ret = Shell.sh("getprop " + ROOT_ACCESS_PROP);
-            if (Utils.isValidShellResponse(ret)) {
-                suAccessState = Integer.parseInt(ret.get(0));
-            } else {
-                suAccessState = 0;
-            }
-            ret = Shell.sh("getprop " + MULTIUSER_MODE_PROP);
-            if (Utils.isValidShellResponse(ret)) {
-                multiuserMode = Integer.parseInt(ret.get(0));
-            } else {
-                multiuserMode = 0;
-            }
+            suAccessState = suDB.getSettings(SuDatabaseHelper.ROOT_ACCESS, 3);
+            multiuserMode = suDB.getSettings(SuDatabaseHelper.MULTIUSER_MODE, 0);
         }
     }
 
diff --git a/app/src/main/java/com/topjohnwu/magisk/SettingsActivity.java b/app/src/main/java/com/topjohnwu/magisk/SettingsActivity.java
index fd345455f..217db8733 100644
--- a/app/src/main/java/com/topjohnwu/magisk/SettingsActivity.java
+++ b/app/src/main/java/com/topjohnwu/magisk/SettingsActivity.java
@@ -15,6 +15,7 @@ import com.topjohnwu.magisk.asyncs.MagiskHide;
 import com.topjohnwu.magisk.asyncs.SerialTask;
 import com.topjohnwu.magisk.components.Activity;
 import com.topjohnwu.magisk.components.AlertDialogBuilder;
+import com.topjohnwu.magisk.database.SuDatabaseHelper;
 import com.topjohnwu.magisk.utils.Logger;
 import com.topjohnwu.magisk.utils.Shell;
 import com.topjohnwu.magisk.utils.Utils;
@@ -188,24 +189,12 @@ public class SettingsActivity extends Activity {
                     }.exec();
                     break;
                 case "su_access":
-                    magiskManager.suAccessState = Utils.getPrefsInt(prefs, "su_access", 0);
-                    new SerialTask<Void, Void, Void>(getActivity()) {
-                        @Override
-                        protected Void doInBackground(Void... params) {
-                            Shell.su("setprop " + MagiskManager.ROOT_ACCESS_PROP + " " + magiskManager.suAccessState);
-                            return null;
-                        }
-                    }.exec();
+                    magiskManager.suAccessState = Utils.getPrefsInt(prefs, "su_access", 3);
+                    magiskManager.suDB.setSettings(SuDatabaseHelper.ROOT_ACCESS, magiskManager.suAccessState);
                     break;
                 case "multiuser_mode":
                     magiskManager.multiuserMode = Utils.getPrefsInt(prefs, "multiuser_mode", 0);
-                    new SerialTask<Void, Void, Void>(getActivity()) {
-                        @Override
-                        protected Void doInBackground(Void... params) {
-                            Shell.su("setprop " + MagiskManager.MULTIUSER_MODE_PROP + " " + magiskManager.multiuserMode);
-                            return null;
-                        }
-                    }.exec();
+                    magiskManager.suDB.setSettings(SuDatabaseHelper.MULTIUSER_MODE, magiskManager.multiuserMode);
                 case "su_request_timeout":
                     magiskManager.suRequestTimeout = Utils.getPrefsInt(prefs, "su_request_timeout", 10);
                     break;
diff --git a/app/src/main/java/com/topjohnwu/magisk/database/SuDatabaseHelper.java b/app/src/main/java/com/topjohnwu/magisk/database/SuDatabaseHelper.java
index b0e3a2983..b8f49916d 100644
--- a/app/src/main/java/com/topjohnwu/magisk/database/SuDatabaseHelper.java
+++ b/app/src/main/java/com/topjohnwu/magisk/database/SuDatabaseHelper.java
@@ -1,5 +1,6 @@
 package com.topjohnwu.magisk.database;
 
+import android.content.ContentValues;
 import android.content.Context;
 import android.content.pm.PackageManager;
 import android.database.Cursor;
@@ -18,6 +19,9 @@ import java.util.List;
 
 public class SuDatabaseHelper extends SQLiteOpenHelper {
 
+    public static final String ROOT_ACCESS = "root_access";
+    public static final String MULTIUSER_MODE = "multiuser_mode";
+
     private static final int DATABASE_VER = 2;
     private static final String POLICY_TABLE = "policies";
     private static final String LOG_TABLE = "logs";
@@ -206,4 +210,25 @@ public class SuDatabaseHelper extends SQLiteOpenHelper {
         db.delete(LOG_TABLE, null, null);
         db.close();
     }
+
+    public void setSettings(String key, int value) {
+        ContentValues data = new ContentValues();
+        data.put("key", key);
+        data.put("value", value);
+        SQLiteDatabase db = getWritableDatabase();
+        db.replace(SETTINGS_TABLE, null, data);
+        db.close();
+    }
+
+    public int getSettings(String key, int defaultValue) {
+        SQLiteDatabase db = getReadableDatabase();
+        int value = defaultValue;
+        try (Cursor c = db.query(SETTINGS_TABLE, null, "key=?", new String[] { key }, null, null, null)) {
+            while (c.moveToNext()) {
+                value = c.getInt(c.getColumnIndex("value"));
+            }
+        }
+        db.close();
+        return value;
+    }
 }