2024-01-01 16:33:20 +01:00
|
|
|
package app.revanced.integrations.shared.settings.preference;
|
2023-05-15 09:51:15 +02:00
|
|
|
|
|
|
|
import android.app.AlertDialog;
|
|
|
|
import android.content.Context;
|
|
|
|
import android.os.Build;
|
|
|
|
import android.preference.EditTextPreference;
|
|
|
|
import android.preference.Preference;
|
|
|
|
import android.text.InputType;
|
|
|
|
import android.util.AttributeSet;
|
|
|
|
import android.util.TypedValue;
|
|
|
|
import android.widget.EditText;
|
2024-01-01 16:33:20 +01:00
|
|
|
import app.revanced.integrations.shared.settings.Setting;
|
|
|
|
import app.revanced.integrations.shared.Logger;
|
|
|
|
import app.revanced.integrations.shared.Utils;
|
2023-05-15 09:51:15 +02:00
|
|
|
|
2024-01-01 16:33:20 +01:00
|
|
|
import static app.revanced.integrations.shared.StringRef.str;
|
2023-05-15 09:51:15 +02:00
|
|
|
|
2024-01-01 16:33:20 +01:00
|
|
|
/** @noinspection deprecation, unused */
|
2023-05-15 09:51:15 +02:00
|
|
|
public class ImportExportPreference extends EditTextPreference implements Preference.OnPreferenceClickListener {
|
|
|
|
|
|
|
|
private String existingSettings;
|
|
|
|
|
|
|
|
private void init() {
|
|
|
|
setSelectable(true);
|
|
|
|
|
|
|
|
EditText editText = getEditText();
|
|
|
|
editText.setTextIsSelectable(true);
|
|
|
|
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
|
|
|
|
editText.setAutofillHints((String) null);
|
|
|
|
}
|
|
|
|
editText.setInputType(editText.getInputType() | InputType.TYPE_TEXT_FLAG_NO_SUGGESTIONS);
|
|
|
|
editText.setTextSize(TypedValue.COMPLEX_UNIT_PT, 7); // Use a smaller font to reduce text wrap.
|
|
|
|
|
|
|
|
setOnPreferenceClickListener(this);
|
|
|
|
}
|
|
|
|
|
|
|
|
public ImportExportPreference(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
|
|
|
|
super(context, attrs, defStyleAttr, defStyleRes);
|
|
|
|
init();
|
|
|
|
}
|
|
|
|
public ImportExportPreference(Context context, AttributeSet attrs, int defStyleAttr) {
|
|
|
|
super(context, attrs, defStyleAttr);
|
|
|
|
init();
|
|
|
|
}
|
|
|
|
public ImportExportPreference(Context context, AttributeSet attrs) {
|
|
|
|
super(context, attrs);
|
|
|
|
init();
|
|
|
|
}
|
|
|
|
public ImportExportPreference(Context context) {
|
|
|
|
super(context);
|
|
|
|
init();
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
|
|
public boolean onPreferenceClick(Preference preference) {
|
|
|
|
try {
|
|
|
|
// Must set text before preparing dialog, otherwise text is non selectable if this preference is later reopened.
|
2024-01-01 16:33:20 +01:00
|
|
|
existingSettings = Setting.exportToJson(getContext());
|
2023-05-15 09:51:15 +02:00
|
|
|
getEditText().setText(existingSettings);
|
|
|
|
} catch (Exception ex) {
|
2024-01-01 16:33:20 +01:00
|
|
|
Logger.printException(() -> "showDialog failure", ex);
|
2023-05-15 09:51:15 +02:00
|
|
|
}
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
|
|
protected void onPrepareDialogBuilder(AlertDialog.Builder builder) {
|
|
|
|
try {
|
|
|
|
// Show the user the settings in JSON format.
|
|
|
|
builder.setNeutralButton(str("revanced_settings_import_copy"), (dialog, which) -> {
|
2024-01-01 16:33:20 +01:00
|
|
|
Utils.setClipboard(getEditText().getText().toString());
|
2023-05-15 09:51:15 +02:00
|
|
|
}).setPositiveButton(str("revanced_settings_import"), (dialog, which) -> {
|
|
|
|
importSettings(getEditText().getText().toString());
|
|
|
|
});
|
|
|
|
} catch (Exception ex) {
|
2024-01-01 16:33:20 +01:00
|
|
|
Logger.printException(() -> "onPrepareDialogBuilder failure", ex);
|
2023-05-15 09:51:15 +02:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
private void importSettings(String replacementSettings) {
|
|
|
|
try {
|
|
|
|
if (replacementSettings.equals(existingSettings)) {
|
|
|
|
return;
|
|
|
|
}
|
2024-01-01 16:33:20 +01:00
|
|
|
AbstractPreferenceFragment.settingImportInProgress = true;
|
|
|
|
final boolean rebootNeeded = Setting.importFromJSON(replacementSettings);
|
2023-05-15 09:51:15 +02:00
|
|
|
if (rebootNeeded) {
|
2024-01-01 16:33:20 +01:00
|
|
|
AbstractPreferenceFragment.showRestartDialog(getContext());
|
2023-05-15 09:51:15 +02:00
|
|
|
}
|
|
|
|
} catch (Exception ex) {
|
2024-01-01 16:33:20 +01:00
|
|
|
Logger.printException(() -> "importSettings failure", ex);
|
2023-05-15 09:51:15 +02:00
|
|
|
} finally {
|
2024-01-01 16:33:20 +01:00
|
|
|
AbstractPreferenceFragment.settingImportInProgress = false;
|
2023-05-15 09:51:15 +02:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|