mirror of
				https://github.com/mihonapp/mihon.git
				synced 2025-10-30 22:07:57 +01:00 
			
		
		
		
	Copy to clipboard when long pressing tracking title (closes #3163)
(cherry picked from commit 97aed045e6)
			
			
This commit is contained in:
		| @@ -37,6 +37,7 @@ class TrackAdapter(controller: TrackController) : RecyclerView.Adapter<TrackHold | ||||
|     interface OnClickListener { | ||||
|         fun onLogoClick(position: Int) | ||||
|         fun onSetClick(position: Int) | ||||
|         fun onTitleLongClick(position: Int) | ||||
|         fun onStatusClick(position: Int) | ||||
|         fun onChaptersClick(position: Int) | ||||
|         fun onScoreClick(position: Int) | ||||
|   | ||||
| @@ -12,6 +12,7 @@ import eu.kanade.tachiyomi.data.track.model.TrackSearch | ||||
| import eu.kanade.tachiyomi.databinding.TrackControllerBinding | ||||
| import eu.kanade.tachiyomi.ui.base.controller.NucleusController | ||||
| import eu.kanade.tachiyomi.ui.manga.MangaController | ||||
| import eu.kanade.tachiyomi.util.system.copyToClipboard | ||||
| import eu.kanade.tachiyomi.util.system.toast | ||||
| import kotlinx.coroutines.flow.launchIn | ||||
| import kotlinx.coroutines.flow.onEach | ||||
| @@ -113,6 +114,12 @@ class TrackController(val fromAllInOne: Boolean = false, val manga: Manga? = nul | ||||
|         TrackSearchDialog(this, item.service).showDialog(router, TAG_SEARCH_CONTROLLER) | ||||
|     } | ||||
|  | ||||
|     override fun onTitleLongClick(position: Int) { | ||||
|         adapter?.getItem(position)?.track?.title?.let { | ||||
|             activity?.copyToClipboard(it, it) | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     override fun onStatusClick(position: Int) { | ||||
|         val item = adapter?.getItem(position) ?: return | ||||
|         if (item.track == null) return | ||||
|   | ||||
| @@ -35,6 +35,10 @@ class TrackHolder(view: View, adapter: TrackAdapter) : BaseViewHolder(view) { | ||||
|         logo_container.setOnClickListener { listener.onLogoClick(bindingAdapterPosition) } | ||||
|         track_set.setOnClickListener { listener.onSetClick(bindingAdapterPosition) } | ||||
|         track_title.setOnClickListener { listener.onSetClick(bindingAdapterPosition) } | ||||
|         track_title.setOnLongClickListener { | ||||
|             listener.onTitleLongClick(bindingAdapterPosition) | ||||
|             true | ||||
|         } | ||||
|         track_status.setOnClickListener { listener.onStatusClick(bindingAdapterPosition) } | ||||
|         track_chapters.setOnClickListener { listener.onChaptersClick(bindingAdapterPosition) } | ||||
|         track_score.setOnClickListener { listener.onScoreClick(bindingAdapterPosition) } | ||||
|   | ||||
| @@ -1,27 +1,7 @@ | ||||
| package eu.kanade.tachiyomi.util.system | ||||
|  | ||||
| import android.app.Activity | ||||
| import android.content.ClipData | ||||
| import android.content.ClipboardManager | ||||
| import android.content.Context | ||||
| import android.os.Build | ||||
| import eu.kanade.tachiyomi.R | ||||
| import eu.kanade.tachiyomi.util.lang.truncateCenter | ||||
|  | ||||
| /** | ||||
|  * Copies a string to clipboard | ||||
|  * | ||||
|  * @param label Label to show to the user describing the content | ||||
|  * @param content the actual text to copy to the board | ||||
|  */ | ||||
| fun Activity.copyToClipboard(label: String, content: String) { | ||||
|     if (content.isBlank()) return | ||||
|  | ||||
|     val clipboard = getSystemService(Context.CLIPBOARD_SERVICE) as ClipboardManager | ||||
|     clipboard.setPrimaryClip(ClipData.newPlainText(label, content)) | ||||
|  | ||||
|     toast(getString(R.string.copied_to_clipboard, content.truncateCenter(50))) | ||||
| } | ||||
|  | ||||
| /** | ||||
|  * Checks whether if the device has a display cutout (i.e. notch, camera cutout, etc.). | ||||
|   | ||||
| @@ -4,6 +4,8 @@ import android.app.ActivityManager | ||||
| import android.app.Notification | ||||
| import android.app.NotificationManager | ||||
| import android.content.BroadcastReceiver | ||||
| import android.content.ClipData | ||||
| import android.content.ClipboardManager | ||||
| import android.content.Context | ||||
| import android.content.Intent | ||||
| import android.content.IntentFilter | ||||
| @@ -24,6 +26,7 @@ import androidx.core.content.ContextCompat | ||||
| import androidx.localbroadcastmanager.content.LocalBroadcastManager | ||||
| import com.nononsenseapps.filepicker.FilePickerActivity | ||||
| import eu.kanade.tachiyomi.R | ||||
| import eu.kanade.tachiyomi.util.lang.truncateCenter | ||||
| import eu.kanade.tachiyomi.widget.CustomLayoutPickerActivity | ||||
| import kotlin.math.roundToInt | ||||
| import kotlinx.coroutines.Dispatchers | ||||
| @@ -54,6 +57,21 @@ fun Context.toast(text: String?, duration: Int = Toast.LENGTH_SHORT) { | ||||
|     } | ||||
| } | ||||
|  | ||||
| /** | ||||
|  * Copies a string to clipboard | ||||
|  * | ||||
|  * @param label Label to show to the user describing the content | ||||
|  * @param content the actual text to copy to the board | ||||
|  */ | ||||
| fun Context.copyToClipboard(label: String, content: String) { | ||||
|     if (content.isBlank()) return | ||||
|  | ||||
|     val clipboard = getSystemService(Context.CLIPBOARD_SERVICE) as ClipboardManager | ||||
|     clipboard.setPrimaryClip(ClipData.newPlainText(label, content)) | ||||
|  | ||||
|     toast(getString(R.string.copied_to_clipboard, content.truncateCenter(50))) | ||||
| } | ||||
|  | ||||
| /** | ||||
|  * Helper method to create a notification builder. | ||||
|  * | ||||
|   | ||||
		Reference in New Issue
	
	Block a user