Coder Social home page Coder Social logo

tinode / tindroid Goto Github PK

View Code? Open in Web Editor NEW
342.0 23.0 191.0 28.61 MB

Tinode chat client application for Android

License: Apache License 2.0

Java 100.00%
android-messenger messaging instant-messaging messenger-client android-chat-sdk android-chat chat-sdk chat telegram whatsapp android tinode java video-conferencing video-call video-chat webrtc

tindroid's Introduction

Tindroid: Tinode Messaging Client for Android

Android instant messenger using Tinode backend. Beta-quality software. Debug APKs are available in releases.

Installing and running

This is NOT a standalone app, this is just a frontend, a client. It requires a backend. See installation instructions.

Getting support

Helping out

  • If you appreciate our work, please help spread the word! Sharing on Reddit, HN, and other communities helps more than you think.
  • Consider buying paid support: https://tinode.co/support.html
  • If you are a software developer, send us your pull requests with bug fixes and new features.
  • If you use the app and discover bugs or missing features, let us know by filing bug reports and feature requests. Vote for existing feature requests you find most valuable.
  • If you speak a language other than English, translate the apps into your language. You may also review and improve existing translations.
  • If you are a UI/UX expert, help us polish the app UI.
  • Use it: install it for your colleagues or friends at work or at home. Please contact us if you want to participate in closed testing.

What works:

  • One-on-one conversations and group chats.
  • Channels with unlimited number of read-only subscribers.
  • Video and audio calling.
  • Attachments, inline images and videos, voice messages.
  • Unread message counters.
  • Push notifications and in-app presence notifications.
  • Message status notifications: message delivery to server; received and read notifications; typing notifications.
  • Markdown-style formatting of text, e.g. *styled* → styled. Implemented as spannable.
  • Editing sent messages, replying and forwarding messages.
  • Trusted account badges: verified account, staff, etc.
  • Form messages suitable for chatbots.
  • File attachments, inline images and videos, voice messages.
  • Muting/un-muting conversations and other granular permission management.
  • Integration with Android's stock Contacts.
  • Invite contacts to the app by SMS or email.
  • Transport Level Security - https/wss.
  • Offline mode.

Not done yet:

  • End-to-end encryption.
  • Recording of video messages.
  • No support for switching between multiple backends.
  • No support for multiple accounts.
  • Mentions, hashtags.
  • Previews not generated for audio, links or docs.

Direct Dependencies

SDK:

SDK contains no Android-specific dependencies.

Application

Other

Demo avatars and some other graphics are from https://www.pexels.com/ under CC0 license.

Background patterns from http://subtlepatterns.com/, commercial and non-commercial use allowed with attribution.

The contacts.vcf contains a list of contacts which can be used for testing. Push it to your emulator using command

adb push contacts.vcf /sdcard/contacts.vcf

Push notifications

If you want to use the app with your own server and want push notification to work you have to set them up:

  • Register at https://firebase.google.com/, set up the project if you have not done so already.
  • Download your own config file google-services.json and place it to the app/ folder of your copy of Tindroid project. The config file contains keys specific to your Firebase/FCM registration.
  • Copy Google-provided server key to tinode.conf, see details here.
  • Recompile the app. If you add google-services.json incorrectly the app will compile but will later crash with non-obvious exceptions.

Translations

The app is currently available in the following languages:

  • English
  • Chinese (simplified)
  • Chinese (traditional)
  • French
  • German
  • Hindi
  • Korean
  • Portuguese
  • Romanian
  • Russian
  • Spanish
  • Ukrainian

More translations are welcome. See instructions.

Screenshots

App screenshot - chat list App screenshot - chat App screenshot - chat settings App screenshot - video call App screenshot - searching for contacts App screenshot - forward message

tindroid's People

Contributors

5idereal avatar aforge avatar ericcontainer avatar ivantrasnitu avatar kimtaeyong98 avatar ksxkq avatar msh91 avatar natowi avatar or-else avatar prathamkumar1812 avatar wttbddsk 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

tindroid's Issues

uid cannot notify authentication for accounts of type: co.tinode.account

