Replaced base settings fragment by its kotlin counterpart
This commit is contained in:
parent
843995cdb9
commit
d83c744725
@ -1,73 +0,0 @@
|
|||||||
package com.topjohnwu.magisk.ui.base;
|
|
||||||
|
|
||||||
import android.annotation.SuppressLint;
|
|
||||||
import android.content.SharedPreferences;
|
|
||||||
import android.os.Build;
|
|
||||||
import android.os.Bundle;
|
|
||||||
import android.view.LayoutInflater;
|
|
||||||
import android.view.View;
|
|
||||||
import android.view.ViewGroup;
|
|
||||||
|
|
||||||
import com.topjohnwu.magisk.App;
|
|
||||||
import com.topjohnwu.magisk.R;
|
|
||||||
|
|
||||||
import androidx.preference.Preference;
|
|
||||||
import androidx.preference.PreferenceCategory;
|
|
||||||
import androidx.preference.PreferenceFragmentCompat;
|
|
||||||
import androidx.preference.PreferenceGroupAdapter;
|
|
||||||
import androidx.preference.PreferenceScreen;
|
|
||||||
import androidx.preference.PreferenceViewHolder;
|
|
||||||
import androidx.recyclerview.widget.RecyclerView;
|
|
||||||
|
|
||||||
public abstract class BasePreferenceFragment extends PreferenceFragmentCompat
|
|
||||||
implements SharedPreferences.OnSharedPreferenceChangeListener {
|
|
||||||
|
|
||||||
public App app = App.self;
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
|
|
||||||
View v = super.onCreateView(inflater, container, savedInstanceState);
|
|
||||||
app.getPrefs().registerOnSharedPreferenceChangeListener(this);
|
|
||||||
return v;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onDestroyView() {
|
|
||||||
app.getPrefs().unregisterOnSharedPreferenceChangeListener(this);
|
|
||||||
super.onDestroyView();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
protected RecyclerView.Adapter onCreateAdapter(PreferenceScreen preferenceScreen) {
|
|
||||||
return new PreferenceGroupAdapter(preferenceScreen) {
|
|
||||||
@SuppressLint("RestrictedApi")
|
|
||||||
@Override
|
|
||||||
public void onBindViewHolder(PreferenceViewHolder holder, int position) {
|
|
||||||
super.onBindViewHolder(holder, position);
|
|
||||||
Preference preference = getItem(position);
|
|
||||||
if (preference instanceof PreferenceCategory)
|
|
||||||
setZeroPaddingToLayoutChildren(holder.itemView);
|
|
||||||
else {
|
|
||||||
View iconFrame = holder.itemView.findViewById(R.id.icon_frame);
|
|
||||||
if (iconFrame != null) {
|
|
||||||
iconFrame.setVisibility(preference.getIcon() == null ? View.GONE : View.VISIBLE);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
private void setZeroPaddingToLayoutChildren(View view) {
|
|
||||||
if (!(view instanceof ViewGroup))
|
|
||||||
return;
|
|
||||||
ViewGroup viewGroup = (ViewGroup) view;
|
|
||||||
int childCount = viewGroup.getChildCount();
|
|
||||||
for (int i = 0; i < childCount; i++) {
|
|
||||||
setZeroPaddingToLayoutChildren(viewGroup.getChildAt(i));
|
|
||||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1)
|
|
||||||
viewGroup.setPaddingRelative(0, viewGroup.getPaddingTop(), viewGroup.getPaddingEnd(), viewGroup.getPaddingBottom());
|
|
||||||
else
|
|
||||||
viewGroup.setPadding(0, viewGroup.getPaddingTop(), viewGroup.getPaddingRight(), viewGroup.getPaddingBottom());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
@ -0,0 +1,67 @@
|
|||||||
|
package com.topjohnwu.magisk.ui.base
|
||||||
|
|
||||||
|
import android.annotation.SuppressLint
|
||||||
|
import android.content.SharedPreferences
|
||||||
|
import android.os.Build
|
||||||
|
import android.os.Bundle
|
||||||
|
import android.view.LayoutInflater
|
||||||
|
import android.view.View
|
||||||
|
import android.view.ViewGroup
|
||||||
|
import androidx.core.view.children
|
||||||
|
import androidx.core.view.isVisible
|
||||||
|
import androidx.preference.*
|
||||||
|
import androidx.recyclerview.widget.RecyclerView
|
||||||
|
import com.topjohnwu.magisk.App
|
||||||
|
import com.topjohnwu.magisk.R
|
||||||
|
import com.topjohnwu.magisk.data.database.MagiskDB
|
||||||
|
import com.topjohnwu.magisk.data.database.RepoDatabaseHelper
|
||||||
|
import org.koin.android.ext.android.inject
|
||||||
|
|
||||||
|
abstract class BasePreferenceFragment : PreferenceFragmentCompat(),
|
||||||
|
SharedPreferences.OnSharedPreferenceChangeListener {
|
||||||
|
|
||||||
|
protected val prefs: SharedPreferences by inject()
|
||||||
|
protected val app: App by inject()
|
||||||
|
protected val database: MagiskDB by inject()
|
||||||
|
protected val repoDB: RepoDatabaseHelper by inject()
|
||||||
|
|
||||||
|
override fun onCreateView(
|
||||||
|
inflater: LayoutInflater,
|
||||||
|
container: ViewGroup?,
|
||||||
|
savedInstanceState: Bundle?
|
||||||
|
): View? {
|
||||||
|
val v = super.onCreateView(inflater, container, savedInstanceState)
|
||||||
|
prefs.registerOnSharedPreferenceChangeListener(this)
|
||||||
|
return v
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun onDestroyView() {
|
||||||
|
prefs.unregisterOnSharedPreferenceChangeListener(this)
|
||||||
|
super.onDestroyView()
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun onCreateAdapter(preferenceScreen: PreferenceScreen): RecyclerView.Adapter<*> {
|
||||||
|
return object : PreferenceGroupAdapter(preferenceScreen) {
|
||||||
|
@SuppressLint("RestrictedApi")
|
||||||
|
override fun onBindViewHolder(holder: PreferenceViewHolder, position: Int) {
|
||||||
|
super.onBindViewHolder(holder, position)
|
||||||
|
when (val preference = getItem(position)) {
|
||||||
|
is PreferenceCategory -> setZeroPaddingToLayoutChildren(holder.itemView)
|
||||||
|
else -> holder.itemView.findViewById<View>(R.id.icon_frame)?.isVisible =
|
||||||
|
preference.icon != null
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun setZeroPaddingToLayoutChildren(view: View) {
|
||||||
|
(view as? ViewGroup)?.children?.forEach {
|
||||||
|
setZeroPaddingToLayoutChildren(it)
|
||||||
|
} ?: return
|
||||||
|
|
||||||
|
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1)
|
||||||
|
view.setPaddingRelative(0, view.paddingTop, view.paddingEnd, view.paddingBottom)
|
||||||
|
else
|
||||||
|
view.setPadding(0, view.paddingTop, view.paddingRight, view.paddingBottom)
|
||||||
|
}
|
||||||
|
}
|
@ -36,25 +36,57 @@ import io.reactivex.android.schedulers.AndroidSchedulers;
|
|||||||
import io.reactivex.schedulers.Schedulers;
|
import io.reactivex.schedulers.Schedulers;
|
||||||
import kotlin.Pair;
|
import kotlin.Pair;
|
||||||
|
|
||||||
public class SettingsFragment extends BasePreferenceFragment {
|
public final class SettingsFragment extends BasePreferenceFragment {
|
||||||
|
|
||||||
private ListPreference updateChannel, autoRes, suNotification,
|
private ListPreference updateChannel, autoRes, suNotification,
|
||||||
requestTimeout, rootConfig, multiuserConfig, nsConfig;
|
requestTimeout, rootConfig, multiuserConfig, nsConfig;
|
||||||
|
|
||||||
|
@SuppressWarnings("ResultOfMethodCallIgnored")
|
||||||
|
@SuppressLint("CheckResult")
|
||||||
|
private static void setLocalePreference(ListPreference lp) {
|
||||||
|
lp.setSummary("Loading");
|
||||||
|
lp.setEnabled(false);
|
||||||
|
LocaleManager.getAvailableLocales()
|
||||||
|
.flattenAsFlowable(locales -> locales)
|
||||||
|
.map(locale -> new Pair<>(locale.getDisplayName(locale), LocaleManager.toLanguageTag(locale)))
|
||||||
|
.toList()
|
||||||
|
.map(list -> {
|
||||||
|
CharSequence[] names = new CharSequence[list.size() + 1];
|
||||||
|
CharSequence[] values = new CharSequence[list.size() + 1];
|
||||||
|
|
||||||
|
names[0] = LocaleManager.getString(LocaleManager.getDefaultLocale(), R.string.system_default);
|
||||||
|
values[0] = "";
|
||||||
|
int i = 1;
|
||||||
|
for (Pair<String, String> item : list) {
|
||||||
|
names[i] = item.getFirst();
|
||||||
|
values[i++] = item.getSecond();
|
||||||
|
}
|
||||||
|
return new Pair<>(names, values);
|
||||||
|
})
|
||||||
|
.subscribeOn(Schedulers.computation())
|
||||||
|
.observeOn(AndroidSchedulers.mainThread())
|
||||||
|
.subscribe(it -> {
|
||||||
|
lp.setEnabled(true);
|
||||||
|
lp.setEntries(it.getFirst());
|
||||||
|
lp.setEntryValues(it.getSecond());
|
||||||
|
lp.setSummary(LocaleManager.getLocale().getDisplayName(LocaleManager.getLocale()));
|
||||||
|
}, Throwable::printStackTrace);
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onStart() {
|
public final void onStart() {
|
||||||
super.onStart();
|
super.onStart();
|
||||||
setHasOptionsMenu(true);
|
setHasOptionsMenu(true);
|
||||||
requireActivity().setTitle(R.string.settings);
|
requireActivity().setTitle(R.string.settings);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onCreatePreferences(Bundle savedInstanceState, String rootKey) {
|
public final void onCreatePreferences(Bundle savedInstanceState, String rootKey) {
|
||||||
getPreferenceManager().setStorageDeviceProtected();
|
getPreferenceManager().setStorageDeviceProtected();
|
||||||
setPreferencesFromResource(R.xml.app_settings, rootKey);
|
setPreferencesFromResource(R.xml.app_settings, rootKey);
|
||||||
|
|
||||||
boolean showSuperuser = Utils.showSuperUser();
|
boolean showSuperuser = Utils.showSuperUser();
|
||||||
app.getPrefs().edit()
|
getPrefs().edit()
|
||||||
.putBoolean(Config.Key.SU_FINGERPRINT, FingerprintHelper.useFingerprint())
|
.putBoolean(Config.Key.SU_FINGERPRINT, FingerprintHelper.useFingerprint())
|
||||||
.apply();
|
.apply();
|
||||||
|
|
||||||
@ -74,8 +106,8 @@ public class SettingsFragment extends BasePreferenceFragment {
|
|||||||
return true;
|
return true;
|
||||||
});
|
});
|
||||||
findPreference("clear").setOnPreferenceClickListener(pref -> {
|
findPreference("clear").setOnPreferenceClickListener(pref -> {
|
||||||
app.getPrefs().edit().remove(Config.Key.ETAG_KEY).apply();
|
getPrefs().edit().remove(Config.Key.ETAG_KEY).apply();
|
||||||
app.getRepoDB().clearRepo();
|
getRepoDB().clearRepo();
|
||||||
Utils.toast(R.string.repo_cache_cleared, Toast.LENGTH_SHORT);
|
Utils.toast(R.string.repo_cache_cleared, Toast.LENGTH_SHORT);
|
||||||
return true;
|
return true;
|
||||||
});
|
});
|
||||||
@ -102,7 +134,7 @@ public class SettingsFragment extends BasePreferenceFragment {
|
|||||||
if (channel == Config.Value.CUSTOM_CHANNEL) {
|
if (channel == Config.Value.CUSTOM_CHANNEL) {
|
||||||
View v = LayoutInflater.from(requireActivity()).inflate(R.layout.custom_channel_dialog, null);
|
View v = LayoutInflater.from(requireActivity()).inflate(R.layout.custom_channel_dialog, null);
|
||||||
EditText url = v.findViewById(R.id.custom_url);
|
EditText url = v.findViewById(R.id.custom_url);
|
||||||
url.setText(app.getPrefs().getString(Config.Key.CUSTOM_CHANNEL, ""));
|
url.setText(getPrefs().getString(Config.Key.CUSTOM_CHANNEL, ""));
|
||||||
new AlertDialog.Builder(requireActivity())
|
new AlertDialog.Builder(requireActivity())
|
||||||
.setTitle(R.string.settings_update_custom)
|
.setTitle(R.string.settings_update_custom)
|
||||||
.setView(v)
|
.setView(v)
|
||||||
@ -150,11 +182,12 @@ public class SettingsFragment extends BasePreferenceFragment {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (Shell.rootAccess() && Const.USER_ID == 0) {
|
if (Shell.rootAccess() && Const.USER_ID == 0) {
|
||||||
if (app.getPackageName().equals(BuildConfig.APPLICATION_ID)) {
|
if (getApp().getPackageName().equals(BuildConfig.APPLICATION_ID)) {
|
||||||
generalCatagory.removePreference(restoreManager);
|
generalCatagory.removePreference(restoreManager);
|
||||||
} else {
|
} else {
|
||||||
if (!Networking.checkNetworkStatus(app))
|
if (!Networking.checkNetworkStatus(requireContext())) {
|
||||||
generalCatagory.removePreference(restoreManager);
|
generalCatagory.removePreference(restoreManager);
|
||||||
|
}
|
||||||
generalCatagory.removePreference(hideManager);
|
generalCatagory.removePreference(hideManager);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
@ -172,45 +205,13 @@ public class SettingsFragment extends BasePreferenceFragment {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@SuppressWarnings("ResultOfMethodCallIgnored")
|
|
||||||
@SuppressLint("CheckResult")
|
|
||||||
private void setLocalePreference(ListPreference lp) {
|
|
||||||
lp.setSummary("Loading");
|
|
||||||
lp.setEnabled(false);
|
|
||||||
LocaleManager.getAvailableLocales()
|
|
||||||
.flattenAsFlowable(locales -> locales)
|
|
||||||
.map(locale -> new Pair<>(locale.getDisplayName(locale), LocaleManager.toLanguageTag(locale)))
|
|
||||||
.toList()
|
|
||||||
.map(list -> {
|
|
||||||
CharSequence[] names = new CharSequence[list.size() + 1];
|
|
||||||
CharSequence[] values = new CharSequence[list.size() + 1];
|
|
||||||
|
|
||||||
names[0] = LocaleManager.getString(LocaleManager.getDefaultLocale(), R.string.system_default);
|
|
||||||
values[0] = "";
|
|
||||||
int i = 1;
|
|
||||||
for (Pair<String, String> item : list) {
|
|
||||||
names[i] = item.getFirst();
|
|
||||||
values[i++] = item.getSecond();
|
|
||||||
}
|
|
||||||
return new Pair<>(names, values);
|
|
||||||
})
|
|
||||||
.subscribeOn(Schedulers.computation())
|
|
||||||
.observeOn(AndroidSchedulers.mainThread())
|
|
||||||
.subscribe(it -> {
|
|
||||||
lp.setEnabled(true);
|
|
||||||
lp.setEntries(it.getFirst());
|
|
||||||
lp.setEntryValues(it.getSecond());
|
|
||||||
lp.setSummary(LocaleManager.getLocale().getDisplayName(LocaleManager.getLocale()));
|
|
||||||
}, Throwable::printStackTrace);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onSharedPreferenceChanged(SharedPreferences prefs, String key) {
|
public final void onSharedPreferenceChanged(SharedPreferences prefs, String key) {
|
||||||
switch (key) {
|
switch (key) {
|
||||||
case Config.Key.ROOT_ACCESS:
|
case Config.Key.ROOT_ACCESS:
|
||||||
case Config.Key.SU_MULTIUSER_MODE:
|
case Config.Key.SU_MULTIUSER_MODE:
|
||||||
case Config.Key.SU_MNT_NS:
|
case Config.Key.SU_MNT_NS:
|
||||||
app.getDB().setSettings(key, Utils.getPrefsInt(prefs, key));
|
getDatabase().setSettings(key, Utils.getPrefsInt(prefs, key));
|
||||||
break;
|
break;
|
||||||
case Config.Key.DARK_THEME:
|
case Config.Key.DARK_THEME:
|
||||||
requireActivity().recreate();
|
requireActivity().recreate();
|
||||||
@ -234,7 +235,7 @@ public class SettingsFragment extends BasePreferenceFragment {
|
|||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case Config.Key.LOCALE:
|
case Config.Key.LOCALE:
|
||||||
LocaleManager.setLocale(app);
|
LocaleManager.setLocale(getApp());
|
||||||
requireActivity().recreate();
|
requireActivity().recreate();
|
||||||
break;
|
break;
|
||||||
case Config.Key.UPDATE_CHANNEL:
|
case Config.Key.UPDATE_CHANNEL:
|
||||||
@ -249,7 +250,7 @@ public class SettingsFragment extends BasePreferenceFragment {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean onPreferenceTreeClick(Preference preference) {
|
public final boolean onPreferenceTreeClick(Preference preference) {
|
||||||
String key = preference.getKey();
|
String key = preference.getKey();
|
||||||
switch (key) {
|
switch (key) {
|
||||||
case Config.Key.SU_FINGERPRINT:
|
case Config.Key.SU_FINGERPRINT:
|
||||||
|
Loading…
x
Reference in New Issue
Block a user