44import android .app .AlarmManager ;
55import android .app .Application ;
66import android .app .PendingIntent ;
7+ import android .content .ClipData ;
8+ import android .content .ClipboardManager ;
79import android .content .Context ;
810import android .content .Intent ;
911import android .content .SharedPreferences ;
@@ -276,24 +278,42 @@ public void onCreatePreferences(Bundle savedInstanceState, String rootKey) {
276278 });
277279
278280 final LibsBuilder libsBuilder = new LibsBuilder ().withShowLoadingProgress (false ).withLicenseShown (true ).withAboutMinimalDesign (false );
279- Preference update = findPreference ("pref_update" );
280- update .setVisible (BuildConfig .ENABLE_AUTO_UPDATER && (BuildConfig .DEBUG || AppUpdateManager .getAppUpdateManager ().peekHasUpdate ()));
281- update .setOnPreferenceClickListener (p -> {
281+ ClipboardManager clipboard = (ClipboardManager ) requireContext ().getSystemService (Context .CLIPBOARD_SERVICE );
282+ LongClickablePreference linkClickable = findPreference ("pref_update" );
283+ linkClickable .setVisible (BuildConfig .ENABLE_AUTO_UPDATER &&
284+ (BuildConfig .DEBUG || AppUpdateManager .getAppUpdateManager ().peekHasUpdate ()));
285+ linkClickable .setOnPreferenceClickListener (p -> {
282286 devModeStep = 0 ;
283287 IntentHelper .openUrl (p .getContext (), "https://github.com/Fox2Code/FoxMagiskModuleManager/releases" );
284288 return true ;
285289 });
290+ linkClickable .setOnPreferenceLongClickListener (p -> {
291+ String toastText = requireContext ().getString (R .string .link_copied );
292+ clipboard .setPrimaryClip (ClipData .newPlainText (toastText ,
293+ "https://github.com/Fox2Code/FoxMagiskModuleManager/releases" ));
294+ Toast .makeText (requireContext (), toastText , Toast .LENGTH_SHORT ).show ();
295+ return true ;
296+ });
286297 if (BuildConfig .DEBUG || BuildConfig .ENABLE_AUTO_UPDATER ) {
287- findPreference ("pref_report_bug" ).setOnPreferenceClickListener (p -> {
298+ linkClickable = findPreference ("pref_report_bug" );
299+ linkClickable .setOnPreferenceClickListener (p -> {
288300 devModeStep = 0 ;
289301 devModeStepFirstBootIgnore = true ;
290302 IntentHelper .openUrl (p .getContext (), "https://github.com/Fox2Code/FoxMagiskModuleManager/issues" );
291303 return true ;
292304 });
305+ linkClickable .setOnPreferenceLongClickListener (p -> {
306+ String toastText = requireContext ().getString (R .string .link_copied );
307+ clipboard .setPrimaryClip (ClipData .newPlainText (toastText ,
308+ "https://github.com/Fox2Code/FoxMagiskModuleManager/issues" ));
309+ Toast .makeText (requireContext (), toastText , Toast .LENGTH_SHORT ).show ();
310+ return true ;
311+ });
293312 } else {
294313 findPreference ("pref_report_bug" ).setVisible (false );
295314 }
296- findPreference ("pref_source_code" ).setOnPreferenceClickListener (p -> {
315+ linkClickable = findPreference ("pref_source_code" );
316+ linkClickable .setOnPreferenceClickListener (p -> {
297317 if (devModeStep == 2 ) {
298318 devModeStep = 0 ;
299319 if (MainApplication .isDeveloper () && !BuildConfig .DEBUG ) {
@@ -311,11 +331,26 @@ public void onCreatePreferences(Bundle savedInstanceState, String rootKey) {
311331 IntentHelper .openUrl (p .getContext (), "https://github.com/Fox2Code/FoxMagiskModuleManager" );
312332 return true ;
313333 });
314- findPreference ("pref_support" ).setOnPreferenceClickListener (p -> {
334+ linkClickable .setOnPreferenceLongClickListener (p -> {
335+ String toastText = requireContext ().getString (R .string .link_copied );
336+ clipboard .setPrimaryClip (ClipData .newPlainText (toastText ,
337+ "https://github.com/Fox2Code/FoxMagiskModuleManager" ));
338+ Toast .makeText (requireContext (), toastText , Toast .LENGTH_SHORT ).show ();
339+ return true ;
340+ });
341+ linkClickable = findPreference ("pref_support" );
342+ linkClickable .setOnPreferenceClickListener (p -> {
315343 devModeStep = 0 ;
316344 IntentHelper .openUrl (p .getContext (), "https://t.me/Fox2Code_Chat" );
317345 return true ;
318346 });
347+ linkClickable .setOnPreferenceLongClickListener (p -> {
348+ String toastText = requireContext ().getString (R .string .link_copied );
349+ clipboard .setPrimaryClip (ClipData .newPlainText (toastText ,
350+ "https://t.me/Fox2Code_Chat" ));
351+ Toast .makeText (requireContext (), toastText , Toast .LENGTH_SHORT ).show ();
352+ return true ;
353+ });
319354 findPreference ("pref_show_licenses" ).setOnPreferenceClickListener (p -> {
320355 devModeStep = devModeStep == 1 ? 2 : 0 ;
321356 BackgroundUpdateChecker .onMainActivityResume (this .requireContext ());
@@ -629,6 +664,8 @@ private void setRepoData(String url) {
629664 }
630665
631666 private void setRepoData (final RepoData repoData , String preferenceName ) {
667+ ClipboardManager clipboard = (ClipboardManager )
668+ requireContext ().getSystemService (Context .CLIPBOARD_SERVICE );
632669 if (repoData == null || repoData .isForceHide ()) {
633670 hideRepoData (preferenceName );
634671 return ;
@@ -659,6 +696,12 @@ private void setRepoData(final RepoData repoData, String preferenceName) {
659696 }
660697 return true ;
661698 });
699+ ((LongClickablePreference ) preference ).setOnPreferenceLongClickListener (p -> {
700+ String toastText = requireContext ().getString (R .string .link_copied );
701+ clipboard .setPrimaryClip (ClipData .newPlainText (toastText , homepage ));
702+ Toast .makeText (requireContext (), toastText , Toast .LENGTH_SHORT ).show ();
703+ return true ;
704+ });
662705 } else {
663706 preference .setVisible (false );
664707 }
@@ -673,6 +716,12 @@ private void setRepoData(final RepoData repoData, String preferenceName) {
673716 IntentHelper .openUrl (getFoxActivity (this ), supportUrl );
674717 return true ;
675718 });
719+ ((LongClickablePreference ) preference ).setOnPreferenceLongClickListener (p -> {
720+ String toastText = requireContext ().getString (R .string .link_copied );
721+ clipboard .setPrimaryClip (ClipData .newPlainText (toastText , supportUrl ));
722+ Toast .makeText (requireContext (), toastText , Toast .LENGTH_SHORT ).show ();
723+ return true ;
724+ });
676725 } else {
677726 preference .setVisible (false );
678727 }
@@ -687,6 +736,12 @@ private void setRepoData(final RepoData repoData, String preferenceName) {
687736 IntentHelper .openUrl (getFoxActivity (this ), donateUrl );
688737 return true ;
689738 });
739+ ((LongClickablePreference ) preference ).setOnPreferenceLongClickListener (p -> {
740+ String toastText = requireContext ().getString (R .string .link_copied );
741+ clipboard .setPrimaryClip (ClipData .newPlainText (toastText , donateUrl ));
742+ Toast .makeText (requireContext (), toastText , Toast .LENGTH_SHORT ).show ();
743+ return true ;
744+ });
690745 } else {
691746 preference .setVisible (false );
692747 }
@@ -704,6 +759,12 @@ private void setRepoData(final RepoData repoData, String preferenceName) {
704759 }
705760 return true ;
706761 });
762+ ((LongClickablePreference ) preference ).setOnPreferenceLongClickListener (p -> {
763+ String toastText = requireContext ().getString (R .string .link_copied );
764+ clipboard .setPrimaryClip (ClipData .newPlainText (toastText , submissionUrl ));
765+ Toast .makeText (requireContext (), toastText , Toast .LENGTH_SHORT ).show ();
766+ return true ;
767+ });
707768 } else {
708769 preference .setVisible (false );
709770 }
0 commit comments