fix(Settings): Prevent duplicate dialogs on rapid preference clicks
Co-authored-by: ILoveOpenSourceApplications <117499019+iloveopensourceapplications@users.noreply.github.com>
This commit is contained in:
parent
1ebd990051
commit
0371f7164f
1 changed files with 40 additions and 3 deletions
|
|
@ -9,19 +9,24 @@ import android.content.Context;
|
|||
import android.content.Intent;
|
||||
import android.content.SharedPreferences;
|
||||
import android.os.Bundle;
|
||||
import android.os.SystemClock;
|
||||
import android.preference.EditTextPreference;
|
||||
import android.preference.ListPreference;
|
||||
import android.preference.Preference;
|
||||
import android.preference.PreferenceFragment;
|
||||
import android.preference.PreferenceGroup;
|
||||
import android.preference.PreferenceManager;
|
||||
import android.preference.PreferenceScreen;
|
||||
import android.preference.SwitchPreference;
|
||||
import android.preference.EditTextPreference;
|
||||
import android.preference.ListPreference;
|
||||
import android.util.Pair;
|
||||
import android.view.LayoutInflater;
|
||||
import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
import android.widget.Button;
|
||||
import android.widget.EditText;
|
||||
import android.widget.LinearLayout;
|
||||
import android.widget.ListView;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.annotation.Nullable;
|
||||
|
||||
|
|
@ -42,6 +47,33 @@ import app.revanced.extension.shared.ui.CustomDialog;
|
|||
@SuppressWarnings("deprecation")
|
||||
public abstract class AbstractPreferenceFragment extends PreferenceFragment {
|
||||
|
||||
private static class DebouncedListView extends ListView {
|
||||
private long lastClick;
|
||||
|
||||
public DebouncedListView(Context context) {
|
||||
super(context);
|
||||
|
||||
setId(android.R.id.list); // Required so PreferenceFragment recognizes it.
|
||||
|
||||
// Match the default layout params
|
||||
setLayoutParams(new ViewGroup.LayoutParams(
|
||||
ViewGroup.LayoutParams.MATCH_PARENT,
|
||||
ViewGroup.LayoutParams.MATCH_PARENT
|
||||
));
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean performItemClick(View view, int position, long id) {
|
||||
final long now = SystemClock.elapsedRealtime();
|
||||
if (now - lastClick < 500) {
|
||||
return true; // Ignore fast double click.
|
||||
}
|
||||
lastClick = now;
|
||||
|
||||
return super.performItemClick(view, position, id);
|
||||
}
|
||||
}
|
||||
|
||||
@SuppressLint("StaticFieldLeak")
|
||||
public static AbstractPreferenceFragment instance;
|
||||
|
||||
|
|
@ -491,6 +523,11 @@ public abstract class AbstractPreferenceFragment extends PreferenceFragment {
|
|||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
|
||||
return new DebouncedListView(getActivity());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onActivityResult(int requestCode, int resultCode, Intent data) {
|
||||
super.onActivityResult(requestCode, resultCode, data);
|
||||
|
|
@ -502,7 +539,7 @@ public abstract class AbstractPreferenceFragment extends PreferenceFragment {
|
|||
}
|
||||
|
||||
protected static void showLocalizedToast(String resourceKey, String fallbackMessage) {
|
||||
if (ResourceUtils.getIdentifier(ResourceType.STRING, resourceKey) != 0) {
|
||||
if (Utils.getResourceIdentifier(ResourceType.STRING, resourceKey) != 0) {
|
||||
Utils.showToastLong(str(resourceKey));
|
||||
} else {
|
||||
Utils.showToastLong(fallbackMessage);
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue