Browse files

LoginActivity: Show the Toolbar by using a copy of ActionBarActivity.

I don't like this at all, but there doesn't seem to be any way around it:
  • Loading branch information...
murraycu committed Oct 25, 2014
1 parent f3c1681 commit 6cf2176763966153687f26cc5bfbce8c146c1747
@@ -1,17 +1,17 @@

import android.accounts.Account;
import android.accounts.AccountAuthenticatorActivity;
//import android.accounts.AccountAuthenticatorActivity;
import android.accounts.AccountManager;
import android.animation.Animator;
import android.animation.AnimatorListenerAdapter;
import android.annotation.TargetApi;
import android.content.ContentResolver;
import android.content.Intent;
import android.os.AsyncTask;
import android.os.Build;
import android.os.Bundle;
import android.text.TextUtils;
import android.text.method.LinkMovementMethod;
import android.view.KeyEvent;
@@ -26,10 +26,17 @@

//TODO: Use the toolbar, but we cannot derive from ActionBarActivity from AppCompat.
//Android's standard AccountAuthenticatorActivity doesn't let us use the toolbar,
//because it doesn't deried from ActionBarActivity,
//and it apparently will never have a usable version in AppCompat,
//so we have to copy the whole class to create ZooAccountAuthenticatorActivity
//and derive from that instead.

* A login screen that offers login via username/password.
public class LoginActivity extends AccountAuthenticatorActivity {
public class LoginActivity extends ZooAccountAuthenticatorActivity {

/** The Intent extra to store username. */
public static final String ARG_USERNAME = "username";
@@ -55,7 +62,7 @@ protected void onCreate(Bundle savedInstanceState) {


//TODO: UiUtils.showToolbar(this);

// Set up the login form.
mUsernameView = (EditText) findViewById(;
@@ -97,8 +104,7 @@ public void onClick(View view) {
mProgressView = findViewById(;

// Show the Up button in the action bar.
//TODO: final ActionBar actionBar = getSupportActionBar();
final ActionBar actionBar = getActionBar();
final ActionBar actionBar = getSupportActionBar();
if (actionBar == null)

@@ -0,0 +1,85 @@
* Copyright (C) 2009 The Android Open Source Project
* Copyright (C) 2014 Murray Cumming (A modified AccountAuthenticatorActivity to derive from ActionBarActivity
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* See the License for the specific language governing permissions and
* limitations under the License.


import android.accounts.AccountAuthenticatorResponse;
import android.accounts.AccountManager;
import android.os.Bundle;

* Base class for implementing an Activity that is used to help implement an
* AbstractAccountAuthenticator. If the AbstractAccountAuthenticator needs to use an activity
* to handle the request then it can have the activity extend AccountAuthenticatorActivity.
* The AbstractAccountAuthenticator passes in the response to the intent using the following:
* <pre>
* intent.putExtra({@link AccountManager#KEY_ACCOUNT_AUTHENTICATOR_RESPONSE}, response);
* </pre>
* The activity then sets the result that is to be handed to the response via
* {@link #setAccountAuthenticatorResult(android.os.Bundle)}.
* This result will be sent as the result of the request when the activity finishes. If this
* is never set or if it is set to null then error {@link AccountManager#ERROR_CODE_CANCELED}
* will be called on the response.
public class ZooAccountAuthenticatorActivity extends ActionBarActivity {
private AccountAuthenticatorResponse mAccountAuthenticatorResponse = null;
private Bundle mResultBundle = null;

* Set the result that is to be sent as the result of the request that caused this
* Activity to be launched. If result is null or this method is never called then
* the request will be canceled.
* @param result this is returned as the result of the AbstractAccountAuthenticator request
public final void setAccountAuthenticatorResult(Bundle result) {
mResultBundle = result;

* Retreives the AccountAuthenticatorResponse from either the intent of the icicle, if the
* icicle is non-zero.
* @param icicle the save instance data of this Activity, may be null
protected void onCreate(Bundle icicle) {

mAccountAuthenticatorResponse =

if (mAccountAuthenticatorResponse != null) {

* Sends the result or a Constants.ERROR_CODE_CANCELED error if a result isn't present.
public void finish() {
if (mAccountAuthenticatorResponse != null) {
// send the result bundle back if set, otherwise send an error.
if (mResultBundle != null) {
} else {
mAccountAuthenticatorResponse = null;

0 comments on commit 6cf2176

Please sign in to comment.