diff --git a/V2rayNG/app/src/main/java/xyz/zarazaex/olc/AppConfig.kt b/V2rayNG/app/src/main/java/xyz/zarazaex/olc/AppConfig.kt index 4662cbca..258a97a0 100644 --- a/V2rayNG/app/src/main/java/xyz/zarazaex/olc/AppConfig.kt +++ b/V2rayNG/app/src/main/java/xyz/zarazaex/olc/AppConfig.kt @@ -73,6 +73,7 @@ object AppConfig { const val PREF_HEV_TUNNEL_LOGLEVEL = "pref_hev_tunnel_loglevel" const val PREF_HEV_TUNNEL_RW_TIMEOUT = "pref_hev_tunnel_rw_timeout_v2" const val PREF_AUTO_SORT_AFTER_TEST = "pref_auto_sort_after_test" + const val PREF_SHOW_COPY_BUTTON = "pref_show_copy_button" /** Cache keys. */ const val CACHE_SUBSCRIPTION_ID = "cache_subscription_id" diff --git a/V2rayNG/app/src/main/java/xyz/zarazaex/olc/contracts/MainAdapterListener.kt b/V2rayNG/app/src/main/java/xyz/zarazaex/olc/contracts/MainAdapterListener.kt index 0d20907b..0615e0e4 100644 --- a/V2rayNG/app/src/main/java/xyz/zarazaex/olc/contracts/MainAdapterListener.kt +++ b/V2rayNG/app/src/main/java/xyz/zarazaex/olc/contracts/MainAdapterListener.kt @@ -10,4 +10,6 @@ interface MainAdapterListener :BaseAdapterListener { fun onShare(guid: String, profile: ProfileItem, position: Int, more: Boolean) + fun onCopyToClipboard(guid: String) + } \ No newline at end of file diff --git a/V2rayNG/app/src/main/java/xyz/zarazaex/olc/ui/GroupServerFragment.kt b/V2rayNG/app/src/main/java/xyz/zarazaex/olc/ui/GroupServerFragment.kt index 0a605dee..edbfb0b6 100644 --- a/V2rayNG/app/src/main/java/xyz/zarazaex/olc/ui/GroupServerFragment.kt +++ b/V2rayNG/app/src/main/java/xyz/zarazaex/olc/ui/GroupServerFragment.kt @@ -12,6 +12,7 @@ import androidx.lifecycle.lifecycleScope import androidx.recyclerview.widget.GridLayoutManager import androidx.recyclerview.widget.ItemTouchHelper import androidx.swiperefreshlayout.widget.SwipeRefreshLayout +import com.google.android.material.snackbar.Snackbar import xyz.zarazaex.olc.AppConfig import xyz.zarazaex.olc.R import xyz.zarazaex.olc.contracts.MainAdapterListener @@ -137,9 +138,7 @@ class GroupServerFragment : BaseFragment(), * @param guid The server unique identifier */ private fun share2Clipboard(guid: String) { - if (AngConfigManager.share2Clipboard(ownerActivity, guid) == 0) { - ownerActivity.toastSuccess(R.string.toast_success) - } else { + if (AngConfigManager.share2Clipboard(ownerActivity, guid) != 0) { ownerActivity.toastError(R.string.toast_failure) } } @@ -264,6 +263,10 @@ class GroupServerFragment : BaseFragment(), setSelectServer(guid) } + override fun onCopyToClipboard(guid: String) { + share2Clipboard(guid) + } + override fun onShare(guid: String, profile: ProfileItem, position: Int, more: Boolean) { val isCustom = profile.configType == EConfigType.CUSTOM || profile.configType == EConfigType.POLICYGROUP diff --git a/V2rayNG/app/src/main/java/xyz/zarazaex/olc/ui/MainRecyclerAdapter.kt b/V2rayNG/app/src/main/java/xyz/zarazaex/olc/ui/MainRecyclerAdapter.kt index 9d953dbe..5677e4bf 100644 --- a/V2rayNG/app/src/main/java/xyz/zarazaex/olc/ui/MainRecyclerAdapter.kt +++ b/V2rayNG/app/src/main/java/xyz/zarazaex/olc/ui/MainRecyclerAdapter.kt @@ -33,6 +33,8 @@ class MainRecyclerAdapter( private val doubleColumnDisplay = MmkvManager.decodeSettingsBool(AppConfig.PREF_DOUBLE_COLUMN_DISPLAY, false) + private val showCopyButton = + MmkvManager.decodeSettingsBool(AppConfig.PREF_SHOW_COPY_BUTTON, false) private var data: MutableList = mutableListOf() private var recyclerView: RecyclerView? = null @@ -200,6 +202,11 @@ class MainRecyclerAdapter( mainViewModel.reloadServerList() } + holder.itemMainBinding.ivCopy.visibility = if (showCopyButton) View.VISIBLE else View.GONE + holder.itemMainBinding.ivCopy.setOnClickListener { + adapterListener?.onCopyToClipboard(guid) + } + holder.itemMainBinding.infoContainer.setOnClickListener { adapterListener?.onSelectServer(guid) } diff --git a/V2rayNG/app/src/main/res/drawable/ic_copy.xml b/V2rayNG/app/src/main/res/drawable/ic_copy.xml index 380c8783..067930d3 100644 --- a/V2rayNG/app/src/main/res/drawable/ic_copy.xml +++ b/V2rayNG/app/src/main/res/drawable/ic_copy.xml @@ -4,6 +4,6 @@ android:viewportWidth="24.0" android:viewportHeight="24.0"> diff --git a/V2rayNG/app/src/main/res/layout/item_recycler_main.xml b/V2rayNG/app/src/main/res/layout/item_recycler_main.xml index 0018564f..d56d20d7 100644 --- a/V2rayNG/app/src/main/res/layout/item_recycler_main.xml +++ b/V2rayNG/app/src/main/res/layout/item_recycler_main.xml @@ -99,16 +99,35 @@ - + android:orientation="vertical" + android:gravity="end"> + + + + + + diff --git a/V2rayNG/app/src/main/res/values-ru/strings.xml b/V2rayNG/app/src/main/res/values-ru/strings.xml index 7d2bd222..2d50d9cb 100644 --- a/V2rayNG/app/src/main/res/values-ru/strings.xml +++ b/V2rayNG/app/src/main/res/values-ru/strings.xml @@ -236,6 +236,9 @@ Общая вкладка групп Показывать дополнительную вкладку со всеми профилями групп + + Кнопка копирования + Показывать кнопку копирования конфигурации сервера в буфер обмена Обратная связь Предложить улучшение или сообщить об ошибке на GitHub diff --git a/V2rayNG/app/src/main/res/values/strings.xml b/V2rayNG/app/src/main/res/values/strings.xml index 6ac0d80d..52de2e01 100644 --- a/V2rayNG/app/src/main/res/values/strings.xml +++ b/V2rayNG/app/src/main/res/values/strings.xml @@ -160,6 +160,9 @@ Auto sort after testing Test results may not be accurate; + Show copy button + Show button to copy server configuration to clipboard + Mux Settings Enable Mux Faster, but it may cause unstable connectivity\nCustomize how to handle TCP, UDP and QUIC below diff --git a/V2rayNG/app/src/main/res/xml/pref_settings.xml b/V2rayNG/app/src/main/res/xml/pref_settings.xml index af1d5f72..ac481018 100644 --- a/V2rayNG/app/src/main/res/xml/pref_settings.xml +++ b/V2rayNG/app/src/main/res/xml/pref_settings.xml @@ -28,6 +28,12 @@ android:summary="@string/summary_pref_group_all_display" android:title="@string/title_pref_group_all_display" /> + +