Index: tools/android/kerberos/SpnegoAuthenticator/src/org/chromium/tools/spnegoauthenticator/SpnegoAuthenticatorActivity.java |
diff --git a/tools/android/kerberos/SpnegoAuthenticator/src/org/chromium/tools/spnegoauthenticator/SpnegoAuthenticatorActivity.java b/tools/android/kerberos/SpnegoAuthenticator/src/org/chromium/tools/spnegoauthenticator/SpnegoAuthenticatorActivity.java |
new file mode 100644 |
index 0000000000000000000000000000000000000000..1172a1e7a3667bcefc82ce5021f3b0e93ef34aa7 |
--- /dev/null |
+++ b/tools/android/kerberos/SpnegoAuthenticator/src/org/chromium/tools/spnegoauthenticator/SpnegoAuthenticatorActivity.java |
@@ -0,0 +1,131 @@ |
+// Copyright 2015 The Chromium Authors. All rights reserved. |
+// Use of this source code is governed by a BSD-style license that can be |
+// found in the LICENSE file. |
+ |
+package org.chromium.tools.spnegoauthenticator; |
+ |
+import android.accounts.AccountAuthenticatorActivity; |
+import android.accounts.AccountAuthenticatorResponse; |
+import android.accounts.AccountManager; |
+import android.app.NotificationManager; |
+import android.content.Context; |
+import android.content.Intent; |
+import android.os.Bundle; |
+import android.view.View; |
+import android.view.View.OnClickListener; |
+import android.widget.Button; |
+ |
+import org.chromium.base.Log; |
+ |
+/** Provides a UI to administrate the Spnego accounts. */ |
+public class SpnegoAuthenticatorActivity extends AccountAuthenticatorActivity { |
+ private static final String TAG = Constants.TAG; |
+ |
+ // Constants for passing information via intents. |
+ private static final String KEY_MODE = "mode"; |
+ private static final String KEY_ACCOUNT = "account"; |
+ private static final int MODE_INVALID = 0; |
+ private static final int MODE_ADD_ACCOUNT = 1; |
+ private static final int MODE_CONFIRM_CREDENTIALS = 2; |
+ |
+ @Override |
+ protected void onCreate(Bundle savedInstanceState) { |
+ super.onCreate(savedInstanceState); |
+ setContentView(R.layout.activity_account_authenticator); |
+ |
+ Intent intent = getIntent(); |
+ initUi(intent.getIntExtra(KEY_MODE, MODE_INVALID), intent.getStringExtra(KEY_ACCOUNT)); |
+ } |
+ |
+ /** Returns an intent that can be used to start the activity in AddAcount mode */ |
+ public static Intent getAddAccountIntent( |
+ Context context, AccountAuthenticatorResponse response) { |
+ Intent intent = new Intent(context, SpnegoAuthenticatorActivity.class); |
+ intent.putExtra(KEY_MODE, MODE_ADD_ACCOUNT); |
+ intent.putExtra(AccountManager.KEY_ACCOUNT_AUTHENTICATOR_RESPONSE, response); |
+ return intent; |
+ } |
+ |
+ /** Returns an intent that can be used to start the activity in ConfirmCredentials mode */ |
+ public static Intent getConfirmCredentialsIntent( |
+ Context context, String accountName, AccountAuthenticatorResponse response) { |
+ Intent intent = new Intent(context, SpnegoAuthenticatorActivity.class); |
+ intent.putExtra(KEY_MODE, MODE_CONFIRM_CREDENTIALS); |
+ intent.putExtra(KEY_ACCOUNT, accountName); |
+ intent.putExtra(AccountManager.KEY_ACCOUNT_AUTHENTICATOR_RESPONSE, response); |
+ intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS |
+ | Intent.FLAG_ACTIVITY_NO_HISTORY); |
+ return intent; |
+ } |
+ |
+ private void addAccount(String accountName) { |
+ Log.d(TAG, "Adding account '%s'", accountName); |
+ |
+ AccountData accountData = AccountData.create(accountName, this); |
+ accountData.save(this); |
+ Intent intent = accountData.getAccountAddedIntent(); |
+ intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS |
+ | Intent.FLAG_ACTIVITY_NO_HISTORY); |
+ setAccountAuthenticatorResult(intent.getExtras()); |
+ setResult(RESULT_OK, intent); |
+ finish(); |
+ } |
+ |
+ private void confirmCredentials(String accountName) { |
+ Log.d(TAG, "Confirming credentials for account '%s'", accountName); |
+ |
+ NotificationManager nm = (NotificationManager) getSystemService(NOTIFICATION_SERVICE); |
+ nm.cancel(Constants.CONFIRM_CREDENTIAL_NOTIFICATION_ID); |
+ |
+ AccountData accountData = AccountData.get(accountName, this); |
+ accountData.setIsAuthenticated(true); |
+ accountData.save(this); |
+ |
+ Intent intent = accountData.getCredentialsConfirmedIntent(); |
+ setAccountAuthenticatorResult(intent.getExtras()); |
+ setResult(RESULT_OK, intent); |
+ finish(); |
+ } |
+ |
+ private void initUi(final int mode, final String account) { |
+ Button signInButton1 = (Button) findViewById(R.id.sign_in_button_1); |
+ Button signInButton2 = (Button) findViewById(R.id.sign_in_button_2); |
+ Button confirmCredentialsButton = (Button) findViewById(R.id.confirm_credentials_button); |
+ |
+ switch (mode) { |
+ case MODE_ADD_ACCOUNT: |
+ signInButton1.setOnClickListener(new OnClickListener() { |
+ @Override |
+ public void onClick(View view) { |
+ addAccount(Constants.ACCOUNT_1_NAME); |
+ } |
+ }); |
+ signInButton2.setOnClickListener(new OnClickListener() { |
+ @Override |
+ public void onClick(View view) { |
+ addAccount(Constants.ACCOUNT_2_NAME); |
+ } |
+ }); |
+ confirmCredentialsButton.setEnabled(false); |
+ break; |
+ |
+ case MODE_CONFIRM_CREDENTIALS: |
+ signInButton1.setEnabled(false); |
+ signInButton2.setEnabled(false); |
+ confirmCredentialsButton.setOnClickListener(new OnClickListener() { |
+ @Override |
+ public void onClick(View view) { |
+ confirmCredentials(account); |
+ } |
+ }); |
+ break; |
+ |
+ default: |
+ Log.w(TAG, "Opened the activity in an invalid mode: %d", mode); |
+ signInButton1.setEnabled(false); |
+ signInButton2.setEnabled(false); |
+ confirmCredentialsButton.setEnabled(false); |
+ break; |
+ } |
+ } |
+} |