mirror of
https://gitlab.linphone.org/BC/public/linphone-android.git
synced 2026-01-17 11:28:06 +00:00
190 lines
5.7 KiB
Java
190 lines
5.7 KiB
Java
package org.linphone;
|
|
/*
|
|
AboutFragment.java
|
|
Copyright (C) 2012 Belledonne Communications, Grenoble, France
|
|
|
|
This program is free software; you can redistribute it and/or
|
|
modify it under the terms of the GNU General Public License
|
|
as published by the Free Software Foundation; either version 2
|
|
of the License, or (at your option) any later version.
|
|
|
|
This program is distributed in the hope that it will be useful,
|
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
GNU General Public License for more details.
|
|
|
|
You should have received a copy of the GNU General Public License
|
|
along with this program; if not, write to the Free Software
|
|
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
|
*/
|
|
|
|
import java.io.BufferedReader;
|
|
import java.io.File;
|
|
import java.io.FileWriter;
|
|
import java.io.IOException;
|
|
import java.io.InputStreamReader;
|
|
|
|
import org.linphone.core.Log;
|
|
|
|
import android.content.Intent;
|
|
import android.content.SharedPreferences;
|
|
import android.content.pm.PackageManager.NameNotFoundException;
|
|
import android.net.Uri;
|
|
import android.os.Bundle;
|
|
import android.os.Handler;
|
|
import android.preference.PreferenceManager;
|
|
import android.support.v4.app.Fragment;
|
|
import android.view.LayoutInflater;
|
|
import android.view.View;
|
|
import android.view.View.OnClickListener;
|
|
import android.view.ViewGroup;
|
|
import android.widget.TextView;
|
|
import android.widget.Toast;
|
|
|
|
/**
|
|
* @author Sylvain Berfini
|
|
*/
|
|
public class AboutFragment extends Fragment implements OnClickListener {
|
|
private Handler mHandler = new Handler();
|
|
private FragmentsAvailable about = FragmentsAvailable.ABOUT_INSTEAD_OF_CHAT;
|
|
@Override
|
|
public View onCreateView(LayoutInflater inflater, ViewGroup container,
|
|
Bundle savedInstanceState) {
|
|
if (getArguments() != null && getArguments().getSerializable("About") != null) {
|
|
about = (FragmentsAvailable) getArguments().getSerializable("About");
|
|
}
|
|
|
|
View view = inflater.inflate(R.layout.about, container, false);
|
|
|
|
TextView aboutText = (TextView) view.findViewById(R.id.AboutText);
|
|
try {
|
|
aboutText.setText(String.format(getString(R.string.about_text), getActivity().getPackageManager().getPackageInfo(getActivity().getPackageName(), 0).versionName));
|
|
} catch (NameNotFoundException e) {
|
|
Log.e(e, "cannot get version name");
|
|
}
|
|
|
|
SharedPreferences pref = PreferenceManager.getDefaultSharedPreferences(getActivity());
|
|
if (pref.getBoolean(getString(R.string.pref_debug_key), false)) {
|
|
View issue = view.findViewById(R.id.about_report_issue);
|
|
issue.setOnClickListener(this);
|
|
issue.setVisibility(View.VISIBLE);
|
|
}
|
|
return view;
|
|
}
|
|
|
|
@Override
|
|
public void onResume() {
|
|
super.onResume();
|
|
|
|
if (LinphoneActivity.isInstanciated()) {
|
|
LinphoneActivity.instance().selectMenu(about);
|
|
}
|
|
}
|
|
|
|
private Thread thread;
|
|
@Override
|
|
public void onClick(View v) {
|
|
if (thread != null) return;
|
|
Toast.makeText(getActivity(), getString(R.string.about_reading_logs), Toast.LENGTH_LONG).show();
|
|
thread = new ReadLogThread();
|
|
thread.start();
|
|
}
|
|
|
|
private File writeLogs(String logs, File directory) {
|
|
File tempFile = null;
|
|
try {
|
|
tempFile = File.createTempFile("bugreport", ".txt", directory);
|
|
tempFile.deleteOnExit();
|
|
FileWriter writer = new FileWriter(tempFile);
|
|
writer.append(logs);
|
|
writer.close();
|
|
return tempFile;
|
|
} catch (IOException e) {
|
|
Toast.makeText(getActivity(), getString(R.string.about_error_generating_bugreport_attachement), Toast.LENGTH_LONG).show();
|
|
Log.e(e, "couldn't write to temporary file");
|
|
return null;
|
|
}
|
|
}
|
|
|
|
private void onLogsRead(String logs) {
|
|
if (logs == null) {
|
|
Toast.makeText(getActivity(), getString(R.string.about_logs_not_found), Toast.LENGTH_SHORT).show();
|
|
} else {
|
|
File tempFile = writeLogs(logs, null);
|
|
if (tempFile == null) {
|
|
// If writing to temporary file to default location failed
|
|
// Write one to our storage place
|
|
tempFile = writeLogs(logs, getActivity().getFilesDir());
|
|
}
|
|
|
|
Intent intent = new Intent(Intent.ACTION_SEND);
|
|
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
|
|
intent.setType("plain/text");
|
|
intent.putExtra(Intent.EXTRA_EMAIL, new String[]{getString(R.string.about_bugreport_email)});
|
|
intent.putExtra(Intent.EXTRA_SUBJECT,"Bug report " + getString(R.string.app_name) + "-android");
|
|
intent.putExtra(Intent.EXTRA_TEXT, getString(R.string.about_bugreport_email_text));
|
|
intent.putExtra(Intent.EXTRA_STREAM, Uri.fromFile(tempFile));
|
|
intent = Intent.createChooser(intent,getString(R.string.about_mailer_chooser_text));
|
|
startActivityForResult(intent, 0);
|
|
}
|
|
}
|
|
|
|
|
|
private class ReadLogThread extends Thread {
|
|
@Override
|
|
public void run() {
|
|
final String logs = readLogs();
|
|
mHandler.post(new Runnable() {
|
|
@Override
|
|
public void run() {
|
|
onLogsRead(logs);
|
|
thread=null;
|
|
}
|
|
});
|
|
super.run();
|
|
}
|
|
}
|
|
|
|
private String readLogs() {
|
|
StringBuilder sb1 = null;
|
|
StringBuilder sb2 = null;
|
|
BufferedReader br = null;
|
|
Process p = null;
|
|
|
|
try {
|
|
p = Runtime.getRuntime().exec(new String[] {"logcat", "-d"});
|
|
br = new BufferedReader(new InputStreamReader(p.getInputStream()), 1024);
|
|
|
|
String line;
|
|
while ((line = br.readLine()) != null) {
|
|
if (line.contains(LinphoneService.START_LINPHONE_LOGS)) {
|
|
if (sb1 != null) {
|
|
sb2 = sb1;
|
|
}
|
|
sb1 = new StringBuilder();
|
|
}
|
|
if (sb1 != null) {
|
|
sb1.append(line).append('\n');
|
|
}
|
|
}
|
|
|
|
if (sb1 == null) return null;
|
|
if (sb2 != null) {
|
|
sb1.append(sb2);
|
|
}
|
|
return sb1.toString();
|
|
} catch (IOException e) {
|
|
Log.e(e, "Error while reading logs");
|
|
return null;
|
|
} finally {
|
|
if (br != null) {
|
|
try {
|
|
br.close();
|
|
} catch (IOException e) {}
|
|
}
|
|
if (p != null) {
|
|
p.destroy();
|
|
}
|
|
}
|
|
}
|
|
}
|