Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Feature/share sub #2255

Merged
merged 3 commits into from May 7, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
Expand Up @@ -228,7 +228,7 @@ class MainRecyclerAdapter(val activity: MainActivity) : RecyclerView.Adapter<Mai
BaseViewHolder(itemMainBinding.root), ItemTouchHelperViewHolder

class FooterViewHolder(val itemFooterBinding: ItemRecyclerFooterBinding) :
BaseViewHolder(itemFooterBinding.root), ItemTouchHelperViewHolder
BaseViewHolder(itemFooterBinding.root)

override fun onItemDismiss(position: Int) {
val guid = mActivity.mainViewModel.serversCache.getOrNull(position)?.guid ?: return
Expand Down
Expand Up @@ -2,20 +2,34 @@ package com.v2ray.ang.ui

import android.content.Intent
import android.graphics.Color
import android.text.TextUtils
import android.view.LayoutInflater
import android.view.View
import androidx.recyclerview.widget.RecyclerView
import android.view.ViewGroup
import androidx.appcompat.app.AlertDialog
import com.google.gson.Gson
import com.tencent.mmkv.MMKV
import com.v2ray.ang.R
import com.v2ray.ang.databinding.ItemQrcodeBinding
import com.v2ray.ang.databinding.ItemRecyclerSubSettingBinding
import com.v2ray.ang.dto.EConfigType
import com.v2ray.ang.extension.toast
import com.v2ray.ang.util.AngConfigManager
import com.v2ray.ang.util.MmkvManager
import com.v2ray.ang.util.QRCodeDecoder
import com.v2ray.ang.util.Utils

class SubSettingRecyclerAdapter(val activity: SubSettingActivity) : RecyclerView.Adapter<SubSettingRecyclerAdapter.MainViewHolder>() {
class SubSettingRecyclerAdapter(val activity: SubSettingActivity) :
RecyclerView.Adapter<SubSettingRecyclerAdapter.MainViewHolder>() {

private var mActivity: SubSettingActivity = activity
private val subStorage by lazy { MMKV.mmkvWithID(MmkvManager.ID_SUB, MMKV.MULTI_PROCESS_MODE) }

private val share_method: Array<out String> by lazy {
mActivity.resources.getStringArray(R.array.share_sub_method)
}

override fun getItemCount() = mActivity.subscriptions.size

override fun onBindViewHolder(holder: MainViewHolder, position: Int) {
Expand All @@ -31,7 +45,8 @@ class SubSettingRecyclerAdapter(val activity: SubSettingActivity) : RecyclerView
holder.itemView.setBackgroundColor(Color.TRANSPARENT)

holder.itemSubSettingBinding.layoutEdit.setOnClickListener {
mActivity.startActivity(Intent(mActivity, SubEditActivity::class.java)
mActivity.startActivity(
Intent(mActivity, SubEditActivity::class.java)
.putExtra("subId", subId)
)
}
Expand All @@ -40,11 +55,51 @@ class SubSettingRecyclerAdapter(val activity: SubSettingActivity) : RecyclerView
subStorage?.encode(subId, Gson().toJson(subItem))
notifyItemChanged(position)
}

if (TextUtils.isEmpty(subItem.url)) {
holder.itemSubSettingBinding.layoutShare.visibility = View.INVISIBLE
} else {
holder.itemSubSettingBinding.layoutShare.setOnClickListener {
AlertDialog.Builder(mActivity)
.setItems(share_method.asList().toTypedArray()) { _, i ->
try {
when (i) {
0 -> {
val ivBinding =
ItemQrcodeBinding.inflate(LayoutInflater.from(mActivity))
ivBinding.ivQcode.setImageBitmap(
QRCodeDecoder.createQRCode(
subItem.url

)
)
AlertDialog.Builder(mActivity).setView(ivBinding.root).show()
}

1 -> {
Utils.setClipboard(mActivity, subItem.url)
}

else -> mActivity.toast("else")
}
} catch (e: Exception) {
e.printStackTrace()
}
}.show()
}
}
}

override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): MainViewHolder {
return MainViewHolder(ItemRecyclerSubSettingBinding.inflate(LayoutInflater.from(parent.context), parent, false))
return MainViewHolder(
ItemRecyclerSubSettingBinding.inflate(
LayoutInflater.from(parent.context),
parent,
false
)
)
}

class MainViewHolder(val itemSubSettingBinding: ItemRecyclerSubSettingBinding) : RecyclerView.ViewHolder(itemSubSettingBinding.root)
class MainViewHolder(val itemSubSettingBinding: ItemRecyclerSubSettingBinding) :
RecyclerView.ViewHolder(itemSubSettingBinding.root)
}
2 changes: 1 addition & 1 deletion V2rayNG/app/src/main/res/layout/activity_main.xml
Expand Up @@ -50,7 +50,7 @@
android:layout_width="match_parent"
android:layout_height="@dimen/connection_test_height"
android:background="?attr/colorPrimary"
android:gravity="center|left"
android:gravity="center|start"
android:nextFocusRight="@+id/fab"
android:clickable="true"
android:focusable="true"
Expand Down
3 changes: 2 additions & 1 deletion V2rayNG/app/src/main/res/layout/activity_sub_setting.xml
Expand Up @@ -16,7 +16,8 @@
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/recycler_view"
android:layout_width="match_parent"
android:layout_height="match_parent" />
android:layout_height="match_parent"
tools:listitem="@layout/item_recycler_sub_setting"/>

</androidx.coordinatorlayout.widget.CoordinatorLayout>
</RelativeLayout>
5 changes: 3 additions & 2 deletions V2rayNG/app/src/main/res/layout/item_recycler_sub_setting.xml
Expand Up @@ -73,12 +73,13 @@
android:gravity="center"
android:orientation="vertical"
android:padding="@dimen/layout_margin_spacing"
android:visibility="invisible">
>

<ImageView
android:layout_width="@dimen/png_height"
android:layout_height="@dimen/png_height"
android:src="@drawable/ic_share_black_24dp" />
android:src="@drawable/ic_share_black_24dp"
app:tint="?attr/colorMainText"/>

</LinearLayout>

Expand Down
19 changes: 12 additions & 7 deletions V2rayNG/app/src/main/res/values-fa/strings.xml
Expand Up @@ -147,29 +147,29 @@
<string name="title_pref_confirm_remove">تایید حذف پرونده پیکربندی</string>
<string name="summary_pref_confirm_remove">آیا برای حذف پرونده پیکربندی نیاز به تایید دوم توسط کاربر است</string>

<string name="title_pref_start_scan_immediate">Start scanning immediately</string>
<string name="summary_pref_start_scan_immediate">Open the camera to scan immediately at startup, otherwise you can choose to scan the code or select a photo in the toolbar</string>
<string name="title_pref_start_scan_immediate">فورا اسکن را شروع کن</string>
<string name="summary_pref_start_scan_immediate">دوربین را برای اسکن بلافاصله در هنگام راه اندازی باز کنید، در غیر این صورت می توانید کد را اسکن کنید یا عکسی را در نوار ابزار انتخاب کنید.</string>

<string name="title_pref_feedback">بازخورد</string>
<string name="summary_pref_feedback">بهبودهای بازخورد یا اشکالات در گیت‌هاب</string>
<string name="summary_pref_tg_group">عضویت در گروه تلگرام</string>
<string name="toast_tg_app_not_found">برنامه تلگرام پیدا نشد</string>

<string name="title_pref_promotion">تبلیغات،</string>
<string name="title_pref_promotion">تبلیغات</string>
<string name="summary_pref_promotion">تبلیغات، برای جزئیات بیشتر کلیک کنید (کمک مالی کنید تا حذف شود)</string>

<string name="title_core_loglevel">سطح گزارشات</string>
<string name="title_mode">حالت</string>
<string name="title_mode_help">برای راهنمایی بیشتر روی این متن، کلیک کنید</string>
<string name="title_language">زبان</string>
<string name="title_ui_settings">UI settings</string>
<string name="title_ui_settings">تنظیمات رابط کاربری</string>

<string name="title_logcat">گزارشات</string>
<string name="logcat_copy">کپی</string>
<string name="logcat_clear">پاک کردن</string>
<string name="title_service_restart">راه‌اندازی مجدد خدمات</string>
<string name="title_del_all_config">حذف تمام پیکربندی</string>
<string name="title_del_duplicate_config">Delete duplicate config</string>
<string name="title_del_all_config">حذف تمام پیکربندی ها</string>
<string name="title_del_duplicate_config">حذف پیکربندی های تکراری</string>
<string name="title_del_invalid_config">تنظیمات نامعتبر را حذف کنید (ابتدا آزمایش کنید)</string>
<string name="title_export_all">خروجی گرفتن پیکربندی‌های غیرسفارشی در کلیپ‌بورد</string>
<string name="title_sub_setting">تنظیمات گروه‌ی اشتراک</string>
Expand All @@ -181,7 +181,7 @@
<string name="title_real_ping_all_server">تاخیر واقعی همه پیکربندی</string>
<string name="title_user_asset_setting">پرونده‌های دارایی جغرافیا</string>
<string name="title_sort_by_test_results">مرتب‌سازی بر اساس نتایج آزمایش</string>
<string name="title_filter_config">فیلتر پرونده پیکربندی</string>
<string name="title_filter_config">فیلتر پرونده پیکربندی ها</string>
<string name="filter_config_all">همه گروه‌های اشتراک</string>
<string name="title_del_duplicate_config_count">Delete %d duplicate configurations</string>

Expand Down Expand Up @@ -211,6 +211,11 @@
<item>خروجی گرفتن پیکربندی کامل در کلیپ‌بورد</item>
</string-array>

<string-array name="share_sub_method">
<item>QRcode</item>
<item>خروجی گرفتن در کلیپ‌بورد</item>
</string-array>

<string-array name="routing_tag">
<item>نشانی اینترنتی یا آی‌پی پروکسی</item>
<item>نشانی اینترنتی یا آی‌پی مستقیم</item>
Expand Down
15 changes: 15 additions & 0 deletions V2rayNG/app/src/main/res/values-night/styles.xml
@@ -0,0 +1,15 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>

<style name="AppThemeDayNight" parent="Theme.AppCompat.DayNight.DarkActionBar">

<item name="colorPrimary">@color/colorPrimary</item>
<item name="colorPrimaryDark">@color/colorPrimaryDark</item>
<item name="colorAccent">@color/colorAccent</item>
<item name="colorMainBg">@color/colorBg</item>
<item name="colorMainText">@color/colorText</item>
<item name="android:statusBarColor">@color/colorPrimary</item>
<item name="android:navigationBarColor">@color/colorPrimary</item>
</style>

</resources>
5 changes: 5 additions & 0 deletions V2rayNG/app/src/main/res/values-ru/strings.xml
Expand Up @@ -216,6 +216,11 @@
<item>Экспорт всего профиля в буфер обмена</item>
</string-array>

<string-array name="share_sub_method">
<item>QR-код</item>
<item>Экспорт в буфер обмена</item>
</string-array>

<string-array name="routing_tag">
<item>Проксируемые</item>
<item>Прямые</item>
Expand Down
5 changes: 5 additions & 0 deletions V2rayNG/app/src/main/res/values-vi/strings.xml
Expand Up @@ -210,6 +210,11 @@
<item>Sao chép thành cấu hình tùy chỉnh</item>
</string-array>

<string-array name="share_sub_method">
<item>Xuất ra mã QR (Chụp màn hình để lưu)</item>
<item>Sao chép cấu hình này</item>
</string-array>

<string-array name="routing_tag">
<item>Proxy URL hoặc IP</item>
<item>Direct URL hoặc IP</item>
Expand Down
6 changes: 6 additions & 0 deletions V2rayNG/app/src/main/res/values-zh-rCN/strings.xml
Expand Up @@ -209,6 +209,12 @@
<item>导出至剪贴板</item>
<item>导出完整配置至剪贴板</item>
</string-array>

<string-array name="share_sub_method">
<item>二维码</item>
<item>导出至剪贴板</item>
</string-array>

share_method
<string-array name="routing_tag">
<item>代理的网址或IP</item>
Expand Down
5 changes: 5 additions & 0 deletions V2rayNG/app/src/main/res/values-zh-rTW/strings.xml
Expand Up @@ -210,6 +210,11 @@
<item>匯出完整組態至剪貼簿</item>
</string-array>

<string-array name="share_sub_method">
<item>QR Code</item>
<item>匯出至剪貼簿</item>
</string-array>

<string-array name="routing_tag">
<item>Proxy URL 或 IP</item>
<item>直接連線 URL 或 IP</item>
Expand Down
5 changes: 5 additions & 0 deletions V2rayNG/app/src/main/res/values/strings.xml
Expand Up @@ -218,6 +218,11 @@
<item>Export full configuration to clipboard</item>
</string-array>

<string-array name="share_sub_method">
<item>QRcode</item>
<item>Export to clipboard</item>
</string-array>

<string-array name="routing_tag">
<item>proxy URL or IP</item>
<item>direct URL or IP</item>
Expand Down
2 changes: 2 additions & 0 deletions V2rayNG/app/src/main/res/values/styles.xml
Expand Up @@ -6,6 +6,8 @@
<item name="colorAccent">@color/colorAccent</item>
<item name="colorMainBg">@color/colorBg</item>
<item name="colorMainText">@color/colorText</item>
<item name="android:statusBarColor">@color/colorPrimary</item>
<item name="android:navigationBarColor">@color/colorPrimary</item>
</style>

<style name="AppThemeDayNight.NoActionBar" parent="AppThemeDayNight">
Expand Down