Code Monkey home page Code Monkey logo

tusky's Introduction

Translate - with Weblate OpenCollective Build Status

Tusky

Tusky is a beautiful Android client for Mastodon. Mastodon is an ActivityPub federated social network. That means no single entity controls the whole network, rather, like e-mail, volunteers and organisations operate their own independent servers, users from which can all interact with each other seamlessly.

Get it on F-Droid Get it on Google Play

Features

  • Material Design
  • Most Mastodon APIs implemented
  • Multi-Account support
  • Dark, light and black themes with the possibility to auto-switch based on the time of day
  • Drafts - compose posts and save them for later
  • Choose between different emoji styles
  • Optimized for all screen sizes
  • Completely open-source - no non-free dependencies like Google services

Testing

The nightly build containing the newest development code is available on Google Play.

Support

Check out our FAQs, your question may already be answered. If you have any bug reports, feature requests or questions please open an issue or send us a message at [email protected]!

Contributing

We always welcome new contributors! Please read our contribution guide to get started.

Development chatroom

https://matrix.to/#/#Tusky:matrix.org

tusky's People

Contributors

ariasuni avatar boffire avatar charlag avatar connyduck avatar danialbehzadi avatar gargron avatar gerazo avatar goooler avatar gunchleoc avatar hdigo avatar ihorhordiichuk avatar juanjosalvador avatar kyori19 avatar lakoja avatar mastergroosha avatar mastoduy avatar mcclure avatar nailyk-fr avatar nailyk-weblate avatar nikclayton avatar pandasoft0 avatar papuass avatar renovate[bot] avatar sveinki avatar tak avatar torrentcome avatar vavassor avatar vskjefst avatar weblate avatar xmgz 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  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

tusky's Issues

Infinite followers' list

Hi,

I'm using Tusky version 1.0.0-alpha.5 from the F-droid repository.

I have only one follower on my Mastodon account and when I go to the Followers tab this one follower is looping infinitely. Same if I list the only follower of another profile.

On a profile with 2 followers, the two are repeated alternatively.

Cheers.

Feature suggestion: block media download

Hi!
When browsing Mastodon with a mobile data connection, it might be a good thing to be able not to download media, like, for example, what is done in Twidere.

Simplify header of main app screen

The current header takes up two lines, one for the menu and one for tabs.

Tusky header

While this isn't bad looking, I think it takes up more space than it needs to. First of all the search really isn't that useful. Since it's only a username lookup function and used relatively infrequently, I think it could be relegated to a main menu item or a tab of it's own. This would easily allow the tab bar to move up into the first row of the header.

A good example of this one line approach for a similar scenario is Twittnuker's main screen:

Twittnuker header

I think Tusky could benefit from this slimmer UI approach. Search could be an item under the main app menu.

IllegalStateException in fragment callback

Exception java.lang.IllegalStateException: Fragment NotificationsFragment{41efcca8} not attached to Activity
android.support.v4.app.Fragment.getResources (Fragment.java:646)
android.support.v4.app.Fragment.getString (Fragment.java:668)
com.keylesspalace.tusky.NotificationsFragment.onFetchNotificationsSuccess (NotificationsFragment.java:175)
com.keylesspalace.tusky.NotificationsFragment.access$300 (NotificationsFragment.java:41)
com.keylesspalace.tusky.NotificationsFragment$3.onResponse (NotificationsFragment.java:144)
retrofit2.ExecutorCallAdapterFactory$ExecutorCallbackCall$1$1.run (ExecutorCallAdapterFactory.java:68)
android.os.Handler.handleCallback (Handler.java:733)
android.os.Handler.dispatchMessage (Handler.java:95)
android.os.Looper.loop (Looper.java:136)
android.app.ActivityThread.main (ActivityThread.java:5124)
java.lang.reflect.Method.invokeNative (Method.java)
java.lang.reflect.Method.invoke (Method.java:515)

I wonder if there is a retrofit equivalent of cancelling all requests onDestroy, because I think that's what this is caused by? It sounds like the onSuccess callback is firing after the fragment has been detached

Push Notifications no longer working

