Replaced Log class with a ring buffer implementation, so that I can debug an issue...
authorkenstir <kenstir@gmail.com>
Fri, 11 Dec 2015 00:59:17 +0000 (19:59 -0500)
committerkenstir <kenstir@gmail.com>
Fri, 11 Dec 2015 00:59:17 +0000 (19:59 -0500)
* Splash activity has a share button that is hidden until a failure.
* That creates a text intent with the app Log.  Probably I should spawn logcat like others do, but that will require the app to have an extra permission "read sensitive log data" which sounds like I'm doing something scary.

48 files changed:
Open-ILS/src/Android/core/res/layout/activity_splash.xml
Open-ILS/src/Android/core/res/values/strings.xml
Open-ILS/src/Android/core/src/org/evergreen_ils/accountAccess/AccountAccess.java
Open-ILS/src/Android/core/src/org/evergreen_ils/accountAccess/AccountUtils.java
Open-ILS/src/Android/core/src/org/evergreen_ils/accountAccess/bookbags/BookBagDetails.java
Open-ILS/src/Android/core/src/org/evergreen_ils/accountAccess/bookbags/BookbagsListView.java
Open-ILS/src/Android/core/src/org/evergreen_ils/accountAccess/checkout/ItemsCheckOutListView.java
Open-ILS/src/Android/core/src/org/evergreen_ils/accountAccess/fines/FinesActivity.java
Open-ILS/src/Android/core/src/org/evergreen_ils/accountAccess/holds/HoldDetails.java
Open-ILS/src/Android/core/src/org/evergreen_ils/accountAccess/holds/HoldsListView.java
Open-ILS/src/Android/core/src/org/evergreen_ils/accountAccess/holds/PlaceHold.java
Open-ILS/src/Android/core/src/org/evergreen_ils/auth/AccountAuthenticator.java
Open-ILS/src/Android/core/src/org/evergreen_ils/auth/AuthenticatorActivity.java
Open-ILS/src/Android/core/src/org/evergreen_ils/auth/AuthenticatorService.java
Open-ILS/src/Android/core/src/org/evergreen_ils/auth/EvergreenAuthenticator.java
Open-ILS/src/Android/core/src/org/evergreen_ils/auth/TestAuthActivity.java
Open-ILS/src/Android/core/src/org/evergreen_ils/barcodescan/CaptureActivity.java
Open-ILS/src/Android/core/src/org/evergreen_ils/barcodescan/CaptureActivityHandler.java
Open-ILS/src/Android/core/src/org/evergreen_ils/barcodescan/DecodeHandler.java
Open-ILS/src/Android/core/src/org/evergreen_ils/barcodescan/camera/AutoFocusCallback.java
Open-ILS/src/Android/core/src/org/evergreen_ils/barcodescan/camera/CameraConfigurationManager.java
Open-ILS/src/Android/core/src/org/evergreen_ils/barcodescan/camera/CameraManager.java
Open-ILS/src/Android/core/src/org/evergreen_ils/barcodescan/camera/FlashlightManager.java
Open-ILS/src/Android/core/src/org/evergreen_ils/barcodescan/camera/PreviewCallback.java
Open-ILS/src/Android/core/src/org/evergreen_ils/database/DatabaseManager.java
Open-ILS/src/Android/core/src/org/evergreen_ils/globals/AppPrefs.java
Open-ILS/src/Android/core/src/org/evergreen_ils/globals/GlobalConfigs.java
Open-ILS/src/Android/core/src/org/evergreen_ils/globals/Log.java [new file with mode: 0644]
Open-ILS/src/Android/core/src/org/evergreen_ils/globals/Utils.java
Open-ILS/src/Android/core/src/org/evergreen_ils/searchCatalog/AdvancedSearchActivity.java
Open-ILS/src/Android/core/src/org/evergreen_ils/searchCatalog/CopyCountInformation.java
Open-ILS/src/Android/core/src/org/evergreen_ils/searchCatalog/CopyInformation.java
Open-ILS/src/Android/core/src/org/evergreen_ils/searchCatalog/ImageDownloader.java
Open-ILS/src/Android/core/src/org/evergreen_ils/searchCatalog/RecordInfo.java
Open-ILS/src/Android/core/src/org/evergreen_ils/searchCatalog/SearchCatalog.java
Open-ILS/src/Android/core/src/org/evergreen_ils/searchCatalog/SearchCatalogListView.java
Open-ILS/src/Android/core/src/org/evergreen_ils/searchCatalog/SearchFormat.java
Open-ILS/src/Android/core/src/org/evergreen_ils/services/NotificationReceiver.java
Open-ILS/src/Android/core/src/org/evergreen_ils/services/PeriodicServiceBroadcastReceiver.java
Open-ILS/src/Android/core/src/org/evergreen_ils/services/ScheduledIntentService.java
Open-ILS/src/Android/core/src/org/evergreen_ils/utils/ui/BasicDetailsFragment.java
Open-ILS/src/Android/core/src/org/evergreen_ils/views/MainActivity.java
Open-ILS/src/Android/core/src/org/evergreen_ils/views/splashscreen/LoadingTask.java
Open-ILS/src/Android/core/src/org/evergreen_ils/views/splashscreen/SplashActivity.java
Open-ILS/src/Android/core/src/org/open_ils/test/org/evergreen_ils/views/VolleyWranglerTest.java
Open-ILS/src/Android/cwmars_app/res/values/ou.xml
Open-ILS/src/Android/hemlock_app/AndroidManifest.xml
Open-ILS/src/Android/opensrf/src/org/opensrf/net/http/GatewayRequest.java

index 0478013..19c4fce 100644 (file)
             android:layout_centerHorizontal="true"
             android:padding="20dip" />
 
+    <ImageButton
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:id="@+id/activity_splash_share_button"
+            android:src="@android:drawable/ic_menu_share"
+            android:layout_alignParentBottom="true"
+            android:layout_alignParentRight="true"
+            android:layout_alignParentEnd="true"
+            android:layout_margin="12dip"
+            android:visibility="visible"/>
+
 </RelativeLayout>
