From 10185b4877fe805f68e3d8b8d04e5b653444ff0c Mon Sep 17 00:00:00 2001 From: tibbi Date: Thu, 27 Jan 2022 15:25:11 +0100 Subject: [PATCH] adding an initial implementation of clips adapter --- .../keyboard/adapters/ClipsAdapter.kt | 54 +++++++++++++++++++ .../keyboard/views/MyKeyboardView.kt | 42 ++++++++++++--- app/src/main/res/layout/item_clip.xml | 17 ++++++ .../res/layout/keyboard_view_keyboard.xml | 14 ++++- 4 files changed, 118 insertions(+), 9 deletions(-) create mode 100644 app/src/main/kotlin/com/simplemobiletools/keyboard/adapters/ClipsAdapter.kt create mode 100644 app/src/main/res/layout/item_clip.xml diff --git a/app/src/main/kotlin/com/simplemobiletools/keyboard/adapters/ClipsAdapter.kt b/app/src/main/kotlin/com/simplemobiletools/keyboard/adapters/ClipsAdapter.kt new file mode 100644 index 0000000..9e30164 --- /dev/null +++ b/app/src/main/kotlin/com/simplemobiletools/keyboard/adapters/ClipsAdapter.kt @@ -0,0 +1,54 @@ +package com.simplemobiletools.keyboard.adapters + +import android.content.Context +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import androidx.recyclerview.widget.RecyclerView +import com.simplemobiletools.commons.extensions.removeUnderlines +import com.simplemobiletools.keyboard.R +import com.simplemobiletools.keyboard.extensions.config +import com.simplemobiletools.keyboard.models.Clip +import kotlinx.android.synthetic.main.item_clip.view.* +import java.util.* + +class ClipsAdapter(val context: Context, var clips: ArrayList, val itemClick: (clip: Clip) -> Unit) : + RecyclerView.Adapter() { + + private val layoutInflater = LayoutInflater.from(context) + private val baseConfig = context.config + private var textColor = baseConfig.textColor + + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolderr { + val view = layoutInflater.inflate(R.layout.item_clip, parent, false) + return ViewHolderr(view) + } + + override fun onBindViewHolder(holder: ViewHolderr, position: Int) { + val item = clips[position] + holder.bindView(item) { itemView -> + setupView(itemView, item) + } + } + + override fun getItemCount() = clips.size + + private fun setupView(view: View, clip: Clip) { + view.clip_value.apply { + text = clip.value + removeUnderlines() + setTextColor(textColor) + } + } + + open inner class ViewHolderr(view: View) : RecyclerView.ViewHolder(view) { + fun bindView(clip: Clip, callback: (itemView: View) -> Unit): View { + return itemView.apply { + callback(this) + setOnClickListener { + itemClick.invoke(clip) + } + } + } + } +} diff --git a/app/src/main/kotlin/com/simplemobiletools/keyboard/views/MyKeyboardView.kt b/app/src/main/kotlin/com/simplemobiletools/keyboard/views/MyKeyboardView.kt index 7ca606d..71d867b 100644 --- a/app/src/main/kotlin/com/simplemobiletools/keyboard/views/MyKeyboardView.kt +++ b/app/src/main/kotlin/com/simplemobiletools/keyboard/views/MyKeyboardView.kt @@ -29,6 +29,7 @@ import com.simplemobiletools.commons.extensions.* import com.simplemobiletools.commons.helpers.isPiePlus import com.simplemobiletools.keyboard.R import com.simplemobiletools.keyboard.activities.SettingsActivity +import com.simplemobiletools.keyboard.adapters.ClipsAdapter import com.simplemobiletools.keyboard.extensions.config import com.simplemobiletools.keyboard.helpers.* import com.simplemobiletools.keyboard.helpers.MyKeyboard.Companion.KEYCODE_DELETE @@ -36,6 +37,7 @@ import com.simplemobiletools.keyboard.helpers.MyKeyboard.Companion.KEYCODE_ENTER import com.simplemobiletools.keyboard.helpers.MyKeyboard.Companion.KEYCODE_MODE_CHANGE import com.simplemobiletools.keyboard.helpers.MyKeyboard.Companion.KEYCODE_SHIFT import com.simplemobiletools.keyboard.helpers.MyKeyboard.Companion.KEYCODE_SPACE +import com.simplemobiletools.keyboard.models.Clip import kotlinx.android.synthetic.main.keyboard_popup_keyboard.view.* import kotlinx.android.synthetic.main.keyboard_view_keyboard.view.* import java.util.* @@ -337,7 +339,7 @@ class MyKeyboardView @JvmOverloads constructor(context: Context, attrs: Attribut pinned_clipboard_items.setOnLongClickListener { context.toast(R.string.clipboard); true; } pinned_clipboard_items.setOnClickListener { vibrateIfNeeded() - mClipboardManagerHolder!!.clipboard_manager_holder.beVisible() + openClipboardManager() } clipboard_clear.setOnLongClickListener { context.toast(R.string.clear_clipboard_data); true; } @@ -351,7 +353,7 @@ class MyKeyboardView @JvmOverloads constructor(context: Context, attrs: Attribut val clipboardManager = (context.getSystemService(Context.CLIPBOARD_SERVICE) as ClipboardManager) clipboardManager.addPrimaryClipChangedListener { val clipboardContent = clipboardManager.primaryClip?.getItemAt(0)?.text?.trim() - if (clipboardContent?.trim()?.isNotEmpty() == true) { + if (clipboardContent?.isNotEmpty() == true) { handleClipboard() } } @@ -359,13 +361,11 @@ class MyKeyboardView @JvmOverloads constructor(context: Context, attrs: Attribut mClipboardManagerHolder!!.apply { clipboard_manager_close.setOnClickListener { vibrateIfNeeded() - openClipboardManager() + closeClipboardManager() } clipboard_manager_manage.setOnLongClickListener { context.toast(R.string.manage_clipboard_items); true; } - clipboard_manager_manage.setOnClickListener { - - } + clipboard_manager_manage.setOnClickListener { } } } @@ -1304,10 +1304,38 @@ class MyKeyboardView @JvmOverloads constructor(context: Context, attrs: Attribut return true } - private fun openClipboardManager() { + private fun closeClipboardManager() { mClipboardManagerHolder!!.clipboard_manager_holder.beGone() } + private fun openClipboardManager() { + mClipboardManagerHolder!!.clipboard_manager_holder.beVisible() + val clipboardManager = (context.getSystemService(Context.CLIPBOARD_SERVICE) as ClipboardManager) + val clipboardContent = clipboardManager.primaryClip?.getItemAt(0)?.text?.trim()?.toString() + if (clipboardContent?.isNotEmpty() == true) { + val clip = Clip(0, clipboardContent) + val clips = arrayListOf(clip) + setupClipsAdapter(clips) + } else { + setupClipsAdapter(arrayListOf()) + } + } + + private fun setupClipsAdapter(clips: ArrayList) { + mClipboardManagerHolder?.apply { + clipboard_content_placeholder_1.beVisibleIf(clips.isEmpty()) + clipboard_content_placeholder_2.beVisibleIf(clips.isEmpty()) + clips_list.beVisibleIf(clips.isNotEmpty()) + } + + val adapter = ClipsAdapter(context, clips) { clip -> + mOnKeyboardActionListener!!.onText(clip.value) + vibrateIfNeeded() + } + + mClipboardManagerHolder!!.clips_list.adapter = adapter + } + private fun closing() { if (mPreviewPopup.isShowing) { mPreviewPopup.dismiss() diff --git a/app/src/main/res/layout/item_clip.xml b/app/src/main/res/layout/item_clip.xml new file mode 100644 index 0000000..da1b8fd --- /dev/null +++ b/app/src/main/res/layout/item_clip.xml @@ -0,0 +1,17 @@ + + + + + + diff --git a/app/src/main/res/layout/keyboard_view_keyboard.xml b/app/src/main/res/layout/keyboard_view_keyboard.xml index 3237271..d7ae8bd 100644 --- a/app/src/main/res/layout/keyboard_view_keyboard.xml +++ b/app/src/main/res/layout/keyboard_view_keyboard.xml @@ -169,7 +169,8 @@ android:paddingStart="@dimen/big_margin" android:paddingEnd="@dimen/big_margin" android:text="@string/manage_clipboard_empty" - android:textSize="@dimen/bigger_text_size" /> + android:textSize="@dimen/bigger_text_size" + android:visibility="gone" /> + android:textSize="@dimen/normal_text_size" + android:visibility="gone" /> + +