Merge remote-tracking branch 'upstream/develop' into
[pub/Android/ownCloud.git] / src / com / owncloud / android / ui / activity / LogHistoryActivity.java
index 7b6b4a9..676388d 100644 (file)
@@ -21,9 +21,10 @@ import java.io.BufferedReader;
 import java.io.File;
 import java.io.FileReader;
 import java.io.IOException;
+import java.lang.ref.WeakReference;
+import java.lang.reflect.Field;
 import java.util.ArrayList;
 
-import android.app.ProgressDialog;
 import android.content.Intent;
 import android.net.Uri;
 import android.os.AsyncTask;
@@ -54,13 +55,9 @@ public class LogHistoryActivity extends SherlockFragmentActivity  {
 
     private static final String DIALOG_WAIT_TAG = "DIALOG_WAIT";
 
-    private static final String KEY_LOG_TEXT = "LOG_TEXT";
-
     private String mLogPath = FileStorageUtils.getLogPath();
     private File logDIR = null;
 
-    private TextView mLogTV;
-
 
     @Override
     protected void onCreate(Bundle savedInstanceState) {
@@ -92,14 +89,6 @@ public class LogHistoryActivity extends SherlockFragmentActivity  {
             }
         });
 
-        mLogTV = (TextView) findViewById(R.id.logTV);
-
-        /// Load of saved instance state
-        if(savedInstanceState != null) {
-            String logTextSaved =  savedInstanceState.getString(LogHistoryActivity.KEY_LOG_TEXT);
-            mLogTV.setText(logTextSaved);
-        }
-
         if (mLogPath != null) {
             logDIR = new File(mLogPath);
         }
@@ -108,21 +97,15 @@ public class LogHistoryActivity extends SherlockFragmentActivity  {
             // Show a dialog while log data is being loaded
             showLoadingDialog();
 
-            // Start a new thread that will load all the log data
-            new LoadingLogTask().execute();
-        }
-    }
-
+            TextView logTV = (TextView) findViewById(R.id.logTV);
 
-    @Override
-    protected void onPause() {
-        // TODO Auto-generated method stub
-        super.onPause();
+            // Start a new thread that will load all the log data
+            LoadingLogTask task = new LoadingLogTask(logTV);
+            task.execute();
 
-        dismissLoadingDialog();
+        }
     }
 
-
     @Override
     public boolean onMenuItemSelected(int featureId, MenuItem item) {
         super.onMenuItemSelected(featureId, item);
@@ -142,7 +125,16 @@ public class LogHistoryActivity extends SherlockFragmentActivity  {
      */
     private void sendMail() {
 
-        String emailAddresses[] = { getText(R.string.mail_logger).toString() };
+        String emailAddress;
+        try {
+            Class<?> stringClass = R.string.class;
+            Field mailLoggerField = stringClass.getField("mail_logger");
+            int emailAddressId = (Integer)mailLoggerField.get(null);
+            emailAddress = getString(emailAddressId);
+            
+        } catch (Exception e) {
+            emailAddress = "";
+        }
 
         ArrayList<Uri> uris = new ArrayList<Uri>();
 
@@ -159,7 +151,7 @@ public class LogHistoryActivity extends SherlockFragmentActivity  {
 
         // Explicitly only use Gmail to send
         intent.setClassName("com.google.android.gm","com.google.android.gm.ComposeActivityGmail");
-        intent.putExtra(Intent.EXTRA_EMAIL, emailAddresses);
+        intent.putExtra(Intent.EXTRA_EMAIL, new String[]{ emailAddress });
         intent.putExtra(Intent.EXTRA_SUBJECT, getText(R.string.log_mail_subject));
         intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
         intent.setType(MAIL_ATTACHMENT_TYPE);
@@ -170,75 +162,87 @@ public class LogHistoryActivity extends SherlockFragmentActivity  {
         }
     }
 
-
-    /**
-     * Read and show log file info
-     */
-    private String readLogFile() {
-
-        String[] logFileName = Log_OC.getLogFileNames();
-
-        //Read text from files
-        StringBuilder text = new StringBuilder();
-
-        try {
-
-            String line;
-
-            for (int i = logFileName.length-1; i >= 0; i--) {
-                File file = new File(mLogPath,logFileName[i]);
-                if (file.exists()) {
-                    // Check if FileReader is ready
-                    if (new FileReader(file).ready()) {
-                        BufferedReader br = new BufferedReader(new FileReader(file));
-                        while ((line = br.readLine()) != null) {
-                            // Append the log info
-                            text.append(line);
-                            text.append('\n');
-                        }
-                    }
-                }
-            }
-        }
-        catch (IOException e) {
-            Log_OC.d(TAG, e.getMessage().toString());
-        }
-
-        return text.toString();
-    }
-
-
     /**
      *
      * Class for loading the log data async
      *
      */
     private class LoadingLogTask extends AsyncTask<String, Void, String> {
+        private final WeakReference<TextView> textViewReference;
+
+        public LoadingLogTask(TextView logTV){
+            // Use of a WeakReference to ensure the TextView can be garbage collected
+            textViewReference  = new WeakReference<TextView>(logTV);
+        }
+
         protected String doInBackground(String... args) {
             return readLogFile();
         }
 
         protected void onPostExecute(String result) {
-            mLogTV.setText(result);
+            if (textViewReference != null && result != null) {
+                final TextView logTV = textViewReference.get();
+                if (logTV != null) {
+                    logTV.setText(result);
+                    dismissLoadingDialog();
+                }
+            }
+        }
+
+        /**
+         * Read and show log file info
+         */
+        private String readLogFile() {
+
+            String[] logFileName = Log_OC.getLogFileNames();
+
+            //Read text from files
+            StringBuilder text = new StringBuilder();
+
+            BufferedReader br = null;
+            try {
+                String line;
+
+                for (int i = logFileName.length-1; i >= 0; i--) {
+                    File file = new File(mLogPath,logFileName[i]);
+                    if (file.exists()) {
+                        // Check if FileReader is ready
+                        if (new FileReader(file).ready()) {
+                            br = new BufferedReader(new FileReader(file));
+                            while ((line = br.readLine()) != null) {
+                                // Append the log info
+                                text.append(line);
+                                text.append('\n');
+                            }
+                        }
+                    }
+                }
+            }
+            catch (IOException e) {
+                Log_OC.d(TAG, e.getMessage().toString());
+                
+            } finally {
+                if (br != null) {
+                    try {
+                        br.close();
+                    } catch (IOException e) {
+                        // ignore
+                    }
+                }
+            }
 
-            dismissLoadingDialog();
+            return text.toString();
         }
    }
 
-    @Override
-    protected void onSaveInstanceState(Bundle outState) {
-        Log_OC.e(TAG, "onSaveInstanceState() start");
-        super.onSaveInstanceState(outState);
-        outState.putString(LogHistoryActivity.KEY_LOG_TEXT, mLogTV.getText().toString());
-        Log_OC.d(TAG, "onSaveInstanceState() end");
-    }
-
     /**
      * Show loading dialog
      */
     public void showLoadingDialog() {
         // Construct dialog
-        LoadingDialog loading = new LoadingDialog(getResources().getString(R.string.log_progress_dialog_text));
+        LoadingDialog loading = new LoadingDialog(
+                getResources().getString(R.string.log_progress_dialog_text)
+        );
         FragmentManager fm = getSupportFragmentManager();
         FragmentTransaction ft = fm.beginTransaction();
         loading.show(ft, DIALOG_WAIT_TAG);