\ No newline at end of file
index a5d0f1d..e6d16e5 100644 (file)
     <string name="choose_library_message">Select your Library</string>
     <string name="action_choose_library">Select</string>
     <string name="evergreen_libraries_url">https://evergreen-ils.org/directory/libraries.json</string>
+    <string name="button_send_log">Share log</string>
 
 </resources>
index d07d16c..ad24e42 100644 (file)
@@ -21,7 +21,6 @@ package org.evergreen_ils.accountAccess;
 
 import android.app.Activity;
 import android.text.TextUtils;
-import android.util.Log;
 import org.evergreen_ils.accountAccess.bookbags.BookBag;
 import org.evergreen_ils.accountAccess.bookbags.BookBagItem;
 import org.evergreen_ils.accountAccess.checkout.CircRecord;
@@ -29,6 +28,7 @@ import org.evergreen_ils.accountAccess.fines.FinesRecord;
 import org.evergreen_ils.accountAccess.holds.HoldRecord;
 import org.evergreen_ils.auth.Const;
 import org.evergreen_ils.globals.GlobalConfigs;
+import org.evergreen_ils.globals.Log;
 import org.evergreen_ils.globals.Utils;
 import org.evergreen_ils.searchCatalog.RecordInfo;
 import org.opensrf.net.http.HttpConnection;
@@ -278,7 +278,7 @@ public class AccountAccess {
                 return false;
             return retrieveSession(auth_token);
         } catch (Exception e) {
-            Log.i(Const.AUTH_TAG, "reauth exception", e);
+            Log.d(Const.AUTH_TAG, "reauth exception", e);
             return false;
         }
     }
index b9a3b25..a34c33a 100644 (file)
@@ -5,10 +5,10 @@ import android.app.Activity;
 import android.os.Bundle;
 import android.os.Looper;
 import android.text.TextUtils;
-import android.util.Log;
 import org.evergreen_ils.R;
 import org.evergreen_ils.auth.Const;
 import org.evergreen_ils.globals.Library;
+import org.evergreen_ils.globals.Log;
 
 import java.io.IOException;
 
