twidereproject / twiderex-android Goto Github PK
View Code? Open in Web Editor NEWNext generation of Twidere for Android
License: GNU General Public License v3.0
Next generation of Twidere for Android
License: GNU General Public License v3.0
Hey,
can we help you with translation of this app?
Greetz from Germany
Network type:
App version:
I cannot reset the cursor, only mark words. New lines are also not set by pressing the enter key.
Is TwidereX using the same "license" as regular Twidere? Sorry if this isn't the right word for it - I know that 3rd party twitter developers are often forced to close an app to new users because they hit their token limit, would the multiple requests error be associated with this? I can't post or interact with any tweets due to this issue (I understand it might be time gated, just trying to understand how a beta app is already hitting these limits unless it's connected to a previous application or development license)
1.0.0-alpha5
5.1.1
(MIUI)Add option to set custom font file (*.ttf
/*.otf
) for override Android device "hardcoded" Emoji font.
For example, see UnicodePad app which already has such feature (see drop-down line "Font: NotoColorEmoji.ttf
" on screenshot)
TwidereX 1.0.0-alpha5
(and Twidere 4.1.6
too!) has NO option to set custom font for Emoji, and on some devices some emojis are not shown due to limited support of Android device built-in Emoji font:
"Symbola" font with support for latest Emoji/Unicode releases
Please also ship TwidereX on F-Droid
Network type:
App version: 1.0.3
Text looks like "Followers123"
Should be "Followers 123" with a space.
And, possibly, other user data.
When security key is required, jump to the system browser to log in
I am aware of the search tab in Twidere X but that same tab is more like an 'explore' tab in Twitter's official client. It would be nice to see something similar on Twidere X.
Here's how Twitter's Explore Tab looks like:
It would be really useful to stay up-to-date with what's happening/trending on Twitter both regionally and globally.
Neither are showing up
It may be the font setting, it might be the rough first release, but i have my issues with the current look of the new version.
Coming from the original twidere it feels kind of wrong.
I hope you will go for something more similiar with the next releases.
This was tested on a Pocophone F1 running Android 10 based MIUI 12
App version 1.0.5 from Google Play.
When system dark mode is turned on, the app's theming does not work correctly. If dark mode is turned off, both white and dark themes work fine though.
Having Twidere X with dark theme while system dark mode is on results in incorrect theming. Examples below. The white theme won't even function if dark mode is turned on, it just keeps the dark colors instead.
The white and dark theme colors should apply normally regardless of whether system dark mode is turned on or not.
Using the Galaxy Fold 2 the app crashes on startup in both folded and unfolded view.
I sent a crash report.
Network type:
App version:
1.0.0-alpha06
When setting text size to smaller than default, additional spacing appears above and below tweet text, which means tweets end up taking up the same amount of space anyway.
No additional spacing.
Add the ability to RT with an accompanying comment
I'm assuming some of these features will eventually be rolled out regardless of them being added here, I understand the app is still in early stages
As if the tweets were e-mails, it'd be useful to be able to select multiple or all the tweets of a search query. And then allow some actions on them: delete, copy or even like or retweet.
Network type:
App version: 1.0.1
App UI/UX has too much animation per each touch in browsing/stream navigation (like water drops each time touch finger to display, scroll, any event at all)
Just open app and start browsing
Too much "water drop" GLSL animations acted on each touch action in during browsing.
Add option "Disable touch animations".
It will be nice to have edge-to-edge implementation, especially transparent system bars, which is now opaque.
I'm using bitwarden on mobile, which emulates a screen reader to prompt autofilling of passwords.
There's something you did with the login dialogue so that it doesn't work with bitwarden. This could be considered an issue for bitwarden, but I'm opening it here anyways. (I'll open it on the bitwarden repo later.)
Also, the non-X app worked fine with bitwarden, so idk.
When tapping the login box, it should prompt to autofill from bitwarden (even if you have no passwords associated with twitter/twedere.)
Nothing appears when tapping the box. You must go into bitwarden & copy it manually.
(I wrote this on my phone, so if the formatting is dogshit, then I apologize for that. I'll fix it later.)
Android: 5.5.1
Twidere X: 1.0.0-alpha06b
Video: https://files.catbox.moe/4zbkkk.mp4
Add "Clear cache" options for TwidereX, similar to Twidere.
Network type:
App version:
1.0.1
Click any tweets in timeline, The Twidere X will crash
1.Open Twidere X
2.In timeline, Click any tweet.
It's crashed.
Show a tweet details.
--------- beginning of crash
01-18 13:10:45.039 6011 6011 E AndroidRuntime: FATAL EXCEPTION: main
01-18 13:10:45.039 6011 6011 E AndroidRuntime: Process: com.twidere.twiderex, PID: 6011
01-18 13:10:45.039 6011 6011 E AndroidRuntime: MicroBlogException(error=null, request=null, errors=null, httpCode=null)
01-18 13:10:45.039 6011 6011 E AndroidRuntime: at com.twidere.services.http.MicroBlogException$$serializer.deserialize(Unknown Source:179)
01-18 13:10:45.039 6011 6011 E AndroidRuntime: at com.twidere.services.http.MicroBlogException$$serializer.deserialize(MicroBlogException.kt:27)
01-18 13:10:45.039 6011 6011 E AndroidRuntime: at kotlinx.serialization.json.internal.PolymorphicKt.decodeSerializableValuePolymorphic(Polymorphic.kt:63)
01-18 13:10:45.039 6011 6011 E AndroidRuntime: at kotlinx.serialization.json.internal.AbstractJsonTreeDecoder.decodeSerializableValue(TreeJsonDecoder.kt:51)
01-18 13:10:45.039 6011 6011 E AndroidRuntime: at kotlinx.serialization.json.internal.TreeJsonDecoderKt.readJson(TreeJsonDecoder.kt:24)
01-18 13:10:45.039 6011 6011 E AndroidRuntime: at kotlinx.serialization.json.Json.decodeFromJsonElement(Json.kt:104)
01-18 13:10:45.039 6011 6011 E AndroidRuntime: at com.twidere.services.twitter.TwitterService$resources$2$1.invoke(TwitterService.kt:408)
01-18 13:10:45.039 6011 6011 E AndroidRuntime: at com.twidere.services.twitter.TwitterService$resources$2$1.invoke(TwitterService.kt:58)
01-18 13:10:45.039 6011 6011 E AndroidRuntime: at com.twidere.services.twitter.TwitterService$resources$2$$special$$inlined$-addInterceptor$2.intercept(OkHttpClient.kt:563)
01-18 13:10:45.039 6011 6011 E AndroidRuntime: at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.kt:109)
01-18 13:10:45.039 6011 6011 E AndroidRuntime: at com.twidere.services.twitter.TwitterService$resources$2$$special$$inlined$-addInterceptor$1.intercept(OkHttpClient.kt:1080)
01-18 13:10:45.039 6011 6011 E AndroidRuntime: at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.kt:109)
01-18 13:10:45.039 6011 6011 E AndroidRuntime: at com.twidere.services.http.AuthorizationInterceptor.intercept(AuthorizationInterceptor.kt:36)
01-18 13:10:45.039 6011 6011 E AndroidRuntime: at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.kt:109)
01-18 13:10:45.039 6011 6011 E AndroidRuntime: at okhttp3.internal.connection.RealCall.getResponseWithInterceptorChain$okhttp(RealCall.kt:201)
01-18 13:10:45.039 6011 6011 E AndroidRuntime: at okhttp3.internal.connection.RealCall$AsyncCall.run(RealCall.kt:517)
01-18 13:10:45.039 6011 6011 E AndroidRuntime: at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167)
01-18 13:10:45.039 6011 6011 E AndroidRuntime: at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)
01-18 13:10:45.039 6011 6011 E AndroidRuntime: at java.lang.Thread.run(Thread.java:764)
01-18 13:14:12.464 7505 7505 E AndroidRuntime: FATAL EXCEPTION: main
01-18 13:14:12.464 7505 7505 E AndroidRuntime: Process: com.twidere.twiderex, PID: 7505
01-18 13:14:12.464 7505 7505 E AndroidRuntime: MicroBlogException(error=null, request=null, errors=null, httpCode=null)
01-18 13:14:12.464 7505 7505 E AndroidRuntime: at com.twidere.services.http.MicroBlogException$$serializer.deserialize(Unknown Source:179)
01-18 13:14:12.464 7505 7505 E AndroidRuntime: at com.twidere.services.http.MicroBlogException$$serializer.deserialize(MicroBlogException.kt:27)
01-18 13:14:12.464 7505 7505 E AndroidRuntime: at kotlinx.serialization.json.internal.PolymorphicKt.decodeSerializableValuePolymorphic(Polymorphic.kt:63)
01-18 13:14:12.464 7505 7505 E AndroidRuntime: at kotlinx.serialization.json.internal.AbstractJsonTreeDecoder.decodeSerializableValue(TreeJsonDecoder.kt:51)
01-18 13:14:12.464 7505 7505 E AndroidRuntime: at kotlinx.serialization.json.internal.TreeJsonDecoderKt.readJson(TreeJsonDecoder.kt:24)
01-18 13:14:12.464 7505 7505 E AndroidRuntime: at kotlinx.serialization.json.Json.decodeFromJsonElement(Json.kt:104)
01-18 13:14:12.464 7505 7505 E AndroidRuntime: at com.twidere.services.twitter.TwitterService$resources$2$1.invoke(TwitterService.kt:408)
01-18 13:14:12.464 7505 7505 E AndroidRuntime: at com.twidere.services.twitter.TwitterService$resources$2$1.invoke(TwitterService.kt:58)
01-18 13:14:12.464 7505 7505 E AndroidRuntime: at com.twidere.services.twitter.TwitterService$resources$2$$special$$inlined$-addInterceptor$2.intercept(OkHttpClient.kt:563)
01-18 13:14:12.464 7505 7505 E AndroidRuntime: at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.kt:109)
01-18 13:14:12.464 7505 7505 E AndroidRuntime: at com.twidere.services.twitter.TwitterService$resources$2$$special$$inlined$-addInterceptor$1.intercept(OkHttpClient.kt:1080)
01-18 13:14:12.464 7505 7505 E AndroidRuntime: at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.kt:109)
01-18 13:14:12.464 7505 7505 E AndroidRuntime: at com.twidere.services.http.AuthorizationInterceptor.intercept(AuthorizationInterceptor.kt:36)
01-18 13:14:12.464 7505 7505 E AndroidRuntime: at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.kt:109)
01-18 13:14:12.464 7505 7505 E AndroidRuntime: at okhttp3.internal.connection.RealCall.getResponseWithInterceptorChain$okhttp(RealCall.kt:201)
01-18 13:14:12.464 7505 7505 E AndroidRuntime: at okhttp3.internal.connection.RealCall$AsyncCall.run(RealCall.kt:517)
01-18 13:14:12.464 7505 7505 E AndroidRuntime: at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167)
01-18 13:14:12.464 7505 7505 E AndroidRuntime: at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)
01-18 13:14:12.464 7505 7505 E AndroidRuntime: at java.lang.Thread.run(Thread.java:764)
01-18 13:14:12.471 7505 8125 D OSTracker: OS Event: crash
01-18 13:14:12.471 1316 3565 D Embryo_Uterus: over crash limit, add com.twidere.twiderex to black list
Please support threads.
Threads have become very common on Twitter. So common that Twitter provides a help page: How to create a thread on Twitter
However, when I open the first tweet of a thread in Twidere X (or Twidere) the view is very different from the view on Twitter. Twidere shows all the replies to the thread's first tweet, EXCEPT the next tweet of the thread by the original poster (to be fair, the next tweet might be hidden somewhere in the replies ๐คท). In order to get a thread view in Twidere I have to open the last tweet of a thread, but that is not how threads get shared / retweeted on Twitter.
Example:
Start of a thread: https://twitter.com/vanteficient/status/1343925279039893504
How it looks on Twitter (Web):
How it looks in Twidere X:
Network type:
App version:
1.0.0-alpha06
TwidereX app crashes when click at a searched user in search tab.
Users
category buttonApp navigates to the profile view of the selected searched user.
Hey!
It would be great if we had the possibility to show not only mentions but also likes and similar events in the noticications tab.
In Twitter Web you can select between "All Activities" and "Mentions" as shown below. Maybe you can realize this as a toggle button (because having tabs in tabs is bad). Also, the icon of the notifcations tab looks like an icon for direct messages. Maybe think about exchanging it :)
Android 11 Pixel 3 XL SwiftKey
Keyboard doesn't appear after app has been backgrounded for some length of time. Can be solved by force closing and reopening app.
Sometimes the keyboard doesn't show up at all in any of the input areas, other times tapping on a text box causes the keyboard to slide up and then immediately slide back down (very rapid animation)
Will try and test with other keyboards to see if it's SwiftKey only
Network type:
App version:
1.1.0-beta01 (30)
Every time I would view a piece of media (image, video, etc) in a post's reply section (I guess referred to as the twitter "thread"), closing it would reset me back to the OP post (I'd say this is unwanted behavior). I decided to start scrolling super fast to get back to where I was and then this happened.
Here's the stack trace I caught using my Scoop app.
FATAL EXCEPTION: main
Process: com.twidere.twiderex, PID: 7539
java.lang.IndexOutOfBoundsException: Index: 96, Size: 51
at androidx.paging.PagePresenter.checkIndex(PagePresenter.kt:45)
at androidx.paging.PagePresenter.get(PagePresenter.kt:55)
at androidx.paging.PagingDataDiffer.get(PagingDataDiffer.kt:249)
at com.twidere.twiderex.component.lazy.LazyPagingItems.get(LazyPagingItems.kt:116)
at com.twidere.twiderex.component.lazy.LazyStatusListKt$statusesIndexed$2.invoke(LazyStatusList.kt:55)
at com.twidere.twiderex.component.lazy.LazyStatusListKt$statusesIndexed$2.invoke(LazyStatusList.kt:54)
at androidx.compose.runtime.internal.ComposableLambdaImpl.invoke(ComposableLambda.kt:149)
at androidx.compose.runtime.internal.ComposableLambdaImpl.invoke(ComposableLambda.kt:46)
at androidx.compose.foundation.lazy.LazyListScopeImpl$items$1$1.invoke(LazyDsl.kt:175)
at androidx.compose.foundation.lazy.LazyListScopeImpl$items$1$1.invoke(LazyDsl.kt:175)
at androidx.compose.runtime.internal.ComposableLambdaImpl.invoke(ComposableLambda.kt:121)
at androidx.compose.runtime.internal.ComposableLambdaImpl.invoke(ComposableLambda.kt:46)
at androidx.compose.runtime.CompositionLocalKt.CompositionLocalProvider(CompositionLocal.kt:193)
at androidx.compose.runtime.saveable.SaveableStateHolderImpl.SaveableStateProvider(SaveableStateHolder.kt:84)
at androidx.compose.foundation.lazy.LazyListItemContentFactory$CachedItemContent$content$1.invoke(LazyListItemContentFactory.kt:107)
at androidx.compose.foundation.lazy.LazyListItemContentFactory$CachedItemContent$content$1.invoke(LazyListItemContentFactory.kt:104)
at androidx.compose.runtime.internal.ComposableLambdaImpl.invoke(ComposableLambda.kt:121)
at androidx.compose.runtime.internal.ComposableLambdaImpl.invoke(ComposableLambda.kt:46)
at androidx.compose.ui.layout.SubcomposeLayoutState$subcompose$2$1.invoke(SubcomposeLayout.kt:167)
at androidx.compose.ui.layout.SubcomposeLayoutState$subcompose$2$1.invoke(SubcomposeLayout.kt:167)
at androidx.compose.runtime.internal.ComposableLambdaImpl.invoke(ComposableLambda.kt:121)
at androidx.compose.runtime.internal.ComposableLambdaImpl.invoke(ComposableLambda.kt:46)
at androidx.compose.runtime.ComposerKt.invokeComposable(Composer.kt:3418)
at androidx.compose.runtime.ComposerImpl.composeContent$runtime_release(Composer.kt:2600)
at androidx.compose.runtime.CompositionImpl.composeContent(Composition.kt:348)
at androidx.compose.runtime.Recomposer.composeInitial$runtime_release(Recomposer.kt:693)
at androidx.compose.runtime.ComposerImpl$CompositionContextImpl.composeInitial$runtime_release(Composer.kt:3024)
at androidx.compose.runtime.ComposerImpl$CompositionContextImpl.composeInitial$runtime_release(Composer.kt:3024)
at androidx.compose.runtime.CompositionImpl.setContent(Composition.kt:304)
at androidx.compose.ui.layout.SubcomposeLayoutState.subcomposeInto(SubcomposeLayout.kt:184)
at androidx.compose.ui.layout.SubcomposeLayoutState.access$subcomposeInto(SubcomposeLayout.kt:100)
at androidx.compose.ui.layout.SubcomposeLayoutState$subcompose$2.invoke(SubcomposeLayout.kt:160)
at androidx.compose.ui.layout.SubcomposeLayoutState$subcompose$2.invoke(SubcomposeLayout.kt:158)
at androidx.compose.runtime.snapshots.SnapshotStateObserver.withNoObservations(SnapshotStateObserver.kt:137)
at androidx.compose.ui.node.OwnerSnapshotObserver.withNoSnapshotReadObservation$ui_release(OwnerSnapshotObserver.kt:49)
at androidx.compose.ui.node.LayoutNode.withNoSnapshotReadObservation$ui_release(LayoutNode.kt:1086)
at androidx.compose.ui.layout.SubcomposeLayoutState.subcompose(SubcomposeLayout.kt:158)
at androidx.compose.ui.layout.SubcomposeLayoutState.subcompose(SubcomposeLayout.kt:152)
at androidx.compose.foundation.lazy.LazyMeasuredItemProvider.getAndMeasure-ZjPyQlc(LazyMeasuredItemProvider.kt:47)
at androidx.compose.foundation.lazy.LazyListMeasureKt.measureLazyList-nqpP7js(LazyListMeasure.kt:134)
at androidx.compose.foundation.lazy.LazyListKt$LazyList$1.invoke-0kLqBqw(LazyList.kt:145)
at androidx.compose.foundation.lazy.LazyListKt$LazyList$1.invoke(LazyList.kt:95)
at androidx.compose.ui.layout.SubcomposeLayoutState$createMeasurePolicy$1.measure-3p2s80s(SubcomposeLayout.kt:212)
at androidx.compose.ui.node.InnerPlaceable.performMeasure-BRTryo0(InnerPlaceable.kt:45)
at androidx.compose.ui.node.LayoutNodeWrapper.measure-BRTryo0(LayoutNodeWrapper.kt:156)
at androidx.compose.foundation.layout.PaddingValuesModifier.measure-3p2s80s(Padding.kt:415)
at androidx.compose.ui.node.ModifiedLayoutNode.performMeasure-BRTryo0(ModifiedLayoutNode.kt:36)
at androidx.compose.ui.node.LayoutNodeWrapper.measure-BRTryo0(LayoutNodeWrapper.kt:156)
at androidx.compose.ui.graphics.SimpleGraphicsLayerModifier.measure-3p2s80s(GraphicsLayerModifier.kt:210)
at androidx.compose.ui.node.ModifiedLayoutNode.performMeasure-BRTryo0(ModifiedLayoutNode.kt:36)
at androidx.compose.ui.node.LayoutNodeWrapper.measure-BRTryo0(LayoutNodeWrapper.kt:156)
at androidx.compose.ui.node.DelegatingLayoutNodeWrapper.performMeasure-BRTryo0(DelegatingLayoutNodeWrapper.kt:108)
at androidx.compose.ui.node.LayoutNodeWrapper.measure-BRTryo0(LayoutNodeWrapper.kt:156)
at androidx.compose.ui.node.DelegatingLayoutNodeWrapper.performMeasure-BRTryo0(DelegatingLayoutNodeWrapper.kt:108)
at androidx.compose.ui.node.LayoutNodeWrapper.measure-BRTryo0(LayoutNodeWrapper.kt:156)
at androidx.compose.ui.node.OuterMeasurablePlaceable$remeasure$2.invoke(OuterMeasurablePlaceable.kt:97)
at androidx.compose.ui.node.OuterMeasurablePlaceable$remeasure$2.invoke(OuterMeasurablePlaceable.kt:96)
at androidx.compose.runtime.snapshots.Snapshot$Companion.observe(Snapshot.kt:1714)
at androidx.compose.runtime.snapshots.SnapshotStateObserver.observeReads(SnapshotStateObserver.kt:116)
at androidx.compose.ui.node.OwnerSnapshotObserver.observeReads$ui_release(OwnerSnapshotObserver.kt:75)
at androidx.compose.ui.node.OwnerSnapshotObserver.observeMeasureSnapshotReads$ui_release(OwnerSnapshotObserver.kt:63)
at androidx.compose.ui.node.OuterMeasurablePlaceable.remeasure-BRTryo0(OuterMeasurablePlaceable.kt:96)
at androidx.compose.ui.node.LayoutNode.remeasure-BRTryo0$ui_release(LayoutNode.kt:1202)
at androidx.compose.ui.node.LayoutNode.remeasure-BRTryo0$ui_release$default(LayoutNode.kt:1200)
at androidx.compose.ui.node.MeasureAndLayoutDelegate.doRemeasure-0kLqBqw(MeasureAndLayoutDelegate.kt:172)
at androidx.compose.ui.node.MeasureAndLayoutDelegate.access$doRemeasure-0kLqBqw(MeasureAndLayoutDelegate.kt:39)
at androidx.compose.ui.node.MeasureAndLayoutDelegate.measureAndLayout(MeasureAndLayoutDelegate.kt:211)
at androidx.compose.ui.platform.AndroidComposeView.measureAndLayout(AndroidComposeView.android.kt:448)
at androidx.compose.ui.node.LayoutNode.forceRemeasure(LayoutNode.kt:1220)
at androidx.compose.foundation.lazy.LazyListState.onScroll$foundation_release(LazyListState.kt:235)
at androidx.compose.foundation.lazy.LazyListState$scrollableState$1.invoke(LazyListState.kt:139)
at androidx.compose.foundation.lazy.LazyListState$scrollableState$1.invoke(LazyListState.kt:139)
at androidx.compose.foundation.gestures.DefaultScrollableState$scrollScope$1.scrollBy(ScrollableState.kt:134)
at androidx.compose.foundation.gestures.ScrollingLogic.dispatchScroll(Scrollable.kt:349)
at androidx.compose.foundation.gestures.ScrollableKt.dragForEachGesture$mainDragCycle$touchDragTick(Scrollable.kt:235)
at androidx.compose.foundation.gestures.ScrollableKt.access$dragForEachGesture$mainDragCycle$touchDragTick(Scrollable.kt:1)
at androidx.compose.foundation.gestures.ScrollableKt$dragForEachGesture$mainDragCycle$2$1$dragTick$1.invoke(Scrollable.kt:252)
at androidx.compose.foundation.gestures.ScrollableKt$dragForEachGesture$mainDragCycle$2$1$dragTick$1.invoke(Scrollable.kt:250)
at androidx.compose.foundation.gestures.DragGestureDetectorKt.verticalDrag-jO51t88(DragGestureDetector.kt:808)
at androidx.compose.foundation.gestures.DragGestureDetectorKt$verticalDrag$1.invokeSuspend(Unknown Source:15)
at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:33)
at kotlinx.coroutines.DispatchedTaskKt.resume(DispatchedTask.kt:178)
at kotlinx.coroutines.DispatchedTaskKt.dispatch(DispatchedTask.kt:166)
at kotlinx.coroutines.CancellableContinuationImpl.dispatchResume(CancellableContinuationImpl.kt:362)
at kotlinx.coroutines.CancellableContinuationImpl.resumeImpl(CancellableContinuationImpl.kt:396)
at kotlinx.coroutines.CancellableContinuationImpl.resumeImpl$default(CancellableContinuationImpl.kt:388)
at kotlinx.coroutines.CancellableContinuationImpl.resumeWith(CancellableContinuationImpl.kt:293)
at androidx.compose.ui.input.pointer.SuspendingPointerInputFilter$PointerEventHandlerCoroutine.offerPointerEvent(SuspendingPointerInputFilter.kt:421)
at androidx.compose.ui.input.pointer.SuspendingPointerInputFilter.dispatchPointerEvent(SuspendingPointerInputFilter.kt:318)
at androidx.compose.ui.input.pointer.SuspendingPointerInputFilter.onPointerEvent-H0pRuoY(SuspendingPointerInputFilter.kt:331)
at androidx.compose.ui.input.pointer.Node.dispatchToPointerInputFilter(HitPathTracker.kt:360)
at androidx.compose.ui.input.pointer.Node.dispatchChanges(HitPathTracker.kt:308)
at androidx.compose.ui.input.pointer.Node.dispatchChanges(HitPathTracker.kt:304)
at androidx.compose.ui.input.pointer.NodeParent.dispatchChanges(HitPathTracker.kt:179)
at androidx.compose.ui.input.pointer.HitPathTracker.dispatchChanges(HitPathTracker.kt:111)
at androidx.compose.ui.input.pointer.PointerInputEventProcessor.process-gBdvCQM(PointerInputEventProcessor.kt:80)
at androidx.compose.ui.platform.AndroidComposeView.dispatchTouchEvent(AndroidComposeView.android.kt:696)
at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:3863)
at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:3551)
at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:3863)
at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:3551)
at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:3863)
at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:3551)
at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:3863)
at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:3551)
at com.android.internal.policy.DecorView.superDispatchTouchEvent(DecorView.java:770)
at com.android.internal.policy.PhoneWindow.superDispatchTouchEvent(PhoneWindow.java:1952)
at android.app.Activity.dispatchTouchEvent(Activity.java:4038)
at com.android.internal.policy.DecorView.dispatchTouchEvent(DecorView.java:728)
at android.view.View.dispatchPointerEvent(View.java:14636)
at android.view.ViewRootImpl$ViewPostImeInputStage.processPointerEvent(ViewRootImpl.java:6582)
at android.view.ViewRootImpl$ViewPostImeInputStage.onProcess(ViewRootImpl.java:6360)
at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:5796)
at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:5849)
at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:5815)
at android.view.ViewRootImpl$AsyncInputStage.forward(ViewRootImpl.java:5971)
at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:5823)
at android.view.ViewRootImpl$AsyncInputStage.apply(ViewRootImpl.java:6028)
at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:5796)
at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:5849)
at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:5815)
at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:5823)
at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:5796)
at android.view.ViewRootImpl.deliverInputEvent(ViewRootImpl.java:9032)
at android.view.ViewRootImpl.doProcessInputEvents(ViewRootImpl.java:8889)
at android.view.ViewRootImpl.enqueueInputEvent(ViewRootImpl.java:8842)
at android.view.ViewRootImpl$WindowInputEventReceiver.onInputEvent(ViewRootImpl.java:9169)
at android.view.InputEventReceiver.dispatchInputEvent(InputEventReceiver.java:194)
at android.view.InputEventReceiver.nativeConsumeBatchedInputEvents(Native Method)
at android.view.InputEventReceiver.consumeBatchedInputEvents(InputEventReceiver.java:183)
at android.view.ViewRootImpl.doConsumeBatchedInput(ViewRootImpl.java:9109)
at android.view.ViewRootImpl$ConsumeBatchedInputRunnable.run(ViewRootImpl.java:9196)
at android.view.Choreographer$CallbackRecord.run(Choreographer.java:999)
at android.view.Choreographer.doCallbacks(Choreographer.java:797)
at android.view.Choreographer.doFrame(Choreographer.java:725)
at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:984)
at android.os.Handler.handleCallback(Handler.java:883)
at android.os.Handler.dispatchMessage(Handler.java:100)
at android.os.Looper.loop(Looper.java:237)
at android.app.ActivityThread.main(ActivityThread.java:8167)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:496)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1100)
I'm absolutely loving this app, however one thing I'm missing from flamingo is the ability to sort replies by top, instead of most recent. Other then that, love the app!
Twidere X version: 1.0.5(Google Play)
Example Tweet: https://twitter.com/chenshaoju/status/1360455220581462017
As of this morning on 1.0.0-alpha5, attempting to like any tweet results in the app crashing to homescreen. I have submitted the error report via Google play.
If your are going to publish a tweet longer than Twitter character limit, create a thread and split the text in multiple tweets. The same can be applied to Mastodon. This has implications for attachments, as in what tweets should the attachments be put. And if the user is allowed to create a new tweet thread manually, how to manage that interaction, jumping on different tweets to edit them and files attach to them.
Before sending anything the Twidere should check that the attachments do not violate Twitter limits (image or video size, resolution, video length) and inform the user what constraints have been violated. In non-X Twidere image or video uploads fail without giving time to read the toast message. It would be better to put the error in a textbox inside the write tweet dialog. And TwidereX should not fail when limits are satisfied. Currently Twidere fails with videos or images within Twitter limits. It's like if they have not been updated to the latest Twitter limit modifications.
It would be amazing if an option to browse anonymously (without having to login) through Twitter (and other Twindere supported services) was added. Obviously only the basic options would be available (like viewing and searching for posts and users, viewing trending topics, etc.), but that's what is expected from anonymous browsing. An option to bookmark users, hashtags, etc. would be very useful as well. This is not a very important feature (since who uses this app must have an account), but it would be very useful for those who just want to give a quick overview on social networks supported by Twindere.
Note: It's not possible at moment due to API limitations.
Alternatives: Some possible alternatives to work around API limitations.
Currently TwidereX uses android:Theme.DeviceDefault.NoActionBar
as the parent of the base theme, which varies in different platforms, and could even give you Holo theme (on Android 5.0).
Instead, the Google recommended base theme (and is also a best practice) is Theme.MaterialComponents.DayNight
, which also supports jetpack compose. This will give us good baseline experience for free, and even a better implementation of the Dark Theme.
Hey I just installed the new 1.0.0 and the app crashes as soon as I try to open it and then I get the message that it keeps closing.
UserMediaMediator's load method will never stop, this method automatically triggered all the time
Today I just got sused and had to make a new account. Because of this, I had to follow ~750 accounts. Now, once I git about halfway through those accounts, twitter decided to follower limit me. Probably because it was going "dude what the fuck, you made your account 30 minutes ago, why are you following 350 people???"
So, I can't follow anyone because twitter just rejects it. Because I was having some issues with twitter being a pain in the ass and not letting me log into my new account, I decided to try twidereX again. And for shits and giggles, I was gonna try to follow someone.
Well, it turns out when you follow someone on twidere & are follower limited, it just crashes.
Here's an alternative version if you don't want to spend 2 hours copy & pasting URLs into your browser:
Twidere shouldn't crash when it runs into an error while following someone.
Or really anytime it's making a web request. For all the web requests, it should catch all the errors & display the stacktrace to the user along with a button to report it on github. (Opens an issue with the stack trace already in & a simple template. I'm like 99% sure that's possible.)
Whenever it runs into an error it just d i e s
You forgot some catch blocks lol
(I wrote this on my phone, so if the formatting is dogshit, then I apologize for that. I'll fix it later.)
Recently, I just got sused (oof) and had to make a new account. Because of this, when I made a new account I used the username of my alt. I then changed my alt's username to something else.
But then, when I open up Twidere, it seems that it's logged into my alt (because I hadn't logged into my new acc yet, but is detecting that the current user is my new account???)
So here's what happened:
Account A: Name A
Account A: Name A -> Name B
Account B: Name A
Which caused an issue with twidere. I'm assuming it has something to do with twidere saving only the username of you account for some things (eg. the profile tab), but uses the ID/oauth code for other things (eg. the timeline & notifs)
Twidere should automatically update whenever you change your @, and shouldn't save it anywhere.
When changing your @, the username on the profile list (open sidebar -> tap down arrow and open sidebar -> tap down arrow - Accounts) doesn't update.
Nor does the profile that it displays in the last tab, the profile tab.
As I've kind of hinted at in the rest of the issue, I believe twidere is storing the user's @ somewhere, which causes this desync between twitter & twidere. Twitter has recognized the update, but twidere hasn't. Because of this, it keeps attempting to load the user page for the old @ and displays the old @ on the accounts list.
Instead, twidere should store the @ and the user id and then update the user id every single time it's able to connect. (The @ is only stored so that if you ever go offline for a bit, you can still display it properly.)
(I wrote this on my phone, so if the formatting is dogshit, then I apologize for that. I'll fix it later.)
Currently TwidereX only works with TwidereX app keys. It'd nice to be able to use other app keys, as old Twidere does.
Twidere has a config option, "Read from bottom" where the read position is retained after refreshing.
As far as I can tell, Twidere-X doesn't currently support this. Refreshing always takes you to the most recent tweet.
Not sure if this is intentional, or on-the-roadmap-but-not-implemented-yet. Hence this feature request.
Would be nice to have the option to upload images without EXIF metadata. There's an app, Scrambled Exif (https://gitlab.com/juanitobananas/scrambled-exif/tree/HEAD), which allows you to share "de-exifed" images with other apps. But you have to plan in advance what photos to add and if you edit the tweet to add an additional image you have to start again and "re-share" with Twidere the files to include the new file.
Having the feature built in Twidere would be much more convenient.
Support for Twitter list, an inbuilt tweet shortener and notification support.
That's the name Talon uses.
Tweets of muffled profiles show as one line of truncated text: @handle: Lorem ipsum...
. it's great for companies profiles. I guess you could only add the avatar.
Thank you!
Opening any user profile, tapping the image causes the profile to flicker but nothing loads. Multiple requests create multiple steps to return back to feed (ie, must tap or swipe back for each time the pic was tapped)
Pixel 3xl Android 11
Media doesn't play
TL;DR: you can't swipe to move between the tabs.
It'd be nice if you could swipe left & right to move between the tabs.
The alternative is just not being able to move between the tabs from a swipe, which is kind of annoying.
Not going to make a long issue for this or anything, because nobody cares.
It's pretty simple, so I'm not going to make a long issue that nobody wants to read. (This is the last one, I promise.)
Right now if you go on someone's profile you have the "tweets" tab, the "media" tab, and the "likes" tab. If you could split the "tweets" tab into "tweets, qrts, and rts" and "tweets, qrts, rts, and replies", that'd be great. Thanks.
Hi, what's the plan about the implementation of Mastodon? Soon? Or after to finish Twitter features?
Thank you!
Network type:
App version:
1.0.0-alpha07
search an exact user name (the @name
)
the search result is duplicating it self and the result list is full of the same user
there is only one (if no other username contain this name) item in the result
A declarative, efficient, and flexible JavaScript library for building user interfaces.
๐ Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. ๐๐๐
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google โค๏ธ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.