Skip to content
This repository was archived by the owner on May 30, 2025. It is now read-only.

Commit ae7152a

Browse files
committed
Merge branch 'feature/long-press-copy-url'
2 parents c77b5df + ba36347 commit ae7152a

File tree

4 files changed

+27
-5
lines changed

4 files changed

+27
-5
lines changed

mastodon/src/main/AndroidManifest.xml

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,8 @@
44

55
<uses-permission android:name="android.permission.INTERNET"/>
66
<uses-permission android:name="android.permission.FOREGROUND_SERVICE"/>
7-
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" android:maxSdkVersion="28"/>
7+
<uses-permission android:name="android.permission.VIBRATE" />
8+
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" android:maxSdkVersion="28"/>
89
<uses-permission android:name="${applicationId}.permission.C2D_MESSAGE"/>
910
<uses-permission android:name="com.google.android.c2dm.permission.RECEIVE"/>
1011
<uses-permission android:name="android.permission.POST_NOTIFICATIONS"/>

mastodon/src/main/java/org/joinmastodon/android/fragments/ProfileFragment.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
import android.app.Fragment;
1111
import android.content.ClipData;
1212
import android.content.ClipboardManager;
13+
import android.content.Context;
1314
import android.content.Intent;
1415
import android.content.res.Configuration;
1516
import android.graphics.Outline;
@@ -18,6 +19,8 @@
1819
import android.net.Uri;
1920
import android.os.Build;
2021
import android.os.Bundle;
22+
import android.os.VibrationEffect;
23+
import android.os.Vibrator;
2124
import android.text.SpannableStringBuilder;
2225
import android.text.TextUtils;
2326
import android.text.style.ImageSpan;
@@ -288,10 +291,7 @@ public void getOutline(View view, Outline outline){
288291
if(!username.contains("@")){
289292
username+="@"+AccountSessionManager.getInstance().getAccount(accountID).domain;
290293
}
291-
getActivity().getSystemService(ClipboardManager.class).setPrimaryClip(ClipData.newPlainText(null, "@"+username));
292-
if(Build.VERSION.SDK_INT<Build.VERSION_CODES.TIRAMISU){ // Android 13+ SystemUI shows its own thing when you put things into the clipboard
293-
Toast.makeText(getActivity(), R.string.text_copied, Toast.LENGTH_SHORT).show();
294-
}
294+
UiUtils.copyText(getActivity(), '@'+username);
295295
return true;
296296
});
297297

mastodon/src/main/java/org/joinmastodon/android/ui/displayitems/FooterStatusDisplayItem.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -102,6 +102,7 @@ public Holder(Activity activity, ViewGroup parent){
102102
bookmark.setAccessibilityDelegate(buttonAccessibilityDelegate);
103103
share.setOnTouchListener(this::onButtonTouch);
104104
share.setOnClickListener(this::onShareClick);
105+
share.setOnLongClickListener(this::onShareLongClick);
105106
share.setAccessibilityDelegate(buttonAccessibilityDelegate);
106107
}
107108

@@ -180,6 +181,11 @@ private void onShareClick(View v){
180181
v.getContext().startActivity(Intent.createChooser(intent, v.getContext().getString(R.string.share_toot_title)));
181182
}
182183

184+
private boolean onShareLongClick(View v){
185+
UiUtils.copyText(v.getContext(), item.status.url);
186+
return true;
187+
}
188+
183189
private int descriptionForId(int id){
184190
if(id==R.id.reply_btn)
185191
return R.string.button_reply;

mastodon/src/main/java/org/joinmastodon/android/ui/utils/UiUtils.java

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,8 @@
33
import android.annotation.SuppressLint;
44
import android.app.Activity;
55
import android.content.ActivityNotFoundException;
6+
import android.content.ClipData;
7+
import android.content.ClipboardManager;
68
import android.content.Context;
79
import android.content.Intent;
810
import android.content.res.ColorStateList;
@@ -19,6 +21,8 @@
1921
import android.os.Bundle;
2022
import android.os.Handler;
2123
import android.os.Looper;
24+
import android.os.VibrationEffect;
25+
import android.os.Vibrator;
2226
import android.provider.OpenableColumns;
2327
import android.provider.Settings;
2428
import android.text.SpannableStringBuilder;
@@ -776,4 +780,15 @@ public void onError(ErrorResponse error){
776780
}
777781
launchWebBrowser(context, url);
778782
}
783+
784+
public static void copyText(Context context, String text) {
785+
context.getSystemService(ClipboardManager.class).setPrimaryClip(ClipData.newPlainText(null, text));
786+
// fork: always show toast because MIUI doesn't play along
787+
// if(Build.VERSION.SDK_INT<Build.VERSION_CODES.TIRAMISU){ // Android 13+ SystemUI shows its own thing when you put things into the clipboard
788+
Toast.makeText(context, R.string.text_copied, Toast.LENGTH_SHORT).show();
789+
// }
790+
Vibrator vibrator = (Vibrator) context.getSystemService(Context.VIBRATOR_SERVICE);
791+
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) vibrator.vibrate(VibrationEffect.createOneShot(50, VibrationEffect.DEFAULT_AMPLITUDE));
792+
else vibrator.vibrate(50);
793+
}
779794
}

0 commit comments

Comments
 (0)