diff --git a/app/build.gradle b/app/build.gradle
index 98dc757..dab0edc 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -13,8 +13,8 @@ android {
applicationId "com.fox2code.mmm"
minSdk 21
targetSdk 33
- versionCode 58
- versionName "0.6.6"
+ versionCode 59
+ versionName "0.6.7"
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
}
@@ -162,7 +162,7 @@ dependencies {
implementation 'androidx.recyclerview:recyclerview:1.2.1'
implementation 'androidx.swiperefreshlayout:swiperefreshlayout:1.1.0'
implementation 'androidx.webkit:webkit:1.5.0'
- implementation 'com.google.android.material:material:1.6.1'
+ implementation 'com.google.android.material:material:1.7.0'
implementation "dev.rikka.rikkax.layoutinflater:layoutinflater:1.2.0"
implementation "dev.rikka.rikkax.insets:insets:1.3.0"
implementation 'com.github.Dimezis:BlurView:version-2.0.2'
diff --git a/app/src/main/java/com/fox2code/mmm/androidacy/AndroidacyRepoData.java b/app/src/main/java/com/fox2code/mmm/androidacy/AndroidacyRepoData.java
index 57bccf0..961c170 100644
--- a/app/src/main/java/com/fox2code/mmm/androidacy/AndroidacyRepoData.java
+++ b/app/src/main/java/com/fox2code/mmm/androidacy/AndroidacyRepoData.java
@@ -103,10 +103,10 @@ public final class AndroidacyRepoData extends RepoData {
} catch (Exception e) {
Log.e(TAG, "Failed to ping server", e);
// Inform user
- if (!HttpException.shouldTimeout(e)) {
+ /*if (!HttpException.shouldTimeout(e)) {
UiThreadHandler.run(() -> Toast.makeText(MainApplication.getINSTANCE(),
R.string.androidacy_server_down, Toast.LENGTH_SHORT).show());
- }
+ }*/
return false;
}
long time = System.currentTimeMillis();
diff --git a/app/src/main/java/com/fox2code/mmm/settings/LongClickablePreference.java b/app/src/main/java/com/fox2code/mmm/settings/LongClickablePreference.java
new file mode 100644
index 0000000..12b48cf
--- /dev/null
+++ b/app/src/main/java/com/fox2code/mmm/settings/LongClickablePreference.java
@@ -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);
+ }
+}
diff --git a/app/src/main/java/com/fox2code/mmm/settings/SettingsActivity.java b/app/src/main/java/com/fox2code/mmm/settings/SettingsActivity.java
index 79e54bf..b07dcc4 100644
--- a/app/src/main/java/com/fox2code/mmm/settings/SettingsActivity.java
+++ b/app/src/main/java/com/fox2code/mmm/settings/SettingsActivity.java
@@ -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());
@@ -631,6 +666,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;
@@ -661,6 +698,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);
}
@@ -675,6 +718,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);
}
@@ -689,6 +738,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);
}
@@ -706,6 +761,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);
}
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index b72f45e..6be519d 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -131,6 +131,7 @@
Add Repo
Remove Repo
Custom url
+ Link copied
This repository may display some non-intrusive advertising to cover server and development costs.
Backup modules
Restore modules
diff --git a/app/src/main/res/xml/repo_preferences.xml b/app/src/main/res/xml/repo_preferences.xml
index 0e43d3d..8d3931f 100644
--- a/app/src/main/res/xml/repo_preferences.xml
+++ b/app/src/main/res/xml/repo_preferences.xml
@@ -10,22 +10,22 @@
app:switchTextOn="@string/repo_enabled"
app:switchTextOff="@string/repo_disabled"
app:singleLineTitle="false" />
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-