Allow copying links from the settings by long clicking

pull/218/head
Fox2Code 2 years ago
parent d4ab506798
commit 0f0f579d13

@ -0,0 +1,64 @@
package com.fox2code.mmm.settings;
import android.content.Context;
import android.util.AttributeSet;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.preference.Preference;
import androidx.preference.PreferenceViewHolder;
public class LongClickablePreference extends Preference {
private OnPreferenceLongClickListener onPreferenceLongClickListener;
public LongClickablePreference(@NonNull Context context, @Nullable AttributeSet attrs, int defStyleAttr, int defStyleRes) {
super(context, attrs, defStyleAttr, defStyleRes);
}
public LongClickablePreference(@NonNull Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
}
public LongClickablePreference(@NonNull Context context, @Nullable AttributeSet attrs) {
super(context, attrs);
}
public LongClickablePreference(@NonNull Context context) {
super(context);
}
@Override
public void onBindViewHolder(@NonNull PreferenceViewHolder holder) {
super.onBindViewHolder(holder);
holder.itemView.setOnLongClickListener(v -> performLongClick());
}
private boolean performLongClick() {
if (!this.isEnabled() || !this.isSelectable()) {
return false;
}
if (this.onPreferenceLongClickListener != null) {
return this.onPreferenceLongClickListener.onPreferenceLongClick(this);
}
return false;
}
public void setOnPreferenceLongClickListener(OnPreferenceLongClickListener onPreferenceLongClickListener) {
this.onPreferenceLongClickListener = onPreferenceLongClickListener;
}
public OnPreferenceLongClickListener getOnPreferenceLongClickListener() {
return this.onPreferenceLongClickListener;
}
@FunctionalInterface
public interface OnPreferenceLongClickListener {
/**
* Called when a preference has been clicked.
*
* @param preference The preference that was clicked
* @return {@code true} if the click was handled
*/
boolean onPreferenceLongClick(@NonNull Preference preference);
}
}

