public StatusView(bool hasQuoteView) { InitializeComponent(); gridImageWrapper = new GridImageWrapper(MediaGrid); RootView.GestureRecognizers.Add(new TapGestureRecognizer() { Command = new Command(() => { if (Status == null) { return; } App.Navigation.PushAsync(new StatusExpandPage(DisplayStatus)); }) }); HeaderView.GestureRecognizers.Add(new TapGestureRecognizer() { Command = new Command(async() => { if (Status == null) { return; } var selected = await Util.SelectAccount("유저를 확인할 계정을 선택하세요", Status.Issuer); if (selected == null) { return; } await App.Navigation.PushAsync(new UserDetailPage(Status.Creater, selected)); }) }); if (hasQuoteView) { quoteView = new StatusView(false); QuoteViewFrame.Content = (quoteView); } ProfileImage.GestureRecognizers.Add(new TapGestureRecognizer { Command = new Command(() => { //NotificationCell reuse if (BindingContext is DataUser) { var user = BindingContext as DataUser; App.Navigation.PushAsync(new UserDetailPage(user, App.Tail.Account.GetAccountGroup(user.Issuer[0]))); return; } App.Navigation.PushAsync(new UserDetailPage(DisplayStatus.Creater, App.Tail.Account.GetAccountGroup(Status.Issuer[0]))); }), NumberOfTapsRequired = 1 }); ReplyImage.GestureRecognizers.Add(new TapGestureRecognizer { Command = new Command(async() => { var page = new ContentPage() { Style = (Style)Application.Current.Resources["backgroundStyle"] }; var selected = await Util.SelectAccount("어떤 계정으로 답글을 작성할까요?", Status.Issuer); if (selected == null) { return; } var view = new StatusWriterView(selected) { BindingContext = page }; view.SetReplyStatus(Status); page.Content = view; page.Title = "트윗작성"; #pragma warning disable CS4014 // 이 호출을 대기하지 않으므로 호출이 완료되기 전에 현재 메서드가 계속 실행됩니다. App.Navigation.PushAsync(page); #pragma warning restore CS4014 // 이 호출을 대기하지 않으므로 호출이 완료되기 전에 현재 메서드가 계속 실행됩니다. }), NumberOfTapsRequired = 1 }); RetweetImage.GestureRecognizers.Add(new TapGestureRecognizer { Command = new Command(async() => { try { var selected = await Util.SelectAccount("리트윗할 계정을 선택하세요", Status.Issuer); if (selected == null) { return; } var animation = new Animation(v => RetweetImage.Rotation = v, 0, 360); RetweetImage.Animate("Spin", animation, 16, 500, null, null, () => { return(true); }); await App.Tail.TwitterAPI.RetweetStatusAsync(selected.AccountForWrite, Status.ID); DisplayStatus.IsRetweetedByUser = true; UpdateButton(); RetweetImage.AbortAnimation("Spin"); #pragma warning disable CS4014 // 이 호출을 대기하지 않으므로 호출이 완료되기 전에 현재 메서드가 계속 실행됩니다. RetweetImage.RotateTo(360); #pragma warning restore CS4014 // 이 호출을 대기하지 않으므로 호출이 완료되기 전에 현재 메서드가 계속 실행됩니다. } catch (Exception e) { Util.HandleException(e); } }), NumberOfTapsRequired = 1 }); FavoriteImage.GestureRecognizers.Add(new TapGestureRecognizer { Command = new Command(async() => { try { var selected = await Util.SelectAccount("관심글할 계정을 선택하세요", Status.Issuer); if (selected == null) { return; } var animation = new Animation(v => FavoriteImage.Rotation = v, 0, 360); FavoriteImage.Animate("Spin", animation, 16, 500, null, null, () => { return(true); }); await App.Tail.TwitterAPI.CreateFavoriteAsync(selected.AccountForWrite, Status.ID); DisplayStatus.IsFavortedByUser = true; UpdateButton(); FavoriteImage.AbortAnimation("Spin"); #pragma warning disable CS4014 // 이 호출을 대기하지 않으므로 호출이 완료되기 전에 현재 메서드가 계속 실행됩니다. FavoriteImage.RotateTo(360); #pragma warning restore CS4014 // 이 호출을 대기하지 않으므로 호출이 완료되기 전에 현재 메서드가 계속 실행됩니다. } catch (Exception e) { Util.HandleException(e); } }), NumberOfTapsRequired = 1 }); DeleteImage.GestureRecognizers.Add(new TapGestureRecognizer { Command = new Command(async() => { var group = App.Tail.Account.GetAccountGroup(Status.Creater.ID); if (group != null) { if (await Application.Current.MainPage.DisplayAlert("제거 확인", "이 트윗이 제거됩니다, 진행합니까?", "네", "아니오")) { try { await App.Tail.TwitterAPI.DestroyStatusAsync(group.AccountForWrite, Status.ID); } catch (Exception e) { await Application.Current.MainPage.DisplayAlert("오류", e.Message, "확인"); return; } } else { return; } } Statuses?.Remove(Status); }), NumberOfTapsRequired = 1 }); MoreImage.GestureRecognizers.Add(new TapGestureRecognizer { Command = new Command(async() => { try { DataStatus target = Status; if (Status.RetweetedStatus != null) { if (!await Application.Current.MainPage.DisplayAlert("리트윗된 트윗", "이 트윗은 다른 유저가 리트윗한 트윗입니다. 어떤 트윗을 사용합니까?" + "이 트윗을 사용해 다른 계정에서 리트윗/마음을 찍는경우 리트윗한 사람에게까지 알림이 갈 수 있습니다", "이 트윗", "원본트윗")) { target = Status.RetweetedStatus; } } string[] moreActionSheet = { "다른 계정으로 리트윗", "다른 계정으로 관심글", "트윗 뮤트" }; var selected = await Application.Current.MainPage.DisplayActionSheet("이 트윗으로...", "취소", null, moreActionSheet); AccountGroup account; switch (selected) { case "다른 계정으로 리트윗": account = await Util.SelectAccount("리트윗할 계정을 선택하세요"); if (account == null) { return; } await App.Tail.TwitterAPI.RetweetStatusAsync(account.AccountForWrite, target.ID); break; case "다른 계정으로 관심글": account = await Util.SelectAccount("관심글할 계정을 선택하세요"); if (account == null) { return; } await App.Tail.TwitterAPI.CreateFavoriteAsync(account.AccountForWrite, target.ID); break; case "트윗 뮤트": App.Tail.Mute.RegisterMute(new DataMute() { Target = new DataMute.StatusTarget() { ID = Status.ID, Status = Status } }); Statuses?.Remove(Status); break; } } catch (Exception e) { Util.HandleException(e); } }), NumberOfTapsRequired = 1 }); for (int i = 0; i < 4; i++) { int inx = i; //Value Copy gridImageWrapper[i].GestureRecognizers.Add(new TapGestureRecognizer { Command = new Command(() => { App.Navigation.PushAsync(new MediaPage(DisplayStatus, inx)); }), NumberOfTapsRequired = 1 }); } pollViews = new PollView[4]; for (int i = 0; i < 4; i++) { pollViews[i] = new PollView(); } }
protected override void OnParentSet() { base.OnParentSet(); StatusView.Update(); }
protected override void OnBindingContextChanged() { StatusView.BindingContext = BindingContext; StatusView.Update(); base.OnBindingContextChanged(); }
protected override void OnDisappearing() { base.OnDisappearing(); StatusView.ClearImage(); }
protected override void OnAppearing() { base.OnAppearing(); StatusView.UpdateImage(); }