This Android library is used to fix some serious bugs of android.widget.Toast
with the easiest way.
What bugs does it fix?
- before 10 (<29): Notification Permission
Always allow toasts from foreground apps (The commit to fix).
- from 8.1 to 9.0 (27-28): Rate Limit
Each package can enqueue one toast at a time.
Allow apps to queue multiple toast messages.
- 7.1 (25): BadTokenException
Toast with UI stress causes crash.
Why not use other libraries?
Most library that fix these bugs are invasive, so we have to replace all existing Toasts, it can be pretty messy in some large projects.
Unlike them, this library is globally effective and uses ContentProvider.onCreate()
to automatically initialize in order to make less invasive (Initializing is almost instant).
We can continue doing all our other work just like before.
Import the library in app(module-level) build.gradle:
dependencies {
repositories {
maven {
url 'https://raw.githubusercontent.com/ryuunoakaihitomi/maven-repository/master' // 👈
}
}
runtimeOnly 'github.ryuunoakaihitomi.retoast:retoast:2.0.0' // 👈
// ...
}
If you encountered this error,
Build was configured to prefer settings repositories over project repositories but repository 'maven' was added by build file 'app\build.gradle'
you have to perform it in two steps...
① Import the maven repository in settings.gradle:
dependencyResolutionManagement {
repositories {
// ...
// 👇
maven {
url 'https://raw.githubusercontent.com/ryuunoakaihitomi/maven-repository/master'
}
}
}
② Import the library in app(module-level) build.gradle
dependencies {
// ...
runtimeOnly 'github.ryuunoakaihitomi.retoast:retoast:2.0.0'
}
THAT'S ALL! We can use Toast
or other fancy Toast-based UI libraries as before, but there's no need to worry about the bugs
anymore.
If the app's minSdkVersion >= API Level 29, it's almost impossible to encounter these bugs, which
have been fixed on platforms where the app is compatible (Tested on Android 10 and 11 release). We'd
better remove ReToast from the app. In this case, the library will throw
a UnsupportedOperationException
in order to remind us to remove it.
Since Android 10, the vulnerability used by this library does have also
been fixed
, so even if these features1 bugs reappear, we just cannot let it work on the newer platforms any
more. 😟
ReToast also ships with some embedded lint rules to guide us use it in the right way as much as possible. However, there is no guarantee that these rules will function properly all the time. Documentations are always the most reliable.
Inspired by these two articles (are all in Chinese), this library is made. These were supposed to be unrelated stuff, but I suddenly found the connection between them.
1 Android 12 did bring back rate limit for all apps, the compatibility change is RATE_LIMIT_TOASTS.