From 13db927cd3b2421d700370343dadbf481494781f Mon Sep 17 00:00:00 2001 From: Aigio Liu Date: Sun, 19 Dec 2021 00:16:14 +0800 Subject: [PATCH] fix Android SteamAuthTrade & DnsAnalysis -> IDnsAnalysisService & fix CommunityFixFragment --- .../Implementation/DnsAnalysisServiceImpl.cs | 114 ++++++++++++++++++ .../LocalAuthPage/SteamAuthTradeActivity.cs | 20 ++- .../UI/Fragments/CommunityFixFragment.cs | 2 +- .../LocalAuthPage/AuthTradeWindow.axaml | 6 +- .../ST.Client.Linux.csproj | 12 ++ .../ST.Client.Mac.csproj | 12 ++ .../ST.Client.Windows.csproj | 2 + .../Implementation/DnsAnalysisServiceImpl.cs} | 78 +++++------- .../Implementation/SteamServiceImpl.cs | 20 +++ .../VdfHelper.cs | 0 .../res/layout/activity_steam_auth_trade.xml | 1 + .../layout/activity_tablayout_viewpager2.xml | 3 - .../activity_toolbar_tablayout_viewpager2.xml | 3 - src/ST.Client/ST.Client.csproj | 2 - src/ST.Client/ServiceCollectionExtensions.cs | 13 +- src/ST.Client/Services/IDnsAnalysisService.cs | 79 ++++++++++++ .../Implementation/HttpProxyServiceImpl.cs | 10 +- src/ST.Client/Settings/ProxySettings.cs | 2 +- .../UI/ViewModels/Pages/DebugPageViewModel.cs | 1 + .../ProxySettingsWindowViewModel.cs | 13 +- .../LocalAuthPage/AuthTradeWindowViewModel.cs | 12 +- src/Startup2.cs | 3 + 22 files changed, 312 insertions(+), 96 deletions(-) create mode 100644 src/ST.Client.Android/Services/Implementation/DnsAnalysisServiceImpl.cs rename src/{ST.Client/DnsAnalysis.cs => ST.Client.Desktop.Windows/Services/Implementation/DnsAnalysisServiceImpl.cs} (62%) rename src/{ST.Client => ST.Client.Desktop.Windows}/Services/Implementation/SteamServiceImpl.cs (98%) rename src/{ST.Client => ST.Client.Desktop.Windows}/VdfHelper.cs (100%) create mode 100644 src/ST.Client/Services/IDnsAnalysisService.cs diff --git a/src/ST.Client.Android/Services/Implementation/DnsAnalysisServiceImpl.cs b/src/ST.Client.Android/Services/Implementation/DnsAnalysisServiceImpl.cs new file mode 100644 index 000000000..3423e2ec6 --- /dev/null +++ b/src/ST.Client.Android/Services/Implementation/DnsAnalysisServiceImpl.cs @@ -0,0 +1,114 @@ +using Android.Content; +using Android.Net; +using System.Application.Services; +using System.Application.Services.Implementation; +using System.Collections.Generic; +using System.Net; +using System.Threading.Tasks; +using XEPlatform = Xamarin.Essentials.Platform; + +namespace System.Application.Services.Implementation +{ + internal sealed class DnsAnalysisServiceImpl : IDnsAnalysisService + { + /// + /// https://developer.android.google.cn/reference/android/net/ConnectivityManager?hl=zh-cn + /// + static ConnectivityManager ConnectivityManager + { + get + { + var connectivityManager = XEPlatform.CurrentActivity.GetSystemService(Context.ConnectivityService); + return connectivityManager; + } + } + + public static List GetDnsServers() + { + List endPoints = new(); + var connectivityManager = ConnectivityManager; + + var activeConnection = connectivityManager.ActiveNetwork; + var linkProperties = connectivityManager.GetLinkProperties(activeConnection); + + if (linkProperties != null) + { + foreach (var currentAddress in linkProperties.DnsServers) + { + var endPoint = new IPEndPoint(IPAddress.Parse(currentAddress.HostAddress), 53); + endPoints.Add(endPoint); + } + } + + return endPoints; + } + + public Task AnalysisDomainIp(string url, bool isIPv6 = false) + { + throw new NotImplementedException(); + } + + public Task AnalysisDomainIpBy114Dns(string url, bool isIPv6 = false) + { + throw new NotImplementedException(); + } + + public Task AnalysisDomainIpByAliDns(string url, bool isIPv6 = false) + { + throw new NotImplementedException(); + } + + public Task AnalysisDomainIpByCloudflare(string url, bool isIPv6 = false) + { + throw new NotImplementedException(); + } + + public Task AnalysisDomainIpByCustomDns(string url, IPAddress[]? dnsServers = null, bool isIPv6 = false) + { + throw new NotImplementedException(); + } + + public Task AnalysisDomainIpByDnspod(string url, bool isIPv6 = false) + { + throw new NotImplementedException(); + } + + public Task AnalysisDomainIpByGoogleDns(string url, bool isIPv6 = false) + { + throw new NotImplementedException(); + } + + public int AnalysisHostnameTime(string url) + { + throw new NotImplementedException(); + } + + public Task GetHostByIPAddress(IPAddress ip) + { + throw new NotImplementedException(); + } + + public Task GetIsIpv6Support() + { + throw new NotImplementedException(); + } + + public Task PingHostname(string url) + { + throw new NotImplementedException(); + } + } +} + +// ReSharper disable once CheckNamespace +namespace Microsoft.Extensions.DependencyInjection +{ + partial class ServiceCollectionExtensions + { + public static IServiceCollection AddDnsAnalysisService(this IServiceCollection services) + { + services.AddSingleton(); + return services; + } + } +} \ No newline at end of file diff --git a/src/ST.Client.Android/UI/Activities/LocalAuthPage/SteamAuthTradeActivity.cs b/src/ST.Client.Android/UI/Activities/LocalAuthPage/SteamAuthTradeActivity.cs index 91146705f..ec8d7db95 100644 --- a/src/ST.Client.Android/UI/Activities/LocalAuthPage/SteamAuthTradeActivity.cs +++ b/src/ST.Client.Android/UI/Activities/LocalAuthPage/SteamAuthTradeActivity.cs @@ -35,7 +35,7 @@ namespace System.Application.UI.Activities [Register(JavaPackageConstants.Activities + nameof(MockSteamAuthTradeActivity))] [Activity(Theme = ManifestConstants.MainTheme2_NoActionBar, LaunchMode = LaunchMode.SingleTask, - //MainLauncher = true, + MainLauncher = true, Label = "AuthTrade(Mock)", ConfigurationChanges = ManifestConstants.ConfigurationChanges)] internal sealed class MockSteamAuthTradeActivity : BaseSteamAuthTradeActivity @@ -154,7 +154,8 @@ namespace System.Application.UI.Activities binding.layoutSteamUserName.Hint = Steam_User; binding.layoutSteamPassword.Hint = Steam_Password; binding.layoutCaptcha.Hint = Steam_ImageCodeTip; - binding.tvConfirmConutMessage.Text = ViewModel!.ConfirmationsConutMessage; + if (!ViewModel!.IsConfirmationsAny) + binding.tvConfirmConutMessage.Text = ViewModel!.ConfirmationsConutMessage; binding.cbStreamRememberMe.Text = User_Rememberme; binding.btnLogin.Text = Login; binding.tvSteamTradeLoginTip.Text = LocalAuth_SteamTradeLoginTip; @@ -191,11 +192,18 @@ namespace System.Application.UI.Activities ViewModel!.WhenAnyValue(x => x.ConfirmationsConutMessage).SubscribeInMainThread(value => { if (binding == null) return; - binding.tvConfirmConutMessage.Text = value; - if (ViewModel!.IsConfirmationsEmpty) + if (!ViewModel!.IsConfirmationsAny) { + binding.tvConfirmConutMessage.Text = value; + binding.tvConfirmConutMessage.Visibility = ViewStates.Visible; binding.layoutActions.Visibility = ViewStates.Gone; } + else + { + binding.tvConfirmConutMessage.Visibility = ViewStates.Gone; + binding.layoutActions.Visibility = ViewStates.Visible; + Toast.Show(value, ToastLength.Short); + } }).AddTo(this); ViewModel!.WhenAnyValue(x => x.IsLoading).SubscribeInMainThread(value => { @@ -205,7 +213,7 @@ namespace System.Application.UI.Activities binding.layoutContentSteamLogin.Visibility = (value || ViewModel!.IsLoggedIn) ? ViewStates.Gone : ViewStates.Visible; binding.layoutLoading.Visibility = state; //binding.swipeRefreshLayout.Refreshing = value; - binding.layoutActions.Visibility = (value || !ViewModel!.IsLoggedIn || ViewModel!.IsConfirmationsEmpty) ? ViewStates.Gone : ViewStates.Visible; + binding.layoutActions.Visibility = (value || !ViewModel!.IsLoggedIn || !ViewModel!.IsConfirmationsAny) ? ViewStates.Gone : ViewStates.Visible; }).AddTo(this); ViewModel!.WhenAnyValue(x => x.UnselectAll).SubscribeInMainThread(value => { @@ -266,7 +274,7 @@ namespace System.Application.UI.Activities }; var layout = new LinearLayoutManager2(this, LinearLayoutManager.Vertical, false); binding!.rvConfirmations.SetLayoutManager(layout); - binding.rvConfirmations.AddItemDecoration(VerticalItemDecoration2.Get(this, Resource.Dimension.activity_vertical_margin, Resource.Dimension.fab_full_height, noTop: true)); + binding.rvConfirmations.AddItemDecoration(VerticalItemDecoration2.Get(this, Resource.Dimension.activity_vertical_margin, Resource.Dimension.tab_height, noTop: true)); binding.rvConfirmations.SetAdapter(adapter); //var actionItems = Enum2.GetAll().Where(x => x != ActionItem.Refresh); diff --git a/src/ST.Client.Android/UI/Fragments/CommunityFixFragment.cs b/src/ST.Client.Android/UI/Fragments/CommunityFixFragment.cs index 484c30dc5..84c532b90 100644 --- a/src/ST.Client.Android/UI/Fragments/CommunityFixFragment.cs +++ b/src/ST.Client.Android/UI/Fragments/CommunityFixFragment.cs @@ -39,7 +39,7 @@ namespace System.Application.UI.Fragments proxyS.WhenAnyValue(x => x.AccelerateTime).SubscribeInMainThread(value => { if (binding == null) return; - binding.tvAccelerateTime.Text = AppResources.CommunityFix_AlreadyProxy + value.ToString("hh:mm:ss"); + binding.tvAccelerateTime.Text = AppResources.CommunityFix_AlreadyProxy + value.ToString(@"hh\:mm\:ss"); }).AddTo(this); proxyS.WhenAnyValue(x => x.ProxyStatus).SubscribeInMainThread(value => { diff --git a/src/ST.Client.Desktop.Avalonia/Application/UI/Views/Windows/LocalAuthPage/AuthTradeWindow.axaml b/src/ST.Client.Desktop.Avalonia/Application/UI/Views/Windows/LocalAuthPage/AuthTradeWindow.axaml index 889d4b0c1..2a02f294d 100644 --- a/src/ST.Client.Desktop.Avalonia/Application/UI/Views/Windows/LocalAuthPage/AuthTradeWindow.axaml +++ b/src/ST.Client.Desktop.Avalonia/Application/UI/Views/Windows/LocalAuthPage/AuthTradeWindow.axaml @@ -79,10 +79,10 @@ + IsEnabled="{Binding IsConfirmationsAny}"> + IsEnabled="{Binding IsConfirmationsAny}">