Somewhere around Alpha.7 to the latest release (Alpha.8 as I post), push notifications stopped working. I haven't seen a single one since Alpha.6.

Yet another NPE

Exception java.lang.NullPointerException: Attempt to invoke interface method 'int java.util.List.size()' on a null object reference
com.keylesspalace.tusky.TimelineAdapter.getItemCount (TimelineAdapter.java:75)
android.support.v7.widget.RecyclerView.dispatchLayoutStep1 (RecyclerView.java:3447)
android.support.v7.widget.RecyclerView.dispatchLayout (RecyclerView.java:3264)
android.support.v7.widget.RecyclerView.onLayout (RecyclerView.java:3798)
android.view.View.layout (View.java:16653)
android.view.ViewGroup.layout (ViewGroup.java:5438)
android.support.v4.widget.SwipeRefreshLayout.onLayout (SwipeRefreshLayout.java:636)
android.view.View.layout (View.java:16653)
android.view.ViewGroup.layout (ViewGroup.java:5438)
android.support.v4.view.ViewPager.onLayout (ViewPager.java:1795)
android.view.View.layout (View.java:16653)
android.view.ViewGroup.layout (ViewGroup.java:5438)

Uncaught IllegalArgumentException in LoginActivity

Exception java.lang.IllegalArgumentException: Illegal URL: https://
retrofit2.Retrofit$Builder.baseUrl (Retrofit.java:452)
com.keylesspalace.tusky.LoginActivity.getApiFor (LoginActivity.java:101)
com.keylesspalace.tusky.LoginActivity.onButtonClick (LoginActivity.java:148)
com.keylesspalace.tusky.LoginActivity.access$600 (LoginActivity.java:45)
com.keylesspalace.tusky.LoginActivity$2.onClick (LoginActivity.java:172)
android.view.View.performClick (View.java:5637)
android.view.View$PerformClick.run (View.java:22429)
android.os.Handler.handleCallback (Handler.java:751)
android.os.Handler.dispatchMessage (Handler.java:95)
android.os.Looper.loop (Looper.java:154)
android.app.ActivityThread.main (ActivityThread.java:6119)
java.lang.reflect.Method.invoke (Method.java)

Likely when clicking login with nothing entered in the EditText

Media quick close [Tusky v1.0.1]

Having the ability to close open media quickly would be a great feature. As of the 1.0.0 release there is no way to close a media zoom/link without pressing the back button, adding the ability to swipe up to dismiss or some other direction would make navigation much better.

f-droid repo out of date

Hi there, please update the f-droid repo.
There are at least a few people using your client already.

Version 1.0.0-alpha.5 - Added on 2017-02-24

Copy links of toots

It's really handy to be able to copy a link to a specific toot so I can share it with others, so making this feature request. Please add the ability to copy links of toots.

Open profile in Tusky when clicking @username links

Clicking a hyperlinked @username in a toot opens the profile page in the Web browser instead of in Tusky (when the user is in a remote instance).

For some reasons, clicking the avatar of the same user opens the profile in the app (as expected).

This behavior isn't consistent and it makes it very difficult to follow remote users.

Multiple instances

Would be nice to have the ability to have multiple instances running, this will probably be a thing sooner rather than later.

NPE when favouriting, sometimes

Not sure what exactly I've done, but after some random usage, this occurs when trying to favourite:

