Skip to content

Releases: cmeng-git/atalk-android

5.1.0

05 Jan 03:00

Choose a tag to compare

  • Implement shutdown for all Executor.Service after the assigned task is completed.

5.0.0

27 Dec 01:37

Choose a tag to compare

  • Remove feature support for XEP-0364: Current Off-the-Record Messaging Usage partial implementation
  • Must set YT parameter 'origin' to other than YT site i.e.'https://www.youtube.com'; else embed video player has error
  • Incorrect extraction of youtube video Id e.g. https://youtu.be/qwlnX6YJrt8?si=sgdxTEb7kccLplx-
  • Support YT playback of playlist i.e. url contains 'list=' or playlist without 'PL' prefix
  • Display new changes since version installed on device to user in apk update dialog prompt.
  • Fix exception error MamVersion.fromNamespace(mamPrefsIq.getChildElementNamespace())
  • Fix AvatarData cannot be cast to org.jivesoftware.smack.packet.ExtensionElement
  • Revert to use AsyncTask from ExecutorService for AccountInfoPresenceActivity; unknown ANR from field:
    AccountInfoPresenceActivity$$ExternalSyntheticThrowIAE2.m (D8$$SyntheticClass)
  • Change aTalk.doap file to reflect actual version i.e. 0.3 implemented for XEP-0384: OMEMO Encryption

4.6.1

20 Nov 02:06

Choose a tag to compare

  • Enable an important debug message i.e. 'The provider state changed...' to be printed in release version.
  • OperationSetBasicInstantMessagingJabberImpl#onCarbonCopyReceived: Skip handling of empty msgBody for all incoming message, in case Jid is null from FFR

4.6.0

14 Nov 03:12

Choose a tag to compare

  • Port aTalk to use smack 4.5.0-rc1 release
  • Set aTalk minSdkVersion = 26 and sourceCompatibility JavaVersion.VERSION_11 to be compatible with smack 4.5.0
  • Fix JingleFile function call HashManager.getMessageDigest(algorithm) throws NoSuchAlgorithmException: SHA3-256;
    OSGiService makes direct call to smack SecurityUtil.ensureProviderAtFirstPosition(BouncyCastleProvider.class);
    Smack 4.5.0 exclude openpgp in build, causing FileNoFound during smack init. hence 'BC' order is not set.
    See Smack 4.5.0-beta9: JingleFile function call HashManager.getMessageDigest(algorithm) throws NoSuchAlgorithmException: SHA3-256
    https://discourse.igniterealtime.org/t/smack-4-5-0-beta9-jinglefile-function-call-hashmanager-getmessagedigest-algorithm-throws-nosuchalgorithmexception-sha3-256/96162- Remove XMPP-Bosh patch for reconnection failure on network changed - implemented in smack 4.5.0.
  • Change aTalk smack classes to extends XmlElement in place of ExtensionElement where possible.
  • Need to add configuration {all*.exclude group: 'xpp3', module: 'xpp3' and 'xpp3_min'} to resolve duplicate class during build.
  • Do not crash the aTalk app when creating account over insecure connection; show error message instead.
  • Rename IBRCaptchaProcessDialog to IBRProcessDialog; must handle registration for both with/without Captcha Protection;
    Must allow user to click the submit button for IB Register when without captcha protection.
  • Proceed to purge local user registration record only if serverAccountDeletion is successful.
  • Optimize AccountInfoPresenceActivity implementation to minimize views dynamic settings programmatically.
  • Cleanup and update aTalk.doap file.
  • Remove 'com.jakewharton.threetenabp:threetenabp:1.4.9' dependency; Duration is supported in API-26
  • Remove all aTalk source support for < API-26 build support i.e. (Build.VERSION.SDK_INT < Build.VERSION_CODES.O)
  • Upgrade libraries org.bouncycastle:xxx-jdk18on:1.79 and org.jitsi:zrtp4j-light:4.1.3 etc
  • Remove patch for ejabberd <= 23.01; it sends presence's 'photo' element with no hash value, after user published a new avatar.
  • aTalk v4.6.0 is the last version to support OTR. OTR will be removed in aTalk 5.0.0 or later releases.