REJECTING promise com.myapp.tinodesdk.PromisedReply@11c8b2
java.lang.SecurityException: uid 1010341 cannot notify authentication for accounts of type: co.tinode.account
at android.os.Parcel.createException(Parcel.java:1950)
at android.os.Parcel.readException(Parcel.java:1918)
at android.os.Parcel.readException(Parcel.java:1868)
at android.accounts.IAccountManager$Stub$Proxy.accountAuthenticated(IAccountManager.java:1646)
at android.accounts.AccountManager.notifyAccountAuthenticated(AccountManager.java:1062)
at com.myapp.app.LoginOtpFragment.addAndroidAccount(LoginOtpFragment.java:249)
at com.myapp.app.LoginOtpFragment.access$200(LoginOtpFragment.java:45)
at com.myapp.app.LoginOtpFragment$2.onSuccess(LoginOtpFragment.java:196)
at com.myapp.app.LoginOtpFragment$2.onSuccess(LoginOtpFragment.java:190)
at com.myapp.tinodesdk.PromisedReply.callOnSuccess(PromisedReply.java:165)
at com.myapp.tinodesdk.PromisedReply.resolve(PromisedReply.java:241)
at com.myapp.tinodesdk.PromisedReply.handleSuccess(PromisedReply.java:197)
at com.myapp.tinodesdk.PromisedReply.callOnSuccess(PromisedReply.java:171)
at com.myapp.tinodesdk.PromisedReply.resolve(PromisedReply.java:241)
at com.myapp.tinodesdk.PromisedReply.handleSuccess(PromisedReply.java:197)
at com.myapp.tinodesdk.PromisedReply.callOnSuccess(PromisedReply.java:171)
at com.myapp.tinodesdk.PromisedReply.resolve(PromisedReply.java:241)
at com.myapp.tinodesdk.Tinode.dispatchPacket(Tinode.java:438)
at com.myapp.tinodesdk.Tinode.access$500(Tinode.java:65)
at com.myapp.tinodesdk.Tinode$1.onMessage(Tinode.java:309)
at com.myapp.tinodesdk.Connection$TinodeWSClient.onMessage(Connection.java:200)
at org.java_websocket.client.WebSocketClient.onWebsocketMessage(WebSocketClient.java:492)
at org.java_websocket.drafts.Draft_6455.processFrame(Draft_6455.java:709)
at org.java_websocket.WebSocketImpl.decodeFrames(WebSocketImpl.java:367)
at org.java_websocket.WebSocketImpl.decode(WebSocketImpl.java:212)
at org.java_websocket.client.WebSocketClient.run(WebSocketClient.java:417)
at java.lang.Thread.run(Thread.java:764)
Caused by: android.os.RemoteException: Remote stack trace:
at com.android.server.accounts.AccountManagerService.accountAuthenticated(AccountManagerService.java:1698)
at android.accounts.IAccountManager$Stub.onTransact(IAccountManager.java:563)
at com.android.server.accounts.AccountManagerService.onTransact(AccountManagerService.java:1075)
at android.os.Binder.execTransact(Binder.java:731)

Query

cannot resolve symbol error for(android.support.v7.app.AppCompatActivity ) in new update, why? can u please explain.

Image update in TopicInfo closes the fragment

When editing details of a group topic as the topic owner, new image upload immediately closes the TopicInfo fragment. The image in the app (locally) does not get updated. On the server, though, it does. So reloading the app displays the updated image for the group topic.

Steps to reproduce the behavior:

  1. Log in as alice.
  2. Open "Travel, travel, travel" topic.
  3. Tap on "i" icon in the title bar. This will bring forward the TopicInfo fragment.
  4. Upload a new image.
  5. The fragment disappears. Image is not updated.

Expected behavior
The fragment should not disappear. Image should get updated right away.

New message not displaying

When receiving new message the app is not able to display, in the logcat, it throws the below message

java.lang.NullPointerException: Attempt to invoke virtual method 'co.tinode.tinodesdk.LocalData$Payload co.tinode.tinodesdk.model.Subscription.getLocal()' on a null object reference at co.tinode.tindroid.db.SqlStore.msgReceived(SqlStore.java:202) at co.tinode.tinodesdk.Topic.routeData(Topic.java:1418) at co.tinode.tinodesdk.Tinode.dispatchPacket(Tinode.java:432) at co.tinode.tinodesdk.Tinode.access$500(Tinode.java:62) at co.tinode.tinodesdk.Tinode$1.onMessage(Tinode.java:302) at co.tinode.tinodesdk.Connection$TinodeWSClient.onMessage(Connection.java:202) at org.java_websocket.client.WebSocketClient.onWebsocketMessage(WebSocketClient.java:292) at org.java_websocket.WebSocketImpl.decodeFrames(WebSocketImpl.java:417) at org.java_websocket.WebSocketImpl.decode(WebSocketImpl.java:170) at org.java_websocket.client.WebSocketClient.run(WebSocketClient.java:229) at java.lang.Thread.run(Thread.java:761)

