/** Called when we successfully obtain a connection to a client. */
  @Override
  public void onConnected(Bundle connectionHint) {
    debugLog("onConnected: connected!");

    if (connectionHint != null) {
      debugLog("onConnected: connection hint provided. Checking for invite.");
      Invitation inv = connectionHint.getParcelable(Multiplayer.EXTRA_INVITATION);
      if (inv != null && inv.getInvitationId() != null) {
        // retrieve and cache the invitation ID
        debugLog("onConnected: connection hint has a room invite!");
        mInvitation = inv;
        debugLog("Invitation ID: " + mInvitation.getInvitationId());
      }

      // Do we have any requests pending?
      mRequests = Games.Requests.getGameRequestsFromBundle(connectionHint);
      if (!mRequests.isEmpty()) {
        // We have requests in onConnected's connectionHint.
        debugLog("onConnected: connection hint has " + mRequests.size() + " request(s)");
      }

      debugLog("onConnected: connection hint provided. Checking for TBMP game.");
      mTurnBasedMatch = connectionHint.getParcelable(Multiplayer.EXTRA_TURN_BASED_MATCH);
    }

    // we're good to go
    succeedSignIn();
  }
 /**
  * Returns the invitation ID received through an invitation notification. This should be called
  * from your GameHelperListener's
  *
  * @link{GameHelperListener#onSignInSucceeded method, to check if there's an invitation available.
  *     In that case, accept the invitation.
  * @return The id of the invitation, or null if none was received.
  */
 public String getInvitationId() {
   if (!mGoogleApiClient.isConnected()) {
     Log.w(
         TAG,
         "Warning: getInvitationId() should only be called when signed in, "
             + "that is, after getting onSignInSuceeded()");
   }
   return mInvitation == null ? null : mInvitation.getInvitationId();
 }
  @Override
  public void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    if (requestCode == RC_ARMY_CHOOSER) {
      if (resultCode == Activity.RESULT_OK) {
        Bundle extras = data.getExtras();

        mArmyChosen = extras.getInt("army");

        if (roomConfigInvitation != null) {
          // accepted invitation
          ((BaseGameActivity) getActivity()).getGamesClient().joinRoom(roomConfigInvitation);
          return;
        }

        int nbPlayers = extras.getInt("nb_players", -1);
        if (nbPlayers > 0) {
          mNbPlayers = nbPlayers;
          invitePlayersToMyGame();
        } else {
          mNbPlayers = 4;
          startQuickGame();
        }
      }
    } else if (requestCode == RC_INVITATION_INBOX) {
      if (resultCode != Activity.RESULT_OK) {
        // canceled
        return;
      }

      // get the selected invitation
      Bundle extras = data.getExtras();
      Invitation invitation = extras.getParcelable(GamesClient.EXTRA_INVITATION);

      // accept it, show the army chooser
      roomConfigInvitation =
          ((GameActivity) getActivity())
              .makeBasicRoomConfigBuilder()
              .setInvitationIdToAccept(invitation.getInvitationId())
              .build();
      showJoinGameChooser();
    }
  }
  /** Called when we successfully obtain a connection to a client. */
  @Override
  public void onConnected(Bundle connectionHint) {
    debugLog("onConnected: connected!");

    if (connectionHint != null) {
      debugLog("onConnected: connection hint provided. Checking for invite.");
      Invitation inv = connectionHint.getParcelable(Multiplayer.EXTRA_INVITATION);
      if (inv != null && inv.getInvitationId() != null) {
        // retrieve and cache the invitation ID
        debugLog("onConnected: connection hint has a room invite!");
        mInvitation = inv;
        debugLog("Invitation ID: " + mInvitation.getInvitationId());
      }

      debugLog("onConnected: connection hint provided. Checking for TBMP game.");
      mTurnBasedMatch = connectionHint.getParcelable(Multiplayer.EXTRA_TURN_BASED_MATCH);
    }

    // we're good to go
    succeedSignIn();
  }
  /** Called when we successfully obtain a connection to a client. */
  @Override
  public void onConnected(Bundle connectionHint) {
    debugLog("onConnected: connected! client=" + mClientCurrentlyConnecting);

    // Mark the current client as connected
    mConnectedClients |= mClientCurrentlyConnecting;

    // If this was the games client and it came with an invite, store it for
    // later retrieval.
    if (mClientCurrentlyConnecting == CLIENT_GAMES && connectionHint != null) {
      debugLog("onConnected: connection hint provided. Checking for invite.");
      Invitation inv = connectionHint.getParcelable(GamesClient.EXTRA_INVITATION);
      if (inv != null && inv.getInvitationId() != null) {
        // accept invitation
        debugLog("onConnected: connection hint has a room invite!");
        mInvitationId = inv.getInvitationId();
        debugLog("Invitation ID: " + mInvitationId);
      }
    }

    // connect the next client in line, if any.
    connectNextClient();
  }