diff --git a/V2rayNG/app/src/main/AndroidManifest.xml b/V2rayNG/app/src/main/AndroidManifest.xml index 859b3faf..900ab515 100644 --- a/V2rayNG/app/src/main/AndroidManifest.xml +++ b/V2rayNG/app/src/main/AndroidManifest.xml @@ -49,14 +49,13 @@ android:label="@string/app_name" android:networkSecurityConfig="@xml/network_security_config" android:supportsRtl="true" - android:theme="@style/AppThemeDayNight" + android:theme="@style/AppThemeDayNight.NoActionBar" android:usesCleartextTraffic="true"> + android:launchMode="singleTask"> @@ -122,7 +121,7 @@ android:excludeFromRecents="true" android:exported="false" android:process=":RunSoLibV2RayDaemon" - android:theme="@style/AppTheme.NoActionBar.Translucent" /> + android:theme="@style/AppThemeDayNight.NoActionBar.Translucent" /> (R.id.toolbar) + tb?.let { + setSupportActionBar(it) + supportActionBar?.setDisplayHomeAsUpEnabled(showHomeAsUp) + title?.let { t -> this.title = t } + } + } + + protected fun setContentViewWithToolbar(layoutResId: Int, showHomeAsUp: Boolean = true, title: CharSequence? = null) { + val base = LayoutInflater.from(this).inflate(R.layout.activity_base, null) + val container = base.findViewById(R.id.content_container) + LayoutInflater.from(this).inflate(layoutResId, container, true) + super.setContentView(base) + setupToolbar(base, showHomeAsUp, title) + } + + protected fun setContentViewWithToolbar(childView: View, showHomeAsUp: Boolean = true, title: CharSequence? = null) { + val base = LayoutInflater.from(this).inflate(R.layout.activity_base, null) + val container = base.findViewById(R.id.content_container) + container.addView(childView, ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT)) + super.setContentView(base) + setupToolbar(base, showHomeAsUp, title) + } + + private fun setupToolbar(baseRoot: View, showHomeAsUp: Boolean, title: CharSequence?) { + val toolbar = baseRoot.findViewById(R.id.toolbar) + toolbar?.let { + setSupportActionBar(it) + supportActionBar?.setDisplayHomeAsUpEnabled(showHomeAsUp) + title?.let { t -> supportActionBar?.title = t } + } + } + } diff --git a/V2rayNG/app/src/main/java/com/v2ray/ang/ui/CheckUpdateActivity.kt b/V2rayNG/app/src/main/java/com/v2ray/ang/ui/CheckUpdateActivity.kt index a9b698c5..411a3b40 100644 --- a/V2rayNG/app/src/main/java/com/v2ray/ang/ui/CheckUpdateActivity.kt +++ b/V2rayNG/app/src/main/java/com/v2ray/ang/ui/CheckUpdateActivity.kt @@ -24,9 +24,8 @@ class CheckUpdateActivity : BaseActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) - setContentView(binding.root) - - title = getString(R.string.update_check_for_update) + //setContentView(binding.root) + setContentViewWithToolbar(binding.root, showHomeAsUp = true, title = getString(R.string.update_check_for_update)) binding.layoutCheckUpdate.setOnClickListener { checkForUpdates(binding.checkPreRelease.isChecked) diff --git a/V2rayNG/app/src/main/java/com/v2ray/ang/ui/LogcatActivity.kt b/V2rayNG/app/src/main/java/com/v2ray/ang/ui/LogcatActivity.kt index 8b214a1b..b8fbaeee 100644 --- a/V2rayNG/app/src/main/java/com/v2ray/ang/ui/LogcatActivity.kt +++ b/V2rayNG/app/src/main/java/com/v2ray/ang/ui/LogcatActivity.kt @@ -30,9 +30,8 @@ class LogcatActivity : BaseActivity(), SwipeRefreshLayout.OnRefreshListener { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) - setContentView(binding.root) - - title = getString(R.string.title_logcat) + //setContentView(binding.root) + setContentViewWithToolbar(binding.root, showHomeAsUp = true, title = getString(R.string.title_logcat)) binding.recyclerView.setHasFixedSize(true) binding.recyclerView.layoutManager = LinearLayoutManager(this) diff --git a/V2rayNG/app/src/main/java/com/v2ray/ang/ui/MainActivity.kt b/V2rayNG/app/src/main/java/com/v2ray/ang/ui/MainActivity.kt index 6f7dcfb9..63a77121 100644 --- a/V2rayNG/app/src/main/java/com/v2ray/ang/ui/MainActivity.kt +++ b/V2rayNG/app/src/main/java/com/v2ray/ang/ui/MainActivity.kt @@ -115,8 +115,7 @@ class MainActivity : BaseActivity(), NavigationView.OnNavigationItemSelectedList override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(binding.root) - title = getString(R.string.title_server) - setSupportActionBar(binding.toolbar) + setupToolbar(binding.toolbar,false, getString(R.string.title_server)) binding.fab.setOnClickListener { if (mainViewModel.isRunning.value == true) { diff --git a/V2rayNG/app/src/main/java/com/v2ray/ang/ui/MainRecyclerAdapter.kt b/V2rayNG/app/src/main/java/com/v2ray/ang/ui/MainRecyclerAdapter.kt index 7d1728a5..f54b4d27 100644 --- a/V2rayNG/app/src/main/java/com/v2ray/ang/ui/MainRecyclerAdapter.kt +++ b/V2rayNG/app/src/main/java/com/v2ray/ang/ui/MainRecyclerAdapter.kt @@ -46,12 +46,17 @@ class MainRecyclerAdapter(val activity: MainActivity) : RecyclerView.Adapter = emptyList() + private var data: MutableList = mutableListOf() @SuppressLint("NotifyDataSetChanged") - fun setData(newData: List?, position: Int = -1) { - data = newData ?: emptyList() - if (position >= 0) { + fun setData(newData: MutableList?, position: Int = -1) { + if (android.os.Looper.myLooper() != android.os.Looper.getMainLooper()) { + mActivity.runOnUiThread { setData(newData, position) } + return + } + data = newData?.toMutableList() ?: mutableListOf() + + if (position >= 0 && position in data.indices) { notifyItemChanged(position) } else { notifyDataSetChanged() @@ -84,7 +89,7 @@ class MainRecyclerAdapter(val activity: MainActivity) : RecyclerView.Adapter setContentView(R.layout.activity_server_vmess) - 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) - EConfigType.HYSTERIA2 -> setContentView(R.layout.activity_server_hysteria2) - EConfigType.POLICYGROUP -> return - } + + val layoutId = when (config?.configType ?: createConfigType) { + EConfigType.VMESS -> R.layout.activity_server_vmess + EConfigType.CUSTOM -> null + EConfigType.SHADOWSOCKS -> R.layout.activity_server_shadowsocks + EConfigType.SOCKS, EConfigType.HTTP -> R.layout.activity_server_socks + EConfigType.VLESS -> R.layout.activity_server_vless + EConfigType.TROJAN -> R.layout.activity_server_trojan + EConfigType.WIREGUARD -> R.layout.activity_server_wireguard + EConfigType.HYSTERIA2 -> R.layout.activity_server_hysteria2 + EConfigType.POLICYGROUP -> null + } ?: return + setContentViewWithToolbar(layoutId, showHomeAsUp = true, title = (config?.configType ?: createConfigType).toString()) + sp_network?.onItemSelectedListener = object : AdapterView.OnItemSelectedListener { override fun onItemSelected( parent: AdapterView<*>?, diff --git a/V2rayNG/app/src/main/java/com/v2ray/ang/ui/ServerCustomConfigActivity.kt b/V2rayNG/app/src/main/java/com/v2ray/ang/ui/ServerCustomConfigActivity.kt index ea0d3656..a73275ce 100644 --- a/V2rayNG/app/src/main/java/com/v2ray/ang/ui/ServerCustomConfigActivity.kt +++ b/V2rayNG/app/src/main/java/com/v2ray/ang/ui/ServerCustomConfigActivity.kt @@ -31,8 +31,8 @@ class ServerCustomConfigActivity : BaseActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) - setContentView(binding.root) - title = EConfigType.CUSTOM.toString() + //setContentView(binding.root) + setContentViewWithToolbar(binding.root, showHomeAsUp = true, title = EConfigType.CUSTOM.toString()) if (!Utils.getDarkModeStatus(this)) { binding.editor.colorScheme = EditorTheme.INTELLIJ_LIGHT diff --git a/V2rayNG/app/src/main/java/com/v2ray/ang/ui/ServerGroupActivity.kt b/V2rayNG/app/src/main/java/com/v2ray/ang/ui/ServerGroupActivity.kt index 9ca96b28..60dc5aea 100644 --- a/V2rayNG/app/src/main/java/com/v2ray/ang/ui/ServerGroupActivity.kt +++ b/V2rayNG/app/src/main/java/com/v2ray/ang/ui/ServerGroupActivity.kt @@ -31,8 +31,8 @@ class ServerGroupActivity : BaseActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) - setContentView(binding.root) - title = EConfigType.POLICYGROUP.toString() + //setContentView(binding.root) + setContentViewWithToolbar(binding.root, showHomeAsUp = true, title = EConfigType.POLICYGROUP.toString()) val config = MmkvManager.decodeServerConfig(editGuid) populateSubscriptionSpinner() diff --git a/V2rayNG/app/src/main/java/com/v2ray/ang/ui/SettingsActivity.kt b/V2rayNG/app/src/main/java/com/v2ray/ang/ui/SettingsActivity.kt index b6c8c482..6543ea28 100644 --- a/V2rayNG/app/src/main/java/com/v2ray/ang/ui/SettingsActivity.kt +++ b/V2rayNG/app/src/main/java/com/v2ray/ang/ui/SettingsActivity.kt @@ -27,9 +27,8 @@ class SettingsActivity : BaseActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) - setContentView(R.layout.activity_settings) - - title = getString(R.string.title_settings) + //setContentView(R.layout.activity_settings) + setContentViewWithToolbar(R.layout.activity_settings, showHomeAsUp = true, title = getString(R.string.title_settings)) settingsViewModel.startListenPreferenceChange() } diff --git a/V2rayNG/app/src/main/java/com/v2ray/ang/ui/SubEditActivity.kt b/V2rayNG/app/src/main/java/com/v2ray/ang/ui/SubEditActivity.kt index fadb7d89..8169f199 100644 --- a/V2rayNG/app/src/main/java/com/v2ray/ang/ui/SubEditActivity.kt +++ b/V2rayNG/app/src/main/java/com/v2ray/ang/ui/SubEditActivity.kt @@ -28,8 +28,8 @@ class SubEditActivity : BaseActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) - setContentView(binding.root) - title = getString(R.string.title_sub_setting) + //setContentView(binding.root) + setContentViewWithToolbar(binding.root, showHomeAsUp = true, title = getString(R.string.title_sub_setting)) SettingsChangeManager.makeSetupGroupTab() val subItem = MmkvManager.decodeSubscription(editSubId) diff --git a/V2rayNG/app/src/main/java/com/v2ray/ang/ui/SubSettingActivity.kt b/V2rayNG/app/src/main/java/com/v2ray/ang/ui/SubSettingActivity.kt index ef27fcff..0a2f07f4 100644 --- a/V2rayNG/app/src/main/java/com/v2ray/ang/ui/SubSettingActivity.kt +++ b/V2rayNG/app/src/main/java/com/v2ray/ang/ui/SubSettingActivity.kt @@ -29,9 +29,8 @@ class SubSettingActivity : BaseActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) - setContentView(binding.root) - - title = getString(R.string.title_sub_setting) + //setContentView(binding.root) + setContentViewWithToolbar(binding.root, showHomeAsUp = true, title = getString(R.string.title_sub_setting)) binding.recyclerView.setHasFixedSize(true) binding.recyclerView.layoutManager = LinearLayoutManager(this) diff --git a/V2rayNG/app/src/main/java/com/v2ray/ang/ui/UserAssetActivity.kt b/V2rayNG/app/src/main/java/com/v2ray/ang/ui/UserAssetActivity.kt index efc0a39c..b8eff1df 100644 --- a/V2rayNG/app/src/main/java/com/v2ray/ang/ui/UserAssetActivity.kt +++ b/V2rayNG/app/src/main/java/com/v2ray/ang/ui/UserAssetActivity.kt @@ -83,8 +83,8 @@ class UserAssetActivity : BaseActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) - setContentView(binding.root) - title = getString(R.string.title_user_asset_setting) + //setContentView(binding.root) + setContentViewWithToolbar(binding.root, showHomeAsUp = true, title = getString(R.string.title_user_asset_setting)) binding.recyclerView.setHasFixedSize(true) binding.recyclerView.layoutManager = LinearLayoutManager(this) diff --git a/V2rayNG/app/src/main/java/com/v2ray/ang/ui/UserAssetUrlActivity.kt b/V2rayNG/app/src/main/java/com/v2ray/ang/ui/UserAssetUrlActivity.kt index 3d390967..06657d3a 100644 --- a/V2rayNG/app/src/main/java/com/v2ray/ang/ui/UserAssetUrlActivity.kt +++ b/V2rayNG/app/src/main/java/com/v2ray/ang/ui/UserAssetUrlActivity.kt @@ -32,8 +32,8 @@ class UserAssetUrlActivity : BaseActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) - setContentView(binding.root) - title = getString(R.string.title_user_asset_add_url) + //setContentView(binding.root) + setContentViewWithToolbar(binding.root, showHomeAsUp = true, title = getString(R.string.title_user_asset_add_url)) val assetItem = MmkvManager.decodeAsset(editAssetId) val assetUrlQrcode = intent.getStringExtra(ASSET_URL_QRCODE) diff --git a/V2rayNG/app/src/main/java/com/v2ray/ang/viewmodel/MainViewModel.kt b/V2rayNG/app/src/main/java/com/v2ray/ang/viewmodel/MainViewModel.kt index 79293a1a..1568861d 100644 --- a/V2rayNG/app/src/main/java/com/v2ray/ang/viewmodel/MainViewModel.kt +++ b/V2rayNG/app/src/main/java/com/v2ray/ang/viewmodel/MainViewModel.kt @@ -258,8 +258,8 @@ class MainViewModel(application: Application) : AndroidViewModel(application) { if (subscriptionId != id) { subscriptionId = id MmkvManager.encodeSettings(AppConfig.CACHE_SUBSCRIPTION_ID, subscriptionId) - reloadServerList() } + reloadServerList() } /** diff --git a/V2rayNG/app/src/main/res/layout/activity_base.xml b/V2rayNG/app/src/main/res/layout/activity_base.xml new file mode 100644 index 00000000..70308040 --- /dev/null +++ b/V2rayNG/app/src/main/res/layout/activity_base.xml @@ -0,0 +1,26 @@ + + + + + + + + diff --git a/V2rayNG/app/src/main/res/layout/activity_bypass_list.xml b/V2rayNG/app/src/main/res/layout/activity_bypass_list.xml index 0fc67600..a5e4d835 100644 --- a/V2rayNG/app/src/main/res/layout/activity_bypass_list.xml +++ b/V2rayNG/app/src/main/res/layout/activity_bypass_list.xml @@ -49,7 +49,6 @@ android:maxLines="2" android:text="@string/per_app_proxy_settings_enable" android:textAppearance="@style/TextAppearance.AppCompat.Small" - android:textColor="@color/colorAccent" app:theme="@style/BrandedSwitch" /> @@ -69,7 +68,6 @@ android:layout_height="wrap_content" android:text="@string/switch_bypass_apps_mode" android:textAppearance="@style/TextAppearance.AppCompat.Small" - android:textColor="@color/colorAccent" app:theme="@style/BrandedSwitch" /> diff --git a/V2rayNG/app/src/main/res/layout/activity_main.xml b/V2rayNG/app/src/main/res/layout/activity_main.xml index 3963e07f..378a33cd 100644 --- a/V2rayNG/app/src/main/res/layout/activity_main.xml +++ b/V2rayNG/app/src/main/res/layout/activity_main.xml @@ -106,6 +106,7 @@ android:focusable="true" android:nextFocusLeft="@+id/layout_test" android:src="@drawable/ic_play_24dp" + app:tint="@color/colorWhite" app:layout_anchorGravity="bottom|right|end" /> @@ -119,7 +120,6 @@ android:layout_height="match_parent" android:layout_gravity="start" app:headerLayout="@layout/nav_header" - app:itemIconTint="@color/colorAccent" app:menu="@menu/menu_drawer"> diff --git a/V2rayNG/app/src/main/res/layout/activity_routing_edit.xml b/V2rayNG/app/src/main/res/layout/activity_routing_edit.xml index 53a49fec..d7b34e6f 100644 --- a/V2rayNG/app/src/main/res/layout/activity_routing_edit.xml +++ b/V2rayNG/app/src/main/res/layout/activity_routing_edit.xml @@ -47,7 +47,6 @@ android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/routing_settings_locked" - android:textColor="@color/colorAccent" app:theme="@style/BrandedSwitch" /> diff --git a/V2rayNG/app/src/main/res/layout/activity_server_custom_config.xml b/V2rayNG/app/src/main/res/layout/activity_server_custom_config.xml index 5dabff6b..b3802749 100644 --- a/V2rayNG/app/src/main/res/layout/activity_server_custom_config.xml +++ b/V2rayNG/app/src/main/res/layout/activity_server_custom_config.xml @@ -21,8 +21,7 @@ android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/server_lab_need_inbound" - android:textAppearance="@style/TextAppearance.AppCompat.Tooltip" - android:textColor="@color/color_secondary" /> + android:textAppearance="@style/TextAppearance.AppCompat.Tooltip" /> + android:textAppearance="@style/TextAppearance.AppCompat.Tooltip" /> \ No newline at end of file diff --git a/V2rayNG/app/src/main/res/values-night/colors.xml b/V2rayNG/app/src/main/res/values-night/colors.xml index ff1c835f..76c26ae4 100644 --- a/V2rayNG/app/src/main/res/values-night/colors.xml +++ b/V2rayNG/app/src/main/res/values-night/colors.xml @@ -2,9 +2,51 @@ #f97910 #646464 - #BDBDBD #424242 - #212121 - #FFFFFF + + #C0C0C0 + #303030 + #474747 + #E0E0E0 + + + #FFB687 + #4E2600 + #6F3800 + #FFE8D6 + + + #83D6B5 + #00382E + #005143 + #A0F2D0 + + + #FFB4AB + #93000A + #690005 + #FFDAD6 + + + #1C1B1F + #E6E1E5 + + + #1C1B1F + #E6E1E5 + #49454F + #CAC4D0 + #E6E1E5 + #1C1B1F + + + #938F99 + #49454F + + + #000000 + #000000 + #C0C0C0 + #000000 diff --git a/V2rayNG/app/src/main/res/values-night/themes.xml b/V2rayNG/app/src/main/res/values-night/themes.xml index d24634ef..49a984e3 100644 --- a/V2rayNG/app/src/main/res/values-night/themes.xml +++ b/V2rayNG/app/src/main/res/values-night/themes.xml @@ -1,13 +1,54 @@ - + - - \ No newline at end of file diff --git a/V2rayNG/app/src/main/res/values/colors.xml b/V2rayNG/app/src/main/res/values/colors.xml index 8e328f84..4054d13e 100644 --- a/V2rayNG/app/src/main/res/values/colors.xml +++ b/V2rayNG/app/src/main/res/values/colors.xml @@ -3,12 +3,55 @@ #009966 #FF0099 #f97910 - + #FFFFFF #f97910 #9C9C9C - #727272 #E0E0E0 + @color/md_theme_primary - #F5F5F5 - #000000 + + #000000 + #FFFFFF + #E0E0E0 + #000000 + + + #f97910 + #FFFFFF + #FFE8D6 + #2B1700 + + + #009966 + #FFFFFF + #A0F2D0 + #00201A + + + #BA1A1A + #FFDAD6 + #FFFFFF + #410002 + + + #FFFFFF + #1C1B1F + + + #FFFFFF + #1C1B1F + #E7E0EC + #49454F + #313033 + #F4EFF4 + + + #79747E + #CAC4D0 + + + #C0C0C0 + #000000 + #000000 + #000000 diff --git a/V2rayNG/app/src/main/res/values/themes.xml b/V2rayNG/app/src/main/res/values/themes.xml index 6ad204c0..23de272f 100644 --- a/V2rayNG/app/src/main/res/values/themes.xml +++ b/V2rayNG/app/src/main/res/values/themes.xml @@ -1,35 +1,71 @@ - + - + - - - - - +