@@ -89,7 +89,7 @@ public class AccountUtils {
     }
 
     public static void addAccount(final Activity activity, final Runnable runnable) {
-        Log.i(Const.AUTH_TAG, "addAccount");
+        Log.d(Const.AUTH_TAG, "addAccount");
         final AccountManager am = AccountManager.get(activity);
         final String accountType = activity.getString(R.string.ou_account_type);
         am.addAccount(accountType, Const.AUTHTOKEN_TYPE, null, null, activity, new AccountManagerCallback<Bundle>() {
@@ -98,10 +98,10 @@ public class AccountUtils {
                 try {
                     Bundle bnd = future.getResult();
                     final String account_name = bnd.getString(AccountManager.KEY_ACCOUNT_NAME);
-                    Log.i(Const.AUTH_TAG, "added account bnd=" + bnd);
+                    Log.d(Const.AUTH_TAG, "added account bnd=" + bnd);
                     activity.runOnUiThread(runnable);
                 } catch (Exception e) {
-                    Log.i(Const.AUTH_TAG, "failed to add account", e);
+                    Log.d(Const.AUTH_TAG, "failed to add account", e);
                 }
             }
         }, null);
index 29316b1..93d6504 100644 (file)
@@ -27,6 +27,7 @@ import android.support.v7.app.ActionBarActivity;
 import org.evergreen_ils.R;
 import org.evergreen_ils.accountAccess.AccountAccess;
 import org.evergreen_ils.accountAccess.SessionNotFoundException;
+import org.evergreen_ils.globals.Log;
 import org.evergreen_ils.searchCatalog.RecordInfo;
 import org.evergreen_ils.searchCatalog.SearchCatalog;
 import org.evergreen_ils.searchCatalog.SearchCatalogListView;
@@ -43,7 +44,6 @@ import android.content.DialogInterface;
 import android.content.Intent;
 import android.net.ConnectivityManager;
 import android.os.Bundle;
-import android.util.Log;
 import android.view.LayoutInflater;
 import android.view.View;
 import android.view.View.OnClickListener;
@@ -58,7 +58,7 @@ import android.widget.Toast;
 
 public class BookBagDetails extends ActionBarActivity {
 
-    private final static String TAG = BookBagDetails.class.getName();
+    private final static String TAG = BookBagDetails.class.getSimpleName();
 
     public static final int RESULT_CODE_UPDATE = 1;
 
index 0684c70..0f995f2 100644 (file)
@@ -27,6 +27,7 @@ import android.support.v7.app.ActionBarActivity;
 import org.evergreen_ils.R;
 import org.evergreen_ils.accountAccess.AccountAccess;
 import org.evergreen_ils.accountAccess.SessionNotFoundException;
+import org.evergreen_ils.globals.Log;
 import org.evergreen_ils.searchCatalog.SearchCatalogListView;
 import org.evergreen_ils.utils.ui.ActionBarUtils;
 import org.evergreen_ils.views.splashscreen.SplashActivity;
@@ -36,7 +37,6 @@ import android.app.ProgressDialog;
 import android.content.Context;
 import android.content.Intent;
 import android.os.Bundle;
-import android.util.Log;
 import android.view.LayoutInflater;
 import android.view.View;
 import android.view.View.OnClickListener;
@@ -53,7 +53,7 @@ import android.widget.Toast;
 
 public class BookbagsListView extends ActionBarActivity {
 
-    private final static String TAG = BookbagsListView.class.getName();
+    private final static String TAG = BookbagsListView.class.getSimpleName();
 
     private AccountAccess accountAccess = null;
 
index e9a6542..86d24db 100644 (file)
@@ -30,6 +30,7 @@ import org.evergreen_ils.accountAccess.AccountAccess;
 import org.evergreen_ils.accountAccess.MaxRenewalsException;
 import org.evergreen_ils.accountAccess.ServerErrorMessage;
 import org.evergreen_ils.accountAccess.SessionNotFoundException;
+import org.evergreen_ils.globals.Log;
 import org.evergreen_ils.searchCatalog.SearchFormat;
 import org.evergreen_ils.utils.ui.ActionBarUtils;
 import org.evergreen_ils.views.splashscreen.SplashActivity;
@@ -37,7 +38,6 @@ import org.evergreen_ils.views.splashscreen.SplashActivity;
 import android.app.ProgressDialog;
 import android.content.Context;
 import android.os.Bundle;
-import android.util.Log;
 import android.view.LayoutInflater;
 import android.view.View;
 import android.view.View.OnClickListener;
@@ -50,7 +50,7 @@ import org.w3c.dom.Text;
 
 public class ItemsCheckOutListView extends ActionBarActivity {
 
-    private final static String TAG = ItemsCheckOutListView.class.getName();
+    private final static String TAG = ItemsCheckOutListView.class.getSimpleName();
 
     private AccountAccess accountAccess = null;
 
index fa84823..ca66dbd 100644 (file)
@@ -37,7 +37,6 @@ import android.content.Context;
 import android.content.Intent;
 import android.graphics.Color;
 import android.os.Bundle;
-import android.util.Log;
 import android.view.LayoutInflater;
 import android.view.View;
 import android.view.View.OnClickListener;
@@ -184,32 +183,19 @@ public class FinesActivity extends ActionBarActivity {
             final FinesRecord record = getItem(position);
 
             if (row == null) {
-
-                Log.d(tag, "Starting XML view more infaltion ... ");
                 LayoutInflater inflater = (LayoutInflater) this.getContext()
                         .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
                 row = inflater.inflate(R.layout.fines_list_item, parent, false);
-                Log.d(tag, "Successfully completed XML view more Inflation!");
-
             }
-            // Get reference to TextView - title
-            fineTitle = (TextView) row.findViewById(R.id.fines_title);
 
-            // Get reference to TextView author
+            fineTitle = (TextView) row.findViewById(R.id.fines_title);
             fineAuthor = (TextView) row.findViewById(R.id.fines_author);
-
-            // Get hold status
-            fineBalanceOwed = (TextView) row
-                    .findViewById(R.id.fines_balance_owed);
-
+            fineBalanceOwed = (TextView) row.findViewById(R.id.fines_balance_owed);
             fineStatus = (TextView) row.findViewById(R.id.fines_status);
-            // set text
 
-            // set raw information
             fineTitle.setText(record.title);
             fineAuthor.setText(record.author);
             fineBalanceOwed.setText(decimalFormater.format(record.balance_owed));
-            // status.setText(record.getHoldStatus());
             fineStatus.setText(record.getStatus());
 
             return row;
index 781bb43..43ccedc 100644 (file)
@@ -24,12 +24,12 @@ import java.util.Calendar;
 import java.util.Date;
 
 import android.support.v7.app.ActionBarActivity;
-import android.util.Log;
 import android.view.MenuItem;
 import org.evergreen_ils.R;
 import org.evergreen_ils.accountAccess.AccountAccess;
 import org.evergreen_ils.accountAccess.SessionNotFoundException;
 import org.evergreen_ils.globals.GlobalConfigs;
+import org.evergreen_ils.globals.Log;
 import org.evergreen_ils.utils.ui.ActionBarUtils;
 import org.evergreen_ils.views.splashscreen.SplashActivity;
 
@@ -59,7 +59,7 @@ import android.widget.Toast;
 
 public class HoldDetails extends ActionBarActivity {
 
-    private final static String TAG = HoldDetails.class.getName();
+    private final static String TAG = HoldDetails.class.getSimpleName();
 
     public static final int RESULT_CODE_DELETE_HOLD = 5;
 
index c539564..710ffaf 100644 (file)
@@ -25,7 +25,6 @@ import android.content.Intent;
 import android.os.Bundle;
 import android.support.v7.app.ActionBar;
 import android.support.v7.app.ActionBarActivity;
-import android.util.Log;
 import android.view.LayoutInflater;
 import android.view.View;
 import android.view.ViewGroup;
@@ -34,6 +33,7 @@ import android.widget.AdapterView.OnItemClickListener;
 import org.evergreen_ils.R;
 import org.evergreen_ils.accountAccess.AccountAccess;
 import org.evergreen_ils.accountAccess.SessionNotFoundException;
+import org.evergreen_ils.globals.Log;
 import org.evergreen_ils.searchCatalog.ImageDownloader;
 import org.evergreen_ils.searchCatalog.SearchFormat;
 import org.evergreen_ils.utils.ui.ActionBarUtils;
@@ -44,7 +44,7 @@ import java.util.List;
 
 public class HoldsListView extends ActionBarActivity {
 
-    private final static String TAG = HoldsListView.class.getName();
+    private final static String TAG = HoldsListView.class.getSimpleName();
 
     private AccountAccess accountAccess = null;
 
@@ -177,7 +177,7 @@ public class HoldsListView extends ActionBarActivity {
     }
 
     class HoldsArrayAdapter extends ArrayAdapter<HoldRecord> {
-        private final String tag = HoldsArrayAdapter.class.getName();
+        private final String tag = HoldsArrayAdapter.class.getSimpleName();
 
         private TextView holdTitle;
         private TextView holdAuthor;
index 01038af..4ce37bd 100644 (file)
@@ -24,13 +24,13 @@ import java.util.Calendar;
 import java.util.Date;
 
 import android.support.v7.app.ActionBarActivity;
-import android.util.Log;
 import android.view.MenuItem;
 import org.evergreen_ils.R;
 import org.evergreen_ils.accountAccess.AccountAccess;
 import org.evergreen_ils.accountAccess.SessionNotFoundException;
 import org.evergreen_ils.globals.EvergreenConstants;
 import org.evergreen_ils.globals.GlobalConfigs;
+import org.evergreen_ils.globals.Log;
 import org.evergreen_ils.searchCatalog.Organisation;
 import org.evergreen_ils.searchCatalog.RecordInfo;
 import org.evergreen_ils.utils.ui.ActionBarUtils;
@@ -59,7 +59,7 @@ import android.widget.Toast;
 
 public class PlaceHold extends ActionBarActivity {
 
-    private static final String TAG = PlaceHold.class.getName();
+    private static final String TAG = PlaceHold.class.getSimpleName();
 
     private TextView title;
 
index 773fde6..a486542 100644 (file)
@@ -9,11 +9,11 @@ import android.content.Context;
 import android.content.Intent;
 import android.os.Bundle;
 import android.text.TextUtils;
-import android.util.Log;
+import org.evergreen_ils.globals.Log;
 
 public class AccountAuthenticator extends AbstractAccountAuthenticator {
     
-    private final static String TAG = AccountAuthenticator.class.getName();
+    private final static String TAG = AccountAuthenticator.class.getSimpleName();
     private Context context;
 
     public AccountAuthenticator(Context context) {
index 086f39b..3a5bcc9 100644 (file)
@@ -24,11 +24,11 @@ import android.content.DialogInterface.OnClickListener;
 import android.content.Intent;
 import android.os.AsyncTask;
 import android.os.Bundle;
-import android.util.Log;
 import android.view.View;
 import android.widget.TextView;
 import org.evergreen_ils.accountAccess.AccountUtils;
 import org.evergreen_ils.globals.AppPrefs;
+import org.evergreen_ils.globals.Log;
 import org.evergreen_ils.net.VolleyWrangler;
 import org.evergreen_ils.globals.Library;
 import org.opensrf.util.JSONException;
@@ -38,7 +38,7 @@ import java.util.*;
 
 public class AuthenticatorActivity extends AccountAuthenticatorActivity {
 
-    private final static String TAG = AuthenticatorActivity.class.getName();
+    private final static String TAG = AuthenticatorActivity.class.getSimpleName();
 
     public final static String ARG_ACCOUNT_TYPE = "ACCOUNT_TYPE";
     public final static String ARG_AUTH_TYPE = "AUTH_TYPE";
index 2d0d493..49d2644 100644 (file)
@@ -1,11 +1,11 @@
 package org.evergreen_ils.auth;
 
-import android.util.Log;
 import org.evergreen_ils.auth.AccountAuthenticator;
 
 import android.app.Service;
 import android.content.Intent;
 import android.os.IBinder;
+import org.evergreen_ils.globals.Log;
 
 public class AuthenticatorService extends Service {
     @Override
index 1952b79..2d07269 100644 (file)
@@ -6,16 +6,16 @@ import java.security.NoSuchAlgorithmException;
 import java.util.HashMap;
 import java.util.Map;
 
+import org.evergreen_ils.globals.Log;
 import org.opensrf.Method;
 import org.opensrf.net.http.GatewayRequest;
 import org.opensrf.net.http.HttpConnection;
 import org.opensrf.net.http.HttpRequest;
 
 import android.text.TextUtils;
-import android.util.Log;
 
 public class EvergreenAuthenticator {
-    private final static String TAG = EvergreenAuthenticator.class.getName();
+    private final static String TAG = EvergreenAuthenticator.class.getSimpleName();
     public final static String SERVICE_AUTH = "open-ils.auth";
     public final static String METHOD_AUTH_INIT = "open-ils.auth.authenticate.init";
     public final static String METHOD_AUTH_COMPLETE = "open-ils.auth.authenticate.complete";
index 2da48d5..141d956 100644 (file)
@@ -27,11 +27,11 @@ import android.content.DialogInterface;
 import android.os.Build;
 import android.os.Bundle;
 import android.text.TextUtils;
-import android.util.Log;
 import android.view.ContextThemeWrapper;
 import android.view.View;
 import android.widget.TextView;
 import android.widget.Toast;
+import org.evergreen_ils.globals.Log;
 
 /**
  * Created with IntelliJ IDEA.
@@ -43,7 +43,7 @@ public class TestAuthActivity extends Activity {
        
        private static final String STATE_DIALOG = "state_dialog";
        private static final String STATE_INVALIDATE = "state_invalidate";
-    private static final String TAG = TestAuthActivity.class.getName();
+    private static final String TAG = TestAuthActivity.class.getSimpleName();
 
     private AccountManager mAccountManager;
     private String mAccountType;
index 868e53d..477f6d8 100755 (executable)
@@ -5,6 +5,7 @@ import java.util.Vector;
 
 import org.evergreen_ils.R;
 import org.evergreen_ils.barcodescan.camera.CameraManager;
+import org.evergreen_ils.globals.Log;
 import org.evergreen_ils.views.splashscreen.SplashActivity;
 
 import android.app.Activity;
@@ -14,7 +15,6 @@ import android.content.Intent;
 import android.graphics.Bitmap;
 import android.os.Bundle;
 import android.os.Handler;
-import android.util.Log;
 import android.view.Menu;
 import android.view.SurfaceHolder;
 import android.view.SurfaceView;
index 8165cc3..ec7936a 100755 (executable)
@@ -13,10 +13,10 @@ import android.net.Uri;
 import android.os.Bundle;
 import android.os.Handler;
 import android.os.Message;
-import android.util.Log;
 
 import com.google.zxing.BarcodeFormat;
 import com.google.zxing.Result;
+import org.evergreen_ils.globals.Log;
 
 /**
  * This class handles all the messaging which comprises the state machine for capture.
index 713de87..6ad1750 100755 (executable)
@@ -24,7 +24,6 @@ import android.os.Bundle;
 import android.os.Handler;
 import android.os.Looper;
 import android.os.Message;
-import android.util.Log;
 
 import com.google.zxing.BinaryBitmap;
 import com.google.zxing.DecodeHintType;
@@ -32,6 +31,7 @@ import com.google.zxing.MultiFormatReader;
 import com.google.zxing.ReaderException;
 import com.google.zxing.Result;
 import com.google.zxing.common.HybridBinarizer;
+import org.evergreen_ils.globals.Log;
 
 final class DecodeHandler extends Handler {
 
index e8bda12..a8cf390 100755 (executable)
@@ -19,7 +19,7 @@ package org.evergreen_ils.barcodescan.camera;
 import android.hardware.Camera;
 import android.os.Handler;
 import android.os.Message;
-import android.util.Log;
+import org.evergreen_ils.globals.Log;
 
 final class AutoFocusCallback implements Camera.AutoFocusCallback {
 
index 2c59126..c256825 100755 (executable)
@@ -24,9 +24,9 @@ import android.content.SharedPreferences;
 import android.graphics.Point;
 import android.hardware.Camera;
 import android.preference.PreferenceManager;
-import android.util.Log;
 import android.view.Display;
 import android.view.WindowManager;
+import org.evergreen_ils.globals.Log;
 
 /**
  * A class which deals with reading, parsing, and setting the camera parameters which are used to
index ce3d538..f442b15 100755 (executable)
@@ -19,6 +19,7 @@ package org.evergreen_ils.barcodescan.camera;
 
 import java.io.IOException;
 
+import android.util.Log;
 import org.evergreen_ils.barcodescan.PlanarYUVLuminanceSource;
 import org.evergreen_ils.barcodescan.PreferencesActivity;
 
@@ -29,7 +30,6 @@ import android.graphics.Rect;
 import android.hardware.Camera;
 import android.os.Handler;
 import android.preference.PreferenceManager;
-import android.util.Log;
 import android.view.SurfaceHolder;
 
 /**
index 25b9906..164c812 100755 (executable)
@@ -17,7 +17,7 @@
 package org.evergreen_ils.barcodescan.camera;
 
 import android.os.IBinder;
-import android.util.Log;
+import org.evergreen_ils.globals.Log;
 
 import java.lang.reflect.InvocationTargetException;
 import java.lang.reflect.Method;
index 807227d..96862a1 100755 (executable)
@@ -35,7 +35,7 @@ import android.graphics.Point;
 import android.hardware.Camera;
 import android.os.Handler;
 import android.os.Message;
-import android.util.Log;
+import org.evergreen_ils.globals.Log;
 
 final class PreviewCallback implements Camera.PreviewCallback {
 
index 860975e..67ec994 100644 (file)
@@ -26,10 +26,10 @@ import org.androwrapee.db.DefaultDAO;
 import org.androwrapee.db.DefaultDatabaseHelper;
 import org.androwrapee.db.IllegalClassStructureException;
 import org.androwrapee.db.ReflectionManager;
+import org.evergreen_ils.globals.Log;
 import org.evergreen_ils.services.NotificationAlert;
 
 import android.content.Context;
-import android.util.Log;
 
 /**
  * The Class DatabaseDefaults.
index 1112c27..6fbc1e2 100644 (file)
@@ -3,7 +3,6 @@ package org.evergreen_ils.globals;
 import android.content.Context;
 import android.content.SharedPreferences;
 import android.preference.PreferenceManager;
-import android.util.Log;
 import org.evergreen_ils.R;
 import org.evergreen_ils.accountAccess.bookbags.BookBag;
 
index cd0ca2b..cd9a9ed 100644 (file)
@@ -22,7 +22,6 @@ package org.evergreen_ils.globals;
 import android.content.Context;
 import android.content.pm.ApplicationInfo;
 import android.text.TextUtils;
-import android.util.Log;
 import com.android.volley.Request;
 import com.android.volley.RequestQueue;
 import com.android.volley.Response;
@@ -219,8 +218,7 @@ public class GlobalConfigs {
         try {
             search.getCopyStatuses();
         } catch (Exception e) {
-            // TODO Auto-generated catch block
-            e.printStackTrace();
+            Log.d(TAG, "caught exception", e);
         }
     }
 
diff --git a/Open-ILS/src/Android/core/src/org/evergreen_ils/globals/Log.java b/Open-ILS/src/Android/core/src/org/evergreen_ils/globals/Log.java
new file mode 100644 (file)
index 0000000..46e0a39
--- /dev/null
@@ -0,0 +1,77 @@
+package org.evergreen_ils.globals;
+
+import java.text.DateFormat;
+import java.text.SimpleDateFormat;
+import java.util.*;
+
+/** private logging class that maintains a queue for potential sharing
+ * Created by kenstir on 12/9/2015.
+ */
+public class Log {
+    private static final int mQueueSize = 200;
+    private static ArrayDeque<String> mEntries = new ArrayDeque<String>(mQueueSize);
+    private static SimpleDateFormat mTimeFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS", Locale.US);
+
+    // caller is synchronized
+    public static synchronized void push(String TAG, String msg, Throwable tr) {
+        android.util.Log.d(TAG, msg, tr);
+
+        StringBuilder sb = new StringBuilder();
+        String date = mTimeFormat.format(System.currentTimeMillis());
+        sb.append(date).append('\t').append(TAG);
+        String prefix = sb.toString();
+
+        if (msg != null) {
+            mEntries.push(prefix + '\t' + msg);
+        }
+
+        if (tr != null) {
+            mEntries.push(prefix + '\t' + tr.getMessage());
+            StackTraceElement backtrace[] = tr.getStackTrace();
+            for (StackTraceElement elem : backtrace) {
+                mEntries.push(prefix + "\t at " + elem.toString());
+            }
+        }
+
+        while (mEntries.size() > mQueueSize) {
+            mEntries.pop();
+        }
+    }
+
+    public static synchronized String getString() {
+        StringBuilder sb = new StringBuilder(mQueueSize * 120);
+        Iterator<String> it = mEntries.descendingIterator();
+        while (it.hasNext()) {
+            sb.append(it.next()).append('\n');
+        }
+        return sb.toString();
+    }
+
+    public static void d(String TAG, String msg) {
+        push(TAG, msg, null);
+    }
+
+    public static void d(String TAG, String msg, Throwable tr) {
+        push(TAG, msg, tr);
+    }
+
+    public static void i(String TAG, String msg) {
+        push(TAG, msg, null);
+    }
+
+    public static void v(String TAG, String msg) {
+        push(TAG, msg, null);
+    }
+
+    public static void w(String TAG, String msg) {
+        push(TAG, msg, null);
+    }
+
+    public static void w(String TAG, Throwable tr) {
+        push(TAG, null, tr);
+    }
+
+    public static void w(String TAG, String msg, Throwable tr) {
+        push(TAG, msg, tr);
+    }
+}
index 71bd517..8cc54f4 100644 (file)
@@ -37,10 +37,8 @@ import org.opensrf.net.http.GatewayRequest;
 import org.opensrf.net.http.HttpConnection;
 import org.opensrf.net.http.HttpRequest;
 
-import android.util.Log;
-
 public class Utils {
-    private static final String TAG = Utils.class.getName();
+    private static final String TAG = Utils.class.getSimpleName();
 
     /**
      * Gets the net page content.
index 306f8da..ec4a981 100644 (file)
@@ -42,7 +42,7 @@ import android.widget.TextView;
 
 public class AdvancedSearchActivity extends ActionBarActivity {
 
-    private final static String TAG = AdvancedSearchActivity.class.getName();
+    private final static String TAG = AdvancedSearchActivity.class.getSimpleName();
 
     private ArrayList<String> searchTerms;
     private String advancedSearchFormattedText;
index 2f73183..2dbfde0 100644 (file)
  */
 package org.evergreen_ils.searchCatalog;
 
-import android.util.Log;
+
+import org.evergreen_ils.globals.Log;
 
 import java.io.Serializable;
 import java.util.Map;
 
 public class CopyCountInformation implements Serializable {
 
-    private final static String TAG = CopyCountInformation.class.getName();
+    private final static String TAG = CopyCountInformation.class.getSimpleName();
     private static final long serialVersionUID = 12343248767867L;
     public Integer org_id;
     public Integer count;
index 67e0fa8..5c1b71e 100644 (file)
@@ -19,7 +19,8 @@
  */
 package org.evergreen_ils.searchCatalog;
 
-import android.util.Log;
+
+import org.evergreen_ils.globals.Log;
 
 import java.io.Serializable;
 import java.util.HashMap;
@@ -33,7 +34,7 @@ public class CopyInformation implements Serializable {
 
     private static final long serialVersionUID = -7269334218707079463L;
 
-    private final static String TAG = CopyInformation.class.getName();
+    private final static String TAG = CopyInformation.class.getSimpleName();
 
     public Integer org_id = -1;
     public String call_number_sufix;
index e994b5c..263ea34 100644 (file)
@@ -41,8 +41,8 @@ import android.graphics.drawable.Drawable;
 import android.net.http.AndroidHttpClient;
 import android.os.AsyncTask;
 import android.os.Handler;
-import android.util.Log;
 import android.widget.ImageView;
+import org.evergreen_ils.globals.Log;
 
 /**
  * This helper class download images from the Internet and binds those with the
index 9d697c0..1a18266 100644 (file)
@@ -26,14 +26,14 @@ import java.util.Map;
 import java.util.Map.Entry;
 
 import android.text.TextUtils;
-import android.util.Log;
+import org.evergreen_ils.globals.Log;
 import org.opensrf.util.OSRFObject;
 
 public class RecordInfo implements Serializable {
 
     private static final long serialVersionUID = 10123L;
 
-    private static final String TAG = RecordInfo.class.getName();
+    private static final String TAG = RecordInfo.class.getSimpleName();
 
     public String title = null;
     public String author = null;
index 9455457..cd7b78b 100644 (file)
@@ -29,6 +29,7 @@ import android.text.TextUtils;
 import org.evergreen_ils.accountAccess.AccountAccess;
 import org.evergreen_ils.globals.AppPrefs;
 import org.evergreen_ils.globals.GlobalConfigs;
+import org.evergreen_ils.globals.Log;
 import org.evergreen_ils.globals.Utils;
 import org.opensrf.Method;
 import org.opensrf.net.http.GatewayRequest;
@@ -38,7 +39,6 @@ import org.opensrf.net.http.HttpRequestHandler;
 import org.opensrf.util.OSRFObject;
 
 import android.net.ConnectivityManager;
-import android.util.Log;
 
 /**
  * The Class SearchCatalog.
@@ -84,7 +84,7 @@ public class SearchCatalog {
 
     public static SearchCatalog searchCatalogSingleton = null;
 
-    public String TAG = SearchCatalog.class.getName();
+    public String TAG = SearchCatalog.class.getSimpleName();
 
     // the org on which the searches will be made
     public Organisation selectedOrganization = null;
index 29a32e5..a87b67b 100644 (file)
@@ -32,6 +32,7 @@ import org.evergreen_ils.accountAccess.bookbags.BookBag;
 import org.evergreen_ils.accountAccess.holds.PlaceHold;
 import org.evergreen_ils.barcodescan.CaptureActivity;
 import org.evergreen_ils.globals.GlobalConfigs;
+import org.evergreen_ils.globals.Log;
 import org.evergreen_ils.net.VolleyWrangler;
 import org.evergreen_ils.utils.ui.ActionBarUtils;
 import org.evergreen_ils.views.splashscreen.SplashActivity;
@@ -41,7 +42,6 @@ import android.app.ProgressDialog;
 import android.content.Context;
 import android.content.Intent;
 import android.os.Bundle;
-import android.util.Log;
 import android.view.ContextMenu.ContextMenuInfo;
 import android.view.View.OnClickListener;
 import android.view.View.OnKeyListener;
@@ -63,7 +63,7 @@ import android.widget.Toast;
 
 public class SearchCatalogListView extends ActionBarActivity {
 
-    private static final String TAG = SearchCatalogListView.class.getName();
+    private static final String TAG = SearchCatalogListView.class.getSimpleName();
 
     private ArrayList<RecordInfo> recordList;
 
@@ -625,7 +625,7 @@ public class SearchCatalogListView extends ActionBarActivity {
 
     class SearchArrayAdapter extends ArrayAdapter<RecordInfo> {
 
-        private final String tag = SearchArrayAdapter.class.getName();
+        private final String tag = SearchArrayAdapter.class.getSimpleName();
         private Context context;
         private NetworkImageView recordImage;
         private TextView recordTitle;
index 3a1cf0f..9e136b0 100644 (file)
@@ -1,8 +1,8 @@
 package org.evergreen_ils.searchCatalog;
 
 import android.content.Context;
-import android.util.Log;
 import org.evergreen_ils.R;
+import org.evergreen_ils.globals.Log;
 import org.opensrf.util.JSONException;
 import org.opensrf.util.JSONReader;
 
index d1ca9d8..5f82d39 100644 (file)
@@ -19,6 +19,7 @@
  */
 package org.evergreen_ils.services;
 
+import org.evergreen_ils.globals.Log;
 import org.evergreen_ils.views.splashscreen.SplashActivity;
 
 import android.app.Notification;
@@ -28,11 +29,10 @@ import android.content.BroadcastReceiver;
 import android.content.Context;
 import android.content.Intent;
 import android.os.Bundle;
-import android.util.Log;
 
 public class NotificationReceiver extends BroadcastReceiver {
 
-    private static final String TAG = NotificationReceiver.class.getName();
+    private static final String TAG = NotificationReceiver.class.getSimpleName();
     public static final int NOTIFICATION_ID = 1;
 
     @Override
index f5a0cee..8557237 100644 (file)
@@ -28,7 +28,7 @@ import android.content.SharedPreferences;
 import android.net.ConnectivityManager;
 import android.net.NetworkInfo;
 import android.preference.PreferenceManager;
-import android.util.Log;
+import org.evergreen_ils.globals.Log;
 
 public class PeriodicServiceBroadcastReceiver extends BroadcastReceiver {
 
index f1f6103..da16cad 100644 (file)
@@ -34,6 +34,7 @@ import org.evergreen_ils.accountAccess.SessionNotFoundException;
 import org.evergreen_ils.accountAccess.checkout.CircRecord;
 import org.evergreen_ils.database.DatabaseManager;
 import org.evergreen_ils.globals.GlobalConfigs;
+import org.evergreen_ils.globals.Log;
 import org.evergreen_ils.globals.Utils;
 import org.evergreen_ils.auth.Const;
 import org.open_ils.idl.IDLParser;
@@ -44,13 +45,12 @@ import android.app.PendingIntent;
 import android.content.Intent;
 import android.content.SharedPreferences;
 import android.preference.PreferenceManager;
-import android.util.Log;
 
 public class ScheduledIntentService extends IntentService {
 
     public static Date lastUpdateServiceDate;
 
-    public static String TAG = ScheduledIntentService.class.getName();
+    public static String TAG = ScheduledIntentService.class.getSimpleName();
 
     public static String ACTION = "org.evergreen_ils.updateservice";
 
index f64facf..f0710a1 100644 (file)
@@ -24,7 +24,6 @@ import java.util.Iterator;
 import java.util.Map.Entry;
 import java.util.Set;
 
-import android.util.Log;
 import com.android.volley.toolbox.ImageLoader;
 import com.android.volley.toolbox.NetworkImageView;
 import org.evergreen_ils.R;
@@ -58,7 +57,7 @@ import android.widget.Toast;
 
 public class BasicDetailsFragment extends Fragment {
 
-    private final static String TAG = BasicDetailsFragment.class.getName();
+    private final static String TAG = BasicDetailsFragment.class.getSimpleName();
 
     private RecordInfo record;
     private Integer orgId;
index dd1d183..3e6d1ac 100644 (file)
@@ -4,7 +4,7 @@ import android.content.Intent;
 import android.net.Uri;
 import android.os.Bundle;
 import android.support.v7.app.ActionBarActivity;
-import android.util.Log;
+import android.text.TextUtils;
 import android.view.Menu;
 import android.view.MenuInflater;
 import android.view.MenuItem;
@@ -16,6 +16,7 @@ import org.evergreen_ils.accountAccess.fines.FinesActivity;
 import org.evergreen_ils.accountAccess.holds.HoldsListView;
 import org.evergreen_ils.auth.Const;
 import org.evergreen_ils.globals.GlobalConfigs;
+import org.evergreen_ils.globals.Log;
 import org.evergreen_ils.searchCatalog.SearchCatalogListView;
 import org.evergreen_ils.utils.ui.ActionBarUtils;
 import org.evergreen_ils.views.splashscreen.SplashActivity;
@@ -46,6 +47,9 @@ public class MainActivity extends ActionBarActivity {
     public boolean onCreateOptionsMenu(Menu menu) {
         MenuInflater inflater = getMenuInflater();
         inflater.inflate(R.menu.menu_main, menu);
+        String url = getString(R.string.ou_feedback_url);
+        if (TextUtils.isEmpty(url))
+            menu.removeItem(R.id.action_feedback);
         return super.onCreateOptionsMenu(menu);
     }
 
index ca82208..9e85527 100644 (file)
@@ -31,8 +31,8 @@ import org.evergreen_ils.globals.GlobalConfigs;
 import android.accounts.AccountManager;
 import android.app.Activity;
 import android.os.Bundle;
-import android.util.Log;
 import org.evergreen_ils.globals.Library;
+import org.evergreen_ils.globals.Log;
 
 /** This is basically the same as an AsyncTask<String,String,String>, except that it uses
  * a Thread.  Starting with HONEYCOMB, tasks are executed on a single thread and the 2nd
@@ -42,7 +42,7 @@ import org.evergreen_ils.globals.Library;
  *
  */
 public class LoadingTask {
-    private final static String TAG = LoadingTask.class.getName();
+    private final static String TAG = LoadingTask.class.getSimpleName();
 
     public static final String TASK_OK = "OK";
 
index 16555b2..95838f9 100644 (file)
  */
 package org.evergreen_ils.views.splashscreen;
 
-import android.content.SharedPreferences;
+import android.widget.ImageButton;
 import org.evergreen_ils.R;
-import org.evergreen_ils.globals.GlobalConfigs;
 import org.evergreen_ils.globals.AppPrefs;
+import org.evergreen_ils.globals.Log;
 import org.evergreen_ils.views.MainActivity;
 import org.evergreen_ils.views.splashscreen.LoadingTask.LoadingTaskListener;
 
@@ -32,7 +32,6 @@ import android.content.Context;
 import android.content.Intent;
 import android.os.Bundle;
 import android.text.TextUtils;
-import android.util.Log;
 import android.view.View;
 import android.view.View.OnClickListener;
 import android.widget.Button;
@@ -48,6 +47,7 @@ public class SplashActivity extends Activity implements LoadingTaskListener {
     private ProgressBar mProgressBar;
     private AlertDialog mAlertDialog;
     private Button mRetryButton;
+    private ImageButton mShareLogButton;
     private LoadingTask mTask;
     private static boolean mInitialized;
     private boolean restarted = false;
@@ -97,6 +97,17 @@ public class SplashActivity extends Activity implements LoadingTaskListener {
                 startTask();
             }
         });
+        mShareLogButton = (ImageButton) findViewById(R.id.activity_splash_share_button);
+        mShareLogButton.setOnClickListener(new OnClickListener() {
+            @Override
+            public void onClick(View v) {
+                Intent i = new Intent();
+                i.setAction(Intent.ACTION_SEND);
+                i.putExtra(Intent.EXTRA_TEXT, Log.getString());
+                i.setType("text/plain");
+                startActivity(i);
+            }
+        });
 
         startTask();
     }
@@ -161,6 +172,7 @@ public class SplashActivity extends Activity implements LoadingTaskListener {
     @Override
     public void onPreExecute() {
         mRetryButton.setVisibility(View.GONE);
+        mShareLogButton.setVisibility(View.GONE);
         mProgressBar.setVisibility(View.VISIBLE);
     }
 
@@ -178,13 +190,14 @@ public class SplashActivity extends Activity implements LoadingTaskListener {
             startApp();
         } else {
             String extra_text;
-            if (!TextUtils.isEmpty(result))
+            if (!TextUtils.isEmpty(result)) {
                 extra_text = " failed:\n" + result;
-            else
+            } else {
                 extra_text = " cancelled";
-            Log.d(TAG, "progresstext += " + extra_text);
+            }
             mProgressText.setText(mProgressText.getText() + extra_text);
             mRetryButton.setVisibility(View.VISIBLE);
+            mShareLogButton.setVisibility(View.VISIBLE);
         }
     }
 }
\ No newline at end of file
index 6282862..00e4cc5 100644 (file)
@@ -2,13 +2,13 @@ package org.evergreen_ils.views;
 
 import android.app.Activity;
 import android.test.ActivityInstrumentationTestCase2;
-import android.util.Log;
 import com.android.volley.Request;
 import com.android.volley.RequestQueue;
 import com.android.volley.Response;
 import com.android.volley.VolleyError;
 import com.android.volley.toolbox.JsonObjectRequest;
 import com.android.volley.toolbox.StringRequest;
+import org.evergreen_ils.globals.Log;
 import org.evergreen_ils.net.VolleyWrangler;
 import org.json.JSONArray;
 import org.json.JSONObject;
@@ -25,7 +25,7 @@ import java.util.concurrent.locks.ReentrantLock;
 public class VolleyWranglerTest
         extends ActivityInstrumentationTestCase2<SimpleTestableActivity> {
 
-    private static final String TAG = VolleyWranglerTest.class.getName();
+    private static final String TAG = VolleyWranglerTest.class.getSimpleName();
     private Activity mActivity;
     private VolleyWrangler mVolley;
     private Response.ErrorListener mVolleyErrorListener;
index 310c2bf..3b44e3e 100644 (file)
@@ -11,5 +11,5 @@
     <string name="ou_library_name">C/W MARS</string>
     <string name="ou_activity_subtitle">%2$s</string>
     <string name="ou_library_url">https://catalog.cwmars.org</string>
-    <string name="ou_feedback_url">https://docs.google.com/forms/d/1RbDW1IRD8-IV4U_HdWqGXCEQOJnl87Z7HH_uVGNWASY/viewform</string>
+    <string name="ou_feedback_url"></string>
 </resources>
index 8d10c7c..7bffd63 100644 (file)
@@ -2,8 +2,8 @@
 <manifest xmlns:android="http://schemas.android.com/apk/res/android"
           package="net.kenstir.apps.hemlock"
           android:installLocation="auto"
-          android:versionCode="12"
-          android:versionName="1.5">
+          android:versionCode="13"
+          android:versionName="1.6">
 
     <uses-sdk
         android:minSdkVersion="15"
index e615528..2412a67 100644 (file)
@@ -1,6 +1,6 @@
 package org.opensrf.net.http;
 
-import android.util.Log;
+import org.evergreen_ils.globals.Log;
 import org.json.JSONObject;
 import org.opensrf.*;
 import org.opensrf.util.*;
@@ -24,7 +24,7 @@ import java.util.concurrent.ConcurrentLinkedQueue;
 public class GatewayRequest extends HttpRequest {
 
     private boolean readComplete;
-    private String TAG = GatewayRequest.class.getName();
+    private String TAG = GatewayRequest.class.getSimpleName();
 
     public GatewayRequest(HttpConnection conn, String service, Method method) {
         super(conn, service, method);