Duplicate {hi} message with device ID

It seems like there is another bug related to {hi}:

2019-10-07 10:42:48.278 25013-25013/co.tinode.tindroid I/Tinode: out: {"hi":{"dev":"d4lJE6rcE7g:APA91bF2D9eHvx0bPZ_BZ5kSHlLXu3E5kmf-4kM3vk7M7lkfJSdqkDS-2X1mF1hWzzoZYxCLMIHcA5F3TTuU55VmgLTSr6vqvs-gIlmbYBoPRWKkbtb7xx6n18GmrhdIcbLflQY4MG-j","id":"91251"}}
2019-10-07 10:42:48.286 25013-25013/co.tinode.tindroid I/Tinode: out: {"hi":{"dev":"d4lJE6rcE7g:APA91bF2D9eHvx0bPZ_BZ5kSHlLXu3E5kmf-4kM3vk7M7lkfJSdqkDS-2X1mF1hWzzoZYxCLMIHcA5F3TTuU55VmgLTSr6vqvs-gIlmbYBoPRWKkbtb7xx6n18GmrhdIcbLflQY4MG-j","id":"91252"}}
2019-10-07 10:42:48.289 25013-25013/co.tinode.tindroid I/Tinode: out: {"hi":{"dev":"d4lJE6rcE7g:APA91bF2D9eHvx0bPZ_BZ5kSHlLXu3E5kmf-4kM3vk7M7lkfJSdqkDS-2X1mF1hWzzoZYxCLMIHcA5F3TTuU55VmgLTSr6vqvs-gIlmbYBoPRWKkbtb7xx6n18GmrhdIcbLflQY4MG-j","id":"91253"}}
2019-10-07 10:42:48.293 25013-25013/co.tinode.tindroid I/Tinode: out: {"hi":{"dev":"d4lJE6rcE7g:APA91bF2D9eHvx0bPZ_BZ5kSHlLXu3E5kmf-4kM3vk7M7lkfJSdqkDS-2X1mF1hWzzoZYxCLMIHcA5F3TTuU55VmgLTSr6vqvs-gIlmbYBoPRWKkbtb7xx6n18GmrhdIcbLflQY4MG-j","id":"91254"}}
2019-10-07 10:42:48.296 25013-25013/co.tinode.tindroid I/Tinode: out: {"hi":{"dev":"d4lJE6rcE7g:APA91bF2D9eHvx0bPZ_BZ5kSHlLXu3E5kmf-4kM3vk7M7lkfJSdqkDS-2X1mF1hWzzoZYxCLMIHcA5F3TTuU55VmgLTSr6vqvs-gIlmbYBoPRWKkbtb7xx6n18GmrhdIcbLflQY4MG-j","id":"91255"}}
2019-10-07 10:42:48.299 25013-25013/co.tinode.tindroid I/Tinode: out: {"hi":{"dev":"d4lJE6rcE7g:APA91bF2D9eHvx0bPZ_BZ5kSHlLXu3E5kmf-4kM3vk7M7lkfJSdqkDS-2X1mF1hWzzoZYxCLMIHcA5F3TTuU55VmgLTSr6vqvs-gIlmbYBoPRWKkbtb7xx6n18GmrhdIcbLflQY4MG-j","id":"91256"}}
2019-10-07 10:42:48.310 25013-25013/co.tinode.tindroid I/Tinode: out: {"hi":{"dev":"d4lJE6rcE7g:APA91bF2D9eHvx0bPZ_BZ5kSHlLXu3E5kmf-4kM3vk7M7lkfJSdqkDS-2X1mF1hWzzoZYxCLMIHcA5F3TTuU55VmgLTSr6vqvs-gIlmbYBoPRWKkbtb7xx6n18GmrhdIcbLflQY4MG-j","id":"91257"}}

Empty chat list on cold start

I think there's a bug in ContactsActivity on line 107 (devel branch) that causes the list to not be updated. This line should be as following:
Fragment fragment = fm.findFragmentByTag(FRAGMENT_CHAT_LIST);

Modify setting serveur

Hi,

I can not find the solution to remove the default IP address and put the one I need instead.

I found the 2 places where it was written 10.0.2.2:6060 as well as the name Host name but once the modifications made, I always have the same value to the IP address

bug_ip

Broken Pipe when i try to send big file (file >100kb approximatly) to another user over chat.

i got always a Broken Pipe bugs when i try to send big file (file >100kb approximatly) to another user over chat.
here ist the printStackTrace() for Exception that i got :

