title: How to update volume bar in MinimalMediaRouteProvider
body: <p>I am using <a href="https://developers.google.com/cast/reference/android/javadoc/reference/com/google/cast/MediaRouteHelper#registerMinimalMediaRouteProvider%28com.google.cast.CastContext,%20com.google.cast.MediaRouteAdapter%29" rel="nofollow noreferrer">registerMediaRouteProvider</a> and it gives you a volume bar to update the tv's volume.  I implemented <code>MediaRouteAdapter</code> and when I scrub the volume bar, the volume changes, but the volume bar's ui always resets back to 0.  How do I update the ui of the volume bar when the volume changes?</p>
  
  <pre><code>@Override
  public void onCreate(Bundle savedInstanceState) {
  
    mCastContext = new CastContext(getApplicationContext());
    MediaRouteHelper.registerMinimalMediaRouteProvider(mCastContext, this);
    mMediaRouter = MediaRouter.getInstance(getApplicationContext());
    mMediaRouteSelector = MediaRouteHelper.buildMediaRouteSelector(MediaRouteHelper.CATEGORY_CAST);
    mMetaData = new ContentMetadata();
  
    mMediaRouterCallback = new MyMediaRouterCallback();
    mMediaRouteButton.setRouteSelector(mMediaRouteSelector);
  }
  
  private class MyMediaRouterCallback extends MediaRouter.Callback {
      @Override
      public void onRouteSelected(MediaRouter router, RouteInfo route) {
          MediaRouteHelper.requestCastDeviceForRoute(route);
      }
  
      @Override
      public void onRouteUnselected(MediaRouter router, RouteInfo route) {
          try {
              if (mSession != null) {
                  Log.e(TAG, "Ending session and stopping application");
                  mSession.setStopApplicationWhenEnding(true);
                  mSession.endSession();
              } else {
                  Log.e(TAG, "onRouteUnselected: mSession is null");
              }
          } catch (IllegalStateException e) {
              Log.e(TAG, "onRouteUnselected:");
              e.printStackTrace();
          } catch (IOException e) {
              Log.e(TAG, "onRouteUnselected:");
              e.printStackTrace();
          }
          mSelectedDevice = null;
      }
  }
  
   @Override
  public void onDeviceAvailable(CastDevice device, String arg1, MediaRouteStateChangeListener listener) {
      mSelectedDevice = device;
      openSession();
  }
  
  @Override
  public void onSetVolume(double volume) {
      try {
          if (mMessageStream != null) {
              mMessageStream.setVolume(volume);
          }
      } catch (IllegalStateException e) {
          Log.e(TAG, "Problem sending Set Volume", e);
      } catch (IOException e) {
          Log.e(TAG, "Problem sending Set Volume", e);
      }
  }
  
  @Override
  public void onUpdateVolume(double volumeChange) {
      try {
          if (mCurrentRoute != null) {
              mCurrentRoute.requestUpdateVolume((int) (volumeChange * 20));
          }
      } catch (IllegalStateException e) {
          Log.e(TAG, "Problem sending Update Volume", e);
      }
  }
  </code></pre>
  
  <p>EDIT - added where I initialize mMessageStream</p>
  
  <pre><code>private void openSession() {
          mSession = new ApplicationSession(mCastContext, mSelectedDevice);
          int flags = 0;
          flags |= ApplicationSession.FLAG_DISABLE_NOTIFICATION;
          flags |= ApplicationSession.FLAG_DISABLE_LOCK_SCREEN_REMOTE_CONTROL;
          mSession.setApplicationOptions(flags);
  
          Log.d(TAG, "Beginning session with context: " + mCastContext);
          Log.d(TAG, "The session to begin: " + mSession);
          mSession.setListener(new com.google.cast.ApplicationSession.Listener() {
  
              @Override
              public void onSessionStarted(ApplicationMetadata appMetadata) {
                  Log.d(TAG, "Getting channel after session start");
                  ApplicationChannel channel = mSession.getChannel();
                  if (channel == null) {
                      Log.e(TAG, "channel = null");
                      return;
                  }
                  Log.d(TAG, "Creating and attaching Message Stream");
                  mMessageStream = new MediaProtocolMessageStream();
                  channel.attachMessageStream(mMessageStream);
  
                  if (mMessageStream.getPlayerState() == null) {
                      if (vastVideoView.getPlayingPlaylistItem() != null) {
                          loadMedia();
                      }
                  } else {
                      Log.e(TAG, "Found player already running; updating status");
                  }
              }
  
              @Override
              public void onSessionStartFailed(SessionError error) {
                  Log.e(TAG, "onStartFailed " + error + " code " + error.getCode());
                  nowifi.setVisibility(View.GONE);
              }
  
              @Override
              public void onSessionEnded(SessionError error) {
                  Log.i(TAG, "onEnded " + error);
                  controller.removeChromeCastListener();
                  controller.setChromeCast(false);
                  nowifi.setVisibility(View.GONE);
              }
          });
  
          try {
              Log.e(TAG, "Starting session with app name " + getString(R.string.app_id));
              mSession.startSession(getString(R.string.app_id));
  
              vastVideoView.stopPlayback();
  
              controller = vastVideoView.getMediaController();
              controller.setChromeCast(true);
              controller.setPausePlayListener(pausePlayListener);
              seekBar = controller.getSeekBar();
              seekBar.setProgress(0);
  
              mPlayButtonShowsPlay = true;
          } catch (IOException e) {
              Log.e(TAG, "Failed to open session", e);
              controller.removeChromeCastListener();
              controller.setChromeCast(false);
              nowifi.setVisibility(View.GONE);
          }
      }
  </code></pre>
  
  <p><img src="https://i.stack.imgur.com/oWfIO.png" alt="This is the volume bar that is not updating"></p>