diff --git a/V2rayNG/app/src/main/kotlin/com/v2ray/ang/AppConfig.kt b/V2rayNG/app/src/main/kotlin/com/v2ray/ang/AppConfig.kt
index 480b331b..a621f36e 100644
--- a/V2rayNG/app/src/main/kotlin/com/v2ray/ang/AppConfig.kt
+++ b/V2rayNG/app/src/main/kotlin/com/v2ray/ang/AppConfig.kt
@@ -142,6 +142,7 @@ object AppConfig {
const val CUSTOM = ""
const val SHADOWSOCKS = "ss://"
const val SOCKS = "socks://"
+ const val HTTP = "http://"
const val VLESS = "vless://"
const val TROJAN = "trojan://"
const val WIREGUARD = "wireguard://"
diff --git a/V2rayNG/app/src/main/kotlin/com/v2ray/ang/dto/EConfigType.kt b/V2rayNG/app/src/main/kotlin/com/v2ray/ang/dto/EConfigType.kt
index 0cde22f0..6ed15816 100644
--- a/V2rayNG/app/src/main/kotlin/com/v2ray/ang/dto/EConfigType.kt
+++ b/V2rayNG/app/src/main/kotlin/com/v2ray/ang/dto/EConfigType.kt
@@ -10,7 +10,8 @@ enum class EConfigType(val value: Int, val protocolScheme: String) {
SOCKS(4, AppConfig.SOCKS),
VLESS(5, AppConfig.VLESS),
TROJAN(6, AppConfig.TROJAN),
- WIREGUARD(7, AppConfig.WIREGUARD);
+ WIREGUARD(7, AppConfig.WIREGUARD),
+ HTTP(10, AppConfig.HTTP);
companion object {
fun fromInt(value: Int) = values().firstOrNull { it.value == value }
diff --git a/V2rayNG/app/src/main/kotlin/com/v2ray/ang/dto/ServerConfig.kt b/V2rayNG/app/src/main/kotlin/com/v2ray/ang/dto/ServerConfig.kt
index 0ee12d4f..a004f142 100644
--- a/V2rayNG/app/src/main/kotlin/com/v2ray/ang/dto/ServerConfig.kt
+++ b/V2rayNG/app/src/main/kotlin/com/v2ray/ang/dto/ServerConfig.kt
@@ -35,7 +35,10 @@ data class ServerConfig(
EConfigType.CUSTOM ->
return ServerConfig(configType = configType)
- EConfigType.SHADOWSOCKS, EConfigType.SOCKS, EConfigType.TROJAN ->
+ EConfigType.SHADOWSOCKS,
+ EConfigType.SOCKS,
+ EConfigType.HTTP,
+ EConfigType.TROJAN ->
return ServerConfig(
configType = configType,
outboundBean = V2rayConfig.OutboundBean(
diff --git a/V2rayNG/app/src/main/kotlin/com/v2ray/ang/dto/V2rayConfig.kt b/V2rayNG/app/src/main/kotlin/com/v2ray/ang/dto/V2rayConfig.kt
index 6b841470..dfbb1f26 100644
--- a/V2rayNG/app/src/main/kotlin/com/v2ray/ang/dto/V2rayConfig.kt
+++ b/V2rayNG/app/src/main/kotlin/com/v2ray/ang/dto/V2rayConfig.kt
@@ -137,9 +137,9 @@ data class V2rayConfig(
data class ServersBean(
var address: String = "",
- var method: String = "chacha20-poly1305",
+ var method: String? = null,
var ota: Boolean = false,
- var password: String = "",
+ var password: String? = null,
var port: Int = DEFAULT_PORT,
var level: Int = DEFAULT_LEVEL,
val email: String? = null,
@@ -425,6 +425,7 @@ data class V2rayConfig(
return settings?.vnext?.get(0)?.address
} else if (protocol.equals(EConfigType.SHADOWSOCKS.name, true)
|| protocol.equals(EConfigType.SOCKS.name, true)
+ || protocol.equals(EConfigType.HTTP.name, true)
|| protocol.equals(EConfigType.TROJAN.name, true)
) {
return settings?.servers?.get(0)?.address
@@ -441,6 +442,7 @@ data class V2rayConfig(
return settings?.vnext?.get(0)?.port
} else if (protocol.equals(EConfigType.SHADOWSOCKS.name, true)
|| protocol.equals(EConfigType.SOCKS.name, true)
+ || protocol.equals(EConfigType.HTTP.name, true)
|| protocol.equals(EConfigType.TROJAN.name, true)
) {
return settings?.servers?.get(0)?.port
@@ -465,7 +467,8 @@ data class V2rayConfig(
|| protocol.equals(EConfigType.TROJAN.name, true)
) {
return settings?.servers?.get(0)?.password
- } else if (protocol.equals(EConfigType.SOCKS.name, true)) {
+ } else if (protocol.equals(EConfigType.SOCKS.name, true)
+ || protocol.equals(EConfigType.HTTP.name, true)) {
return settings?.servers?.get(0)?.users?.get(0)?.pass
} else if (protocol.equals(EConfigType.WIREGUARD.name, true)) {
return settings?.secretKey
diff --git a/V2rayNG/app/src/main/kotlin/com/v2ray/ang/ui/MainActivity.kt b/V2rayNG/app/src/main/kotlin/com/v2ray/ang/ui/MainActivity.kt
index cc7d9d31..2c1a0cfe 100644
--- a/V2rayNG/app/src/main/kotlin/com/v2ray/ang/ui/MainActivity.kt
+++ b/V2rayNG/app/src/main/kotlin/com/v2ray/ang/ui/MainActivity.kt
@@ -277,6 +277,11 @@ class MainActivity : BaseActivity(), NavigationView.OnNavigationItemSelectedList
true
}
+ R.id.import_manually_http -> {
+ importManually(EConfigType.HTTP.value)
+ true
+ }
+
R.id.import_manually_trojan -> {
importManually(EConfigType.TROJAN.value)
true
diff --git a/V2rayNG/app/src/main/kotlin/com/v2ray/ang/ui/ServerActivity.kt b/V2rayNG/app/src/main/kotlin/com/v2ray/ang/ui/ServerActivity.kt
index 8aa5dd71..ec76abe5 100644
--- a/V2rayNG/app/src/main/kotlin/com/v2ray/ang/ui/ServerActivity.kt
+++ b/V2rayNG/app/src/main/kotlin/com/v2ray/ang/ui/ServerActivity.kt
@@ -130,6 +130,7 @@ class ServerActivity : BaseActivity() {
EConfigType.CUSTOM -> return
EConfigType.SHADOWSOCKS -> setContentView(R.layout.activity_server_shadowsocks)
EConfigType.SOCKS -> setContentView(R.layout.activity_server_socks)
+ EConfigType.HTTP -> setContentView(R.layout.activity_server_socks)
EConfigType.VLESS -> setContentView(R.layout.activity_server_vless)
EConfigType.TROJAN -> setContentView(R.layout.activity_server_trojan)
EConfigType.WIREGUARD -> setContentView(R.layout.activity_server_wireguard)
@@ -249,7 +250,9 @@ class ServerActivity : BaseActivity() {
et_id.text = Utils.getEditable(outbound.getPassword().orEmpty())
et_alterId?.text =
Utils.getEditable(outbound.settings?.vnext?.get(0)?.users?.get(0)?.alterId.toString())
- if (config.configType == EConfigType.SOCKS) {
+ if (config.configType == EConfigType.SOCKS
+ || config.configType == EConfigType.HTTP
+ ) {
et_security?.text =
Utils.getEditable(outbound.settings?.servers?.get(0)?.users?.get(0)?.user.orEmpty())
} else if (config.configType == EConfigType.VLESS) {
@@ -404,7 +407,10 @@ class ServerActivity : BaseActivity() {
}
val config =
MmkvManager.decodeServerConfig(editGuid) ?: ServerConfig.create(createConfigType)
- if (config.configType != EConfigType.SOCKS && TextUtils.isEmpty(et_id.text.toString())) {
+ if (config.configType != EConfigType.SOCKS
+ && config.configType != EConfigType.HTTP
+ && TextUtils.isEmpty(et_id.text.toString())
+ ) {
if (config.configType == EConfigType.TROJAN || config.configType == EConfigType.SHADOWSOCKS) {
toast(R.string.server_lab_id3)
} else {
@@ -477,7 +483,7 @@ class ServerActivity : BaseActivity() {
if (config.configType == EConfigType.SHADOWSOCKS) {
server.password = et_id.text.toString().trim()
server.method = shadowsocksSecuritys[sp_security?.selectedItemPosition ?: 0]
- } else if (config.configType == EConfigType.SOCKS) {
+ } else if (config.configType == EConfigType.SOCKS || config.configType == EConfigType.HTTP) {
if (TextUtils.isEmpty(et_security?.text) && TextUtils.isEmpty(et_id.text)) {
server.users = null
} else {
diff --git a/V2rayNG/app/src/main/kotlin/com/v2ray/ang/util/AngConfigManager.kt b/V2rayNG/app/src/main/kotlin/com/v2ray/ang/util/AngConfigManager.kt
index f937b4cc..8408404c 100644
--- a/V2rayNG/app/src/main/kotlin/com/v2ray/ang/util/AngConfigManager.kt
+++ b/V2rayNG/app/src/main/kotlin/com/v2ray/ang/util/AngConfigManager.kt
@@ -88,6 +88,7 @@ object AngConfigManager {
EConfigType.CUSTOM -> ""
EConfigType.SHADOWSOCKS -> ShadowsocksFmt.toUri(config)
EConfigType.SOCKS -> SocksFmt.toUri(config)
+ EConfigType.HTTP -> ""
EConfigType.VLESS -> VlessFmt.toUri(config)
EConfigType.TROJAN -> TrojanFmt.toUri(config)
EConfigType.WIREGUARD -> WireguardFmt.toUri(config)
diff --git a/V2rayNG/app/src/main/kotlin/com/v2ray/ang/util/V2rayConfigUtil.kt b/V2rayNG/app/src/main/kotlin/com/v2ray/ang/util/V2rayConfigUtil.kt
index 7e1c030b..4764f403 100644
--- a/V2rayNG/app/src/main/kotlin/com/v2ray/ang/util/V2rayConfigUtil.kt
+++ b/V2rayNG/app/src/main/kotlin/com/v2ray/ang/util/V2rayConfigUtil.kt
@@ -377,6 +377,7 @@ object V2rayConfigUtil {
val protocol = outbound.protocol
if (protocol.equals(EConfigType.SHADOWSOCKS.name, true)
|| protocol.equals(EConfigType.SOCKS.name, true)
+ || protocol.equals(EConfigType.HTTP.name, true)
|| protocol.equals(EConfigType.TROJAN.name, true)
|| protocol.equals(EConfigType.WIREGUARD.name, true)
) {
diff --git a/V2rayNG/app/src/main/res/menu/menu_main.xml b/V2rayNG/app/src/main/res/menu/menu_main.xml
index 7894237b..c701223b 100644
--- a/V2rayNG/app/src/main/res/menu/menu_main.xml
+++ b/V2rayNG/app/src/main/res/menu/menu_main.xml
@@ -36,6 +36,10 @@
android:id="@+id/import_manually_socks"
android:title="@string/menu_item_import_config_manually_socks"
app:showAsAction="never" />
+
- الكتابة يدويًا [VLESS]
الكتابة يدويًا [Shadowsocks]
الكتابة يدويًا [Socks]
+ Type manually[HTTP]
الكتابة يدويًا [Trojan]
الكتابة يدويًا [Wireguard]
تكوين مخصص
diff --git a/V2rayNG/app/src/main/res/values-bn/strings.xml b/V2rayNG/app/src/main/res/values-bn/strings.xml
index 86967872..f44d1129 100644
--- a/V2rayNG/app/src/main/res/values-bn/strings.xml
+++ b/V2rayNG/app/src/main/res/values-bn/strings.xml
@@ -29,6 +29,7 @@
ম্যানুয়ালি টাইপ করুন [VLESS]
ম্যানুয়ালি টাইপ করুন [Shadowsocks]
ম্যানুয়ালি টাইপ করুন [Socks]
+ Type manually[HTTP]
ম্যানুয়ালি টাইপ করুন [Trojan]
ম্যানুয়ালি টাইপ করুন [Wireguard]
কাস্টম কনফিগারেশন
diff --git a/V2rayNG/app/src/main/res/values-fa/strings.xml b/V2rayNG/app/src/main/res/values-fa/strings.xml
index 08b5683d..b9340e32 100644
--- a/V2rayNG/app/src/main/res/values-fa/strings.xml
+++ b/V2rayNG/app/src/main/res/values-fa/strings.xml
@@ -28,6 +28,7 @@
تایپ دستی[VLESS]
تایپ دستی[Shadowsocks]
تایپ دستی[Socks]
+ Type manually[HTTP]
تایپ دستی[Trojan]
[Wireguard]تایپ دستی
کانفیگ سفارشی
diff --git a/V2rayNG/app/src/main/res/values-ru/strings.xml b/V2rayNG/app/src/main/res/values-ru/strings.xml
index 3a1e21f5..84134dc8 100644
--- a/V2rayNG/app/src/main/res/values-ru/strings.xml
+++ b/V2rayNG/app/src/main/res/values-ru/strings.xml
@@ -28,6 +28,7 @@
Ручной ввод VLESS
Ручной ввод Shadowsocks
Ручной ввод Socks
+ Type manually[HTTP]
Ручной ввод Trojan
Ручной ввод Wireguard
Другой профиль
diff --git a/V2rayNG/app/src/main/res/values-vi/strings.xml b/V2rayNG/app/src/main/res/values-vi/strings.xml
index 38d244fd..1fe6e114 100644
--- a/V2rayNG/app/src/main/res/values-vi/strings.xml
+++ b/V2rayNG/app/src/main/res/values-vi/strings.xml
@@ -28,6 +28,7 @@
Nhập thủ công [VLESS]
Nhập thủ công [ShadowSocks]
Nhập thủ công [Socks]
+ Type manually[HTTP]
Nhập thủ công [Trojan]
Nhập thủ công [WireGuard]
Nâng cao / Cấu hình tùy chỉnh
diff --git a/V2rayNG/app/src/main/res/values-zh-rCN/strings.xml b/V2rayNG/app/src/main/res/values-zh-rCN/strings.xml
index 6b41cc65..ef32eb7e 100644
--- a/V2rayNG/app/src/main/res/values-zh-rCN/strings.xml
+++ b/V2rayNG/app/src/main/res/values-zh-rCN/strings.xml
@@ -28,6 +28,7 @@
手动输入[VLESS]
手动输入[Shadowsocks]
手动输入[Socks]
+ 手动输入[HTTP]
手动输入[Trojan]
手动输入[Wireguard]
自定义配置
diff --git a/V2rayNG/app/src/main/res/values-zh-rTW/strings.xml b/V2rayNG/app/src/main/res/values-zh-rTW/strings.xml
index d408e904..af786cda 100644
--- a/V2rayNG/app/src/main/res/values-zh-rTW/strings.xml
+++ b/V2rayNG/app/src/main/res/values-zh-rTW/strings.xml
@@ -28,6 +28,7 @@
手動鍵入 [VLESS]
手動鍵入 [Shadowsocks]
手動鍵入 [Socks]
+ 手動鍵入 [HTTP]
手動鍵入 [Trojan]
手動鍵入 [Wireguard]
自訂配置
diff --git a/V2rayNG/app/src/main/res/values/strings.xml b/V2rayNG/app/src/main/res/values/strings.xml
index 060d10f8..84f79a7a 100644
--- a/V2rayNG/app/src/main/res/values/strings.xml
+++ b/V2rayNG/app/src/main/res/values/strings.xml
@@ -29,6 +29,7 @@
Type manually[VLESS]
Type manually[Shadowsocks]
Type manually[Socks]
+ Type manually[HTTP]
Type manually[Trojan]
Type manually[Wireguard]
Custom config