private void Rebind() { ResetTrackedObservables(); var currentEntry = ActiveTimeEntry; if (!canRebind || currentEntry == null) { return; } var res = activity.Resources; if (currentEntry.State == TimeEntryState.New && currentEntry.StopTime.HasValue) { // Save button ActionButton.Text = res.GetString(Resource.String.TimerSaveButtonText); ActionButton.SetBackgroundColor(res.GetColor(Resource.Color.gray)); } else if (currentEntry.State == TimeEntryState.Running) { // Stop button ActionButton.Text = res.GetString(Resource.String.TimerStopButtonText); ActionButton.SetBackgroundColor(res.GetColor(Resource.Color.bright_red)); } else { // Start button ActionButton.Text = res.GetString(Resource.String.TimerStartButtonText); ActionButton.SetBackgroundColor(res.GetColor(Resource.Color.bright_green)); } ActionButton.Visibility = HideAction ? ViewStates.Gone : ViewStates.Visible; if (currentEntry.State == TimeEntryState.Running && !HideDuration) { var duration = currentEntry.GetDuration(); DurationTextView.Text = TimeSpan.FromSeconds((long)duration.TotalSeconds).ToString(); DurationTextView.Visibility = ViewStates.Visible; // Schedule next rebind: handler.RemoveCallbacks(Rebind); handler.PostDelayed(Rebind, 1000 - duration.Milliseconds); } else { DurationTextView.Visibility = ViewStates.Gone; } }