When TapTalk.io framework is integrated to your app with the UI/combine implementation method, you can customize chat room's navigation bar layout to your preferences.
Customize Chat Room Navigation Bar
You can follow the steps below to customize chat rooms' navigation bar layout in your app.
1. Create your custom navigation bar XML layout
<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize">
<!--Customize and add more layouts here-->
</android.support.constraint.ConstraintLayout>
2. Create your custom navigation bar fragment
Create a new fragment file inside your project folder, and set it to extend TapBaseChatRoomCustomNavigationBarFragment.
Then override onCreateView() and return your custom layout.
importio.taptalk.TapTalk.View.Fragment.TapBaseChatRoomCustomNavigationBarFragment;publicclassMeetTalkChatRoomNavigationBarFragmentextendsTapBaseChatRoomCustomNavigationBarFragment { @Nullable @OverridepublicViewonCreateView(@NonNullLayoutInflater inflater, @NullableViewGroup container, @NullableBundle savedInstanceState) {// Return your custom layoutreturninflater.inflate(R.layout.your_custom_navbar_layout, container,false); } @OverridepublicvoidonViewCreated(@NonNullView view, @NullableBundle savedInstanceState) { super.onViewCreated(view, savedInstanceState);// Setup your views here }}
3. Implement callbacks from base navigation fragment class to update UI
TapBaseChatRoomCustomNavigationBarFragment class is a helper fragment class that implements TapCoreChatRoomListener to listen to chat room related callbacks from PowerTalk SDK.
The class will then handle and redirect the callbacks to the following functions, which provide the required data that you can make use of for your own custom navbar class to display and update UI elements in the custom navigation bar.
You can override the callbacks functions from the TapBaseChatRoomCustomNavigationBarFragment class to your own custom navbar class:
importio.taptalk.TapTalk.View.Fragment.TapBaseChatRoomCustomNavigationBarFragment;importio.taptalk.TapTalk.Model.TAPMessageModel;importio.taptalk.TapTalk.Model.TAPOnlineStatusModel;importio.taptalk.TapTalk.Model.TAPRoomModel;importio.taptalk.TapTalk.Model.TAPUserModel;publicclassMeetTalkChatRoomNavigationBarFragmentextendsTapBaseChatRoomCustomNavigationBarFragment { @Nullable @OverridepublicViewonCreateView(@NonNullLayoutInflater inflater, @NullableViewGroup container, @NullableBundle savedInstanceState) {// Return your custom layoutreturninflater.inflate(R.layout.your_custom_navbar_layout, container,false); } @OverridepublicvoidonViewCreated(@NonNullView view, @NullableBundle savedInstanceState) { super.onViewCreated(view, savedInstanceState);// Setup your views here }// Override callback methods from TapBaseChatRoomCustomNavigationBarFragment below @OverridepublicvoidonReceiveUpdatedChatRoomData(TAPRoomModel room, @NullableTAPUserModel recipientUser,TAPOnlineStatusModel onlineStatus) {// This callback is called when PowerTalk SDK receives updated chat room data through server or socket// Here you can update the display of your custom view given the updated data// Please note that recipientUser's value could be null at some cirscumstances, such in a group room } @OverridepublicvoidonReceiveStartTyping(String roomID,TAPUserModel user) {// This callback is called when a participant in the current room starts typing// Here you can optionally show typing view in your custom navbar } @OverridepublicvoidonReceiveStopTyping(String roomID,TAPUserModel user) {// This callback is called when a participant in the current room stops typing// Here you can optionally hide typing view in your custom navbar } @OverridepublicvoidonReceiveOnlineStatus(TAPUserModel user,Boolean isOnline,Long lastActive) {// This callback is called when a participant's online status in the current room is updated// Here you can optionally update online status view in your custom navbar } @OverridepublicvoidonShowMessageSelection(List<TAPMessageModel> selectedMessages) {// This callback is called when user opens a multiple message selection in the chat room, such as selecting forward messages } @OverridepublicvoidonHideMessageSelection() { // This callback is called when multiple message selection in the chat room is closed }}
import io.taptalk.TapTalk.View.Fragment.TapBaseChatRoomCustomNavigationBarFragmentimport io.taptalk.TapTalk.Model.TAPMessageModelimport io.taptalk.TapTalk.Model.TAPOnlineStatusModelimport io.taptalk.TapTalk.Model.TAPRoomModelimport io.taptalk.TapTalk.Model.TAPUserModelclassMeetTalkChatRoomNavigationBarFragment : TapBaseChatRoomCustomNavigationBarFragment() {overridefunonCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {// Return your custom layoutreturn inflater.inflate(R.layout.your_custom_navbar_layout, container, false) }overridefunonViewCreated(view: View, savedInstanceState: Bundle?) {super.onViewCreated(view, savedInstanceState)// Setup your views here }// Override callback methods from TapBaseChatRoomCustomNavigationBarFragment belowoverridefunonReceiveUpdatedChatRoomData(room: TAPRoomModel?, recipientUser: TAPUserModel?, onlineStatus: TAPOnlineStatusModel?) {// This callback is called when PowerTalk SDK receives updated chat room data through server or socket// Here you can update the display of your custom view given the updated data// Please note that recipientUser's value could be null at some cirscumstances, such in a group room }overridefunonReceiveStartTyping(roomID: String, user: TAPUserModel) {// This callback is called when a participant in the current room starts typing// Here you can optionally show typing view in your custom navbar }overridefunonReceiveStopTyping(roomID: String, user: TAPUserModel) {// This callback is called when a participant in the current room stops typing// Here you can optionally hide typing view in your custom navbar }overridefunonReceiveOnlineStatus(user: TAPUserModel, isOnline: Boolean, lastActive: Long) {// This callback is called when a participant's online status in the current room is updated// Here you can optionally update online status view in your custom navbar }overridefunonShowMessageSelection(selectedMessages: List<TAPMessageModel>) {// This callback is called when user opens a multiple message selection in the chat room, such as selecting forward messages }overridefunonHideMessageSelection() {// This callback is called when multiple message selection in the chat room is closed }}
4. Make use of base navigation bar manager properties
TapBaseChatRoomCustomNavigationBarFragment also provides some properties that you can make use of to display UI elements in your custom navbar class.
You can call any of these properties provided below to help displaying your custom navbar.
// Room data of the currently open chat room
TAPRoomModel room;
// Other user's data in personal chat room
// Value could be null when currently active room is not personal
TAPUserModel recipientUser;
// Online status data of the recipient user
// Value could be null when currently active room is not personal
TAPOnlineStatusModel onlineStatus;
// Linked HashMap containing currently typing users in the chat room
LinkedHashMap<String, TAPUserModel> typingUsers;
The values of the properties above will also be updated when any related callbacks from PowerTalk SDK is received.
After you finished setting up your custom-made navigation bar, you will need to implement a listener from TapUI that will be invoked when the user opens a chat room. You can then return your custom navigation bar fragment through the callback function.
To do this, call the addChatRoomCustomNavigationBarListener method from TapUI class after you have initialized TapTalk. You can check the example below:
setCustomChatRoomNavigationBar callback from TapUIChatRoomCustomNavigationBarListener returns a TapBaseChatRoomCustomNavigationBarFragment as a value. If you do not implement this callback or return a null, PowerTalk SDK will display the default chat room navigation bar.