Skip to content

Commit

Permalink
Convert crash report fragment to dialog
Browse files Browse the repository at this point in the history
  • Loading branch information
andreynovikov committed Mar 1, 2024
1 parent f5d366f commit e06da10
Show file tree
Hide file tree
Showing 9 changed files with 154 additions and 140 deletions.
11 changes: 3 additions & 8 deletions app/src/main/java/mobi/maptrek/MainActivity.java
Original file line number Diff line number Diff line change
Expand Up @@ -195,7 +195,7 @@
import mobi.maptrek.fragments.AmenityInformation;
import mobi.maptrek.dialogs.AmenitySetup;
import mobi.maptrek.dialogs.BaseMapDownload;
import mobi.maptrek.fragments.CrashReport;
import mobi.maptrek.dialogs.CrashReport;
import mobi.maptrek.dialogs.DataExport;
import mobi.maptrek.fragments.DataList;
import mobi.maptrek.fragments.DataSourceList;
Expand Down Expand Up @@ -1020,13 +1020,8 @@ public void onTargetDismissed(TapTargetView view, boolean userInitiated) {
HelperUtils.showError(userNotification, mViews.coordinatorLayout);

if (MapTrek.getApplication().hasPreviousRunsExceptions()) {
FragmentFactory factory = mFragmentManager.getFragmentFactory();
Fragment fragment = factory.instantiate(getClassLoader(), CrashReport.class.getName());
fragment.setEnterTransition(new Slide());
FragmentTransaction ft = mFragmentManager.beginTransaction();
ft.replace(R.id.contentPanel, fragment, "crashReport");
ft.addToBackStack("crashReport");
ft.commit();
CrashReport dialogFragment = new CrashReport();
dialogFragment.show(mFragmentManager, "crashReport");
} else if (!mBaseMapWarningShown && mapIndexViewModel.nativeIndex.getBaseMapVersion() == 0) {
BaseMapDownload dialogFragment = new BaseMapDownload();
dialogFragment.show(mFragmentManager, "baseMapDownload");
Expand Down
92 changes: 92 additions & 0 deletions app/src/main/java/mobi/maptrek/dialogs/CrashReport.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,92 @@
/*
* Copyright 2024 Andrey Novikov
*
* This program is free software: you can redistribute it and/or modify it under the
* terms of the GNU Lesser 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 Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License along with
* this program. If not, see <http://www.gnu.org/licenses/>.
*
*/

package mobi.maptrek.dialogs;

import android.app.AlertDialog;
import android.app.Dialog;
import android.content.Intent;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
import android.os.Build;
import android.os.Bundle;

import android.view.Gravity;
import android.view.Window;
import android.view.WindowManager;

import androidx.annotation.NonNull;
import androidx.fragment.app.DialogFragment;

import java.io.File;
import java.util.Locale;

import mobi.maptrek.MapTrek;
import mobi.maptrek.R;
import mobi.maptrek.databinding.DialogCrashReportBinding;
import mobi.maptrek.provider.ExportProvider;

public class CrashReport extends DialogFragment {
@NonNull
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
DialogCrashReportBinding viewBinding = DialogCrashReportBinding.inflate(getLayoutInflater());

AlertDialog.Builder dialogBuilder = new AlertDialog.Builder(getContext());
dialogBuilder.setPositiveButton(R.string.actionSend, (dialog, which) -> sendReport(viewBinding.message.getText().toString()));
dialogBuilder.setNegativeButton(R.string.cancel, (dialog, which) -> {});
dialogBuilder.setView(viewBinding.getRoot());

Dialog dialog = dialogBuilder.create();

Window window = dialog.getWindow();
assert window != null;
WindowManager.LayoutParams lp = window.getAttributes();
lp.gravity = Gravity.BOTTOM;
window.setAttributes(lp);

return dialog;
}

private void sendReport(String message) {
Intent intent = new Intent(Intent.ACTION_SEND);
intent.putExtra(Intent.EXTRA_EMAIL, new String[]{"novikov+trekarta@gmail.com"});
File file = MapTrek.getApplication().getExceptionLog();
intent.putExtra(Intent.EXTRA_STREAM, ExportProvider.getUriForFile(requireContext(), file));
intent.setType("vnd.android.cursor.dir/email");
intent.putExtra(Intent.EXTRA_SUBJECT, "Trekarta crash report");
StringBuilder text = new StringBuilder();
text.append(message);
text.append("\n\nDevice : ").append(Build.DEVICE);
text.append("\nBrand : ").append(Build.BRAND);
text.append("\nModel : ").append(Build.MODEL);
text.append("\nProduct : ").append(Build.PRODUCT);
text.append("\nLocale : ").append(Locale.getDefault());
text.append("\nBuild : ").append(Build.DISPLAY);
text.append("\nVersion : ").append(Build.VERSION.RELEASE);
try {
PackageInfo info = requireContext().getPackageManager().getPackageInfo(requireContext().getPackageName(), 0);
if (info != null) {
text.append("\nApp code : ").append(info.versionCode);
text.append("\nApp version : ").append(info.versionName);
}
} catch (PackageManager.NameNotFoundException e) {
e.printStackTrace();
}
intent.putExtra(Intent.EXTRA_TEXT, text.toString());
startActivity(Intent.createChooser(intent, getString(R.string.send_crash_report)));
}
}
112 changes: 0 additions & 112 deletions app/src/main/java/mobi/maptrek/fragments/CrashReport.java

This file was deleted.

5 changes: 5 additions & 0 deletions app/src/main/res/color/focusable_color_selector.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:color="@color/colorAccent" android:state_focused="true" />
<item android:color="@color/textColorTertiary" />
</selector>
3 changes: 2 additions & 1 deletion app/src/main/res/color/primary_text_color_selector.xml
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,8 @@
~
-->

<selector xmlns:android="http://schemas.android.com/apk/res/android" >
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_focused="true" android:color="@color/colorAccent"/>
<item android:state_enabled="false" android:color="@color/textColorPrimaryDisabled"/>
<item android:color="@color/textColorPrimary"/>
</selector>
10 changes: 10 additions & 0 deletions app/src/main/res/drawable/text_border.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">

<stroke android:color="@color/focusable_color_selector" />
<stroke android:width="1dp" />
<corners android:radius="2dp" />
<solid android:color="@android:color/transparent" />
</shape>

40 changes: 40 additions & 0 deletions app/src/main/res/layout/dialog_crash_report.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:paddingStart="@dimen/dialogContentMargin"
android:paddingTop="@dimen/dialogContentMargin"
android:paddingEnd="@dimen/dialogContentMargin"
tools:context=".dialogs.CrashReport">

<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:labelFor="@id/message"
android:text="@string/msgCrashOccurred"
android:textAppearance="?android:attr/textAppearanceMedium"
android:textColor="@color/textColorPrimary" />

<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginVertical="@dimen/textPadding"
android:text="@string/msgDescribeCrash"
android:textAppearance="?android:attr/textAppearanceMedium"
android:textColor="@color/textColorPrimary" />

<EditText
android:id="@+id/message"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@drawable/text_border"
android:gravity="top"
android:padding="@dimen/textPadding"
android:importantForAutofill="no"
android:inputType="text|textCapSentences|textAutoCorrect|textMultiLine"
android:maxLines="8"
android:minLines="3" />

</LinearLayout>
19 changes: 0 additions & 19 deletions app/src/main/res/layout/fragment_crash_report.xml

This file was deleted.

2 changes: 2 additions & 0 deletions app/src/main/res/values/strings.xml
Original file line number Diff line number Diff line change
Expand Up @@ -101,6 +101,7 @@
<string name="actionDownload">Download</string>
<string name="actionSkip">Skip</string>
<string name="actionCreateRoute">Create route</string>
<string name="actionSend">Send</string>

<string name="share_location_intent_title">Share location via:</string>
<string name="share_data_intent_title">Share data to:</string>
Expand Down Expand Up @@ -140,6 +141,7 @@
<string name="msgFailedToGetFileName">Failed to get file name</string>
<string name="msgCancelDownload">Cancel map download?</string>
<string name="msgCrashOccurred">It looks like application has crashed during last run. You will greatly help by sending crash report to the developer.</string>
<string name="msgDescribeCrash">Please describe what you were doing when it happened:</string>
<string name="msgIndexDownloadFailed">Download size not available</string>
<string name="msgEstimateDownloadSize">Estimating download size</string>
<string name="msgEstimateDownloadSizePlaceholder" translatable="false">%1$s (%2$d%%)</string>
Expand Down

0 comments on commit e06da10

Please sign in to comment.