Exception java.lang.NullPointerException:
com.keylesspalace.tusky.SFragment.favourite (SFragment.java:121)
com.keylesspalace.tusky.TimelineFragment.onFavourite (TimelineFragment.java:266)
com.keylesspalace.tusky.StatusViewHolder$9.onEvent (StatusViewHolder.java:320)
com.varunest.sparkbutton.SparkButton.onClick (SparkButton.java:252)
android.view.View.performClick (View.java:4569)
com.varunest.sparkbutton.SparkButton$2.onTouch (SparkButton.java:273)
android.view.View.dispatchTouchEvent (View.java:7837)
android.view.ViewGroup.dispatchTransformedTouchEvent (ViewGroup.java:2214)
android.view.ViewGroup.dispatchTouchEvent (ViewGroup.java:1945)
android.view.ViewGroup.dispatchTransformedTouchEvent (ViewGroup.java:2220)
android.view.ViewGroup.dispatchTouchEvent (ViewGroup.java:1959)
android.view.ViewGroup.dispatchTransformedTouchEvent (ViewGroup.java:2220)
android.view.ViewGroup.dispatchTouchEvent (ViewGroup.java:1959)
android.view.ViewGroup.dispatchTransformedTouchEvent (ViewGroup.java:2220)
android.view.ViewGroup.dispatchTouchEvent (ViewGroup.java:1959)
android.view.ViewGroup.dispatchTransformedTouchEvent (ViewGroup.java:2220)
android.view.ViewGroup.dispatchTouchEvent (ViewGroup.java:1959)
android.view.ViewGroup.dispatchTransformedTouchEvent (ViewGroup.java:2220)
android.view.ViewGroup.dispatchTouchEvent (ViewGroup.java:1959)
android.view.ViewGroup.dispatchTransformedTouchEvent (ViewGroup.java:2220)
android.view.ViewGroup.dispatchTouchEvent (ViewGroup.java:1959)
android.view.ViewGroup.dispatchTransformedTouchEvent (ViewGroup.java:2220)
android.view.ViewGroup.dispatchTouchEvent (ViewGroup.java:1959)
android.view.ViewGroup.dispatchTransformedTouchEvent (ViewGroup.java:2220)
android.view.ViewGroup.dispatchTouchEvent (ViewGroup.java:1959)
android.view.ViewGroup.dispatchTransformedTouchEvent (ViewGroup.java:2220)
android.view.ViewGroup.dispatchTouchEvent (ViewGroup.java:1959)
android.view.ViewGroup.dispatchTransformedTouchEvent (ViewGroup.java:2220)
android.view.ViewGroup.dispatchTouchEvent (ViewGroup.java:1959)
android.view.ViewGroup.dispatchTransformedTouchEvent (ViewGroup.java:2220)
android.view.ViewGroup.dispatchTouchEvent (ViewGroup.java:1959)
android.view.ViewGroup.dispatchTransformedTouchEvent (ViewGroup.java:2220)
android.view.ViewGroup.dispatchTouchEvent (ViewGroup.java:1959)
android.view.ViewGroup.dispatchTransformedTouchEvent (ViewGroup.java:2220)
android.view.ViewGroup.dispatchTouchEvent (ViewGroup.java:1959)
com.android.internal.policy.impl.PhoneWindow$DecorView.superDispatchTouchEvent (PhoneWindow.java:2072)
com.android.internal.policy.impl.PhoneWindow.superDispatchTouchEvent (PhoneWindow.java:1519)
android.app.Activity.dispatchTouchEvent (Activity.java:2468)
android.support.v7.view.WindowCallbackWrapper.dispatchTouchEvent (WindowCallbackWrapper.java:71)
com.android.internal.policy.impl.PhoneWindow$DecorView.dispatchTouchEvent (PhoneWindow.java:2020)
android.view.View.dispatchPointerEvent (View.java:8022)
android.view.ViewRootImpl$ViewPostImeInputStage.processPointerEvent (ViewRootImpl.java:3966)
android.view.ViewRootImpl$ViewPostImeInputStage.onProcess (ViewRootImpl.java:3845)
android.view.ViewRootImpl$InputStage.deliver (ViewRootImpl.java:3405)
android.view.ViewRootImpl$InputStage.onDeliverToNext (ViewRootImpl.java:3455)
android.view.ViewRootImpl$InputStage.forward (ViewRootImpl.java:3424)
android.view.ViewRootImpl$AsyncInputStage.forward (ViewRootImpl.java:3531)
android.view.ViewRootImpl$InputStage.apply (ViewRootImpl.java:3432)
android.view.ViewRootImpl$AsyncInputStage.apply (ViewRootImpl.java:3588)
android.view.ViewRootImpl$InputStage.deliver (ViewRootImpl.java:3405)
android.view.ViewRootImpl$InputStage.onDeliverToNext (ViewRootImpl.java:3455)
android.view.ViewRootImpl$InputStage.forward (ViewRootImpl.java:3424)
android.view.ViewRootImpl$InputStage.apply (ViewRootImpl.java:3432)
android.view.ViewRootImpl$InputStage.deliver (ViewRootImpl.java:3405)
android.view.ViewRootImpl.deliverInputEvent (ViewRootImpl.java:5557)
android.view.ViewRootImpl.doProcessInputEvents (ViewRootImpl.java:5537)
android.view.ViewRootImpl.enqueueInputEvent (ViewRootImpl.java:5508)
android.view.ViewRootImpl$WindowInputEventReceiver.onInputEvent (ViewRootImpl.java:5637)
android.view.InputEventReceiver.dispatchInputEvent (InputEventReceiver.java:185)
android.os.MessageQueue.nativePollOnce (MessageQueue.java)

