Added send log button to help screen
This commit is contained in:
parent
2fb3484612
commit
5dfb94644d
6 changed files with 87 additions and 67 deletions
|
@ -32,4 +32,20 @@
|
||||||
style="@style/Widget.AppCompat.Button.Borderless"
|
style="@style/Widget.AppCompat.Button.Borderless"
|
||||||
tools:drawableTop="@drawable/ic_action_message"/>
|
tools:drawableTop="@drawable/ic_action_message"/>
|
||||||
|
|
||||||
|
<View
|
||||||
|
android:id="@+id/sendLogButtonDiv"
|
||||||
|
android:layout_width="1dp"
|
||||||
|
android:layout_height="match_parent"
|
||||||
|
android:background="?attr/divider_color"/>
|
||||||
|
|
||||||
|
<Button
|
||||||
|
android:id="@+id/sendLogButton"
|
||||||
|
android:layout_width="0dp"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_weight="1"
|
||||||
|
android:gravity="center"
|
||||||
|
android:text="@string/send_log"
|
||||||
|
style="@style/Widget.AppCompat.Button.Borderless"
|
||||||
|
tools:drawableTop="@drawable/ic_crashlog"/>
|
||||||
|
|
||||||
</LinearLayout>
|
</LinearLayout>
|
|
@ -11,6 +11,7 @@
|
||||||
Thx - Hardy
|
Thx - Hardy
|
||||||
|
|
||||||
-->
|
-->
|
||||||
|
<string name="send_log">Send log</string>
|
||||||
<string name="routing_attr_avoid_tram_name">Avoid trams</string>
|
<string name="routing_attr_avoid_tram_name">Avoid trams</string>
|
||||||
<string name="routing_attr_avoid_tram_description">Avoid trams</string>
|
<string name="routing_attr_avoid_tram_description">Avoid trams</string>
|
||||||
<string name="routing_attr_avoid_bus_name">Avoid buses</string>
|
<string name="routing_attr_avoid_bus_name">Avoid buses</string>
|
||||||
|
|
|
@ -23,6 +23,7 @@ import android.widget.ProgressBar;
|
||||||
import android.widget.SeekBar;
|
import android.widget.SeekBar;
|
||||||
import android.widget.TextView;
|
import android.widget.TextView;
|
||||||
|
|
||||||
|
import net.osmand.AndroidUtils;
|
||||||
import net.osmand.PlatformUtil;
|
import net.osmand.PlatformUtil;
|
||||||
import net.osmand.plus.activities.HelpActivity;
|
import net.osmand.plus.activities.HelpActivity;
|
||||||
import net.osmand.plus.activities.actions.AppModeDialog;
|
import net.osmand.plus.activities.actions.AppModeDialog;
|
||||||
|
@ -31,6 +32,7 @@ import net.osmand.plus.dialogs.HelpArticleDialogFragment;
|
||||||
|
|
||||||
import org.apache.commons.logging.Log;
|
import org.apache.commons.logging.Log;
|
||||||
|
|
||||||
|
import java.io.File;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
import java.util.Comparator;
|
import java.util.Comparator;
|
||||||
|
@ -208,6 +210,26 @@ public class ContextMenuAdapter {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
File logFile = app.getAppPath(OsmandApplication.EXCEPTION_PATH);
|
||||||
|
View sendLogButtonDiv = convertView.findViewById(R.id.sendLogButtonDiv);
|
||||||
|
TextView sendLogButton = (TextView) convertView.findViewById(R.id.sendLogButton);
|
||||||
|
if (logFile.exists()) {
|
||||||
|
Drawable sendLogIcon =
|
||||||
|
app.getUIUtilities().getThemedIcon(R.drawable.ic_crashlog);
|
||||||
|
sendLogButton.setCompoundDrawablesWithIntrinsicBounds(null, sendLogIcon, null, null);
|
||||||
|
sendLogButton.setCompoundDrawablePadding(AndroidUtils.dpToPx(app, 8f));
|
||||||
|
sendLogButton.setOnClickListener(new View.OnClickListener() {
|
||||||
|
@Override
|
||||||
|
public void onClick(View v) {
|
||||||
|
app.sendCrashLog();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
sendLogButtonDiv.setVisibility(View.VISIBLE);
|
||||||
|
sendLogButton.setVisibility(View.VISIBLE);
|
||||||
|
} else {
|
||||||
|
sendLogButtonDiv.setVisibility(View.GONE);
|
||||||
|
sendLogButton.setVisibility(View.GONE);
|
||||||
|
}
|
||||||
return convertView;
|
return convertView;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -9,6 +9,7 @@ import android.content.DialogInterface;
|
||||||
import android.content.DialogInterface.OnClickListener;
|
import android.content.DialogInterface.OnClickListener;
|
||||||
import android.content.Intent;
|
import android.content.Intent;
|
||||||
import android.content.pm.PackageInfo;
|
import android.content.pm.PackageInfo;
|
||||||
|
import android.content.pm.PackageManager;
|
||||||
import android.content.pm.PackageManager.NameNotFoundException;
|
import android.content.pm.PackageManager.NameNotFoundException;
|
||||||
import android.content.res.Configuration;
|
import android.content.res.Configuration;
|
||||||
import android.os.AsyncTask;
|
import android.os.AsyncTask;
|
||||||
|
@ -26,6 +27,7 @@ import android.widget.ImageView;
|
||||||
import android.widget.TextView;
|
import android.widget.TextView;
|
||||||
import android.widget.Toast;
|
import android.widget.Toast;
|
||||||
|
|
||||||
|
import net.osmand.AndroidUtils;
|
||||||
import net.osmand.CallbackWithObject;
|
import net.osmand.CallbackWithObject;
|
||||||
import net.osmand.IndexConstants;
|
import net.osmand.IndexConstants;
|
||||||
import net.osmand.PlatformUtil;
|
import net.osmand.PlatformUtil;
|
||||||
|
@ -45,6 +47,8 @@ import net.osmand.plus.activities.SavingTrackHelper;
|
||||||
import net.osmand.plus.api.SQLiteAPI;
|
import net.osmand.plus.api.SQLiteAPI;
|
||||||
import net.osmand.plus.api.SQLiteAPIImpl;
|
import net.osmand.plus.api.SQLiteAPIImpl;
|
||||||
import net.osmand.plus.base.MapViewTrackingUtilities;
|
import net.osmand.plus.base.MapViewTrackingUtilities;
|
||||||
|
import net.osmand.plus.dashboard.DashErrorFragment;
|
||||||
|
import net.osmand.plus.dialogs.ErrorBottomSheetDialog;
|
||||||
import net.osmand.plus.dialogs.RateUsBottomSheetDialog;
|
import net.osmand.plus.dialogs.RateUsBottomSheetDialog;
|
||||||
import net.osmand.plus.download.DownloadIndexesThread;
|
import net.osmand.plus.download.DownloadIndexesThread;
|
||||||
import net.osmand.plus.helpers.AvoidSpecificRoads;
|
import net.osmand.plus.helpers.AvoidSpecificRoads;
|
||||||
|
@ -82,7 +86,7 @@ import btools.routingapp.BRouterServiceConnection;
|
||||||
import btools.routingapp.IBRouterService;
|
import btools.routingapp.IBRouterService;
|
||||||
|
|
||||||
public class OsmandApplication extends MultiDexApplication {
|
public class OsmandApplication extends MultiDexApplication {
|
||||||
public static final String EXCEPTION_PATH = "exception.log"; //$NON-NLS-1$
|
public static final String EXCEPTION_PATH = "exception.log";
|
||||||
private static final org.apache.commons.logging.Log LOG = PlatformUtil.getLog(OsmandApplication.class);
|
private static final org.apache.commons.logging.Log LOG = PlatformUtil.getLog(OsmandApplication.class);
|
||||||
|
|
||||||
private static final String SHOW_PLUS_VERSION_INAPP_PARAM = "show_plus_version_inapp";
|
private static final String SHOW_PLUS_VERSION_INAPP_PARAM = "show_plus_version_inapp";
|
||||||
|
@ -618,12 +622,12 @@ public class OsmandApplication extends MultiDexApplication {
|
||||||
StringBuilder msg = new StringBuilder();
|
StringBuilder msg = new StringBuilder();
|
||||||
msg.append("Version ")
|
msg.append("Version ")
|
||||||
.append(Version.getFullVersion(OsmandApplication.this))
|
.append(Version.getFullVersion(OsmandApplication.this))
|
||||||
.append("\n") //$NON-NLS-1$
|
.append("\n")
|
||||||
.append(DateFormat.format("dd.MM.yyyy h:mm:ss", System.currentTimeMillis()));
|
.append(DateFormat.format("dd.MM.yyyy h:mm:ss", System.currentTimeMillis()));
|
||||||
try {
|
try {
|
||||||
PackageInfo info = getPackageManager().getPackageInfo(getPackageName(), 0);
|
PackageInfo info = getPackageManager().getPackageInfo(getPackageName(), 0);
|
||||||
if (info != null) {
|
if (info != null) {
|
||||||
msg.append("\nApk Version : ").append(info.versionName).append(" ").append(info.versionCode); //$NON-NLS-1$ //$NON-NLS-2$
|
msg.append("\nApk Version : ").append(info.versionName).append(" ").append(info.versionCode);
|
||||||
}
|
}
|
||||||
} catch (Throwable e) {
|
} catch (Throwable e) {
|
||||||
}
|
}
|
||||||
|
@ -650,7 +654,7 @@ public class OsmandApplication extends MultiDexApplication {
|
||||||
defaultHandler.uncaughtException(thread, ex);
|
defaultHandler.uncaughtException(thread, ex);
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
// swallow all exceptions
|
// swallow all exceptions
|
||||||
android.util.Log.e(PlatformUtil.TAG, "Exception while handle other exception", e); //$NON-NLS-1$
|
android.util.Log.e(PlatformUtil.TAG, "Exception while handle other exception", e);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -1032,4 +1036,32 @@ public class OsmandApplication extends MultiDexApplication {
|
||||||
public MapViewTrackingUtilities getMapViewTrackingUtilities() {
|
public MapViewTrackingUtilities getMapViewTrackingUtilities() {
|
||||||
return mapViewTrackingUtilities;
|
return mapViewTrackingUtilities;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void sendCrashLog() {
|
||||||
|
Intent intent = new Intent(Intent.ACTION_SEND);
|
||||||
|
intent.putExtra(Intent.EXTRA_EMAIL, new String[]{"crash@osmand.net"});
|
||||||
|
File file = getAppPath(OsmandApplication.EXCEPTION_PATH);
|
||||||
|
intent.putExtra(Intent.EXTRA_STREAM, AndroidUtils.getUriForFile(this, file));
|
||||||
|
intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
|
||||||
|
intent.setType("vnd.android.cursor.dir/email");
|
||||||
|
intent.putExtra(Intent.EXTRA_SUBJECT, "OsmAnd bug");
|
||||||
|
StringBuilder text = new StringBuilder();
|
||||||
|
text.append("\nDevice : ").append(Build.DEVICE);
|
||||||
|
text.append("\nBrand : ").append(Build.BRAND);
|
||||||
|
text.append("\nModel : ").append(Build.MODEL);
|
||||||
|
text.append("\nProduct : ").append(Build.PRODUCT);
|
||||||
|
text.append("\nBuild : ").append(Build.DISPLAY);
|
||||||
|
text.append("\nVersion : ").append(Build.VERSION.RELEASE);
|
||||||
|
text.append("\nApp Version : ").append(Version.getAppName(this));
|
||||||
|
try {
|
||||||
|
PackageInfo info = getPackageManager().getPackageInfo(getPackageName(), 0);
|
||||||
|
if (info != null) {
|
||||||
|
text.append("\nApk Version : ").append(info.versionName).append(" ").append(info.versionCode);
|
||||||
|
}
|
||||||
|
} catch (PackageManager.NameNotFoundException e) {
|
||||||
|
PlatformUtil.getLog(ErrorBottomSheetDialog.class).error("", e);
|
||||||
|
}
|
||||||
|
intent.putExtra(Intent.EXTRA_TEXT, text.toString());
|
||||||
|
startActivity(Intent.createChooser(intent, getString(R.string.send_report)));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -58,32 +58,7 @@ public class DashErrorFragment extends DashBaseFragment {
|
||||||
errorBtn.setOnClickListener(new View.OnClickListener() {
|
errorBtn.setOnClickListener(new View.OnClickListener() {
|
||||||
@Override
|
@Override
|
||||||
public void onClick(View view) {
|
public void onClick(View view) {
|
||||||
Intent intent = new Intent(Intent.ACTION_SEND);
|
getMyApplication().sendCrashLog();
|
||||||
intent.putExtra(Intent.EXTRA_EMAIL, new String[]{"crash@osmand.net"}); //$NON-NLS-1$
|
|
||||||
File file = getMyApplication().getAppPath(OsmandApplication.EXCEPTION_PATH);
|
|
||||||
intent.putExtra(Intent.EXTRA_STREAM, AndroidUtils.getUriForFile(getMyApplication(),file));
|
|
||||||
intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
|
|
||||||
intent.setType("vnd.android.cursor.dir/email"); //$NON-NLS-1$
|
|
||||||
intent.putExtra(Intent.EXTRA_SUBJECT, "OsmAnd bug"); //$NON-NLS-1$
|
|
||||||
StringBuilder text = new StringBuilder();
|
|
||||||
text.append("\nDevice : ").append(Build.DEVICE); //$NON-NLS-1$
|
|
||||||
text.append("\nBrand : ").append(Build.BRAND); //$NON-NLS-1$
|
|
||||||
text.append("\nModel : ").append(Build.MODEL); //$NON-NLS-1$
|
|
||||||
text.append("\nProduct : ").append(Build.PRODUCT); //$NON-NLS-1$
|
|
||||||
text.append("\nBuild : ").append(Build.DISPLAY); //$NON-NLS-1$
|
|
||||||
text.append("\nVersion : ").append(Build.VERSION.RELEASE); //$NON-NLS-1$
|
|
||||||
text.append("\nApp Version : ").append(Version.getAppName(getMyApplication())); //$NON-NLS-1$
|
|
||||||
try {
|
|
||||||
PackageInfo info = getActivity().getPackageManager().getPackageInfo(getActivity().getPackageName(),
|
|
||||||
0);
|
|
||||||
if (info != null) {
|
|
||||||
text.append("\nApk Version : ").append(info.versionName).append(" ").append(info.versionCode); //$NON-NLS-1$ //$NON-NLS-2$
|
|
||||||
}
|
|
||||||
} catch (PackageManager.NameNotFoundException e) {
|
|
||||||
PlatformUtil.getLog(DashErrorFragment.class).error("", e);
|
|
||||||
}
|
|
||||||
intent.putExtra(Intent.EXTRA_TEXT, text.toString());
|
|
||||||
startActivity(Intent.createChooser(intent, getString(R.string.send_report)));
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
|
@ -1,12 +1,10 @@
|
||||||
package net.osmand.plus.dialogs;
|
package net.osmand.plus.dialogs;
|
||||||
|
|
||||||
import android.content.Intent;
|
|
||||||
import android.content.pm.PackageInfo;
|
|
||||||
import android.content.pm.PackageManager;
|
|
||||||
import android.graphics.Typeface;
|
import android.graphics.Typeface;
|
||||||
import android.os.Build;
|
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
|
import android.support.annotation.NonNull;
|
||||||
import android.support.annotation.Nullable;
|
import android.support.annotation.Nullable;
|
||||||
|
import android.support.v4.app.FragmentActivity;
|
||||||
import android.view.LayoutInflater;
|
import android.view.LayoutInflater;
|
||||||
import android.view.View;
|
import android.view.View;
|
||||||
import android.view.ViewGroup;
|
import android.view.ViewGroup;
|
||||||
|
@ -14,29 +12,27 @@ import android.widget.Button;
|
||||||
import android.widget.ImageView;
|
import android.widget.ImageView;
|
||||||
import android.widget.TextView;
|
import android.widget.TextView;
|
||||||
|
|
||||||
import net.osmand.AndroidUtils;
|
|
||||||
import net.osmand.PlatformUtil;
|
|
||||||
import net.osmand.plus.OsmandApplication;
|
import net.osmand.plus.OsmandApplication;
|
||||||
import net.osmand.plus.OsmandSettings;
|
import net.osmand.plus.OsmandSettings;
|
||||||
import net.osmand.plus.R;
|
import net.osmand.plus.R;
|
||||||
import net.osmand.plus.Version;
|
|
||||||
import net.osmand.plus.activities.MapActivity;
|
import net.osmand.plus.activities.MapActivity;
|
||||||
import net.osmand.plus.activities.OsmandActionBarActivity;
|
import net.osmand.plus.activities.OsmandActionBarActivity;
|
||||||
import net.osmand.plus.base.BottomSheetDialogFragment;
|
import net.osmand.plus.base.BottomSheetDialogFragment;
|
||||||
import net.osmand.plus.helpers.FontCache;
|
import net.osmand.plus.helpers.FontCache;
|
||||||
|
|
||||||
import java.io.File;
|
|
||||||
import java.text.MessageFormat;
|
import java.text.MessageFormat;
|
||||||
|
|
||||||
public class ErrorBottomSheetDialog extends BottomSheetDialogFragment {
|
public class ErrorBottomSheetDialog extends BottomSheetDialogFragment {
|
||||||
@Nullable
|
@Nullable
|
||||||
@Override
|
@Override
|
||||||
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
|
public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
|
||||||
View view = getActivity().getLayoutInflater().inflate(R.layout.dash_error_fragment, container, false);
|
FragmentActivity activity = requireActivity();
|
||||||
|
OsmandApplication app = (OsmandApplication) activity.getApplication();
|
||||||
|
View view = activity.getLayoutInflater().inflate(R.layout.dash_error_fragment, container, false);
|
||||||
String msg = MessageFormat.format(getString(R.string.previous_run_crashed), OsmandApplication.EXCEPTION_PATH);
|
String msg = MessageFormat.format(getString(R.string.previous_run_crashed), OsmandApplication.EXCEPTION_PATH);
|
||||||
Typeface typeface = FontCache.getRobotoMedium(getActivity());
|
Typeface typeface = FontCache.getRobotoMedium(activity);
|
||||||
ImageView iv = ((ImageView) view.findViewById(R.id.error_icon));
|
ImageView iv = ((ImageView) view.findViewById(R.id.error_icon));
|
||||||
iv.setImageDrawable(getMyApplication().getUIUtilities().getThemedIcon(R.drawable.ic_crashlog));
|
iv.setImageDrawable(app.getUIUtilities().getThemedIcon(R.drawable.ic_crashlog));
|
||||||
TextView message = ((TextView) view.findViewById(R.id.error_header));
|
TextView message = ((TextView) view.findViewById(R.id.error_header));
|
||||||
message.setTypeface(typeface);
|
message.setTypeface(typeface);
|
||||||
message.setText(msg);
|
message.setText(msg);
|
||||||
|
@ -45,32 +41,10 @@ public class ErrorBottomSheetDialog extends BottomSheetDialogFragment {
|
||||||
errorBtn.setOnClickListener(new View.OnClickListener() {
|
errorBtn.setOnClickListener(new View.OnClickListener() {
|
||||||
@Override
|
@Override
|
||||||
public void onClick(View view) {
|
public void onClick(View view) {
|
||||||
Intent intent = new Intent(Intent.ACTION_SEND);
|
OsmandApplication app = getMyApplication();
|
||||||
intent.putExtra(Intent.EXTRA_EMAIL, new String[]{"crash@osmand.net"}); //$NON-NLS-1$
|
if (app != null) {
|
||||||
File file = getMyApplication().getAppPath(OsmandApplication.EXCEPTION_PATH);
|
app.sendCrashLog();
|
||||||
intent.putExtra(Intent.EXTRA_STREAM, AndroidUtils.getUriForFile(getMyApplication(), file));
|
|
||||||
intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
|
|
||||||
intent.setType("vnd.android.cursor.dir/email"); //$NON-NLS-1$
|
|
||||||
intent.putExtra(Intent.EXTRA_SUBJECT, "OsmAnd bug"); //$NON-NLS-1$
|
|
||||||
StringBuilder text = new StringBuilder();
|
|
||||||
text.append("\nDevice : ").append(Build.DEVICE); //$NON-NLS-1$
|
|
||||||
text.append("\nBrand : ").append(Build.BRAND); //$NON-NLS-1$
|
|
||||||
text.append("\nModel : ").append(Build.MODEL); //$NON-NLS-1$
|
|
||||||
text.append("\nProduct : ").append(Build.PRODUCT); //$NON-NLS-1$
|
|
||||||
text.append("\nBuild : ").append(Build.DISPLAY); //$NON-NLS-1$
|
|
||||||
text.append("\nVersion : ").append(Build.VERSION.RELEASE); //$NON-NLS-1$
|
|
||||||
text.append("\nApp Version : ").append(Version.getAppName(getMyApplication())); //$NON-NLS-1$
|
|
||||||
try {
|
|
||||||
PackageInfo info = getActivity().getPackageManager().getPackageInfo(getActivity().getPackageName(),
|
|
||||||
0);
|
|
||||||
if (info != null) {
|
|
||||||
text.append("\nApk Version : ").append(info.versionName).append(" ").append(info.versionCode); //$NON-NLS-1$ //$NON-NLS-2$
|
|
||||||
}
|
|
||||||
} catch (PackageManager.NameNotFoundException e) {
|
|
||||||
PlatformUtil.getLog(ErrorBottomSheetDialog.class).error("", e);
|
|
||||||
}
|
}
|
||||||
intent.putExtra(Intent.EXTRA_TEXT, text.toString());
|
|
||||||
startActivity(Intent.createChooser(intent, getString(R.string.send_report)));
|
|
||||||
dismiss();
|
dismiss();
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
Loading…
Reference in a new issue