E/MessageFragment: Failed to attach file
java.net.SocketException: Broken pipe
at java.net.SocketOutputStream.socketWrite0(Native Method)
at java.net.SocketOutputStream.socketWrite(SocketOutputStream.java:112)
at java.net.SocketOutputStream.write(SocketOutputStream.java:157)
at com.android.okhttp.okio.Okio$1.write(Okio.java:76)
at com.android.okhttp.okio.AsyncTimeout$1.write(AsyncTimeout.java:155)
at com.android.okhttp.okio.RealBufferedSink.emitCompleteSegments(RealBufferedSink.java:176)
at com.android.okhttp.okio.RealBufferedSink.write(RealBufferedSink.java:46)
at com.android.okhttp.internal.http.RetryableSink.writeToSocket(RetryableSink.java:78)
at com.android.okhttp.internal.http.HttpConnection.writeRequestBody(HttpConnection.java:240)
at com.android.okhttp.internal.http.HttpTransport.writeRequestBody(HttpTransport.java:56)
at com.android.okhttp.internal.http.HttpEngine.readResponse(HttpEngine.java:778)
at com.android.okhttp.internal.huc.HttpURLConnectionImpl.execute(HttpURLConnectionImpl.java:463)
at com.android.okhttp.internal.huc.HttpURLConnectionImpl.getResponse(HttpURLConnectionImpl.java:405)
at com.android.okhttp.internal.huc.HttpURLConnectionImpl.getResponseCode(HttpURLConnectionImpl.java:521)
at co.tinode.tinodesdk.LargeFileHelper.upload(LargeFileHelper.java:78)
at com.android.gudana.tindroid.MessagesFragment.doUpload(MessagesFragment.java:1337)
at com.android.gudana.tindroid.MessagesFragment.access$1000(MessagesFragment.java:130)
at com.android.gudana.tindroid.MessagesFragment$FileUploader.loadInBackground(MessagesFragment.java:1213)
at com.android.gudana.tindroid.MessagesFragment$FileUploader.loadInBackground(MessagesFragment.java:1177)
at android.support.v4.content.AsyncTaskLoader.onLoadInBackground(AsyncTaskLoader.java:306)
at android.support.v4.content.AsyncTaskLoader$LoadTask.doInBackground(AsyncTaskLoader.java:59)
at android.support.v4.content.AsyncTaskLoader$LoadTask.doInBackground(AsyncTaskLoader.java:47)
at android.support.v4.content.ModernAsyncTask$2.call(ModernAsyncTask.java:138)
at java.util.concurrent.FutureTask.run(FutureTask.java:237)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1133)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:607)
at java.lang.Thread.run(Thread.java:776)

Release Android Version : v0.15.8-rc1

Server Side : linux Ubuntu 16.04
version of tinode server, : v0.15.8-rc1'
database backend : mysql.

Client-side
Tindroid: Android app: Android API level ( 25 , 24 , 27).

the class responsible for the exception is this one : LargeFileHelper.java line 78 .
I get a wrong answer from the remote server and the client close the connection in finally block " conn.disconnect();"

on Server Side maybe i must increase the size of file or the handler ....

// Large media/blob handlers.
"media": {
	// Media handler to use
	"use_handler": "fs",
	// Maximum size of uploaded file (8MB here for testing, maybe increase to 100MB = 104857600 in prod)
	"max_size": 104857600,
	// Garbage collection periodicity in seconds
	"gc_period": 60,
	// Number of unused entries to delete in one pass
	"gc_block_size": 100,
	// Configurations for various handlers.
	"handlers": {
		// File system storage.
		"fs": {
			// File system location to store uploaded files. In case of a cluster it
			// must be accessible by all cluster members, i.e. a network drive.
			"upload_dir": "uploads"
		},
		}
	}
},

any idea of ​​the cause of this error ....

Search users based on their discovery tags

There is a feature in WebApp that we are able to find topics based on their public tags and subscribe to them (This option is very useful in finding open to subscribing topics and is existed in Telegram for example). Is there a similar feature in Tindroid? I know there's already an issue similar to this (#3) but I couldn't understand how using "Start by Id" option is related to this.

what's the logic of loginToken

In method : loginToken(String token, Credential[] creds)
what does Credential[] mean?
I want use token generated by my other user system ,what can be the logic ?

How to just delete a conversation but not delete a topic?

I found a delete button (ChatListFragment) but It doesn't work, the code like that:

/**
* This menu is shown when one or more items are selected from the list
*/
@OverRide
public boolean onActionItemClicked(ActionMode mode, MenuItem item) {
switch (item.getItemId()) {
case R.id.action_delete:
SparseBooleanArray selected = mAdapter.getSelectedIds();
for (int i = 0; i < selected.size(); i++) {
if (selected.valueAt(i)) {
Log.d(TAG, "deleting item at " + selected.keyAt(i));
}
}
// Close CAB
mode.finish();
return true;

        case R.id.action_mute:
            Log.d(TAG, "muting item");
            mode.finish();
            return true;

        case R.id.action_edit:
            Log.d(TAG, "editing item");
            mode.finish();
            return true;

        default:
            Log.d(TAG, "unknown menu action");
            return false;
    }
}

How to just delete a conversation but not delete a topic? or can you tell me how to make a contract list.
thanks! My English is so bad , forgive me.

Android Studio Make Project : Could not find play-services-basement.aar

Hi,

I can not create the Tindroid apk anymore with Android Studio. I must admit that I am not a developper. However, last week, it worked without any bug

When I want to build, I have the following message:
Could not find play-services-basement.aar (com.google.android.gms:play-services-basement:15.0.1). Searched in the following locations: https://jcenter.bintray.com/com/google/android/gms/play-services-basement/15.0.1/play-services-basement-15.0.1.aar
When searching the Internet, I found this: : https://stackoverflow.com/questions/50563407/could-not-find-play-services-basement-aar

Thank for your help

[Android] Group Chat

While creating a new group chat with other user which is also online, group chat is to be seen only on creator's device whilst on invited device chat is invisible. The only way to see the group chat on invited device is to close and then re-open the app.

push Notification config on Android client and Server side with linode.conf

hello linode community , how to configure the notifications on server side ? , i have already genrate my own google service.json file on firebase , but i don't know exactlly where i should paste the Cloud messaging api_key ....
do you have a tutorial how to configure this with the tinode.conf?

[*] Bug report

Server-side
api.tinode.co
Your own setup:
linux Ubuntu 16.04
version of tinode server, : v0.15.8-rc1'
database backend : mysql

Client-side
Tindroid: Android app
Android API level ( 25 , 27).

new message touch time not sync with server

in metopic at routepres when new message arrived,
call topic.setTouched(new Date());

but the new Date() may not sync with the time on server.So I think server should add touchtime in pres msg.

Tindroid : Facebook and Google desactived

Hi,

I would like to delete the possibility of being able to create an account on the serer with Facebbok and Google accounts.

I only want the ability to create an account from the server

I could not find the place where I have to comment on the lines (or delete)

Thank you ;)

Query in the Appliction...

In android application i want to add my own json format....so where should i add?
{"Domain_Name": "None"
"Domain_Value": "None"
"Original_Message": "hii"
"PopUp_Type": "flight"
"Response_Message": "flight"
"Ruled_Message": message
"UserType": "user"
"Username":"User name"}

And I want access individual object from my json,help me with that too...

No completes available in the package..

E:\GitHub\android-example-master\app\src\main\java\co\tinode\tindroid\MessagesListAdapter.java
Error:(118, 44) error: cannot find symbol variable bubble_r
Error:(118, 66) error: cannot find symbol variable bubble_l
Error:(121, 48) error: cannot find symbol variable bubble_r
Error:(121, 70) error: cannot find symbol variable bubble_l
Error:(126, 48) error: cannot find symbol variable bubble_r_z
Error:(126, 72) error: cannot find symbol variable bubble_l_z
Error:(131, 48) error: cannot find symbol variable bubble_r_z
Error:(131, 72) error: cannot find symbol variable bubble_l_z
Error:(136, 48) error: cannot find symbol variable bubble_r
Error:(136, 70) error: cannot find symbol variable bubble_l

File uploads stall when app restarts

  1. Send a large file as an attachment.
  2. While the file is uploading, kill the app.
  3. Restart the app - the message draft is still there with the progress bar and the cancel button. However, it's making no progress.

We should either cancel (and update the UI to display an error on the message) or restart the upload.

Login often fails after "Create new user"

  1. Tap on “Create new user” button
  2. Fill all fields
  3. Tap on “Sign Up”
  4. Try to login with the new username and password

Sometimes a user can login, but most often I get the following error:

"Login failed: already authenticated (409)"

Question: why generate an additional APK?

Hi
i have a question about your build.gradle
why do you generate 4 type APK based on architecture, while your project doesn't use any machine dependent code like C lib?

Check if phone contact is registered in database