Explain authorization workflow on login page

Pressing the login with mastodon on the login page opens the URL of the instance login page of via the Web browser. Neither Tusky nor the instance Web page explains why it's required to log into Mastodon on the Web to connect the app to the user account.

A few words on these login pages could explain the process:

  • on Tusky: add Log into your instance on the Web to allow Tusky to connect to your account
  • on Mastodon: add Authorize <app_name> to connect to your <instance_name> account

At first, I thought I was directed to the Web because Tusky was down or because the app wasn't compatible with my instance.

Search function for hashtags

Can tap on hashtags in toots (posts) in my Timeline, but cannot specifically search for any hashtags, just for users? As workaround I can write a new post with the hashtag I'd like to search for in it. But it's kinda.....

Push notifications

  • Add Firebase libraries to the Android project
  • Upon first login, send device token, instance URL and access token to app's own server
  • Upon logout, send device token to the app's own server for de-registration
  • Node.js server that accepts device token registrations/deregistrations*, connects to streaming APIs of mastodon servers

* Method of authentication for the app server? Simple but long API key? Should requests be signed with an API secret?

Duplicated parts of the timeline [Tusky v1.0.1]

I'm frequently seeing both my home and federated timeline having duplicate posts, in one case my own post appeared twice (it didn't get boosted so that isn't the problem) this makes using Tusky difficult and confusing, I feel that this should be a priority bug fix. Version is Tusky 1.0.1.

NoSuchElementException on onBackPressed

Not sure what exactly I did prior to this

