Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
84 commits
Select commit Hold shift + click to select a range
ef2d409
Update string files after removing translatable=false
SteveJosephh21 May 21, 2026
d18ac52
Add language translations for Portuguese (pt), Russian (ru), Spanish …
Hales-Sparrow Jun 1, 2026
7562ffa
Add language translations for Arabic (ar), Chinese (zh), German (de),…
SteveJosephh21 Jun 1, 2026
247170d
Remove localized changelog translation files
SteveJosephh21 Jun 2, 2026
d0d5d9b
Added choose language screen with language switching support
Hales-Sparrow Jun 3, 2026
9ea63ae
Conflicts resolved
Hales-Sparrow Jun 3, 2026
bc34253
Update layouts and drawables for proper RTL rendering
SteveJosephh21 Jun 3, 2026
d3b0088
Add custom scrollbar color for scrolling widget
SteveJosephh21 Jun 4, 2026
d265d2f
Added device language detection and language preference storage
Hales-Sparrow Jun 5, 2026
bacddab
Added device language detection and language preference storage
SteveJosephh21 Jun 5, 2026
938a9a9
Fix and Improved device language detection
Hales-Sparrow Jun 8, 2026
dbf8cb8
Refactored device language detection and Added common activity base c…
Hales-Sparrow Jun 10, 2026
376631c
Removed unnecessary activity restart
Hales-Sparrow Jun 10, 2026
1f32ba3
Fix crash issue while picking media
Hales-Sparrow Jun 12, 2026
ba2d053
Fix profile picture update issue after nickname change and add space …
Hales-Sparrow Jun 12, 2026
5912852
Fix: Profile picture update issue after nickname change
Hales-Sparrow Jun 16, 2026
4e39c9c
Updated name patterns to support all languages
Hales-Sparrow Jun 16, 2026
7679439
Conflicts resolved
Hales-Sparrow Jun 17, 2026
c7d0bdc
Update color codes
Hales-Sparrow Jun 18, 2026
e810f3c
Replace hardcoded strings with string resources in Shared Contact vie…
Hales-Sparrow Jun 18, 2026
c4d0e41
Add language translations for Arabic (ar), Chinese (zh), German (de),…
Hales-Sparrow Jun 19, 2026
7b28517
Add language translations for Arabic (ar), Chinese (zh), German (de),…
Hales-Sparrow Jun 23, 2026
42fd11a
Remove unnecessary quotes from translations
Hales-Sparrow Jun 23, 2026
7c26e6c
Refactored Edit Group Title string resources
Hales-Sparrow Jun 25, 2026
10d0104
Updated string resources
Hales-Sparrow Jun 25, 2026
f723544
Fix resource loading by using a localized context
Hales-Sparrow Jun 26, 2026
8d2ad7e
Updated string resources
Hales-Sparrow Jun 26, 2026
42225dd
Updated string resources
Hales-Sparrow Jun 27, 2026
9e14beb
Updated plural resource quantities for Arabic (ar), Chinese (zh), Jap…
Hales-Sparrow Jun 29, 2026
fce0773
Prevented crash when long-pressing images in All Media
Hales-Sparrow Jul 2, 2026
635f1f8
Fix content display issues
Hales-Sparrow Jul 2, 2026
c3e95ef
Fix UI alignment for icons and text
Hales-Sparrow Jul 3, 2026
aa0126a
Fix content alignment issue
Hales-Sparrow Jul 3, 2026
f185dc1
Fix content alignment issue
Hales-Sparrow Jul 3, 2026
358a456
Updated community guidelines
Hales-Sparrow Jul 3, 2026
bd9d233
Fix content display issues
Hales-Sparrow Jul 3, 2026
84d7acb
Added translatable text for empty contacts state
Hales-Sparrow Jul 7, 2026
f2a3ecd
Fix special character issue in "Read More" and "Read Less" text
Hales-Sparrow Jul 7, 2026
6f8027a
Fix icon and option text alignment
Hales-Sparrow Jul 7, 2026
a3629b3
Fix content alignment issues
Hales-Sparrow Jul 7, 2026
ae5f31b
Updated contents
Hales-Sparrow Jul 7, 2026
1cf830c
Fix missing AM/PM timestamp localization across supported languages
Hales-Sparrow Jul 8, 2026
f5e13ef
Fix localization update for deleted message content
Hales-Sparrow Jul 8, 2026
ecaf0d2
Fix crash when saving received voice messages to storage
Hales-Sparrow Jul 8, 2026
6a785ee
Fix "Failed" status not updating after language change
Hales-Sparrow Jul 8, 2026
04cbd83
Added context parameter for "Report Issue" translations
Hales-Sparrow Jul 9, 2026
9a4f499
Fix translation issues and add spacing between Community Guidelines a…
Hales-Sparrow Aug 21, 2026
dc615ba
Fix Read More and Read Less overlap with message timestamp
Hales-Sparrow Aug 21, 2026
b0d44c3
Fix spacing between Bchat text and theme toggle button in menu drawer
Hales-Sparrow Aug 21, 2026
0034a61
Fix localization issues after changing app language
Hales-Sparrow Aug 21, 2026
8664851
Conflicts resolved
Hales-Sparrow Aug 26, 2026
f8d0405
Latest UI updated in WebRTC call screen
Hales-Sparrow Aug 27, 2026
9b64c8e
Fix alignment issue for "No blocked contacts yet" content
Hales-Sparrow Aug 28, 2026
28253b9
Fix UI text clipping
Hales-Sparrow Aug 28, 2026
9030bb0
Content Updated
Hales-Sparrow Aug 28, 2026
ff8220c
Upgrade EventBus dependency version
Hales-Sparrow Aug 28, 2026
868765c
Fix Attachment and Voice Message language translation in Home Screen
Hales-Sparrow Aug 29, 2026
e0f2bf3
Fix Message Input Placeholder Wrapping in Media Send Screen
Hales-Sparrow Aug 29, 2026
a18b686
Fix Camera Icon Overlap with Done Button in Settings Screen
Hales-Sparrow Aug 29, 2026
826c5d1
Fix No Media Items Content Alignment in All Media Screen
Hales-Sparrow Aug 29, 2026
7f353dd
Fix Unarchive Chat and Mark As Read Text Wrapping in Archive Chat Screen
Hales-Sparrow Aug 29, 2026
3d7e76b
Fix text clipping
Hales-Sparrow Aug 29, 2026
c52e925
Fix UI Alignment issues
Hales-Sparrow Aug 31, 2026
1ed023b
Fix Kotlin UninitializedPropertyAccessException
Hales-Sparrow Aug 31, 2026
d5b04de
Fix Social Group Invitation Message Card Visibility
Hales-Sparrow Aug 31, 2026
dbc096e
Update BaseComponentActivity and UI updated
Hales-Sparrow Sep 2, 2026
34f136c
Fix content alignment in Social Group Guidelines View
Hales-Sparrow Sep 2, 2026
9827c7d
Fix UI text clipping and Icon Updated
Hales-Sparrow Sep 2, 2026
e13aa7b
Fix Notification Bar content translation for latest languages
Hales-Sparrow Sep 8, 2026
6805738
Fix Notification Show Popup content visibility
Hales-Sparrow Sep 8, 2026
fee7c16
Fix Edit Group heading translation across all languages
Hales-Sparrow Sep 8, 2026
abe64ce
Fix Call Screen UI alignment issues
Hales-Sparrow Sep 8, 2026
11e375e
Added scrolling for muted content in chat screen
Hales-Sparrow Sep 10, 2026
e1a6447
Updated custom call notification UI
Hales-Sparrow Sep 10, 2026
f726787
Fix text clipping in Account Settings screen
Hales-Sparrow Sep 10, 2026
4bff6ae
Fix message view overlap with Menu/Emoji options on long press
Hales-Sparrow Sep 10, 2026
327567a
Updated content
Hales-Sparrow Sep 11, 2026
d8e36ff
Fix text clipping and remove Arabic language
Hales-Sparrow Sep 11, 2026
ea6dfd5
Added custom toast for large content view
Hales-Sparrow Sep 11, 2026
4afbe0c
User can now enable/disable onion routing for message routing.
Hales-Sparrow Sep 11, 2026
ebd989c
Updated Context and String resources
Hales-Sparrow Sep 16, 2026
14ecd2d
Added support for App Bundle
Hales-Sparrow Sep 16, 2026
c037ed5
Updated version 3.0.0 (103)
Hales-Sparrow Sep 16, 2026
7bbb09e
Merge pull request #144 from Beldex-Coin/feature-language-translation
codeman-crypto Sep 17, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
19 changes: 15 additions & 4 deletions app/build.gradle
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
apply plugin: 'com.android.application'
apply plugin: 'kotlin-android'
apply plugin: 'org.jetbrains.kotlin.android'
apply plugin: 'witness'
apply plugin: 'com.google.devtools.ksp'
apply plugin: 'kotlin-parcelize'
Expand All @@ -13,15 +13,17 @@ apply plugin: 'org.jetbrains.kotlin.plugin.compose'
configurations.all {
exclude module: "commons-logging"
}
def canonicalVersionCode = 99
def canonicalVersionName = "2.9.8"
def canonicalVersionCode = 103
def canonicalVersionName = "3.0.0"