*** Observation with no solution implemented: ***

  • Some android devices seem unable to handle properly display info setup (TooManyViews) in AccountInfoPresenceActivity,
    causing ANR in FFR i.e. AccountInfoPresenceActivity$$ExternalSyntheticThrowIAE2.m

    • Do not check isDetailClassEditable() and isDetailClassSupported()
    • Simplify the views dynamic settings programmatically, and fixed them in layout xml;
  • aTalk cannot send file to own self using JingleFile Transfer or Legacy Si file transfer.

  • Jarjar repackage errors for smack-experimental, smack-extensions and smack-omemo;
    ignored as all the jarjar repackaged files creation are OK. e.g.
    UnsupportedOperationException: NestHost requires ASM7
    UnsupportedOperationException: NestMember requires ASM7

  • aTalk uses PlugInManager to add custom code or to remove unimplemented jmf default codecs:
    However PlugInManager.getPlugInList(), the instantiate class will immediately trigger static method that execute
    getPluginInfo(className) hence showing 'Problem loading plugin ...". By design???

4.5.3

09 Oct 02:55

Choose a tag to compare

  • Last AccountInfoPresenceActivity$DetailsLoadWorker fix seems not effective. Move some tasks execution out of the UI thread;
  • Also change all its other tasks (~400mS) to run under ExecutorService thread; seems not required to runOnUiThread.
  • Reset hasChanges to false on first entry to AccountInfoPresenceActivity$DetailsLoadWorker.
  • Migrate more deprecated method onBackPressed to use OnBackPressedCallback.
  • Update aTalk.doap and README.md files.

4.5.1

04 Sep 00:17

Choose a tag to compare

  • Fix XMPP-Bosh reconnection failure on network changes; Need to set XMPPBOSHConnection#isFirstInitialization to true on network close on error.
  • Set ndkVersion = '28.2.13676358' in build.gradle
  • Clean up NDK build script files for vpx etc.

4.5.0

28 Aug 04:31

Choose a tag to compare

  • Upgrade jni libraries:
    • libvpx 1.15.2 <= 1.13.1
    • opus 1.5.2 <= 1.3.2
    • openssl 3.5.2 <= 1.1.1t
  • Fix cast exception introduced in 4.0.0 when apply fix for duplicate sending of the initial stanza by smack ServiceDiscoveryManager.
    Cause Bosh connection to crash. Need to cast to common base class in isSendPresence = ((AbstractXMPPConnection) connection).getConfiguration().isSendPresence()
  • Fix endless loop in discoverInfoNonBlocking at times, caused by BareJid discInfo access; Block all BareJid discoInfo access.
  • Fix notification replied message not shown in chatSession UI, until it is closed and reopen.
  • Jni scripts clean up, and Standardize jni *.mk naming convention.
  • Update openssl jni scripts to take care of new library releases in version checking
  • Change build.gradle task names to properly reflect the actual tasks performed.
  • Add new Finnish (suomi) language support

*** Observation with no solution implemented: ***

  • Upon debug install, sometimes smack does not receive incoming messages (no logcat), until aTalk is open.
    ChatState receive is normal.
  • libvpx build process
  1. Building of libvpx using build.make.Android_ndk.mk does not work
    a. build.make.Android.mk info errors:
  • comments in Android.mk is outdated i.e. sdk-path is invalid
  • set APP_ABI e.g. "arm64-v8a" to match the --target passed to configure ??? TARGET use internal defined variables i.e. "arm64-android-gcc".
  1. BUILD_PFX must be specified and exported during configure
  2. make: *** No rule to make target 'vp8_rtcd.h', needed by 'vpx/vpx_config.c' etc...

4.4.0

14 Jul 01:50

