Add beta update channel

This commit is contained in:
topjohnwu 2017-08-29 01:34:42 +08:00
parent 02e0955924
commit 4e3787bc0d
10 changed files with 80 additions and 20 deletions

View File

@ -12,11 +12,14 @@ import android.os.Handler;
import android.preference.PreferenceManager; import android.preference.PreferenceManager;
import android.widget.Toast; import android.widget.Toast;
import com.topjohnwu.magisk.asyncs.CheckUpdates;
import com.topjohnwu.magisk.asyncs.DownloadBusybox; import com.topjohnwu.magisk.asyncs.DownloadBusybox;
import com.topjohnwu.magisk.asyncs.ParallelTask; import com.topjohnwu.magisk.asyncs.ParallelTask;
import com.topjohnwu.magisk.database.RepoDatabaseHelper; import com.topjohnwu.magisk.database.RepoDatabaseHelper;
import com.topjohnwu.magisk.database.SuDatabaseHelper; import com.topjohnwu.magisk.database.SuDatabaseHelper;
import com.topjohnwu.magisk.module.Module; import com.topjohnwu.magisk.module.Module;
import com.topjohnwu.magisk.superuser.SuReceiver;
import com.topjohnwu.magisk.superuser.SuRequestActivity;
import com.topjohnwu.magisk.utils.SafetyNetHelper; import com.topjohnwu.magisk.utils.SafetyNetHelper;
import com.topjohnwu.magisk.utils.Shell; import com.topjohnwu.magisk.utils.Shell;
import com.topjohnwu.magisk.utils.Topic; import com.topjohnwu.magisk.utils.Topic;
@ -88,6 +91,7 @@ public class MagiskManager extends Application {
public int suNotificationType; public int suNotificationType;
public int suNamespaceMode; public int suNamespaceMode;
public String localeConfig; public String localeConfig;
public int updateChannel;
// Global resources // Global resources
public SharedPreferences prefs; public SharedPreferences prefs;
@ -154,14 +158,15 @@ public class MagiskManager extends Application {
// su // su
suRequestTimeout = Utils.getPrefsInt(prefs, "su_request_timeout", 10); suRequestTimeout = Utils.getPrefsInt(prefs, "su_request_timeout", 10);
suResponseType = Utils.getPrefsInt(prefs, "su_auto_response", 0); suResponseType = Utils.getPrefsInt(prefs, "su_auto_response", SuRequestActivity.PROMPT);
suNotificationType = Utils.getPrefsInt(prefs, "su_notification", 1); suNotificationType = Utils.getPrefsInt(prefs, "su_notification", SuReceiver.TOAST);
suReauth = prefs.getBoolean("su_reauth", false); suReauth = prefs.getBoolean("su_reauth", false);
suAccessState = suDB.getSettings(SuDatabaseHelper.ROOT_ACCESS, 3); suAccessState = suDB.getSettings(SuDatabaseHelper.ROOT_ACCESS, SuDatabaseHelper.ROOT_ACCESS_APPS_AND_ADB);
multiuserMode = suDB.getSettings(SuDatabaseHelper.MULTIUSER_MODE, 0); multiuserMode = suDB.getSettings(SuDatabaseHelper.MULTIUSER_MODE, SuDatabaseHelper.MULTIUSER_MODE_OWNER_ONLY);
suNamespaceMode = suDB.getSettings(SuDatabaseHelper.MNT_NS, 1); suNamespaceMode = suDB.getSettings(SuDatabaseHelper.MNT_NS, SuDatabaseHelper.NAMESPACE_MODE_REQUESTER);
updateNotification = prefs.getBoolean("notification", true); updateNotification = prefs.getBoolean("notification", true);
updateChannel = Utils.getPrefsInt(prefs, "update_channel", CheckUpdates.STABLE_CHANNEL);
} }
public void toast(String msg, int duration) { public void toast(String msg, int duration) {
@ -192,6 +197,7 @@ public class MagiskManager extends Application {
.putString("su_access", String.valueOf(suAccessState)) .putString("su_access", String.valueOf(suAccessState))
.putString("multiuser_mode", String.valueOf(multiuserMode)) .putString("multiuser_mode", String.valueOf(multiuserMode))
.putString("mnt_ns", String.valueOf(suNamespaceMode)) .putString("mnt_ns", String.valueOf(suNamespaceMode))
.putString("update_channel", String.valueOf(updateChannel))
.putString("busybox_version", BUSYBOX_VERSION) .putString("busybox_version", BUSYBOX_VERSION)
.putString("locale", localeConfig) .putString("locale", localeConfig)
.apply(); .apply();

View File

@ -14,6 +14,7 @@ import android.support.v7.app.ActionBar;
import android.support.v7.widget.Toolbar; import android.support.v7.widget.Toolbar;
import android.widget.Toast; import android.widget.Toast;
import com.topjohnwu.magisk.asyncs.CheckUpdates;
import com.topjohnwu.magisk.asyncs.HideManager; import com.topjohnwu.magisk.asyncs.HideManager;
import com.topjohnwu.magisk.components.Activity; import com.topjohnwu.magisk.components.Activity;
import com.topjohnwu.magisk.database.SuDatabaseHelper; import com.topjohnwu.magisk.database.SuDatabaseHelper;
@ -76,7 +77,8 @@ public class SettingsActivity extends Activity implements Topic.Subscriber {
private SharedPreferences prefs; private SharedPreferences prefs;
private PreferenceScreen prefScreen; private PreferenceScreen prefScreen;
private ListPreference suAccess, autoRes, suNotification, requestTimeout, multiuserMode, namespaceMode; private ListPreference updateChannel, suAccess, autoRes, suNotification,
requestTimeout, multiuserMode, namespaceMode;
private MagiskManager magiskManager; private MagiskManager magiskManager;
private PreferenceCategory generalCatagory; private PreferenceCategory generalCatagory;
@ -93,6 +95,7 @@ public class SettingsActivity extends Activity implements Topic.Subscriber {
PreferenceCategory suCategory = (PreferenceCategory) findPreference("superuser"); PreferenceCategory suCategory = (PreferenceCategory) findPreference("superuser");
PreferenceCategory developer = (PreferenceCategory) findPreference("developer"); PreferenceCategory developer = (PreferenceCategory) findPreference("developer");
updateChannel = (ListPreference) findPreference("update_channel");
suAccess = (ListPreference) findPreference("su_access"); suAccess = (ListPreference) findPreference("su_access");
autoRes = (ListPreference) findPreference("su_auto_response"); autoRes = (ListPreference) findPreference("su_auto_response");
requestTimeout = (ListPreference) findPreference("su_request_timeout"); requestTimeout = (ListPreference) findPreference("su_request_timeout");
@ -224,25 +227,25 @@ public class SettingsActivity extends Activity implements Topic.Subscriber {
} }
break; break;
case "su_access": case "su_access":
magiskManager.suAccessState = Utils.getPrefsInt(prefs, "su_access", 3); magiskManager.suAccessState = Utils.getPrefsInt(prefs, "su_access");
magiskManager.suDB.setSettings(SuDatabaseHelper.ROOT_ACCESS, magiskManager.suAccessState); magiskManager.suDB.setSettings(SuDatabaseHelper.ROOT_ACCESS, magiskManager.suAccessState);
break; break;
case "multiuser_mode": case "multiuser_mode":
magiskManager.multiuserMode = Utils.getPrefsInt(prefs, "multiuser_mode", 0); magiskManager.multiuserMode = Utils.getPrefsInt(prefs, "multiuser_mode");
magiskManager.suDB.setSettings(SuDatabaseHelper.MULTIUSER_MODE, magiskManager.multiuserMode); magiskManager.suDB.setSettings(SuDatabaseHelper.MULTIUSER_MODE, magiskManager.multiuserMode);
break; break;
case "mnt_ns": case "mnt_ns":
magiskManager.suNamespaceMode = Utils.getPrefsInt(prefs, "mnt_ns", 1); magiskManager.suNamespaceMode = Utils.getPrefsInt(prefs, "mnt_ns");
magiskManager.suDB.setSettings(SuDatabaseHelper.MNT_NS, magiskManager.suNamespaceMode); magiskManager.suDB.setSettings(SuDatabaseHelper.MNT_NS, magiskManager.suNamespaceMode);
break; break;
case "su_request_timeout": case "su_request_timeout":
magiskManager.suRequestTimeout = Utils.getPrefsInt(prefs, "su_request_timeout", 10); magiskManager.suRequestTimeout = Utils.getPrefsInt(prefs, "su_request_timeout");
break; break;
case "su_auto_response": case "su_auto_response":
magiskManager.suResponseType = Utils.getPrefsInt(prefs, "su_auto_response", 0); magiskManager.suResponseType = Utils.getPrefsInt(prefs, "su_auto_response");
break; break;
case "su_notification": case "su_notification":
magiskManager.suNotificationType = Utils.getPrefsInt(prefs, "su_notification", 1); magiskManager.suNotificationType = Utils.getPrefsInt(prefs, "su_notification");
break; break;
case "developer_logging": case "developer_logging":
MagiskManager.devLogging = prefs.getBoolean("developer_logging", false); MagiskManager.devLogging = prefs.getBoolean("developer_logging", false);
@ -254,6 +257,10 @@ public class SettingsActivity extends Activity implements Topic.Subscriber {
magiskManager.setLocale(); magiskManager.setLocale();
magiskManager.reloadActivity.publish(false); magiskManager.reloadActivity.publish(false);
break; break;
case "update_channel":
magiskManager.updateChannel = Utils.getPrefsInt(prefs, "update_channel");
new CheckUpdates(magiskManager, true).exec();
break;
} }
setSummary(); setSummary();
} }
@ -263,6 +270,8 @@ public class SettingsActivity extends Activity implements Topic.Subscriber {
} }
private void setSummary() { private void setSummary() {
updateChannel.setSummary(getResources()
.getStringArray(R.array.update_channel)[magiskManager.updateChannel]);
suAccess.setSummary(getResources() suAccess.setSummary(getResources()
.getStringArray(R.array.su_access)[magiskManager.suAccessState]); .getStringArray(R.array.su_access)[magiskManager.suAccessState]);
autoRes.setSummary(getResources() autoRes.setSummary(getResources()

View File

@ -12,7 +12,11 @@ import org.json.JSONObject;
public class CheckUpdates extends ParallelTask<Void, Void, Void> { public class CheckUpdates extends ParallelTask<Void, Void, Void> {
private static final String UPDATE_JSON = "https://raw.githubusercontent.com/topjohnwu/MagiskManager/update/magisk_update.json"; public static final int STABLE_CHANNEL = 0;
public static final int BETA_CHANNEL = 1;
private static final String STABLE_URL = "https://raw.githubusercontent.com/topjohnwu/MagiskManager/update/stable.json";
private static final String BETA_URL = "https://raw.githubusercontent.com/topjohnwu/MagiskManager/update/beta.json";
private boolean showNotification = false; private boolean showNotification = false;
@ -29,7 +33,17 @@ public class CheckUpdates extends ParallelTask<Void, Void, Void> {
protected Void doInBackground(Void... voids) { protected Void doInBackground(Void... voids) {
MagiskManager magiskManager = getMagiskManager(); MagiskManager magiskManager = getMagiskManager();
if (magiskManager == null) return null; if (magiskManager == null) return null;
String jsonStr = WebService.getString(UPDATE_JSON); String jsonStr;
switch (magiskManager.updateChannel) {
case STABLE_CHANNEL:
jsonStr = WebService.getString(STABLE_URL);
break;
case BETA_CHANNEL:
jsonStr = WebService.getString(BETA_URL);
break;
default:
jsonStr = null;
}
try { try {
JSONObject json = new JSONObject(jsonStr); JSONObject json = new JSONObject(jsonStr);
JSONObject magisk = json.getJSONObject("magisk"); JSONObject magisk = json.getJSONObject("magisk");

View File

@ -24,8 +24,20 @@ import java.util.List;
public class SuDatabaseHelper extends SQLiteOpenHelper { public class SuDatabaseHelper extends SQLiteOpenHelper {
public static final String ROOT_ACCESS = "root_access"; public static final String ROOT_ACCESS = "root_access";
public static final int ROOT_ACCESS_DISABLED = 0;
public static final int ROOT_ACCESS_APPS_ONLY = 1;
public static final int ROOT_ACCESS_ADB_ONLY = 2;
public static final int ROOT_ACCESS_APPS_AND_ADB = 3;
public static final String MULTIUSER_MODE = "multiuser_mode"; public static final String MULTIUSER_MODE = "multiuser_mode";
public static final int MULTIUSER_MODE_OWNER_ONLY = 0;
public static final int MULTIUSER_MODE_OWNER_MANAGED = 1;
public static final int MULTIUSER_MODE_USER = 2;
public static final String MNT_NS = "mnt_ns"; public static final String MNT_NS = "mnt_ns";
public static final int NAMESPACE_MODE_GLOBAL = 0;
public static final int NAMESPACE_MODE_REQUESTER = 1;
public static final int NAMESPACE_MODE_ISOLATE = 2;
private static final int DATABASE_VER = 3; private static final int DATABASE_VER = 3;
private static final String POLICY_TABLE = "policies"; private static final String POLICY_TABLE = "policies";

View File

@ -14,8 +14,9 @@ import java.util.Date;
public class SuReceiver extends BroadcastReceiver { public class SuReceiver extends BroadcastReceiver {
private static final int NO_NOTIFICATION = 0; public static final int NO_NOTIFICATION = 0;
private static final int TOAST = 1; public static final int TOAST = 1;
private static final int NOTIFY_NORMAL_LOG = 0; private static final int NOTIFY_NORMAL_LOG = 0;
private static final int NOTIFY_USER_TOASTS = 1; private static final int NOTIFY_USER_TOASTS = 1;
private static final int NOTIFY_USER_TO_OWNER = 2; private static final int NOTIFY_USER_TO_OWNER = 2;

View File

@ -30,10 +30,11 @@ import butterknife.ButterKnife;
public class SuRequestActivity extends Activity { public class SuRequestActivity extends Activity {
public static final int PROMPT = 0;
public static final int AUTO_DENY = 1;
public static final int AUTO_ALLOW = 2;
private static final int[] timeoutList = {0, -1, 10, 20, 30, 60}; private static final int[] timeoutList = {0, -1, 10, 20, 30, 60};
private static final int PROMPT = 0;
private static final int AUTO_DENY = 1;
private static final int AUTO_ALLOW = 2;
@BindView(R.id.su_popup) LinearLayout suPopup; @BindView(R.id.su_popup) LinearLayout suPopup;
@BindView(R.id.timeout) Spinner timeout; @BindView(R.id.timeout) Spinner timeout;

View File

@ -132,6 +132,10 @@ public class Utils {
return Integer.parseInt(prefs.getString(key, String.valueOf(def))); return Integer.parseInt(prefs.getString(key, String.valueOf(def)));
} }
public static int getPrefsInt(SharedPreferences prefs, String key) {
return getPrefsInt(prefs, key, 0);
}
public static MagiskManager getMagiskManager(Context context) { public static MagiskManager getMagiskManager(Context context) {
return (MagiskManager) context.getApplicationContext(); return (MagiskManager) context.getApplicationContext();
} }

View File

@ -14,7 +14,6 @@
<item>@string/settings_su_app</item> <item>@string/settings_su_app</item>
<item>@string/settings_su_adb</item> <item>@string/settings_su_adb</item>
<item>@string/settings_su_app_adb</item> <item>@string/settings_su_app_adb</item>
</string-array> </string-array>
<string-array name="value_array"> <string-array name="value_array">
@ -73,4 +72,9 @@
<item>@string/isolate_summary</item> <item>@string/isolate_summary</item>
</string-array> </string-array>
<string-array name="update_channel">
<item>@string/settings_update_stable</item>
<item>@string/settings_update_beta</item>
</string-array>
</resources> </resources>

View File

@ -151,6 +151,9 @@
<string name="settings_hide_manager_summary">Temporarily hide Magisk Manager.\nThis will install a new app called \"Unhide Magisk Manager\"</string> <string name="settings_hide_manager_summary">Temporarily hide Magisk Manager.\nThis will install a new app called \"Unhide Magisk Manager\"</string>
<string name="language">Language</string> <string name="language">Language</string>
<string name="system_default">(System Default)</string> <string name="system_default">(System Default)</string>
<string name="settings_update_channel_title">Update Channel</string>
<string name="settings_update_stable">Stable</string>
<string name="settings_update_beta">Beta</string>
<string name="settings_core_only_title">Magisk Core Only Mode</string> <string name="settings_core_only_title">Magisk Core Only Mode</string>
<string name="settings_core_only_summary">Enable only core features, all modules will not be loaded. MagiskSU, MagiskHide, and systemless hosts will still be enabled</string> <string name="settings_core_only_summary">Enable only core features, all modules will not be loaded. MagiskSU, MagiskHide, and systemless hosts will still be enabled</string>

View File

@ -15,6 +15,12 @@
android:title="@string/settings_notification_title" android:title="@string/settings_notification_title"
android:summary="@string/settings_notification_summary" /> android:summary="@string/settings_notification_summary" />
<ListPreference
android:key="update_channel"
android:title="@string/settings_update_channel_title"
android:entries="@array/update_channel"
android:entryValues="@array/value_array" />
<Preference <Preference
android:key="clear" android:key="clear"
android:title="@string/settings_clear_cache_title" android:title="@string/settings_clear_cache_title"