You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
FoxMagiskModuleManager/app/src/main/java/com/fox2code/mmm/settings/SettingsActivity.java

140 lines
6.5 KiB
Java

3 years ago
package com.fox2code.mmm.settings;
import android.os.Bundle;
import android.text.method.Touch;
import android.widget.Toast;
3 years ago
import androidx.annotation.StyleRes;
import androidx.fragment.app.FragmentTransaction;
import androidx.preference.ListPreference;
3 years ago
import androidx.preference.Preference;
import androidx.preference.PreferenceFragmentCompat;
import com.fox2code.mmm.BuildConfig;
import com.fox2code.mmm.Constants;
3 years ago
import com.fox2code.mmm.MainApplication;
import com.fox2code.mmm.R;
import com.fox2code.mmm.compat.CompatActivity;
import com.fox2code.mmm.installer.InstallerInitializer;
3 years ago
import com.fox2code.mmm.repo.RepoData;
import com.fox2code.mmm.repo.RepoManager;
import com.fox2code.mmm.utils.IntentHelper;
import com.mikepenz.aboutlibraries.LibsBuilder;
import com.topjohnwu.superuser.internal.UiThreadHandler;
3 years ago
public class SettingsActivity extends CompatActivity {
private static int devModeStep = 0;
3 years ago
@Override
protected void onCreate(Bundle savedInstanceState) {
devModeStep = 0;
3 years ago
super.onCreate(savedInstanceState);
this.setDisplayHomeAsUpEnabled(true);
setContentView(R.layout.settings_activity);
if (savedInstanceState == null) {
setTitle(R.string.app_name);
getSupportFragmentManager()
.beginTransaction()
.replace(R.id.settings, new SettingsFragment())
.commit();
}
}
public static class SettingsFragment extends PreferenceFragmentCompat
implements CompatActivity.OnBackPressedCallback {
@Override
@SuppressWarnings("ConstantConditions")
public void onCreatePreferences(Bundle savedInstanceState, String rootKey) {
getPreferenceManager().setSharedPreferencesName("mmm");
setPreferencesFromResource(R.xml.root_preferences, rootKey);
ListPreference themePreference = findPreference("pref_theme");
themePreference.setSummaryProvider(p -> themePreference.getEntry());
themePreference.setOnPreferenceClickListener(p -> {
// You need to reboot your device at least once to be able to access dev-mode
if (!MainApplication.isFirstBoot()) devModeStep = 1;
return false;
});
themePreference.setOnPreferenceChangeListener((preference, newValue) -> {
devModeStep = 0;
3 years ago
@StyleRes int themeResId;
switch (String.valueOf(newValue)) {
default:
case "system":
themeResId = R.style.Theme_MagiskModuleManager;
break;
case "dark":
themeResId = R.style.Theme_MagiskModuleManager_Dark;
break;
case "light":
themeResId = R.style.Theme_MagiskModuleManager_Light;
break;
}
MainApplication.getINSTANCE().setManagerThemeResId(themeResId);
CompatActivity.getCompatActivity(this).setThemeRecreate(themeResId);
return true;
});
if ("dark".equals(themePreference.getValue())) {
findPreference("pref_force_dark_terminal").setEnabled(false);
}
if (InstallerInitializer.peekMagiskVersion() < Constants.MAGISK_VER_CODE_INSTALL_COMMAND
|| !MainApplication.isDeveloper()) {
findPreference("pref_use_magisk_install_command").setVisible(false);
}
3 years ago
setRepoNameResolution("pref_repo_main", RepoManager.MAGISK_REPO,
"Magisk Modules Repo (Official)", RepoManager.MAGISK_REPO_HOMEPAGE);
setRepoNameResolution("pref_repo_alt", RepoManager.MAGISK_ALT_REPO,
"Magisk Modules Alt Repo", RepoManager.MAGISK_ALT_REPO_HOMEPAGE);
final LibsBuilder libsBuilder = new LibsBuilder()
.withFields(R.string.class.getFields()).withShowLoadingProgress(false)
.withLicenseShown(true).withAboutMinimalDesign(false);
findPreference("pref_source_code").setOnPreferenceClickListener(p -> {
if (devModeStep == 2 && (BuildConfig.DEBUG || !MainApplication.isDeveloper())) {
devModeStep = 0;
MainApplication.getSharedPreferences().edit()
.putBoolean("developer", true).apply();
Toast.makeText(getContext(), // Tell the user something changed
R.string.dev_mode_enabled, Toast.LENGTH_SHORT).show();
return true;
}
3 years ago
IntentHelper.openUrl(p.getContext(), "https://github.com/Fox2Code/FoxMagiskModuleManager");
return true;
});
findPreference("pref_show_licenses").setOnPreferenceClickListener(p -> {
devModeStep = devModeStep == 1 ? 2 : 0;
3 years ago
CompatActivity compatActivity = getCompatActivity(this);
compatActivity.setOnBackPressedCallback(this);
compatActivity.setTitle(R.string.licenses);
compatActivity.getSupportFragmentManager()
.beginTransaction()
.replace(R.id.settings, libsBuilder.supportFragment())
.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE)
.commit();
return true;
});
}
private void setRepoNameResolution(String preferenceName,String url,
String fallbackTitle,String homepage) {
Preference preference = findPreference(preferenceName);
if (preference == null) return;
RepoData repoData = RepoManager.getINSTANCE().get(url);
preference.setTitle(repoData == null ? fallbackTitle :
repoData.getNameOrFallback(fallbackTitle));
preference.setOnPreferenceClickListener(p -> {
IntentHelper.openUrl(getCompatActivity(this), homepage);
return true;
});
}
@Override
public boolean onBackPressed(CompatActivity compatActivity) {
compatActivity.setTitle(R.string.app_name);
compatActivity.getSupportFragmentManager()
.beginTransaction().replace(R.id.settings, this)
.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE)
.commit();
return true;
}
}
}