From 979caa61ceaa137a07503a83862029290b3f8dc8 Mon Sep 17 00:00:00 2001 From: kenstir Date: Wed, 20 Nov 2013 22:33:02 -0500 Subject: [PATCH] Factored out authtoken retrieval to LoginController. Still forwarding to JunkActivity but seems to be working OK. --- Open-ILS/src/Android/AndroidManifest.xml | 2 +- Open-ILS/src/Android/res/values/ou.xml | 3 +- Open-ILS/src/Android/res/xml/authenticator.xml | 2 +- .../src/org/evergreen/android/JunkActivity.java | 6 +- .../android/accountAccess/AccountAccess.java | 14 - .../android/accountAccess/CurrentLogin.java | 39 --- .../android/accountAccess/LoginController.java | 335 +++++++++++++++++++++ .../evergreen/android/globals/GlobalConfigs.java | 44 +-- .../android/searchCatalog/SearchCatalog.java | 1 - .../evergreen/android/views/StartupActivity.java | 263 +--------------- .../Android/src/org/evergreen_ils/auth/Const.java | 2 +- 11 files changed, 351 insertions(+), 360 deletions(-) delete mode 100644 Open-ILS/src/Android/src/org/evergreen/android/accountAccess/CurrentLogin.java create mode 100644 Open-ILS/src/Android/src/org/evergreen/android/accountAccess/LoginController.java diff --git a/Open-ILS/src/Android/AndroidManifest.xml b/Open-ILS/src/Android/AndroidManifest.xml index 15cadea0b6..76ed1d4c6b 100644 --- a/Open-ILS/src/Android/AndroidManifest.xml +++ b/Open-ILS/src/Android/AndroidManifest.xml @@ -127,7 +127,7 @@ diff --git a/Open-ILS/src/Android/res/values/ou.xml b/Open-ILS/src/Android/res/values/ou.xml index 268c2bed1d..d1e759cbf4 100644 --- a/Open-ILS/src/Android/res/values/ou.xml +++ b/Open-ILS/src/Android/res/values/ou.xml @@ -3,8 +3,9 @@ http://bark.cwmars.org/osrf-gateway-v1 - C/W Mars Library Rover + C/W Mars Library C/W Mars + Welcome C/W Mars Library Sign in to your\nC/W Mars Library Account diff --git a/Open-ILS/src/Android/res/xml/authenticator.xml b/Open-ILS/src/Android/res/xml/authenticator.xml index f724c41761..ff954f3e4a 100644 --- a/Open-ILS/src/Android/res/xml/authenticator.xml +++ b/Open-ILS/src/Android/res/xml/authenticator.xml @@ -1,6 +1,6 @@ diff --git a/Open-ILS/src/Android/src/org/evergreen/android/JunkActivity.java b/Open-ILS/src/Android/src/org/evergreen/android/JunkActivity.java index b45c2cb4b2..e218eee9ea 100644 --- a/Open-ILS/src/Android/src/org/evergreen/android/JunkActivity.java +++ b/Open-ILS/src/Android/src/org/evergreen/android/JunkActivity.java @@ -1,6 +1,6 @@ package org.evergreen.android; -import org.evergreen.android.accountAccess.CurrentLogin; +import org.evergreen.android.accountAccess.LoginController; import android.app.Activity; import android.os.Bundle; @@ -12,8 +12,8 @@ public class JunkActivity extends Activity { protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); TextView tv = new TextView(this); - String account_name = CurrentLogin.getUsername(); - String auth_token = CurrentLogin.getAuthToken(); + String account_name = LoginController.getInstance(this).getAccountName(); + String auth_token = LoginController.getInstance(this).getAuthToken(); tv.setText("account.name="+((account_name==null)?"null":account_name) + "\nauth_token="+((auth_token==null)?"null":auth_token)); setContentView(tv); diff --git a/Open-ILS/src/Android/src/org/evergreen/android/accountAccess/AccountAccess.java b/Open-ILS/src/Android/src/org/evergreen/android/accountAccess/AccountAccess.java index 232fe03e72..8bba0182a5 100644 --- a/Open-ILS/src/Android/src/org/evergreen/android/accountAccess/AccountAccess.java +++ b/Open-ILS/src/Android/src/org/evergreen/android/accountAccess/AccountAccess.java @@ -49,9 +49,6 @@ import android.util.Log; */ public class AccountAccess { - // Used for authentication purpose - - /** The SERVICE. */ public static String SERVICE_AUTH = "open-ils.auth"; /** The METHOD Auth init. */ @@ -63,21 +60,10 @@ public class AccountAccess { /** The METHOD Auth session retrieve. */ public static String METHOD_AUTH_SESSION_RETRV = "open-ils.auth.session.retrieve"; - // Used for the Checked out Items Tab - - /** The SERVIC e_ actor. */ public static String SERVICE_ACTOR = "open-ils.actor"; - - /** The SERVIC e_ circ. */ public static String SERVICE_CIRC = "open-ils.circ"; - - /** The SERVIC e_ search. */ public static String SERVICE_SEARCH = "open-ils.search"; - - /** The SERVIC e_ serial. */ public static String SERVICE_SERIAL = "open-ils.serial"; - - /** The SERVIC e_ fielder. */ public static String SERVICE_FIELDER = "open-ils.fielder"; /** The METHOD_FETCH_CHECKED_OUT_SUM description : for a given user returns a a structure of circulation objects sorted by out, overdue, lost, claims_returned, long_overdue; A list of ID's returned for each type : "out":[id1,id2,...] @returns: { "out":[id 's],"claims_returned":[],"long_overdue":[],"overdue":[],"lost":[] } */ diff --git a/Open-ILS/src/Android/src/org/evergreen/android/accountAccess/CurrentLogin.java b/Open-ILS/src/Android/src/org/evergreen/android/accountAccess/CurrentLogin.java deleted file mode 100644 index 37d65ecb2b..0000000000 --- a/Open-ILS/src/Android/src/org/evergreen/android/accountAccess/CurrentLogin.java +++ /dev/null @@ -1,39 +0,0 @@ -package org.evergreen.android.accountAccess; - -/** - * data representing the current logged-in user - * @author kenstir - */ -public class CurrentLogin { - - protected static CurrentLogin mInstance = null; - - protected String mUsername = null; - protected String mAuthToken = null; - - protected CurrentLogin() { - } - - protected static CurrentLogin getInstance() { - if (mInstance == null) - mInstance = new CurrentLogin(); - return mInstance; - } - - public static void clear() { - mInstance = null; - } - - public static void setAccountInfo(String username, String auth_token) { - getInstance().mUsername = username; - getInstance().mAuthToken = auth_token; - } - - public static String getUsername() { - return getInstance().mUsername; - } - - public static String getAuthToken() { - return getInstance().mAuthToken; - } -} diff --git a/Open-ILS/src/Android/src/org/evergreen/android/accountAccess/LoginController.java b/Open-ILS/src/Android/src/org/evergreen/android/accountAccess/LoginController.java new file mode 100644 index 0000000000..9e1c18ca57 --- /dev/null +++ b/Open-ILS/src/Android/src/org/evergreen/android/accountAccess/LoginController.java @@ -0,0 +1,335 @@ +package org.evergreen.android.accountAccess; + +import org.evergreen.android.JunkActivity; +import org.evergreen.android.R; +import org.evergreen.android.globals.AppPreferences; +import org.evergreen.android.views.StartupActivity; +import org.evergreen_ils.auth.Const; + +import android.accounts.Account; +import android.accounts.AccountManager; +import android.accounts.AccountManagerCallback; +import android.accounts.AccountManagerFuture; +import android.app.Activity; +import android.app.AlertDialog; +import android.content.Context; +import android.content.DialogInterface; +import android.content.Intent; +import android.os.AsyncTask; +import android.os.Build; +import android.os.Bundle; +import android.text.TextUtils; +import android.util.Log; +import android.view.ContextThemeWrapper; +import android.widget.Toast; + +/** + * Handle common Activity startup: making sure we have an account, and an auth_token. + * + * @author kenstir + * + */ +public class LoginController { + + protected static LoginController mInstance = null; + + private String TAG = LoginController.class.getSimpleName(); + protected String mAccountName = null; + protected String mAuthToken = null; + protected StartupTask mStartupTask = null; + private Activity mActivity = null; + private Class mNextActivityClass = null; + private AppPreferences mAppPrefs = null; + private AccountManager mAccountManager; + + protected LoginController() { + } + + protected void setActivity(Activity a) { + mActivity = a; + if (mAppPrefs == null) mAppPrefs = new AppPreferences(a); + if (mAccountManager == null) mAccountManager = AccountManager.get(a); + } + + public static LoginController getInstance(Activity a) { + if (mInstance == null) + mInstance = new LoginController(); + mInstance.setActivity(a); + return mInstance; + } + + public static LoginController getInstance() { + return mInstance; + } + + public static String getAccountName() { + return getInstance().mAccountName; + } + + public static String getAuthToken() { + return getInstance().mAuthToken; + } + + /** login and stay on the current activity, for use by non-startup activity */ + public void login() { + loginForActivity(null); + } + + /** login and forward to another activity, for use by startup/splash activity */ + public void loginForActivity(Class nextActivity) { + mNextActivityClass = nextActivity; + + final String auth_token = getAuthToken(); + if (TextUtils.isEmpty(auth_token)) { + getTokenForLastActiveAccount(); + } else { + Log.d(TAG, "signIn> already have auth_token"); + startNextActivity(); + } + } + + private void getTokenForLastActiveAccount() { + final String username = mAppPrefs.getLastAccountName(); + Log.d(TAG, "getToken> username="+username); + + // first try to get an auth token for the last account used + if (!TextUtils.isEmpty(username)) { + if (reuseExistingAccountAuthToken(username)) { + Log.d(TAG, "getToken> reuseExisting returned true"); + } + } else { + getTokenForAccountCreateIfNeeded(); + } + } + + /** + * Add new account to the account manager + */ + private void addNewAccount() { + //final AccountManagerFuture future = + mAccountManager.addAccount(Const.ACCOUNT_TYPE, Const.AUTHTOKEN_TYPE, null, null, mActivity, new AccountManagerCallback() { + @Override + public void run(AccountManagerFuture future) { + try { + Bundle bnd = future.getResult(); + final String account_name = bnd.getString(AccountManager.KEY_ACCOUNT_NAME); + showMessage("Account "+account_name+" was created"); + mAppPrefs.putLastAccountName(account_name); + Log.d(TAG, "addNewAccount bnd=" + bnd); + } catch (Exception e) { + mAppPrefs.clearLastAccountName(); + e.printStackTrace(); + showMessage(e.getMessage()); + } + } + }, null); + } + + /** + * Show all the accounts registered on the account manager. Request an auth token upon user select. + * @param authTokenType + */ + private void showAccountPicker() { + final Account availableAccounts[] = mAccountManager.getAccountsByType(Const.ACCOUNT_TYPE); + + if (availableAccounts.length == 0) { + Toast.makeText(mActivity, "No accounts", Toast.LENGTH_SHORT).show(); + addNewAccount(); + } else { + String name[] = new String[availableAccounts.length]; + for (int i = 0; i < availableAccounts.length; i++) { + name[i] = availableAccounts[i].name; + } + + // Account picker + AlertDialog.Builder builder; + if (Build.VERSION.SDK_INT >= 1/*Build.VERSION_CODES.HONEYCOMB*/) { + builder = new AlertDialog.Builder(mActivity); + } else { + ContextThemeWrapper wrapper = new ContextThemeWrapper(mActivity, R.style.EvergreenTheme); + builder = new AlertDialog.Builder(wrapper); + } + AlertDialog aDialog = builder.setTitle("Pick Account").setItems(name, new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + getExistingAccountAuthToken(availableAccounts[which]); + } + }).create(); + aDialog.show(); + } + } + + private void getExistingAccountAuthToken(final Account account) { + final AccountManagerFuture future = mAccountManager.getAuthToken(account, Const.AUTHTOKEN_TYPE, null, mActivity, + new AccountManagerCallback() { + @Override + public void run(AccountManagerFuture future) { + Log.d(TAG, "getExistingAccountAuthToken> callback run> got future "+future); + } + }, null); + + new Thread(new Runnable() { + @Override + public void run() { + try { + Bundle bnd = future.getResult(); + Log.d(TAG, "getExistingAccountAuthToken> thread run> got future "+future); + final String authtoken = bnd.getString(AccountManager.KEY_AUTHTOKEN); + final String account_name = bnd.getString(AccountManager.KEY_ACCOUNT_NAME); + onSuccessfulLogin(account_name, authtoken); + } catch (Exception e) { + Log.d(TAG, "getExistingAccountAuthToken caught "+e.getMessage()); + onFailedLogin(e.getMessage()); + } + } + }).start(); + } + + protected void onSuccessfulLogin(String account_name, String auth_token) { + Log.d(TAG,"onSuccessfulLogin> account_name "+account_name+" token "+auth_token); + showMessage((auth_token != null) ? "SUCCESS with "+account_name+"\ntoken: " + auth_token : "FAIL"); + if (auth_token != null) { + mAppPrefs.putLastAccountName(account_name); + mAccountName = account_name; + mAuthToken = auth_token; + startNextActivity(); + } + } + + protected void onFailedLogin(String msg) { + mAppPrefs.clearLastAccountName(); + mAccountName = null; + mAuthToken = null; + showMessage(msg); + } + + private boolean reuseExistingAccountAuthToken(final String account_name) { + final Account availableAccounts[] = mAccountManager.getAccountsByType(Const.ACCOUNT_TYPE); + for (int i = 0; i < availableAccounts.length; i++) { + Log.d(TAG, "reuseExistingAccountAuthToken> looking for "+account_name+", found "+availableAccounts[i].name); + if (account_name.equals(availableAccounts[i].name)) { + Log.d(TAG, "reuseExistingAccountAuthToken> found it"); + getExistingAccountAuthToken(availableAccounts[i]); + return true; + } + } + return false; + } + + /** + * Invalidates the auth token for the account + * @param account + * @param authTokenType + */ + private void invalidateAuthToken(final Account account) { + final AccountManagerFuture future = mAccountManager.getAuthToken(account, Const.AUTHTOKEN_TYPE, null, mActivity, null, null); + + new Thread(new Runnable() { + @Override + public void run() { + try { + Bundle bnd = future.getResult(); + + final String authtoken = bnd.getString(AccountManager.KEY_AUTHTOKEN); + mAccountManager.invalidateAuthToken(account.type, authtoken); + showMessage(account.name + " invalidated"); + mAppPrefs.putLastAccountName(null); + } catch (Exception e) { + mAppPrefs.putLastAccountName(null); + e.printStackTrace(); + showMessage(e.getMessage()); + } + } + }).start(); + } + + /** + * Get an auth token for the account. + * If not exist - add it and then return its auth token. + * If one exist - return its auth token. + * If more than one exists - show a picker and return the select account's auth token. + * @param accountType + * @param authTokenType + */ + private void getTokenForAccountCreateIfNeeded() { + Log.d(TAG, "getTokenForAccountCreateIfNeeded> "); + final AccountManagerFuture future = mAccountManager.getAuthTokenByFeatures(Const.ACCOUNT_TYPE, Const.AUTHTOKEN_TYPE, null, mActivity, null, null, + new AccountManagerCallback() { + @Override + public void run(AccountManagerFuture future) { + Bundle bnd = null; + try { + bnd = future.getResult(); + Log.d(TAG, "getTokenForAccountCreateIfNeeded> bnd="+bnd); + final String authtoken = bnd.getString(AccountManager.KEY_AUTHTOKEN); + final String account_name = bnd.getString(AccountManager.KEY_ACCOUNT_NAME); + onSuccessfulLogin(account_name, authtoken); + } catch (Exception e) { + Log.d(TAG, "getTokenForAccountCreateIfNeeded> caught "+e.getMessage()); + onFailedLogin(e.getMessage()); + } + } + } + , null); + } + + private void showMessage(final String msg) { + if (TextUtils.isEmpty(msg)) + return; + + mActivity.runOnUiThread(new Runnable() { + @Override + public void run() { + Log.d(TAG, "showMessage> "+msg); + Toast.makeText(mActivity, msg, Toast.LENGTH_SHORT).show(); + } + }); + } + + private void startNextActivity() { + //Intent intent = new Intent(this, SearchCatalogListView.class); + Intent intent = new Intent(mActivity, mNextActivityClass); + mActivity.startActivity(intent); + mActivity.finish(); + } + + public void downloadResources() { + if (mStartupTask != null) { + return; + } + + // blah blah blah + // mDownloadTask = new LoginTask(); + } + + private class StartupTask extends AsyncTask { + @Override + protected Boolean doInBackground(Void... params) { + try { + // TODO + Thread.sleep(2000); + } catch (InterruptedException e) { + return false; + } + + return true; + } + + @Override + protected void onProgressUpdate(Void... params) { + } + + @Override + protected void onPostExecute(final Boolean success) { + mStartupTask = null; + if (success) { + startNextActivity(); + } + } + + @Override + protected void onCancelled() { + mStartupTask = null; + } + } +} diff --git a/Open-ILS/src/Android/src/org/evergreen/android/globals/GlobalConfigs.java b/Open-ILS/src/Android/src/org/evergreen/android/globals/GlobalConfigs.java index 1e15946634..f5d4cb15b7 100644 --- a/Open-ILS/src/Android/src/org/evergreen/android/globals/GlobalConfigs.java +++ b/Open-ILS/src/Android/src/org/evergreen/android/globals/GlobalConfigs.java @@ -100,46 +100,14 @@ public class GlobalConfigs { * Initialize function that retrieves IDL file and Orgs file */ private boolean initialize(Context context) { - if (init == false) { - - init = true; - SharedPreferences preferences = PreferenceManager - .getDefaultSharedPreferences(context); - GlobalConfigs.httpAddress = preferences - .getString("library_url", ""); - boolean noNetworkAccess = false; - System.out.println("Check for network conenctivity"); - try { - Utils.checkNetworkStatus((ConnectivityManager) context + // TODO do this in AsyncTask + loadIDLFile(context); + getOrganisations(); + getCopyStatusesAvailable((ConnectivityManager) context .getSystemService(Context.CONNECTIVITY_SERVICE)); - - } catch (NoNetworkAccessException e) { - noNetworkAccess = true; - } catch (NoAccessToServer e) { - - System.out.println("No access to network"); - Intent preferencesAnctivity = new Intent(context, - ApplicationPreferences.class); - context.startActivity(preferencesAnctivity); - - noNetworkAccess = true; - - } - if (!noNetworkAccess) { - loadIDLFile(context); - getOrganisations(); - - getCopyStatusesAvailable((ConnectivityManager) context - .getSystemService(Context.CONNECTIVITY_SERVICE)); - - AccountAccess.setAccountInfo( - preferences.getString("username", ""), - preferences.getString("password", "")); - - return true; - } - return false; + init = true; + return true; } return false; } diff --git a/Open-ILS/src/Android/src/org/evergreen/android/searchCatalog/SearchCatalog.java b/Open-ILS/src/Android/src/org/evergreen/android/searchCatalog/SearchCatalog.java index e50b2a9b1f..8c8b5b587f 100644 --- a/Open-ILS/src/Android/src/org/evergreen/android/searchCatalog/SearchCatalog.java +++ b/Open-ILS/src/Android/src/org/evergreen/android/searchCatalog/SearchCatalog.java @@ -328,7 +328,6 @@ public class SearchCatalog { for (int i = 0; i < ccs_list.size(); i++) { OSRFObject ccs_obj = ccs_list.get(i); if (ccs_obj.getString("opac_visible").equals("t")) { - CopyInformation.availableOrgStatuses.put( ccs_obj.getInt("id") + "", ccs_obj.getString("name")); diff --git a/Open-ILS/src/Android/src/org/evergreen/android/views/StartupActivity.java b/Open-ILS/src/Android/src/org/evergreen/android/views/StartupActivity.java index 78a91bda0a..47f41dfc7b 100644 --- a/Open-ILS/src/Android/src/org/evergreen/android/views/StartupActivity.java +++ b/Open-ILS/src/Android/src/org/evergreen/android/views/StartupActivity.java @@ -1,7 +1,7 @@ package org.evergreen.android.views; import org.evergreen.android.R; -import org.evergreen.android.accountAccess.CurrentLogin; +import org.evergreen.android.accountAccess.LoginController; import org.evergreen.android.globals.AppPreferences; import org.evergreen.android.searchCatalog.SearchCatalogListView; import org.evergreen.android.JunkActivity; @@ -32,46 +32,16 @@ public class StartupActivity extends Activity { private String TAG = StartupActivity.class.getSimpleName(); private TextView mLoginStatusMessageView; - private StartupTask mStartupTask = null; private String mAlertMessage = null; - private AppPreferences mAppPrefs; - private AccountManager mAccountManager; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_startup); - mAppPrefs = new AppPreferences(this); - mAccountManager = AccountManager.get(this); - mLoginStatusMessageView = (TextView) findViewById(R.id.login_status_message); - signIn(); - } - - public void signIn() { - final String auth_token = CurrentLogin.getAuthToken(); - if (TextUtils.isEmpty(auth_token)) { - getTokenForLastActiveAccount(); - } else { - Log.d(TAG, "signIn> already have auth_token"); - initializeAccountInfo(); - } - } - - private void getTokenForLastActiveAccount() { - final String username = mAppPrefs.getLastAccountName(); - Log.d(TAG, "getToken> username="+username); - - // first try to get an auth token for the last account used - if (!TextUtils.isEmpty(username)) { - if (reuseExistingAccountAuthToken(username)) { - Log.d(TAG, "getToken> reuseExisting returned true"); - } - } else { - getTokenForAccountCreateIfNeeded(); - } + LoginController.getInstance(this).loginForActivity(JunkActivity.class); } @Override @@ -87,233 +57,4 @@ public class StartupActivity extends Activity { return true; } */ - - /** - * Add new account to the account manager - */ - private void addNewAccount() { - //final AccountManagerFuture future = - mAccountManager.addAccount(Const.ACCOUNT_TYPE, Const.AUTHTOKEN_TYPE, null, null, this, new AccountManagerCallback() { - @Override - public void run(AccountManagerFuture future) { - try { - Bundle bnd = future.getResult(); - final String account_name = bnd.getString(AccountManager.KEY_ACCOUNT_NAME); - showMessage("Account "+account_name+" was created"); - mAppPrefs.putLastAccountName(account_name); - Log.d(TAG, "addNewAccount bnd=" + bnd); - } catch (Exception e) { - mAppPrefs.clearLastAccountName(); - e.printStackTrace(); - showMessage(e.getMessage()); - } - } - }, null); - } - - /** - * Show all the accounts registered on the account manager. Request an auth token upon user select. - * @param authTokenType - */ - private void showAccountPicker() { - final Account availableAccounts[] = mAccountManager.getAccountsByType(Const.ACCOUNT_TYPE); - - if (availableAccounts.length == 0) { - Toast.makeText(this, "No accounts", Toast.LENGTH_SHORT).show(); - addNewAccount(); - } else { - String name[] = new String[availableAccounts.length]; - for (int i = 0; i < availableAccounts.length; i++) { - name[i] = availableAccounts[i].name; - } - - // Account picker - AlertDialog.Builder builder; - if (Build.VERSION.SDK_INT >= 1/*Build.VERSION_CODES.HONEYCOMB*/) { - builder = new AlertDialog.Builder(this); - } else { - ContextThemeWrapper wrapper = new ContextThemeWrapper(this, R.style.EvergreenTheme); - builder = new AlertDialog.Builder(wrapper); - } - AlertDialog aDialog = builder.setTitle("Pick Account").setItems(name, new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialog, int which) { - getExistingAccountAuthToken(availableAccounts[which]); - } - }).create(); - aDialog.show(); - } - } - - private void getExistingAccountAuthToken(final Account account) { - final AccountManagerFuture future = mAccountManager.getAuthToken(account, Const.AUTHTOKEN_TYPE, null, this, - new AccountManagerCallback() { - @Override - public void run(AccountManagerFuture future) { - Log.d(TAG, "getExistingAccountAuthToken> callback run> got future "+future); - } - }, null); - - new Thread(new Runnable() { - @Override - public void run() { - try { - Bundle bnd = future.getResult(); - Log.d(TAG, "getExistingAccountAuthToken> thread run> got future "+future); - final String authtoken = bnd.getString(AccountManager.KEY_AUTHTOKEN); - final String account_name = bnd.getString(AccountManager.KEY_ACCOUNT_NAME); - onSuccessfulLogin(account_name, authtoken); - } catch (Exception e) { - Log.d(TAG, "getExistingAccountAuthToken caught "+e.getMessage()); - onFailedLogin(e.getMessage()); - } - } - }).start(); - } - - protected void onSuccessfulLogin(String account_name, String auth_token) { - Log.d(TAG,"onSuccessfulLogin> account_name "+account_name+" token "+auth_token); - showMessage((auth_token != null) ? "SUCCESS with "+account_name+"\ntoken: " + auth_token : "FAIL"); - if (auth_token != null) { - mAppPrefs.putLastAccountName(account_name); - CurrentLogin.setAccountInfo(account_name, auth_token); - startNextActivity(); - } - } - - protected void onFailedLogin(String msg) { - mAppPrefs.clearLastAccountName(); - CurrentLogin.clear(); - showMessage(msg); - } - - private boolean reuseExistingAccountAuthToken(final String account_name) { - final Account availableAccounts[] = mAccountManager.getAccountsByType(Const.ACCOUNT_TYPE); - for (int i = 0; i < availableAccounts.length; i++) { - Log.d(TAG, "reuseExistingAccountAuthToken> looking for "+account_name+", found "+availableAccounts[i].name); - if (account_name.equals(availableAccounts[i].name)) { - Log.d(TAG, "reuseExistingAccountAuthToken> found it"); - getExistingAccountAuthToken(availableAccounts[i]); - return true; - } - } - return false; - } - - /** - * Invalidates the auth token for the account - * @param account - * @param authTokenType - */ - private void invalidateAuthToken(final Account account) { - final AccountManagerFuture future = mAccountManager.getAuthToken(account, Const.AUTHTOKEN_TYPE, null, this, null,null); - - new Thread(new Runnable() { - @Override - public void run() { - try { - Bundle bnd = future.getResult(); - - final String authtoken = bnd.getString(AccountManager.KEY_AUTHTOKEN); - mAccountManager.invalidateAuthToken(account.type, authtoken); - showMessage(account.name + " invalidated"); - mAppPrefs.putLastAccountName(null); - } catch (Exception e) { - mAppPrefs.putLastAccountName(null); - e.printStackTrace(); - showMessage(e.getMessage()); - } - } - }).start(); - } - - /** - * Get an auth token for the account. - * If not exist - add it and then return its auth token. - * If one exist - return its auth token. - * If more than one exists - show a picker and return the select account's auth token. - * @param accountType - * @param authTokenType - */ - private void getTokenForAccountCreateIfNeeded() { - Log.d(TAG, "getTokenForAccountCreateIfNeeded> "); - final AccountManagerFuture future = mAccountManager.getAuthTokenByFeatures(Const.ACCOUNT_TYPE, Const.AUTHTOKEN_TYPE, null, this, null, null, - new AccountManagerCallback() { - @Override - public void run(AccountManagerFuture future) { - Bundle bnd = null; - try { - bnd = future.getResult(); - Log.d(TAG, "getTokenForAccountCreateIfNeeded> bnd="+bnd); - final String authtoken = bnd.getString(AccountManager.KEY_AUTHTOKEN); - final String account_name = bnd.getString(AccountManager.KEY_ACCOUNT_NAME); - onSuccessfulLogin(account_name, authtoken); - } catch (Exception e) { - Log.d(TAG, "getTokenForAccountCreateIfNeeded> caught "+e.getMessage()); - onFailedLogin(e.getMessage()); - } - } - } - , null); - } - - private void showMessage(final String msg) { - if (TextUtils.isEmpty(msg)) - return; - - runOnUiThread(new Runnable() { - @Override - public void run() { - Log.d(TAG, "showMessage> "+msg); - Toast.makeText(getBaseContext(), msg, Toast.LENGTH_SHORT).show(); - } - }); - } - - private void startNextActivity() { - //Intent intent = new Intent(this, SearchCatalogListView.class); - Intent intent = new Intent(this, JunkActivity.class); - startActivity(intent); - finish(); - } - - public void downloadResources() { - if (mStartupTask != null) { - return; - } - - // blah blah blah - // mDownloadTask = new LoginTask(); - } - - private class StartupTask extends AsyncTask { - @Override - protected Boolean doInBackground(Void... params) { - try { - // TODO - Thread.sleep(2000); - } catch (InterruptedException e) { - return false; - } - - return true; - } - - @Override - protected void onProgressUpdate(Void... params) { - } - - @Override - protected void onPostExecute(final Boolean success) { - mStartupTask = null; - if (success) { - startNextActivity(); - } - } - - @Override - protected void onCancelled() { - mStartupTask = null; - } - } } diff --git a/Open-ILS/src/Android/src/org/evergreen_ils/auth/Const.java b/Open-ILS/src/Android/src/org/evergreen_ils/auth/Const.java index 6df2e20ab8..9b9882e5cc 100644 --- a/Open-ILS/src/Android/src/org/evergreen_ils/auth/Const.java +++ b/Open-ILS/src/Android/src/org/evergreen_ils/auth/Const.java @@ -1,7 +1,7 @@ package org.evergreen_ils.auth; public class Const { - public static final String ACCOUNT_TYPE = "org.evergreen_ils.opac"; + public static final String ACCOUNT_TYPE = "org.evergreen_ils"; public static final String AUTHTOKEN_TYPE = "opac"; public static final String AUTHTOKEN_TYPE_LABEL = "Online Public Access Catalog"; } -- 2.11.0