I have added a new contact in my phone and the email of that contact is a registered user in the remote database but when it's loaded in contact list fragment there's an invite button beside it and I can't start to chat with that contact. How I start the chat with this contact?
Also, there's a feature in Web app that user can find other users by querying their email like 'email:[email protected]'. How can this feature be achieved in android application?

NullPointerException on Bitmap when attempts to initialize contacts list

I tried to log in via "alice" predefined user. the contacts list was empty, so i have started a new chat with one of the contacts and when i returned to ContactActivity , it throws a NullPointerException. And now whenever i try to open the app, it throws the same exception.

Logcat output:
java.lang.NullPointerException: Attempt to invoke virtual method 'int android.graphics.Bitmap.getWidth()' on a null object reference at co.tinode.tindroid.widgets.LetterTileDrawable.drawLetterTile(LetterTileDrawable.java:160) at co.tinode.tindroid.widgets.LetterTileDrawable.draw(LetterTileDrawable.java:104) at android.widget.ImageView.onDraw(ImageView.java:1367) at android.view.View.draw(View.java:19192) at android.view.View.updateDisplayListIfDirty(View.java:18142) at android.view.View.draw(View.java:18920) at android.view.ViewGroup.drawChild(ViewGroup.java:4236) at android.view.ViewGroup.dispatchDraw(ViewGroup.java:4022) at android.view.View.updateDisplayListIfDirty(View.java:18133) at android.view.View.draw(View.java:18920) at android.view.ViewGroup.drawChild(ViewGroup.java:4236) at android.view.ViewGroup.dispatchDraw(ViewGroup.java:4022) at android.view.View.draw(View.java:19195) at android.view.View.updateDisplayListIfDirty(View.java:18142) at android.view.View.draw(View.java:18920) at android.view.ViewGroup.drawChild(ViewGroup.java:4236) at android.widget.ListView.drawChild(ListView.java:3590) at android.view.ViewGroup.dispatchDraw(ViewGroup.java:4022) at android.widget.AbsListView.dispatchDraw(AbsListView.java:2638) at android.widget.ListView.dispatchDraw(ListView.java:3585) at android.view.View.draw(View.java:19195) at android.widget.AbsListView.draw(AbsListView.java:4310) at android.view.View.updateDisplayListIfDirty(View.java:18142) at android.view.View.draw(View.java:18920) at android.view.ViewGroup.drawChild(ViewGroup.java:4236) at android.view.ViewGroup.dispatchDraw(ViewGroup.java:4022) at android.view.View.draw(View.java:19195) at android.view.View.updateDisplayListIfDirty(View.java:18142) at android.view.View.draw(View.java:18920) at android.view.ViewGroup.drawChild(ViewGroup.java:4236) at android.view.ViewGroup.dispatchDraw(ViewGroup.java:4022) at android.view.View.draw(View.java:19195) at android.support.v4.view.ViewPager.draw(ViewPager.java:2420) at android.view.View.updateDisplayListIfDirty(View.java:18142) at android.view.View.draw(View.java:18920) at android.view.ViewGroup.drawChild(ViewGroup.java:4236) at android.view.ViewGroup.dispatchDraw(ViewGroup.java:4022) at android.view.View.draw(View.java:19195) at android.view.View.updateDisplayListIfDirty(View.java:18142) at android.view.View.draw(View.java:18920) at android.view.ViewGroup.drawChild(ViewGroup.java:4236) at android.view.ViewGroup.dispatchDraw(ViewGroup.java:4022) at android.view.View.updateDisplayListIfDirty(View.java:18133) at android.view.View.draw(View.java:18920) at android.view.ViewGroup.drawChild(ViewGroup.java:4236) at android.view.ViewGroup.dispatchDraw(ViewGroup.java:4022) at android.view.View.updateDisplayListIfDirty(View.java:18133) at android.view.View.draw(View.java:18920) at android.view.ViewGroup.drawChild(ViewGroup.java:4236) at android.view.ViewGroup.dispatchDraw(ViewGroup.java:4022) at android.view.View.updateDisplayListIfDirty(View.java:18133) at android.view.View.draw(View.java:18920) at android.view.ViewGroup.drawChild(ViewGroup.java:4236) at android.view.ViewGroup.dispatchDraw(ViewGroup.java:4022) at android.view.View.updateDisplayListIfDirty(View.java:18133) at android.view.View.draw(View.java:18920) at android.view.ViewGroup.drawChild(ViewGroup.java:4236) at android.view.ViewGroup.dispatchDraw(ViewGroup.java:4022) at android.view.View.updateDisplayListIfDirty(View.java:18133) at android.view.View.draw(View.java:18920) at android.view.ViewGroup.drawChild(ViewGroup.java:4236) at android.view.ViewGroup.dispatchDraw(ViewGroup.java:4022) at android.view.View.updateDisplayListIfDirty(View.java:18133) at android.view.View.draw(View.java:18920) at android.view.ViewGroup.drawChild(ViewGroup.java:4236) at android.view.ViewGroup.dispatchDraw(ViewGroup.java:4022) at android.view.View.updateDisplayListIfDirty(View.java:18133) 08-27 11:18:40.754 2345-2345/co.tinode.tindroid E/AndroidRuntime: at android.view.View.draw(View.java:18920) at android.view.ViewGroup.drawChild(ViewGroup.java:4236) at android.view.ViewGroup.dispatchDraw(ViewGroup.java:4022) at android.view.View.draw(View.java:19195) at com.android.internal.policy.DecorView.draw(DecorView.java:788) at android.view.View.updateDisplayListIfDirty(View.java:18142) at android.view.ThreadedRenderer.updateViewTreeDisplayList(ThreadedRenderer.java:669) at android.view.ThreadedRenderer.updateRootDisplayList(ThreadedRenderer.java:675) at android.view.ThreadedRenderer.draw(ThreadedRenderer.java:783) at android.view.ViewRootImpl.draw(ViewRootImpl.java:2992) at android.view.ViewRootImpl.performDraw(ViewRootImpl.java:2806) at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:2359) at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1392) at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:6752) at android.view.Choreographer$CallbackRecord.run(Choreographer.java:911) at android.view.Choreographer.doCallbacks(Choreographer.java:723) at android.view.Choreographer.doFrame(Choreographer.java:658) at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:897) at android.os.Handler.handleCallback(Handler.java:790) at android.os.Handler.dispatchMessage(Handler.java:99) at android.os.Looper.loop(Looper.java:164) at android.app.ActivityThread.main(ActivityThread.java:6494) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:438) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:807)