def postFixSize = 10
def abiPostFix = ['armeabi-v7a' : 1,
'arm64-v8a' : 2,
'x86_64' : 4,
'universal' : 5]

def splitApksEnabled = project.properties["splitApks"] == "true"

android {
useLibrary 'org.apache.http.legacy'

Expand Down Expand Up @@ -49,13 +51,19 @@ android {

splits {
abi {
enable true
enable splitApksEnabled
reset()
include 'armeabi-v7a', 'arm64-v8a', 'x86_64'
universalApk true
}
}

bundle {
language {
enableSplit = false
}
}

defaultConfig {
versionCode canonicalVersionCode
versionName canonicalVersionName
Expand Down Expand Up @@ -90,6 +98,9 @@ android {
cppFlags '-std=c++17'
}
}
ndk {
abiFilters 'armeabi-v7a', 'arm64-v8a', 'x86_64'
}
applicationId 'io.beldex.bchat'
}

Expand Down
6 changes: 3 additions & 3 deletions app/buildGradle/dependencies.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -16,8 +16,8 @@ dependencies {
implementation "androidx.lifecycle:lifecycle-process:$lifecycleVersion"
implementation "androidx.lifecycle:lifecycle-extensions:2.2.0"
implementation "androidx.paging:paging-runtime-ktx:$pagingVersion"
implementation 'androidx.activity:activity-ktx:1.13.0'
implementation 'androidx.activity:activity-compose:1.13.0'
implementation 'androidx.activity:activity-ktx:1.10.1'
implementation 'androidx.activity:activity-compose:1.10.1'
implementation 'androidx.fragment:fragment-ktx:1.9.0'
implementation "androidx.core:core-ktx:$coreVersion"
implementation "androidx.work:work-runtime-ktx:2.11.2"
Expand All @@ -40,7 +40,7 @@ dependencies {
implementation 'androidx.legacy:legacy-support-v4:1.0.0'
ksp "com.github.bumptech.glide:ksp:$glideVersion"
implementation 'com.makeramen:roundedimageview:2.1.0'
implementation 'org.greenrobot:eventbus:3.0.0'
implementation 'org.greenrobot:eventbus:3.3.1'
implementation 'com.vanniktech:android-image-cropper:4.5.0'
implementation("com.google.dagger:hilt-android:$daggerHiltVersion")
ksp("com.google.dagger:hilt-compiler:$daggerHiltVersion")
Expand Down
57 changes: 6 additions & 51 deletions app/playMainNet/release/output-metadata.json
Original file line number Diff line number Diff line change
Expand Up @@ -8,51 +8,12 @@
"variantName": "playMainNetRelease",
"elements": [
{
"type": "UNIVERSAL",
"type": "SINGLE",
"filters": [],
"attributes": [],
"versionCode": 99,
"versionName": "2.9.8",
"outputFile": "Bchat-2.9.8-universal.apk"
},
{
"type": "ONE_OF_MANY",
"filters": [
{
"filterType": "ABI",
"value": "armeabi-v7a"
}
],
"attributes": [],
"versionCode": 99,
"versionName": "2.9.8",
"outputFile": "Bchat-2.9.8-armeabi-v7a.apk"
},
{
"type": "ONE_OF_MANY",
"filters": [
{
"filterType": "ABI",
"value": "x86_64"
}
],
"attributes": [],
"versionCode": 99,
"versionName": "2.9.8",
"outputFile": "Bchat-2.9.8-x86_64.apk"
},
{
"type": "ONE_OF_MANY",
"filters": [
{
"filterType": "ABI",
"value": "arm64-v8a"
}
],
"attributes": [],
"versionCode": 99,
"versionName": "2.9.8",
"outputFile": "Bchat-2.9.8-arm64-v8a.apk"
"versionCode": 103,
"versionName": "3.0.0",
"outputFile": "Bchat-3.0.0-universal.apk"
}
],
"elementType": "File",
Expand All @@ -61,20 +22,14 @@
"minApi": 28,
"maxApi": 30,
"baselineProfiles": [
"baselineProfiles/1/Bchat-2.9.8-universal.dm",
"baselineProfiles/1/Bchat-2.9.8-armeabi-v7a.dm",
"baselineProfiles/1/Bchat-2.9.8-x86_64.dm",
"baselineProfiles/1/Bchat-2.9.8-arm64-v8a.dm"
"baselineProfiles/1/Bchat-3.0.0-universal.dm"
]
},
{
"minApi": 31,
"maxApi": 2147483647,
"baselineProfiles": [
"baselineProfiles/0/Bchat-2.9.8-universal.dm",
"baselineProfiles/0/Bchat-2.9.8-armeabi-v7a.dm",
"baselineProfiles/0/Bchat-2.9.8-x86_64.dm",
"baselineProfiles/0/Bchat-2.9.8-arm64-v8a.dm"
"baselineProfiles/0/Bchat-3.0.0-universal.dm"
]
}
],
Expand Down
18 changes: 0 additions & 18 deletions app/src/main/assets/about.txt

This file was deleted.

11 changes: 11 additions & 0 deletions app/src/main/assets/changeLog.json
Original file line number Diff line number Diff line change
Expand Up @@ -647,6 +647,17 @@
"description":"Minor bug fixes"
}
]
},
{
"title": "3.0.0",
"descriptions": [
{
"description":"Introducing Multi language support in BChat"
},
{
"description":"Minor bug fixes"
}
]
}
]
}
17 changes: 15 additions & 2 deletions app/src/main/java/io/beldex/bchat/ApplicationContext.kt
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ import android.app.Application
import android.app.KeyguardManager
import android.content.Context
import android.content.Intent
import android.content.res.Configuration
import android.os.AsyncTask
import android.os.Handler
import android.os.HandlerThread
Expand All @@ -26,6 +27,7 @@ import com.beldex.libbchat.utilities.ProfilePictureUtilities.upload
import com.beldex.libbchat.utilities.SSKEnvironment.Companion.configure
import com.beldex.libbchat.utilities.TextSecurePreferences
import com.beldex.libbchat.utilities.TextSecurePreferences.Companion.clearAll
import com.beldex.libbchat.utilities.TextSecurePreferences.Companion.getAppSelectedLanguage
import com.beldex.libbchat.utilities.TextSecurePreferences.Companion.getLanguage
import com.beldex.libbchat.utilities.TextSecurePreferences.Companion.getLastProfilePictureUpload
import com.beldex.libbchat.utilities.TextSecurePreferences.Companion.getLocalNumber
Expand All @@ -39,6 +41,7 @@ import com.beldex.libbchat.utilities.TextSecurePreferences.Companion.setRefreshD
import com.beldex.libbchat.utilities.Util.runOnMain
import com.beldex.libbchat.utilities.dynamiclanguage.DynamicLanguageContextWrapper
import com.beldex.libbchat.utilities.dynamiclanguage.LocaleParser.Companion.configure
import com.beldex.libbchat.utilities.dynamiclanguage.LocaleParser.Companion.findBestMatchingLocaleForLanguage
import com.beldex.libsignal.utilities.HTTP.isConnectedToNetwork
import com.beldex.libsignal.utilities.JsonUtil
import com.beldex.libsignal.utilities.Log
Expand Down Expand Up @@ -81,6 +84,7 @@ import io.beldex.bchat.service.KeyCachingService
import io.beldex.bchat.sskenvironment.ProfileManager
import io.beldex.bchat.sskenvironment.ReadReceiptManager
import io.beldex.bchat.sskenvironment.TypingStatusRepository
import io.beldex.bchat.util.AppLanguageEvent
import io.beldex.bchat.util.Broadcaster
import io.beldex.bchat.util.FirebaseRemoteConfigUtil
import io.beldex.bchat.util.UiModeUtilities.setupUiModeToUserSelected
Expand Down Expand Up @@ -356,17 +360,26 @@ class ApplicationContext: Application(), DefaultLifecycleObserver {
}
}

