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}">