Unknown push notification title

Push notification title is unknown until to kill and restart app

To Reproduce
Steps to reproduce the behavior:

  1. Install app and just login it
  2. Send a message to that user from another app
  3. See title of push notification

Screenshots
image

Tindroid

  • Version [0.16.1-rc2-3g64c6b09]
  • Device [Android Emulator - Android_9.0_Pie]
  • Android API Version [28]

Server

  • Type [api.tinode.co]
  • Server type [customized]

Additional context
2019-09-12 15:32:00.762 21955-22020/co.tinode.tindroid D/FBaseMessagingService: FCM data payload: {ts=2019-09-12T10:32:11.005Z, seq=32, mime=, topic=usrbeLYE9FVask, xfrom=usrbeLYE9FVask, content=I think this is issue}

Orphaned connections on restarting a cluster

Tindroid opens up connections and drops them immediately when the cluster restarts.

Steps to reproduce the behavior:

  1. Bring up a cluster (with a load balancing proxy).
  2. Connect Tinode to it.
  3. Take down all the servers.
  4. Bring up servers in a rapid succession.

Observe several "{hi} - {ctrl 201}" pairs in the logs.

These connections should either not be opened or closed immediately upon whatever the error that causes these connections to stall.

LoginActvity throws an IllegalStateException if the requested permission list id empty

this is the logcat report:

08-25 12:46:03.121 5264-5264/co.tinode.tindroid E/AndroidRuntime: FATAL EXCEPTION: main Process: co.tinode.tindroid, PID: 5264 java.lang.RuntimeException: Unable to start activity ComponentInfo{co.tinode.tindroid/co.tinode.tindroid.LoginActivity}: java.lang.IllegalArgumentException: permission cannot be null or empty at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2778) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2856) at android.app.ActivityThread.-wrap11(Unknown Source:0) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1589) at android.os.Handler.dispatchMessage(Handler.java:106) at android.os.Looper.loop(Looper.java:164) at android.app.ActivityThread.main(ActivityThread.java:6494) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:438) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:807) Caused by: java.lang.IllegalArgumentException: permission cannot be null or empty at android.content.pm.PackageManager.buildRequestPermissionsIntent(PackageManager.java:3544) at android.app.Activity.requestPermissions(Activity.java:4381) at android.support.v4.app.ActivityCompat.requestPermissions(ActivityCompat.java:507) at co.tinode.tindroid.LoginActivity.requestPermissions(LoginActivity.java:152) at co.tinode.tindroid.LoginActivity.onCreate(LoginActivity.java:117) at android.app.Activity.performCreate(Activity.java:7009) at android.app.Activity.performCreate(Activity.java:7000) at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1214) at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2731)

