Browse Source

Enable log into text file automatically when BuildConfig.DEBUG is true. Open log activity when user clicks on action bar menu option. Add button to send email with log file attached.

jabarros 11 years ago
parent
commit
2ada53c99b

+ 40 - 32
res/layout/log_send_file.xml

@@ -1,35 +1,43 @@
 <?xml version="1.0" encoding="utf-8"?>
 <?xml version="1.0" encoding="utf-8"?>
- <LinearLayout 
-      	 xmlns:android="http://schemas.android.com/apk/res/android"
-         android:orientation="vertical"
-         android:layout_width="match_parent"
-         android:layout_height="match_parent"
-         android:paddingLeft="8dp"
-         android:paddingRight="8dp">
-      
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent"
+    android:orientation="vertical"
+    android:padding="10dp"
+    android:paddingLeft="8dp"
+    android:paddingRight="8dp"
+    android:weightSum="1" >
 
 
-     <ListView 	android:id="@android:id/list"
-               	android:layout_width="match_parent"
-               	android:layout_height="wrap_content"
-               />
+    <ScrollView
+        android:id="@+id/scrollView1"
+        android:layout_width="match_parent"
+        android:layout_height="0dp"
+        android:layout_marginBottom="15dp"
+        android:layout_weight="1" >
 
 
-     <TextView 	android:id="@android:id/empty"
-               	android:layout_width="match_parent"
-               	android:layout_height="wrap_content"
-               	android:background="#FF0000"
-               	android:text="No data"/>
-     <LinearLayout 
-         android:orientation="vertical"
-         android:layout_width="match_parent"
-         android:layout_height="wrap_content"
-         android:gravity="bottom">
-        
-     <Button
-            	android:id="@+id/deleteLogHistoryButton"
-         		android:layout_width="match_parent"
-     		   	android:layout_height="wrap_content"
-     		   	android:text="@string/prefs_log_delete_history_button"/>
-     
-     </LinearLayout>
-     
- </LinearLayout>
+        <LinearLayout
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:orientation="vertical" >
+
+            <TextView
+                android:id="@+id/logTV"
+                android:layout_width="match_parent"
+                android:layout_height="match_parent"
+                android:text="@string/empty" />
+        </LinearLayout>
+    </ScrollView>
+
+    <Button
+        android:id="@+id/deleteLogHistoryButton"
+        android:layout_width="match_parent"
+        android:layout_height="50dp"
+        android:text="@string/prefs_log_delete_history_button" />
+
+    <Button
+        android:id="@+id/sendLogHistoryButton"
+        android:layout_width="match_parent"
+       android:layout_height="50dp"
+        android:text="@string/prefs_log_send_history_button" />
+
+</LinearLayout>

+ 6 - 0
res/menu/main_menu.xml

@@ -43,6 +43,12 @@
         android:orderInCategory="2"
         android:orderInCategory="2"
         android:showAsAction="never"
         android:showAsAction="never"
         android:title="@string/actionbar_settings"/>
         android:title="@string/actionbar_settings"/>
+    <item
+        android:id="@+id/action_logger"
+        android:icon="@drawable/ic_action_settings"
+        android:orderInCategory="2"
+        android:showAsAction="never"
+        android:title="@string/actionbar_logger"/>
 
 
     <!-- <item android:id="@+id/search" android:title="@string/actionbar_search" android:icon="@drawable/ic_action_search"></item> -->
     <!-- <item android:id="@+id/search" android:title="@string/actionbar_search" android:icon="@drawable/ic_action_search"></item> -->
 
 

+ 2 - 0
res/values/setup.xml

@@ -49,6 +49,8 @@
     <string name="mail_feedback">"mailto:apps@owncloud.com"</string>
     <string name="mail_feedback">"mailto:apps@owncloud.com"</string>
     <string name="url_app_download">"https://play.google.com/store/apps/details?id=com.owncloud.android"</string>
     <string name="url_app_download">"https://play.google.com/store/apps/details?id=com.owncloud.android"</string>
 
 
+    <string name="mail_logger">jabarros@solidgear.es</string>
+
 </resources>
 </resources>
 
 
 
 

+ 4 - 0
res/values/strings.xml

