From c8a674f53a1423c25302c8d29db318507704420b Mon Sep 17 00:00:00 2001 From: kenstir Date: Sat, 14 Nov 2015 18:01:31 -0500 Subject: [PATCH] Progress toward a generic authenticator which stores the library url as userdata on the account. --- .../src/Android/core/res/layout/activity_login.xml | 34 +++--- Open-ILS/src/Android/core/res/values/ou.xml | 6 +- Open-ILS/src/Android/core/res/values/strings.xml | 1 + .../evergreen_ils/auth/AuthenticatorActivity.java | 118 ++++++++++++++++++++- .../evergreen_ils/views/ChooseLibraryActivity.java | 31 +----- Open-ILS/src/Android/cwmars_app/res/values/ou.xml | 2 +- Open-ILS/src/Android/eg_app/AndroidManifest.xml | 4 - Open-ILS/src/Android/eg_app/res/values/ou.xml | 3 +- 8 files changed, 149 insertions(+), 50 deletions(-) diff --git a/Open-ILS/src/Android/core/res/layout/activity_login.xml b/Open-ILS/src/Android/core/res/layout/activity_login.xml index bf9fb155f5..078c65b6c4 100644 --- a/Open-ILS/src/Android/core/res/layout/activity_login.xml +++ b/Open-ILS/src/Android/core/res/layout/activity_login.xml @@ -9,19 +9,27 @@ > - - + android:id="@+id/account_sign_in_text" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:text="@string/ou_account_sign_in_message" + android:textAppearance="?android:attr/textAppearanceLarge" + android:layout_marginBottom="32dp"/> + + + + Example Library - - Sign in to your\n%1$s account + + Sign in to your\nXYZZY account + + org.evergreen_ils.example diff --git a/Open-ILS/src/Android/core/res/values/strings.xml b/Open-ILS/src/Android/core/res/values/strings.xml index fb18d6e800..c494f028d9 100644 --- a/Open-ILS/src/Android/core/res/values/strings.xml +++ b/Open-ILS/src/Android/core/res/values/strings.xml @@ -152,5 +152,6 @@ Retry Select your Library Select + http://evergreen-ils.org/testing/libraries.json diff --git a/Open-ILS/src/Android/core/src/org/evergreen_ils/auth/AuthenticatorActivity.java b/Open-ILS/src/Android/core/src/org/evergreen_ils/auth/AuthenticatorActivity.java index c57058f019..90f98ef814 100644 --- a/Open-ILS/src/Android/core/src/org/evergreen_ils/auth/AuthenticatorActivity.java +++ b/Open-ILS/src/Android/core/src/org/evergreen_ils/auth/AuthenticatorActivity.java @@ -1,6 +1,11 @@ package org.evergreen_ils.auth; +import android.content.Context; import android.preference.PreferenceManager; +import android.text.TextUtils; +import android.widget.AdapterView; +import android.widget.ArrayAdapter; +import android.widget.Spinner; import org.evergreen_ils.R; import org.evergreen_ils.auth.Const; @@ -19,25 +24,63 @@ import android.view.ContextThemeWrapper; import android.view.View; import android.widget.TextView; import org.evergreen_ils.globals.AppPrefs; +import org.evergreen_ils.globals.GlobalConfigs; +import org.evergreen_ils.globals.Utils; +import org.evergreen_ils.searchCatalog.Library; +import org.opensrf.util.JSONException; +import org.opensrf.util.JSONReader; + +import java.util.*; public class AuthenticatorActivity extends AccountAuthenticatorActivity { - private final String TAG = AuthenticatorActivity.class.getName(); + private final String TAG = AuthenticatorActivity.class.getSimpleName(); public final static String ARG_ACCOUNT_TYPE = "ACCOUNT_TYPE"; public final static String ARG_AUTH_TYPE = "AUTH_TYPE"; public final static String ARG_ACCOUNT_NAME = "ACCOUNT_NAME"; //public final static String ARG_IS_ADDING_NEW_ACCOUNT = "IS_ADDING_ACCOUNT"; public static final String KEY_ERROR_MESSAGE = "ERR_MSG"; + public static final String KEY_LIBRARY_URL = "library_url"; public final static String PARAM_USER_PASS = "USER_PASS"; private final int REQ_SIGNUP = 1; private static final String STATE_ALERT_MESSAGE = "state_dialog"; private AccountManager accountManager; + private Context context; + private Spinner librarySpinner; private String authTokenType; private AsyncTask task = null; private AlertDialog alertDialog = null; private String alertMessage = null; + Library selected_library = null; + List libraries = new ArrayList(); + public String libraries_directory_json_url; + + private class FetchConsortiumsTask extends AsyncTask { + protected String doInBackground(String... params) { + String url = params[0]; + String result = null; + try { + Log.d(TAG, "fetching "+url); + result = Utils.getNetPageContent(url); + } catch (Exception e) { + Log.d(TAG, "error fetching", e); + } + return result; + } + + protected void onPostExecute(String result) { + Log.d(TAG, "results available: "+result); + parseLibrariesJSON(result); + ArrayList l = new ArrayList(libraries.size()); + for (Library library : libraries) { + l.add(library.directory_name); + } + ArrayAdapter adapter = new ArrayAdapter(context, android.R.layout.simple_spinner_dropdown_item, l); + librarySpinner.setAdapter(adapter); + } + } @Override public void onCreate(Bundle savedInstanceState) { @@ -47,6 +90,8 @@ public class AuthenticatorActivity extends AccountAuthenticatorActivity { AppPrefs.init(this); accountManager = AccountManager.get(getBaseContext()); + context = getApplicationContext(); + libraries_directory_json_url = getString(R.string.evergreen_libraries_url); String accountName = getIntent().getStringExtra(ARG_ACCOUNT_NAME); Log.d(TAG, "onCreate> accountName="+accountName); @@ -55,6 +100,19 @@ public class AuthenticatorActivity extends AccountAuthenticatorActivity { authTokenType = Const.AUTHTOKEN_TYPE; Log.d(TAG, "onCreate> authTokenType="+authTokenType); + librarySpinner = (Spinner) findViewById(R.id.choose_library_spinner); + librarySpinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { + @Override + public void onItemSelected(AdapterView parent, View view, int position, long id) { + selected_library = libraries.get(position); + } + + @Override + public void onNothingSelected(AdapterView parent) { + selected_library = null; + } + }); + TextView signInText = (TextView) findViewById(R.id.account_sign_in_text); signInText.setText(String.format(getString(R.string.ou_account_sign_in_message), AppPrefs.getString(AppPrefs.LIBRARY_NAME))); @@ -77,7 +135,20 @@ public class AuthenticatorActivity extends AccountAuthenticatorActivity { } } } - + + @Override + protected void onStart() { + super.onStart(); + Log.d(TAG, "onstart"); + startTask(); + } + + @Override + protected void onRestart() { + super.onRestart(); + Log.d(TAG, "onrestart"); + } + @Override protected void onSaveInstanceState(Bundle outState) { super.onSaveInstanceState(outState); @@ -189,7 +260,12 @@ public class AuthenticatorActivity extends AccountAuthenticatorActivity { String authtokenType = authTokenType; // Create the account on the device - if (accountManager.addAccountExplicitly(account, accountPassword, null)) { + Bundle userdata = null; + if (selected_library != null) { + userdata = new Bundle(); + userdata.putString(KEY_LIBRARY_URL, selected_library.url); + } + if (accountManager.addAccountExplicitly(account, accountPassword, userdata)) { Log.d(TAG, "onAuthSuccess> true, setAuthToken "+authtoken); // Not setting the auth token will cause another call to the server // to authenticate the user @@ -204,4 +280,40 @@ public class AuthenticatorActivity extends AccountAuthenticatorActivity { setResult(RESULT_OK, intent); finish(); } + + private void startTask() { + new FetchConsortiumsTask().execute(libraries_directory_json_url); + } + + private void parseLibrariesJSON(String json) { + libraries.clear(); + + if (json != null) { + List> l; + try { + l = (List>) new JSONReader(json).readArray(); + } catch (JSONException e) { + Log.d(TAG, "failed parsing libraries array", e); + return; + } + for (Map map : l) { + String url = (String) map.get("url"); + String directory_name = (String) map.get("directory_name"); + String short_name = (String) map.get("short_name"); + Library library = new Library(url, short_name, directory_name); + libraries.add(library); + } + + Collections.sort(libraries, new Comparator() { + @Override + public int compare(Library a, Library b) { + return a.directory_name.compareTo(b.directory_name); + } + }); + + for (int i = 0; i< libraries.size(); ++i) { + Log.d(TAG, "c["+i+"]: "+ libraries.get(i).directory_name); + } + } + } } diff --git a/Open-ILS/src/Android/core/src/org/evergreen_ils/views/ChooseLibraryActivity.java b/Open-ILS/src/Android/core/src/org/evergreen_ils/views/ChooseLibraryActivity.java index bac7f181e4..a2fc2cc2d7 100644 --- a/Open-ILS/src/Android/core/src/org/evergreen_ils/views/ChooseLibraryActivity.java +++ b/Open-ILS/src/Android/core/src/org/evergreen_ils/views/ChooseLibraryActivity.java @@ -31,6 +31,10 @@ import java.util.*; */ public class ChooseLibraryActivity extends ActionBarActivity { + /* + todo: DELETE ME DELETE ME DELETE ME DELETE ME DELETE ME DELETE ME DELETE ME DELETE ME DELETE ME + DELETE ME DELETE ME DELETE ME DELETE ME DELETE ME DELETE ME DELETE ME DELETE ME DELETE ME + DELETE ME DELETE ME DELETE ME DELETE ME DELETE ME DELETE ME DELETE ME DELETE ME DELETE ME public final static int CHOOSE_LIBRARY_REQUEST = 0; private final String TAG = ChooseLibraryActivity.class.getSimpleName(); public static String librariesJSONUrl = "http://evergreen-ils.org/testing/libraries.json"; @@ -40,31 +44,6 @@ public class ChooseLibraryActivity extends ActionBarActivity { List libraries = new ArrayList(); private boolean restarted = false; - private class FetchConsortiumsTask extends AsyncTask { - protected String doInBackground(String... params) { - String url = params[0]; - String result = null; - try { - Log.d(TAG, "fetching "+url); - result = Utils.getNetPageContent(url); - } catch (Exception e) { - Log.d(TAG, "error fetching", e); - } - return result; - } - - protected void onPostExecute(String result) { - Log.d(TAG, "results available: "+result); - parseLibrariesJSON(result); - ArrayList l = new ArrayList(libraries.size()); - for (Library library : libraries) { - l.add(library.directory_name); - } - ArrayAdapter adapter = new ArrayAdapter(context, android.R.layout.simple_spinner_dropdown_item, l); - consortiumSpinner.setAdapter(adapter); - } - } - public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); context = getApplicationContext(); @@ -166,5 +145,5 @@ public class ChooseLibraryActivity extends ActionBarActivity { } } } - +*/ } diff --git a/Open-ILS/src/Android/cwmars_app/res/values/ou.xml b/Open-ILS/src/Android/cwmars_app/res/values/ou.xml index 4aac9db8c8..2222191657 100644 --- a/Open-ILS/src/Android/cwmars_app/res/values/ou.xml +++ b/Open-ILS/src/Android/cwmars_app/res/values/ou.xml @@ -3,7 +3,7 @@ C/W MARS Library - Sign in to your\n%1$s account + Sign in to your\nC/W MARS account org.cwmars C/W MARS C/W MARS diff --git a/Open-ILS/src/Android/eg_app/AndroidManifest.xml b/Open-ILS/src/Android/eg_app/AndroidManifest.xml index 706b8a193a..6f45453403 100644 --- a/Open-ILS/src/Android/eg_app/AndroidManifest.xml +++ b/Open-ILS/src/Android/eg_app/AndroidManifest.xml @@ -28,10 +28,6 @@ - - diff --git a/Open-ILS/src/Android/eg_app/res/values/ou.xml b/Open-ILS/src/Android/eg_app/res/values/ou.xml index 60a1cf8682..9b68742414 100644 --- a/Open-ILS/src/Android/eg_app/res/values/ou.xml +++ b/Open-ILS/src/Android/eg_app/res/values/ou.xml @@ -3,7 +3,8 @@ Evergreen Library - Sign in to your\n%1$s account + Sign in to your library account + Location: org.evergreen-ils.eg_app Evergreen -- 2.11.0