first login will break the connection

When I use username/password login to the server at the first time, the connection between client and server will disconnect.

05-17 03:05:23.606 1003-1098/co.tinode.tindroid D/Connection: onDisconnected for '' (1000); reconnecting=false
05-17 03:05:23.607 1003-1098/co.tinode.tindroid D/UiUtils: Network error

In SyncAdapter.java line 128, I commented out the code tinode.disconnect();. And it will not break the connection.

Recreating a just-deleted topic crashes the app

  1. Log in as alice
  2. Delete the chat with Frank
  3. Go to New Chat -> Find
  4. Click on Frank in the Phone Contacts section
    E/AndroidRuntime: FATAL EXCEPTION: main Process: co.tinode.tindroid, PID: 3195 java.lang.IllegalStateException: Restarter must be created only during owner's initialization stage at androidx.savedstate.SavedStateRegistryController.performRestore(SavedStateRegistryController.java:59) at androidx.fragment.app.Fragment.performCreate(Fragment.java:2527) at androidx.fragment.app.FragmentManagerImpl.moveToState(FragmentManagerImpl.java:843) at androidx.fragment.app.FragmentManagerImpl.moveFragmentToExpectedState(FragmentManagerImpl.java:1235) at androidx.fragment.app.FragmentManagerImpl.moveToState(FragmentManagerImpl.java:1301) at androidx.fragment.app.BackStackRecord.executeOps(BackStackRecord.java:710) at androidx.fragment.app.FragmentManagerImpl.executeOps(FragmentManagerImpl.java:2071) at androidx.fragment.app.FragmentManagerImpl.executeOpsTogether(FragmentManagerImpl.java:1861) at androidx.fragment.app.FragmentManagerImpl.removeRedundantOperationsAndExecute(FragmentManagerImpl.java:1816) at androidx.fragment.app.FragmentManagerImpl.execPendingActions(FragmentManagerImpl.java:1723) at androidx.fragment.app.FragmentManagerImpl$1.run(FragmentManagerImpl.java:146) at android.os.Handler.handleCallback(Handler.java:790) at android.os.Handler.dispatchMessage(Handler.java:99) at android.os.Looper.loop(Looper.java:164) at android.app.ActivityThread.main(ActivityThread.java:6494) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:438) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:807)

Access to topic tags in MessageAcitivity

Is it possible to have access to the topic tags in MessageActivity? The tags field of the topic object is null. I'm using a specific tag in some topics and I need this feature to detect the tag.

Error when installing apk

Hi,

I'im french, Sorry for my english...

I tried to install version 0.15.6 and version 0.15.5 on my smartphone.

I still have the same error message: The package seems corrupted

My smartphone is running Android 7.0

Thanks for your reponse

Best regards.

Android version compatibility?

With which version is Tindroid backward compatible?
A friend tried to install tindroid on Android 6 and installation fails.

With Android 6 and web client push notifications doesn't work. But I don't know which Android versions support push notifications.

I just use the web client with desktop and mobile (Android 8) and it's work fine.

Question, trying to connect server in application.

Hi!
I just installed Tindroid application (tindroid-arm64-v8a-debug.apk) and also installed server (
tinode-mysql.linux-amd64.tar.gz) at http://67.207.84.4:6060.
but when i set my server in application, it says that :"login failed: failed to connect to server after 3000ms"
I would appropriate if you can help.
Best Regards .

Duplication message issue

When you send a message to another user and close MessageActivity and also reopen it, the last message duplicated.

Android search contacts enhancement.

Hi, I think this feature can be considered:

  • People can search people to start 1-1 chat, not only within the phone contacts book, this will be more convenient for people to use: I mean wider use, not so close but more open.

ERROR: CreateProcess error=2, The system cannot find the file specified

Describe the bug
Trying to import/build in Android Studio

ERROR: CreateProcess error=2, The system cannot find the file specified

git is not installed on this Windows 10 PC, however,

static def gitVersionCode() {
def process = "git rev-list --count HEAD".execute()

image

Would be nice if git is not required. Thanks!

Messages are duplicated in app

Sometimes messages (both texts and photos) will come twice after each other in the messages list. There's only one copy in the remote database but they get duplicated on the client side. I couldn't reproduce this bug but it happens sometimes. Can you guide me in the direction to fix this issue? Maybe there are two pathways to insert in the local database? Thank you in advance.

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.