@@ -286,4 +286,8 @@
 	<string name="prefs_add_account">Add account</string>
 	<string name="prefs_add_account">Add account</string>
 	<string name="auth_redirect_non_secure_connection_title">Secure connection is redirected through an unsecured route.</string>
 	<string name="auth_redirect_non_secure_connection_title">Secure connection is redirected through an unsecured route.</string>
 
 
+	<string name="actionbar_logger">Logs</string>
+	<string name="prefs_log_send_history_button">Send History</string>
+	<string name="log_mail_subject">Owncloud Android app logs</string>
+
 </resources>
 </resources>

+ 12 - 2
src/com/owncloud/android/MainApp.java

@@ -16,11 +16,15 @@
  */
  */
 package com.owncloud.android;
 package com.owncloud.android;
 
 
-import com.owncloud.android.lib.common.OwnCloudClientManagerFactory;
-import com.owncloud.android.lib.common.OwnCloudClientManagerFactory.Policy;
+import java.io.File;
 
 
 import android.app.Application;
 import android.app.Application;
 import android.content.Context;
 import android.content.Context;
+import android.os.Environment;
+
+import com.owncloud.android.lib.common.OwnCloudClientManagerFactory;
+import com.owncloud.android.lib.common.OwnCloudClientManagerFactory.Policy;
+import com.owncloud.android.utils.Log_OC;
 /**
 /**
  * Main Application of the project
  * Main Application of the project
  * 
  * 
@@ -54,6 +58,12 @@ public class MainApp extends Application {
             OwnCloudClientManagerFactory.setDefaultPolicy(Policy.ALWAYS_NEW_CLIENT);
             OwnCloudClientManagerFactory.setDefaultPolicy(Policy.ALWAYS_NEW_CLIENT);
         }
         }
         
         
+        if (BuildConfig.DEBUG) {
+            String logpath = Environment.getExternalStorageDirectory()+File.separator+"owncloud"+File.separator+"log";
+            Log_OC.d("Debug", "start logging");
+            Log_OC.v("PATH", logpath);
+            Log_OC.startLogging(logpath);
+        }
     }
     }
 
 
     public static Context getAppContext() {
     public static Context getAppContext() {

+ 16 - 0
src/com/owncloud/android/ui/activity/FileDisplayActivity.java

@@ -61,6 +61,7 @@ import com.actionbarsherlock.view.Menu;
 import com.actionbarsherlock.view.MenuInflater;
 import com.actionbarsherlock.view.MenuInflater;
 import com.actionbarsherlock.view.MenuItem;
 import com.actionbarsherlock.view.MenuItem;
 import com.actionbarsherlock.view.Window;
 import com.actionbarsherlock.view.Window;
+import com.owncloud.android.BuildConfig;
 import com.owncloud.android.MainApp;
 import com.owncloud.android.MainApp;
 import com.owncloud.android.R;
 import com.owncloud.android.R;
 import com.owncloud.android.datamodel.OCFile;
 import com.owncloud.android.datamodel.OCFile;
@@ -445,6 +446,16 @@ FileFragment.ContainerActivity, OnNavigationListener, OnSslUntrustedCertListener
         }
         }
     }
     }
 
 
+    @Override
+    public boolean onPrepareOptionsMenu(Menu menu) {
+        if (BuildConfig.DEBUG) {
+            menu.findItem(R.id.action_logger).setVisible(true);
+        } else {
+            menu.findItem(R.id.action_logger).setVisible(false);
+        }
+        return super.onPrepareOptionsMenu(menu);
+    }
+
     @Override
     @Override
     public boolean onCreateOptionsMenu(Menu menu) {
     public boolean onCreateOptionsMenu(Menu menu) {
         MenuInflater inflater = getSherlock().getMenuInflater();
         MenuInflater inflater = getSherlock().getMenuInflater();
@@ -475,6 +486,11 @@ FileFragment.ContainerActivity, OnNavigationListener, OnSslUntrustedCertListener
             startActivity(settingsIntent);
             startActivity(settingsIntent);
             break;
             break;
         }
         }
+        case R.id.action_logger: {
+            Intent loggerIntent = new Intent(getApplicationContext(),LogHistoryActivity.class);
+            startActivity(loggerIntent);
+            break;
+        }
         case android.R.id.home: {
         case android.R.id.home: {
             FileFragment second = getSecondFragment();
             FileFragment second = getSecondFragment();
             OCFile currentDir = getCurrentDir();
             OCFile currentDir = getCurrentDir();

+ 101 - 39
src/com/owncloud/android/ui/activity/LogHistoryActivity.java

@@ -17,50 +17,54 @@
 
 
 package com.owncloud.android.ui.activity;
 package com.owncloud.android.ui.activity;
 
 
+import java.io.BufferedReader;
 import java.io.File;
 import java.io.File;
-import java.util.ArrayList;
+import java.io.FileReader;
+import java.io.IOException;
 
 
 import android.content.Intent;
 import android.content.Intent;
+import android.net.Uri;
 import android.os.Bundle;
 import android.os.Bundle;
-import android.preference.Preference;
-import android.preference.Preference.OnPreferenceChangeListener;
+
 import android.view.View;
 import android.view.View;
 import android.view.View.OnClickListener;
 import android.view.View.OnClickListener;
 import android.widget.Button;
 import android.widget.Button;
-import android.widget.ListView;
+import android.widget.TextView;
 
 
 import com.actionbarsherlock.app.ActionBar;
 import com.actionbarsherlock.app.ActionBar;
-import com.actionbarsherlock.app.SherlockPreferenceActivity;
+import com.actionbarsherlock.app.SherlockActivity;
 import com.actionbarsherlock.view.MenuItem;
 import com.actionbarsherlock.view.MenuItem;
 import com.owncloud.android.R;
 import com.owncloud.android.R;
-import com.owncloud.android.ui.adapter.LogListAdapter;
 import com.owncloud.android.utils.DisplayUtils;
 import com.owncloud.android.utils.DisplayUtils;
 import com.owncloud.android.utils.FileStorageUtils;
 import com.owncloud.android.utils.FileStorageUtils;
 
 
 
 
+public class LogHistoryActivity extends SherlockActivity {
+    String mLogPath = FileStorageUtils.getLogPath();
 
 
+    private static final String MAIL_ATTACHMENT_TYPE = "plain/text";
+    private static final String LOGGER_FILE_NAME = "log.txt";
 
 
-public class LogHistoryActivity extends SherlockPreferenceActivity implements OnPreferenceChangeListener {
-    String logpath = FileStorageUtils.getLogPath();
     File logDIR = null;
     File logDIR = null;
-    
+
+
     @Override
     @Override
     protected void onCreate(Bundle savedInstanceState) {
     protected void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
         super.onCreate(savedInstanceState);
-        
+
         setContentView(R.layout.log_send_file);
         setContentView(R.layout.log_send_file);
-        setTitle("Log History");
+        setTitle(getText(R.string.actionbar_logger));
         ActionBar actionBar = getSherlock().getActionBar();
         ActionBar actionBar = getSherlock().getActionBar();
         actionBar.setIcon(DisplayUtils.getSeasonalIconId());
         actionBar.setIcon(DisplayUtils.getSeasonalIconId());
         actionBar.setDisplayHomeAsUpEnabled(true);
         actionBar.setDisplayHomeAsUpEnabled(true);
-        ListView listView = (ListView) findViewById(android.R.id.list);
         Button deleteHistoryButton = (Button) findViewById(R.id.deleteLogHistoryButton);
         Button deleteHistoryButton = (Button) findViewById(R.id.deleteLogHistoryButton);
-        
+        Button sendHistoryButton = (Button) findViewById(R.id.sendLogHistoryButton);
+
         deleteHistoryButton.setOnClickListener(new OnClickListener() {
         deleteHistoryButton.setOnClickListener(new OnClickListener() {
             
             
             @Override
             @Override
             public void onClick(View v) {
             public void onClick(View v) {
-                File dir = new File(logpath);
+                File dir = new File(mLogPath);
                 if (dir != null) {
                 if (dir != null) {
                     File[] files = dir.listFiles();
                     File[] files = dir.listFiles();
                     if(files!=null) { 
                     if(files!=null) { 
@@ -70,30 +74,41 @@ public class LogHistoryActivity extends SherlockPreferenceActivity implements On
                     }
                     }
                     dir.delete();
                     dir.delete();
                 }
                 }
-                Intent intent = new Intent(getBaseContext(), Preferences.class);
-                intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
-                startActivity(intent);
+                finish();
             }
             }
             
             
         });
         });
+
+
+        sendHistoryButton.setOnClickListener(new OnClickListener() {
+
+            @Override
+            public void onClick(View v) {
+                sendMail();
+            }
+
+        });
         
         
        
        
-        if(logpath != null){
-        logDIR = new File(logpath);
+        if(mLogPath != null){
+        logDIR = new File(mLogPath);
         }
         }
-        
+
         if(logDIR != null && logDIR.isDirectory()) {
         if(logDIR != null && logDIR.isDirectory()) {
-            File[] files = logDIR.listFiles();
-          
-            if (files != null && files.length != 0) {
-                ArrayList<String> logfiles_name = new ArrayList<String>();
-                for (File file : files) {
-                    logfiles_name.add(file.getName());
-                }
-                    String[] logFiles2Array = logfiles_name.toArray(new String[logfiles_name.size()]);
-                    LogListAdapter listadapter = new LogListAdapter(this,logFiles2Array);
-                    listView.setAdapter(listadapter);
-            }
+//            File[] files = logDIR.listFiles();
+//
+//            if (files != null && files.length != 0) {
+//                ArrayList<String> logfiles_name = new ArrayList<String>();
+//                for (File file : files) {
+//                    logfiles_name.add(file.getName());
+//                }
+//                    String[] logFiles2Array = logfiles_name.toArray(new String[logfiles_name.size()]);
+//                    LogListAdapter listadapter = new LogListAdapter(this,logFiles2Array);
+//                    listView.setAdapter(listadapter);
+//            }
+
+            readLogFile();
+
         }
         }
     }
     }
 
 
@@ -101,22 +116,69 @@ public class LogHistoryActivity extends SherlockPreferenceActivity implements On
     @Override
     @Override
     public boolean onMenuItemSelected(int featureId, MenuItem item) {
     public boolean onMenuItemSelected(int featureId, MenuItem item) {
         super.onMenuItemSelected(featureId, item);
         super.onMenuItemSelected(featureId, item);
-        Intent intent;
 
 
         switch (item.getItemId()) {
         switch (item.getItemId()) {
-       
         case android.R.id.home:
         case android.R.id.home:
-            intent = new Intent(getBaseContext(), Preferences.class);
-            intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
-            startActivity(intent);
+            finish();
             break;
             break;
         default:
         default:
             return false;
             return false;
         }
         }
         return true;
         return true;
     }
     }
-    @Override
-    public boolean onPreferenceChange(Preference arg0, Object arg1) {
-        return false;
+
+
+    /**
+     * Start activity for sending email with logs attached
+     */
+    private void sendMail() {
+
+        String emailAddresses[] = { getText(R.string.mail_logger).toString() };
+
+        Uri uri = Uri.parse("file://" + mLogPath + File.separator + LOGGER_FILE_NAME);
+        Intent intent = new Intent(Intent.ACTION_SEND);
+
+        // 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_SUBJECT, getText(R.string.log_mail_subject));
+        intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
+        intent.setType(MAIL_ATTACHMENT_TYPE);
+
+        intent.putExtra(Intent.EXTRA_STREAM, uri);
+        if (intent.resolveActivity(getPackageManager()) != null) {
+            startActivity(intent);
+        }
+    }
+
+
+    /**
+     * Read and show log file info
+     */
+    private void readLogFile() {
+
+      //Get the text file
+      File file = new File(mLogPath,LOGGER_FILE_NAME);
+
+      //Read text from file
+      StringBuilder text = new StringBuilder();
+
+      try {
+          BufferedReader br = new BufferedReader(new FileReader(file));
+          String line;
+
+          while ((line = br.readLine()) != null) {
+              text.append(line);
+              text.append('\n');
+          }
+      }
+      catch (IOException e) {
+
+      }
+
+
+      TextView logTV = (TextView) findViewById(R.id.logTV);
+      logTV.setText(text);
     }
     }
 }
 }

+ 3 - 3
src/com/owncloud/android/utils/Log_OC.java

@@ -69,9 +69,9 @@ public class Log_OC {
         if (!folder.exists()) {
         if (!folder.exists()) {
             folder.mkdirs();
             folder.mkdirs();
         }
         }
-        if (logFile.exists()) {
-            logFile.delete();
-        }
+//        if (logFile.exists()) {
+//            logFile.delete();
+//        }
         try { 
         try { 
             logFile.createNewFile();
             logFile.createNewFile();
             buf = new BufferedWriter(new FileWriter(logFile, true));
             buf = new BufferedWriter(new FileWriter(logFile, true));