Giter Site home page Giter Site logo

twiderex-android's People

Contributors

dyras avatar edent avatar enaix avatar huixingwong avatar jk234ert avatar joesteven avatar nuzar avatar objectboxpc avatar probot-auto-merge[bot] avatar qdsfdhvh avatar tlaster avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

twiderex-android's Issues

Translation help?

Hey,
can we help you with translation of this app?

Greetz from Germany

[Bug] The cursor is not set

Bug Report

Environment

Network type:

  • [ x] Cellular
  • [x ] Wi-Fi

Build Variant

  • Google Play
  • [x ] FDroid

App version:

Bug Info

I cannot reset the cursor, only mark words. New lines are also not set by pressing the enter key.

Steps to reproduce

Actual Behavior

Expected behavior

Error : Too Many Requests?

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)

Add option to set custom TTF/OTF file for Emoji

  • Version: 1.0.0-alpha5
  • Android: 5.1.1 (MIUI)

Expected behavior

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)

Actual behavior

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:

Resources

"Symbola" font with support for latest Emoji/Unicode releases

[Bug] No spaces between followers and number

Bug Report

Environment

Network type:

  • Cellular
  • Wi-Fi

Build Variant

  • Google Play
  • FDroid

App version: 1.0.3

Bug Info

Steps to reproduce

  • Tap on user avatar
  • Tap on Following or Followers

Actual Behavior

Text looks like "Followers123"

Screenshot of app

Expected behavior

Should be "Followers 123" with a space.

And, possibly, other user data.

[Feature Request] Add 'Explore' Tab

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:
Screenshot_2021-02-11-15-51-14-824_com twitter android

It would be really useful to stay up-to-date with what's happening/trending on Twitter both regionally and globally.

Dark Theme too different from Twidere

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.

[Bug] Turning on system dark mode completely breaks themeing

Bug Report

This was tested on a Pocophone F1 running Android 10 based MIUI 12

App version 1.0.5 from Google Play.

Bug Info

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.

Expected behavior

The white and dark theme colors should apply normally regardless of whether system dark mode is turned on or not.

Crashing on Startup

Using the Galaxy Fold 2 the app crashes on startup in both folded and unfolded view.

I sent a crash report.

[Bug] Weird spacing when setting smaller text size.

Bug Report

Environment

Network type:

  • Cellular
  • Wi-Fi

Build Variant

  • App Store
  • TestFlight

App version:
1.0.0-alpha06

Bug Info

Steps to reproduce

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.

Actual Behavior

Screenshot_20201220-200409_Twidere X

Expected behavior

No additional spacing.

[Feature Request] Retweet with Comment

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

[Bug] Overhead animation per each touch

Bug Report

Environment

Network type:

  • Cellular
  • Wi-Fi

Build Variant

  • Google Play
  • FDroid

App version: 1.0.1

Bug Info

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)

Steps to reproduce

Just open app and start browsing

Actual Behavior

Too much "water drop" GLSL animations acted on each touch action in during browsing.

Expected behavior

Add option "Disable touch animations".

Bitwarden doesn't prompt password autofill at twitter login/twidere authentication.

Issue description.

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.

Reproducing:

  • Install bitwarden
  • log in to bitwarden.
  • enable the autofill service and the autofill accessibility service in bitwarden's settings.
  • install twedereX.
  • go to the login page for twedereX and tap the login box.

Expected:

When tapping the login box, it should prompt to autofill from bitwarden (even if you have no passwords associated with twitter/twedere.)

Actual:

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.)

[Bug] Click any tweets in timeline it will crash [1.0.1]

Bug Report

Environment

Network type:

  • Cellular
  • Wi-Fi

Build Variant

  • Google Play
  • FDroid

App version:
1.0.1

Bug Info

Click any tweets in timeline, The Twidere X will crash

Steps to reproduce

1.Open Twidere X
2.In timeline, Click any tweet.

Actual Behavior

It's crashed.

Expected behavior

Show a tweet details.

Crash logs

--------- 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

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):

image

How it looks in Twidere X:

image

[Bug] Crash when select a searched user

Bug Report

