| Index: blimp/client/app/android/java/src/org/chromium/blimp/BlimpRendererActivity.java
 | 
| diff --git a/blimp/client/app/android/java/src/org/chromium/blimp/BlimpRendererActivity.java b/blimp/client/app/android/java/src/org/chromium/blimp/BlimpRendererActivity.java
 | 
| index 23d52e68d5f9244885f1ffa0af225003005954c9..35f8e190693d51dd59cfdb6b2808b7c7c33ecd3b 100644
 | 
| --- a/blimp/client/app/android/java/src/org/chromium/blimp/BlimpRendererActivity.java
 | 
| +++ b/blimp/client/app/android/java/src/org/chromium/blimp/BlimpRendererActivity.java
 | 
| @@ -22,12 +22,16 @@ import org.chromium.ui.widget.Toast;
 | 
|   * The {@link Activity} for rendering the main Blimp client.  This loads the Blimp rendering stack
 | 
|   * and displays it.
 | 
|   */
 | 
| -public class BlimpRendererActivity extends Activity implements BlimpLibraryLoader.Callback,
 | 
| -        TokenSource.Callback {
 | 
| -
 | 
| +public class BlimpRendererActivity extends Activity
 | 
| +        implements BlimpLibraryLoader.Callback, TokenSource.Callback, BlimpClientSession.Callback {
 | 
|      private static final int ACCOUNT_CHOOSER_INTENT_REQUEST_CODE = 100;
 | 
|      private static final String TAG = "Blimp";
 | 
| +
 | 
| +    /** Provides user authentication tokens that can be used to query for engine assignments.  This
 | 
| +     *  can potentially query GoogleAuthUtil for an OAuth2 authentication token with userinfo.email
 | 
| +     *  privileges for a chosen Android account. */
 | 
|      private TokenSource mTokenSource;
 | 
| +
 | 
|      private BlimpView mBlimpView;
 | 
|      private Toolbar mToolbar;
 | 
|      private BlimpClientSession mBlimpClientSession;
 | 
| @@ -37,6 +41,12 @@ public class BlimpRendererActivity extends Activity implements BlimpLibraryLoade
 | 
|      protected void onCreate(Bundle savedInstanceState) {
 | 
|          super.onCreate(savedInstanceState);
 | 
|  
 | 
| +        // Build a TokenSource that will internally retry accessing the underlying TokenSourceImpl.
 | 
| +        // This will exponentially backoff while it tries to get the access token.  See
 | 
| +        // {@link RetryingTokenSource} for more information.  The underlying
 | 
| +        // TokenSourceImpl will attempt to query GoogleAuthUtil, but might fail if there is no
 | 
| +        // account selected, in which case it will ask this Activity to show an account chooser and
 | 
| +        // notify it of the selection result.
 | 
|          mTokenSource = new RetryingTokenSource(new TokenSourceImpl(this));
 | 
|          mTokenSource.setCallback(this);
 | 
|          mTokenSource.getToken();
 | 
| @@ -115,8 +125,7 @@ public class BlimpRendererActivity extends Activity implements BlimpLibraryLoade
 | 
|  
 | 
|          setContentView(R.layout.blimp_main);
 | 
|  
 | 
| -        mBlimpClientSession = new BlimpClientSession();
 | 
| -        mBlimpClientSession.connect();
 | 
| +        mBlimpClientSession = new BlimpClientSession(this);
 | 
|  
 | 
|          mBlimpView = (BlimpView) findViewById(R.id.renderer);
 | 
|          mBlimpView.initializeRenderer(mBlimpClientSession);
 | 
| @@ -131,8 +140,7 @@ public class BlimpRendererActivity extends Activity implements BlimpLibraryLoade
 | 
|      // TokenSource.Callback implementation.
 | 
|      @Override
 | 
|      public void onTokenReceived(String token) {
 | 
| -        // TODO(dtrainor): Do something with the token and the assigner!
 | 
| -        Toast.makeText(this, R.string.signin_get_token_succeeded, Toast.LENGTH_SHORT).show();
 | 
| +        if (mBlimpClientSession != null) mBlimpClientSession.connect(token);
 | 
|      }
 | 
|  
 | 
|      @Override
 | 
| @@ -140,11 +148,16 @@ public class BlimpRendererActivity extends Activity implements BlimpLibraryLoade
 | 
|          // Ignore isTransient here because we're relying on the auto-retry TokenSource.
 | 
|          // TODO(dtrainor): Show a better error dialog/message.
 | 
|          Toast.makeText(this, R.string.signin_get_token_failed, Toast.LENGTH_LONG).show();
 | 
| -        finish();
 | 
|      }
 | 
|  
 | 
|      @Override
 | 
|      public void onNeedsAccountToBeSelected(Intent suggestedIntent) {
 | 
|          startActivityForResult(suggestedIntent, ACCOUNT_CHOOSER_INTENT_REQUEST_CODE);
 | 
|      }
 | 
| +
 | 
| +    // BlimpClientSession.Callback implementation.
 | 
| +    @Override
 | 
| +    public void onAssignmentReceived(int result, int suggestedMessageResourceId) {
 | 
| +        Toast.makeText(this, suggestedMessageResourceId, Toast.LENGTH_LONG).show();
 | 
| +    }
 | 
|  }
 | 
| 
 |