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.

This commit is contained in:
jabarros 2014-09-04 09:06:14 +02:00
parent e073ef1489
commit 2ada53c99b
8 changed files with 184 additions and 76 deletions

View file

@ -1,35 +1,43 @@
<?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" >
<ScrollView
android:id="@+id/scrollView1"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_marginBottom="15dp"
android:layout_weight="1" >
<ListView android:id="@android:id/list"
android:layout_width="match_parent"
android:layout_height="wrap_content"
/>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical" >
<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">
<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="wrap_content"
android:text="@string/prefs_log_delete_history_button"/>
<Button
android:id="@+id/deleteLogHistoryButton"
android:layout_width="match_parent"
android:layout_height="50dp"
android:text="@string/prefs_log_delete_history_button" />
</LinearLayout>
<Button
android:id="@+id/sendLogHistoryButton"
android:layout_width="match_parent"
android:layout_height="50dp"
android:text="@string/prefs_log_send_history_button" />
</LinearLayout>
</LinearLayout>

View file

@ -43,6 +43,12 @@
android:orderInCategory="2"
android:showAsAction="never"
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> -->

View file

@ -49,6 +49,8 @@
<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="mail_logger">jabarros@solidgear.es</string>
</resources>

View file

@ -286,4 +286,8 @@
<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="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>

View file

@ -16,11 +16,15 @@
*/
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.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
*
@ -54,6 +58,12 @@ public class MainApp extends Application {
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() {

View file

@ -61,6 +61,7 @@ import com.actionbarsherlock.view.Menu;
import com.actionbarsherlock.view.MenuInflater;
import com.actionbarsherlock.view.MenuItem;
import com.actionbarsherlock.view.Window;
import com.owncloud.android.BuildConfig;
import com.owncloud.android.MainApp;
import com.owncloud.android.R;
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
public boolean onCreateOptionsMenu(Menu menu) {
MenuInflater inflater = getSherlock().getMenuInflater();
@ -475,6 +486,11 @@ FileFragment.ContainerActivity, OnNavigationListener, OnSslUntrustedCertListener
startActivity(settingsIntent);
break;
}
case R.id.action_logger: {
Intent loggerIntent = new Intent(getApplicationContext(),LogHistoryActivity.class);
startActivity(loggerIntent);
break;
}
case android.R.id.home: {
FileFragment second = getSecondFragment();
OCFile currentDir = getCurrentDir();

View file

@ -17,50 +17,54 @@
package com.owncloud.android.ui.activity;
import java.io.BufferedReader;
import java.io.File;
import java.util.ArrayList;
import java.io.FileReader;
import java.io.IOException;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.preference.Preference;
import android.preference.Preference.OnPreferenceChangeListener;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.ListView;
import android.widget.TextView;
import com.actionbarsherlock.app.ActionBar;
import com.actionbarsherlock.app.SherlockPreferenceActivity;
import com.actionbarsherlock.app.SherlockActivity;
import com.actionbarsherlock.view.MenuItem;
import com.owncloud.android.R;
import com.owncloud.android.ui.adapter.LogListAdapter;
import com.owncloud.android.utils.DisplayUtils;
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;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.log_send_file);
setTitle("Log History");
setTitle(getText(R.string.actionbar_logger));
ActionBar actionBar = getSherlock().getActionBar();
actionBar.setIcon(DisplayUtils.getSeasonalIconId());
actionBar.setDisplayHomeAsUpEnabled(true);
ListView listView = (ListView) findViewById(android.R.id.list);
Button deleteHistoryButton = (Button) findViewById(R.id.deleteLogHistoryButton);
Button sendHistoryButton = (Button) findViewById(R.id.sendLogHistoryButton);
deleteHistoryButton.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
File dir = new File(logpath);
File dir = new File(mLogPath);
if (dir != null) {
File[] files = dir.listFiles();
if(files!=null) {
@ -70,30 +74,41 @@ public class LogHistoryActivity extends SherlockPreferenceActivity implements On
}
dir.delete();
}
Intent intent = new Intent(getBaseContext(), Preferences.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent);
finish();
}
});
if(logpath != null){
logDIR = new File(logpath);
sendHistoryButton.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
sendMail();
}
});
if(mLogPath != null){
logDIR = new File(mLogPath);
}
if(logDIR != null && logDIR.isDirectory()) {
File[] files = logDIR.listFiles();
// 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();
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);
}
}
}
@ -101,22 +116,69 @@ public class LogHistoryActivity extends SherlockPreferenceActivity implements On
@Override
public boolean onMenuItemSelected(int featureId, MenuItem item) {
super.onMenuItemSelected(featureId, item);
Intent intent;
switch (item.getItemId()) {
case android.R.id.home:
intent = new Intent(getBaseContext(), Preferences.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent);
finish();
break;
default:
return false;
}
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);
}
}

View file

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