@ -4,6 +4,8 @@ import android.annotation.SuppressLint;
import android.app.AlarmManager;
import android.app.Application;
import android.app.PendingIntent;
import android.content.ClipData;
import android.content.ClipboardManager;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
@ -276,24 +278,42 @@ public class SettingsActivity extends FoxActivity implements LanguageActivity {
});
final LibsBuilder libsBuilder = new LibsBuilder().withShowLoadingProgress(false).withLicenseShown(true).withAboutMinimalDesign(false);
Preference update = findPreference("pref_update");
update.setVisible(BuildConfig.ENABLE_AUTO_UPDATER && (BuildConfig.DEBUG || AppUpdateManager.getAppUpdateManager().peekHasUpdate()));
update.setOnPreferenceClickListener(p -> {
ClipboardManager clipboard = (ClipboardManager) requireContext().getSystemService(Context.CLIPBOARD_SERVICE);
LongClickablePreference linkClickable = findPreference("pref_update");
linkClickable.setVisible(BuildConfig.ENABLE_AUTO_UPDATER &&
(BuildConfig.DEBUG || AppUpdateManager.getAppUpdateManager().peekHasUpdate()));
linkClickable.setOnPreferenceClickListener(p -> {
devModeStep = 0;
IntentHelper.openUrl(p.getContext(), "https://github.com/Fox2Code/FoxMagiskModuleManager/releases");
return true;
});
linkClickable.setOnPreferenceLongClickListener(p -> {
String toastText = requireContext().getString(R.string.link_copied);
clipboard.setPrimaryClip(ClipData.newPlainText(toastText,
"https://github.com/Fox2Code/FoxMagiskModuleManager/releases"));
Toast.makeText(requireContext(), toastText, Toast.LENGTH_SHORT).show();
return true;
});
if (BuildConfig.DEBUG || BuildConfig.ENABLE_AUTO_UPDATER) {
findPreference("pref_report_bug").setOnPreferenceClickListener(p -> {
linkClickable = findPreference("pref_report_bug");
linkClickable.setOnPreferenceClickListener(p -> {
devModeStep = 0;
devModeStepFirstBootIgnore = true;
IntentHelper.openUrl(p.getContext(), "https://github.com/Fox2Code/FoxMagiskModuleManager/issues");
return true;
});
linkClickable.setOnPreferenceLongClickListener(p -> {
String toastText = requireContext().getString(R.string.link_copied);
clipboard.setPrimaryClip(ClipData.newPlainText(toastText,
"https://github.com/Fox2Code/FoxMagiskModuleManager/issues"));
Toast.makeText(requireContext(), toastText, Toast.LENGTH_SHORT).show();
return true;
});
} else {
findPreference("pref_report_bug").setVisible(false);
}
findPreference("pref_source_code").setOnPreferenceClickListener(p -> {
linkClickable = findPreference("pref_source_code");
linkClickable.setOnPreferenceClickListener(p -> {
if (devModeStep == 2) {
devModeStep = 0;
if (MainApplication.isDeveloper() && !BuildConfig.DEBUG) {
@ -311,11 +331,26 @@ public class SettingsActivity extends FoxActivity implements LanguageActivity {
IntentHelper.openUrl(p.getContext(), "https://github.com/Fox2Code/FoxMagiskModuleManager");
return true;
});
findPreference("pref_support").setOnPreferenceClickListener(p -> {
linkClickable.setOnPreferenceLongClickListener(p -> {
String toastText = requireContext().getString(R.string.link_copied);
clipboard.setPrimaryClip(ClipData.newPlainText(toastText,
"https://github.com/Fox2Code/FoxMagiskModuleManager"));
Toast.makeText(requireContext(), toastText, Toast.LENGTH_SHORT).show();
return true;
});
linkClickable = findPreference("pref_support");
linkClickable.setOnPreferenceClickListener(p -> {
devModeStep = 0;
IntentHelper.openUrl(p.getContext(), "https://t.me/Fox2Code_Chat");
return true;
});
linkClickable.setOnPreferenceLongClickListener(p -> {
String toastText = requireContext().getString(R.string.link_copied);
clipboard.setPrimaryClip(ClipData.newPlainText(toastText,
"https://t.me/Fox2Code_Chat"));
Toast.makeText(requireContext(), toastText, Toast.LENGTH_SHORT).show();
return true;
});
findPreference("pref_show_licenses").setOnPreferenceClickListener(p -> {
devModeStep = devModeStep == 1 ? 2 : 0;
BackgroundUpdateChecker.onMainActivityResume(this.requireContext());
@ -629,6 +664,8 @@ public class SettingsActivity extends FoxActivity implements LanguageActivity {
}
private void setRepoData(final RepoData repoData, String preferenceName) {
ClipboardManager clipboard = (ClipboardManager)
requireContext().getSystemService(Context.CLIPBOARD_SERVICE);
if (repoData == null || repoData.isForceHide()) {
hideRepoData(preferenceName);
return;
@ -659,6 +696,12 @@ public class SettingsActivity extends FoxActivity implements LanguageActivity {
}
return true;
});
((LongClickablePreference) preference).setOnPreferenceLongClickListener(p -> {
String toastText = requireContext().getString(R.string.link_copied);
clipboard.setPrimaryClip(ClipData.newPlainText(toastText, homepage));
Toast.makeText(requireContext(), toastText, Toast.LENGTH_SHORT).show();
return true;
});
} else {
preference.setVisible(false);
}
@ -673,6 +716,12 @@ public class SettingsActivity extends FoxActivity implements LanguageActivity {
IntentHelper.openUrl(getFoxActivity(this), supportUrl);
return true;
});
((LongClickablePreference) preference).setOnPreferenceLongClickListener(p -> {
String toastText = requireContext().getString(R.string.link_copied);
clipboard.setPrimaryClip(ClipData.newPlainText(toastText, supportUrl));
Toast.makeText(requireContext(), toastText, Toast.LENGTH_SHORT).show();
return true;
});
} else {
preference.setVisible(false);
}
@ -687,6 +736,12 @@ public class SettingsActivity extends FoxActivity implements LanguageActivity {
IntentHelper.openUrl(getFoxActivity(this), donateUrl);
return true;
});
((LongClickablePreference) preference).setOnPreferenceLongClickListener(p -> {
String toastText = requireContext().getString(R.string.link_copied);
clipboard.setPrimaryClip(ClipData.newPlainText(toastText, donateUrl));
Toast.makeText(requireContext(), toastText, Toast.LENGTH_SHORT).show();
return true;
});
} else {
preference.setVisible(false);
}
@ -704,6 +759,12 @@ public class SettingsActivity extends FoxActivity implements LanguageActivity {
}
return true;
});
((LongClickablePreference) preference).setOnPreferenceLongClickListener(p -> {
String toastText = requireContext().getString(R.string.link_copied);
clipboard.setPrimaryClip(ClipData.newPlainText(toastText, submissionUrl));
Toast.makeText(requireContext(), toastText, Toast.LENGTH_SHORT).show();
return true;
});
} else {
preference.setVisible(false);
}

@ -131,6 +131,7 @@
<string name="add_repo">Add Repo</string>
<string name="remove_repo">Remove Repo</string>
<string name="custom_url">Custom url</string>
<string name="link_copied">Link copied</string>
<string name="androidacy_repo_info">This repository may display some non-intrusive advertising to cover server and development costs.</string>
<string name="backup_module_list">Backup modules</string>
<string name="restore_module_list">Restore modules</string>

@ -10,22 +10,22 @@
app:switchTextOn="@string/repo_enabled"
app:switchTextOff="@string/repo_disabled"
app:singleLineTitle="false" />
<Preference
<com.fox2code.mmm.settings.LongClickablePreference
app:key="pref_magisk_alt_repo_website"
app:icon="@drawable/ic_baseline_language_24"
app:title="@string/website"
app:singleLineTitle="false" />
<Preference
<com.fox2code.mmm.settings.LongClickablePreference
app:key="pref_magisk_alt_repo_support"
app:icon="@drawable/ic_baseline_support_24"
app:title="@string/support"
app:singleLineTitle="false" />
<Preference
<com.fox2code.mmm.settings.LongClickablePreference
app:key="pref_magisk_alt_repo_donate"
app:icon="@drawable/ic_baseline_monetization_on_24"
app:title="@string/donate"
app:singleLineTitle="false" />
<Preference
<com.fox2code.mmm.settings.LongClickablePreference
app:key="pref_magisk_alt_repo_submit"
app:icon="@drawable/ic_baseline_upload_file_24"
app:title="@string/submit_modules"
@ -61,22 +61,22 @@
app:summary="@string/androidacy_test_mode_desc"
app:dependency="pref_androidacy_repo_enabled"
app:singleLineTitle="false" />
<Preference
<com.fox2code.mmm.settings.LongClickablePreference
app:key="pref_androidacy_repo_website"
app:icon="@drawable/ic_baseline_language_24"
app:title="@string/website"
app:singleLineTitle="false" />
<Preference
<com.fox2code.mmm.settings.LongClickablePreference
app:key="pref_androidacy_repo_support"
app:icon="@drawable/ic_baseline_telegram_24"
app:title="@string/support"
app:singleLineTitle="false" />
<Preference
<com.fox2code.mmm.settings.LongClickablePreference
app:key="pref_androidacy_repo_donate"
app:icon="@drawable/ic_patreon"
app:title="@string/donate"
app:singleLineTitle="false" />
<Preference
<com.fox2code.mmm.settings.LongClickablePreference
app:key="pref_androidacy_repo_submit"
app:icon="@drawable/ic_baseline_upload_file_24"
app:title="@string/submit_modules"
@ -97,22 +97,22 @@
app:switchTextOn="@string/repo_enabled"
app:switchTextOff="@string/repo_disabled"
app:singleLineTitle="false" />
<Preference
<com.fox2code.mmm.settings.LongClickablePreference
app:key="pref_dg_magisk_repo_website"
app:icon="@drawable/ic_baseline_language_24"
app:title="@string/website"
app:singleLineTitle="false" />
<Preference
<com.fox2code.mmm.settings.LongClickablePreference
app:key="pref_dg_magisk_repo_support"
app:icon="@drawable/ic_baseline_support_24"
app:title="@string/support"
app:singleLineTitle="false" />
<Preference
<com.fox2code.mmm.settings.LongClickablePreference
app:key="pref_dg_magisk_repo_donate"
app:icon="@drawable/ic_baseline_monetization_on_24"
app:title="@string/donate"
app:singleLineTitle="false" />
<Preference
<com.fox2code.mmm.settings.LongClickablePreference
app:key="pref_dg_magisk_repo_submit"
app:icon="@drawable/ic_baseline_upload_file_24"
app:title="@string/submit_modules"
@ -127,27 +127,27 @@
app:switchTextOn="@string/repo_enabled"
app:switchTextOff="@string/repo_disabled"
app:singleLineTitle="false" />
<Preference
<com.fox2code.mmm.settings.LongClickablePreference
app:key="pref_custom_repo_0_website"
app:icon="@drawable/ic_baseline_language_24"
app:title="@string/website"
app:singleLineTitle="false" />
<Preference
<com.fox2code.mmm.settings.LongClickablePreference
app:key="pref_custom_repo_0_support"
app:icon="@drawable/ic_baseline_support_24"
app:title="@string/support"
app:singleLineTitle="false" />
<Preference
<com.fox2code.mmm.settings.LongClickablePreference
app:key="pref_custom_repo_0_donate"
app:icon="@drawable/ic_baseline_monetization_on_24"
app:title="@string/donate"
app:singleLineTitle="false" />
<Preference
<com.fox2code.mmm.settings.LongClickablePreference
app:key="pref_custom_repo_0_submit"
app:icon="@drawable/ic_baseline_upload_file_24"
app:title="@string/submit_modules"
app:singleLineTitle="false" />
<Preference
<com.fox2code.mmm.settings.LongClickablePreference
app:key="pref_custom_repo_0_delete"
app:icon="@drawable/ic_baseline_delete_forever_24"
app:title="@string/remove_repo"
@ -162,27 +162,27 @@
app:switchTextOn="@string/repo_enabled"
app:switchTextOff="@string/repo_disabled"
app:singleLineTitle="false" />
<Preference
<com.fox2code.mmm.settings.LongClickablePreference
app:key="pref_custom_repo_1_website"
app:icon="@drawable/ic_baseline_language_24"
app:title="@string/website"
app:singleLineTitle="false" />
<Preference
<com.fox2code.mmm.settings.LongClickablePreference
app:key="pref_custom_repo_1_support"
app:icon="@drawable/ic_baseline_support_24"
app:title="@string/support"
app:singleLineTitle="false" />
<Preference
<com.fox2code.mmm.settings.LongClickablePreference
app:key="pref_custom_repo_1_donate"
app:icon="@drawable/ic_baseline_monetization_on_24"
app:title="@string/donate"
app:singleLineTitle="false" />
<Preference
<com.fox2code.mmm.settings.LongClickablePreference
app:key="pref_custom_repo_1_submit"
app:icon="@drawable/ic_baseline_upload_file_24"
app:title="@string/submit_modules"
app:singleLineTitle="false" />
<Preference
<com.fox2code.mmm.settings.LongClickablePreference
app:key="pref_custom_repo_1_delete"
app:icon="@drawable/ic_baseline_delete_forever_24"
app:title="@string/remove_repo"
@ -197,27 +197,27 @@
app:switchTextOn="@string/repo_enabled"
app:switchTextOff="@string/repo_disabled"
app:singleLineTitle="false" />
<Preference
<com.fox2code.mmm.settings.LongClickablePreference
app:key="pref_custom_repo_2_website"
app:icon="@drawable/ic_baseline_language_24"
app:title="@string/website"
app:singleLineTitle="false" />
<Preference
<com.fox2code.mmm.settings.LongClickablePreference
app:key="pref_custom_repo_2_support"
app:icon="@drawable/ic_baseline_support_24"
app:title="@string/support"
app:singleLineTitle="false" />
<Preference
<com.fox2code.mmm.settings.LongClickablePreference
app:key="pref_custom_repo_2_donate"
app:icon="@drawable/ic_baseline_monetization_on_24"
app:title="@string/donate"
app:singleLineTitle="false" />
<Preference
<com.fox2code.mmm.settings.LongClickablePreference
app:key="pref_custom_repo_2_submit"
app:icon="@drawable/ic_baseline_upload_file_24"
app:title="@string/submit_modules"
app:singleLineTitle="false" />
<Preference
<com.fox2code.mmm.settings.LongClickablePreference
app:key="pref_custom_repo_2_delete"
app:icon="@drawable/ic_baseline_delete_forever_24"
app:title="@string/remove_repo"
@ -232,27 +232,27 @@
app:switchTextOn="@string/repo_enabled"
app:switchTextOff="@string/repo_disabled"
app:singleLineTitle="false" />
<Preference
<com.fox2code.mmm.settings.LongClickablePreference
app:key="pref_custom_repo_3_website"
app:icon="@drawable/ic_baseline_language_24"
app:title="@string/website"
app:singleLineTitle="false" />
<Preference
<com.fox2code.mmm.settings.LongClickablePreference
app:key="pref_custom_repo_3_support"
app:icon="@drawable/ic_baseline_support_24"
app:title="@string/support"
app:singleLineTitle="false" />
<Preference
<com.fox2code.mmm.settings.LongClickablePreference
app:key="pref_custom_repo_3_donate"
app:icon="@drawable/ic_baseline_monetization_on_24"
app:title="@string/donate"
app:singleLineTitle="false" />
<Preference
<com.fox2code.mmm.settings.LongClickablePreference
app:key="pref_custom_repo_3_submit"
app:icon="@drawable/ic_baseline_upload_file_24"
app:title="@string/submit_modules"
app:singleLineTitle="false" />
<Preference
<com.fox2code.mmm.settings.LongClickablePreference
app:key="pref_custom_repo_3_delete"
app:icon="@drawable/ic_baseline_delete_forever_24"
app:title="@string/remove_repo"
@ -267,27 +267,27 @@
app:switchTextOn="@string/repo_enabled"
app:switchTextOff="@string/repo_disabled"
app:singleLineTitle="false" />
<Preference
<com.fox2code.mmm.settings.LongClickablePreference
app:key="pref_custom_repo_4_website"
app:icon="@drawable/ic_baseline_language_24"
app:title="@string/website"
app:singleLineTitle="false" />
<Preference
<com.fox2code.mmm.settings.LongClickablePreference
app:key="pref_custom_repo_4_support"
app:icon="@drawable/ic_baseline_support_24"
app:title="@string/support"
app:singleLineTitle="false" />
<Preference
<com.fox2code.mmm.settings.LongClickablePreference
app:key="pref_custom_repo_4_donate"
app:icon="@drawable/ic_baseline_monetization_on_24"
app:title="@string/donate"
app:singleLineTitle="false" />
<Preference
<com.fox2code.mmm.settings.LongClickablePreference
app:key="pref_custom_repo_4_submit"
app:icon="@drawable/ic_baseline_upload_file_24"
app:title="@string/submit_modules"
app:singleLineTitle="false" />
<Preference
<com.fox2code.mmm.settings.LongClickablePreference
app:key="pref_custom_repo_4_delete"
app:icon="@drawable/ic_baseline_delete_forever_24"
app:title="@string/remove_repo"

@ -132,22 +132,22 @@
</PreferenceCategory>
<PreferenceCategory app:title="@string/pref_category_info">
<Preference
<com.fox2code.mmm.settings.LongClickablePreference
app:icon="@drawable/ic_baseline_system_update_24"
app:key="pref_update"
app:singleLineTitle="false"
app:title="@string/app_update" />
<Preference
<com.fox2code.mmm.settings.LongClickablePreference
app:icon="@drawable/ic_baseline_bug_report_24"
app:key="pref_report_bug"
app:singleLineTitle="false"
app:title="@string/report_bugs" />
<Preference
<com.fox2code.mmm.settings.LongClickablePreference
app:icon="@drawable/ic_github"
app:key="pref_source_code"
app:singleLineTitle="false"
app:title="@string/source_code" />
<Preference
<com.fox2code.mmm.settings.LongClickablePreference
app:icon="@drawable/ic_baseline_telegram_24"
app:key="pref_support"
app:singleLineTitle="false"

Loading…
Cancel
Save