Have FileLogger handle errors better

Change-Id: I2c7796495905c484e74e629b881c6f80e7271f5c
diff --git a/src/com/android/exchange/utility/FileLogger.java b/src/com/android/exchange/utility/FileLogger.java
index af8f156..e978f5d 100644
--- a/src/com/android/exchange/utility/FileLogger.java
+++ b/src/com/android/exchange/utility/FileLogger.java
@@ -26,7 +26,7 @@
 
 public class FileLogger {
     private static FileLogger LOGGER = null;
-    private static FileWriter mLogWriter = null;
+    private static FileWriter sLogWriter = null;
     public static String LOG_FILE_NAME =
         Environment.getExternalStorageDirectory() + "/emaillog.txt";
 
@@ -37,27 +37,27 @@
 
     private FileLogger() {
         try {
-            mLogWriter = new FileWriter(LOG_FILE_NAME, true);
+            sLogWriter = new FileWriter(LOG_FILE_NAME, true);
         } catch (IOException e) {
             // Doesn't matter
         }
     }
 
     static public synchronized void close() {
-        if (mLogWriter != null) {
+        if (sLogWriter != null) {
             try {
-                mLogWriter.close();
+                sLogWriter.close();
             } catch (IOException e) {
                 // Doesn't matter
             }
-            mLogWriter = null;
+            sLogWriter = null;
         }
     }
 
     static public synchronized void log(Exception e) {
-        if (mLogWriter != null) {
+        if (sLogWriter != null) {
             log("Exception", "Stack trace follows...");
-            PrintWriter pw = new PrintWriter(mLogWriter);
+            PrintWriter pw = new PrintWriter(sLogWriter);
             e.printStackTrace(pw);
             pw.flush();
         }
@@ -96,12 +96,20 @@
         sb.append("\r\n");
         String s = sb.toString();
 
-        if (mLogWriter != null) {
+        if (sLogWriter != null) {
             try {
-                mLogWriter.write(s);
-                mLogWriter.flush();
+                sLogWriter.write(s);
+                sLogWriter.flush();
             } catch (IOException e) {
-                // Doesn't matter
+                // Something might have happened to the sdcard
+                if (Environment.MEDIA_MOUNTED.equals(Environment.getExternalStorageState())) {
+                    // If the card is mounted and we can create the writer, retry
+                    LOGGER = new FileLogger();
+                    if (sLogWriter != null) {
+                        log("FileLogger", "Exception writing log; recreating...");
+                        log(prefix, str);
+                    }
+                }
             }
         }
     }