/* * Copyright (C) 2012-2016 The Android Money Manager Ex Project Team * * 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 3 * 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, see <http://www.gnu.org/licenses/>. */ package com.money.manager.ex.about; import android.content.Intent; import android.net.Uri; import android.os.Bundle; import android.support.v4.app.Fragment; import android.text.Html; import android.text.TextUtils; import android.text.method.LinkMovementMethod; import android.view.LayoutInflater; import android.view.View; import android.view.View.OnClickListener; import android.view.ViewGroup; import android.widget.Button; import android.widget.ImageView; import android.widget.TextView; import android.widget.Toast; import com.github.pedrovgs.lynx.LynxActivity; import com.github.pedrovgs.lynx.LynxConfig; import com.money.manager.ex.Constants; import com.money.manager.ex.DonateActivity; import com.money.manager.ex.R; import com.money.manager.ex.common.MmxBaseFragmentActivity; import com.money.manager.ex.core.Core; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import timber.log.Timber; public class AboutFragment extends Fragment { private static Fragment mInstance; public static Fragment newInstance(int page) { if (mInstance == null) { mInstance = new AboutFragment(); } return mInstance; } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { String text, version; View view = inflater.inflate(R.layout.about_fragment, container, false); MmxBaseFragmentActivity activity = (MmxBaseFragmentActivity) getActivity(); if (activity != null && activity.getSupportActionBar() != null) { activity.getSupportActionBar().setDisplayHomeAsUpEnabled(true); } // Version application TextView txtVersion = (TextView) view.findViewById(R.id.textViewVersion); Core core = new Core(getActivity()); version = core.getAppVersionName(); // build = core.getAppVersionBuild(); txtVersion.setText(getString(R.string.version) + " " + version); // + " (" + getString(R.string.build) + " " + build + ")" // Send Feedback TextView txtFeedback = (TextView) view.findViewById(R.id.textViewLinkFeedback); text = "<u>" + txtFeedback.getText() + "</u>"; txtFeedback.setText(Html.fromHtml(text)); txtFeedback.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { Intent intent = new Intent(Intent.ACTION_SEND); intent.setType("message/rfc822"); intent.putExtra(Intent.EXTRA_EMAIL, new String[]{ Constants.EMAIL }); intent.putExtra(Intent.EXTRA_SUBJECT, "MoneyManagerEx for Android: Feedback"); try { startActivity(Intent.createChooser(intent, "Send mail...")); } catch (Exception e) { Toast.makeText(getActivity(), e.getMessage(), Toast.LENGTH_SHORT).show(); } } }); // rate application TextView txtRate = (TextView) view.findViewById(R.id.textViewLinkRate); text = "<u>" + txtRate.getText() + "</u>"; txtRate.setText(Html.fromHtml(text)); txtRate.setMovementMethod(LinkMovementMethod.getInstance()); OnClickListenerUrl clickListenerRate = new OnClickListenerUrl(); clickListenerRate.setUrl("http://play.google.com/store/apps/details?id=com.money.manager.ex"); txtRate.setOnClickListener(clickListenerRate); // application issue tracker TextView txtIssues = (TextView) view.findViewById(R.id.textViewIssuesTracker); text = "<u>" + txtIssues.getText() + "</u>"; txtIssues.setText(Html.fromHtml(text)); txtIssues.setMovementMethod(LinkMovementMethod.getInstance()); OnClickListenerUrl clickListenerIssuesTracker = new OnClickListenerUrl(); clickListenerIssuesTracker.setUrl("https://github.com/moneymanagerex/android-money-manager-ex/issues/"); txtIssues.setOnClickListener(clickListenerIssuesTracker); // MMEX for Android web page TextView txtWebsite = (TextView) view.findViewById(R.id.textViewWebSite); text = "<u>" + txtWebsite.getText() + "</u>"; txtWebsite.setText(Html.fromHtml(text)); txtWebsite.setMovementMethod(LinkMovementMethod.getInstance()); OnClickListenerUrl clickListenerWebsite = new OnClickListenerUrl(); clickListenerWebsite.setUrl("http://android.moneymanagerex.org/"); txtWebsite.setOnClickListener(clickListenerWebsite); // report set link TextView txtReport = (TextView) view.findViewById(R.id.textViewLinkWebSite); text = "<u>" + txtReport.getText() + "</u>"; txtReport.setText(Html.fromHtml(text)); txtReport.setMovementMethod(LinkMovementMethod.getInstance()); OnClickListenerUrl clickListenerFeedback = new OnClickListenerUrl(); clickListenerFeedback.setUrl("http://www.moneymanagerex.org/?utm_campaign=Application_Android&utm_medium=MMEX_" + version + "&utm_source=Website"); txtReport.setOnClickListener(clickListenerFeedback); // image view google plus OnClickListenerUrl clickListenerGooglePlus = new OnClickListenerUrl(); clickListenerGooglePlus.setUrl("http://goo.gl/R693Ih"); ImageView imageViewGooglePlus = (ImageView) view.findViewById(R.id.imageViewGooglePlus); imageViewGooglePlus.setOnClickListener(clickListenerGooglePlus); // image view github OnClickListenerUrl clickListenerGithub = new OnClickListenerUrl(); clickListenerGithub.setUrl("https://github.com/moneymanagerex/android-money-manager-ex"); ImageView imageViewGithub = (ImageView) view.findViewById(R.id.imageViewGithub); imageViewGithub.setOnClickListener(clickListenerGithub); // image view twitter OnClickListenerUrl clickListenerTwitter = new OnClickListenerUrl(); clickListenerTwitter.setUrl("https://twitter.com/MMEX4Android"); ImageView imageViewTwitter = (ImageView) view.findViewById(R.id.imageViewTwitter); imageViewTwitter.setOnClickListener(clickListenerTwitter); // GPLv2 license TextView txtLicense = (TextView) view.findViewById(R.id.textViewLicense); text = "<u>" + txtLicense.getText() + "</u>"; txtLicense.setText(Html.fromHtml(text)); OnClickListenerUrl clickListenerLicense = new OnClickListenerUrl(); clickListenerLicense.setUrl("http://www.gnu.org/licenses/old-licenses/gpl-2.0.html"); txtLicense.setOnClickListener(clickListenerLicense); // logcat TextView txtLogcat = (TextView) view.findViewById(R.id.textViewLogcat); text = "<u>" + txtLogcat.getText() + "</u>"; txtLogcat.setText(Html.fromHtml(text)); txtLogcat.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { LynxConfig lynxConfig = new LynxConfig(); lynxConfig.setMaxNumberOfTracesToShow(4000); Intent lynxActivityIntent = LynxActivity.getIntent(getActivity(), lynxConfig); startActivity(lynxActivityIntent); } }); // Donate, button Button buttonDonate = (Button) view.findViewById(R.id.buttonDonateInApp); buttonDonate.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { startActivity(new Intent(getActivity(), DonateActivity.class)); } }); // Send logcat button Button sendLogcatButton = (Button) view.findViewById(R.id.sendLogcatButton); sendLogcatButton.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { sendLogcat(); } }); return view; } // implement a class to manage the opening of several url private class OnClickListenerUrl implements OnClickListener { private String mUrl; @Override public void onClick(View v) { if (TextUtils.isEmpty(getUrl())) return; try { Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(getUrl())); startActivity(intent); } catch (Exception e) { Toast.makeText(getActivity(), e.getMessage(), Toast.LENGTH_LONG).show(); } } public String getUrl() { return mUrl; } public void setUrl(String mUrl) { this.mUrl = mUrl; } } private void sendLogcat() { String logcat = ""; logcat = getLogcat(); //send file using email Intent emailIntent = new Intent(Intent.ACTION_SEND); emailIntent.setType("plain/text"); emailIntent.putExtra(Intent.EXTRA_EMAIL, new String[]{Constants.EMAIL}); // the attachment // emailIntent .putExtra(Intent.EXTRA_STREAM, outputFile.getAbsolutePath()); emailIntent.putExtra(Intent.EXTRA_TEXT, logcat); // the mail subject emailIntent .putExtra(Intent.EXTRA_SUBJECT, "Subject"); try { startActivity(Intent.createChooser(emailIntent, "Send email...")); } catch (Exception e) { Timber.e(e, "opening email with logcat"); } } /** * * @return * References * http://developer.android.com/tools/debugging/debugging-log.html */ private String getLogcat() { // File outputFile = new File(Environment.getDefaultDatabaseDirectory(), "logcat.txt"); Process p = null; try { // Runtime.getRuntime().exec( // "logcat -f " + outputFile.getAbsolutePath()); p = Runtime.getRuntime().exec("logcat -d"); } catch (IOException e) { Timber.e(e, "executing logcat"); } if (p == null) return ""; // Read text from the command output. BufferedReader in = new BufferedReader(new InputStreamReader(p.getInputStream()) ); StringBuilder output = new StringBuilder(); String line; try { while ((line = in.readLine()) != null) { output.append(line); output.append(System.getProperty("line.separator")); } in.close(); } catch (IOException e) { Timber.e(e, "reading stdout"); } return output.toString(); } /** * ProcessBuilder may be used to redirect stdout for a process. Need to try it out. */ private void useProcessBuilder() { ProcessBuilder pb = new ProcessBuilder("logcat -d"); } }