82.18 - Beta (82118)

This commit is contained in:
Juby210 2021-07-09 23:04:33 +02:00
parent 5687294561
commit 3ad206f182
Signed by untrusted user: Juby210
GPG key ID: F459CEC5C92E1482
15 changed files with 60 additions and 30 deletions

View file

@ -10,8 +10,8 @@ android {
applicationId 'com.discord' applicationId 'com.discord'
minSdkVersion 21 minSdkVersion 21
targetSdkVersion 29 targetSdkVersion 29
versionCode 82116 versionCode 82118
versionName "82.16 - Beta" versionName "82.18 - Beta"
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
} }

View file

@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android" android:versionCode="82116" android:versionName="82.16 - Beta" android:installLocation="auto" android:compileSdkVersion="30" android:compileSdkVersionCodename="11" package="com.discord" platformBuildVersionCode="30" platformBuildVersionName="11"> <manifest xmlns:android="http://schemas.android.com/apk/res/android" android:versionCode="82118" android:versionName="82.18 - Beta" android:installLocation="auto" android:compileSdkVersion="30" android:compileSdkVersionCodename="11" package="com.discord" platformBuildVersionCode="30" platformBuildVersionName="11">
<uses-sdk android:minSdkVersion="21" android:targetSdkVersion="29"/> <uses-sdk android:minSdkVersion="21" android:targetSdkVersion="29"/>
<uses-feature android:name="android.hardware.camera" android:required="false"/> <uses-feature android:name="android.hardware.camera" android:required="false"/>
<uses-feature android:name="android.hardware.camera.autofocus" android:required="false"/> <uses-feature android:name="android.hardware.camera.autofocus" android:required="false"/>

View file