override fun attachBaseContext(base : Context?) {
override fun attachBaseContext(base: Context?) {
initializeLocaleParser()
super.attachBaseContext(
DynamicLanguageContextWrapper.updateContext(
base, getLanguage(
base, getAppSelectedLanguage(
base!!
)
)
)
}

override fun onConfigurationChanged(newConfig: Configuration) {
super.onConfigurationChanged(newConfig)
val appSettingLanguage = findBestMatchingLocaleForLanguage(getLanguage(this))
TextSecurePreferences.setDeviceLanguage(this, appSettingLanguage?.language)
appSettingLanguage?.let { it ->
AppLanguageEvent.update(it.language)
}
}


private class ProviderInitializationException() : RuntimeException()

Expand Down
4 changes: 2 additions & 2 deletions app/src/main/java/io/beldex/bchat/BaseActionBarActivity.java
Original file line number Diff line number Diff line change
Expand Up @@ -58,7 +58,7 @@ protected void onCreate(Bundle savedInstanceState) {
@Override
protected void onResume() {
super.onResume();
DynamicLanguageActivityHelper.recreateIfNotInCorrectLanguage(this, TextSecurePreferences.getLanguage(this));
DynamicLanguageActivityHelper.recreateIfNotInCorrectLanguage(this, TextSecurePreferences.getAppSelectedLanguage(this));
String name = getResources().getString(R.string.app_name);
Bitmap icon = BitmapFactory.decodeResource(getResources(), R.drawable.ic_launcher_foreground);
int color = getResources().getColor(R.color.app_icon_background);
Expand All @@ -78,7 +78,7 @@ protected final boolean handleNavigateUp() {

@Override
protected void attachBaseContext(Context newBase) {
super.attachBaseContext(DynamicLanguageContextWrapper.updateContext(newBase, TextSecurePreferences.getLanguage(newBase)));
super.attachBaseContext(DynamicLanguageContextWrapper.updateContext(newBase, TextSecurePreferences.getAppSelectedLanguage(newBase)));
}


Expand Down
4 changes: 2 additions & 2 deletions app/src/main/java/io/beldex/bchat/BaseActivity.java
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ public abstract class BaseActivity extends FragmentActivity {
@Override
protected void onResume() {
super.onResume();
DynamicLanguageActivityHelper.recreateIfNotInCorrectLanguage(this, TextSecurePreferences.getLanguage(this));
DynamicLanguageActivityHelper.recreateIfNotInCorrectLanguage(this, TextSecurePreferences.getAppSelectedLanguage(this));
String name = getResources().getString(R.string.app_name);
Bitmap icon = BitmapFactory.decodeResource(getResources(), R.drawable.ic_launcher_foreground);
int color = getResources().getColor(R.color.app_icon_background);
Expand All @@ -24,6 +24,6 @@ protected void onResume() {

@Override
protected void attachBaseContext(Context newBase) {
super.attachBaseContext(DynamicLanguageContextWrapper.updateContext(newBase, TextSecurePreferences.getLanguage(newBase)));
super.attachBaseContext(DynamicLanguageContextWrapper.updateContext(newBase, TextSecurePreferences.getAppSelectedLanguage(newBase)));
}
}
27 changes: 27 additions & 0 deletions app/src/main/java/io/beldex/bchat/BaseAppCompatActivity.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
package io.beldex.bchat

import android.content.Context
import androidx.appcompat.app.AppCompatActivity
import com.beldex.libbchat.utilities.TextSecurePreferences.Companion.getAppSelectedLanguage
import com.beldex.libbchat.utilities.dynamiclanguage.DynamicLanguageActivityHelper
import com.beldex.libbchat.utilities.dynamiclanguage.DynamicLanguageContextWrapper


open class BaseAppCompatActivity : AppCompatActivity() {
protected override fun onResume() {
super.onResume()
DynamicLanguageActivityHelper.recreateIfNotInCorrectLanguage(
this,
getAppSelectedLanguage(this)
)
}

protected override fun attachBaseContext(newBase: Context) {
super.attachBaseContext(
DynamicLanguageContextWrapper.updateContext(
newBase,
getAppSelectedLanguage(newBase)
)
)
}
}
26 changes: 26 additions & 0 deletions app/src/main/java/io/beldex/bchat/BaseComponentActivity.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
package io.beldex.bchat

import android.content.Context
import androidx.activity.ComponentActivity
import com.beldex.libbchat.utilities.TextSecurePreferences.Companion.getAppSelectedLanguage
import com.beldex.libbchat.utilities.dynamiclanguage.DynamicLanguageActivityHelper
import com.beldex.libbchat.utilities.dynamiclanguage.DynamicLanguageContextWrapper

open class BaseComponentActivity : ComponentActivity() {
protected override fun onResume() {
super.onResume()
DynamicLanguageActivityHelper.recreateIfNotInCorrectLanguage(
this,
getAppSelectedLanguage(this)
)
}

protected override fun attachBaseContext(newBase: Context) {
super.attachBaseContext(
DynamicLanguageContextWrapper.updateContext(
newBase,
getAppSelectedLanguage(newBase)
)
)
}
}
2 changes: 1 addition & 1 deletion app/src/main/java/io/beldex/bchat/MediaGalleryAdapter.java
Original file line number Diff line number Diff line change
Expand Up @@ -103,7 +103,7 @@ public ItemViewHolder onCreateItemViewHolder(ViewGroup parent, int itemType) {

@Override
public void onBindHeaderViewHolder(StickyHeaderGridAdapter.HeaderViewHolder viewHolder, int section) {
((HeaderHolder)viewHolder).textView.setText(media.getName(section, locale));
((HeaderHolder)viewHolder).textView.setText(media.getName(section, context));
}

@Override
Expand Down
Loading