Exception java.util.NoSuchElementException:
java.util.Vector.lastElement (Vector.java:621)
com.keylesspalace.tusky.MainActivity.onBackPressed (MainActivity.java:412)
android.app.Activity.onKeyUp (Activity.java:2196)
android.view.KeyEvent.dispatch (KeyEvent.java:2683)
android.app.Activity.dispatchKeyEvent (Activity.java:2433)
android.support.v7.app.AppCompatActivity.dispatchKeyEvent (AppCompatActivity.java:541)
android.support.v7.view.WindowCallbackWrapper.dispatchKeyEvent (WindowCallbackWrapper.java:59)
android.support.v7.app.AppCompatDelegateImplBase$AppCompatWindowCallbackBase.dispatchKeyEvent (AppCompatDelegateImplBase.java:319)
com.android.internal.policy.impl.PhoneWindow$DecorView.dispatchKeyEvent (PhoneWindow.java:1966)
android.view.ViewRootImpl$ViewPostImeInputStage.processKeyEvent (ViewRootImpl.java:3864)
android.view.ViewRootImpl$ViewPostImeInputStage.onProcess (ViewRootImpl.java:3838)
android.view.ViewRootImpl$InputStage.deliver (ViewRootImpl.java:3405)
android.view.ViewRootImpl$InputStage.onDeliverToNext (ViewRootImpl.java:3455)
android.view.ViewRootImpl$InputStage.forward (ViewRootImpl.java:3424)
android.view.ViewRootImpl$AsyncInputStage.forward (ViewRootImpl.java:3531)
android.view.ViewRootImpl$InputStage.apply (ViewRootImpl.java:3432)
android.view.ViewRootImpl$AsyncInputStage.apply (ViewRootImpl.java:3588)
android.view.ViewRootImpl$InputStage.deliver (ViewRootImpl.java:3405)
android.view.ViewRootImpl$InputStage.onDeliverToNext (ViewRootImpl.java:3455)
android.view.ViewRootImpl$InputStage.forward (ViewRootImpl.java:3424)
android.view.ViewRootImpl$InputStage.apply (ViewRootImpl.java:3432)
android.view.ViewRootImpl$InputStage.deliver (ViewRootImpl.java:3405)
android.view.ViewRootImpl$InputStage.onDeliverToNext (ViewRootImpl.java:3455)
android.view.ViewRootImpl$InputStage.forward (ViewRootImpl.java:3424)
android.view.ViewRootImpl$AsyncInputStage.forward (ViewRootImpl.java:3564)
android.view.ViewRootImpl$ImeInputStage.onFinishedInputEvent (ViewRootImpl.java:3730)
android.view.inputmethod.InputMethodManager$PendingEvent.run (InputMethodManager.java:2019)
android.view.inputmethod.InputMethodManager.invokeFinishedInputEventCallback (InputMethodManager.java:1713)
android.view.inputmethod.InputMethodManager.finishedInputEvent (InputMethodManager.java:1704)
android.view.inputmethod.InputMethodManager$ImeInputEventSender.onInputEventFinished (InputMethodManager.java:1996)
android.view.InputEventSender.dispatchInputEventFinished (InputEventSender.java:141)
android.os.MessageQueue.nativePollOnce (MessageQueue.java)
android.os.MessageQueue.next (MessageQueue.java:138)
android.os.Looper.loop (Looper.java:123)
android.app.ActivityThread.main (ActivityThread.java:5124)
java.lang.reflect.Method.invokeNative (Method.java)
java.lang.reflect.Method.invoke (Method.java:515)
com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run (ZygoteInit.java:797)
com.android.internal.os.ZygoteInit.main (ZygoteInit.java:613)
dalvik.system.NativeStart.main (NativeStart.java)

More NPEs

Exception java.lang.NullPointerException: Attempt to invoke virtual method 'android.content.Context android.view.ViewGroup.getContext()' on a null object reference
android.support.design.widget.Snackbar.make (Snackbar.java:136)
android.support.design.widget.Snackbar.make (Snackbar.java:165)
com.keylesspalace.tusky.ViewThreadFragment.onThreadRequestFailure (ViewThreadFragment.java:124)
com.keylesspalace.tusky.ViewThreadFragment.access$200 (ViewThreadFragment.java:37)
com.keylesspalace.tusky.ViewThreadFragment$1.onFailure (ViewThreadFragment.java:95)
retrofit2.ExecutorCallAdapterFactory$ExecutorCallbackCall$1$2.run (ExecutorCallAdapterFactory.java:77)
android.os.Handler.handleCallback (Handler.java:739)
android.os.Handler.dispatchMessage (Handler.java:95)
android.os.Looper.loop (Looper.java:148)
android.app.ActivityThread.main (ActivityThread.java:5441)
java.lang.reflect.Method.invoke (Method.java)
com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run (ZygoteInit.java:738)
com.keylesspalace.tusky.SFragment.reply (SFragment.java:74)
com.keylesspalace.tusky.NotificationsFragment.onReply (NotificationsFragment.java:215)
com.keylesspalace.tusky.StatusViewHolder$7.onClick (StatusViewHolder.java:309)
android.view.View.performClick (View.java:5637)
android.view.View$PerformClick.run (View.java:22429)
android.os.Handler.handleCallback (Handler.java:751)
android.os.Handler.dispatchMessage (Handler.java:95)
android.os.Looper.loop (Looper.java:154)
android.app.ActivityThread.main (ActivityThread.java:6119)
java.lang.reflect.Method.invoke (Method.java)
com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run (ZygoteInit.java:886)
com.android.internal.os.ZygoteInit.main (ZygoteInit.java:776)
com.keylesspalace.tusky.SFragment.reblog (SFragment.java:99)
com.keylesspalace.tusky.TimelineFragment.onReblog (TimelineFragment.java:279)
com.keylesspalace.tusky.StatusViewHolder$8.onEvent (StatusViewHolder.java:315)
com.varunest.sparkbutton.SparkButton.onClick (SparkButton.java:252)
android.view.View.performClick (View.java:4569)
com.varunest.sparkbutton.SparkButton$2.onTouch (SparkButton.java:273)
android.view.View.dispatchTouchEvent (View.java:7837)
android.view.ViewGroup.dispatchTransformedTouchEvent (ViewGroup.java:2214)
android.view.ViewGroup.dispatchTouchEvent (ViewGroup.java:1945)
android.view.ViewGroup.dispatchTransformedTouchEvent (ViewGroup.java:2220)
android.view.ViewGroup.dispatchTouchEvent (ViewGroup.java:1959)
android.view.ViewGroup.dispatchTransformedTouchEvent (ViewGroup.java:2220)

