protected override async void AnimateAddImpl(RecyclerView.ViewHolder viewHolder)
        {
            var flashColor = new Color(ContextCompat.GetColor(viewHolder.ItemView.Context, Resource.Color.blotterFlashBackground));
            var normalColor = new Color(ContextCompat.GetColor(viewHolder.ItemView.Context, Resource.Color.blotterBackground));

            Drawable[] color = { new ColorDrawable(flashColor), new ColorDrawable(normalColor) };
            TransitionDrawable trans = new TransitionDrawable(color);

            viewHolder.ItemView.Background = trans;
            viewHolder.ItemView.ScaleY = 0;
            ViewCompat.Animate(viewHolder.ItemView).Alpha(1).ScaleY(1).SetDuration(150).Start();

            await Task.Delay(500);

            trans.StartTransition(700);
        }
		private void ChangeColor(Color newColor) {
			tabs.SetBackgroundColor(newColor);
		
			// change ActionBar color just if an ActionBar is available
			Drawable colorDrawable = new ColorDrawable(newColor);
			Drawable bottomDrawable = new ColorDrawable(Resources.GetColor(Android.Resource.Color.Transparent));
			LayerDrawable ld = new LayerDrawable(new Drawable[]{colorDrawable, bottomDrawable});
			if (oldBackground == null) {
				SupportActionBar.SetBackgroundDrawable(ld);
			} else {
				TransitionDrawable td = new TransitionDrawable(new Drawable[]{oldBackground, ld});
				SupportActionBar.SetBackgroundDrawable(td);
				td.StartTransition(200);
			}

			oldBackground = ld;
			currentColor = newColor;
		}
		private void ChangeColor(Color newColor)
		{
			_tabs.IndicatorColor = newColor;
			_tabs.TextColor = newColor;

			// change ActionBar color just if an ActionBar is available
			if (Build.VERSION.SdkInt >= Android.OS.BuildVersionCodes.Honeycomb)
			{

				Drawable colorDrawable = new ColorDrawable(newColor);
				Drawable bottomDrawable = Resources.GetDrawable(Resource.Drawable.actionbar_bottom);
				LayerDrawable ld = new LayerDrawable(new Drawable[] { colorDrawable, bottomDrawable });

				if (_oldBackground == null)
				{

					if ((int)Build.VERSION.SdkInt < 17)
					{
						ld.Callback = _drawableCallback;
					}
					else
					{
						ActionBar.SetBackgroundDrawable(ld);
					}
				}
				else
				{
					TransitionDrawable td = new TransitionDrawable(new Drawable[] { _oldBackground, ld });

					// workaround for broken ActionBarContainer drawable handling on
					// pre-API 17 builds
					// https://github.com/android/platform_frameworks_base/commit/a7cc06d82e45918c37429a59b14545c6a57db4e4
					if ((int)Build.VERSION.SdkInt < 17)
					{
						td.Callback = _drawableCallback;
					}
					else
					{
						ActionBar.SetBackgroundDrawable(td);
					}

					td.StartTransition(200);

				}

				_oldBackground = ld;

				// http://stackoverflow.com/questions/11002691/actionbar-setbackgrounddrawable-nulling-background-from-thread-handler
				ActionBar.SetDisplayShowTitleEnabled(false);
				ActionBar.SetDisplayShowTitleEnabled(true);
			}

			_currentColor = newColor;
		}
		void updateBackground ()
		{
			var location = WuClient.Shared.Selected;

			var random = location == null || Settings.RandomBackgrounds;

			var gradients = location.GetTimeOfDayGradient (random);

			using (var gd = new GradientDrawable (GradientDrawable.Orientation.TopBottom, gradients.Item1.ToArray ()))
			{
				gd.SetCornerRadius (0f);

				if (viewPager.Background == null)
				{
					viewPager.Background = gd;

					Window.SetStatusBarColor (gradients.Item1 [0]);
					Window.SetNavigationBarColor (gradients.Item1 [1]);
				}
				else
				{
					var backgrounds = new Drawable [2];

					backgrounds [0] = viewPager.Background;
					backgrounds [1] = gd;

					var crossfader = new TransitionDrawable (backgrounds);

					viewPager.Background = crossfader;

					crossfader.StartTransition (1000);

					var statusBarAnimator = ValueAnimator.OfArgb (Window.StatusBarColor, gradients.Item1 [0]);

					statusBarAnimator.SetDuration (1000);
					statusBarAnimator.SetInterpolator (new AccelerateDecelerateInterpolator ());

					statusBarAnimator.Update += (sender, e) =>
					{
						var val = e.Animation.AnimatedValue as Java.Lang.Integer;

						var color = new Color ((int)val);

						Window.SetStatusBarColor (color);
					};

					var naviationBarAnimator = ValueAnimator.OfArgb (Window.NavigationBarColor, gradients.Item1 [1]);

					naviationBarAnimator.SetDuration (1000);
					naviationBarAnimator.SetInterpolator (new AccelerateDecelerateInterpolator ());

					naviationBarAnimator.Update += (sender, e) =>
					{
						var val = e.Animation.AnimatedValue as Java.Lang.Integer;

						var color = new Color ((int)val);

						Window.SetNavigationBarColor (color);
					};

					statusBarAnimator.Start ();
					naviationBarAnimator.Start ();
				}
			}
		}