~singpolyma/cheogram-android

Fix DTMF causes track to become disposed
42c09f4e — Daniel Gultsch 1 year, 2 months ago
use setText instead of append()
214b3d4c — Daniel Gultsch 1 year, 1 month ago
expand emoji range to cover e14
Merge branch 'color-resources' of git.sr.ht:~hdasch/cheogram-android

* 'color-resources' of git.sr.ht:~hdasch/cheogram-android:
  Fix ColorResourcesTableCreator creation exception.
Throttle BobTransfer re-attempts
Fix ColorResourcesTableCreator creation exception.

A java.lang.ArrayIndexOutOfBoundsException is thrown the third,
and subsequent times, ThemeHelper.applyCustomColors() is called.

,----
| java.lang.ArrayIndexOutOfBoundsException: src.length=128 srcPos=0 dst.length=131 dstPos=2 length=-128
`----

One way to trigger this is to call
ConversationsOverviewFragment.onStart() three times.  For example,
open the app then, three dot menu -> Settings, back, three dot menu ->
Settings, back.

The exception is raised at line ColorResourcesTableCreator.java:616.
So, stringToByteArrayUtf8() is ill prepared to deal with a string
longer than 127 bytes.

While the cast to signed byte is the immediate cause of the exception,
the root cause is growth of the ColorResource name string as the
package name is prepended to the color resource name on each pass
through ColorResourceTableCreator.create().  Using
Resource.getResourceEntryName() instead of Resource.getResourceName()
prevents this.

For the record, here’s the Exception stack trace:

2023-03-23 23:18:34.592   622-622   ColorResou...derCreator com.cheogram.android                 E  Failed to create the ColorResourcesTableCreator.
                                                                                                    java.lang.ArrayIndexOutOfBoundsException: src.length=128 srcPos=0 dst.length=131 dstPos=2 length=-128
                                                                                                    	at java.lang.System.arraycopy(Native Method)
                                                                                                    	at com.cheogram.android.ColorResourcesTableCreator.stringToByteArrayUtf8(ColorResourcesTableCreator.java:616)
                                                                                                    	at com.cheogram.android.ColorResourcesTableCreator.access$800(ColorResourcesTableCreator.java:40)
                                                                                                    	at com.cheogram.android.ColorResourcesTableCreator$StringPoolChunk.processString(ColorResourcesTableCreator.java:299)
                                                                                                    	at com.cheogram.android.ColorResourcesTableCreator$StringPoolChunk.<init>(ColorResourcesTableCreator.java:223)
                                                                                                    	at com.cheogram.android.ColorResourcesTableCreator$PackageChunk.<init>(ColorResourcesTableCreator.java:347)
                                                                                                    	at com.cheogram.android.ColorResourcesTableCreator$ResTable.<init>(ColorResourcesTableCreator.java:140)
                                                                                                    	at com.cheogram.android.ColorResourcesTableCreator.create(ColorResourcesTableCreator.java:114)
                                                                                                    	at com.cheogram.android.ColorResourcesLoaderCreator.create(ColorResourcesLoaderCreator.java:45)
                                                                                                    	at eu.siacs.conversations.utils.ThemeHelper.applyCustomColors(ThemeHelper.java:67)
                                                                                                    	at eu.siacs.conversations.ui.ConversationsActivity.onStart(ConversationsActivity.java:658)
                                                                                                    	at android.app.Instrumentation.callActivityOnStart(Instrumentation.java:1455)
                                                                                                    	at android.app.Activity.performStart(Activity.java:8076)
                                                                                                    	at android.app.ActivityThread.handleStartActivity(ActivityThread.java:3660)
                                                                                                    	at android.app.servertransaction.TransactionExecutor.performLifecycleSequence(TransactionExecutor.java:221)
                                                                                                    	at android.app.servertransaction.TransactionExecutor.cycleToPath(TransactionExecutor.java:201)
                                                                                                    	at android.app.servertransaction.TransactionExecutor.executeLifecycleState(TransactionExecutor.java:173)
                                                                                                    	at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:97)
                                                                                                    	at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2210)
                                                                                                    	at android.os.Handler.dispatchMessage(Handler.java:106)
                                                                                                    	at android.os.Looper.loopOnce(Looper.java:201)
                                                                                                    	at android.os.Looper.loop(Looper.java:288)
                                                                                                    	at android.app.ActivityThread.main(ActivityThread.java:7839)
                                                                                                    	at java.lang.reflect.Method.invoke(Native Method)
                                                                                                    	at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:548)
                                                                                                    	at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1003)
Delay showing command bar on refreshes

To prevent flickering when the other side says it has commands but doesn't.
Tags haven't been "read-only" for awhile
Respect tag visibility setting more often
Fetch and render vcard4
Allow experimental suffix/prefix-label extensions
type of null means text-single which is surely fillable
Build release aab for playstore as well
Add system name and groups when adding a contact for the first time
Dedup across system tags and server tags
Update some screenshots
Next