diff --git a/src/MobileApps/Small-Talk/O2NextGen.SmallTalk/O2NextGen.SmallTalk/Controls/ExtendedListView.cs b/src/MobileApps/Small-Talk/O2NextGen.SmallTalk/O2NextGen.SmallTalk/Controls/ExtendedListView.cs new file mode 100644 index 00000000..02e2ff86 --- /dev/null +++ b/src/MobileApps/Small-Talk/O2NextGen.SmallTalk/O2NextGen.SmallTalk/Controls/ExtendedListView.cs @@ -0,0 +1,63 @@ +using O2NextGen.SmallTalk.Core.ViewModels; +using System; +using System.Linq; +using Xamarin.Forms; + +namespace O2NextGen.SmallTalk.Core.Controls +{ + public class ExtendedListView : ListView + { + public ExtendedListView() : this(ListViewCachingStrategy.RecycleElement) + { + } + + public ExtendedListView(ListViewCachingStrategy cachingStrategy) : base(cachingStrategy) + { + //this.ItemAppearing += OnItemAppearing; + this.PropertyChanged += ExtendedListView_PropertyChanged; + } + + private void ExtendedListView_PropertyChanged(object sender, System.ComponentModel.PropertyChangedEventArgs e) + { + if (this.BindingContext == null) + return; + var context = this.BindingContext as ChatDetailViewModel; + if (context.Messages == null) return; + //GET SCROLL CURRENT POSITION HERE! + var target = context.Messages[context.Messages.Count - 1]; + + ScrollTo(target, ScrollToPosition.End, true); + } + + //private void OnItemAppearing(object sender, ItemVisibilityEventArgs e) + //{ + // if (ItemAppearingCommand != null) + // { + // ItemAppearingCommand?.Execute(e.Item); + // } + //} + public void ScrollToLast() + { + Device.BeginInvokeOnMainThread(() => + { + try + { + if (ItemsSource != null && ItemsSource.Cast().Count() > 0) + { + var msg = ItemsSource.Cast().LastOrDefault(); + if (msg != null) + { + ScrollTo(msg, ScrollToPosition.End, false); + } + + } + } + catch (Exception ex) + { + System.Diagnostics.Debug.WriteLine(ex.ToString()); + } + + }); + } + } +} diff --git a/src/MobileApps/Small-Talk/O2NextGen.SmallTalk/O2NextGen.SmallTalk/GlobalSetting.cs b/src/MobileApps/Small-Talk/O2NextGen.SmallTalk/O2NextGen.SmallTalk/GlobalSetting.cs index d8af2d53..ddf15ef9 100644 --- a/src/MobileApps/Small-Talk/O2NextGen.SmallTalk/O2NextGen.SmallTalk/GlobalSetting.cs +++ b/src/MobileApps/Small-Talk/O2NextGen.SmallTalk/O2NextGen.SmallTalk/GlobalSetting.cs @@ -4,6 +4,6 @@ public class GlobalSetting { public string GatewayChatEndpoint { get; set; } = "https://api-smalltalk.o2bus.com"; public static GlobalSetting Instance { get; } = new GlobalSetting(); - public string HubConnectionURL { get; set; } = "http://localhost:5000/chathub"; + public string HubConnectionURL { get; set; } = "https://signalr.o2bus.com/chathub";// "http://localhost:5000/chathub"; // } } diff --git a/src/MobileApps/Small-Talk/O2NextGen.SmallTalk/O2NextGen.SmallTalk/ViewModels/ChatDetailViewModel.cs b/src/MobileApps/Small-Talk/O2NextGen.SmallTalk/O2NextGen.SmallTalk/ViewModels/ChatDetailViewModel.cs index 313161c7..bcfbd4ee 100644 --- a/src/MobileApps/Small-Talk/O2NextGen.SmallTalk/O2NextGen.SmallTalk/ViewModels/ChatDetailViewModel.cs +++ b/src/MobileApps/Small-Talk/O2NextGen.SmallTalk/O2NextGen.SmallTalk/ViewModels/ChatDetailViewModel.cs @@ -23,7 +23,7 @@ public class ChatDetailViewModel : ViewModelBase #region Commands public ICommand SendMsgCommand { get; private set; } - + public ICommand LoadItemsCommand { get; private set; } private readonly HubConnection hubConnection; #endregion @@ -38,7 +38,7 @@ public ChatDetailViewModel() this.MultipleInitialization = true; _chatService = DependencyService.Get(); SendMsgCommand = new Command(async (item) => await SendMsgAsync()); - + LoadItemsCommand = new Command(async () => await RelaodData()); hubConnection = new HubConnectionBuilder() .WithUrl(GlobalSetting.Instance.HubConnectionURL) .Build(); @@ -84,11 +84,9 @@ public string Message #region Methods public override async Task InitializeAsync(IDictionary query) { - - await hubConnection.StartAsync(); await hubConnection.InvokeAsync("NewUserAsync","Denis"); - + await RelaodData(); } private async Task SendMsgAsync() diff --git a/src/MobileApps/Small-Talk/O2NextGen.SmallTalk/O2NextGen.SmallTalk/Views/ChatDetailView.xaml b/src/MobileApps/Small-Talk/O2NextGen.SmallTalk/O2NextGen.SmallTalk/Views/ChatDetailView.xaml index e59d17b9..5718eb8e 100644 --- a/src/MobileApps/Small-Talk/O2NextGen.SmallTalk/O2NextGen.SmallTalk/Views/ChatDetailView.xaml +++ b/src/MobileApps/Small-Talk/O2NextGen.SmallTalk/O2NextGen.SmallTalk/Views/ChatDetailView.xaml @@ -6,7 +6,7 @@ x:Class="O2NextGen.SmallTalk.Core.Views.ChatDetailView" xmlns:viewModelBase="clr-namespace:O2NextGen.SmallTalk.Core.ViewModels.Base" xmlns:viewmodels="clr-namespace:O2NextGen.SmallTalk.Core.ViewModels" - xmlns:smalltalk="clr-namespace:O2NextGen.Sdk.NetCore.Models.smalltalk;assembly=O2NextGen.Sdk.Models" xmlns:converter="clr-namespace:O2NextGen.SmallTalk.Core.Converters" + xmlns:smalltalk="clr-namespace:O2NextGen.Sdk.NetCore.Models.smalltalk;assembly=O2NextGen.Sdk.Models" xmlns:converter="clr-namespace:O2NextGen.SmallTalk.Core.Converters" xmlns:controls="clr-namespace:O2NextGen.SmallTalk.Core.Controls" viewModelBase:ViewModelLocator.AutoWireViewModel="true" x:DataType="viewmodels:ChatDetailViewModel"> @@ -19,9 +19,9 @@