Environment

Network type:

  • Cellular
  • Wi-Fi

Build Variant

  • App Store
  • TestFlight

App version:
1.0.0-alpha06

Bug Info

TwidereX app crashes when click at a searched user in search tab.

Steps to reproduce

  1. Click the search tab button
  2. Type in arbitary text in the search text inpiut, click search
  3. Click Users category button
  4. Click any searched user

Actual Behavior

  1. App navigates to a new view, then a loading indicator appears
  2. App crashes

Expected behavior

App navigates to the profile view of the selected searched user.

[Feature Request] Improve Notifications

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 :)

[Bug] Keyboard isn't displayed

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

[Bug] IndexOutOfBoundsException from scrolling super fast

Bug Report

Environment

Network type:

  • Cellular
  • Wi-Fi

Build Variant

  • Google Play
  • FDroid

App version:

1.1.0-beta01 (30)

Bug Info

Steps to reproduce

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)

Tablet mode

TwidereX doesn't make use of the landscape mode, so you get a lot of nothing. A real waste of space.Screenshot 2021-01-18 at 12.08.24.png

Os: chromeOS
Android version 9
TwidereX 1.0.2

[Feature Request] Sort Replies

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!

Attempting to like tweets results in CtH

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.

[Feature request] Create threads with tweets longer than Twitter/Mastodon limit

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.

[Feature Request] Offline/Anonymous Browse

Describe the feature

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.

Additional info

  • Note: It's not possible at moment due to API limitations.

  • Alternatives: Some possible alternatives to work around API limitations.

    • Use webview based tech
    • Use nitter instances to circumvent twitter's API limitations

[Feature Request] Use Material Components as the parent of the base theme, instead of the platform theme

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.

1.0.0 crashes at startup

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.

[Bug] Twidere crashes when you attempt to follow someone and it runs into an error

Issue description.

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.

Reproducing:

  • Make a new twitter account
  • add your email & phone so twitter doesn't suspend you automatically (bruh)
  • Follow a shit ton of people until twitter limits you
  • Open twidere
  • Try to follow someone
  • ez crash

Here's an alternative version if you don't want to spend 2 hours copy & pasting URLs into your browser:

  • Make a new twitter account
  • do something to get suspended (basically, just don't register your phone, send a tweet or two, and then wait for like a few days for it to auto suspend you. I happen to have two accounts I don't give a shit about which have nothing on them & are suspended and I'd be willing to let you use them for testing.)
  • Go to a user's profile & attempt to follow them
  • ez crash

Expected:

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.)

Actual

Whenever it runs into an error it just d i e s

What I think is happening

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.)

[Bug] Twidere cannot handle username updates

Issue description.

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)

Reproducing:

  • Log into an account with twidere
  • Using the twitter web app, change the account's name (the @, not the display name)
  • Using the twitter web app, make a new account with the old account's @. (This step might be optional, but I'm too lazy to check)
  • Open twidere and go to the profile tab. It should now display the new account.

Expected:

Twidere should automatically update whenever you change your @, and shouldn't save it anywhere.

Actual

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.

What I think is happening

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.)

Feature request: Read from bottom

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.

[Feature Request] Option to remove EXIF from images and videos.

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.

Muffle tweeters

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!

[Bug] Profile Pic not loading on tap

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

[Feature Request] moving between tags by swiping.

Describe the feature request

TL;DR: you can't swipe to move between the tabs.

Describe the solution you'd like

It'd be nice if you could swipe left & right to move between the tabs.

Describe alternatives you've considered

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.

[Feature request] separate tweets and replies tab

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.

Mastodon on roadmap

Hi, what's the plan about the implementation of Mastodon? Soon? Or after to finish Twitter features?

Thank you!

[Bug]

Bug Report

Environment

Network type:

  • Cellular
  • Wi-Fi

Build Variant

  • Google Play
  • FDroid

App version:
1.0.0-alpha07

Bug Info

Steps to reproduce

search an exact user name (the @name)

Actual Behavior

the search result is duplicating it self and the result list is full of the same user

Expected behavior

there is only one (if no other username contain this name) item in the result

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.