Magisk/app/src/main/java/com/topjohnwu/magisk/SettingsActivity.java

212 lines
8.6 KiB
Java
Raw Normal View History

package com.topjohnwu.magisk;
import android.content.Intent;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.preference.CheckBoxPreference;
import android.preference.ListPreference;
import android.preference.PreferenceFragment;
import android.preference.PreferenceManager;
import android.support.v7.app.ActionBar;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
import android.view.WindowManager;
2016-11-09 05:17:50 +08:00
import android.widget.Toast;
import com.topjohnwu.magisk.utils.Async;
import com.topjohnwu.magisk.utils.Logger;
2016-11-09 05:17:50 +08:00
import com.topjohnwu.magisk.utils.Shell;
import com.topjohnwu.magisk.utils.Utils;
import butterknife.BindView;
import butterknife.ButterKnife;
public class SettingsActivity extends AppCompatActivity {
@BindView(R.id.toolbar) Toolbar toolbar;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
String theme = PreferenceManager.getDefaultSharedPreferences(getApplicationContext()).getString("theme", "");
Logger.dev("AboutActivity: Theme is " + theme);
2017-01-10 22:30:05 +08:00
if (Utils.isDarkTheme) {
setTheme(R.style.AppTheme_dh);
}
setContentView(R.layout.activity_container);
ButterKnife.bind(this);
setSupportActionBar(toolbar);
toolbar.setNavigationOnClickListener(view -> finish());
ActionBar ab = getSupportActionBar();
if (ab != null) {
ab.setTitle(R.string.settings);
ab.setDisplayHomeAsUpEnabled(true);
}
setFloating();
if (savedInstanceState == null) {
getFragmentManager().beginTransaction().add(R.id.container, new SettingsFragment()).commit();
}
}
public void setFloating() {
boolean isTablet = getResources().getBoolean(R.bool.isTablet);
if (isTablet) {
WindowManager.LayoutParams params = getWindow().getAttributes();
params.height = getResources().getDimensionPixelSize(R.dimen.floating_height);
params.width = getResources().getDimensionPixelSize(R.dimen.floating_width);
params.alpha = 1.0f;
params.dimAmount = 0.6f;
params.flags |= 2;
getWindow().setAttributes(params);
setFinishOnTouchOutside(true);
}
}
2016-12-11 20:38:15 +08:00
public static class SettingsFragment extends PreferenceFragment
implements SharedPreferences.OnSharedPreferenceChangeListener {
private ListPreference themePreference;
2016-12-11 20:38:15 +08:00
private SharedPreferences prefs;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
2016-10-17 10:11:26 +08:00
addPreferencesFromResource(R.xml.app_settings);
PreferenceManager.setDefaultValues(getActivity(), R.xml.app_settings, false);
2016-12-11 20:38:15 +08:00
prefs = PreferenceManager.getDefaultSharedPreferences(getActivity());
themePreference = (ListPreference) findPreference("theme");
CheckBoxPreference busyboxPreference = (CheckBoxPreference) findPreference("busybox");
2016-10-17 10:11:26 +08:00
CheckBoxPreference magiskhidePreference = (CheckBoxPreference) findPreference("magiskhide");
2016-11-09 05:17:50 +08:00
CheckBoxPreference hostsPreference = (CheckBoxPreference) findPreference("hosts");
themePreference.setSummary(themePreference.getValue());
2016-12-25 03:05:22 +08:00
if (StatusFragment.magiskVersion < 9) {
2016-11-09 05:17:50 +08:00
hostsPreference.setEnabled(false);
busyboxPreference.setEnabled(false);
2016-12-25 03:05:22 +08:00
} else if (StatusFragment.magiskVersion < 8) {
2016-11-09 05:17:50 +08:00
magiskhidePreference.setEnabled(false);
} else {
busyboxPreference.setEnabled(true);
2016-10-17 10:11:26 +08:00
magiskhidePreference.setEnabled(true);
2016-11-09 05:17:50 +08:00
hostsPreference.setEnabled(true);
}
}
@Override
public void onResume() {
super.onResume();
2016-12-11 20:38:15 +08:00
prefs.registerOnSharedPreferenceChangeListener(this);
}
@Override
public void onDestroy() {
super.onDestroy();
2016-12-11 20:38:15 +08:00
prefs.unregisterOnSharedPreferenceChangeListener(this);
}
@Override
2016-12-11 20:38:15 +08:00
public void onSharedPreferenceChanged(SharedPreferences prefs, String key) {
Logger.dev("Settings: Prefs change " + key);
2016-11-09 05:17:50 +08:00
boolean checked;
switch (key) {
case "theme":
2017-01-10 22:30:05 +08:00
String theme = prefs.getString("theme", getString(R.string.theme_default_value));
Utils.isDarkTheme = theme.equalsIgnoreCase(getString(R.string.theme_dark_value));
themePreference.setSummary(theme);
2017-01-10 22:30:05 +08:00
if (Utils.isDarkTheme) {
getActivity().getApplication().setTheme(R.style.AppTheme_dh);
} else {
getActivity().getApplication().setTheme(R.style.AppTheme);
}
Intent intent = new Intent(getActivity(), MainActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);
break;
2016-10-17 10:11:26 +08:00
case "magiskhide":
2016-12-11 20:38:15 +08:00
checked = prefs.getBoolean("magiskhide", false);
2016-10-17 10:11:26 +08:00
if (checked) {
2016-11-07 23:59:10 +08:00
new Async.RootTask<Void, Void, Void>() {
2016-10-17 10:11:26 +08:00
@Override
protected Void doInBackground(Void... params) {
Utils.createFile("/magisk/.core/magiskhide/enable");
return null;
}
2016-11-07 23:59:10 +08:00
}.exec();
2016-10-17 10:11:26 +08:00
} else {
2016-11-07 23:59:10 +08:00
new Async.RootTask<Void, Void, Void>() {
2016-10-17 10:11:26 +08:00
@Override
protected Void doInBackground(Void... params) {
Utils.removeItem("/magisk/.core/magiskhide/enable");
return null;
}
2016-11-07 23:59:10 +08:00
}.exec();
2016-10-17 10:11:26 +08:00
}
2016-12-11 20:38:15 +08:00
Toast.makeText(getActivity(), R.string.settings_reboot_toast, Toast.LENGTH_LONG).show();
2016-10-17 10:11:26 +08:00
break;
case "busybox":
2016-12-11 20:38:15 +08:00
checked = prefs.getBoolean("busybox", false);
2016-11-09 05:17:50 +08:00
if (checked) {
new Async.RootTask<Void, Void, Void>() {
@Override
protected Void doInBackground(Void... params) {
Utils.createFile("/magisk/.core/busybox/enable");
return null;
}
}.exec();
} else {
new Async.RootTask<Void, Void, Void>() {
@Override
protected Void doInBackground(Void... params) {
Utils.removeItem("/magisk/.core/busybox/enable");
return null;
}
}.exec();
}
Toast.makeText(getActivity(), R.string.settings_reboot_toast, Toast.LENGTH_LONG).show();
break;
case "hosts":
2016-12-11 20:38:15 +08:00
checked = prefs.getBoolean("hosts", false);
2016-11-09 05:17:50 +08:00
if (checked) {
new Async.RootTask<Void, Void, Void>() {
@Override
protected Void doInBackground(Void... voids) {
Shell.su("cp -af /system/etc/hosts /magisk/.core/hosts");
return null;
}
}.exec();
} else {
new Async.RootTask<Void, Void, Void>() {
@Override
protected Void doInBackground(Void... voids) {
Shell.su("umount -l /system/etc/hosts", "rm -f /magisk/.core/hosts");
return null;
}
}.exec();
}
Toast.makeText(getActivity(), R.string.settings_reboot_toast, Toast.LENGTH_LONG).show();
break;
case "developer_logging":
2016-12-11 20:38:15 +08:00
Logger.devLog = prefs.getBoolean("developer_logging", false);
break;
case "shell_logging":
2016-12-11 20:38:15 +08:00
Logger.logShell = prefs.getBoolean("shell_logging", false);
break;
}
}
}
}