Choose a tag to compare

  • Upgrade aTalk to support Android-16 Baklava (API-36) with the following changes:
  • add org.gradle.configuration-cache=false in gradle.properties
  • Remove tools:replace="android:allowBackup,android:label" in manifest file.
  • add plugins {id 'org.gradle.toolchains.foojay-resolver-convention' version '1.0.0'} in settings.gradle
  • Third party libraries upgraded to latest compatible version for API-36:
    • core-ktx: 1.16.0 <= 1.13.1
    • activity-ktx:1.10.1 <= 1.9.3
    • media3-exoplayer:1.7.1 <=> 1.4.1
    • media3-ui:1.7.1 <= 1.4.1
    • threetenabp:1.4.9 <= 1.4.2
    • libphonenumber:9.0.9 <= 8.12.29
    • okhttp:5.1.0 <= 5.0.0-alpha.16
    • commons-text:1.13.1 <= 1.10.0
    • apache-mime4j-core:0.8.12 <= 0.8.9
    • bcpg-jdk15on:1.70, bcpkix-jdk15on:1.70 bctls-jdk15on:1.70 <= 1.65
    • jmdns:3.6.1 <= 3.5.7
    • osmdroid-android:6.1.20 <= 6.1.17
    • lifecycle-runtime-ktx:2.9.1 <= 2.7.0
    • appcompat:1.7.1 < 1.7.0
    • recyclerview:1.4.0 <= 1.3.2
  • Build aTalk with support for 16 KB devices; Compile aTalk jni libraries using 16 KB ELF alignment
  • Add support to properly handle EdgeToEdge overlay content in aTalkApp; not compatible with aTalk.
  • Received muc message incorrectly classified as outgoing message; introduced in 4.3.0 release.
  • Fix auto normal/omemo switching on received omemo message; errors introduced during MenuProvider migration.
  • Remove ContentEditText class; Implement ChatController using OnReceiveContentListener interface instead.
  • ReImplement FullScreenHelper for aTalk usage and to remove all deprecated functions.
  • Replace deprecated ProgressDialog with aTalk customized ProgressDialog implementation.
  • Replace deprecated NetworkInfo with networkCapabilities to check for VPN connection in AndroidUsingLinkProperties.
  • Migrate deprecated intent.getSerializableExtra() to IntentCompat.getSerializableExtra(), and
    bundle.getSerializable() to BundleCompat.getSerializable().
  • Replace TimePicker deprecated method calls.
  • ReImplement TouchInterceptor or avoid use of deprecated function calls.
  • Reimplement OsmActivity using NetworkCallback instead of BroadcastReceiver.
  • Update deprecated function calls in Smack libraries.

*** Observation with no solution implemented:

  • AppGUIActivator.getContactListService() (registered in ContactlistActivator) in ChatSessionManager has null reference
    on start debug - SDK JIT problem? not fixed
  • JNI static_library_built still using ndk/22.1.7171670; problem with ndk/28.1.13356709
    e.g. llvm-strip: error: 'common/arm/quant-a-10.o': not stripping symbol 'mask_2bit' because it is named in a relocation

4.3.1

21 Jun 02:47

Choose a tag to compare

  • Cleanup and fix all errors for Provisioning implementation classes.
    Add new provisioning settings support in aTalk e.g. EXPERT_SETTING_DISABLED, PROVISIONING_DISABLED etc
    Cleanup and fix all errors in Provisioning implementation classes.
    See https://cmeng-git.github.io/atalk/faq.html#feature_16
  • Relocate 'Provisioning' menu to root UI Settings..., delink it from 'Expert settings'
  • Use ConfigEditText to ensure the preference UI is filled and shown the stored value on open without using summaryMapper;
    When use, both preference "android:key" and the stored parameters must use the same name, else store will have extra "android:key" parameter.
  • ProvisioningSettings and ProvisioningServiceImpl variables must be in sync for proper saving and retrieval.
  • Allow user entry of username and password in provisioning setting for server authentication.
  • Rename HttpConnectionManager to OkhttpUtils; cleanup and fix all implementation errors for provisioning use. Remove httpUtils.
  • Remove unused classes LazyConfigurationForm, ConfigurationForm, ProvisioningForm, and MediaConfigurationService.
  • Improper Base64Encoded password in DB causes crash in CredentialsStorageServiceImpl#movePasswordProperty()
  • Create style_pref_button to ease user in preference button identification.

4.3.0

19 May 02:21

