1 /*
2  * Copyright (C) 2009 The Android Open Source Project
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 
17 package android.accounts;
18 
19 import android.app.Activity;
20 import android.os.Bundle;
21 
22 /**
23  * Base class for implementing an Activity that is used to help implement an
24  * AbstractAccountAuthenticator. If the AbstractAccountAuthenticator needs to use an activity
25  * to handle the request then it can have the activity extend AccountAuthenticatorActivity.
26  * The AbstractAccountAuthenticator passes in the response to the intent using the following:
27  * <pre>
28  *      intent.putExtra({@link AccountManager#KEY_ACCOUNT_AUTHENTICATOR_RESPONSE}, response);
29  * </pre>
30  * The activity then sets the result that is to be handed to the response via
31  * {@link #setAccountAuthenticatorResult(android.os.Bundle)}.
32  * This result will be sent as the result of the request when the activity finishes. If this
33  * is never set or if it is set to null then error {@link AccountManager#ERROR_CODE_CANCELED}
34  * will be called on the response.
35  *
36  * @deprecated Applications should extend Activity themselves. This class is not compatible with
37  *   AppCompat, and the functionality it provides is not complex.
38  */
39 @Deprecated
40 public class AccountAuthenticatorActivity extends Activity {
41     private AccountAuthenticatorResponse mAccountAuthenticatorResponse = null;
42     private Bundle mResultBundle = null;
43 
44     /**
45      * Set the result that is to be sent as the result of the request that caused this
46      * Activity to be launched. If result is null or this method is never called then
47      * the request will be canceled.
48      * @param result this is returned as the result of the AbstractAccountAuthenticator request
49      */
setAccountAuthenticatorResult(Bundle result)50     public final void setAccountAuthenticatorResult(Bundle result) {
51         mResultBundle = result;
52     }
53 
54     /**
55      * Retrieves the AccountAuthenticatorResponse from either the intent of the icicle, if the
56      * icicle is non-zero.
57      * @param icicle the save instance data of this Activity, may be null
58      */
onCreate(Bundle icicle)59     protected void onCreate(Bundle icicle) {
60         super.onCreate(icicle);
61 
62         mAccountAuthenticatorResponse =
63                 getIntent().getParcelableExtra(AccountManager.KEY_ACCOUNT_AUTHENTICATOR_RESPONSE, android.accounts.AccountAuthenticatorResponse.class);
64 
65         if (mAccountAuthenticatorResponse != null) {
66             mAccountAuthenticatorResponse.onRequestContinued();
67         }
68     }
69 
70     /**
71      * Sends the result or a Constants.ERROR_CODE_CANCELED error if a result isn't present.
72      */
finish()73     public void finish() {
74         if (mAccountAuthenticatorResponse != null) {
75             // send the result bundle back if set, otherwise send an error.
76             if (mResultBundle != null) {
77                 mAccountAuthenticatorResponse.onResult(mResultBundle);
78             } else {
79                 mAccountAuthenticatorResponse.onError(AccountManager.ERROR_CODE_CANCELED,
80                         "canceled");
81             }
82             mAccountAuthenticatorResponse = null;
83         }
84         super.finish();
85     }
86 }
87