This repository has been archived by the owner on Oct 8, 2024. It is now read-only.
forked from apache/cordova-plugin-contacts
-
Notifications
You must be signed in to change notification settings - Fork 2
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
For android, Add account, syncadapter for contacts, and allow use the…
…m from find / save contacts.
- Loading branch information
Showing
14 changed files
with
1,238 additions
and
187 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Large diffs are not rendered by default.
Oops, something went wrong.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,57 @@ | ||
/* | ||
* Copyright (C) 2010 The Android Open Source Project | ||
* | ||
* 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 | ||
* | ||
* http://www.apache.org/licenses/LICENSE-2.0 | ||
* | ||
* Unless required by applicable law or agreed to in writing, software | ||
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT | ||
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the | ||
* License for the specific language governing permissions and limitations under | ||
* the License. | ||
*/ | ||
|
||
package org.apache.cordova.contacts.authenticator; | ||
|
||
import android.app.Service; | ||
import android.content.Intent; | ||
import android.os.IBinder; | ||
import android.util.Log; | ||
|
||
/** | ||
* Service to handle Account authentication. It instantiates the authenticator | ||
* and returns its IBinder. | ||
*/ | ||
public class AuthenticationService extends Service { | ||
|
||
private static final String TAG = "AuthenticationService"; | ||
|
||
private Authenticator mAuthenticator; | ||
|
||
@Override | ||
public void onCreate() { | ||
if (Log.isLoggable(TAG, Log.VERBOSE)) { | ||
Log.v(TAG, "SampleSyncAdapter Authentication Service started."); | ||
} | ||
mAuthenticator = new Authenticator(this); | ||
} | ||
|
||
@Override | ||
public void onDestroy() { | ||
if (Log.isLoggable(TAG, Log.VERBOSE)) { | ||
Log.v(TAG, "SampleSyncAdapter Authentication Service stopped."); | ||
} | ||
} | ||
|
||
@Override | ||
public IBinder onBind(Intent intent) { | ||
if (Log.isLoggable(TAG, Log.VERBOSE)) { | ||
Log.v(TAG, "getBinder()... returning the AccountAuthenticator binder for intent " | ||
+ intent); | ||
} | ||
return mAuthenticator.getIBinder(); | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,157 @@ | ||
/* | ||
* Copyright (C) 2010 The Android Open Source Project | ||
* | ||
* 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 | ||
* | ||
* http://www.apache.org/licenses/LICENSE-2.0 | ||
* | ||
* Unless required by applicable law or agreed to in writing, software | ||
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT | ||
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the | ||
* License for the specific language governing permissions and limitations under | ||
* the License. | ||
*/ | ||
|
||
package org.apache.cordova.contacts.authenticator; | ||
|
||
// import com.example.android.samplesync.Constants; | ||
// import com.example.android.samplesync.client.NetworkUtilities; | ||
|
||
import android.accounts.AbstractAccountAuthenticator; | ||
import android.accounts.Account; | ||
import android.accounts.AccountAuthenticatorResponse; | ||
import android.accounts.AccountManager; | ||
import android.accounts.NetworkErrorException; | ||
import android.content.Context; | ||
import android.content.Intent; | ||
import android.os.Bundle; | ||
import android.text.TextUtils; | ||
import android.util.Log; | ||
|
||
/** | ||
* This class is an implementation of AbstractAccountAuthenticator for | ||
* authenticating accounts in the com.example.android.samplesync domain. The | ||
* interesting thing that this class demonstrates is the use of authTokens as | ||
* part of the authentication process. In the account setup UI, the user enters | ||
* their username and password. But for our subsequent calls off to the service | ||
* for syncing, we want to use an authtoken instead - so we're not continually | ||
* sending the password over the wire. getAuthToken() will be called when | ||
* SyncAdapter calls AccountManager.blockingGetAuthToken(). When we get called, | ||
* we need to return the appropriate authToken for the specified account. If we | ||
* already have an authToken stored in the account, we return that authToken. If | ||
* we don't, but we do have a username and password, then we'll attempt to talk | ||
* to the sample service to fetch an authToken. If that fails (or we didn't have | ||
* a username/password), then we need to prompt the user - so we create an | ||
* AuthenticatorActivity intent and return that. That will display the dialog | ||
* that prompts the user for their login information. | ||
*/ | ||
class Authenticator extends AbstractAccountAuthenticator { | ||
|
||
/** The tag used to log to adb console. **/ | ||
private static final String TAG = "Authenticator"; | ||
|
||
// Authentication Service context | ||
private final Context mContext; | ||
|
||
public Authenticator(Context context) { | ||
super(context); | ||
mContext = context; | ||
} | ||
|
||
@Override | ||
public Bundle addAccount(AccountAuthenticatorResponse response, String accountType, | ||
String authTokenType, String[] requiredFeatures, Bundle options) { | ||
Log.v(TAG, "addAccount()"); | ||
// final Intent intent = new Intent(mContext, AuthenticatorActivity.class); | ||
// intent.putExtra(AccountManager.KEY_ACCOUNT_AUTHENTICATOR_RESPONSE, response); | ||
final Bundle bundle = new Bundle(); | ||
bundle.putString(AccountManager.KEY_ACCOUNT_NAME, "myCozy"); | ||
bundle.putString(AccountManager.KEY_ACCOUNT_TYPE, "io.cozy"); | ||
|
||
// bundle.putParcelable(AccountManager.KEY_INTENT, intent); | ||
return bundle; | ||
// return null; | ||
} | ||
|
||
@Override | ||
public Bundle confirmCredentials( | ||
AccountAuthenticatorResponse response, Account account, Bundle options) { | ||
Log.v(TAG, "confirmCredentials()"); | ||
return null; | ||
} | ||
|
||
@Override | ||
public Bundle editProperties(AccountAuthenticatorResponse response, String accountType) { | ||
Log.v(TAG, "editProperties()"); | ||
throw new UnsupportedOperationException(); | ||
} | ||
|
||
@Override | ||
public Bundle getAuthToken(AccountAuthenticatorResponse response, Account account, | ||
String authTokenType, Bundle loginOptions) throws NetworkErrorException { | ||
// Log.v(TAG, "getAuthToken()"); | ||
|
||
// // If the caller requested an authToken type we don't support, then | ||
// // return an error | ||
// if (!authTokenType.equals(Constants.AUTHTOKEN_TYPE)) { | ||
// final Bundle result = new Bundle(); | ||
// result.putString(AccountManager.KEY_ERROR_MESSAGE, "invalid authTokenType"); | ||
// return result; | ||
// } | ||
|
||
// // Extract the username and password from the Account Manager, and ask | ||
// // the server for an appropriate AuthToken. | ||
// final AccountManager am = AccountManager.get(mContext); | ||
// final String password = am.getPassword(account); | ||
// if (password != null) { | ||
// final String authToken = NetworkUtilities.authenticate(account.name, password); | ||
// if (!TextUtils.isEmpty(authToken)) { | ||
// final Bundle result = new Bundle(); | ||
// result.putString(AccountManager.KEY_ACCOUNT_NAME, account.name); | ||
// result.putString(AccountManager.KEY_ACCOUNT_TYPE, Constants.ACCOUNT_TYPE); | ||
// result.putString(AccountManager.KEY_AUTHTOKEN, authToken); | ||
// return result; | ||
// } | ||
// } | ||
|
||
// // If we get here, then we couldn't access the user's password - so we | ||
// // need to re-prompt them for their credentials. We do that by creating | ||
// // an intent to display our AuthenticatorActivity panel. | ||
// final Intent intent = new Intent(mContext, AuthenticatorActivity.class); | ||
// intent.putExtra(AuthenticatorActivity.PARAM_USERNAME, account.name); | ||
// intent.putExtra(AuthenticatorActivity.PARAM_AUTHTOKEN_TYPE, authTokenType); | ||
// intent.putExtra(AccountManager.KEY_ACCOUNT_AUTHENTICATOR_RESPONSE, response); | ||
final Bundle bundle = new Bundle(); | ||
// bundle.putParcelable(AccountManager.KEY_INTENT, intent); | ||
return bundle; | ||
// return null; | ||
} | ||
|
||
@Override | ||
public String getAuthTokenLabel(String authTokenType) { | ||
// null means we don't support multiple authToken types | ||
Log.v(TAG, "getAuthTokenLabel()"); | ||
return null; | ||
} | ||
|
||
@Override | ||
public Bundle hasFeatures( | ||
AccountAuthenticatorResponse response, Account account, String[] features) { | ||
// This call is used to query whether the Authenticator supports | ||
// specific features. We don't expect to get called, so we always | ||
// return false (no) for any queries. | ||
Log.v(TAG, "hasFeatures()"); | ||
final Bundle result = new Bundle(); | ||
result.putBoolean(AccountManager.KEY_BOOLEAN_RESULT, false); | ||
return result; | ||
} | ||
|
||
@Override | ||
public Bundle updateCredentials(AccountAuthenticatorResponse response, Account account, | ||
String authTokenType, Bundle loginOptions) { | ||
Log.v(TAG, "updateCredentials()"); | ||
return null; | ||
} | ||
} |
Oops, something went wrong.