public void TestCreateMonthReport () { RunAsync (async delegate { var view = new SummaryReportView (); view.Period = ZoomLevel.Month; await view.Load (0); Assert.AreEqual (false, view.IsLoading); Assert.AreEqual (false, view.IsError); Assert.AreEqual (true, view.ActivityCount > 27); Assert.AreEqual (true, view.Projects.Count > 0); Assert.AreEqual (true, view.CollapsedProjects.Count > 0); }); }
public void Reset (SummaryReportView data) { this.data = data; // Cancel old animation if (currentRevealAnimation != null) { currentRevealAnimation.Cancel (); currentRevealAnimation = null; } if (currentSelectAnimation != null) { currentSelectAnimation.Cancel (); currentSelectAnimation = null; } var totalSlices = data == null || data.CollapsedProjects == null ? 0 : data.CollapsedProjects.Count; SetActiveSlice (-1, updateStats: false); backgroundView.Visibility = ViewStates.Visible; backgroundView.Radius = defaultRadius; ResetSlices (totalSlices); if (totalSlices > 0) { var totalTime = data.CollapsedProjects.Sum (x => x.TotalTime); var startAngle = 0f; for (var i = 0; i < totalSlices; i++) { var slice = slices [i]; var project = data.CollapsedProjects [i]; var percentOfAll = (float)project.TotalTime / totalTime; slice.Visibility = ViewStates.Gone; slice.Radius = defaultRadius; if (project.Color == ProjectModel.GroupedProjectColorIndex) { slice.Color = Color.ParseColor (ProjectModel.GroupedProjectColor); } else { slice.Color = Color.ParseColor (ProjectModel.HexColors [project.Color % ProjectModel.HexColors.Length]); } slice.StartAngle = startAngle; startAngle += percentOfAll * 360; } } // Detect state var isLoading = data == null || data.IsLoading; var isEmpty = !isLoading && totalSlices == 0; if (isLoading) { // Loading state loadingOverlayView.Visibility = ViewStates.Visible; loadingOverlayView.Alpha = 1f; emptyOverlayView.Visibility = ViewStates.Gone; statsOverlayView.Visibility = ViewStates.Gone; } else if (isEmpty) { // Error state loadingOverlayView.Visibility = ViewStates.Visible; loadingOverlayView.Alpha = 1f; emptyOverlayView.Visibility = ViewStates.Visible; emptyOverlayView.Alpha = 0f; statsOverlayView.Visibility = ViewStates.Gone; // Animate overlay in var scene = new AnimatorSet (); var fadeIn = ObjectAnimator.OfFloat (emptyOverlayView, "alpha", 0f, 1f).SetDuration (500); var fadeOut = ObjectAnimator.OfFloat (loadingOverlayView, "alpha", 1f, 0f).SetDuration (500); fadeOut.AnimationEnd += delegate { loadingOverlayView.Visibility = ViewStates.Gone; }; scene.Play (fadeOut); scene.Play (fadeIn).After (3 * fadeOut.Duration / 4); currentRevealAnimation = scene; scene.Start(); } else { // Normal state var scene = new AnimatorSet (); // Fade loading message out statsOverlayView.Visibility = ViewStates.Visible; statsOverlayView.Alpha = 0f; var fadeOverlayOut = ObjectAnimator.OfFloat (loadingOverlayView, "alpha", 1f, 0f).SetDuration (500); fadeOverlayOut.AnimationEnd += delegate { loadingOverlayView.Visibility = ViewStates.Gone; }; scene.Play (fadeOverlayOut); var fadeOverlayIn = ObjectAnimator.OfFloat (statsOverlayView, "alpha", 0f, 1f).SetDuration (500); scene.Play (fadeOverlayIn).After (3 * fadeOverlayOut.Duration / 4); var donutReveal = ValueAnimator.OfFloat (0, 360); donutReveal.SetDuration (750); donutReveal.Update += (sender, e) => ShowSlices ((float)e.Animation.AnimatedValue); scene.Play (donutReveal).After (fadeOverlayOut.Duration / 2); currentRevealAnimation = scene; scene.Start(); } UpdateStats (); RequestLayout (); }
public async void LoadData() { if ( IsClean) { try { IsLoading = true; dataSource = new SummaryReportView (); dataSource.Period = ZoomLevel; _delaying = true; cts = new CancellationTokenSource (); await Task.Delay (500, cts.Token); _delaying = false; await dataSource.Load (TimeSpaceIndex); if ( !dataSource.IsLoading) { barChart.ReportView = dataSource; pieChart.ReportView = dataSource; } IsClean = IsError; // Declare ReportView as clean if an error occurs.. } catch (Exception ex) { IsClean = true; } finally { IsLoading = false; _delaying = false; cts.Dispose (); } } }
public void Reset (SummaryReportView data) { // Cancel old animation if (currentAnimation != null) { currentAnimation.Cancel (); currentAnimation = null; } // Not zooming isZooming = false; var totalRows = 0; var hasTime = false; if (data == null) { backgroundView.XAxisLabels = null; ResetRows (totalRows); } else { var showEveryYLabel = 1; var showValueLabels = true; backgroundView.XAxisLabels = data.ChartTimeLabels.ToArray (); totalRows = Math.Min (data.Activity.Count, data.ChartRowLabels.Count); ResetRows (totalRows); if (totalRows > 25) { showEveryYLabel = 3; showValueLabels = false; } for (var i = 0; i < totalRows; i++) { var activity = data.Activity [i]; var yLabel = data.ChartRowLabels [i]; if (activity.TotalTime > 0) { hasTime = true; } var barWidth = (float)activity.TotalTime / (float) (data.MaxTotal * 3600); var showYAxis = i % showEveryYLabel == 0; // Bind the data to row var row = rows [i]; row.RelativeWidth = barWidth; row.BarView.BillableTime = activity.BillableTime; row.BarView.TotalTime = activity.TotalTime; row.ValueTextView.Text = activity.FormattedTotalTime; row.ValueTextView.Visibility = showValueLabels ? ViewStates.Visible : ViewStates.Gone; row.YAxisTextView.Text = yLabel; row.YAxisTextView.Visibility = showYAxis ? ViewStates.Visible : ViewStates.Gone; } } // Detect state var isLoading = totalRows == 0 || (data != null && data.IsLoading); var isEmpty = !isLoading && !hasTime; if (isLoading) { // Loading state loadingOverlayView.Visibility = ViewStates.Visible; loadingOverlayView.Alpha = 1f; emptyOverlayView.Visibility = ViewStates.Gone; } else if (isEmpty) { // Error state loadingOverlayView.Visibility = ViewStates.Visible; loadingOverlayView.Alpha = 1f; emptyOverlayView.Visibility = ViewStates.Visible; emptyOverlayView.Alpha = 0f; // Animate overlay in var scene = new AnimatorSet (); var fadeIn = ObjectAnimator.OfFloat (emptyOverlayView, "alpha", 0f, 1f).SetDuration (500); var fadeOut = ObjectAnimator.OfFloat (loadingOverlayView, "alpha", 1f, 0f).SetDuration (500); fadeOut.AnimationEnd += delegate { loadingOverlayView.Visibility = ViewStates.Gone; }; scene.Play (fadeOut); scene.Play (fadeIn).After (3 * fadeOut.Duration / 4); currentAnimation = scene; scene.Start(); } else { // Normal state var scene = new AnimatorSet (); // Fade loading message out var fadeOverlayOut = ObjectAnimator.OfFloat (loadingOverlayView, "alpha", 1f, 0f).SetDuration (500); fadeOverlayOut.AnimationEnd += delegate { loadingOverlayView.Visibility = ViewStates.Gone; }; scene.Play (fadeOverlayOut); foreach (var row in rows) { var axisFadeIn = ObjectAnimator.OfFloat (row.YAxisTextView, "alpha", 0f, 1f).SetDuration (500); var barScaleUp = ObjectAnimator.OfFloat (row.BarView, "scaleX", 0f, 1f).SetDuration (750); var valueFadeIn = ObjectAnimator.OfFloat (row.ValueTextView, "alpha", 0f, 1f).SetDuration (400); scene.Play (axisFadeIn); scene.Play (barScaleUp).After (axisFadeIn.Duration / 2); scene.Play (valueFadeIn).After (barScaleUp); } currentAnimation = scene; scene.Start(); } RequestLayout (); }