This library allows android applications to launch a nice beautiful BottomSheetDialog when app crashes instead of displaying a rude, disgusting and universally hated "Unfortunately, X App has stopped!" dialog.
repositories {
maven { url 'https://jitpack.io' }
}
dependencies {
implementation 'com.github.dkchalotra:crashbottomsheet:latest-version-here'
}
<!-- <repositories> section of pom.xml -->
<repository>
<id>jitpack.io</id>
<url>https://jitpack.io</url>
</repository>
<!-- <dependencies> section of pom.xml -->
<dependency>
<groupId>com.github.dkchalotra</groupId>
<artifactId>crashbottomsheet</artifactId>
<version>latest-version-here</version>
</dependency>
- Create a custom Application class
public class MyCustomApplication extends Application{
...
}
- Call
CrashBottomSheet.register()
method in eitheronCreate()
or in default Constructor.
public class MyCustomApplication extends Application{
public MyCustomApplication(){
super();
// Register here
CrashBottomSheet.register(this);
}
...
@Override
public void onCreate(){
super.onCreate();
// Or Register here
CrashBottomSheet.register(this);
}
}
- That's all folks! Enjoy 😉
Do not forget to override the following strings in your application's strings.xml to customize CrashBottomSheet
<!--Top title of BottomSheet which defaults to app name-->
<string name="cbs_title">@string/app_name</string>
<!--Bottom description of BottomSheet-->
<string name="cbs_description">Test App has crashed!\nPlease take a moment to report crash and help developers to improve this app.</string>
<!--Label for the Positive Button-->
<string name="cbs_btn_positive">Report</string>
<!--Label for the Negative Button-->
<string name="cbs_btn_negative">Cancel</string>
<!--Content description string for BottomSheet drawable image-->
<string name="cbs_drawable_description">Sad Panda</string>
<!--Developer Email to set in email app. DO NOT FORGET TO SET IT IF YOU USE DEFAULT EMAIL REPORT ACTION-->
<string name="cbs_report_email_to">[email protected]</string>
<!--Subject for the email report-->
<string name="cbs_report_email_subject">Crash Report</string>
<!--Toast message string if no email app is installed on device-->
<string name="cbs_toast_no_email_app">No email app found on device.</string>
To set a custom drawable image on CrashBottomSheet, create the following theme in styles.xml file of your app.
<!--Crash Bottom Sheet Drawable Style-->
<style name="CBSDrawable">
<item name="android:src">@drawable/somedrawable</item>
</style>
Instead of using default email report action, you can write and invoke your own action for crash report when user presses the report button in CrashBottomSheet.
To create custom crash report action you need to register CrashBottomSheet with method CrashBottomSheet.register(this, your_action_callback)
.
Example -
class MyCustomApplication extends Application {
public MyCustomApplication(){
super();
// Register here or in onCreate()
CrashBottomSheet.register(this, new CrashBottomSheet.onCrashReport(){
@Override
public void handleCrashReport(String stackTrace, DeviceInfo deviceInfo){
// Write your custom action here to handle crash report.
// e.g. send report to your server or log it in the file or whatever.
// You can also use default email action here
// But don't forget to override `cbs_report_email_to` string in app's strings.xml
CrashBottomSheet.sendCrashEmail(
MyCustomApplication.this,
stackTrace,
deviceInfo);
}
});
}
}
App may enter a never ending crash loop if any exception occurs in Application class code after registering CrashBottomSheet.
To prevent App from CrashLoop CrashBottomSheet handles only those crashes which occurs after a certain time period since last crash i.e. If app is crashing frequently within a small time gap then it is possible that CrashLoop has been triggered and app is crashing continously.
By default CrashBottomSheet uses crash time gap of 3 secs but you can specify your own crash time gap by using method CrashBottomSheet.setMinCrashIntervalMs(long ms)
after you call CrashBottomSheet.register()
method.
CrashBottomSheet does not allow to set crash time gap value of less than 3 secs. In most of the cases default crash time gap will take care of everything.
If you like this library then please join the stargazers ⭐ list from this link CrashBottomSheet Stargazers.
Copyright 2020 Dheeraj Kumar
Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.
You contribution will be welcomed to make this library better
Sad Panda image used in library is taken from this link Sad Panda Vector.
It is available under Public Domain v1.0 License so there is no need to worry.