Wrong mobile notification content

When a mobile notification comes for several Mastodon notifications, Tusky seems to show the avatar associated with the user in the oldest Mastodon notification, but the text of the newest.

For example: if @aaa sends me a "hi!", and then @BBB sends me "Hello there!", the Tusky mobile notification will show @aaa's avatar with the text "Hello there!".

Small clarification: I usually have internet off on the phone, that's why it's pretty common for me to receive several Mastodon notifications in the same Tusky mobile notification. You might need to do that in order to reproduce the bug.

Add indication on privacy level on newly composed toot without clicking on the globe

It's pretty easy to forget what the privacy level of my last toot was. Since the privacy level is persistent at each toot, I often come back and accidentally send out a private toot that was meant to be public. Right now, the only way to know what the current privacy level is set at is by clicking on the globe icon as if I was going to change that setting. It would be nice to have some small indicator of the privacy level of the toot immediately visible on the Compose tab.

No longer on F-Droid

The author requested for this app to be removed on F-Droid. Inclusion of non-free services prevents some users from installing the app. Personally, I don't even have Google Play installed on my phone at all. Hoping you will reconsider this, as everyone is willing to use free software but many people aren't willing to use nonfree software.

Thank you!

Push notifications other than mentions [Tusky v1.0.1]

Push notifications aren't working on 1.0.1, just got someone favoring a status, no notification. Double checked Tusky has permission to do notifications and it does.

Edit: Seems push notifications are fine for mentions, just not favourites or boosts, edited issue appropriately.

Replies to boosted toot are inconsistent with the website

When I try and reply to a boosted toot, the only name that gets filled in as who I am replying to is the booster's account, not the original tooter's account. This is inconsistent with what happens in the main site, which fills in the name of the original tooter's account.

At the very least it should be consistent with the site, but I might as ask @Gargron to make it work like Twitter, where both the original tooter'sโ€‹ and the booster's accounts are filled in when replying.

Navigate between multiple media items

When more than one media item is attached to a toot, after opening one of them in the full screen preview mode swiping left/right should navigate between them. Currently you have to back out to the previous screen and tap on the next item which is somewhat cumbersome.

Another NPE

Exception java.lang.NullPointerException: Attempt to read from field 'java.lang.String com.keylesspalace.tusky.entity.Account.header' on a null object reference
com.keylesspalace.tusky.MainActivity$10.onResponse (MainActivity.java:365)
retrofit2.ExecutorCallAdapterFactory$ExecutorCallbackCall$1$1.run (ExecutorCallAdapterFactory.java:68)
android.os.Handler.handleCallback (Handler.java:739)
android.os.Handler.dispatchMessage (Handler.java:95)
android.os.Looper.loop (Looper.java:148)
android.app.ActivityThread.main (ActivityThread.java:5441)
java.lang.reflect.Method.invoke (Method.java)
com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run (ZygoteInit.java:738)
com.android.internal.os.ZygoteInit.main (ZygoteInit.java:628)

Handshake failed

I can't connect to the Mastodon instance i use.
I have the message: "This app could not obtain authentication from that server instance"

