1 /* ownCloud Android client application
2 * Copyright (C) 2012-2013 ownCloud Inc.
4 * This program is free software: you can redistribute it and/or modify
5 * it under the terms of the GNU General Public License version 2,
6 * as published by the Free Software Foundation.
8 * This program is distributed in the hope that it will be useful,
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 * GNU General Public License for more details.
13 * You should have received a copy of the GNU General Public License
14 * along with this program. If not, see <http://www.gnu.org/licenses/>.
18 package com
.owncloud
.android
.ui
.activity
;
20 import java
.io
.BufferedReader
;
22 import java
.io
.FileReader
;
23 import java
.io
.IOException
;
24 import java
.lang
.ref
.WeakReference
;
25 import java
.util
.ArrayList
;
27 import android
.content
.Intent
;
28 import android
.net
.Uri
;
29 import android
.os
.AsyncTask
;
30 import android
.os
.Bundle
;
31 import android
.support
.v4
.app
.Fragment
;
32 import android
.support
.v4
.app
.FragmentManager
;
33 import android
.support
.v4
.app
.FragmentTransaction
;
34 import android
.view
.View
;
35 import android
.view
.View
.OnClickListener
;
36 import android
.widget
.Button
;
37 import android
.widget
.TextView
;
39 import com
.actionbarsherlock
.app
.ActionBar
;
40 import com
.actionbarsherlock
.app
.SherlockFragmentActivity
;
41 import com
.actionbarsherlock
.view
.MenuItem
;
42 import com
.owncloud
.android
.R
;
43 import com
.owncloud
.android
.lib
.common
.utils
.Log_OC
;
44 import com
.owncloud
.android
.ui
.dialog
.LoadingDialog
;
45 import com
.owncloud
.android
.utils
.DisplayUtils
;
46 import com
.owncloud
.android
.utils
.FileStorageUtils
;
49 public class LogHistoryActivity
extends SherlockFragmentActivity
{
51 private static final String MAIL_ATTACHMENT_TYPE
= "text/plain";
53 private static final String TAG
= LogHistoryActivity
.class.getSimpleName();
55 private static final String DIALOG_WAIT_TAG
= "DIALOG_WAIT";
57 private String mLogPath
= FileStorageUtils
.getLogPath();
58 private File logDIR
= null
;
62 protected void onCreate(Bundle savedInstanceState
) {
63 super.onCreate(savedInstanceState
);
65 setContentView(R
.layout
.log_send_file
);
66 setTitle(getText(R
.string
.actionbar_logger
));
67 ActionBar actionBar
= getSherlock().getActionBar();
68 actionBar
.setIcon(DisplayUtils
.getSeasonalIconId());
69 actionBar
.setDisplayHomeAsUpEnabled(true
);
70 Button deleteHistoryButton
= (Button
) findViewById(R
.id
.deleteLogHistoryButton
);
71 Button sendHistoryButton
= (Button
) findViewById(R
.id
.sendLogHistoryButton
);
73 deleteHistoryButton
.setOnClickListener(new OnClickListener() {
76 public void onClick(View v
) {
78 Log_OC
.deleteHistoryLogging();
83 sendHistoryButton
.setOnClickListener(new OnClickListener() {
86 public void onClick(View v
) {
91 if (mLogPath
!= null
) {
92 logDIR
= new File(mLogPath
);
95 if (logDIR
!= null
&& logDIR
.isDirectory()) {
96 // Show a dialog while log data is being loaded
99 TextView logTV
= (TextView
) findViewById(R
.id
.logTV
);
101 // Start a new thread that will load all the log data
102 LoadingLogTask task
= new LoadingLogTask(logTV
);
109 public boolean onMenuItemSelected(int featureId
, MenuItem item
) {
110 super.onMenuItemSelected(featureId
, item
);
111 switch (item
.getItemId()) {
112 case android
.R
.id
.home
:
123 * Start activity for sending email with logs attached
125 private void sendMail() {
127 String emailAddress
= getString(R
.string
.mail_logger
);
129 ArrayList
<Uri
> uris
= new ArrayList
<Uri
>();
131 // Convert from paths to Android friendly Parcelable Uri's
132 for (String file
: Log_OC
.getLogFileNames())
134 File logFile
= new File(mLogPath
, file
);
135 if (logFile
.exists()) {
136 uris
.add(Uri
.fromFile(logFile
));
140 Intent intent
= new Intent(Intent
.ACTION_SEND_MULTIPLE
);
142 intent
.putExtra(Intent
.EXTRA_EMAIL
, emailAddress
);
143 intent
.putExtra(Intent
.EXTRA_SUBJECT
, getText(R
.string
.log_mail_subject
));
144 intent
.setFlags(Intent
.FLAG_ACTIVITY_NEW_TASK
);
145 intent
.setType(MAIL_ATTACHMENT_TYPE
);
146 intent
.putParcelableArrayListExtra(Intent
.EXTRA_STREAM
, uris
);
148 startActivity(Intent
.createChooser(intent
, getString(R
.string
.log_send_chooser_title
)));
153 * Class for loading the log data async
156 private class LoadingLogTask
extends AsyncTask
<String
, Void
, String
> {
157 private final WeakReference
<TextView
> textViewReference
;
159 public LoadingLogTask(TextView logTV
){
160 // Use of a WeakReference to ensure the TextView can be garbage collected
161 textViewReference
= new WeakReference
<TextView
>(logTV
);
164 protected String
doInBackground(String
... args
) {
165 return readLogFile();
168 protected void onPostExecute(String result
) {
169 if (textViewReference
!= null
&& result
!= null
) {
170 final TextView logTV
= textViewReference
.get();
172 logTV
.setText(result
);
173 dismissLoadingDialog();
179 * Read and show log file info
181 private String
readLogFile() {
183 String
[] logFileName
= Log_OC
.getLogFileNames();
185 //Read text from files
186 StringBuilder text
= new StringBuilder();
188 BufferedReader br
= null
;
192 for (int i
= logFileName
.length
-1; i
>= 0; i
--) {
193 File file
= new File(mLogPath
,logFileName
[i
]);
195 // Check if FileReader is ready
196 if (new FileReader(file
).ready()) {
197 br
= new BufferedReader(new FileReader(file
));
198 while ((line
= br
.readLine()) != null
) {
199 // Append the log info
207 catch (IOException e
) {
208 Log_OC
.d(TAG
, e
.getMessage().toString());
214 } catch (IOException e
) {
220 return text
.toString();
225 * Show loading dialog
227 public void showLoadingDialog() {
229 LoadingDialog loading
= new LoadingDialog(
230 getResources().getString(R
.string
.log_progress_dialog_text
)
232 FragmentManager fm
= getSupportFragmentManager();
233 FragmentTransaction ft
= fm
.beginTransaction();
234 loading
.show(ft
, DIALOG_WAIT_TAG
);
238 * Dismiss loading dialog
240 public void dismissLoadingDialog(){
241 Fragment frag
= getSupportFragmentManager().findFragmentByTag(DIALOG_WAIT_TAG
);
243 LoadingDialog loading
= (LoadingDialog
) frag
;