@Override
 public IBinder onBind(Intent intent) {
   boolean firstRunNecessary =
       FirstRunFlowSequencer.checkIfFirstRunIsNecessary(getApplicationContext(), false) != null;
   if (firstRunNecessary) return null;
   mConnection = CustomTabsConnection.getInstance(getApplication());
   mConnection.logCall("Service#onBind()", true);
   return super.onBind(intent);
 }
 @Override
 protected boolean mayLaunchUrl(
     CustomTabsSessionToken sessionToken,
     Uri url,
     Bundle extras,
     List<Bundle> otherLikelyBundles) {
   return mConnection.mayLaunchUrl(sessionToken, url, extras, otherLikelyBundles);
 }
 @Override
 protected boolean cleanUpSession(CustomTabsSessionToken sessionToken) {
   mConnection.cleanUpSession(sessionToken);
   return super.cleanUpSession(sessionToken);
 }
 @Override
 protected boolean updateVisuals(CustomTabsSessionToken sessionToken, Bundle bundle) {
   return mConnection.updateVisuals(sessionToken, bundle);
 }
 @Override
 protected Bundle extraCommand(String commandName, Bundle args) {
   return mConnection.extraCommand(commandName, args);
 }
 @Override
 protected boolean newSession(CustomTabsSessionToken sessionToken) {
   return mConnection.newSession(sessionToken);
 }
 @Override
 protected boolean warmup(long flags) {
   return mConnection.warmup(flags);
 }
 @Override
 public boolean onUnbind(Intent intent) {
   super.onUnbind(intent);
   if (mConnection != null) mConnection.logCall("Service#onUnbind()", true);
   return false; // No support for onRebind().
 }