i have in the adb logcat the following message when i click on the Login with Mastodon button:
I run the app on Android 7.
The server used is https://social.targaryen.house
it use strict tls version, you can see here: https://tls.imirhil.fr/https/social.targaryen.house

04-03 01:11:05.560 1477-1477/com.keylesspalace.tusky W/System.err: javax.net.ssl.SSLHandshakeException: Handshake failed
04-03 01:11:05.561 1477-1477/com.keylesspalace.tusky W/System.err:     at com.android.org.conscrypt.OpenSSLSocketImpl.startHandshake(OpenSSLSocketImpl.java:429)
04-03 01:11:05.562 1477-1477/com.keylesspalace.tusky W/System.err:     at okhttp3.internal.connection.RealConnection.connectTls(RealConnection.java:267)
04-03 01:11:05.562 1477-1477/com.keylesspalace.tusky W/System.err:     at okhttp3.internal.connection.RealConnection.establishProtocol(RealConnection.java:237)
04-03 01:11:05.562 1477-1477/com.keylesspalace.tusky W/System.err:     at okhttp3.internal.connection.RealConnection.connect(RealConnection.java:148)
04-03 01:11:05.563 1477-1477/com.keylesspalace.tusky W/System.err:     at okhttp3.internal.connection.StreamAllocation.findConnection(StreamAllocation.java:186)
04-03 01:11:05.563 1477-1477/com.keylesspalace.tusky W/System.err:     at okhttp3.internal.connection.StreamAllocation.findHealthyConnection(StreamAllocation.java:121)
04-03 01:11:05.563 1477-1477/com.keylesspalace.tusky W/System.err:     at okhttp3.internal.connection.StreamAllocation.newStream(StreamAllocation.java:100)
04-03 01:11:05.564 1477-1477/com.keylesspalace.tusky W/System.err:     at okhttp3.internal.connection.ConnectInterceptor.intercept(ConnectInterceptor.java:42)
04-03 01:11:05.564 1477-1477/com.keylesspalace.tusky W/System.err:     at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:92)
04-03 01:11:05.564 1477-1477/com.keylesspalace.tusky W/System.err:     at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:67)
04-03 01:11:05.565 1477-1477/com.keylesspalace.tusky W/System.err:     at okhttp3.internal.cache.CacheInterceptor.intercept(CacheInterceptor.java:93)
04-03 01:11:05.565 1477-1477/com.keylesspalace.tusky W/System.err:     at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:92)
04-03 01:11:05.565 1477-1477/com.keylesspalace.tusky W/System.err:     at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:67)
04-03 01:11:05.566 1477-1477/com.keylesspalace.tusky W/System.err:     at okhttp3.internal.http.BridgeInterceptor.intercept(BridgeInterceptor.java:93)
04-03 01:11:05.566 1477-1477/com.keylesspalace.tusky W/System.err:     at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:92)
04-03 01:11:05.567 1477-1477/com.keylesspalace.tusky W/System.err:     at okhttp3.internal.http.RetryAndFollowUpInterceptor.intercept(RetryAndFollowUpInterceptor.java:120)
04-03 01:11:05.567 1477-1477/com.keylesspalace.tusky W/System.err:     at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:92)
04-03 01:11:05.567 1477-1477/com.keylesspalace.tusky W/System.err:     at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:67)
04-03 01:11:05.568 1477-1477/com.keylesspalace.tusky W/System.err:     at okhttp3.RealCall.getResponseWithInterceptorChain(RealCall.java:179)
04-03 01:11:05.568 1477-1477/com.keylesspalace.tusky W/System.err:     at okhttp3.RealCall$AsyncCall.execute(RealCall.java:129)
04-03 01:11:05.569 1477-1477/com.keylesspalace.tusky W/System.err:     at okhttp3.internal.NamedRunnable.run(NamedRunnable.java:32)
04-03 01:11:05.569 1477-1477/com.keylesspalace.tusky W/System.err:     at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1133)
04-03 01:11:05.569 1477-1477/com.keylesspalace.tusky W/System.err:     at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:607)
04-03 01:11:05.570 1477-1477/com.keylesspalace.tusky W/System.err:     at java.lang.Thread.run(Thread.java:776)
04-03 01:11:05.571 1477-1477/com.keylesspalace.tusky W/System.err: 	Suppressed: javax.net.ssl.SSLHandshakeException: Handshake failed
04-03 01:11:05.572 1477-1477/com.keylesspalace.tusky W/System.err: 		... 24 more
04-03 01:11:05.573 1477-1477/com.keylesspalace.tusky W/System.err: 	Caused by: javax.net.ssl.SSLProtocolException: SSL handshake terminated: ssl=0x7646f11a40: Failure in SSL library, usually a protocol error
04-03 01:11:05.574 1477-1477/com.keylesspalace.tusky W/System.err: error:10000410:SSL routines:OPENSSL_internal:SSLV3_ALERT_HANDSHAKE_FAILURE (external/boringssl/src/ssl/s3_pkt.c:610 0x76460766e0:0x00000001)
04-03 01:11:05.574 1477-1477/com.keylesspalace.tusky W/System.err: error:1000009a:SSL routines:OPENSSL_internal:HANDSHAKE_FAILURE_ON_CLIENT_HELLO (external/boringssl/src/ssl/s3_clnt.c:764 0x7657bf2f76:0x00000000)
04-03 01:11:05.574 1477-1477/com.keylesspalace.tusky W/System.err:     at com.android.org.conscrypt.NativeCrypto.SSL_do_handshake(Native Method)
04-03 01:11:05.575 1477-1477/com.keylesspalace.tusky W/System.err:     at com.android.org.conscrypt.OpenSSLSocketImpl.startHandshake(OpenSSLSocketImpl.java:357)
04-03 01:11:05.575 1477-1477/com.keylesspalace.tusky W/System.err: 		... 23 more
04-03 01:11:05.576 1477-1477/com.keylesspalace.tusky W/System.err: Caused by: javax.net.ssl.SSLProtocolException: SSL handshake terminated: ssl=0x7646f11a40: Failure in SSL library, usually a protocol error
04-03 01:11:05.577 1477-1477/com.keylesspalace.tusky W/System.err: error:1000042e:SSL routines:OPENSSL_internal:TLSV1_ALERT_PROTOCOL_VERSION (external/boringssl/src/ssl/s3_pkt.c:610 0x76460766e0:0x00000001)
04-03 01:11:05.577 1477-1477/com.keylesspalace.tusky W/System.err:     at com.android.org.conscrypt.NativeCrypto.SSL_do_handshake(Native Method)
04-03 01:11:05.577 1477-1477/com.keylesspalace.tusky W/System.err:     at com.android.org.conscrypt.OpenSSLSocketImpl.startHandshake(OpenSSLSocketImpl.java:357)
04-03 01:11:05.578 1477-1477/com.keylesspalace.tusky W/System.err: 	... 23 more 

Push notifications with federated instances

App Version: 1.1.0
Android Version: 7.1.2

Push notifications haven't ever been very reliable for me, but since moving to my own Mastodon instance, I wanted to confirm that I should still get push notifications from my instance? Also, any idea why pushes are so unreliable?

Missing expected Android UI elements

There are a few basic UI elements one expects to find that are missing.

Most notably headers for the preferences panes need to be added that tell what screen you're even looking at and have back buttons. Individual toot screens have this as expected but the preference screens don't.

When scrolling way down in a timeline there doesn't seem to be an easy way back to the top. One is forced to flick enough to scroll all the way back.

An "About" entry in the main nav with links to the project page and where to file issues would also be nice.

Duplicated interface

I don't know how to reproduce it yet, but it happened two times after swipe down to update. Its like if the background of the app were a screenshot taken at the moment of the update. My device is a Motorola Moto G2 (2014). Sorry for my grammar mistakes.
screenshot_20170308-174810
screenshot_20170308-174815
screenshot_20170308-174807

Can translate app

Hi
i search on code (i'm not very good on java so maybe i don't see if possible) but i don't found translate file.
It's cool if app Can be translate (i Can translate on french) :)

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.