@ -172,7 +172,7 @@ public class App extends Application {
loggingProvider.init(appLog); loggingProvider.init(appLog);
c.i.c.c.e(this); c.i.c.c.e(this);
String str = null; String str = null;
if (BuildUtils.INSTANCE.isValidBuildVersionName("82.16 - Beta")) { if (BuildUtils.INSTANCE.isValidBuildVersionName("82.18 - Beta")) {
FirebaseCrashlytics.getInstance().setCrashlyticsCollectionEnabled(true); FirebaseCrashlytics.getInstance().setCrashlyticsCollectionEnabled(true);
} else { } else {
FirebaseCrashlytics.getInstance().setCrashlyticsCollectionEnabled(false); FirebaseCrashlytics.getInstance().setCrashlyticsCollectionEnabled(false);

View file

@ -15,7 +15,7 @@ public final class StoreClientVersion extends Store {
private int clientMinVersion; private int clientMinVersion;
private final String clientMinVersionKey = "CLIENT_OUTDATED_KEY"; private final String clientMinVersionKey = "CLIENT_OUTDATED_KEY";
private final SerializedSubject<Boolean, Boolean> clientOutdatedSubject = new SerializedSubject<>(BehaviorSubject.l0(Boolean.FALSE)); private final SerializedSubject<Boolean, Boolean> clientOutdatedSubject = new SerializedSubject<>(BehaviorSubject.l0(Boolean.FALSE));
private final int clientVersion = 82116; private final int clientVersion = 82118;
public static final /* synthetic */ void access$setClientMinVersion(StoreClientVersion storeClientVersion, int i) { public static final /* synthetic */ void access$setClientMinVersion(StoreClientVersion storeClientVersion, int i) {
storeClientVersion.setClientMinVersion(i); storeClientVersion.setClientMinVersion(i);

View file

@ -14,7 +14,7 @@ import kotlin.jvm.functions.Function1;
/* compiled from: StoreInstantInvites.kt */ /* compiled from: StoreInstantInvites.kt */
public final class StoreInstantInvites$fetchInviteIfNotLoaded$1 extends o implements Function0<Unit> { public final class StoreInstantInvites$fetchInviteIfNotLoaded$1 extends o implements Function0<Unit> {
public final /* synthetic */ String $inviteCode; public final /* synthetic */ String $inviteCode;
public final /* synthetic */ String $source; public final /* synthetic */ String $location;
public final /* synthetic */ StoreInstantInvites this$0; public final /* synthetic */ StoreInstantInvites this$0;
/* compiled from: StoreInstantInvites.kt */ /* compiled from: StoreInstantInvites.kt */
@ -60,7 +60,7 @@ public final class StoreInstantInvites$fetchInviteIfNotLoaded$1 extends o implem
public final void invoke(ModelInvite modelInvite) { public final void invoke(ModelInvite modelInvite) {
m.checkNotNullParameter(modelInvite, "it"); m.checkNotNullParameter(modelInvite, "it");
StoreInstantInvites.access$getDispatcher$p(this.this$0.this$0).schedule(new AnonymousClass1(this, modelInvite)); StoreInstantInvites.access$getDispatcher$p(this.this$0.this$0).schedule(new AnonymousClass1(this, modelInvite));
String str = this.this$0.$source; String str = this.this$0.$location;
if (str != null) { if (str != null) {
AnalyticsTracker.INSTANCE.inviteResolved(modelInvite, str); AnalyticsTracker.INSTANCE.inviteResolved(modelInvite, str);
} }
@ -131,7 +131,7 @@ public final class StoreInstantInvites$fetchInviteIfNotLoaded$1 extends o implem
error.setShowErrorToasts(false); error.setShowErrorToasts(false);
StoreInstantInvites.access$getDispatcher$p(this.this$0.this$0).schedule(new AnonymousClass1(this)); StoreInstantInvites.access$getDispatcher$p(this.this$0.this$0).schedule(new AnonymousClass1(this));
StoreInstantInvites$fetchInviteIfNotLoaded$1 storeInstantInvites$fetchInviteIfNotLoaded$1 = this.this$0; StoreInstantInvites$fetchInviteIfNotLoaded$1 storeInstantInvites$fetchInviteIfNotLoaded$1 = this.this$0;
String str = storeInstantInvites$fetchInviteIfNotLoaded$1.$source; String str = storeInstantInvites$fetchInviteIfNotLoaded$1.$location;
if (str != null) { if (str != null) {
String str2 = storeInstantInvites$fetchInviteIfNotLoaded$1.$inviteCode; String str2 = storeInstantInvites$fetchInviteIfNotLoaded$1.$inviteCode;
Error.Response response = error.getResponse(); Error.Response response = error.getResponse();
@ -152,7 +152,7 @@ public final class StoreInstantInvites$fetchInviteIfNotLoaded$1 extends o implem
super(0); super(0);
this.this$0 = storeInstantInvites; this.this$0 = storeInstantInvites;
this.$inviteCode = str; this.$inviteCode = str;
this.$source = str2; this.$location = str2;
} }
@Override // kotlin.jvm.functions.Function0 @Override // kotlin.jvm.functions.Function0

View file

@ -19,6 +19,7 @@ import com.discord.utilities.persister.Persister;
import com.discord.utilities.rest.RestAPI; import com.discord.utilities.rest.RestAPI;
import com.discord.utilities.rx.ObservableExtensionsKt; import com.discord.utilities.rx.ObservableExtensionsKt;
import com.discord.utilities.threads.ThreadUtils; import com.discord.utilities.threads.ThreadUtils;
import d0.d0.f;
import d0.o; import d0.o;
import d0.t.n0; import d0.t.n0;
import d0.t.o0; import d0.t.o0;
@ -659,7 +660,7 @@ public final class StoreMessageAck extends StoreV2 {
@Override // com.discord.stores.StoreV2 @Override // com.discord.stores.StoreV2
public void snapshotData() { public void snapshotData() {
super.snapshotData(); super.snapshotData();
HashMap hashMap = new HashMap(this.acks.size(), 0.75f); HashMap hashMap = new HashMap(f.coerceAtLeast(this.acks.size(), 1), 0.75f);
hashMap.putAll(this.acks); hashMap.putAll(this.acks);
this.acksSnapshot = hashMap; this.acksSnapshot = hashMap;
Persister.set$default(this.acksPersister, hashMap, false, 2, null); Persister.set$default(this.acksPersister, hashMap, false, 2, null);

View file

@ -77,7 +77,7 @@ public final class AnalyticSuperProperties {
private final void setBaselineProperties() { private final void setBaselineProperties() {
String locale = Locale.getDefault().toString(); String locale = Locale.getDefault().toString();
m.checkNotNullExpressionValue(locale, "Locale.getDefault().toString()"); m.checkNotNullExpressionValue(locale, "Locale.getDefault().toString()");
updateSuperProperties(h0.mapOf(o.to("browser", "Discord Android"), o.to("browser_user_agent", "Discord-Android/82116"), o.to("client_build_number", 82116), o.to("client_version", "82.16 - Beta"), o.to("device", Build.MODEL + ", " + Build.PRODUCT), o.to("os", "Android"), o.to("os_sdk_version", String.valueOf(Build.VERSION.SDK_INT)), o.to("os_version", Build.VERSION.RELEASE), o.to("system_locale", t.replace$default(locale, "_", "-", false, 4, (Object) null)))); updateSuperProperties(h0.mapOf(o.to("browser", "Discord Android"), o.to("browser_user_agent", "Discord-Android/82118"), o.to("client_build_number", 82118), o.to("client_version", "82.18 - Beta"), o.to("device", Build.MODEL + ", " + Build.PRODUCT), o.to("os", "Android"), o.to("os_sdk_version", String.valueOf(Build.VERSION.SDK_INT)), o.to("os_version", Build.VERSION.RELEASE), o.to("system_locale", t.replace$default(locale, "_", "-", false, 4, (Object) null))));
} }
private final void setSuperProperties(Map<String, ? extends Object> map) { private final void setSuperProperties(Map<String, ? extends Object> map) {

View file

@ -46,11 +46,13 @@ import com.discord.stores.StoreStream;
import com.discord.utilities.analytics.AnalyticsUtils; import com.discord.utilities.analytics.AnalyticsUtils;
import com.discord.utilities.analytics.Traits; import com.discord.utilities.analytics.Traits;
import com.discord.utilities.collections.CollectionExtensionsKt; import com.discord.utilities.collections.CollectionExtensionsKt;
import com.discord.utilities.email.EmailUtils;
import com.discord.utilities.fcm.NotificationClient; import com.discord.utilities.fcm.NotificationClient;
import com.discord.utilities.intent.RouteHandlers; import com.discord.utilities.intent.RouteHandlers;
import com.discord.utilities.logging.Logger; import com.discord.utilities.logging.Logger;
import com.discord.utilities.permissions.PermissionUtils; import com.discord.utilities.permissions.PermissionUtils;
import com.discord.utilities.persister.Persister; import com.discord.utilities.persister.Persister;
import com.discord.utilities.phone.PhoneUtils;
import com.discord.utilities.platform.Platform; import com.discord.utilities.platform.Platform;
import com.discord.utilities.rest.FileUploadAlertType; import com.discord.utilities.rest.FileUploadAlertType;
import com.discord.utilities.rx.ObservableExtensionsKt; import com.discord.utilities.rx.ObservableExtensionsKt;
@ -319,11 +321,11 @@ public final class AnalyticsTracker {
tracker.track("external_fingerprint_dropped", linkedHashMap); tracker.track("external_fingerprint_dropped", linkedHashMap);
} }
public static /* synthetic */ void friendRequestFailed$default(AnalyticsTracker analyticsTracker, String str, int i, Object obj) { public static /* synthetic */ void friendRequestFailed$default(AnalyticsTracker analyticsTracker, CharSequence charSequence, String str, Integer num, String str2, int i, Object obj) {
if ((i & 1) != 0) { if ((i & 8) != 0) {
str = null; str2 = null;
} }
analyticsTracker.friendRequestFailed(str); analyticsTracker.friendRequestFailed(charSequence, str, num, str2);
} }
private final String getAnalyticsValueForNotificationFrequency(Integer num) { private final String getAnalyticsValueForNotificationFrequency(Integer num) {
@ -1213,10 +1215,16 @@ public final class AnalyticsTracker {
tracker.track("friend_add_viewed", g0.mapOf(o.to("friend_add_type", str))); tracker.track("friend_add_viewed", g0.mapOf(o.to("friend_add_type", str)));
} }
public final void friendRequestFailed(String str) { public final void friendRequestFailed(CharSequence charSequence, String str, Integer num, String str2) {
m.checkNotNullParameter(charSequence, "query");
m.checkNotNullParameter(str, "username");
HashMap hashMap = new HashMap(); HashMap hashMap = new HashMap();
if (str != null) { if (str2 != null) {
hashMap.put("reason", str); hashMap.put("reason", str2);
hashMap.put("discrim_len", Integer.valueOf(String.valueOf(num).length()));
hashMap.put("username_len", Integer.valueOf(str.length()));
hashMap.put("is_email_like", Boolean.valueOf(EmailUtils.INSTANCE.isEmailLike(charSequence.toString())));
hashMap.put("is_num_only", Boolean.valueOf(PhoneUtils.INSTANCE.isValidPhoneFragment(charSequence.toString())));
} }
tracker.track("friend_request_failed", hashMap); tracker.track("friend_request_failed", hashMap);
} }
@ -1281,6 +1289,12 @@ public final class AnalyticsTracker {
tracker.track("android_hardware_survey", h0.mapOf(o.to("device_board", buildInfo.a), o.to("device_brand", buildInfo.b), o.to("device_manufacturer", buildInfo.f2013c), o.to("device_model", buildInfo.d), o.to("device_product", buildInfo.e), o.to("device_supported_abis", buildInfo.f), o.to("device_is_64_bit", Boolean.valueOf(buildInfo.g)), o.to("is_low_ram_device", Boolean.valueOf(memoryInfo.b)), o.to("memory_class", Integer.valueOf(memoryInfo.f2015c)), o.to("large_memory_class", Integer.valueOf(memoryInfo.d)), o.to("hardware_decoders_1080", Integer.valueOf(decoderCountInfo.a)), o.to("hardware_decoders_720", Integer.valueOf(decoderCountInfo.b)), o.to("hardware_decoders_480", Integer.valueOf(decoderCountInfo.f2014c)), o.to("decoders_1080", Integer.valueOf(decoderCountInfo.d)), o.to("decoders_720", Integer.valueOf(decoderCountInfo.e)), o.to("decoders_480", Integer.valueOf(decoderCountInfo.f)), o.to("test_duration_ms", Integer.valueOf(decoderCountInfo.g)))); tracker.track("android_hardware_survey", h0.mapOf(o.to("device_board", buildInfo.a), o.to("device_brand", buildInfo.b), o.to("device_manufacturer", buildInfo.f2013c), o.to("device_model", buildInfo.d), o.to("device_product", buildInfo.e), o.to("device_supported_abis", buildInfo.f), o.to("device_is_64_bit", Boolean.valueOf(buildInfo.g)), o.to("is_low_ram_device", Boolean.valueOf(memoryInfo.b)), o.to("memory_class", Integer.valueOf(memoryInfo.f2015c)), o.to("large_memory_class", Integer.valueOf(memoryInfo.d)), o.to("hardware_decoders_1080", Integer.valueOf(decoderCountInfo.a)), o.to("hardware_decoders_720", Integer.valueOf(decoderCountInfo.b)), o.to("hardware_decoders_480", Integer.valueOf(decoderCountInfo.f2014c)), o.to("decoders_1080", Integer.valueOf(decoderCountInfo.d)), o.to("decoders_720", Integer.valueOf(decoderCountInfo.e)), o.to("decoders_480", Integer.valueOf(decoderCountInfo.f)), o.to("test_duration_ms", Integer.valueOf(decoderCountInfo.g))));
} }
public final void impressionInviteAccept(String str) {
if (str != null) {
tracker.track("impression_invite_accept", g0.mapOf(o.to("invite_code", str)));
}
}
public final void inviteCopied(GuildInvite guildInvite, Channel channel, String str) { public final void inviteCopied(GuildInvite guildInvite, Channel channel, String str) {
m.checkNotNullParameter(guildInvite, "guildInvite"); m.checkNotNullParameter(guildInvite, "guildInvite");
m.checkNotNullParameter(str, "source"); m.checkNotNullParameter(str, "source");
@ -1382,10 +1396,6 @@ public final class AnalyticsTracker {
ObservableExtensionsKt.appSubscribe$default(ObservableExtensionsKt.computationLatest(ObservableExtensionsKt.takeSingleUntilTimeout$default(F, 0, false, 3, null)), AnalyticsTracker.class, (Context) null, (Function1) null, (Function1) null, (Function0) null, (Function0) null, new AnalyticsTracker$inviteSuggestionOpened$2(list, list2, j), 62, (Object) null); ObservableExtensionsKt.appSubscribe$default(ObservableExtensionsKt.computationLatest(ObservableExtensionsKt.takeSingleUntilTimeout$default(F, 0, false, 3, null)), AnalyticsTracker.class, (Context) null, (Function1) null, (Function1) null, (Function0) null, (Function0) null, new AnalyticsTracker$inviteSuggestionOpened$2(list, list2, j), 62, (Object) null);
} }
public final void inviteViewed() {
AnalyticsUtils.Tracker.track$default(tracker, "invite_viewed", null, 2, null);
}
public final void joinGuildViewed() { public final void joinGuildViewed() {
AnalyticsUtils.Tracker.track$default(tracker, "join_guild_viewed", null, 2, null); AnalyticsUtils.Tracker.track$default(tracker, "join_guild_viewed", null, 2, null);
} }

View file

@ -0,0 +1,17 @@
package com.discord.utilities.email;
import d0.z.d.m;
import kotlin.text.Regex;
/* compiled from: EmailUtils.kt */
public final class EmailUtils {
private static final Regex EMAIL_REGEX = new Regex("/^([\\w-+]+(?:\\.[\\w-+]+)*)@((?:[\\w-]+\\.)*\\w[\\w-]{0,66})\\.([a-z]{2,63}(?:\\.[a-z]{2})?)$/i");
public static final EmailUtils INSTANCE = new EmailUtils();
private EmailUtils() {
}
public final boolean isEmailLike(String str) {
m.checkNotNullParameter(str, "input");
return EMAIL_REGEX.matches(str);
}
}

View file

@ -177,7 +177,7 @@ public final class RestAPI implements RestAPIInterface {
@Override // com.discord.restapi.RequiredHeadersInterceptor.HeadersProvider @Override // com.discord.restapi.RequiredHeadersInterceptor.HeadersProvider
public String getUserAgent() { public String getUserAgent() {
return "Discord-Android/82116"; return "Discord-Android/82118";
} }
} }

View file

@ -100,7 +100,7 @@ public final class WidgetFatalCrash extends AppFragment {
textView2.setText(b.j(this, 2131887892, objArr2, null, 4)); textView2.setText(b.j(this, 2131887892, objArr2, null, 4));
TextView textView3 = getBinding().b; TextView textView3 = getBinding().b;
m.checkNotNullExpressionValue(textView3, "binding.fatalCrashAppVersion"); m.checkNotNullExpressionValue(textView3, "binding.fatalCrashAppVersion");
textView3.setText(b.j(this, 2131887885, new Object[]{"82.16 - Beta"}, null, 4)); textView3.setText(b.j(this, 2131887885, new Object[]{"82.18 - Beta"}, null, 4));
TextView textView4 = getBinding().d; TextView textView4 = getBinding().d;
m.checkNotNullExpressionValue(textView4, "binding.fatalCrashOsVersion"); m.checkNotNullExpressionValue(textView4, "binding.fatalCrashOsVersion");
textView4.setText(b.j(this, 2131887888, new Object[]{String.valueOf(Build.VERSION.SDK_INT)}, null, 4)); textView4.setText(b.j(this, 2131887888, new Object[]{String.valueOf(Build.VERSION.SDK_INT)}, null, 4));

View file

@ -154,10 +154,10 @@ public final class WidgetFriendsAddById extends AppFragment {
} }
private final void extractTargetAndSendFriendRequest() { private final void extractTargetAndSendFriendRequest() {
Companion companion = Companion;
TextInputLayout textInputLayout = getBinding().e; TextInputLayout textInputLayout = getBinding().e;
m.checkNotNullExpressionValue(textInputLayout, "binding.friendsAddTextEditWrap"); m.checkNotNullExpressionValue(textInputLayout, "binding.friendsAddTextEditWrap");
Companion.UserNameDiscriminator access$extractUsernameAndDiscriminator = Companion.access$extractUsernameAndDiscriminator(companion, ViewExtensions.getTextOrEmpty(textInputLayout)); String textOrEmpty = ViewExtensions.getTextOrEmpty(textInputLayout);
Companion.UserNameDiscriminator access$extractUsernameAndDiscriminator = Companion.access$extractUsernameAndDiscriminator(Companion, textOrEmpty);
if (access$extractUsernameAndDiscriminator.getDiscriminator() != null) { if (access$extractUsernameAndDiscriminator.getDiscriminator() != null) {
sendFriendRequest(access$extractUsernameAndDiscriminator.getUsername(), access$extractUsernameAndDiscriminator.getDiscriminator().intValue()); sendFriendRequest(access$extractUsernameAndDiscriminator.getUsername(), access$extractUsernameAndDiscriminator.getDiscriminator().intValue());
return; return;
@ -168,7 +168,7 @@ public final class WidgetFriendsAddById extends AppFragment {
charSequence = b.g(context, 2131886262, new Object[]{access$extractUsernameAndDiscriminator.getUsername()}, null, 4); charSequence = b.g(context, 2131886262, new Object[]{access$extractUsernameAndDiscriminator.getUsername()}, null, 4);
} }
setInputEditError(charSequence); setInputEditError(charSequence);
AnalyticsTracker.INSTANCE.friendRequestFailed("Invalid Username"); AnalyticsTracker.INSTANCE.friendRequestFailed(textOrEmpty, access$extractUsernameAndDiscriminator.getUsername(), access$extractUsernameAndDiscriminator.getDiscriminator(), "Invalid Username");
} }
private final WidgetFriendsAddByIdBinding getBinding() { private final WidgetFriendsAddByIdBinding getBinding() {

View file

@ -218,7 +218,9 @@ public final class WidgetGuildInvite extends AppFragment {
super.onViewBound(view); super.onViewBound(view);
setRetainInstance(true); setRetainInstance(true);
AppFragment.setActionBarDisplayHomeAsUpEnabled$default(this, false, 1, null); AppFragment.setActionBarDisplayHomeAsUpEnabled$default(this, false, 1, null);
AnalyticsTracker.INSTANCE.inviteViewed(); String stringExtra = getMostRecentIntent().getStringExtra("EXTRA_CODE");
this.inviteCode = stringExtra;
AnalyticsTracker.INSTANCE.impressionInviteAccept(stringExtra);
getBinding().f1797c.setOnClickListener(new WidgetGuildInvite$onViewBound$1(this)); getBinding().f1797c.setOnClickListener(new WidgetGuildInvite$onViewBound$1(this));
} }

View file

@ -332,7 +332,7 @@ public final class WidgetSettings extends AppFragment implements OnTabSelectedLi
TextView textView = binding.f; TextView textView = binding.f;
m.checkNotNullExpressionValue(textView, "appInfoHeader"); m.checkNotNullExpressionValue(textView, "appInfoHeader");
String string = getString(2131886360); String string = getString(2131886360);
textView.setText(string + " - 82.16 - Beta (82116)"); textView.setText(string + " - 82.18 - Beta (82118)");
binding.f1921y.setOnClickListener(new WidgetSettings$onViewBound$$inlined$with$lambda$2(this)); binding.f1921y.setOnClickListener(new WidgetSettings$onViewBound$$inlined$with$lambda$2(this));
binding.u.setOnClickListener(WidgetSettings$onViewBound$1$4.INSTANCE); binding.u.setOnClickListener(WidgetSettings$onViewBound$1$4.INSTANCE);
binding.q.setOnClickListener(WidgetSettings$onViewBound$1$5.INSTANCE); binding.q.setOnClickListener(WidgetSettings$onViewBound$1$5.INSTANCE);

View file

@ -1341,7 +1341,7 @@
<string name="color_picker_presets">Presets</string> <string name="color_picker_presets">Presets</string>
<string name="color_picker_title">Select a color</string> <string name="color_picker_title">Select a color</string>
<string name="color_picker_transparency">Transparency</string> <string name="color_picker_transparency">Transparency</string>
<string name="res_2131887421_com_crashlytics_android_build_id">26f7c0da6ddc4256af0f4fc97b3bdbc6</string> <string name="res_2131887421_com_crashlytics_android_build_id">0146ece4315f4f91be4f78115e7e8d48</string>
<string name="coming_soon">Coming Soon</string> <string name="coming_soon">Coming Soon</string>
<string name="command_accessibility_desc_app_header_item">Slash command application {applicationName}</string> <string name="command_accessibility_desc_app_header_item">Slash command application {applicationName}</string>
<string name="command_accessibility_desc_app_item">{applicationName} application</string> <string name="command_accessibility_desc_app_item">{applicationName} application</string>