Choose a tag to compare

  • Show Badge indicator on incoming file request; to ease user identification of the sender in contact list main UI.
  • Enable HeadsUp notification for incoming file transfer request to alert user when device is in standby;
    Launch 'App Info...' settings, user must update the File Transfer Notification settings.
    See https://developer.android.com/develop/ui/views/notifications/channels#UpdateChannel.
  • Ensure multiple files send/receive for HTTPFileUpload, JingleFileSend and Legacy Bytestream transfer protocols are handled properly; improve UI and process reliability.
  • Must re-init all UI button actions whenever the xFileConversationForm is called on UI refresh; as inflateViewForFileTransfer() will change their references.
  • Fix ConcurrentModificationException in JingleS5BTransportCandidateImpl#connectToCandidates() checking.
  • Change to use TOTAL_CONNECTION_TIMEOUT (10s) for each candidate in establishBytestreamSession checking.
  • Do not set file sending/receiving state as History Record while it is still active;
    else any UI refresh will interrupt file transfer, although file transfer may still running in background.
    This happen when send/receive new text or during multiple files receiving.
  • Must create file record in DB for proper HTTP file download process update; else the cached info is destroyed when user closes the chat session.
  • Use Math.max(COLUMN_TOTAL_SIZE_BYTES, COLUMN_BYTES_DOWNLOADED_SO_FAR) for HttpFileDownloadJabberImpl#queryFileSize();
    later is found to contain file size, and COLUMN_TOTAL_SIZE_BYTES always return 0. Download Manager implementation error?
  • Improve and clean up HttpFileDownloadJabberImpl implementation e.g. progress query by Id instead of status.
  • Must implement HttpFileDownloadJabberImpl#getTransferredBytes for proper HttpFileDownload progressBar update.
  • Implement and support XEP-0066: Out of Band Data sending in Http file transfer in contact or muc chat session.
  • Ensure the file transfer UI is shown (post delay 0.5S) before proceed to auto accept file transfer if enabled.
  • Fix progressBar indicator not properly updated when the received file size in unknown in HttpFileDownload process.
  • Do not constraint the IncomingFileTransferJingleImpl#progress() update with 10mS UPDATE_INTERVAL;
    else final rwBytes may not be reflected in the UI progressBar.
  • Ensure all message event ID's in outgoing file transfer are in sync with the file record saved in database for proper status update.
  • When file transfer form is first created, it must check that (getXferStatus() == FileTransferStatusChangeEvent.UNKNOWN)
    before start any file send/received process. else file transfer may get repeated in UI.
  • Ensure all status definitions in both FileTransferStatusChangeEvent and FileRecord are in sync for correct status tracking.
  • Ensure the transport candidates use in file transfer are properly refreshed when the device active network connection is changed.
  • Avoid using static mBuilder for both JingleContentDescription and JingleContentTransport; else multiple JingleFileTransfer will interference with each other.
  • JingleSessionImpl#jingleSessionListeners cannot be static; otherwise updateSessionState will interfere with each other in multiple files transfer.
  • During multiple Jingle files receive, sometimes has the following exception ('session-accept' sent twice):
    JingleIncomingFileOffer.onBytestreamReady() Cannot get InputStream from BytestreamSession:
    java.net.SocketException: Socket is closed java.net.SocketException: Socket is closed
    The problem is due to Recipient send accept twice - problem fixed.
  • Legacy file transfer uses the same instance of OperationSetFileTransferJabberImpl to send file with the same NegotiationProgress status callback;
    hence unable to support multiple files transfer. Use difference NegotiationProgress for each OutgoingFileTransferJabberImpl to fix the problem.
  • Need to block the unexpected delayed info messages on HttpFileDownload send from server multiple times; else repeated UI requests user to accept file.
  • Add serverMsgId and remoteMsgId value to the file history record in the database; to check for unexpected delay info messages send from server.
  • Ignore any empty body forward message received during MamQuery process update.
  • Fix ChatState notifications not handle properly in MUC chat session.
  • Save last send/received message timestamp into mamDate in session record, avoid deleted messages reappear in UI when user relaunch aTalk.
    When last send/received message are purged, then user exit/terminate aTalk. All the purged messages will get retrieved via mamQuery.
    This is because the last message timeStamp is not saved into the session mamDate, and last cached info is destroyed on exit.
  • Use OriginIdElement as msgUid if the received message does not contain the msgId.
  • Move subclass common CameraCaptureSession.StateCallback into base class CameraStreamBase.
  • Replace deprecated option menu setHasOptionsMenu() implementation with MenuProvider.
  • Replace deprecated FragmentPagerAdapter with FragmentStateAdapter for the main aTalk MainPagerAdapter.
  • Add Arabic language support.

*** Observation with no solution implemented:

  • Share from other app works only if aTalk is active (aTalk must be launched and registered on the network);
    Requires aTalk to be registered with network, also onCreateView() is not being called when aTalk is inactive.
  • Sometimes JingleFileTransfer request is not received by recipient; and sender abort after 10s timeout; Then the sender fallback to other methods.
    Sometimes aTalk does not receive JingleIncomingFileOffer messages (missing in logcat) after a new build debug. Other Jingle request is ok.
  • During multiple files send process, all FileSendConversation UI must be brought/scrolled into view before the file sending is triggered.
  • During multiple file send, the 'session-initiate' may not be sent if the sender UI is not in view.
    User has to scroll the UI into view to start. Waiting for UI status to complete the update.
  • On file send error, a 'retry' option is offered. However this option is cleared if the user scrolls, and the UI get refresh as History record.