Merged

V2 #20

Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
22 changes: 15 additions & 7 deletions README.md
Original file line numberDiff line numberDiff line change
Expand Up@@ -10,7 +10,7 @@
</br>
</div>

CometChat Android Demo app (built using **CometChat Pro**) is a fully functional messaging app capable of **one-on-one** (private) and **group** messaging along with recent conversations. The app enables users to send **text** and **multimedia messages like audio, video, images, documents.**
CometChat Android Demo app (built using **CometChat Pro**) is a fully functional messaging app capable of **one-on-one** (private) and **group** messaging. The app enables users to send **text** and **multimedia messages like audio, video, images, documents.**

[![Platform](https://img.shields.io/badge/Platform-Android-brightgreen.svg)](#) [![Platform](https://img.shields.io/badge/Language-Java-yellowgreen.svg)](#)

Expand DownExpand Up@@ -81,40 +81,48 @@ To run our open source app with CometChat Pro v1, follow these steps:

` public static final String API_KEY = "XXXXXXXXX";`

- add `google-service.json` file for push notification


## Note




You can Obtain your *APP_ID* and *API_KEY* from [CometChat-Pro Dashboard](https://app.cometchat.com/)
You can Obtain your *APP_ID* and *API_KEY* from [CometChat-Pulse Dashboard](https://app.cometchat.com/)

For more information read [CometChat-Pro Android SDK](https://prodocs.cometchat.com/docs/android-quick-start) Documentation
For more information read [CometChat-Pulse Android SDK](https://prodocs.cometchat.com/docs/android-quick-start) Documentation




![Studio Guide](https://github.com/CometChat-Pulse/android-java-chat-app/blob/master/ScreenShots/guide.png)


## Push Notification

The Push Notification extension allows you to send push notifications to mobile apps and desktop browsers.

For more information read [Android-Push-Notification](https://prodocs.cometchat.com/docs/android-extensions-push-notification) Documentation.






## Screenshots

<img align="left" width="185" height="331" src="https://github.com/CometChat-Pulse/android-java-chat-app/blob/master/ScreenShots/gif1.gif">
<img align="left" width="185" height="331" src="https://github.com/CometChat-Pulse/android-java-chat-app/blob/master/ScreenShots/gif_1.gif">


<img align="left" width="185" height="331" src="https://github.com/CometChat-Pulse/android-java-chat-app/blob/master/ScreenShots/gif2.gif">
<img align="left" width="185" height="331" src="https://github.com/CometChat-Pulse/android-java-chat-app/blob/master/ScreenShots/gif_2.gif">


<img align="left" width="185" height="331" src="https://github.com/CometChat-Pulse/android-java-chat-app/blob/master/ScreenShots/gif3.gif">
<img align="left" width="185" height="331" src="https://github.com/CometChat-Pulse/android-java-chat-app/blob/CP-31/ScreenShots/gif_3.gif">



<img align="left" width="185" height="331" src="https://github.com/CometChat-Pulse/android-java-chat-app/blob/master/ScreenShots/gif4.gif">
<img align="left" width="185" height="331" src="https://github.com/CometChat-Pulse/android-java-chat-app/blob/CP-31/ScreenShots/gif_4.gif">

` `<br></br><br></br><br></br><br></br><br></br><br></br><br></br><br></br></br>

Expand Down
Binary file addedScreenShots/gif_1.gif
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file addedScreenShots/gif_2.gif
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file addedScreenShots/gif_3.gif
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file addedScreenShots/gif_4.gif
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
12 changes: 10 additions & 2 deletions app/build.gradle
Original file line numberDiff line numberDiff line change
Expand Up@@ -63,8 +63,16 @@ dependencies {
implementation 'com.github.bumptech.glide:glide:4.8.0'
annotationProcessor 'com.github.bumptech.glide:compiler:4.8.0'

//cometchat sdk
implementation 'com.cometchat:pro-android-chat-sdk:2.0.0-beta8'
//Firebase
implementation 'com.google.android.gms:play-services-auth:17.0.0'
implementation 'com.google.android.gms:play-services-plus:17.0.0'
implementation 'com.google.firebase:firebase-core:17.2.1'
implementation 'com.google.firebase:firebase-messaging:20.1.0'
implementation 'com.google.android.gms:play-services-maps:17.0.0'
implementation 'com.google.android.gms:play-services-location:17.0.0'
implementation 'com.google.android.gms:play-services-places:17.0.0'

implementation 'com.cometchat:pro-android-chat-sdk:2.0.2'

implementation 'androidx.recyclerview:recyclerview-selection:1.0.0'

Expand Down
Original file line numberDiff line numberDiff line change
Expand Up@@ -41,7 +41,6 @@ protected void onCreate(Bundle savedInstanceState) {
if (getIntent().hasExtra(StringContract.IntentStrings.SESSION_ID)) {
sessionId = getIntent().getStringExtra(StringContract.IntentStrings.SESSION_ID);
Logger.error(TAG, " sessionId " + sessionId);

CometChat.startCall(CallActivity.this, sessionId, callView, new CometChat.OngoingCallListener() {
@Override
public void onUserJoined(User user) {
Expand Down
Original file line numberDiff line numberDiff line change
Expand Up@@ -18,8 +18,10 @@
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.Toast;

import com.cometchat.pro.core.CometChat;
import com.cometchat.pro.exceptions.CometChatException;
import com.cometchat.pro.models.User;
import com.google.android.material.appbar.AppBarLayout;
import com.google.android.material.tabs.TabLayout;
Expand All@@ -30,11 +32,15 @@
import com.inscripts.cometchatpulse.demo.Fragments.GroupListFragment;
import com.inscripts.cometchatpulse.demo.Fragments.RecentsFragment;
import com.inscripts.cometchatpulse.demo.Helper.FabIconAnimator;
import com.inscripts.cometchatpulse.demo.Helper.MyFirebaseMessagingService;
import com.inscripts.cometchatpulse.demo.Helper.ScrollHelper;
import com.inscripts.cometchatpulse.demo.Presenters.CometChatActivityPresenter;
import com.inscripts.cometchatpulse.demo.R;
import com.inscripts.cometchatpulse.demo.Utils.CommonUtils;
import com.inscripts.cometchatpulse.demo.Utils.FontUtils;
import java.util.HashMap;
import java.util.Timer;
import java.util.TimerTask;


public class CometChatActivity extends AppCompatActivity implements ScrollHelper, CometChatActivityContract.CometChatActivityView {
Expand DownExpand Up@@ -74,9 +80,11 @@ protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_comet_chat);
context = this;
MyFirebaseMessagingService.subscribeUser(CometChat.getLoggedInUser().getUid());
cometChatActivityPresenter = new CometChatActivityPresenter();
cometChatActivityPresenter.attach(this);
initViewComponents();

}

private void initViewComponents() {
Expand DownExpand Up@@ -121,13 +129,10 @@ public void onPageSelected(int i) {
adapter.notifyDataSetChanged();
pageNumber=i;
if (i==0)
{
searchItem.setVisible(false);
}
else
{
searchItem.setVisible(true);
}

}

@Override
Expand All@@ -136,12 +141,12 @@ public void onPageScrollStateChanged(int i) {
}
});


}

@Override
protected void onStart() {
super.onStart();

}

@Override
Expand All@@ -155,7 +160,6 @@ protected void onResume() {
cometChatActivityPresenter.addCallEventListener(context, TAG);
Log.d(TAG, "onResume: ");
cometChatActivityPresenter.addMessageListener(CometChatActivity.this,TAG);

}

@Override
Expand Down
Original file line numberDiff line numberDiff line change
Expand Up@@ -41,6 +41,7 @@
import com.cometchat.pro.models.MessageReceipt;
import com.cometchat.pro.models.TextMessage;
import com.cometchat.pro.models.TypingIndicator;
import com.inscripts.cometchatpulse.demo.Helper.MyFirebaseMessagingService;
import com.inscripts.cometchatpulse.demo.Helper.RecyclerTouchListener;
import com.inscripts.cometchatpulse.demo.R;
import com.inscripts.cometchatpulse.demo.Adapter.GroupMessageAdapter;
Expand DownExpand Up@@ -75,7 +76,7 @@

public class GroupChatActivity extends AppCompatActivity implements GroupChatActivityContract.GroupChatView, TextWatcher, View.OnClickListener, ActionMode.Callback {

private static final int LIMIT = 10;
private static final int LIMIT = 30;

private static final String TAG = "GroupChatActivity";

Expand DownExpand Up@@ -159,6 +160,8 @@ public class GroupChatActivity extends AppCompatActivity implements GroupChatAct

private SearchView searchView;

private boolean searchBox = false;

@Override
protected void onCreate(Bundle savedInstanceState) {
setTheme(R.style.AppTheme);
Expand All@@ -169,6 +172,7 @@ protected void onCreate(Bundle savedInstanceState) {
groupChatPresenter = new GroupChatPresenter();
groupChatPresenter.attach(this);
initViewComponent();
MyFirebaseMessagingService.subscribeGroup(groupId);

}

Expand DownExpand Up@@ -274,25 +278,27 @@ private void initViewComponent() {

new Thread(() -> groupChatPresenter.fetchGroupMembers(groupId)).start();

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
setScrollListener();
} else {
messageRecyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() {
@Override
public void onScrollStateChanged(@NonNull RecyclerView recyclerView, int newState) {
if (!searchBox) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
setScrollListener();
} else {
messageRecyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() {
@Override
public void onScrollStateChanged(@NonNull RecyclerView recyclerView, int newState) {

if (linearLayoutManager.findFirstVisibleItemPosition() == 0) {
if (!messageRecyclerView.canScrollVertically(-1)) {

groupChatPresenter.fetchPreviousMessage(groupId, LIMIT);
groupChatPresenter.fetchPreviousMessage(groupId, LIMIT);

}
}

//for toolbar elevation animation i.e stateListAnimator
toolbar.setSelected(recyclerView.canScrollVertically(-1));
//for toolbar elevation animation i.e stateListAnimator
toolbar.setSelected(recyclerView.canScrollVertically(-1));


}
});
}
});
}
}

KeyboardVisibilityEvent.setEventListener(this, var1 -> {
Expand DownExpand Up@@ -340,7 +346,7 @@ private void setScrollListener() {
public void onScrollChange(View v, int scrollX, int scrollY, int oldScrollX, int oldScrollY) {
int temp = linearLayoutManager.findFirstVisibleItemPosition();

if (temp < 5) {
if (!messageRecyclerView.canScrollVertically(-1)) {

groupChatPresenter.fetchPreviousMessage(groupId, LIMIT);

Expand DownExpand Up@@ -477,12 +483,14 @@ public boolean onQueryTextSubmit(String s) {

@Override
public boolean onQueryTextChange(String s) {
searchBox = true;
groupChatPresenter.searchMessage(s,groupId);
return false;
return false;
}
});

searchView.setOnCloseListener(() -> {
searchBox = false;
groupChatPresenter.fetchPreviousMessage(groupId,30);
return false;
});
Expand DownExpand Up@@ -568,16 +576,16 @@ protected void onResume() {
super.onResume();
groupChatPresenter.addMessageReceiveListener(getResources().getString(R.string.group_message_listener), groupId, ownerId);
groupChatPresenter.addGroupEventListener("action_message", groupId, ownerId);
groupChatPresenter.refreshList(groupId,ownerId,LIMIT);
// groupChatPresenter.refreshList(groupId,ownerId,LIMIT);
groupChatPresenter.addCallListener("call_listener");
}

@Override
protected void onPause() {
super.onPause();
if (groupMessageAdapter!=null) {
groupMessageAdapter.stopPlayer();
}
if (groupMessageAdapter!=null) {
groupMessageAdapter.stopPlayer();
}
groupChatPresenter.removeMessageReceiveListener(getResources().getString(R.string.group_message_listener));
groupChatPresenter.removeMessageReceiveListener("action_message");
groupChatPresenter.removeCallListener("call_listener");
Expand DownExpand Up@@ -668,6 +676,7 @@ public void setAdapter(List<BaseMessage> messageList) {
}
if (groupMessageAdapter == null) {
groupMessageAdapter = new GroupMessageAdapter(messageList, context, groupId, ownerId);

messageRecyclerView.setAdapter(groupMessageAdapter);
decor = new StickyHeaderDecoration(groupMessageAdapter);
messageRecyclerView.addItemDecoration(decor, 0);
Expand DownExpand Up@@ -709,26 +718,26 @@ public void addReceivedMessage(BaseMessage baseMessage) {

@Override
public void typingStarted(TypingIndicator typingIndicator) {
toolbarSubTitle.setText(typingIndicator.getSender().getName()+" "+getString(R.string.is_typing));
toolbarSubTitle.setText(typingIndicator.getSender().getName()+" "+getString(R.string.is_typing));
}

@Override
public void typingEnded(TypingIndicator typingIndicator) {
toolbarSubTitle.setText(names);
toolbarSubTitle.setText(names);
}

@Override
public void setDeliveryReceipt(MessageReceipt messageReceipt) {
if (groupMessageAdapter!=null){
groupMessageAdapter.setDelivered(messageReceipt);
}
// if (groupMessageAdapter!=null){
// groupMessageAdapter.setDelivered(messageReceipt);
// }
}

@Override
public void onMessageRead(MessageReceipt messageReceipt) {
if (groupMessageAdapter!=null){
groupMessageAdapter.setRead(messageReceipt);
}
// if (groupMessageAdapter!=null){
// groupMessageAdapter.setRead(messageReceipt);
// }
}

@Override
Expand DownExpand Up@@ -991,4 +1000,4 @@ private void addAttachment(int type) {

}
}
}
}
Original file line numberDiff line numberDiff line change
Expand Up@@ -13,6 +13,8 @@
import com.inscripts.cometchatpulse.demo.R;
import com.inscripts.cometchatpulse.demo.Contracts.LoginActivityContract;
import com.inscripts.cometchatpulse.demo.Presenters.LoginAcitivityPresenter;
import com.inscripts.cometchatpulse.demo.Utils.CommonUtils;

import java.util.ArrayList;
import java.util.List;

Expand DownExpand Up@@ -92,6 +94,6 @@ private List<Option> getSampleUserList(){
public void startCometChatActivity() {

startActivity(new Intent(LoginActivity.this, CometChatActivity.class));
finish();
finish();
}
}
Loading
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all \u003cpre\u003e\u003ccode\u003e blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks"); } } catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); } })(); (function(){ try { var __m = "github.com"; var __re = new RegExp('^' + "github\\.com" + '
Skip to content
Merged

V2 #20

Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
22 changes: 15 additions & 7 deletions README.md
Original file line numberDiff line numberDiff line change
Expand Up@@ -10,7 +10,7 @@
</br>
</div>

CometChat Android Demo app (built using **CometChat Pro**) is a fully functional messaging app capable of **one-on-one** (private) and **group** messaging along with recent conversations. The app enables users to send **text** and **multimedia messages like audio, video, images, documents.**
CometChat Android Demo app (built using **CometChat Pro**) is a fully functional messaging app capable of **one-on-one** (private) and **group** messaging. The app enables users to send **text** and **multimedia messages like audio, video, images, documents.**

[![Platform](https://img.shields.io/badge/Platform-Android-brightgreen.svg)](#) [![Platform](https://img.shields.io/badge/Language-Java-yellowgreen.svg)](#)

Expand DownExpand Up@@ -81,40 +81,48 @@ To run our open source app with CometChat Pro v1, follow these steps:

` public static final String API_KEY = "XXXXXXXXX";`

- add `google-service.json` file for push notification


## Note




You can Obtain your *APP_ID* and *API_KEY* from [CometChat-Pro Dashboard](https://app.cometchat.com/)
You can Obtain your *APP_ID* and *API_KEY* from [CometChat-Pulse Dashboard](https://app.cometchat.com/)

For more information read [CometChat-Pro Android SDK](https://prodocs.cometchat.com/docs/android-quick-start) Documentation
For more information read [CometChat-Pulse Android SDK](https://prodocs.cometchat.com/docs/android-quick-start) Documentation




![Studio Guide](https://github.com/CometChat-Pulse/android-java-chat-app/blob/master/ScreenShots/guide.png)


## Push Notification

The Push Notification extension allows you to send push notifications to mobile apps and desktop browsers.

For more information read [Android-Push-Notification](https://prodocs.cometchat.com/docs/android-extensions-push-notification) Documentation.






## Screenshots

<img align="left" width="185" height="331" src="https://github.com/CometChat-Pulse/android-java-chat-app/blob/master/ScreenShots/gif1.gif">
<img align="left" width="185" height="331" src="https://github.com/CometChat-Pulse/android-java-chat-app/blob/master/ScreenShots/gif_1.gif">


<img align="left" width="185" height="331" src="https://github.com/CometChat-Pulse/android-java-chat-app/blob/master/ScreenShots/gif2.gif">
<img align="left" width="185" height="331" src="https://github.com/CometChat-Pulse/android-java-chat-app/blob/master/ScreenShots/gif_2.gif">


<img align="left" width="185" height="331" src="https://github.com/CometChat-Pulse/android-java-chat-app/blob/master/ScreenShots/gif3.gif">
<img align="left" width="185" height="331" src="https://github.com/CometChat-Pulse/android-java-chat-app/blob/CP-31/ScreenShots/gif_3.gif">



<img align="left" width="185" height="331" src="https://github.com/CometChat-Pulse/android-java-chat-app/blob/master/ScreenShots/gif4.gif">
<img align="left" width="185" height="331" src="https://github.com/CometChat-Pulse/android-java-chat-app/blob/CP-31/ScreenShots/gif_4.gif">

` `<br></br><br></br><br></br><br></br><br></br><br></br><br></br><br></br></br>

Expand Down
Binary file addedScreenShots/gif_1.gif
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file addedScreenShots/gif_2.gif
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file addedScreenShots/gif_3.gif
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file addedScreenShots/gif_4.gif
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
12 changes: 10 additions & 2 deletions app/build.gradle
Original file line numberDiff line numberDiff line change
Expand Up@@ -63,8 +63,16 @@ dependencies {
implementation 'com.github.bumptech.glide:glide:4.8.0'
annotationProcessor 'com.github.bumptech.glide:compiler:4.8.0'

//cometchat sdk
implementation 'com.cometchat:pro-android-chat-sdk:2.0.0-beta8'
//Firebase
implementation 'com.google.android.gms:play-services-auth:17.0.0'
implementation 'com.google.android.gms:play-services-plus:17.0.0'
implementation 'com.google.firebase:firebase-core:17.2.1'
implementation 'com.google.firebase:firebase-messaging:20.1.0'
implementation 'com.google.android.gms:play-services-maps:17.0.0'
implementation 'com.google.android.gms:play-services-location:17.0.0'
implementation 'com.google.android.gms:play-services-places:17.0.0'

implementation 'com.cometchat:pro-android-chat-sdk:2.0.2'

implementation 'androidx.recyclerview:recyclerview-selection:1.0.0'

Expand Down
Original file line numberDiff line numberDiff line change
Expand Up@@ -41,7 +41,6 @@ protected void onCreate(Bundle savedInstanceState) {
if (getIntent().hasExtra(StringContract.IntentStrings.SESSION_ID)) {
sessionId = getIntent().getStringExtra(StringContract.IntentStrings.SESSION_ID);
Logger.error(TAG, " sessionId " + sessionId);

CometChat.startCall(CallActivity.this, sessionId, callView, new CometChat.OngoingCallListener() {
@Override
public void onUserJoined(User user) {
Expand Down
Original file line numberDiff line numberDiff line change
Expand Up@@ -18,8 +18,10 @@
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.Toast;

import com.cometchat.pro.core.CometChat;
import com.cometchat.pro.exceptions.CometChatException;
import com.cometchat.pro.models.User;
import com.google.android.material.appbar.AppBarLayout;
import com.google.android.material.tabs.TabLayout;
Expand All@@ -30,11 +32,15 @@
import com.inscripts.cometchatpulse.demo.Fragments.GroupListFragment;
import com.inscripts.cometchatpulse.demo.Fragments.RecentsFragment;
import com.inscripts.cometchatpulse.demo.Helper.FabIconAnimator;
import com.inscripts.cometchatpulse.demo.Helper.MyFirebaseMessagingService;
import com.inscripts.cometchatpulse.demo.Helper.ScrollHelper;
import com.inscripts.cometchatpulse.demo.Presenters.CometChatActivityPresenter;
import com.inscripts.cometchatpulse.demo.R;
import com.inscripts.cometchatpulse.demo.Utils.CommonUtils;
import com.inscripts.cometchatpulse.demo.Utils.FontUtils;
import java.util.HashMap;
import java.util.Timer;
import java.util.TimerTask;


public class CometChatActivity extends AppCompatActivity implements ScrollHelper, CometChatActivityContract.CometChatActivityView {
Expand DownExpand Up@@ -74,9 +80,11 @@ protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_comet_chat);
context = this;
MyFirebaseMessagingService.subscribeUser(CometChat.getLoggedInUser().getUid());
cometChatActivityPresenter = new CometChatActivityPresenter();
cometChatActivityPresenter.attach(this);
initViewComponents();

}

private void initViewComponents() {
Expand DownExpand Up@@ -121,13 +129,10 @@ public void onPageSelected(int i) {
adapter.notifyDataSetChanged();
pageNumber=i;
if (i==0)
{
searchItem.setVisible(false);
}
else
{
searchItem.setVisible(true);
}

}

@Override
Expand All@@ -136,12 +141,12 @@ public void onPageScrollStateChanged(int i) {
}
});


}

@Override
protected void onStart() {
super.onStart();

}

@Override
Expand All@@ -155,7 +160,6 @@ protected void onResume() {
cometChatActivityPresenter.addCallEventListener(context, TAG);
Log.d(TAG, "onResume: ");
cometChatActivityPresenter.addMessageListener(CometChatActivity.this,TAG);

}

@Override
Expand Down
Original file line numberDiff line numberDiff line change
Expand Up@@ -41,6 +41,7 @@
import com.cometchat.pro.models.MessageReceipt;
import com.cometchat.pro.models.TextMessage;
import com.cometchat.pro.models.TypingIndicator;
import com.inscripts.cometchatpulse.demo.Helper.MyFirebaseMessagingService;
import com.inscripts.cometchatpulse.demo.Helper.RecyclerTouchListener;
import com.inscripts.cometchatpulse.demo.R;
import com.inscripts.cometchatpulse.demo.Adapter.GroupMessageAdapter;
Expand DownExpand Up@@ -75,7 +76,7 @@

public class GroupChatActivity extends AppCompatActivity implements GroupChatActivityContract.GroupChatView, TextWatcher, View.OnClickListener, ActionMode.Callback {

private static final int LIMIT = 10;
private static final int LIMIT = 30;

private static final String TAG = "GroupChatActivity";

Expand DownExpand Up@@ -159,6 +160,8 @@ public class GroupChatActivity extends AppCompatActivity implements GroupChatAct

private SearchView searchView;

private boolean searchBox = false;

@Override
protected void onCreate(Bundle savedInstanceState) {
setTheme(R.style.AppTheme);
Expand All@@ -169,6 +172,7 @@ protected void onCreate(Bundle savedInstanceState) {
groupChatPresenter = new GroupChatPresenter();
groupChatPresenter.attach(this);
initViewComponent();
MyFirebaseMessagingService.subscribeGroup(groupId);

}

Expand DownExpand Up@@ -274,25 +278,27 @@ private void initViewComponent() {

new Thread(() -> groupChatPresenter.fetchGroupMembers(groupId)).start();

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
setScrollListener();
} else {
messageRecyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() {
@Override
public void onScrollStateChanged(@NonNull RecyclerView recyclerView, int newState) {
if (!searchBox) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
setScrollListener();
} else {
messageRecyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() {
@Override
public void onScrollStateChanged(@NonNull RecyclerView recyclerView, int newState) {

if (linearLayoutManager.findFirstVisibleItemPosition() == 0) {
if (!messageRecyclerView.canScrollVertically(-1)) {

groupChatPresenter.fetchPreviousMessage(groupId, LIMIT);
groupChatPresenter.fetchPreviousMessage(groupId, LIMIT);

}
}

//for toolbar elevation animation i.e stateListAnimator
toolbar.setSelected(recyclerView.canScrollVertically(-1));
//for toolbar elevation animation i.e stateListAnimator
toolbar.setSelected(recyclerView.canScrollVertically(-1));


}
});
}
});
}
}

KeyboardVisibilityEvent.setEventListener(this, var1 -> {
Expand DownExpand Up@@ -340,7 +346,7 @@ private void setScrollListener() {
public void onScrollChange(View v, int scrollX, int scrollY, int oldScrollX, int oldScrollY) {
int temp = linearLayoutManager.findFirstVisibleItemPosition();

if (temp < 5) {
if (!messageRecyclerView.canScrollVertically(-1)) {

groupChatPresenter.fetchPreviousMessage(groupId, LIMIT);

Expand DownExpand Up@@ -477,12 +483,14 @@ public boolean onQueryTextSubmit(String s) {

@Override
public boolean onQueryTextChange(String s) {
searchBox = true;
groupChatPresenter.searchMessage(s,groupId);
return false;
return false;
}
});

searchView.setOnCloseListener(() -> {
searchBox = false;
groupChatPresenter.fetchPreviousMessage(groupId,30);
return false;
});
Expand DownExpand Up@@ -568,16 +576,16 @@ protected void onResume() {
super.onResume();
groupChatPresenter.addMessageReceiveListener(getResources().getString(R.string.group_message_listener), groupId, ownerId);
groupChatPresenter.addGroupEventListener("action_message", groupId, ownerId);
groupChatPresenter.refreshList(groupId,ownerId,LIMIT);
// groupChatPresenter.refreshList(groupId,ownerId,LIMIT);
groupChatPresenter.addCallListener("call_listener");
}

@Override
protected void onPause() {
super.onPause();
if (groupMessageAdapter!=null) {
groupMessageAdapter.stopPlayer();
}
if (groupMessageAdapter!=null) {
groupMessageAdapter.stopPlayer();
}
groupChatPresenter.removeMessageReceiveListener(getResources().getString(R.string.group_message_listener));
groupChatPresenter.removeMessageReceiveListener("action_message");
groupChatPresenter.removeCallListener("call_listener");
Expand DownExpand Up@@ -668,6 +676,7 @@ public void setAdapter(List<BaseMessage> messageList) {
}
if (groupMessageAdapter == null) {
groupMessageAdapter = new GroupMessageAdapter(messageList, context, groupId, ownerId);

messageRecyclerView.setAdapter(groupMessageAdapter);
decor = new StickyHeaderDecoration(groupMessageAdapter);
messageRecyclerView.addItemDecoration(decor, 0);
Expand DownExpand Up@@ -709,26 +718,26 @@ public void addReceivedMessage(BaseMessage baseMessage) {

@Override
public void typingStarted(TypingIndicator typingIndicator) {
toolbarSubTitle.setText(typingIndicator.getSender().getName()+" "+getString(R.string.is_typing));
toolbarSubTitle.setText(typingIndicator.getSender().getName()+" "+getString(R.string.is_typing));
}

@Override
public void typingEnded(TypingIndicator typingIndicator) {
toolbarSubTitle.setText(names);
toolbarSubTitle.setText(names);
}

@Override
public void setDeliveryReceipt(MessageReceipt messageReceipt) {
if (groupMessageAdapter!=null){
groupMessageAdapter.setDelivered(messageReceipt);
}
// if (groupMessageAdapter!=null){
// groupMessageAdapter.setDelivered(messageReceipt);
// }
}

@Override
public void onMessageRead(MessageReceipt messageReceipt) {
if (groupMessageAdapter!=null){
groupMessageAdapter.setRead(messageReceipt);
}
// if (groupMessageAdapter!=null){
// groupMessageAdapter.setRead(messageReceipt);
// }
}

@Override
Expand DownExpand Up@@ -991,4 +1000,4 @@ private void addAttachment(int type) {

}
}
}
}
Original file line numberDiff line numberDiff line change
Expand Up@@ -13,6 +13,8 @@
import com.inscripts.cometchatpulse.demo.R;
import com.inscripts.cometchatpulse.demo.Contracts.LoginActivityContract;
import com.inscripts.cometchatpulse.demo.Presenters.LoginAcitivityPresenter;
import com.inscripts.cometchatpulse.demo.Utils.CommonUtils;

import java.util.ArrayList;
import java.util.List;

Expand DownExpand Up@@ -92,6 +94,6 @@ private List<Option> getSampleUserList(){
public void startCometChatActivity() {

startActivity(new Intent(LoginActivity.this, CometChatActivity.class));
finish();
finish();
}
}
Loading
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content
Merged

V2 #20

Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
22 changes: 15 additions & 7 deletions README.md
Original file line numberDiff line numberDiff line change
Expand Up@@ -10,7 +10,7 @@
</br>
</div>

CometChat Android Demo app (built using **CometChat Pro**) is a fully functional messaging app capable of **one-on-one** (private) and **group** messaging along with recent conversations. The app enables users to send **text** and **multimedia messages like audio, video, images, documents.**
CometChat Android Demo app (built using **CometChat Pro**) is a fully functional messaging app capable of **one-on-one** (private) and **group** messaging. The app enables users to send **text** and **multimedia messages like audio, video, images, documents.**

[![Platform](https://img.shields.io/badge/Platform-Android-brightgreen.svg)](#) [![Platform](https://img.shields.io/badge/Language-Java-yellowgreen.svg)](#)

Expand DownExpand Up@@ -81,40 +81,48 @@ To run our open source app with CometChat Pro v1, follow these steps:

` public static final String API_KEY = "XXXXXXXXX";`

- add `google-service.json` file for push notification


## Note




You can Obtain your *APP_ID* and *API_KEY* from [CometChat-Pro Dashboard](https://app.cometchat.com/)
You can Obtain your *APP_ID* and *API_KEY* from [CometChat-Pulse Dashboard](https://app.cometchat.com/)

For more information read [CometChat-Pro Android SDK](https://prodocs.cometchat.com/docs/android-quick-start) Documentation
For more information read [CometChat-Pulse Android SDK](https://prodocs.cometchat.com/docs/android-quick-start) Documentation




![Studio Guide](https://github.com/CometChat-Pulse/android-java-chat-app/blob/master/ScreenShots/guide.png)


## Push Notification

The Push Notification extension allows you to send push notifications to mobile apps and desktop browsers.

For more information read [Android-Push-Notification](https://prodocs.cometchat.com/docs/android-extensions-push-notification) Documentation.






## Screenshots

<img align="left" width="185" height="331" src="https://github.com/CometChat-Pulse/android-java-chat-app/blob/master/ScreenShots/gif1.gif">
<img align="left" width="185" height="331" src="https://github.com/CometChat-Pulse/android-java-chat-app/blob/master/ScreenShots/gif_1.gif">


<img align="left" width="185" height="331" src="https://github.com/CometChat-Pulse/android-java-chat-app/blob/master/ScreenShots/gif2.gif">
<img align="left" width="185" height="331" src="https://github.com/CometChat-Pulse/android-java-chat-app/blob/master/ScreenShots/gif_2.gif">


<img align="left" width="185" height="331" src="https://github.com/CometChat-Pulse/android-java-chat-app/blob/master/ScreenShots/gif3.gif">
<img align="left" width="185" height="331" src="https://github.com/CometChat-Pulse/android-java-chat-app/blob/CP-31/ScreenShots/gif_3.gif">



<img align="left" width="185" height="331" src="https://github.com/CometChat-Pulse/android-java-chat-app/blob/master/ScreenShots/gif4.gif">
<img align="left" width="185" height="331" src="https://github.com/CometChat-Pulse/android-java-chat-app/blob/CP-31/ScreenShots/gif_4.gif">

` `<br></br><br></br><br></br><br></br><br></br><br></br><br></br><br></br></br>

Expand Down
Binary file addedScreenShots/gif_1.gif
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file addedScreenShots/gif_2.gif
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file addedScreenShots/gif_3.gif
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file addedScreenShots/gif_4.gif
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
12 changes: 10 additions & 2 deletions app/build.gradle
Original file line numberDiff line numberDiff line change
Expand Up@@ -63,8 +63,16 @@ dependencies {
implementation 'com.github.bumptech.glide:glide:4.8.0'
annotationProcessor 'com.github.bumptech.glide:compiler:4.8.0'

//cometchat sdk
implementation 'com.cometchat:pro-android-chat-sdk:2.0.0-beta8'
//Firebase
implementation 'com.google.android.gms:play-services-auth:17.0.0'
implementation 'com.google.android.gms:play-services-plus:17.0.0'
implementation 'com.google.firebase:firebase-core:17.2.1'
implementation 'com.google.firebase:firebase-messaging:20.1.0'
implementation 'com.google.android.gms:play-services-maps:17.0.0'
implementation 'com.google.android.gms:play-services-location:17.0.0'
implementation 'com.google.android.gms:play-services-places:17.0.0'

implementation 'com.cometchat:pro-android-chat-sdk:2.0.2'

implementation 'androidx.recyclerview:recyclerview-selection:1.0.0'

Expand Down
Original file line numberDiff line numberDiff line change
Expand Up@@ -41,7 +41,6 @@ protected void onCreate(Bundle savedInstanceState) {
if (getIntent().hasExtra(StringContract.IntentStrings.SESSION_ID)) {
sessionId = getIntent().getStringExtra(StringContract.IntentStrings.SESSION_ID);
Logger.error(TAG, " sessionId " + sessionId);

CometChat.startCall(CallActivity.this, sessionId, callView, new CometChat.OngoingCallListener() {
@Override
public void onUserJoined(User user) {
Expand Down
Original file line numberDiff line numberDiff line change
Expand Up@@ -18,8 +18,10 @@
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.Toast;

import com.cometchat.pro.core.CometChat;
import com.cometchat.pro.exceptions.CometChatException;
import com.cometchat.pro.models.User;
import com.google.android.material.appbar.AppBarLayout;
import com.google.android.material.tabs.TabLayout;
Expand All@@ -30,11 +32,15 @@
import com.inscripts.cometchatpulse.demo.Fragments.GroupListFragment;
import com.inscripts.cometchatpulse.demo.Fragments.RecentsFragment;
import com.inscripts.cometchatpulse.demo.Helper.FabIconAnimator;
import com.inscripts.cometchatpulse.demo.Helper.MyFirebaseMessagingService;
import com.inscripts.cometchatpulse.demo.Helper.ScrollHelper;
import com.inscripts.cometchatpulse.demo.Presenters.CometChatActivityPresenter;
import com.inscripts.cometchatpulse.demo.R;
import com.inscripts.cometchatpulse.demo.Utils.CommonUtils;
import com.inscripts.cometchatpulse.demo.Utils.FontUtils;
import java.util.HashMap;
import java.util.Timer;
import java.util.TimerTask;


public class CometChatActivity extends AppCompatActivity implements ScrollHelper, CometChatActivityContract.CometChatActivityView {
Expand DownExpand Up@@ -74,9 +80,11 @@ protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_comet_chat);
context = this;
MyFirebaseMessagingService.subscribeUser(CometChat.getLoggedInUser().getUid());
cometChatActivityPresenter = new CometChatActivityPresenter();
cometChatActivityPresenter.attach(this);
initViewComponents();

}

private void initViewComponents() {
Expand DownExpand Up@@ -121,13 +129,10 @@ public void onPageSelected(int i) {
adapter.notifyDataSetChanged();
pageNumber=i;
if (i==0)
{
searchItem.setVisible(false);
}
else
{
searchItem.setVisible(true);
}

}

@Override
Expand All@@ -136,12 +141,12 @@ public void onPageScrollStateChanged(int i) {
}
});


}

@Override
protected void onStart() {
super.onStart();

}

@Override
Expand All@@ -155,7 +160,6 @@ protected void onResume() {
cometChatActivityPresenter.addCallEventListener(context, TAG);
Log.d(TAG, "onResume: ");
cometChatActivityPresenter.addMessageListener(CometChatActivity.this,TAG);

}

@Override
Expand Down
Original file line numberDiff line numberDiff line change
Expand Up@@ -41,6 +41,7 @@
import com.cometchat.pro.models.MessageReceipt;
import com.cometchat.pro.models.TextMessage;
import com.cometchat.pro.models.TypingIndicator;
import com.inscripts.cometchatpulse.demo.Helper.MyFirebaseMessagingService;
import com.inscripts.cometchatpulse.demo.Helper.RecyclerTouchListener;
import com.inscripts.cometchatpulse.demo.R;
import com.inscripts.cometchatpulse.demo.Adapter.GroupMessageAdapter;
Expand DownExpand Up@@ -75,7 +76,7 @@

public class GroupChatActivity extends AppCompatActivity implements GroupChatActivityContract.GroupChatView, TextWatcher, View.OnClickListener, ActionMode.Callback {

private static final int LIMIT = 10;
private static final int LIMIT = 30;

private static final String TAG = "GroupChatActivity";

Expand DownExpand Up@@ -159,6 +160,8 @@ public class GroupChatActivity extends AppCompatActivity implements GroupChatAct

private SearchView searchView;

private boolean searchBox = false;

@Override
protected void onCreate(Bundle savedInstanceState) {
setTheme(R.style.AppTheme);
Expand All@@ -169,6 +172,7 @@ protected void onCreate(Bundle savedInstanceState) {
groupChatPresenter = new GroupChatPresenter();
groupChatPresenter.attach(this);
initViewComponent();
MyFirebaseMessagingService.subscribeGroup(groupId);

}

Expand DownExpand Up@@ -274,25 +278,27 @@ private void initViewComponent() {

new Thread(() -> groupChatPresenter.fetchGroupMembers(groupId)).start();

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
setScrollListener();
} else {
messageRecyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() {
@Override
public void onScrollStateChanged(@NonNull RecyclerView recyclerView, int newState) {
if (!searchBox) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
setScrollListener();
} else {
messageRecyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() {
@Override
public void onScrollStateChanged(@NonNull RecyclerView recyclerView, int newState) {

if (linearLayoutManager.findFirstVisibleItemPosition() == 0) {
if (!messageRecyclerView.canScrollVertically(-1)) {

groupChatPresenter.fetchPreviousMessage(groupId, LIMIT);
groupChatPresenter.fetchPreviousMessage(groupId, LIMIT);

}
}

//for toolbar elevation animation i.e stateListAnimator
toolbar.setSelected(recyclerView.canScrollVertically(-1));
//for toolbar elevation animation i.e stateListAnimator
toolbar.setSelected(recyclerView.canScrollVertically(-1));


}
});
}
});
}
}

KeyboardVisibilityEvent.setEventListener(this, var1 -> {
Expand DownExpand Up@@ -340,7 +346,7 @@ private void setScrollListener() {
public void onScrollChange(View v, int scrollX, int scrollY, int oldScrollX, int oldScrollY) {
int temp = linearLayoutManager.findFirstVisibleItemPosition();

if (temp < 5) {
if (!messageRecyclerView.canScrollVertically(-1)) {

groupChatPresenter.fetchPreviousMessage(groupId, LIMIT);

Expand DownExpand Up@@ -477,12 +483,14 @@ public boolean onQueryTextSubmit(String s) {

@Override
public boolean onQueryTextChange(String s) {
searchBox = true;
groupChatPresenter.searchMessage(s,groupId);
return false;
return false;
}
});

searchView.setOnCloseListener(() -> {
searchBox = false;
groupChatPresenter.fetchPreviousMessage(groupId,30);
return false;
});
Expand DownExpand Up@@ -568,16 +576,16 @@ protected void onResume() {
super.onResume();
groupChatPresenter.addMessageReceiveListener(getResources().getString(R.string.group_message_listener), groupId, ownerId);
groupChatPresenter.addGroupEventListener("action_message", groupId, ownerId);
groupChatPresenter.refreshList(groupId,ownerId,LIMIT);
// groupChatPresenter.refreshList(groupId,ownerId,LIMIT);
groupChatPresenter.addCallListener("call_listener");
}

@Override
protected void onPause() {
super.onPause();
if (groupMessageAdapter!=null) {
groupMessageAdapter.stopPlayer();
}
if (groupMessageAdapter!=null) {
groupMessageAdapter.stopPlayer();
}
groupChatPresenter.removeMessageReceiveListener(getResources().getString(R.string.group_message_listener));
groupChatPresenter.removeMessageReceiveListener("action_message");
groupChatPresenter.removeCallListener("call_listener");
Expand DownExpand Up@@ -668,6 +676,7 @@ public void setAdapter(List<BaseMessage> messageList) {
}
if (groupMessageAdapter == null) {
groupMessageAdapter = new GroupMessageAdapter(messageList, context, groupId, ownerId);

messageRecyclerView.setAdapter(groupMessageAdapter);
decor = new StickyHeaderDecoration(groupMessageAdapter);
messageRecyclerView.addItemDecoration(decor, 0);
Expand DownExpand Up@@ -709,26 +718,26 @@ public void addReceivedMessage(BaseMessage baseMessage) {

@Override
public void typingStarted(TypingIndicator typingIndicator) {
toolbarSubTitle.setText(typingIndicator.getSender().getName()+" "+getString(R.string.is_typing));
toolbarSubTitle.setText(typingIndicator.getSender().getName()+" "+getString(R.string.is_typing));
}

@Override
public void typingEnded(TypingIndicator typingIndicator) {
toolbarSubTitle.setText(names);
toolbarSubTitle.setText(names);
}

@Override
public void setDeliveryReceipt(MessageReceipt messageReceipt) {
if (groupMessageAdapter!=null){
groupMessageAdapter.setDelivered(messageReceipt);
}
// if (groupMessageAdapter!=null){
// groupMessageAdapter.setDelivered(messageReceipt);
// }
}

@Override
public void onMessageRead(MessageReceipt messageReceipt) {
if (groupMessageAdapter!=null){
groupMessageAdapter.setRead(messageReceipt);
}
// if (groupMessageAdapter!=null){
// groupMessageAdapter.setRead(messageReceipt);
// }
}

@Override
Expand DownExpand Up@@ -991,4 +1000,4 @@ private void addAttachment(int type) {

}
}
}
}
Original file line numberDiff line numberDiff line change
Expand Up@@ -13,6 +13,8 @@
import com.inscripts.cometchatpulse.demo.R;
import com.inscripts.cometchatpulse.demo.Contracts.LoginActivityContract;
import com.inscripts.cometchatpulse.demo.Presenters.LoginAcitivityPresenter;
import com.inscripts.cometchatpulse.demo.Utils.CommonUtils;

import java.util.ArrayList;
import java.util.List;

Expand DownExpand Up@@ -92,6 +94,6 @@ private List<Option> getSampleUserList(){
public void startCometChatActivity() {

startActivity(new Intent(LoginActivity.this, CometChatActivity.class));
finish();
finish();
}
}
Loading
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length \u003e 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content
Merged

V2 #20

Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
22 changes: 15 additions & 7 deletions README.md
Original file line numberDiff line numberDiff line change
Expand Up@@ -10,7 +10,7 @@
</br>
</div>

CometChat Android Demo app (built using **CometChat Pro**) is a fully functional messaging app capable of **one-on-one** (private) and **group** messaging along with recent conversations. The app enables users to send **text** and **multimedia messages like audio, video, images, documents.**
CometChat Android Demo app (built using **CometChat Pro**) is a fully functional messaging app capable of **one-on-one** (private) and **group** messaging. The app enables users to send **text** and **multimedia messages like audio, video, images, documents.**

[![Platform](https://img.shields.io/badge/Platform-Android-brightgreen.svg)](#) [![Platform](https://img.shields.io/badge/Language-Java-yellowgreen.svg)](#)

Expand DownExpand Up@@ -81,40 +81,48 @@ To run our open source app with CometChat Pro v1, follow these steps:

` public static final String API_KEY = "XXXXXXXXX";`

- add `google-service.json` file for push notification


## Note




You can Obtain your *APP_ID* and *API_KEY* from [CometChat-Pro Dashboard](https://app.cometchat.com/)
You can Obtain your *APP_ID* and *API_KEY* from [CometChat-Pulse Dashboard](https://app.cometchat.com/)

For more information read [CometChat-Pro Android SDK](https://prodocs.cometchat.com/docs/android-quick-start) Documentation
For more information read [CometChat-Pulse Android SDK](https://prodocs.cometchat.com/docs/android-quick-start) Documentation




![Studio Guide](https://github.com/CometChat-Pulse/android-java-chat-app/blob/master/ScreenShots/guide.png)


## Push Notification

The Push Notification extension allows you to send push notifications to mobile apps and desktop browsers.

For more information read [Android-Push-Notification](https://prodocs.cometchat.com/docs/android-extensions-push-notification) Documentation.






## Screenshots

<img align="left" width="185" height="331" src="https://github.com/CometChat-Pulse/android-java-chat-app/blob/master/ScreenShots/gif1.gif">
<img align="left" width="185" height="331" src="https://github.com/CometChat-Pulse/android-java-chat-app/blob/master/ScreenShots/gif_1.gif">


<img align="left" width="185" height="331" src="https://github.com/CometChat-Pulse/android-java-chat-app/blob/master/ScreenShots/gif2.gif">
<img align="left" width="185" height="331" src="https://github.com/CometChat-Pulse/android-java-chat-app/blob/master/ScreenShots/gif_2.gif">


<img align="left" width="185" height="331" src="https://github.com/CometChat-Pulse/android-java-chat-app/blob/master/ScreenShots/gif3.gif">
<img align="left" width="185" height="331" src="https://github.com/CometChat-Pulse/android-java-chat-app/blob/CP-31/ScreenShots/gif_3.gif">



<img align="left" width="185" height="331" src="https://github.com/CometChat-Pulse/android-java-chat-app/blob/master/ScreenShots/gif4.gif">
<img align="left" width="185" height="331" src="https://github.com/CometChat-Pulse/android-java-chat-app/blob/CP-31/ScreenShots/gif_4.gif">

` `<br></br><br></br><br></br><br></br><br></br><br></br><br></br><br></br></br>

Expand Down
Binary file addedScreenShots/gif_1.gif
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file addedScreenShots/gif_2.gif
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file addedScreenShots/gif_3.gif
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file addedScreenShots/gif_4.gif
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
12 changes: 10 additions & 2 deletions app/build.gradle
Original file line numberDiff line numberDiff line change
Expand Up@@ -63,8 +63,16 @@ dependencies {
implementation 'com.github.bumptech.glide:glide:4.8.0'
annotationProcessor 'com.github.bumptech.glide:compiler:4.8.0'

//cometchat sdk
implementation 'com.cometchat:pro-android-chat-sdk:2.0.0-beta8'
//Firebase
implementation 'com.google.android.gms:play-services-auth:17.0.0'
implementation 'com.google.android.gms:play-services-plus:17.0.0'
implementation 'com.google.firebase:firebase-core:17.2.1'
implementation 'com.google.firebase:firebase-messaging:20.1.0'
implementation 'com.google.android.gms:play-services-maps:17.0.0'
implementation 'com.google.android.gms:play-services-location:17.0.0'
implementation 'com.google.android.gms:play-services-places:17.0.0'

implementation 'com.cometchat:pro-android-chat-sdk:2.0.2'

implementation 'androidx.recyclerview:recyclerview-selection:1.0.0'

Expand Down
Original file line numberDiff line numberDiff line change
Expand Up@@ -41,7 +41,6 @@ protected void onCreate(Bundle savedInstanceState) {
if (getIntent().hasExtra(StringContract.IntentStrings.SESSION_ID)) {
sessionId = getIntent().getStringExtra(StringContract.IntentStrings.SESSION_ID);
Logger.error(TAG, " sessionId " + sessionId);

CometChat.startCall(CallActivity.this, sessionId, callView, new CometChat.OngoingCallListener() {
@Override
public void onUserJoined(User user) {
Expand Down
Original file line numberDiff line numberDiff line change
Expand Up@@ -18,8 +18,10 @@
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.Toast;

import com.cometchat.pro.core.CometChat;
import com.cometchat.pro.exceptions.CometChatException;
import com.cometchat.pro.models.User;
import com.google.android.material.appbar.AppBarLayout;
import com.google.android.material.tabs.TabLayout;
Expand All@@ -30,11 +32,15 @@
import com.inscripts.cometchatpulse.demo.Fragments.GroupListFragment;
import com.inscripts.cometchatpulse.demo.Fragments.RecentsFragment;
import com.inscripts.cometchatpulse.demo.Helper.FabIconAnimator;
import com.inscripts.cometchatpulse.demo.Helper.MyFirebaseMessagingService;
import com.inscripts.cometchatpulse.demo.Helper.ScrollHelper;
import com.inscripts.cometchatpulse.demo.Presenters.CometChatActivityPresenter;
import com.inscripts.cometchatpulse.demo.R;
import com.inscripts.cometchatpulse.demo.Utils.CommonUtils;
import com.inscripts.cometchatpulse.demo.Utils.FontUtils;
import java.util.HashMap;
import java.util.Timer;
import java.util.TimerTask;


public class CometChatActivity extends AppCompatActivity implements ScrollHelper, CometChatActivityContract.CometChatActivityView {
Expand DownExpand Up@@ -74,9 +80,11 @@ protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_comet_chat);
context = this;
MyFirebaseMessagingService.subscribeUser(CometChat.getLoggedInUser().getUid());
cometChatActivityPresenter = new CometChatActivityPresenter();
cometChatActivityPresenter.attach(this);
initViewComponents();

}

private void initViewComponents() {
Expand DownExpand Up@@ -121,13 +129,10 @@ public void onPageSelected(int i) {
adapter.notifyDataSetChanged();
pageNumber=i;
if (i==0)
{
searchItem.setVisible(false);
}
else
{
searchItem.setVisible(true);
}

}

@Override
Expand All@@ -136,12 +141,12 @@ public void onPageScrollStateChanged(int i) {
}
});


}

@Override
protected void onStart() {
super.onStart();

}

@Override
Expand All@@ -155,7 +160,6 @@ protected void onResume() {
cometChatActivityPresenter.addCallEventListener(context, TAG);
Log.d(TAG, "onResume: ");
cometChatActivityPresenter.addMessageListener(CometChatActivity.this,TAG);

}

@Override
Expand Down
Original file line numberDiff line numberDiff line change
Expand Up@@ -41,6 +41,7 @@
import com.cometchat.pro.models.MessageReceipt;
import com.cometchat.pro.models.TextMessage;
import com.cometchat.pro.models.TypingIndicator;
import com.inscripts.cometchatpulse.demo.Helper.MyFirebaseMessagingService;
import com.inscripts.cometchatpulse.demo.Helper.RecyclerTouchListener;
import com.inscripts.cometchatpulse.demo.R;
import com.inscripts.cometchatpulse.demo.Adapter.GroupMessageAdapter;
Expand DownExpand Up@@ -75,7 +76,7 @@

public class GroupChatActivity extends AppCompatActivity implements GroupChatActivityContract.GroupChatView, TextWatcher, View.OnClickListener, ActionMode.Callback {

private static final int LIMIT = 10;
private static final int LIMIT = 30;

private static final String TAG = "GroupChatActivity";

Expand DownExpand Up@@ -159,6 +160,8 @@ public class GroupChatActivity extends AppCompatActivity implements GroupChatAct

private SearchView searchView;

private boolean searchBox = false;

@Override
protected void onCreate(Bundle savedInstanceState) {
setTheme(R.style.AppTheme);
Expand All@@ -169,6 +172,7 @@ protected void onCreate(Bundle savedInstanceState) {
groupChatPresenter = new GroupChatPresenter();
groupChatPresenter.attach(this);
initViewComponent();
MyFirebaseMessagingService.subscribeGroup(groupId);

}

Expand DownExpand Up@@ -274,25 +278,27 @@ private void initViewComponent() {

new Thread(() -> groupChatPresenter.fetchGroupMembers(groupId)).start();

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
setScrollListener();
} else {
messageRecyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() {
@Override
public void onScrollStateChanged(@NonNull RecyclerView recyclerView, int newState) {
if (!searchBox) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
setScrollListener();
} else {
messageRecyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() {
@Override
public void onScrollStateChanged(@NonNull RecyclerView recyclerView, int newState) {

if (linearLayoutManager.findFirstVisibleItemPosition() == 0) {
if (!messageRecyclerView.canScrollVertically(-1)) {

groupChatPresenter.fetchPreviousMessage(groupId, LIMIT);
groupChatPresenter.fetchPreviousMessage(groupId, LIMIT);

}
}

//for toolbar elevation animation i.e stateListAnimator
toolbar.setSelected(recyclerView.canScrollVertically(-1));
//for toolbar elevation animation i.e stateListAnimator
toolbar.setSelected(recyclerView.canScrollVertically(-1));


}
});
}
});
}
}

KeyboardVisibilityEvent.setEventListener(this, var1 -> {
Expand DownExpand Up@@ -340,7 +346,7 @@ private void setScrollListener() {
public void onScrollChange(View v, int scrollX, int scrollY, int oldScrollX, int oldScrollY) {
int temp = linearLayoutManager.findFirstVisibleItemPosition();

if (temp < 5) {
if (!messageRecyclerView.canScrollVertically(-1)) {

groupChatPresenter.fetchPreviousMessage(groupId, LIMIT);

Expand DownExpand Up@@ -477,12 +483,14 @@ public boolean onQueryTextSubmit(String s) {

@Override
public boolean onQueryTextChange(String s) {
searchBox = true;
groupChatPresenter.searchMessage(s,groupId);
return false;
return false;
}
});

searchView.setOnCloseListener(() -> {
searchBox = false;
groupChatPresenter.fetchPreviousMessage(groupId,30);
return false;
});
Expand DownExpand Up@@ -568,16 +576,16 @@ protected void onResume() {
super.onResume();
groupChatPresenter.addMessageReceiveListener(getResources().getString(R.string.group_message_listener), groupId, ownerId);
groupChatPresenter.addGroupEventListener("action_message", groupId, ownerId);
groupChatPresenter.refreshList(groupId,ownerId,LIMIT);
// groupChatPresenter.refreshList(groupId,ownerId,LIMIT);
groupChatPresenter.addCallListener("call_listener");
}

@Override
protected void onPause() {
super.onPause();
if (groupMessageAdapter!=null) {
groupMessageAdapter.stopPlayer();
}
if (groupMessageAdapter!=null) {
groupMessageAdapter.stopPlayer();
}
groupChatPresenter.removeMessageReceiveListener(getResources().getString(R.string.group_message_listener));
groupChatPresenter.removeMessageReceiveListener("action_message");
groupChatPresenter.removeCallListener("call_listener");
Expand DownExpand Up@@ -668,6 +676,7 @@ public void setAdapter(List<BaseMessage> messageList) {
}
if (groupMessageAdapter == null) {
groupMessageAdapter = new GroupMessageAdapter(messageList, context, groupId, ownerId);

messageRecyclerView.setAdapter(groupMessageAdapter);
decor = new StickyHeaderDecoration(groupMessageAdapter);
messageRecyclerView.addItemDecoration(decor, 0);
Expand DownExpand Up@@ -709,26 +718,26 @@ public void addReceivedMessage(BaseMessage baseMessage) {

@Override
public void typingStarted(TypingIndicator typingIndicator) {
toolbarSubTitle.setText(typingIndicator.getSender().getName()+" "+getString(R.string.is_typing));
toolbarSubTitle.setText(typingIndicator.getSender().getName()+" "+getString(R.string.is_typing));
}

@Override
public void typingEnded(TypingIndicator typingIndicator) {
toolbarSubTitle.setText(names);
toolbarSubTitle.setText(names);
}

@Override
public void setDeliveryReceipt(MessageReceipt messageReceipt) {
if (groupMessageAdapter!=null){
groupMessageAdapter.setDelivered(messageReceipt);
}
// if (groupMessageAdapter!=null){
// groupMessageAdapter.setDelivered(messageReceipt);
// }
}

@Override
public void onMessageRead(MessageReceipt messageReceipt) {
if (groupMessageAdapter!=null){
groupMessageAdapter.setRead(messageReceipt);
}
// if (groupMessageAdapter!=null){
// groupMessageAdapter.setRead(messageReceipt);
// }
}

@Override
Expand DownExpand Up@@ -991,4 +1000,4 @@ private void addAttachment(int type) {

}
}
}
}
Original file line numberDiff line numberDiff line change
Expand Up@@ -13,6 +13,8 @@
import com.inscripts.cometchatpulse.demo.R;
import com.inscripts.cometchatpulse.demo.Contracts.LoginActivityContract;
import com.inscripts.cometchatpulse.demo.Presenters.LoginAcitivityPresenter;
import com.inscripts.cometchatpulse.demo.Utils.CommonUtils;

import java.util.ArrayList;
import java.util.List;

Expand DownExpand Up@@ -92,6 +94,6 @@ private List<Option> getSampleUserList(){
public void startCometChatActivity() {

startActivity(new Intent(LoginActivity.this, CometChatActivity.class));
finish();
finish();
}
}
Loading
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content
Merged

V2 #20

Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
22 changes: 15 additions & 7 deletions README.md
Original file line numberDiff line numberDiff line change
Expand Up@@ -10,7 +10,7 @@
</br>
</div>

CometChat Android Demo app (built using **CometChat Pro**) is a fully functional messaging app capable of **one-on-one** (private) and **group** messaging along with recent conversations. The app enables users to send **text** and **multimedia messages like audio, video, images, documents.**
CometChat Android Demo app (built using **CometChat Pro**) is a fully functional messaging app capable of **one-on-one** (private) and **group** messaging. The app enables users to send **text** and **multimedia messages like audio, video, images, documents.**

[![Platform](https://img.shields.io/badge/Platform-Android-brightgreen.svg)](#) [![Platform](https://img.shields.io/badge/Language-Java-yellowgreen.svg)](#)

Expand DownExpand Up@@ -81,40 +81,48 @@ To run our open source app with CometChat Pro v1, follow these steps:

` public static final String API_KEY = "XXXXXXXXX";`

- add `google-service.json` file for push notification


## Note




You can Obtain your *APP_ID* and *API_KEY* from [CometChat-Pro Dashboard](https://app.cometchat.com/)
You can Obtain your *APP_ID* and *API_KEY* from [CometChat-Pulse Dashboard](https://app.cometchat.com/)

For more information read [CometChat-Pro Android SDK](https://prodocs.cometchat.com/docs/android-quick-start) Documentation
For more information read [CometChat-Pulse Android SDK](https://prodocs.cometchat.com/docs/android-quick-start) Documentation




![Studio Guide](https://github.com/CometChat-Pulse/android-java-chat-app/blob/master/ScreenShots/guide.png)


## Push Notification

The Push Notification extension allows you to send push notifications to mobile apps and desktop browsers.

For more information read [Android-Push-Notification](https://prodocs.cometchat.com/docs/android-extensions-push-notification) Documentation.






## Screenshots

<img align="left" width="185" height="331" src="https://github.com/CometChat-Pulse/android-java-chat-app/blob/master/ScreenShots/gif1.gif">
<img align="left" width="185" height="331" src="https://github.com/CometChat-Pulse/android-java-chat-app/blob/master/ScreenShots/gif_1.gif">


<img align="left" width="185" height="331" src="https://github.com/CometChat-Pulse/android-java-chat-app/blob/master/ScreenShots/gif2.gif">
<img align="left" width="185" height="331" src="https://github.com/CometChat-Pulse/android-java-chat-app/blob/master/ScreenShots/gif_2.gif">


<img align="left" width="185" height="331" src="https://github.com/CometChat-Pulse/android-java-chat-app/blob/master/ScreenShots/gif3.gif">
<img align="left" width="185" height="331" src="https://github.com/CometChat-Pulse/android-java-chat-app/blob/CP-31/ScreenShots/gif_3.gif">



<img align="left" width="185" height="331" src="https://github.com/CometChat-Pulse/android-java-chat-app/blob/master/ScreenShots/gif4.gif">
<img align="left" width="185" height="331" src="https://github.com/CometChat-Pulse/android-java-chat-app/blob/CP-31/ScreenShots/gif_4.gif">

` `<br></br><br></br><br></br><br></br><br></br><br></br><br></br><br></br></br>

Expand Down
Binary file addedScreenShots/gif_1.gif
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file addedScreenShots/gif_2.gif
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file addedScreenShots/gif_3.gif
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file addedScreenShots/gif_4.gif
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
12 changes: 10 additions & 2 deletions app/build.gradle
Original file line numberDiff line numberDiff line change
Expand Up@@ -63,8 +63,16 @@ dependencies {
implementation 'com.github.bumptech.glide:glide:4.8.0'
annotationProcessor 'com.github.bumptech.glide:compiler:4.8.0'

//cometchat sdk
implementation 'com.cometchat:pro-android-chat-sdk:2.0.0-beta8'
//Firebase
implementation 'com.google.android.gms:play-services-auth:17.0.0'
implementation 'com.google.android.gms:play-services-plus:17.0.0'
implementation 'com.google.firebase:firebase-core:17.2.1'
implementation 'com.google.firebase:firebase-messaging:20.1.0'
implementation 'com.google.android.gms:play-services-maps:17.0.0'
implementation 'com.google.android.gms:play-services-location:17.0.0'
implementation 'com.google.android.gms:play-services-places:17.0.0'

implementation 'com.cometchat:pro-android-chat-sdk:2.0.2'

implementation 'androidx.recyclerview:recyclerview-selection:1.0.0'

Expand Down
Original file line numberDiff line numberDiff line change
Expand Up@@ -41,7 +41,6 @@ protected void onCreate(Bundle savedInstanceState) {
if (getIntent().hasExtra(StringContract.IntentStrings.SESSION_ID)) {
sessionId = getIntent().getStringExtra(StringContract.IntentStrings.SESSION_ID);
Logger.error(TAG, " sessionId " + sessionId);

CometChat.startCall(CallActivity.this, sessionId, callView, new CometChat.OngoingCallListener() {
@Override
public void onUserJoined(User user) {
Expand Down
Original file line numberDiff line numberDiff line change
Expand Up@@ -18,8 +18,10 @@
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.Toast;

import com.cometchat.pro.core.CometChat;
import com.cometchat.pro.exceptions.CometChatException;
import com.cometchat.pro.models.User;
import com.google.android.material.appbar.AppBarLayout;
import com.google.android.material.tabs.TabLayout;
Expand All@@ -30,11 +32,15 @@
import com.inscripts.cometchatpulse.demo.Fragments.GroupListFragment;
import com.inscripts.cometchatpulse.demo.Fragments.RecentsFragment;
import com.inscripts.cometchatpulse.demo.Helper.FabIconAnimator;
import com.inscripts.cometchatpulse.demo.Helper.MyFirebaseMessagingService;
import com.inscripts.cometchatpulse.demo.Helper.ScrollHelper;
import com.inscripts.cometchatpulse.demo.Presenters.CometChatActivityPresenter;
import com.inscripts.cometchatpulse.demo.R;
import com.inscripts.cometchatpulse.demo.Utils.CommonUtils;
import com.inscripts.cometchatpulse.demo.Utils.FontUtils;
import java.util.HashMap;
import java.util.Timer;
import java.util.TimerTask;


public class CometChatActivity extends AppCompatActivity implements ScrollHelper, CometChatActivityContract.CometChatActivityView {
Expand DownExpand Up@@ -74,9 +80,11 @@ protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_comet_chat);
context = this;
MyFirebaseMessagingService.subscribeUser(CometChat.getLoggedInUser().getUid());
cometChatActivityPresenter = new CometChatActivityPresenter();
cometChatActivityPresenter.attach(this);
initViewComponents();

}

private void initViewComponents() {
Expand DownExpand Up@@ -121,13 +129,10 @@ public void onPageSelected(int i) {
adapter.notifyDataSetChanged();
pageNumber=i;
if (i==0)
{
searchItem.setVisible(false);
}
else
{
searchItem.setVisible(true);
}

}

@Override
Expand All@@ -136,12 +141,12 @@ public void onPageScrollStateChanged(int i) {
}
});


}

@Override
protected void onStart() {
super.onStart();

}

@Override
Expand All@@ -155,7 +160,6 @@ protected void onResume() {
cometChatActivityPresenter.addCallEventListener(context, TAG);
Log.d(TAG, "onResume: ");
cometChatActivityPresenter.addMessageListener(CometChatActivity.this,TAG);

}

@Override
Expand Down
Original file line numberDiff line numberDiff line change
Expand Up@@ -41,6 +41,7 @@
import com.cometchat.pro.models.MessageReceipt;
import com.cometchat.pro.models.TextMessage;
import com.cometchat.pro.models.TypingIndicator;
import com.inscripts.cometchatpulse.demo.Helper.MyFirebaseMessagingService;
import com.inscripts.cometchatpulse.demo.Helper.RecyclerTouchListener;
import com.inscripts.cometchatpulse.demo.R;
import com.inscripts.cometchatpulse.demo.Adapter.GroupMessageAdapter;
Expand DownExpand Up@@ -75,7 +76,7 @@

public class GroupChatActivity extends AppCompatActivity implements GroupChatActivityContract.GroupChatView, TextWatcher, View.OnClickListener, ActionMode.Callback {

private static final int LIMIT = 10;
private static final int LIMIT = 30;

private static final String TAG = "GroupChatActivity";

Expand DownExpand Up@@ -159,6 +160,8 @@ public class GroupChatActivity extends AppCompatActivity implements GroupChatAct

private SearchView searchView;

private boolean searchBox = false;

@Override
protected void onCreate(Bundle savedInstanceState) {
setTheme(R.style.AppTheme);
Expand All@@ -169,6 +172,7 @@ protected void onCreate(Bundle savedInstanceState) {
groupChatPresenter = new GroupChatPresenter();
groupChatPresenter.attach(this);
initViewComponent();
MyFirebaseMessagingService.subscribeGroup(groupId);

}

Expand DownExpand Up@@ -274,25 +278,27 @@ private void initViewComponent() {

new Thread(() -> groupChatPresenter.fetchGroupMembers(groupId)).start();

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
setScrollListener();
} else {
messageRecyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() {
@Override
public void onScrollStateChanged(@NonNull RecyclerView recyclerView, int newState) {
if (!searchBox) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
setScrollListener();
} else {
messageRecyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() {
@Override
public void onScrollStateChanged(@NonNull RecyclerView recyclerView, int newState) {

if (linearLayoutManager.findFirstVisibleItemPosition() == 0) {
if (!messageRecyclerView.canScrollVertically(-1)) {

groupChatPresenter.fetchPreviousMessage(groupId, LIMIT);
groupChatPresenter.fetchPreviousMessage(groupId, LIMIT);

}
}

//for toolbar elevation animation i.e stateListAnimator
toolbar.setSelected(recyclerView.canScrollVertically(-1));
//for toolbar elevation animation i.e stateListAnimator
toolbar.setSelected(recyclerView.canScrollVertically(-1));


}
});
}
});
}
}

KeyboardVisibilityEvent.setEventListener(this, var1 -> {
Expand DownExpand Up@@ -340,7 +346,7 @@ private void setScrollListener() {
public void onScrollChange(View v, int scrollX, int scrollY, int oldScrollX, int oldScrollY) {
int temp = linearLayoutManager.findFirstVisibleItemPosition();

if (temp < 5) {
if (!messageRecyclerView.canScrollVertically(-1)) {

groupChatPresenter.fetchPreviousMessage(groupId, LIMIT);

Expand DownExpand Up@@ -477,12 +483,14 @@ public boolean onQueryTextSubmit(String s) {

@Override
public boolean onQueryTextChange(String s) {
searchBox = true;
groupChatPresenter.searchMessage(s,groupId);
return false;
return false;
}
});

searchView.setOnCloseListener(() -> {
searchBox = false;
groupChatPresenter.fetchPreviousMessage(groupId,30);
return false;
});
Expand DownExpand Up@@ -568,16 +576,16 @@ protected void onResume() {
super.onResume();
groupChatPresenter.addMessageReceiveListener(getResources().getString(R.string.group_message_listener), groupId, ownerId);
groupChatPresenter.addGroupEventListener("action_message", groupId, ownerId);
groupChatPresenter.refreshList(groupId,ownerId,LIMIT);
// groupChatPresenter.refreshList(groupId,ownerId,LIMIT);
groupChatPresenter.addCallListener("call_listener");
}

@Override
protected void onPause() {
super.onPause();
if (groupMessageAdapter!=null) {
groupMessageAdapter.stopPlayer();
}
if (groupMessageAdapter!=null) {
groupMessageAdapter.stopPlayer();
}
groupChatPresenter.removeMessageReceiveListener(getResources().getString(R.string.group_message_listener));
groupChatPresenter.removeMessageReceiveListener("action_message");
groupChatPresenter.removeCallListener("call_listener");
Expand DownExpand Up@@ -668,6 +676,7 @@ public void setAdapter(List<BaseMessage> messageList) {
}
if (groupMessageAdapter == null) {
groupMessageAdapter = new GroupMessageAdapter(messageList, context, groupId, ownerId);

messageRecyclerView.setAdapter(groupMessageAdapter);
decor = new StickyHeaderDecoration(groupMessageAdapter);
messageRecyclerView.addItemDecoration(decor, 0);
Expand DownExpand Up@@ -709,26 +718,26 @@ public void addReceivedMessage(BaseMessage baseMessage) {

@Override
public void typingStarted(TypingIndicator typingIndicator) {
toolbarSubTitle.setText(typingIndicator.getSender().getName()+" "+getString(R.string.is_typing));
toolbarSubTitle.setText(typingIndicator.getSender().getName()+" "+getString(R.string.is_typing));
}

@Override
public void typingEnded(TypingIndicator typingIndicator) {
toolbarSubTitle.setText(names);
toolbarSubTitle.setText(names);
}

@Override
public void setDeliveryReceipt(MessageReceipt messageReceipt) {
if (groupMessageAdapter!=null){
groupMessageAdapter.setDelivered(messageReceipt);
}
// if (groupMessageAdapter!=null){
// groupMessageAdapter.setDelivered(messageReceipt);
// }
}

@Override
public void onMessageRead(MessageReceipt messageReceipt) {
if (groupMessageAdapter!=null){
groupMessageAdapter.setRead(messageReceipt);
}
// if (groupMessageAdapter!=null){
// groupMessageAdapter.setRead(messageReceipt);
// }
}

@Override
Expand DownExpand Up@@ -991,4 +1000,4 @@ private void addAttachment(int type) {

}
}
}
}
Original file line numberDiff line numberDiff line change
Expand Up@@ -13,6 +13,8 @@
import com.inscripts.cometchatpulse.demo.R;
import com.inscripts.cometchatpulse.demo.Contracts.LoginActivityContract;
import com.inscripts.cometchatpulse.demo.Presenters.LoginAcitivityPresenter;
import com.inscripts.cometchatpulse.demo.Utils.CommonUtils;

import java.util.ArrayList;
import java.util.List;

Expand DownExpand Up@@ -92,6 +94,6 @@ private List<Option> getSampleUserList(){
public void startCometChatActivity() {

startActivity(new Intent(LoginActivity.this, CometChatActivity.class));
finish();
finish();
}
}
Loading
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content
Merged

V2 #20

Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
22 changes: 15 additions & 7 deletions README.md
Original file line numberDiff line numberDiff line change
Expand Up@@ -10,7 +10,7 @@
</br>
</div>

CometChat Android Demo app (built using **CometChat Pro**) is a fully functional messaging app capable of **one-on-one** (private) and **group** messaging along with recent conversations. The app enables users to send **text** and **multimedia messages like audio, video, images, documents.**
CometChat Android Demo app (built using **CometChat Pro**) is a fully functional messaging app capable of **one-on-one** (private) and **group** messaging. The app enables users to send **text** and **multimedia messages like audio, video, images, documents.**

[![Platform](https://img.shields.io/badge/Platform-Android-brightgreen.svg)](#) [![Platform](https://img.shields.io/badge/Language-Java-yellowgreen.svg)](#)

Expand DownExpand Up@@ -81,40 +81,48 @@ To run our open source app with CometChat Pro v1, follow these steps:

` public static final String API_KEY = "XXXXXXXXX";`

- add `google-service.json` file for push notification


## Note




You can Obtain your *APP_ID* and *API_KEY* from [CometChat-Pro Dashboard](https://app.cometchat.com/)
You can Obtain your *APP_ID* and *API_KEY* from [CometChat-Pulse Dashboard](https://app.cometchat.com/)

For more information read [CometChat-Pro Android SDK](https://prodocs.cometchat.com/docs/android-quick-start) Documentation
For more information read [CometChat-Pulse Android SDK](https://prodocs.cometchat.com/docs/android-quick-start) Documentation




![Studio Guide](https://github.com/CometChat-Pulse/android-java-chat-app/blob/master/ScreenShots/guide.png)


## Push Notification

The Push Notification extension allows you to send push notifications to mobile apps and desktop browsers.

For more information read [Android-Push-Notification](https://prodocs.cometchat.com/docs/android-extensions-push-notification) Documentation.






## Screenshots

<img align="left" width="185" height="331" src="https://github.com/CometChat-Pulse/android-java-chat-app/blob/master/ScreenShots/gif1.gif">
<img align="left" width="185" height="331" src="https://github.com/CometChat-Pulse/android-java-chat-app/blob/master/ScreenShots/gif_1.gif">


<img align="left" width="185" height="331" src="https://github.com/CometChat-Pulse/android-java-chat-app/blob/master/ScreenShots/gif2.gif">
<img align="left" width="185" height="331" src="https://github.com/CometChat-Pulse/android-java-chat-app/blob/master/ScreenShots/gif_2.gif">


<img align="left" width="185" height="331" src="https://github.com/CometChat-Pulse/android-java-chat-app/blob/master/ScreenShots/gif3.gif">
<img align="left" width="185" height="331" src="https://github.com/CometChat-Pulse/android-java-chat-app/blob/CP-31/ScreenShots/gif_3.gif">



<img align="left" width="185" height="331" src="https://github.com/CometChat-Pulse/android-java-chat-app/blob/master/ScreenShots/gif4.gif">
<img align="left" width="185" height="331" src="https://github.com/CometChat-Pulse/android-java-chat-app/blob/CP-31/ScreenShots/gif_4.gif">

` `<br></br><br></br><br></br><br></br><br></br><br></br><br></br><br></br></br>

Expand Down
Binary file addedScreenShots/gif_1.gif
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file addedScreenShots/gif_2.gif
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file addedScreenShots/gif_3.gif
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file addedScreenShots/gif_4.gif
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
12 changes: 10 additions & 2 deletions app/build.gradle
Original file line numberDiff line numberDiff line change
Expand Up@@ -63,8 +63,16 @@ dependencies {
implementation 'com.github.bumptech.glide:glide:4.8.0'
annotationProcessor 'com.github.bumptech.glide:compiler:4.8.0'

//cometchat sdk
implementation 'com.cometchat:pro-android-chat-sdk:2.0.0-beta8'
//Firebase
implementation 'com.google.android.gms:play-services-auth:17.0.0'
implementation 'com.google.android.gms:play-services-plus:17.0.0'
implementation 'com.google.firebase:firebase-core:17.2.1'
implementation 'com.google.firebase:firebase-messaging:20.1.0'
implementation 'com.google.android.gms:play-services-maps:17.0.0'
implementation 'com.google.android.gms:play-services-location:17.0.0'
implementation 'com.google.android.gms:play-services-places:17.0.0'

implementation 'com.cometchat:pro-android-chat-sdk:2.0.2'

implementation 'androidx.recyclerview:recyclerview-selection:1.0.0'

Expand Down
Original file line numberDiff line numberDiff line change
Expand Up@@ -41,7 +41,6 @@ protected void onCreate(Bundle savedInstanceState) {
if (getIntent().hasExtra(StringContract.IntentStrings.SESSION_ID)) {
sessionId = getIntent().getStringExtra(StringContract.IntentStrings.SESSION_ID);
Logger.error(TAG, " sessionId " + sessionId);

CometChat.startCall(CallActivity.this, sessionId, callView, new CometChat.OngoingCallListener() {
@Override
public void onUserJoined(User user) {
Expand Down
Original file line numberDiff line numberDiff line change
Expand Up@@ -18,8 +18,10 @@
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.Toast;

import com.cometchat.pro.core.CometChat;
import com.cometchat.pro.exceptions.CometChatException;
import com.cometchat.pro.models.User;
import com.google.android.material.appbar.AppBarLayout;
import com.google.android.material.tabs.TabLayout;
Expand All@@ -30,11 +32,15 @@
import com.inscripts.cometchatpulse.demo.Fragments.GroupListFragment;
import com.inscripts.cometchatpulse.demo.Fragments.RecentsFragment;
import com.inscripts.cometchatpulse.demo.Helper.FabIconAnimator;
import com.inscripts.cometchatpulse.demo.Helper.MyFirebaseMessagingService;
import com.inscripts.cometchatpulse.demo.Helper.ScrollHelper;
import com.inscripts.cometchatpulse.demo.Presenters.CometChatActivityPresenter;
import com.inscripts.cometchatpulse.demo.R;
import com.inscripts.cometchatpulse.demo.Utils.CommonUtils;
import com.inscripts.cometchatpulse.demo.Utils.FontUtils;
import java.util.HashMap;
import java.util.Timer;
import java.util.TimerTask;


public class CometChatActivity extends AppCompatActivity implements ScrollHelper, CometChatActivityContract.CometChatActivityView {
Expand DownExpand Up@@ -74,9 +80,11 @@ protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_comet_chat);
context = this;
MyFirebaseMessagingService.subscribeUser(CometChat.getLoggedInUser().getUid());
cometChatActivityPresenter = new CometChatActivityPresenter();
cometChatActivityPresenter.attach(this);
initViewComponents();

}

private void initViewComponents() {
Expand DownExpand Up@@ -121,13 +129,10 @@ public void onPageSelected(int i) {
adapter.notifyDataSetChanged();
pageNumber=i;
if (i==0)
{
searchItem.setVisible(false);
}
else
{
searchItem.setVisible(true);
}

}

@Override
Expand All@@ -136,12 +141,12 @@ public void onPageScrollStateChanged(int i) {
}
});


}

@Override
protected void onStart() {
super.onStart();

}

@Override
Expand All@@ -155,7 +160,6 @@ protected void onResume() {
cometChatActivityPresenter.addCallEventListener(context, TAG);
Log.d(TAG, "onResume: ");
cometChatActivityPresenter.addMessageListener(CometChatActivity.this,TAG);

}

@Override
Expand Down
Original file line numberDiff line numberDiff line change
Expand Up@@ -41,6 +41,7 @@
import com.cometchat.pro.models.MessageReceipt;
import com.cometchat.pro.models.TextMessage;
import com.cometchat.pro.models.TypingIndicator;
import com.inscripts.cometchatpulse.demo.Helper.MyFirebaseMessagingService;
import com.inscripts.cometchatpulse.demo.Helper.RecyclerTouchListener;
import com.inscripts.cometchatpulse.demo.R;
import com.inscripts.cometchatpulse.demo.Adapter.GroupMessageAdapter;
Expand DownExpand Up@@ -75,7 +76,7 @@

public class GroupChatActivity extends AppCompatActivity implements GroupChatActivityContract.GroupChatView, TextWatcher, View.OnClickListener, ActionMode.Callback {

private static final int LIMIT = 10;
private static final int LIMIT = 30;

private static final String TAG = "GroupChatActivity";

Expand DownExpand Up@@ -159,6 +160,8 @@ public class GroupChatActivity extends AppCompatActivity implements GroupChatAct

private SearchView searchView;

private boolean searchBox = false;

@Override
protected void onCreate(Bundle savedInstanceState) {
setTheme(R.style.AppTheme);
Expand All@@ -169,6 +172,7 @@ protected void onCreate(Bundle savedInstanceState) {
groupChatPresenter = new GroupChatPresenter();
groupChatPresenter.attach(this);
initViewComponent();
MyFirebaseMessagingService.subscribeGroup(groupId);

}

Expand DownExpand Up@@ -274,25 +278,27 @@ private void initViewComponent() {

new Thread(() -> groupChatPresenter.fetchGroupMembers(groupId)).start();

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
setScrollListener();
} else {
messageRecyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() {
@Override
public void onScrollStateChanged(@NonNull RecyclerView recyclerView, int newState) {
if (!searchBox) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
setScrollListener();
} else {
messageRecyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() {
@Override
public void onScrollStateChanged(@NonNull RecyclerView recyclerView, int newState) {

if (linearLayoutManager.findFirstVisibleItemPosition() == 0) {
if (!messageRecyclerView.canScrollVertically(-1)) {

groupChatPresenter.fetchPreviousMessage(groupId, LIMIT);
groupChatPresenter.fetchPreviousMessage(groupId, LIMIT);

}
}

//for toolbar elevation animation i.e stateListAnimator
toolbar.setSelected(recyclerView.canScrollVertically(-1));
//for toolbar elevation animation i.e stateListAnimator
toolbar.setSelected(recyclerView.canScrollVertically(-1));


}
});
}
});
}
}

KeyboardVisibilityEvent.setEventListener(this, var1 -> {
Expand DownExpand Up@@ -340,7 +346,7 @@ private void setScrollListener() {
public void onScrollChange(View v, int scrollX, int scrollY, int oldScrollX, int oldScrollY) {
int temp = linearLayoutManager.findFirstVisibleItemPosition();

if (temp < 5) {
if (!messageRecyclerView.canScrollVertically(-1)) {

groupChatPresenter.fetchPreviousMessage(groupId, LIMIT);

Expand DownExpand Up@@ -477,12 +483,14 @@ public boolean onQueryTextSubmit(String s) {

@Override
public boolean onQueryTextChange(String s) {
searchBox = true;
groupChatPresenter.searchMessage(s,groupId);
return false;
return false;
}
});

searchView.setOnCloseListener(() -> {
searchBox = false;
groupChatPresenter.fetchPreviousMessage(groupId,30);
return false;
});
Expand DownExpand Up@@ -568,16 +576,16 @@ protected void onResume() {
super.onResume();
groupChatPresenter.addMessageReceiveListener(getResources().getString(R.string.group_message_listener), groupId, ownerId);
groupChatPresenter.addGroupEventListener("action_message", groupId, ownerId);
groupChatPresenter.refreshList(groupId,ownerId,LIMIT);
// groupChatPresenter.refreshList(groupId,ownerId,LIMIT);
groupChatPresenter.addCallListener("call_listener");
}

@Override
protected void onPause() {
super.onPause();
if (groupMessageAdapter!=null) {
groupMessageAdapter.stopPlayer();
}
if (groupMessageAdapter!=null) {
groupMessageAdapter.stopPlayer();
}
groupChatPresenter.removeMessageReceiveListener(getResources().getString(R.string.group_message_listener));
groupChatPresenter.removeMessageReceiveListener("action_message");
groupChatPresenter.removeCallListener("call_listener");
Expand DownExpand Up@@ -668,6 +676,7 @@ public void setAdapter(List<BaseMessage> messageList) {
}
if (groupMessageAdapter == null) {
groupMessageAdapter = new GroupMessageAdapter(messageList, context, groupId, ownerId);

messageRecyclerView.setAdapter(groupMessageAdapter);
decor = new StickyHeaderDecoration(groupMessageAdapter);
messageRecyclerView.addItemDecoration(decor, 0);
Expand DownExpand Up@@ -709,26 +718,26 @@ public void addReceivedMessage(BaseMessage baseMessage) {

@Override
public void typingStarted(TypingIndicator typingIndicator) {
toolbarSubTitle.setText(typingIndicator.getSender().getName()+" "+getString(R.string.is_typing));
toolbarSubTitle.setText(typingIndicator.getSender().getName()+" "+getString(R.string.is_typing));
}

@Override
public void typingEnded(TypingIndicator typingIndicator) {
toolbarSubTitle.setText(names);
toolbarSubTitle.setText(names);
}

@Override
public void setDeliveryReceipt(MessageReceipt messageReceipt) {
if (groupMessageAdapter!=null){
groupMessageAdapter.setDelivered(messageReceipt);
}
// if (groupMessageAdapter!=null){
// groupMessageAdapter.setDelivered(messageReceipt);
// }
}

@Override
public void onMessageRead(MessageReceipt messageReceipt) {
if (groupMessageAdapter!=null){
groupMessageAdapter.setRead(messageReceipt);
}
// if (groupMessageAdapter!=null){
// groupMessageAdapter.setRead(messageReceipt);
// }
}

@Override
Expand DownExpand Up@@ -991,4 +1000,4 @@ private void addAttachment(int type) {

}
}
}
}
Original file line numberDiff line numberDiff line change
Expand Up@@ -13,6 +13,8 @@
import com.inscripts.cometchatpulse.demo.R;
import com.inscripts.cometchatpulse.demo.Contracts.LoginActivityContract;
import com.inscripts.cometchatpulse.demo.Presenters.LoginAcitivityPresenter;
import com.inscripts.cometchatpulse.demo.Utils.CommonUtils;

import java.util.ArrayList;
import java.util.List;

Expand DownExpand Up@@ -92,6 +94,6 @@ private List<Option> getSampleUserList(){
public void startCometChatActivity() {

startActivity(new Intent(LoginActivity.this, CometChatActivity.class));
finish();
finish();
}
}
Loading
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content
Merged

V2 #20

Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
22 changes: 15 additions & 7 deletions README.md
Original file line numberDiff line numberDiff line change
Expand Up@@ -10,7 +10,7 @@
</br>
</div>

CometChat Android Demo app (built using **CometChat Pro**) is a fully functional messaging app capable of **one-on-one** (private) and **group** messaging along with recent conversations. The app enables users to send **text** and **multimedia messages like audio, video, images, documents.**
CometChat Android Demo app (built using **CometChat Pro**) is a fully functional messaging app capable of **one-on-one** (private) and **group** messaging. The app enables users to send **text** and **multimedia messages like audio, video, images, documents.**

[![Platform](https://img.shields.io/badge/Platform-Android-brightgreen.svg)](#) [![Platform](https://img.shields.io/badge/Language-Java-yellowgreen.svg)](#)

Expand DownExpand Up@@ -81,40 +81,48 @@ To run our open source app with CometChat Pro v1, follow these steps:

` public static final String API_KEY = "XXXXXXXXX";`

- add `google-service.json` file for push notification


## Note




You can Obtain your *APP_ID* and *API_KEY* from [CometChat-Pro Dashboard](https://app.cometchat.com/)
You can Obtain your *APP_ID* and *API_KEY* from [CometChat-Pulse Dashboard](https://app.cometchat.com/)

For more information read [CometChat-Pro Android SDK](https://prodocs.cometchat.com/docs/android-quick-start) Documentation
For more information read [CometChat-Pulse Android SDK](https://prodocs.cometchat.com/docs/android-quick-start) Documentation




![Studio Guide](https://github.com/CometChat-Pulse/android-java-chat-app/blob/master/ScreenShots/guide.png)


## Push Notification

The Push Notification extension allows you to send push notifications to mobile apps and desktop browsers.

For more information read [Android-Push-Notification](https://prodocs.cometchat.com/docs/android-extensions-push-notification) Documentation.






## Screenshots

<img align="left" width="185" height="331" src="https://github.com/CometChat-Pulse/android-java-chat-app/blob/master/ScreenShots/gif1.gif">
<img align="left" width="185" height="331" src="https://github.com/CometChat-Pulse/android-java-chat-app/blob/master/ScreenShots/gif_1.gif">


<img align="left" width="185" height="331" src="https://github.com/CometChat-Pulse/android-java-chat-app/blob/master/ScreenShots/gif2.gif">
<img align="left" width="185" height="331" src="https://github.com/CometChat-Pulse/android-java-chat-app/blob/master/ScreenShots/gif_2.gif">


<img align="left" width="185" height="331" src="https://github.com/CometChat-Pulse/android-java-chat-app/blob/master/ScreenShots/gif3.gif">
<img align="left" width="185" height="331" src="https://github.com/CometChat-Pulse/android-java-chat-app/blob/CP-31/ScreenShots/gif_3.gif">



<img align="left" width="185" height="331" src="https://github.com/CometChat-Pulse/android-java-chat-app/blob/master/ScreenShots/gif4.gif">
<img align="left" width="185" height="331" src="https://github.com/CometChat-Pulse/android-java-chat-app/blob/CP-31/ScreenShots/gif_4.gif">

` `<br></br><br></br><br></br><br></br><br></br><br></br><br></br><br></br></br>

Expand Down
Binary file addedScreenShots/gif_1.gif
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file addedScreenShots/gif_2.gif
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file addedScreenShots/gif_3.gif
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file addedScreenShots/gif_4.gif
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
12 changes: 10 additions & 2 deletions app/build.gradle
Original file line numberDiff line numberDiff line change
Expand Up@@ -63,8 +63,16 @@ dependencies {
implementation 'com.github.bumptech.glide:glide:4.8.0'
annotationProcessor 'com.github.bumptech.glide:compiler:4.8.0'

//cometchat sdk
implementation 'com.cometchat:pro-android-chat-sdk:2.0.0-beta8'
//Firebase
implementation 'com.google.android.gms:play-services-auth:17.0.0'
implementation 'com.google.android.gms:play-services-plus:17.0.0'
implementation 'com.google.firebase:firebase-core:17.2.1'
implementation 'com.google.firebase:firebase-messaging:20.1.0'
implementation 'com.google.android.gms:play-services-maps:17.0.0'
implementation 'com.google.android.gms:play-services-location:17.0.0'
implementation 'com.google.android.gms:play-services-places:17.0.0'

implementation 'com.cometchat:pro-android-chat-sdk:2.0.2'

implementation 'androidx.recyclerview:recyclerview-selection:1.0.0'

Expand Down
Original file line numberDiff line numberDiff line change
Expand Up@@ -41,7 +41,6 @@ protected void onCreate(Bundle savedInstanceState) {
if (getIntent().hasExtra(StringContract.IntentStrings.SESSION_ID)) {
sessionId = getIntent().getStringExtra(StringContract.IntentStrings.SESSION_ID);
Logger.error(TAG, " sessionId " + sessionId);

CometChat.startCall(CallActivity.this, sessionId, callView, new CometChat.OngoingCallListener() {
@Override
public void onUserJoined(User user) {
Expand Down
Original file line numberDiff line numberDiff line change
Expand Up@@ -18,8 +18,10 @@
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.Toast;

import com.cometchat.pro.core.CometChat;
import com.cometchat.pro.exceptions.CometChatException;
import com.cometchat.pro.models.User;
import com.google.android.material.appbar.AppBarLayout;
import com.google.android.material.tabs.TabLayout;
Expand All@@ -30,11 +32,15 @@
import com.inscripts.cometchatpulse.demo.Fragments.GroupListFragment;
import com.inscripts.cometchatpulse.demo.Fragments.RecentsFragment;
import com.inscripts.cometchatpulse.demo.Helper.FabIconAnimator;
import com.inscripts.cometchatpulse.demo.Helper.MyFirebaseMessagingService;
import com.inscripts.cometchatpulse.demo.Helper.ScrollHelper;
import com.inscripts.cometchatpulse.demo.Presenters.CometChatActivityPresenter;
import com.inscripts.cometchatpulse.demo.R;
import com.inscripts.cometchatpulse.demo.Utils.CommonUtils;
import com.inscripts.cometchatpulse.demo.Utils.FontUtils;
import java.util.HashMap;
import java.util.Timer;
import java.util.TimerTask;


public class CometChatActivity extends AppCompatActivity implements ScrollHelper, CometChatActivityContract.CometChatActivityView {
Expand DownExpand Up@@ -74,9 +80,11 @@ protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_comet_chat);
context = this;
MyFirebaseMessagingService.subscribeUser(CometChat.getLoggedInUser().getUid());
cometChatActivityPresenter = new CometChatActivityPresenter();
cometChatActivityPresenter.attach(this);
initViewComponents();

}

private void initViewComponents() {
Expand DownExpand Up@@ -121,13 +129,10 @@ public void onPageSelected(int i) {
adapter.notifyDataSetChanged();
pageNumber=i;
if (i==0)
{
searchItem.setVisible(false);
}
else
{
searchItem.setVisible(true);
}

}

@Override
Expand All@@ -136,12 +141,12 @@ public void onPageScrollStateChanged(int i) {
}
});


}

@Override
protected void onStart() {
super.onStart();

}

@Override
Expand All@@ -155,7 +160,6 @@ protected void onResume() {
cometChatActivityPresenter.addCallEventListener(context, TAG);
Log.d(TAG, "onResume: ");
cometChatActivityPresenter.addMessageListener(CometChatActivity.this,TAG);

}

@Override
Expand Down
Original file line numberDiff line numberDiff line change
Expand Up@@ -41,6 +41,7 @@
import com.cometchat.pro.models.MessageReceipt;
import com.cometchat.pro.models.TextMessage;
import com.cometchat.pro.models.TypingIndicator;
import com.inscripts.cometchatpulse.demo.Helper.MyFirebaseMessagingService;
import com.inscripts.cometchatpulse.demo.Helper.RecyclerTouchListener;
import com.inscripts.cometchatpulse.demo.R;
import com.inscripts.cometchatpulse.demo.Adapter.GroupMessageAdapter;
Expand DownExpand Up@@ -75,7 +76,7 @@

public class GroupChatActivity extends AppCompatActivity implements GroupChatActivityContract.GroupChatView, TextWatcher, View.OnClickListener, ActionMode.Callback {

private static final int LIMIT = 10;
private static final int LIMIT = 30;

private static final String TAG = "GroupChatActivity";

Expand DownExpand Up@@ -159,6 +160,8 @@ public class GroupChatActivity extends AppCompatActivity implements GroupChatAct

private SearchView searchView;

private boolean searchBox = false;

@Override
protected void onCreate(Bundle savedInstanceState) {
setTheme(R.style.AppTheme);
Expand All@@ -169,6 +172,7 @@ protected void onCreate(Bundle savedInstanceState) {
groupChatPresenter = new GroupChatPresenter();
groupChatPresenter.attach(this);
initViewComponent();
MyFirebaseMessagingService.subscribeGroup(groupId);

}

Expand DownExpand Up@@ -274,25 +278,27 @@ private void initViewComponent() {

new Thread(() -> groupChatPresenter.fetchGroupMembers(groupId)).start();

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
setScrollListener();
} else {
messageRecyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() {
@Override
public void onScrollStateChanged(@NonNull RecyclerView recyclerView, int newState) {
if (!searchBox) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
setScrollListener();
} else {
messageRecyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() {
@Override
public void onScrollStateChanged(@NonNull RecyclerView recyclerView, int newState) {

if (linearLayoutManager.findFirstVisibleItemPosition() == 0) {
if (!messageRecyclerView.canScrollVertically(-1)) {

groupChatPresenter.fetchPreviousMessage(groupId, LIMIT);
groupChatPresenter.fetchPreviousMessage(groupId, LIMIT);

}
}

//for toolbar elevation animation i.e stateListAnimator
toolbar.setSelected(recyclerView.canScrollVertically(-1));
//for toolbar elevation animation i.e stateListAnimator
toolbar.setSelected(recyclerView.canScrollVertically(-1));


}
});
}
});
}
}

KeyboardVisibilityEvent.setEventListener(this, var1 -> {
Expand DownExpand Up@@ -340,7 +346,7 @@ private void setScrollListener() {
public void onScrollChange(View v, int scrollX, int scrollY, int oldScrollX, int oldScrollY) {
int temp = linearLayoutManager.findFirstVisibleItemPosition();

if (temp < 5) {
if (!messageRecyclerView.canScrollVertically(-1)) {

groupChatPresenter.fetchPreviousMessage(groupId, LIMIT);

Expand DownExpand Up@@ -477,12 +483,14 @@ public boolean onQueryTextSubmit(String s) {

@Override
public boolean onQueryTextChange(String s) {
searchBox = true;
groupChatPresenter.searchMessage(s,groupId);
return false;
return false;
}
});

searchView.setOnCloseListener(() -> {
searchBox = false;
groupChatPresenter.fetchPreviousMessage(groupId,30);
return false;
});
Expand DownExpand Up@@ -568,16 +576,16 @@ protected void onResume() {
super.onResume();
groupChatPresenter.addMessageReceiveListener(getResources().getString(R.string.group_message_listener), groupId, ownerId);
groupChatPresenter.addGroupEventListener("action_message", groupId, ownerId);
groupChatPresenter.refreshList(groupId,ownerId,LIMIT);
// groupChatPresenter.refreshList(groupId,ownerId,LIMIT);
groupChatPresenter.addCallListener("call_listener");
}

@Override
protected void onPause() {
super.onPause();
if (groupMessageAdapter!=null) {
groupMessageAdapter.stopPlayer();
}
if (groupMessageAdapter!=null) {
groupMessageAdapter.stopPlayer();
}
groupChatPresenter.removeMessageReceiveListener(getResources().getString(R.string.group_message_listener));
groupChatPresenter.removeMessageReceiveListener("action_message");
groupChatPresenter.removeCallListener("call_listener");
Expand DownExpand Up@@ -668,6 +676,7 @@ public void setAdapter(List<BaseMessage> messageList) {
}
if (groupMessageAdapter == null) {
groupMessageAdapter = new GroupMessageAdapter(messageList, context, groupId, ownerId);

messageRecyclerView.setAdapter(groupMessageAdapter);
decor = new StickyHeaderDecoration(groupMessageAdapter);
messageRecyclerView.addItemDecoration(decor, 0);
Expand DownExpand Up@@ -709,26 +718,26 @@ public void addReceivedMessage(BaseMessage baseMessage) {

@Override
public void typingStarted(TypingIndicator typingIndicator) {
toolbarSubTitle.setText(typingIndicator.getSender().getName()+" "+getString(R.string.is_typing));
toolbarSubTitle.setText(typingIndicator.getSender().getName()+" "+getString(R.string.is_typing));
}

@Override
public void typingEnded(TypingIndicator typingIndicator) {
toolbarSubTitle.setText(names);
toolbarSubTitle.setText(names);
}

@Override
public void setDeliveryReceipt(MessageReceipt messageReceipt) {
if (groupMessageAdapter!=null){
groupMessageAdapter.setDelivered(messageReceipt);
}
// if (groupMessageAdapter!=null){
// groupMessageAdapter.setDelivered(messageReceipt);
// }
}

@Override
public void onMessageRead(MessageReceipt messageReceipt) {
if (groupMessageAdapter!=null){
groupMessageAdapter.setRead(messageReceipt);
}
// if (groupMessageAdapter!=null){
// groupMessageAdapter.setRead(messageReceipt);
// }
}

@Override
Expand DownExpand Up@@ -991,4 +1000,4 @@ private void addAttachment(int type) {

}
}
}
}
Original file line numberDiff line numberDiff line change
Expand Up@@ -13,6 +13,8 @@
import com.inscripts.cometchatpulse.demo.R;
import com.inscripts.cometchatpulse.demo.Contracts.LoginActivityContract;
import com.inscripts.cometchatpulse.demo.Presenters.LoginAcitivityPresenter;
import com.inscripts.cometchatpulse.demo.Utils.CommonUtils;

import java.util.ArrayList;
import java.util.List;

Expand DownExpand Up@@ -92,6 +94,6 @@ private List<Option> getSampleUserList(){
public void startCometChatActivity() {

startActivity(new Intent(LoginActivity.this, CometChatActivity.class));
finish();
finish();
}
}
Loading
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content
Merged

V2 #20

Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
22 changes: 15 additions & 7 deletions README.md
Original file line numberDiff line numberDiff line change
Expand Up@@ -10,7 +10,7 @@
</br>
</div>

CometChat Android Demo app (built using **CometChat Pro**) is a fully functional messaging app capable of **one-on-one** (private) and **group** messaging along with recent conversations. The app enables users to send **text** and **multimedia messages like audio, video, images, documents.**
CometChat Android Demo app (built using **CometChat Pro**) is a fully functional messaging app capable of **one-on-one** (private) and **group** messaging. The app enables users to send **text** and **multimedia messages like audio, video, images, documents.**

[![Platform](https://img.shields.io/badge/Platform-Android-brightgreen.svg)](#) [![Platform](https://img.shields.io/badge/Language-Java-yellowgreen.svg)](#)

Expand DownExpand Up@@ -81,40 +81,48 @@ To run our open source app with CometChat Pro v1, follow these steps:

` public static final String API_KEY = "XXXXXXXXX";`

- add `google-service.json` file for push notification


## Note




You can Obtain your *APP_ID* and *API_KEY* from [CometChat-Pro Dashboard](https://app.cometchat.com/)
You can Obtain your *APP_ID* and *API_KEY* from [CometChat-Pulse Dashboard](https://app.cometchat.com/)

For more information read [CometChat-Pro Android SDK](https://prodocs.cometchat.com/docs/android-quick-start) Documentation
For more information read [CometChat-Pulse Android SDK](https://prodocs.cometchat.com/docs/android-quick-start) Documentation




![Studio Guide](https://github.com/CometChat-Pulse/android-java-chat-app/blob/master/ScreenShots/guide.png)


## Push Notification

The Push Notification extension allows you to send push notifications to mobile apps and desktop browsers.

For more information read [Android-Push-Notification](https://prodocs.cometchat.com/docs/android-extensions-push-notification) Documentation.






## Screenshots

<img align="left" width="185" height="331" src="https://github.com/CometChat-Pulse/android-java-chat-app/blob/master/ScreenShots/gif1.gif">
<img align="left" width="185" height="331" src="https://github.com/CometChat-Pulse/android-java-chat-app/blob/master/ScreenShots/gif_1.gif">


<img align="left" width="185" height="331" src="https://github.com/CometChat-Pulse/android-java-chat-app/blob/master/ScreenShots/gif2.gif">
<img align="left" width="185" height="331" src="https://github.com/CometChat-Pulse/android-java-chat-app/blob/master/ScreenShots/gif_2.gif">


<img align="left" width="185" height="331" src="https://github.com/CometChat-Pulse/android-java-chat-app/blob/master/ScreenShots/gif3.gif">
<img align="left" width="185" height="331" src="https://github.com/CometChat-Pulse/android-java-chat-app/blob/CP-31/ScreenShots/gif_3.gif">



<img align="left" width="185" height="331" src="https://github.com/CometChat-Pulse/android-java-chat-app/blob/master/ScreenShots/gif4.gif">
<img align="left" width="185" height="331" src="https://github.com/CometChat-Pulse/android-java-chat-app/blob/CP-31/ScreenShots/gif_4.gif">

` `<br></br><br></br><br></br><br></br><br></br><br></br><br></br><br></br></br>

Expand Down
Binary file addedScreenShots/gif_1.gif
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file addedScreenShots/gif_2.gif
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file addedScreenShots/gif_3.gif
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file addedScreenShots/gif_4.gif
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
12 changes: 10 additions & 2 deletions app/build.gradle
Original file line numberDiff line numberDiff line change
Expand Up@@ -63,8 +63,16 @@ dependencies {
implementation 'com.github.bumptech.glide:glide:4.8.0'
annotationProcessor 'com.github.bumptech.glide:compiler:4.8.0'

//cometchat sdk
implementation 'com.cometchat:pro-android-chat-sdk:2.0.0-beta8'
//Firebase
implementation 'com.google.android.gms:play-services-auth:17.0.0'
implementation 'com.google.android.gms:play-services-plus:17.0.0'
implementation 'com.google.firebase:firebase-core:17.2.1'
implementation 'com.google.firebase:firebase-messaging:20.1.0'
implementation 'com.google.android.gms:play-services-maps:17.0.0'
implementation 'com.google.android.gms:play-services-location:17.0.0'
implementation 'com.google.android.gms:play-services-places:17.0.0'

implementation 'com.cometchat:pro-android-chat-sdk:2.0.2'

implementation 'androidx.recyclerview:recyclerview-selection:1.0.0'

Expand Down
Original file line numberDiff line numberDiff line change
Expand Up@@ -41,7 +41,6 @@ protected void onCreate(Bundle savedInstanceState) {
if (getIntent().hasExtra(StringContract.IntentStrings.SESSION_ID)) {
sessionId = getIntent().getStringExtra(StringContract.IntentStrings.SESSION_ID);
Logger.error(TAG, " sessionId " + sessionId);

CometChat.startCall(CallActivity.this, sessionId, callView, new CometChat.OngoingCallListener() {
@Override
public void onUserJoined(User user) {
Expand Down
Original file line numberDiff line numberDiff line change
Expand Up@@ -18,8 +18,10 @@
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.Toast;

import com.cometchat.pro.core.CometChat;
import com.cometchat.pro.exceptions.CometChatException;
import com.cometchat.pro.models.User;
import com.google.android.material.appbar.AppBarLayout;
import com.google.android.material.tabs.TabLayout;
Expand All@@ -30,11 +32,15 @@
import com.inscripts.cometchatpulse.demo.Fragments.GroupListFragment;
import com.inscripts.cometchatpulse.demo.Fragments.RecentsFragment;
import com.inscripts.cometchatpulse.demo.Helper.FabIconAnimator;
import com.inscripts.cometchatpulse.demo.Helper.MyFirebaseMessagingService;
import com.inscripts.cometchatpulse.demo.Helper.ScrollHelper;
import com.inscripts.cometchatpulse.demo.Presenters.CometChatActivityPresenter;
import com.inscripts.cometchatpulse.demo.R;
import com.inscripts.cometchatpulse.demo.Utils.CommonUtils;
import com.inscripts.cometchatpulse.demo.Utils.FontUtils;
import java.util.HashMap;
import java.util.Timer;
import java.util.TimerTask;


public class CometChatActivity extends AppCompatActivity implements ScrollHelper, CometChatActivityContract.CometChatActivityView {
Expand DownExpand Up@@ -74,9 +80,11 @@ protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_comet_chat);
context = this;
MyFirebaseMessagingService.subscribeUser(CometChat.getLoggedInUser().getUid());
cometChatActivityPresenter = new CometChatActivityPresenter();
cometChatActivityPresenter.attach(this);
initViewComponents();

}

private void initViewComponents() {
Expand DownExpand Up@@ -121,13 +129,10 @@ public void onPageSelected(int i) {
adapter.notifyDataSetChanged();
pageNumber=i;
if (i==0)
{
searchItem.setVisible(false);
}
else
{
searchItem.setVisible(true);
}

}

@Override
Expand All@@ -136,12 +141,12 @@ public void onPageScrollStateChanged(int i) {
}
});


}

@Override
protected void onStart() {
super.onStart();

}

@Override
Expand All@@ -155,7 +160,6 @@ protected void onResume() {
cometChatActivityPresenter.addCallEventListener(context, TAG);
Log.d(TAG, "onResume: ");
cometChatActivityPresenter.addMessageListener(CometChatActivity.this,TAG);

}

@Override
Expand Down
Original file line numberDiff line numberDiff line change
Expand Up@@ -41,6 +41,7 @@
import com.cometchat.pro.models.MessageReceipt;
import com.cometchat.pro.models.TextMessage;
import com.cometchat.pro.models.TypingIndicator;
import com.inscripts.cometchatpulse.demo.Helper.MyFirebaseMessagingService;
import com.inscripts.cometchatpulse.demo.Helper.RecyclerTouchListener;
import com.inscripts.cometchatpulse.demo.R;
import com.inscripts.cometchatpulse.demo.Adapter.GroupMessageAdapter;
Expand DownExpand Up@@ -75,7 +76,7 @@

public class GroupChatActivity extends AppCompatActivity implements GroupChatActivityContract.GroupChatView, TextWatcher, View.OnClickListener, ActionMode.Callback {

private static final int LIMIT = 10;
private static final int LIMIT = 30;

private static final String TAG = "GroupChatActivity";

Expand DownExpand Up@@ -159,6 +160,8 @@ public class GroupChatActivity extends AppCompatActivity implements GroupChatAct

private SearchView searchView;

private boolean searchBox = false;

@Override
protected void onCreate(Bundle savedInstanceState) {
setTheme(R.style.AppTheme);
Expand All@@ -169,6 +172,7 @@ protected void onCreate(Bundle savedInstanceState) {
groupChatPresenter = new GroupChatPresenter();
groupChatPresenter.attach(this);
initViewComponent();
MyFirebaseMessagingService.subscribeGroup(groupId);

}

Expand DownExpand Up@@ -274,25 +278,27 @@ private void initViewComponent() {

new Thread(() -> groupChatPresenter.fetchGroupMembers(groupId)).start();

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
setScrollListener();
} else {
messageRecyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() {
@Override
public void onScrollStateChanged(@NonNull RecyclerView recyclerView, int newState) {
if (!searchBox) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
setScrollListener();
} else {
messageRecyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() {
@Override
public void onScrollStateChanged(@NonNull RecyclerView recyclerView, int newState) {

if (linearLayoutManager.findFirstVisibleItemPosition() == 0) {
if (!messageRecyclerView.canScrollVertically(-1)) {

groupChatPresenter.fetchPreviousMessage(groupId, LIMIT);
groupChatPresenter.fetchPreviousMessage(groupId, LIMIT);

}
}

//for toolbar elevation animation i.e stateListAnimator
toolbar.setSelected(recyclerView.canScrollVertically(-1));
//for toolbar elevation animation i.e stateListAnimator
toolbar.setSelected(recyclerView.canScrollVertically(-1));


}
});
}
});
}
}

KeyboardVisibilityEvent.setEventListener(this, var1 -> {
Expand DownExpand Up@@ -340,7 +346,7 @@ private void setScrollListener() {
public void onScrollChange(View v, int scrollX, int scrollY, int oldScrollX, int oldScrollY) {
int temp = linearLayoutManager.findFirstVisibleItemPosition();

if (temp < 5) {
if (!messageRecyclerView.canScrollVertically(-1)) {

groupChatPresenter.fetchPreviousMessage(groupId, LIMIT);

Expand DownExpand Up@@ -477,12 +483,14 @@ public boolean onQueryTextSubmit(String s) {

@Override
public boolean onQueryTextChange(String s) {
searchBox = true;
groupChatPresenter.searchMessage(s,groupId);
return false;
return false;
}
});

searchView.setOnCloseListener(() -> {
searchBox = false;
groupChatPresenter.fetchPreviousMessage(groupId,30);
return false;
});
Expand DownExpand Up@@ -568,16 +576,16 @@ protected void onResume() {
super.onResume();
groupChatPresenter.addMessageReceiveListener(getResources().getString(R.string.group_message_listener), groupId, ownerId);
groupChatPresenter.addGroupEventListener("action_message", groupId, ownerId);
groupChatPresenter.refreshList(groupId,ownerId,LIMIT);
// groupChatPresenter.refreshList(groupId,ownerId,LIMIT);
groupChatPresenter.addCallListener("call_listener");
}

@Override
protected void onPause() {
super.onPause();
if (groupMessageAdapter!=null) {
groupMessageAdapter.stopPlayer();
}
if (groupMessageAdapter!=null) {
groupMessageAdapter.stopPlayer();
}
groupChatPresenter.removeMessageReceiveListener(getResources().getString(R.string.group_message_listener));
groupChatPresenter.removeMessageReceiveListener("action_message");
groupChatPresenter.removeCallListener("call_listener");
Expand DownExpand Up@@ -668,6 +676,7 @@ public void setAdapter(List<BaseMessage> messageList) {
}
if (groupMessageAdapter == null) {
groupMessageAdapter = new GroupMessageAdapter(messageList, context, groupId, ownerId);

messageRecyclerView.setAdapter(groupMessageAdapter);
decor = new StickyHeaderDecoration(groupMessageAdapter);
messageRecyclerView.addItemDecoration(decor, 0);
Expand DownExpand Up@@ -709,26 +718,26 @@ public void addReceivedMessage(BaseMessage baseMessage) {

@Override
public void typingStarted(TypingIndicator typingIndicator) {
toolbarSubTitle.setText(typingIndicator.getSender().getName()+" "+getString(R.string.is_typing));
toolbarSubTitle.setText(typingIndicator.getSender().getName()+" "+getString(R.string.is_typing));
}

@Override
public void typingEnded(TypingIndicator typingIndicator) {
toolbarSubTitle.setText(names);
toolbarSubTitle.setText(names);
}

@Override
public void setDeliveryReceipt(MessageReceipt messageReceipt) {
if (groupMessageAdapter!=null){
groupMessageAdapter.setDelivered(messageReceipt);
}
// if (groupMessageAdapter!=null){
// groupMessageAdapter.setDelivered(messageReceipt);
// }
}

@Override
public void onMessageRead(MessageReceipt messageReceipt) {
if (groupMessageAdapter!=null){
groupMessageAdapter.setRead(messageReceipt);
}
// if (groupMessageAdapter!=null){
// groupMessageAdapter.setRead(messageReceipt);
// }
}

@Override
Expand DownExpand Up@@ -991,4 +1000,4 @@ private void addAttachment(int type) {

}
}
}
}
Original file line numberDiff line numberDiff line change
Expand Up@@ -13,6 +13,8 @@
import com.inscripts.cometchatpulse.demo.R;
import com.inscripts.cometchatpulse.demo.Contracts.LoginActivityContract;
import com.inscripts.cometchatpulse.demo.Presenters.LoginAcitivityPresenter;
import com.inscripts.cometchatpulse.demo.Utils.CommonUtils;

import java.util.ArrayList;
import java.util.List;

Expand DownExpand Up@@ -92,6 +94,6 @@ private List<Option> getSampleUserList(){
public void startCometChatActivity() {

startActivity(new Intent(LoginActivity.this, CometChatActivity.class));
finish();
finish();
}
}
Loading