diff --git a/android/KMAPro/kMAPro/src/main/java/com/tavultesoft/kmapro/MainActivity.java b/android/KMAPro/kMAPro/src/main/java/com/tavultesoft/kmapro/MainActivity.java index 22ef98e40f..06cb967769 100644 --- a/android/KMAPro/kMAPro/src/main/java/com/tavultesoft/kmapro/MainActivity.java +++ b/android/KMAPro/kMAPro/src/main/java/com/tavultesoft/kmapro/MainActivity.java @@ -90,6 +90,7 @@ import android.widget.SeekBar; import android.widget.TextView; import android.widget.Toast; +import io.sentry.SentryLevel; import io.sentry.android.core.SentryAndroid; public class MainActivity extends AppCompatActivity implements OnKeyboardEventListener, OnKeyboardDownloadEventListener, @@ -129,6 +130,23 @@ public class MainActivity extends AppCompatActivity implements OnKeyboardEventLi checkSendCrashReport(); if (KMManager.getMaySendCrashReport()) { SentryAndroid.init(context, options -> { + options.setBeforeBreadcrumb((breadcrumb, hint) -> { + String NAVIGATION_PATTERN = "^(.*)?(keyboard\\.html#[^-]+)-.*$"; + if ("navigation".equals(breadcrumb.getCategory()) && breadcrumb.getLevel() == SentryLevel.INFO && + ((breadcrumb.getData("from") != null) || (breadcrumb.getData("to") != null)) ) { + // Sanitize navigation breadcrumbs + String dataFrom = String.valueOf(breadcrumb.getData("from")); + dataFrom = dataFrom.replaceAll(NAVIGATION_PATTERN, "$1$2"); + breadcrumb.setData("from", dataFrom); + String dataTo = String.valueOf(breadcrumb.getData("to")); + dataTo = dataTo.replaceAll(NAVIGATION_PATTERN, "$1$2"); + breadcrumb.setData("to", dataTo); + + return breadcrumb; + } else { + return breadcrumb; + } + }); options.setRelease("release-" + com.tavultesoft.kmapro.BuildConfig.VERSION_NAME); options.setEnvironment(com.tavultesoft.kmapro.BuildConfig.VERSION_ENVIRONMENT); }); @@ -1026,4 +1044,4 @@ public class MainActivity extends AppCompatActivity implements OnKeyboardEventLi outStream.flush(); outStream.close(); } -} \ No newline at end of file +} diff --git a/oem/firstvoices/android/app/src/main/java/com/firstvoices/keyboards/MainActivity.java b/oem/firstvoices/android/app/src/main/java/com/firstvoices/keyboards/MainActivity.java index 4e254c74a1..172e3c76ea 100644 --- a/oem/firstvoices/android/app/src/main/java/com/firstvoices/keyboards/MainActivity.java +++ b/oem/firstvoices/android/app/src/main/java/com/firstvoices/keyboards/MainActivity.java @@ -13,6 +13,7 @@ import android.webkit.WebViewClient; import androidx.appcompat.app.AppCompatActivity; +import io.sentry.SentryLevel; import io.sentry.android.core.SentryAndroid; import com.tavultesoft.kmea.*; @@ -28,8 +29,25 @@ public class MainActivity extends AppCompatActivity { super.onCreate(savedInstanceState); SentryAndroid.init(this, options -> { - options.setRelease("release-"+com.firstvoices.keyboards.BuildConfig.VERSION_NAME); - options.setEnvironment(com.firstvoices.keyboards.BuildConfig.VERSION_ENVIRONMENT); + options.setBeforeBreadcrumb((breadcrumb, hint) -> { + String NAVIGATION_PATTERN = "^(.*)?(keyboard\\.html#[^-]+)-(.)*$"; + if ("navigation".equals(breadcrumb.getCategory()) && breadcrumb.getLevel() == SentryLevel.INFO && + ((breadcrumb.getData("from") != null) || (breadcrumb.getData("to") != null)) ) { + // Sanitize navigation breadcrumbs + String dataFrom = String.valueOf(breadcrumb.getData("from")); + dataFrom = dataFrom.replaceAll(NAVIGATION_PATTERN, "$1$2"); + breadcrumb.setData("from", dataFrom); + String dataTo = String.valueOf(breadcrumb.getData("to")); + dataTo = dataTo.replaceAll(NAVIGATION_PATTERN, "$1$2"); + breadcrumb.setData("to", dataTo); + + return breadcrumb; + } else { + return breadcrumb; + } + }); + options.setRelease("release-"+com.firstvoices.keyboards.BuildConfig.VERSION_NAME); + options.setEnvironment(com.firstvoices.keyboards.BuildConfig.VERSION_ENVIRONMENT); }); setContentView(R.layout.activity_main);