ChannelHeaderComponent
used in CustomChannelFragment
.
- */
-public class CustomChannelHeaderComponent extends ChannelHeaderComponent {
- private Toolbar toolbar;
- @Nullable
- private View.OnClickListener searchButtonClickListener;
-
- public CustomChannelHeaderComponent() {
- super();
- }
-
- @NonNull
- @Override
- public View onCreateView(@NonNull Context context, @NonNull LayoutInflater inflater, @NonNull ViewGroup parent, @Nullable Bundle args) {
- toolbar = new Toolbar(context);
- toolbar.setLayoutParams(new Toolbar.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, (int) context.getResources().getDimension(R.dimen.sb_size_56)));
- toolbar.setBackgroundColor(context.getResources().getColor(R.color.primary_300));
- toolbar.setTitleTextAppearance(context, R.style.SendbirdH1OnDark01);
- toolbar.setSubtitleTextAppearance(context, R.style.SendbirdCaption1OnDark02);
- toolbar.inflateMenu(R.menu.channel_menu);
- toolbar.setNavigationIcon(R.drawable.icon_arrow_left);
- toolbar.setNavigationOnClickListener(this::onLeftButtonClicked);
-
- toolbar.getMenu().findItem(R.id.action_settings)
- .getActionView().setOnClickListener(v -> {
- Logger.d("++ settings button clicked");
- onRightButtonClicked(v);
- });
-
- toolbar.getMenu().findItem(R.id.action_search)
- .getActionView().setOnClickListener(v -> {
- Logger.d("++ settings button clicked");
- if (searchButtonClickListener != null) searchButtonClickListener.onClick(v);
- });
- return toolbar;
- }
-
- @Override
- public void notifyChannelChanged(@NonNull GroupChannel channel) {
- toolbar.setTitle(channel.getName());
- }
-
- @Override
- public void notifyHeaderDescriptionChanged(@Nullable String description) {
- toolbar.setSubtitle(description);
- }
-
- public void setSearchButtonClickListener(@Nullable View.OnClickListener searchButtonClickListener) {
- this.searchButtonClickListener = searchButtonClickListener;
- }
-}
diff --git a/uikit-custom-sample/src/main/java/com/sendbird/uikit/customsample/groupchannel/components/CustomChannelListHeaderComponent.java b/uikit-custom-sample/src/main/java/com/sendbird/uikit/customsample/groupchannel/components/CustomChannelListHeaderComponent.java
deleted file mode 100644
index 87ea1354..00000000
--- a/uikit-custom-sample/src/main/java/com/sendbird/uikit/customsample/groupchannel/components/CustomChannelListHeaderComponent.java
+++ /dev/null
@@ -1,56 +0,0 @@
-package com.sendbird.uikit.customsample.groupchannel.components;
-
-import android.content.Context;
-import android.os.Bundle;
-import android.view.LayoutInflater;
-import android.view.View;
-import android.view.ViewGroup;
-
-import androidx.annotation.NonNull;
-import androidx.annotation.Nullable;
-import androidx.appcompat.widget.Toolbar;
-
-import com.sendbird.uikit.customsample.R;
-import com.sendbird.uikit.log.Logger;
-import com.sendbird.uikit.modules.components.HeaderComponent;
-
-/**
- * Implements the customized HeaderComponent
used in CustomChannelListFragment
.
- */
-public class CustomChannelListHeaderComponent extends HeaderComponent {
- @Nullable
- private View.OnClickListener settingsButtonClickListener;
-
- public CustomChannelListHeaderComponent() {
- super();
- }
-
- @NonNull
- @Override
- public View onCreateView(@NonNull Context context, @NonNull LayoutInflater inflater, @NonNull ViewGroup parent, @Nullable Bundle savedInstanceState) {
- Toolbar toolbar = new Toolbar(context);
- toolbar.setLayoutParams(new Toolbar.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, (int) context.getResources().getDimension(R.dimen.sb_size_56)));
- toolbar.setBackgroundColor(context.getResources().getColor(R.color.primary_300));
- toolbar.setTitle(R.string.sb_text_header_channel_list);
- toolbar.setTitleTextAppearance(context, R.style.SendbirdH1OnDark01);
- toolbar.inflateMenu(R.menu.channels_menu);
-
- toolbar.getMenu().findItem(R.id.action_create_channel)
- .getActionView().setOnClickListener(v -> {
- Logger.d("++ create button clicked");
- onRightButtonClicked(v);
- });
- toolbar.getMenu().findItem(R.id.action_settings)
- .getActionView().setOnClickListener(v -> {
- Logger.d("++ settings button clicked");
- if (settingsButtonClickListener != null) {
- settingsButtonClickListener.onClick(v);
- }
- });
- return toolbar;
- }
-
- public void setSettingsButtonClickListener(@Nullable View.OnClickListener settingsButtonClickListener) {
- this.settingsButtonClickListener = settingsButtonClickListener;
- }
-}
diff --git a/uikit-custom-sample/src/main/java/com/sendbird/uikit/customsample/groupchannel/components/CustomChannelSettingsHeaderComponent.java b/uikit-custom-sample/src/main/java/com/sendbird/uikit/customsample/groupchannel/components/CustomChannelSettingsHeaderComponent.java
deleted file mode 100644
index 8bb903f6..00000000
--- a/uikit-custom-sample/src/main/java/com/sendbird/uikit/customsample/groupchannel/components/CustomChannelSettingsHeaderComponent.java
+++ /dev/null
@@ -1,46 +0,0 @@
-package com.sendbird.uikit.customsample.groupchannel.components;
-
-import android.content.Context;
-import android.os.Bundle;
-import android.view.LayoutInflater;
-import android.view.View;
-import android.view.ViewGroup;
-
-import androidx.annotation.NonNull;
-import androidx.annotation.Nullable;
-import androidx.appcompat.widget.Toolbar;
-
-import com.sendbird.uikit.customsample.R;
-import com.sendbird.uikit.log.Logger;
-import com.sendbird.uikit.modules.components.ChannelSettingsHeaderComponent;
-
-/**
- * Implements the customized ChannelSettingsHeaderComponent
.
- */
-public class CustomChannelSettingsHeaderComponent extends ChannelSettingsHeaderComponent {
-
- public CustomChannelSettingsHeaderComponent() {
- super();
- }
-
- @NonNull
- @Override
- public View onCreateView(@NonNull Context context, @NonNull LayoutInflater inflater, @NonNull ViewGroup parent, @Nullable Bundle savedInstanceState) {
- Toolbar toolbar = new Toolbar(context);
- toolbar.setLayoutParams(new Toolbar.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, (int) context.getResources().getDimension(R.dimen.sb_size_56)));
- toolbar.setBackgroundColor(context.getResources().getColor(R.color.primary_300));
- toolbar.setTitleTextAppearance(context, R.style.SendbirdH1OnDark01);
- toolbar.setSubtitleTextAppearance(context, R.style.SendbirdCaption1OnDark02);
- toolbar.setTitle(R.string.sb_text_header_channel_settings);
- toolbar.inflateMenu(R.menu.channel_settings_menu);
- toolbar.setNavigationIcon(R.drawable.icon_arrow_left);
- toolbar.setNavigationOnClickListener(this::onLeftButtonClicked);
-
- toolbar.getMenu().findItem(R.id.action_edit)
- .getActionView().setOnClickListener(v -> {
- Logger.d("++ edit button clicked");
- onRightButtonClicked(v);
- });
- return toolbar;
- }
-}
diff --git a/uikit-custom-sample/src/main/java/com/sendbird/uikit/customsample/groupchannel/components/CustomChannelSettingsMenuComponent.java b/uikit-custom-sample/src/main/java/com/sendbird/uikit/customsample/groupchannel/components/CustomChannelSettingsMenuComponent.java
deleted file mode 100644
index 1d8f0da4..00000000
--- a/uikit-custom-sample/src/main/java/com/sendbird/uikit/customsample/groupchannel/components/CustomChannelSettingsMenuComponent.java
+++ /dev/null
@@ -1,55 +0,0 @@
-package com.sendbird.uikit.customsample.groupchannel.components;
-
-import android.app.AlertDialog;
-import android.content.Context;
-import android.os.Bundle;
-import android.view.LayoutInflater;
-import android.view.View;
-import android.view.ViewGroup;
-
-import androidx.annotation.NonNull;
-import androidx.annotation.Nullable;
-
-import com.sendbird.android.channel.GroupChannel;
-import com.sendbird.android.channel.Role;
-import com.sendbird.uikit.customsample.R;
-import com.sendbird.uikit.modules.components.ChannelSettingsMenuComponent;
-
-/**
- * Implements the customized ChannelSettingsMenuComponent
.
- */
-public class CustomChannelSettingsMenuComponent extends ChannelSettingsMenuComponent {
- private View view;
-
- public CustomChannelSettingsMenuComponent() {
- super();
- }
-
- @NonNull
- @Override
- public View onCreateView(@NonNull Context context, @NonNull LayoutInflater inflater, @NonNull ViewGroup parent, @Nullable Bundle savedInstanceState) {
- view = inflater.inflate(R.layout.view_custom_channel_settings_menu, parent, false);
- view.findViewById(R.id.tvModeration).setOnClickListener(v -> onMenuClicked(v, ChannelSettingsMenuComponent.Menu.MODERATIONS));
- view.findViewById(R.id.tvMemberList).setOnClickListener(v -> onMenuClicked(v, ChannelSettingsMenuComponent.Menu.MEMBERS));
- view.findViewById(R.id.tvLeaveChannel).setOnClickListener(this::showDeleteDialog);
- return view;
- }
-
- private void showDeleteDialog(@NonNull View v) {
- new AlertDialog.Builder(v.getContext())
- .setTitle(R.string.text_dialog_leave_channel_title)
- .setPositiveButton(R.string.sb_text_button_delete, (dialog, which) -> onMenuClicked(v, ChannelSettingsMenuComponent.Menu.LEAVE_CHANNEL))
- .setNegativeButton(R.string.sb_text_button_cancel, (dialog, which) -> dialog.dismiss())
- .show();
- }
-
- @Override
- public void notifyChannelChanged(@NonNull GroupChannel channel) {
- super.notifyChannelChanged(channel);
- if (channel.getMyRole() == Role.OPERATOR) {
- view.findViewById(R.id.moderationPanel).setVisibility(View.VISIBLE);
- } else {
- view.findViewById(R.id.moderationPanel).setVisibility(View.GONE);
- }
- }
-}
diff --git a/uikit-custom-sample/src/main/java/com/sendbird/uikit/customsample/groupchannel/components/CustomMessageInputComponent.java b/uikit-custom-sample/src/main/java/com/sendbird/uikit/customsample/groupchannel/components/CustomMessageInputComponent.java
deleted file mode 100644
index f900b26e..00000000
--- a/uikit-custom-sample/src/main/java/com/sendbird/uikit/customsample/groupchannel/components/CustomMessageInputComponent.java
+++ /dev/null
@@ -1,279 +0,0 @@
-package com.sendbird.uikit.customsample.groupchannel.components;
-
-import android.content.Context;
-import android.os.Bundle;
-import android.text.Editable;
-import android.text.TextUtils;
-import android.text.TextWatcher;
-import android.view.LayoutInflater;
-import android.view.View;
-import android.view.ViewGroup;
-import android.widget.CompoundButton;
-import android.widget.EditText;
-
-import androidx.annotation.NonNull;
-import androidx.annotation.Nullable;
-import androidx.appcompat.widget.AppCompatImageView;
-import androidx.recyclerview.widget.GridLayoutManager;
-import androidx.recyclerview.widget.RecyclerView;
-
-import com.bumptech.glide.Glide;
-import com.bumptech.glide.load.engine.DiskCacheStrategy;
-import com.sendbird.android.channel.GroupChannel;
-import com.sendbird.android.message.BaseMessage;
-import com.sendbird.android.message.Emoji;
-import com.sendbird.uikit.customsample.R;
-import com.sendbird.uikit.customsample.consts.StringSet;
-import com.sendbird.uikit.customsample.databinding.ViewCustomChannelInputBinding;
-import com.sendbird.uikit.interfaces.OnItemClickListener;
-import com.sendbird.uikit.model.EmojiManager;
-import com.sendbird.uikit.modules.components.MessageInputComponent;
-import com.sendbird.uikit.widgets.MessageInputView;
-
-import java.util.List;
-
-/**
- * Implements the customized MessageInputComponent
.
- */
-public class CustomMessageInputComponent extends MessageInputComponent {
- private final static String MODE_MENU = "MODE_MENU";
- private final static String MODE_EMOJI = "MODE_EMOJI";
- @Nullable
- private GroupChannel channel;
-
- private ViewCustomChannelInputBinding binding;
- @Nullable
- private CompoundButton.OnCheckedChangeListener highlightCheckedListener;
- @Nullable
- private View.OnClickListener menuCameraClickListener;
- @Nullable
- private View.OnClickListener menuPhotoClickListener;
- @Nullable
- private View.OnClickListener menuFileClickListener;
- @Nullable
- private OnItemClickListenerMessageSearchHeaderComponent
.
- */
-public class CustomMessageSearchHeaderComponent extends MessageSearchHeaderComponent {
- private EditText input;
- @Nullable
- private View.OnClickListener cancelButtonClickListener;
-
- public CustomMessageSearchHeaderComponent() {
- super();
- }
-
- @NonNull
- @Override
- public View onCreateView(@NonNull Context context, @NonNull LayoutInflater inflater, @NonNull ViewGroup parent, @Nullable Bundle savedInstanceState) {
- View view = inflater.inflate(R.layout.view_custom_message_search_header, parent, false);
- input = view.findViewById(R.id.etSearch);
- TextView cancel = view.findViewById(R.id.cancel);
-
- input.setOnKeyListener((v, keyCode, event) -> {
- if (event.getAction() == KeyEvent.ACTION_DOWN && keyCode == KeyEvent.KEYCODE_ENTER) {
- final String text = input.getText().toString();
- if (!TextUtils.isEmpty(text)) {
- onSearchRequested(input.getText().toString());
- }
- return true;
- }
- return false;
- });
- cancel.setOnClickListener(v -> {
- if (cancelButtonClickListener != null) cancelButtonClickListener.onClick(v);
- });
- return view;
- }
-
- public void setCancelButtonClickListener(@Nullable View.OnClickListener cancelButtonClickListener) {
- this.cancelButtonClickListener = cancelButtonClickListener;
- }
-}
diff --git a/uikit-custom-sample/src/main/java/com/sendbird/uikit/customsample/groupchannel/components/CustomModerationHeaderComponent.java b/uikit-custom-sample/src/main/java/com/sendbird/uikit/customsample/groupchannel/components/CustomModerationHeaderComponent.java
deleted file mode 100644
index b880842f..00000000
--- a/uikit-custom-sample/src/main/java/com/sendbird/uikit/customsample/groupchannel/components/CustomModerationHeaderComponent.java
+++ /dev/null
@@ -1,36 +0,0 @@
-package com.sendbird.uikit.customsample.groupchannel.components;
-
-import android.content.Context;
-import android.os.Bundle;
-import android.view.LayoutInflater;
-import android.view.View;
-import android.view.ViewGroup;
-
-import androidx.annotation.NonNull;
-import androidx.annotation.Nullable;
-import androidx.appcompat.widget.Toolbar;
-
-import com.sendbird.uikit.customsample.R;
-import com.sendbird.uikit.modules.components.HeaderComponent;
-
-/**
- * Implements the customized HeaderComponent
used in CustomModerationFragment
.
- */
-public class CustomModerationHeaderComponent extends HeaderComponent {
- public CustomModerationHeaderComponent() {
- super();
- }
-
- @NonNull
- @Override
- public View onCreateView(@NonNull Context context, @NonNull LayoutInflater inflater, @NonNull ViewGroup parent, @Nullable Bundle savedInstanceState) {
- Toolbar toolbar = new Toolbar(context);
- toolbar.setLayoutParams(new Toolbar.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, (int) context.getResources().getDimension(R.dimen.sb_size_56)));
- toolbar.setBackgroundColor(context.getResources().getColor(R.color.primary_300));
- toolbar.setTitle(R.string.sb_text_channel_settings_moderations);
- toolbar.setTitleTextAppearance(context, R.style.SendbirdH1OnDark01);
- toolbar.setNavigationIcon(R.drawable.icon_arrow_left);
- toolbar.setNavigationOnClickListener(this::onLeftButtonClicked);
- return toolbar;
- }
-}
diff --git a/uikit-custom-sample/src/main/java/com/sendbird/uikit/customsample/groupchannel/components/CustomModerationListComponent.java b/uikit-custom-sample/src/main/java/com/sendbird/uikit/customsample/groupchannel/components/CustomModerationListComponent.java
deleted file mode 100644
index 13ac550b..00000000
--- a/uikit-custom-sample/src/main/java/com/sendbird/uikit/customsample/groupchannel/components/CustomModerationListComponent.java
+++ /dev/null
@@ -1,49 +0,0 @@
-package com.sendbird.uikit.customsample.groupchannel.components;
-
-import android.content.Context;
-import android.os.Bundle;
-import android.view.LayoutInflater;
-import android.view.View;
-import android.view.ViewGroup;
-
-import androidx.annotation.NonNull;
-import androidx.annotation.Nullable;
-import androidx.appcompat.widget.SwitchCompat;
-import androidx.core.widget.NestedScrollView;
-
-import com.sendbird.android.channel.GroupChannel;
-import com.sendbird.uikit.customsample.R;
-import com.sendbird.uikit.modules.components.ModerationListComponent;
-
-/**
- * Implements the customized ModerationListComponent
.
- */
-public class CustomModerationListComponent extends ModerationListComponent {
- private View view;
-
- public CustomModerationListComponent() {
- super();
- }
-
- @Nullable
- @Override
- protected NestedScrollView getNestedScrollView() {
- return view.findViewById(R.id.scroll_layout);
- }
-
- @NonNull
- @Override
- public View onCreateView(@NonNull Context context, @NonNull LayoutInflater inflater, @NonNull ViewGroup parent, @Nullable Bundle savedInstanceState) {
- view = inflater.inflate(R.layout.view_custom_moderation_list, parent, false);
- view.findViewById(R.id.operators).setOnClickListener(v -> onMenuItemClicked(v, ModerationMenu.OPERATORS));
- view.findViewById(R.id.banned).setOnClickListener(v -> onMenuItemClicked(v, ModerationMenu.BANNED_MEMBERS));
- view.findViewById(R.id.muted).setOnClickListener(v -> onMenuItemClicked(v, ModerationMenu.MUTED_MEMBERS));
- view.findViewById(R.id.freeze).setOnClickListener(v -> onMenuItemClicked(v, ModerationMenu.FREEZE_CHANNEL));
- return view;
- }
-
- @Override
- public void notifyChannelChanged(@NonNull GroupChannel channel) {
- ((SwitchCompat) view.findViewById(R.id.freezeSwitch)).setChecked(channel.isFrozen());
- }
-}
diff --git a/uikit-custom-sample/src/main/java/com/sendbird/uikit/customsample/groupchannel/components/CustomSelectUserHeaderComponent.java b/uikit-custom-sample/src/main/java/com/sendbird/uikit/customsample/groupchannel/components/CustomSelectUserHeaderComponent.java
deleted file mode 100644
index 0767c8d5..00000000
--- a/uikit-custom-sample/src/main/java/com/sendbird/uikit/customsample/groupchannel/components/CustomSelectUserHeaderComponent.java
+++ /dev/null
@@ -1,61 +0,0 @@
-package com.sendbird.uikit.customsample.groupchannel.components;
-
-import android.content.Context;
-import android.os.Bundle;
-import android.view.LayoutInflater;
-import android.view.View;
-import android.view.ViewGroup;
-import android.widget.TextView;
-
-import androidx.annotation.NonNull;
-import androidx.annotation.Nullable;
-import androidx.appcompat.widget.Toolbar;
-
-import com.sendbird.uikit.customsample.R;
-import com.sendbird.uikit.log.Logger;
-import com.sendbird.uikit.modules.components.SelectUserHeaderComponent;
-
-/**
- * Implements the customized SelectUserHeaderComponent
.
- */
-public class CustomSelectUserHeaderComponent extends SelectUserHeaderComponent {
- private Toolbar toolbar;
-
- public CustomSelectUserHeaderComponent() {
- super();
- }
-
- @NonNull
- @Override
- public View onCreateView(@NonNull Context context, @NonNull LayoutInflater inflater, @NonNull ViewGroup parent, @Nullable Bundle savedInstanceState) {
- toolbar = new Toolbar(context);
- toolbar.setLayoutParams(new Toolbar.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, (int) context.getResources().getDimension(R.dimen.sb_size_56)));
- toolbar.setBackgroundColor(context.getResources().getColor(R.color.primary_300));
- toolbar.setTitleTextAppearance(context, R.style.SendbirdH1OnDark01);
- toolbar.setSubtitleTextAppearance(context, R.style.SendbirdCaption1OnDark02);
- toolbar.setTitle(getParams().getTitle());
- toolbar.inflateMenu(R.menu.select_user_menu);
- toolbar.setNavigationIcon(R.drawable.icon_arrow_left);
- toolbar.setNavigationOnClickListener(this::onLeftButtonClicked);
-
- toolbar.getMenu().findItem(R.id.action_select)
- .getActionView().setOnClickListener(v -> {
- Logger.d("++ select button clicked");
- onRightButtonClicked(v);
- });
- return toolbar;
- }
-
- @Override
- public void notifySelectedUserChanged(int count) {
- if (count > 0) {
- ((TextView) toolbar.getMenu().findItem(R.id.action_select)
- .getActionView().findViewById(R.id.tvSelect))
- .setText(String.format(toolbar.getContext().getString(R.string.text_select_count), count));
- } else {
- ((TextView) toolbar.getMenu().findItem(R.id.action_select)
- .getActionView().findViewById(R.id.tvSelect))
- .setText(R.string.sb_text_button_selected);
- }
- }
-}
diff --git a/uikit-custom-sample/src/main/java/com/sendbird/uikit/customsample/groupchannel/components/CustomUserTypedHeaderComponent.java b/uikit-custom-sample/src/main/java/com/sendbird/uikit/customsample/groupchannel/components/CustomUserTypedHeaderComponent.java
deleted file mode 100644
index fa9b1b99..00000000
--- a/uikit-custom-sample/src/main/java/com/sendbird/uikit/customsample/groupchannel/components/CustomUserTypedHeaderComponent.java
+++ /dev/null
@@ -1,47 +0,0 @@
-package com.sendbird.uikit.customsample.groupchannel.components;
-
-import android.content.Context;
-import android.os.Bundle;
-import android.view.LayoutInflater;
-import android.view.View;
-import android.view.ViewGroup;
-
-import androidx.annotation.NonNull;
-import androidx.annotation.Nullable;
-import androidx.appcompat.widget.AppCompatImageView;
-import androidx.appcompat.widget.Toolbar;
-
-import com.sendbird.uikit.customsample.R;
-import com.sendbird.uikit.log.Logger;
-import com.sendbird.uikit.modules.components.HeaderComponent;
-
-/**
- * Implements the customized HeaderComponent
used in the customized user typed fragments.
- */
-public class CustomUserTypedHeaderComponent extends HeaderComponent {
-
- public CustomUserTypedHeaderComponent() {
- super();
- }
-
- @NonNull
- @Override
- public View onCreateView(@NonNull Context context, @NonNull LayoutInflater inflater, @NonNull ViewGroup parent, @Nullable Bundle savedInstanceState) {
- Toolbar toolbar = new Toolbar(context);
- toolbar.setLayoutParams(new Toolbar.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, (int) context.getResources().getDimension(R.dimen.sb_size_56)));
- toolbar.setBackgroundColor(context.getResources().getColor(R.color.primary_300));
- toolbar.setTitle(getParams().getTitle());
- toolbar.setTitleTextAppearance(context, R.style.SendbirdH1OnDark01);
- toolbar.inflateMenu(R.menu.user_typed_menu);
- toolbar.setNavigationIcon(getParams().getLeftButtonIcon());
- toolbar.setNavigationOnClickListener(this::onLeftButtonClicked);
- ((AppCompatImageView) toolbar.getMenu().findItem(R.id.action_right)
- .getActionView().findViewById(R.id.rightIcon)).setImageDrawable(getParams().getRightButtonIcon());
- toolbar.getMenu().findItem(R.id.action_right)
- .getActionView().setOnClickListener(v -> {
- Logger.d("++ right button clicked");
- onRightButtonClicked(v);
- });
- return toolbar;
- }
-}
diff --git a/uikit-custom-sample/src/main/java/com/sendbird/uikit/customsample/groupchannel/components/adapters/CustomChannelListAdapter.java b/uikit-custom-sample/src/main/java/com/sendbird/uikit/customsample/groupchannel/components/adapters/CustomChannelListAdapter.java
deleted file mode 100644
index 22148f28..00000000
--- a/uikit-custom-sample/src/main/java/com/sendbird/uikit/customsample/groupchannel/components/adapters/CustomChannelListAdapter.java
+++ /dev/null
@@ -1,28 +0,0 @@
-package com.sendbird.uikit.customsample.groupchannel.components.adapters;
-
-import android.view.LayoutInflater;
-import android.view.ViewGroup;
-
-import androidx.annotation.NonNull;
-
-import com.sendbird.android.channel.GroupChannel;
-import com.sendbird.uikit.activities.adapter.ChannelListAdapter;
-import com.sendbird.uikit.activities.viewholder.BaseViewHolder;
-import com.sendbird.uikit.customsample.databinding.ViewCustomChannelHolderBinding;
-import com.sendbird.uikit.customsample.groupchannel.components.viewholders.CustomChannelViewHolder;
-
-/**
- * Implements the customized ChannelListAdapter
to adapt the customized channel list items.
- */
-public class CustomChannelListAdapter extends ChannelListAdapter {
- @NonNull
- @Override
- public BaseViewHolderCreateChannelUserListAdapter
to adapt the customized user list items.
- */
-public class CustomCreateChannelUserListAdapter extends CreateChannelUserListAdapter {
- @NonNull
- @Override
- public BaseViewHolderInviteUserListAdapter
to adapt the customized user list items.
- */
-public class CustomInviteUserListAdapter extends InviteUserListAdapter {
- @NonNull
- @Override
- public BaseViewHolderMemberListAdapter
to adapt the customized member list items.
- */
-public class CustomMemberListAdapter extends MemberListAdapter {
- private OnItemClickListenerMessageListAdapter
to adapt the customized message items.
- */
-public class CustomMessageListAdapter extends MessageListAdapter {
-
- public static final int VIEW_HIGHLIGHT_MESSAGE_ME_TYPE = 1001;
- public static final int VIEW_HIGHLIGHT_MESSAGE_OTHER_TYPE = 1002;
- public static final int VIEW_EMOJI_MESSAGE_ME_TYPE = 1003;
- public static final int VIEW_EMOJI_MESSAGE_OTHER_TYPE = 1004;
-
- public CustomMessageListAdapter(@NonNull GroupChannel channel, boolean useMessageGroupUI) {
- super(channel, useMessageGroupUI);
- }
-
- @NonNull
- @Override
- public MessageViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
- // TODO: Create the custom ViewHolder and return it.
- // Create your custom ViewHolder or call super.onCreateViewHolder() if you want to use the default.
- if (viewType == VIEW_HIGHLIGHT_MESSAGE_ME_TYPE) {
- LayoutInflater inflater = LayoutInflater.from(parent.getContext());
- return new HighlightMessageMeViewHolder(ViewHighlightMessageMeHolderBinding.inflate(inflater, parent, false));
- } else if (viewType == VIEW_HIGHLIGHT_MESSAGE_OTHER_TYPE) {
- LayoutInflater inflater = LayoutInflater.from(parent.getContext());
- return new HighlightMessageOtherViewHolder(ViewHighlightMessageOtherHolderBinding.inflate(inflater, parent, false));
- } else if (viewType == VIEW_EMOJI_MESSAGE_ME_TYPE) {
- LayoutInflater inflater = LayoutInflater.from(parent.getContext());
- return new EmojiMessageMeViewHolder(ViewEmojiMessageMeHolderBinding.inflate(inflater, parent, false));
- } else if (viewType == VIEW_EMOJI_MESSAGE_OTHER_TYPE) {
- LayoutInflater inflater = LayoutInflater.from(parent.getContext());
- return new EmojiMessageOtherViewHolder(ViewEmojiMessageOtherHolderBinding.inflate(inflater, parent, false));
- } else {
- return super.onCreateViewHolder(parent, viewType);
- }
- }
-
- @Override
- public void onBindViewHolder(@NonNull MessageViewHolder holder, int position) {
- // You must call the super. You can use methods that MessageViewHolder provides
- super.onBindViewHolder(holder, position);
- // TODO: Bind the custom ViewHolder
- }
-
- @Override
- public int getItemViewType(int position) {
- BaseMessage message = getItem(position);
-
- String customType = message.getCustomType();
-
- if (!TextUtils.isEmpty(customType) &&
- customType.equals(StringSet.emoji_type) &&
- message instanceof UserMessage) {
- if (MessageUtils.isMine(message)) {
- return VIEW_EMOJI_MESSAGE_ME_TYPE;
- } else {
- return VIEW_EMOJI_MESSAGE_OTHER_TYPE;
- }
- } else if (!TextUtils.isEmpty(customType) &&
- customType.equals(StringSet.highlight) &&
- message instanceof UserMessage) {
- if (MessageUtils.isMine(message)) {
- return VIEW_HIGHLIGHT_MESSAGE_ME_TYPE;
- } else {
- return VIEW_HIGHLIGHT_MESSAGE_OTHER_TYPE;
- }
- }
-
- return super.getItemViewType(position);
- }
-}
-
diff --git a/uikit-custom-sample/src/main/java/com/sendbird/uikit/customsample/groupchannel/components/adapters/CustomMessageSearchAdapter.java b/uikit-custom-sample/src/main/java/com/sendbird/uikit/customsample/groupchannel/components/adapters/CustomMessageSearchAdapter.java
deleted file mode 100644
index ac2454eb..00000000
--- a/uikit-custom-sample/src/main/java/com/sendbird/uikit/customsample/groupchannel/components/adapters/CustomMessageSearchAdapter.java
+++ /dev/null
@@ -1,72 +0,0 @@
-package com.sendbird.uikit.customsample.groupchannel.components.adapters;
-
-import static androidx.recyclerview.widget.RecyclerView.NO_POSITION;
-
-import android.text.format.DateUtils;
-import android.view.LayoutInflater;
-import android.view.View;
-import android.view.ViewGroup;
-import android.widget.TextView;
-
-import androidx.annotation.NonNull;
-import androidx.annotation.Nullable;
-
-import com.sendbird.android.message.BaseMessage;
-import com.sendbird.uikit.activities.adapter.MessageSearchAdapter;
-import com.sendbird.uikit.activities.viewholder.BaseViewHolder;
-import com.sendbird.uikit.customsample.R;
-import com.sendbird.uikit.interfaces.OnItemClickListener;
-
-/**
- * Implements the customized MessageSearchAdapter
to adapt the customized search list items.
- */
-public class CustomMessageSearchAdapter extends MessageSearchAdapter {
- @Nullable
- private OnItemClickListenerRegisterOperatorListAdapter
to adapt the register as operators list items.
- */
-public class CustomRegisterOperatorListAdapter extends RegisterOperatorListAdapter {
- @NonNull
- @Override
- public BaseViewHolderSuggestedMentionListAdapter
to adapt the suggested mention user list items.
- */
-public class CustomSuggestedMentionListAdapter extends SuggestedMentionListAdapter {
- @Nullable
- private OnItemClickListenerGroupChannel
.
- */
-public class CustomChannelViewHolder extends BaseViewHolderGroupChannel
.
- */
-public class EmojiMessageMeViewHolder extends GroupChannelMessageViewHolder {
- private final ViewEmojiMessageMeHolderBinding binding;
-
- public EmojiMessageMeViewHolder(@NonNull ViewEmojiMessageMeHolderBinding binding) {
- super(binding.getRoot());
- this.binding = binding;
- }
-
- @Override
- public void bind(@NonNull BaseChannel channel, @NonNull BaseMessage message, @NonNull MessageListUIParams params) {
- Context context = binding.getRoot().getContext();
- boolean sendingState = message.getSendingStatus() == SendingStatus.SUCCEEDED;
-
- binding.tvSentAt.setVisibility(sendingState ? View.VISIBLE : View.GONE);
- String sentAt = DateUtils.formatDateTime(context, message.getCreatedAt(), DateUtils.FORMAT_SHOW_TIME);
- binding.tvSentAt.setText(sentAt);
- DrawableUtils.drawStatus(binding.ivStatus, message);
- Glide.with(itemView)
- .load(message.getMessage())
- .circleCrop()
- .diskCacheStrategy(DiskCacheStrategy.ALL)
- .into(binding.ivEmoji);
-
- int paddingTop = context.getResources().getDimensionPixelSize(com.sendbird.uikit.R.dimen.sb_size_8);
- int paddingBottom = context.getResources().getDimensionPixelSize(com.sendbird.uikit.R.dimen.sb_size_8);
- binding.root.setPadding(binding.root.getPaddingLeft(), paddingTop, binding.root.getPaddingRight(), paddingBottom);
- }
-
- @Override
- public void setEmojiReaction(@NonNull ListGroupChannel
.
- */
-public class EmojiMessageOtherViewHolder extends GroupChannelMessageViewHolder {
- final private ViewEmojiMessageOtherHolderBinding binding;
-
- public EmojiMessageOtherViewHolder(@NonNull ViewEmojiMessageOtherHolderBinding binding) {
- super(binding.getRoot());
- this.binding = binding;
- }
-
- @Override
- public void bind(@NonNull BaseChannel channel, @NonNull BaseMessage message, @NonNull MessageListUIParams params) {
- Context context = binding.getRoot().getContext();
- boolean sendingState = message.getSendingStatus() == SendingStatus.SUCCEEDED;
- binding.tvSentAt.setVisibility(sendingState ? View.VISIBLE : View.GONE);
- String sentAt = DateUtils.formatDateTime(context, message.getCreatedAt(), DateUtils.FORMAT_SHOW_TIME);
- binding.tvSentAt.setText(sentAt);
-
- Sender sender = message.getSender();
- String nickname = sender == null || TextUtils.isEmpty(sender.getNickname()) ?
- context.getString(R.string.sb_text_channel_list_title_unknown) :
- sender.getNickname();
- binding.tvNickname.setText(nickname);
-
- String url = "";
- if (sender != null && !TextUtils.isEmpty(sender.getProfileUrl())) {
- url = sender.getProfileUrl();
- }
-
- Drawable errorIcon = DrawableUtils.createOvalIcon(binding.getRoot().getContext(),
- R.color.background_300, R.drawable.icon_user, R.color.ondark_01);
- Glide.with(context)
- .load(url)
- .diskCacheStrategy(DiskCacheStrategy.ALL)
- .error(errorIcon)
- .apply(RequestOptions.circleCropTransform())
- .into(binding.ivProfileView);
-
- Glide.with(itemView)
- .load(message.getMessage())
- .circleCrop()
- .diskCacheStrategy(DiskCacheStrategy.ALL)
- .into(binding.ivEmoji);
- }
-
- @NonNull
- @Override
- public MapGroupChannel
.
- */
-public class HighlightMessageMeViewHolder extends GroupChannelMessageViewHolder {
- private final ViewHighlightMessageMeHolderBinding binding;
-
- public HighlightMessageMeViewHolder(@NonNull ViewHighlightMessageMeHolderBinding binding) {
- super(binding.getRoot());
- this.binding = binding;
- }
-
- @Override
- public void bind(@NonNull BaseChannel channel, @NonNull BaseMessage message, @NonNull MessageListUIParams params) {
- Context context = binding.getRoot().getContext();
- boolean sendingState = message.getSendingStatus() == SendingStatus.SUCCEEDED;
-
- binding.tvSentAt.setVisibility(sendingState ? View.VISIBLE : View.GONE);
- String sentAt = DateUtils.formatDateTime(context, message.getCreatedAt(), DateUtils.FORMAT_SHOW_TIME);
- binding.tvSentAt.setText(sentAt);
- DrawableUtils.drawStatus(binding.ivStatus, message);
- binding.tvMessage.setText(message.getMessage());
-
- int paddingTop = context.getResources().getDimensionPixelSize(com.sendbird.uikit.R.dimen.sb_size_8);
- int paddingBottom = context.getResources().getDimensionPixelSize(com.sendbird.uikit.R.dimen.sb_size_8);
- binding.root.setPadding(binding.root.getPaddingLeft(), paddingTop, binding.root.getPaddingRight(), paddingBottom);
- }
-
- @NonNull
- @Override
- public MapGroupChannel
.
- */
-public class HighlightMessageOtherViewHolder extends GroupChannelMessageViewHolder {
- final private ViewHighlightMessageOtherHolderBinding binding;
-
- public HighlightMessageOtherViewHolder(@NonNull ViewHighlightMessageOtherHolderBinding binding) {
- super(binding.getRoot());
- this.binding = binding;
- }
-
- @Override
- public void bind(@NonNull BaseChannel channel, @NonNull BaseMessage message, @NonNull MessageListUIParams params) {
- Context context = binding.getRoot().getContext();
- boolean sendingState = message.getSendingStatus() == SendingStatus.SUCCEEDED;
- binding.tvSentAt.setVisibility(sendingState ? View.VISIBLE : View.GONE);
- String sentAt = DateUtils.formatDateTime(context, message.getCreatedAt(), DateUtils.FORMAT_SHOW_TIME);
- binding.tvSentAt.setText(sentAt);
-
- Sender sender = message.getSender();
- String nickname = sender == null || TextUtils.isEmpty(sender.getNickname()) ?
- context.getString(R.string.sb_text_channel_list_title_unknown) :
- sender.getNickname();
- binding.tvNickname.setText(nickname);
-
- String url = "";
- if (sender != null && !TextUtils.isEmpty(sender.getProfileUrl())) {
- url = sender.getProfileUrl();
- }
-
- Drawable errorIcon = DrawableUtils.createOvalIcon(binding.getRoot().getContext(),
- R.color.background_300, R.drawable.icon_user, R.color.ondark_01);
- Glide.with(context)
- .load(url)
- .diskCacheStrategy(DiskCacheStrategy.ALL)
- .error(errorIcon)
- .apply(RequestOptions.circleCropTransform())
- .into(binding.ivProfileView);
-
- binding.tvMessage.setText(message.getMessage());
- }
-
- @NonNull
- @Override
- public MapBannedUserListFragment
.
- */
-public class CustomBannedUserListFragment extends BannedUserListFragment {
- @NonNull
- @Override
- protected BannedUserListModule onCreateModule(@NonNull Bundle args) {
- BannedUserListModule module = super.onCreateModule(args);
- module.setHeaderComponent(new CustomUserTypedHeaderComponent());
- return module;
- }
-
- @Override
- protected void onConfigureParams(@NonNull BannedUserListModule module, @NonNull Bundle args) {
- super.onConfigureParams(module, args);
-
- HeaderComponent.Params headerParams = module.getHeaderComponent().getParams();
- if (isFragmentAlive()) {
- headerParams.setTitle(requireContext().getString(R.string.sb_text_menu_banned_users));
- headerParams.setLeftButtonIcon(ResourcesCompat.getDrawable(getResources(), R.drawable.icon_arrow_left, null));
- headerParams.setUseRightButton(false);
- }
- }
-}
diff --git a/uikit-custom-sample/src/main/java/com/sendbird/uikit/customsample/groupchannel/fragments/CustomChannelFragment.java b/uikit-custom-sample/src/main/java/com/sendbird/uikit/customsample/groupchannel/fragments/CustomChannelFragment.java
deleted file mode 100644
index 88d86bcc..00000000
--- a/uikit-custom-sample/src/main/java/com/sendbird/uikit/customsample/groupchannel/fragments/CustomChannelFragment.java
+++ /dev/null
@@ -1,118 +0,0 @@
-package com.sendbird.uikit.customsample.groupchannel.fragments;
-
-import android.os.Bundle;
-
-import androidx.annotation.NonNull;
-import androidx.annotation.Nullable;
-import androidx.lifecycle.ViewModelProvider;
-
-import com.sendbird.android.channel.GroupChannel;
-import com.sendbird.android.params.FileMessageCreateParams;
-import com.sendbird.android.params.UserMessageCreateParams;
-import com.sendbird.android.params.UserMessageUpdateParams;
-import com.sendbird.uikit.activities.MessageSearchActivity;
-import com.sendbird.uikit.consts.StringSet;
-import com.sendbird.uikit.customsample.groupchannel.components.CustomChannelHeaderComponent;
-import com.sendbird.uikit.customsample.groupchannel.components.CustomMessageInputComponent;
-import com.sendbird.uikit.customsample.groupchannel.components.adapters.CustomMessageListAdapter;
-import com.sendbird.uikit.customsample.groupchannel.components.adapters.CustomSuggestedMentionListAdapter;
-import com.sendbird.uikit.customsample.groupchannel.viewmodels.CustomChannelViewModel;
-import com.sendbird.uikit.customsample.groupchannel.viewmodels.ViewModelFactory;
-import com.sendbird.uikit.customsample.models.CustomMessageType;
-import com.sendbird.uikit.fragments.ChannelFragment;
-import com.sendbird.uikit.model.ReadyStatus;
-import com.sendbird.uikit.modules.ChannelModule;
-import com.sendbird.uikit.modules.components.ChannelHeaderComponent;
-import com.sendbird.uikit.modules.components.MessageInputComponent;
-import com.sendbird.uikit.vm.ChannelViewModel;
-import com.sendbird.uikit.widgets.MessageInputView;
-
-/**
- * Implements the customized ChannelFragment
.
- */
-public class CustomChannelFragment extends ChannelFragment {
- @NonNull
- private CustomMessageType customMessageType = CustomMessageType.NONE;
-
- @NonNull
- @Override
- protected ChannelModule onCreateModule(@NonNull Bundle args) {
- ChannelModule module = super.onCreateModule(args);
- module.setHeaderComponent(new CustomChannelHeaderComponent());
- module.setInputComponent(new CustomMessageInputComponent());
- return module;
- }
-
- @NonNull
- @Override
- protected ChannelViewModel onCreateViewModel() {
- final Bundle args = getArguments() == null ? new Bundle() : getArguments();
- final String channelUrl = args.getString(StringSet.KEY_CHANNEL_URL, "");
- return new ViewModelProvider(this, new ViewModelFactory(channelUrl)).get(channelUrl, CustomChannelViewModel.class);
- }
-
- @Override
- protected void onBeforeSendUserMessage(@NonNull UserMessageCreateParams params) {
- super.onBeforeSendUserMessage(params);
- params.setCustomType(customMessageType.getValue());
- }
-
- @Override
- protected void onBeforeSendFileMessage(@NonNull FileMessageCreateParams params) {
- super.onBeforeSendFileMessage(params);
- params.setCustomType(customMessageType.getValue());
- }
-
- @Override
- protected void onBeforeUpdateUserMessage(@NonNull UserMessageUpdateParams params) {
- super.onBeforeUpdateUserMessage(params);
- params.setCustomType(customMessageType.getValue());
- }
-
- @Override
- protected void onBeforeReady(@NonNull ReadyStatus status, @NonNull ChannelModule module, @NonNull ChannelViewModel viewModel) {
- super.onBeforeReady(status, module, viewModel);
-
- final GroupChannel channel = viewModel.getChannel();
- if (channel == null) return;
- module.getMessageListComponent().setAdapter(new CustomMessageListAdapter(channel, true));
- }
-
- @Override
- protected void onBindMessageInputComponent(@NonNull MessageInputComponent inputComponent, @NonNull ChannelViewModel viewModel, @Nullable GroupChannel channel) {
- super.onBindMessageInputComponent(inputComponent, viewModel, channel);
-
- if (inputComponent instanceof CustomMessageInputComponent) {
- CustomMessageInputComponent customInput = (CustomMessageInputComponent) getModule().getMessageInputComponent();
- customInput.setMenuCameraClickListener(v -> takeCamera());
- customInput.setMenuPhotoClickListener(v -> takePhoto());
- customInput.setMenuFileClickListener(v -> takeFile());
- customInput.setHighlightCheckedListener((buttonView, isChecked) ->
- customMessageType = isChecked ? CustomMessageType.HIGHLIGHT : CustomMessageType.NONE);
- customInput.setEmojiClickListener((view, position, url) -> {
- final UserMessageCreateParams params = new UserMessageCreateParams();
- params.setMessage(url);
- customMessageType = CustomMessageType.EMOJI;
- sendUserMessage(params);
- customInput.requestInputMode(MessageInputView.Mode.DEFAULT);
- customMessageType = CustomMessageType.NONE;
- });
- customInput.setUseSuggestedMentionListDivider(false);
- customInput.setSuggestedMentionListAdapter(new CustomSuggestedMentionListAdapter());
- }
- }
-
- @Override
- protected void onBindChannelHeaderComponent(@NonNull ChannelHeaderComponent headerComponent, @NonNull ChannelViewModel viewModel, @Nullable GroupChannel channel) {
- super.onBindChannelHeaderComponent(headerComponent, viewModel, channel);
-
- if (headerComponent instanceof CustomChannelHeaderComponent) {
- CustomChannelHeaderComponent customHeader = (CustomChannelHeaderComponent) getModule().getHeaderComponent();
- customHeader.setSearchButtonClickListener(v -> {
- if (isFragmentAlive() && channel != null) {
- startActivity(MessageSearchActivity.newIntent(requireContext(), channel.getUrl()));
- }
- });
- }
- }
-}
diff --git a/uikit-custom-sample/src/main/java/com/sendbird/uikit/customsample/groupchannel/fragments/CustomChannelListFragment.java b/uikit-custom-sample/src/main/java/com/sendbird/uikit/customsample/groupchannel/fragments/CustomChannelListFragment.java
deleted file mode 100644
index 5bdddff8..00000000
--- a/uikit-custom-sample/src/main/java/com/sendbird/uikit/customsample/groupchannel/fragments/CustomChannelListFragment.java
+++ /dev/null
@@ -1,113 +0,0 @@
-package com.sendbird.uikit.customsample.groupchannel.fragments;
-
-import android.app.AlertDialog;
-import android.os.Bundle;
-import android.widget.EditText;
-import android.widget.Toast;
-
-import androidx.annotation.NonNull;
-
-import com.sendbird.android.channel.GroupChannel;
-import com.sendbird.android.params.GroupChannelUpdateParams;
-import com.sendbird.uikit.customsample.R;
-import com.sendbird.uikit.customsample.groupchannel.GroupChannelMainActivity;
-import com.sendbird.uikit.customsample.groupchannel.components.CustomChannelListHeaderComponent;
-import com.sendbird.uikit.customsample.groupchannel.components.adapters.CustomChannelListAdapter;
-import com.sendbird.uikit.fragments.ChannelListFragment;
-import com.sendbird.uikit.model.ReadyStatus;
-import com.sendbird.uikit.modules.ChannelListModule;
-import com.sendbird.uikit.modules.components.ChannelListComponent;
-import com.sendbird.uikit.modules.components.HeaderComponent;
-import com.sendbird.uikit.vm.ChannelListViewModel;
-
-/**
- * Implements the customized ChannelListFragment
.
- */
-public class CustomChannelListFragment extends ChannelListFragment {
-
- @NonNull
- @Override
- protected ChannelListModule onCreateModule(@NonNull Bundle args) {
- ChannelListModule module = super.onCreateModule(args);
- module.setHeaderComponent(new CustomChannelListHeaderComponent());
- return module;
- }
-
- @Override
- protected void onConfigureParams(@NonNull ChannelListModule module, @NonNull Bundle args) {
- super.onConfigureParams(module, args);
- module.getParams().setUseHeader(true);
- }
-
- @Override
- protected void onBeforeReady(@NonNull ReadyStatus status, @NonNull ChannelListModule module, @NonNull ChannelListViewModel viewModel) {
- super.onBeforeReady(status, module, viewModel);
- module.getChannelListComponent().setAdapter(new CustomChannelListAdapter());
- module.getChannelListComponent().setOnItemLongClickListener((view, position, channel) -> showListContextMenu(channel));
- }
-
- private void showListContextMenu(@NonNull GroupChannel channel) {
- if (getContext() == null) return;
-
- AlertDialog.Builder builder = new AlertDialog.Builder(requireContext());
- CharSequence titleItem = getString(R.string.sb_text_channel_settings_change_channel_name);
- CharSequence leaveItem = getString(R.string.sb_text_channel_list_leave);
- final boolean isOff = channel.getMyPushTriggerOption() == GroupChannel.PushTriggerOption.OFF;
- CharSequence notificationItem = isOff ? getString(R.string.sb_text_channel_list_push_on) :
- getString(R.string.sb_text_channel_list_push_off);
- CharSequence[] items = {titleItem, leaveItem, notificationItem};
- builder.setItems(items, (dialog, which) -> {
- dialog.dismiss();
- if (which == 0) {
- showTitleChangeDialog(channel);
- } else if (which == 1) {
- getViewModel().leaveChannel(channel, e -> {
- if (e == null) return;
- Toast.makeText(requireContext(), R.string.sb_text_error_leave_channel, Toast.LENGTH_SHORT).show();
- });
- leaveChannel(channel);
- } else {
- getViewModel().setPushNotification(channel, isOff,
- e -> {
- if (e == null) return;
- int errorString = isOff ? R.string.sb_text_error_push_notification_on :
- R.string.sb_text_error_push_notification_off;
- Toast.makeText(requireContext(), errorString, Toast.LENGTH_SHORT).show();
- });
- }
- });
- builder.show();
- }
-
- private void showTitleChangeDialog(final GroupChannel channel) {
- final EditText input = new EditText(getContext());
- AlertDialog.Builder builder = new AlertDialog.Builder(requireContext());
- builder.setView(input)
- .setTitle(R.string.sb_text_channel_settings_change_channel_name)
- .setPositiveButton(R.string.text_confirm,
- (dialog, which) -> {
- final GroupChannelUpdateParams params = new GroupChannelUpdateParams();
- params.setName(input.getText().toString());
- channel.updateChannel(params, null);
- }
- );
- builder.show();
- }
-
- @Override
- protected void onBindHeaderComponent(@NonNull HeaderComponent headerComponent, @NonNull ChannelListViewModel viewModel) {
- super.onBindHeaderComponent(headerComponent, viewModel);
- ((CustomChannelListHeaderComponent) headerComponent).setSettingsButtonClickListener(v -> {
- if (getActivity() instanceof GroupChannelMainActivity) {
- ((GroupChannelMainActivity) getActivity()).moveToSettings();
- }
- });
- }
-
- @Override
- protected void onBindChannelListComponent(@NonNull ChannelListComponent channelListComponent, @NonNull ChannelListViewModel viewModel) {
- super.onBindChannelListComponent(channelListComponent, viewModel);
- channelListComponent.setOnItemLongClickListener((view, position, channel)
- -> showListContextMenu(channel));
- }
-}
diff --git a/uikit-custom-sample/src/main/java/com/sendbird/uikit/customsample/groupchannel/fragments/CustomChannelSettingsFragment.java b/uikit-custom-sample/src/main/java/com/sendbird/uikit/customsample/groupchannel/fragments/CustomChannelSettingsFragment.java
deleted file mode 100644
index e49f06c9..00000000
--- a/uikit-custom-sample/src/main/java/com/sendbird/uikit/customsample/groupchannel/fragments/CustomChannelSettingsFragment.java
+++ /dev/null
@@ -1,35 +0,0 @@
-package com.sendbird.uikit.customsample.groupchannel.fragments;
-
-import android.os.Bundle;
-
-import androidx.annotation.NonNull;
-
-import com.sendbird.uikit.customsample.groupchannel.components.CustomChannelSettingsHeaderComponent;
-import com.sendbird.uikit.customsample.groupchannel.components.CustomChannelSettingsMenuComponent;
-import com.sendbird.uikit.fragments.ChannelSettingsFragment;
-import com.sendbird.uikit.model.ReadyStatus;
-import com.sendbird.uikit.modules.ChannelSettingsModule;
-import com.sendbird.uikit.vm.ChannelSettingsViewModel;
-
-/**
- * Implements the customized ChannelSettingsFragment
.
- */
-public class CustomChannelSettingsFragment extends ChannelSettingsFragment {
- @NonNull
- @Override
- protected ChannelSettingsModule onCreateModule(@NonNull Bundle args) {
- ChannelSettingsModule module = super.onCreateModule(args);
- module.setHeaderComponent(new CustomChannelSettingsHeaderComponent());
- module.setChannelSettingsMenuComponent(new CustomChannelSettingsMenuComponent());
- return module;
- }
-
- @Override
- protected void onReady(@NonNull ReadyStatus status, @NonNull ChannelSettingsModule module, @NonNull ChannelSettingsViewModel viewModel) {
- super.onReady(status, module, viewModel);
-
- if (viewModel.getChannel() != null) {
- module.getChannelSettingsMenuComponent().notifyChannelChanged(viewModel.getChannel());
- }
- }
-}
diff --git a/uikit-custom-sample/src/main/java/com/sendbird/uikit/customsample/groupchannel/fragments/CustomCreateChannelFragment.java b/uikit-custom-sample/src/main/java/com/sendbird/uikit/customsample/groupchannel/fragments/CustomCreateChannelFragment.java
deleted file mode 100644
index ad53121c..00000000
--- a/uikit-custom-sample/src/main/java/com/sendbird/uikit/customsample/groupchannel/fragments/CustomCreateChannelFragment.java
+++ /dev/null
@@ -1,42 +0,0 @@
-package com.sendbird.uikit.customsample.groupchannel.fragments;
-
-import android.os.Bundle;
-
-import androidx.annotation.NonNull;
-
-import com.sendbird.uikit.customsample.R;
-import com.sendbird.uikit.customsample.groupchannel.components.CustomSelectUserHeaderComponent;
-import com.sendbird.uikit.customsample.groupchannel.components.adapters.CustomCreateChannelUserListAdapter;
-import com.sendbird.uikit.fragments.CreateChannelFragment;
-import com.sendbird.uikit.model.ReadyStatus;
-import com.sendbird.uikit.modules.CreateChannelModule;
-import com.sendbird.uikit.modules.components.SelectUserHeaderComponent;
-import com.sendbird.uikit.vm.CreateChannelViewModel;
-
-/**
- * Implements the customized CreateChannelFragment
.
- */
-public class CustomCreateChannelFragment extends CreateChannelFragment {
- @NonNull
- @Override
- protected CreateChannelModule onCreateModule(@NonNull Bundle args) {
- CreateChannelModule module = super.onCreateModule(args);
- module.setHeaderComponent(new CustomSelectUserHeaderComponent());
- return module;
- }
-
- @Override
- protected void onConfigureParams(@NonNull CreateChannelModule module, @NonNull Bundle args) {
- super.onConfigureParams(module, args);
- SelectUserHeaderComponent.Params headerParams = module.getHeaderComponent().getParams();
- if (isFragmentAlive()) {
- headerParams.setTitle(requireContext().getString(R.string.sb_text_header_create_channel));
- }
- }
-
- @Override
- protected void onBeforeReady(@NonNull ReadyStatus status, @NonNull CreateChannelModule module, @NonNull CreateChannelViewModel viewModel) {
- super.onBeforeReady(status, module, viewModel);
- module.getUserListComponent().setAdapter(new CustomCreateChannelUserListAdapter());
- }
-}
diff --git a/uikit-custom-sample/src/main/java/com/sendbird/uikit/customsample/groupchannel/fragments/CustomInviteUserFragment.java b/uikit-custom-sample/src/main/java/com/sendbird/uikit/customsample/groupchannel/fragments/CustomInviteUserFragment.java
deleted file mode 100644
index 5d0cbbbb..00000000
--- a/uikit-custom-sample/src/main/java/com/sendbird/uikit/customsample/groupchannel/fragments/CustomInviteUserFragment.java
+++ /dev/null
@@ -1,42 +0,0 @@
-package com.sendbird.uikit.customsample.groupchannel.fragments;
-
-import android.os.Bundle;
-
-import androidx.annotation.NonNull;
-
-import com.sendbird.uikit.customsample.R;
-import com.sendbird.uikit.customsample.groupchannel.components.CustomSelectUserHeaderComponent;
-import com.sendbird.uikit.customsample.groupchannel.components.adapters.CustomInviteUserListAdapter;
-import com.sendbird.uikit.fragments.InviteUserFragment;
-import com.sendbird.uikit.model.ReadyStatus;
-import com.sendbird.uikit.modules.InviteUserModule;
-import com.sendbird.uikit.modules.components.SelectUserHeaderComponent;
-import com.sendbird.uikit.vm.InviteUserViewModel;
-
-/**
- * Implements the customized InviteUserFragment
.
- */
-public class CustomInviteUserFragment extends InviteUserFragment {
- @NonNull
- @Override
- protected InviteUserModule onCreateModule(@NonNull Bundle args) {
- InviteUserModule module = super.onCreateModule(args);
- module.setHeaderComponent(new CustomSelectUserHeaderComponent());
- return module;
- }
-
- @Override
- protected void onConfigureParams(@NonNull InviteUserModule module, @NonNull Bundle args) {
- super.onConfigureParams(module, args);
- SelectUserHeaderComponent.Params headerParams = module.getHeaderComponent().getParams();
- if (isFragmentAlive()) {
- headerParams.setTitle(requireContext().getString(R.string.sb_text_header_invite_member));
- }
- }
-
- @Override
- protected void onBeforeReady(@NonNull ReadyStatus status, @NonNull InviteUserModule module, @NonNull InviteUserViewModel viewModel) {
- super.onBeforeReady(status, module, viewModel);
- module.getInviteUserListComponent().setAdapter(new CustomInviteUserListAdapter());
- }
-}
diff --git a/uikit-custom-sample/src/main/java/com/sendbird/uikit/customsample/groupchannel/fragments/CustomMemberListFragment.java b/uikit-custom-sample/src/main/java/com/sendbird/uikit/customsample/groupchannel/fragments/CustomMemberListFragment.java
deleted file mode 100644
index a55b160c..00000000
--- a/uikit-custom-sample/src/main/java/com/sendbird/uikit/customsample/groupchannel/fragments/CustomMemberListFragment.java
+++ /dev/null
@@ -1,45 +0,0 @@
-package com.sendbird.uikit.customsample.groupchannel.fragments;
-
-import android.os.Bundle;
-
-import androidx.annotation.NonNull;
-import androidx.core.content.res.ResourcesCompat;
-
-import com.sendbird.uikit.customsample.R;
-import com.sendbird.uikit.customsample.groupchannel.components.CustomUserTypedHeaderComponent;
-import com.sendbird.uikit.customsample.groupchannel.components.adapters.CustomMemberListAdapter;
-import com.sendbird.uikit.fragments.MemberListFragment;
-import com.sendbird.uikit.model.ReadyStatus;
-import com.sendbird.uikit.modules.MemberListModule;
-import com.sendbird.uikit.modules.components.HeaderComponent;
-import com.sendbird.uikit.vm.MemberListViewModel;
-
-/**
- * Implements the customized MemberListFragment
.
- */
-public class CustomMemberListFragment extends MemberListFragment {
- @NonNull
- @Override
- protected MemberListModule onCreateModule(@NonNull Bundle args) {
- MemberListModule module = super.onCreateModule(args);
- module.setHeaderComponent(new CustomUserTypedHeaderComponent());
- return module;
- }
-
- @Override
- protected void onConfigureParams(@NonNull MemberListModule module, @NonNull Bundle args) {
- super.onConfigureParams(module, args);
- HeaderComponent.Params headerParams = module.getHeaderComponent().getParams();
- if (isFragmentAlive()) {
- headerParams.setTitle(requireContext().getString(R.string.sb_text_header_member_list));
- headerParams.setLeftButtonIcon(ResourcesCompat.getDrawable(getResources(), R.drawable.icon_arrow_left, null));
- headerParams.setRightButtonIcon(ResourcesCompat.getDrawable(getResources(), R.drawable.icon_plus, null));
- }
- }
-
- @Override
- protected void onBeforeReady(@NonNull ReadyStatus status, @NonNull MemberListModule module, @NonNull MemberListViewModel viewModel) {
- super.onBeforeReady(status, module, viewModel);
- module.getMemberListComponent().setAdapter(new CustomMemberListAdapter());
- }
-}
diff --git a/uikit-custom-sample/src/main/java/com/sendbird/uikit/customsample/groupchannel/fragments/CustomMessageSearchFragment.java b/uikit-custom-sample/src/main/java/com/sendbird/uikit/customsample/groupchannel/fragments/CustomMessageSearchFragment.java
deleted file mode 100644
index 143d041e..00000000
--- a/uikit-custom-sample/src/main/java/com/sendbird/uikit/customsample/groupchannel/fragments/CustomMessageSearchFragment.java
+++ /dev/null
@@ -1,48 +0,0 @@
-package com.sendbird.uikit.customsample.groupchannel.fragments;
-
-import android.os.Bundle;
-
-import androidx.annotation.NonNull;
-import androidx.annotation.Nullable;
-
-import com.sendbird.android.channel.GroupChannel;
-import com.sendbird.uikit.customsample.groupchannel.components.CustomMessageSearchHeaderComponent;
-import com.sendbird.uikit.customsample.groupchannel.components.adapters.CustomMessageSearchAdapter;
-import com.sendbird.uikit.fragments.MessageSearchFragment;
-import com.sendbird.uikit.model.ReadyStatus;
-import com.sendbird.uikit.modules.MessageSearchModule;
-import com.sendbird.uikit.modules.components.MessageSearchHeaderComponent;
-import com.sendbird.uikit.vm.MessageSearchViewModel;
-
-/**
- * Implements the customized MessageSearchFragment
.
- */
-public class CustomMessageSearchFragment extends MessageSearchFragment {
- @NonNull
- @Override
- protected MessageSearchModule onCreateModule(@NonNull Bundle args) {
- MessageSearchModule module = super.onCreateModule(args);
- module.setHeaderComponent(new CustomMessageSearchHeaderComponent());
- return module;
- }
-
- @Override
- protected void onConfigureParams(@NonNull MessageSearchModule module, @NonNull Bundle args) {
- super.onConfigureParams(module, args);
- }
-
- @Override
- protected void onBindHeaderComponent(@NonNull MessageSearchHeaderComponent headerComponent, @NonNull MessageSearchViewModel viewModel, @Nullable GroupChannel channel) {
- super.onBindHeaderComponent(headerComponent, viewModel, channel);
- if (headerComponent instanceof CustomMessageSearchHeaderComponent) {
- CustomMessageSearchHeaderComponent customHeader = (CustomMessageSearchHeaderComponent) getModule().getHeaderComponent();
- customHeader.setCancelButtonClickListener(v -> shouldActivityFinish());
- }
- }
-
- @Override
- protected void onBeforeReady(@NonNull ReadyStatus status, @NonNull MessageSearchModule module, @NonNull MessageSearchViewModel viewModel) {
- super.onBeforeReady(status, module, viewModel);
- module.getMessageListComponent().setAdapter(new CustomMessageSearchAdapter());
- }
-}
diff --git a/uikit-custom-sample/src/main/java/com/sendbird/uikit/customsample/groupchannel/fragments/CustomModerationFragment.java b/uikit-custom-sample/src/main/java/com/sendbird/uikit/customsample/groupchannel/fragments/CustomModerationFragment.java
deleted file mode 100644
index 2e92e655..00000000
--- a/uikit-custom-sample/src/main/java/com/sendbird/uikit/customsample/groupchannel/fragments/CustomModerationFragment.java
+++ /dev/null
@@ -1,24 +0,0 @@
-package com.sendbird.uikit.customsample.groupchannel.fragments;
-
-import android.os.Bundle;
-
-import androidx.annotation.NonNull;
-
-import com.sendbird.uikit.customsample.groupchannel.components.CustomModerationHeaderComponent;
-import com.sendbird.uikit.customsample.groupchannel.components.CustomModerationListComponent;
-import com.sendbird.uikit.fragments.ModerationFragment;
-import com.sendbird.uikit.modules.ModerationModule;
-
-/**
- * Implements the customized ModerationFragment
.
- */
-public class CustomModerationFragment extends ModerationFragment {
- @NonNull
- @Override
- protected ModerationModule onCreateModule(@NonNull Bundle args) {
- ModerationModule module = super.onCreateModule(args);
- module.setHeaderComponent(new CustomModerationHeaderComponent());
- module.setModerationListComponent(new CustomModerationListComponent());
- return module;
- }
-}
diff --git a/uikit-custom-sample/src/main/java/com/sendbird/uikit/customsample/groupchannel/fragments/CustomMutedMemberListFragment.java b/uikit-custom-sample/src/main/java/com/sendbird/uikit/customsample/groupchannel/fragments/CustomMutedMemberListFragment.java
deleted file mode 100644
index bc963034..00000000
--- a/uikit-custom-sample/src/main/java/com/sendbird/uikit/customsample/groupchannel/fragments/CustomMutedMemberListFragment.java
+++ /dev/null
@@ -1,36 +0,0 @@
-package com.sendbird.uikit.customsample.groupchannel.fragments;
-
-import android.os.Bundle;
-
-import androidx.annotation.NonNull;
-import androidx.core.content.res.ResourcesCompat;
-
-import com.sendbird.uikit.customsample.R;
-import com.sendbird.uikit.customsample.groupchannel.components.CustomUserTypedHeaderComponent;
-import com.sendbird.uikit.fragments.MutedMemberListFragment;
-import com.sendbird.uikit.modules.MutedMemberListModule;
-import com.sendbird.uikit.modules.components.HeaderComponent;
-
-/**
- * Implements the customized MutedMemberListFragment
.
- */
-public class CustomMutedMemberListFragment extends MutedMemberListFragment {
- @NonNull
- @Override
- protected MutedMemberListModule onCreateModule(@NonNull Bundle args) {
- MutedMemberListModule module = super.onCreateModule(args);
- module.setHeaderComponent(new CustomUserTypedHeaderComponent());
- return module;
- }
-
- @Override
- protected void onConfigureParams(@NonNull MutedMemberListModule module, @NonNull Bundle args) {
- super.onConfigureParams(module, args);
- HeaderComponent.Params headerParams = module.getHeaderComponent().getParams();
- if (isFragmentAlive()) {
- headerParams.setTitle(requireContext().getString(R.string.sb_text_header_member_list));
- headerParams.setLeftButtonIcon(ResourcesCompat.getDrawable(getResources(), R.drawable.icon_arrow_left, null));
- headerParams.setUseRightButton(false);
- }
- }
-}
diff --git a/uikit-custom-sample/src/main/java/com/sendbird/uikit/customsample/groupchannel/fragments/CustomOperatorListFragment.java b/uikit-custom-sample/src/main/java/com/sendbird/uikit/customsample/groupchannel/fragments/CustomOperatorListFragment.java
deleted file mode 100644
index 71c93f6e..00000000
--- a/uikit-custom-sample/src/main/java/com/sendbird/uikit/customsample/groupchannel/fragments/CustomOperatorListFragment.java
+++ /dev/null
@@ -1,36 +0,0 @@
-package com.sendbird.uikit.customsample.groupchannel.fragments;
-
-import android.os.Bundle;
-
-import androidx.annotation.NonNull;
-import androidx.core.content.res.ResourcesCompat;
-
-import com.sendbird.uikit.customsample.R;
-import com.sendbird.uikit.customsample.groupchannel.components.CustomUserTypedHeaderComponent;
-import com.sendbird.uikit.fragments.OperatorListFragment;
-import com.sendbird.uikit.modules.OperatorListModule;
-import com.sendbird.uikit.modules.components.HeaderComponent;
-
-/**
- * Implements the customized OperatorListFragment
.
- */
-public class CustomOperatorListFragment extends OperatorListFragment {
- @NonNull
- @Override
- protected OperatorListModule onCreateModule(@NonNull Bundle args) {
- OperatorListModule module = super.onCreateModule(args);
- module.setHeaderComponent(new CustomUserTypedHeaderComponent());
- return module;
- }
-
- @Override
- protected void onConfigureParams(@NonNull OperatorListModule module, @NonNull Bundle args) {
- super.onConfigureParams(module, args);
- HeaderComponent.Params headerParams = module.getHeaderComponent().getParams();
- if (isFragmentAlive()) {
- headerParams.setTitle(requireContext().getString(R.string.sb_text_menu_operators));
- headerParams.setLeftButtonIcon(ResourcesCompat.getDrawable(getResources(), R.drawable.icon_arrow_left, null));
- headerParams.setRightButtonIcon(ResourcesCompat.getDrawable(getResources(), R.drawable.icon_plus, null));
- }
- }
-}
diff --git a/uikit-custom-sample/src/main/java/com/sendbird/uikit/customsample/groupchannel/fragments/CustomParticipantListFragment.java b/uikit-custom-sample/src/main/java/com/sendbird/uikit/customsample/groupchannel/fragments/CustomParticipantListFragment.java
deleted file mode 100644
index d64ffa88..00000000
--- a/uikit-custom-sample/src/main/java/com/sendbird/uikit/customsample/groupchannel/fragments/CustomParticipantListFragment.java
+++ /dev/null
@@ -1,36 +0,0 @@
-package com.sendbird.uikit.customsample.groupchannel.fragments;
-
-import android.os.Bundle;
-
-import androidx.annotation.NonNull;
-import androidx.core.content.res.ResourcesCompat;
-
-import com.sendbird.uikit.customsample.R;
-import com.sendbird.uikit.customsample.groupchannel.components.CustomUserTypedHeaderComponent;
-import com.sendbird.uikit.fragments.ParticipantListFragment;
-import com.sendbird.uikit.modules.ParticipantListModule;
-import com.sendbird.uikit.modules.components.HeaderComponent;
-
-/**
- * Implements the customized ParticipantListFragment
.
- */
-public class CustomParticipantListFragment extends ParticipantListFragment {
- @NonNull
- @Override
- protected ParticipantListModule onCreateModule(@NonNull Bundle args) {
- ParticipantListModule module = super.onCreateModule(args);
- module.setHeaderComponent(new CustomUserTypedHeaderComponent());
- return module;
- }
-
- @Override
- protected void onConfigureParams(@NonNull ParticipantListModule module, @NonNull Bundle args) {
- super.onConfigureParams(module, args);
- HeaderComponent.Params headerParams = module.getHeaderComponent().getParams();
- if (isFragmentAlive()) {
- headerParams.setTitle(requireContext().getString(R.string.sb_text_header_participants));
- headerParams.setLeftButtonIcon(ResourcesCompat.getDrawable(getResources(), R.drawable.icon_arrow_left, null));
- headerParams.setUseRightButton(false);
- }
- }
-}
diff --git a/uikit-custom-sample/src/main/java/com/sendbird/uikit/customsample/groupchannel/fragments/CustomRegisterOperatorFragment.java b/uikit-custom-sample/src/main/java/com/sendbird/uikit/customsample/groupchannel/fragments/CustomRegisterOperatorFragment.java
deleted file mode 100644
index f6f2a5cd..00000000
--- a/uikit-custom-sample/src/main/java/com/sendbird/uikit/customsample/groupchannel/fragments/CustomRegisterOperatorFragment.java
+++ /dev/null
@@ -1,42 +0,0 @@
-package com.sendbird.uikit.customsample.groupchannel.fragments;
-
-import android.os.Bundle;
-
-import androidx.annotation.NonNull;
-
-import com.sendbird.uikit.customsample.R;
-import com.sendbird.uikit.customsample.groupchannel.components.CustomSelectUserHeaderComponent;
-import com.sendbird.uikit.customsample.groupchannel.components.adapters.CustomRegisterOperatorListAdapter;
-import com.sendbird.uikit.fragments.RegisterOperatorFragment;
-import com.sendbird.uikit.model.ReadyStatus;
-import com.sendbird.uikit.modules.RegisterOperatorModule;
-import com.sendbird.uikit.modules.components.SelectUserHeaderComponent;
-import com.sendbird.uikit.vm.RegisterOperatorViewModel;
-
-/**
- * Implements the customized RegisterOperatorFragment
.
- */
-public class CustomRegisterOperatorFragment extends RegisterOperatorFragment {
- @NonNull
- @Override
- protected RegisterOperatorModule onCreateModule(@NonNull Bundle args) {
- RegisterOperatorModule module = super.onCreateModule(args);
- module.setHeaderComponent(new CustomSelectUserHeaderComponent());
- return module;
- }
-
- @Override
- protected void onConfigureParams(@NonNull RegisterOperatorModule module, @NonNull Bundle args) {
- super.onConfigureParams(module, args);
- SelectUserHeaderComponent.Params headerParams = module.getHeaderComponent().getParams();
- if (isFragmentAlive()) {
- headerParams.setTitle(requireContext().getString(R.string.sb_text_header_set_operators));
- }
- }
-
- @Override
- protected void onBeforeReady(@NonNull ReadyStatus status, @NonNull RegisterOperatorModule module, @NonNull RegisterOperatorViewModel viewModel) {
- super.onBeforeReady(status, module, viewModel);
- module.getRegisterOperatorListComponent().setAdapter(new CustomRegisterOperatorListAdapter());
- }
-}
diff --git a/uikit-custom-sample/src/main/java/com/sendbird/uikit/customsample/groupchannel/viewmodels/CustomChannelViewModel.java b/uikit-custom-sample/src/main/java/com/sendbird/uikit/customsample/groupchannel/viewmodels/CustomChannelViewModel.java
deleted file mode 100644
index 40b24838..00000000
--- a/uikit-custom-sample/src/main/java/com/sendbird/uikit/customsample/groupchannel/viewmodels/CustomChannelViewModel.java
+++ /dev/null
@@ -1,32 +0,0 @@
-package com.sendbird.uikit.customsample.groupchannel.viewmodels;
-
-import androidx.annotation.NonNull;
-import androidx.annotation.Nullable;
-
-import com.sendbird.android.params.MessageListParams;
-import com.sendbird.uikit.customsample.models.CustomMessageType;
-import com.sendbird.uikit.vm.ChannelViewModel;
-
-import java.util.ArrayList;
-import java.util.List;
-
-/**
- * Implements the customized ChannelViewModel
to manage data related to the GroupChannel
.
- */
-public class CustomChannelViewModel extends ChannelViewModel {
- public CustomChannelViewModel(@NonNull String channelUrl, @Nullable MessageListParams messageListParams) {
- super(channelUrl, messageListParams);
- }
-
- @NonNull
- @Override
- public MessageListParams createMessageListParams() {
- final MessageListParams params = super.createMessageListParams();
- final ListViewModel
s.
- */
-public class ViewModelFactory extends ViewModelProvider.NewInstanceFactory {
- private final Object[] params;
-
- public ViewModelFactory(@NonNull Object... params) {
- this.params = params;
- }
-
- @SuppressWarnings("unchecked")
- @NonNull
- @Override
- public OpenChannelMessageListAdapter
to adapt the customized message items.
- */
-public class CustomOpenChannelMessageListAdapter extends OpenChannelMessageListAdapter {
-
- public static final int VIEW_MAP_MESSAGE_ME_TYPE = 1001;
- public static final int VIEW_MAP_MESSAGE_OTHER_TYPE = 1002;
-
- public CustomOpenChannelMessageListAdapter(@NonNull OpenChannel channel, boolean useMessageGroupUI) {
- super(channel, useMessageGroupUI);
- }
-
- @NonNull
- @Override
- public MessageViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
- // TODO: Create the custom ViewHolder and return it.
- // Create your custom ViewHolder or call super.onCreateViewHolder() if you want to use the default.
- if (viewType == VIEW_MAP_MESSAGE_ME_TYPE || viewType == VIEW_MAP_MESSAGE_OTHER_TYPE) {
- LayoutInflater inflater = LayoutInflater.from(parent.getContext());
- return new HighlightOpenChannelMessageViewHolder(ViewOpenChannelHighlightMessageHolderBinding.inflate(inflater, parent, false));
- } else {
- return super.onCreateViewHolder(parent, viewType);
- }
- }
-
- @Override
- public void onBindViewHolder(@NonNull MessageViewHolder holder, int position) {
- // You must call the super. You can use methods that MessageViewHolder provides
- super.onBindViewHolder(holder, position);
- // TODO: Bind the custom ViewHolder
- }
-
- @Override
- public int getItemViewType(int position) {
- BaseMessage message = getItem(position);
-
- String customType = message.getCustomType();
-
- if (!TextUtils.isEmpty(customType) &&
- customType.equals(StringSet.highlight) &&
- message instanceof UserMessage) {
- if (MessageUtils.isMine(message)) {
- return VIEW_MAP_MESSAGE_ME_TYPE;
- } else {
- return VIEW_MAP_MESSAGE_OTHER_TYPE;
- }
- }
-
- return super.getItemViewType(position);
- }
-}
-
diff --git a/uikit-custom-sample/src/main/java/com/sendbird/uikit/customsample/openchannel/CustomOpenChannelSettingsFragment.java b/uikit-custom-sample/src/main/java/com/sendbird/uikit/customsample/openchannel/CustomOpenChannelSettingsFragment.java
deleted file mode 100644
index 0fdfd6d6..00000000
--- a/uikit-custom-sample/src/main/java/com/sendbird/uikit/customsample/openchannel/CustomOpenChannelSettingsFragment.java
+++ /dev/null
@@ -1,20 +0,0 @@
-package com.sendbird.uikit.customsample.openchannel;
-
-import android.os.Bundle;
-
-import androidx.annotation.NonNull;
-
-import com.sendbird.uikit.customsample.R;
-import com.sendbird.uikit.fragments.OpenChannelSettingsFragment;
-import com.sendbird.uikit.modules.OpenChannelSettingsModule;
-
-/**
- * Implements the customized OpenChannelSettingsFragment
- */
-public class CustomOpenChannelSettingsFragment extends OpenChannelSettingsFragment {
- @NonNull
- @Override
- protected OpenChannelSettingsModule onCreateModule(@NonNull Bundle args) {
- return new OpenChannelSettingsModule(requireContext(), new OpenChannelSettingsModule.Params(requireContext(), R.style.AppThemeCustom_Sendbird));
- }
-}
diff --git a/uikit-custom-sample/src/main/java/com/sendbird/uikit/customsample/openchannel/HighlightOpenChannelMessageViewHolder.java b/uikit-custom-sample/src/main/java/com/sendbird/uikit/customsample/openchannel/HighlightOpenChannelMessageViewHolder.java
deleted file mode 100644
index f2cc46b0..00000000
--- a/uikit-custom-sample/src/main/java/com/sendbird/uikit/customsample/openchannel/HighlightOpenChannelMessageViewHolder.java
+++ /dev/null
@@ -1,104 +0,0 @@
-package com.sendbird.uikit.customsample.openchannel;
-
-import android.content.Context;
-import android.content.res.TypedArray;
-import android.graphics.drawable.Drawable;
-import android.text.TextUtils;
-import android.text.format.DateUtils;
-import android.view.View;
-
-import androidx.annotation.NonNull;
-
-import com.bumptech.glide.Glide;
-import com.bumptech.glide.load.engine.DiskCacheStrategy;
-import com.bumptech.glide.request.RequestOptions;
-import com.sendbird.android.channel.BaseChannel;
-import com.sendbird.android.channel.OpenChannel;
-import com.sendbird.android.message.BaseMessage;
-import com.sendbird.android.user.Sender;
-import com.sendbird.uikit.activities.viewholder.MessageViewHolder;
-import com.sendbird.uikit.consts.ClickableViewIdentifier;
-import com.sendbird.uikit.customsample.R;
-import com.sendbird.uikit.customsample.databinding.ViewOpenChannelHighlightMessageHolderBinding;
-import com.sendbird.uikit.customsample.utils.DrawableUtils;
-import com.sendbird.uikit.model.MessageListUIParams;
-
-import java.util.Map;
-import java.util.concurrent.ConcurrentHashMap;
-
-/**
- * ViewHolder to draw the highlight message for OpenChannel
.
- */
-public class HighlightOpenChannelMessageViewHolder extends MessageViewHolder {
- private final ViewOpenChannelHighlightMessageHolderBinding binding;
- private final int operatorAppearance;
- private final int nicknameAppearance;
-
- public HighlightOpenChannelMessageViewHolder(@NonNull ViewOpenChannelHighlightMessageHolderBinding binding) {
- super(binding.getRoot());
- this.binding = binding;
- TypedArray a = binding.getRoot().getContext().getTheme().obtainStyledAttributes(null, com.sendbird.uikit.R.styleable.MessageView, 0, 0);
- try {
- nicknameAppearance = a.getResourceId(com.sendbird.uikit.R.styleable.MessageView_sb_message_sender_name_text_appearance, com.sendbird.uikit.R.style.SendbirdCaption1OnLight02);
- operatorAppearance = a.getResourceId(com.sendbird.uikit.R.styleable.MessageView_sb_message_operator_name_text_appearance, com.sendbird.uikit.R.style.SendbirdCaption1Secondary300);
- } finally {
- a.recycle();
- }
- }
-
- @Override
- public void bind(@NonNull BaseChannel channel, @NonNull BaseMessage message, @NonNull MessageListUIParams params) {
- OpenChannel openChannel;
- if (channel instanceof OpenChannel) {
- openChannel = (OpenChannel) channel;
- } else {
- return;
- }
-
- Context context = binding.getRoot().getContext();
- DrawableUtils.drawStatus(binding.ivStatus, message);
-
- binding.ivProfileView.setVisibility(View.VISIBLE);
- binding.tvNickname.setVisibility(View.VISIBLE);
- binding.tvSentAt.setVisibility(View.VISIBLE);
- String sentAt = DateUtils.formatDateTime(context, message.getCreatedAt(), DateUtils.FORMAT_SHOW_TIME);
- binding.tvSentAt.setText(sentAt);
-
- if (openChannel.isOperator(message.getSender())) {
- binding.tvNickname.setTextAppearance(context, operatorAppearance);
- } else {
- binding.tvNickname.setTextAppearance(context, nicknameAppearance);
- }
-
- Sender sender = message.getSender();
- String nickname = sender == null || TextUtils.isEmpty(sender.getNickname()) ?
- context.getString(R.string.sb_text_channel_list_title_unknown) :
- sender.getNickname();
- binding.tvNickname.setText(nickname);
-
- String url = "";
- if (sender != null && !TextUtils.isEmpty(sender.getProfileUrl())) {
- url = sender.getProfileUrl();
- }
-
- Drawable errorIcon = DrawableUtils.createOvalIcon(binding.getRoot().getContext(),
- R.color.background_300, R.drawable.icon_user, R.color.ondark_01);
- Glide.with(context)
- .load(url)
- .diskCacheStrategy(DiskCacheStrategy.ALL)
- .error(errorIcon)
- .apply(RequestOptions.circleCropTransform())
- .into(binding.ivProfileView);
-
- binding.tvMessage.setText(message.getMessage());
- }
-
- @NonNull
- @Override
- public MapOpenChannelFragment
with channel url.
- * - * In preparation for screen configuration change, the value is initialized. - *
- * @param channelUrl The channel url to be applied to this screen - * @returnOpenChannelFragment
instance
- */
- @NonNull
- protected OpenChannelFragment createOpenChannelFragment(@NonNull String channelUrl) {
- final Bundle args = new Bundle();
- args.putString("CHANNEL_URL", channelUrl);
- args.putString("DESCRIPTION", creatorName);
- args.putString("INPUT_TEXT", inputText);
-
- LiveStreamChannelFragment fragment = new LiveStreamChannelFragment();
- fragment.setArguments(args);
- return fragment;
- }
-}
diff --git a/uikit-custom-sample/src/main/java/com/sendbird/uikit/customsample/openchannel/livestream/LiveStreamChannelFragment.java b/uikit-custom-sample/src/main/java/com/sendbird/uikit/customsample/openchannel/livestream/LiveStreamChannelFragment.java
deleted file mode 100644
index 769da6b6..00000000
--- a/uikit-custom-sample/src/main/java/com/sendbird/uikit/customsample/openchannel/livestream/LiveStreamChannelFragment.java
+++ /dev/null
@@ -1,155 +0,0 @@
-package com.sendbird.uikit.customsample.openchannel.livestream;
-
-import android.content.res.Configuration;
-import android.net.Uri;
-import android.os.Bundle;
-
-import androidx.annotation.NonNull;
-import androidx.appcompat.app.AlertDialog;
-
-import com.sendbird.android.message.BaseMessage;
-import com.sendbird.android.params.FileMessageCreateParams;
-import com.sendbird.android.params.UserMessageCreateParams;
-import com.sendbird.android.params.UserMessageUpdateParams;
-import com.sendbird.uikit.consts.KeyboardDisplayType;
-import com.sendbird.uikit.customsample.R;
-import com.sendbird.uikit.customsample.models.CustomMessageType;
-import com.sendbird.uikit.customsample.openchannel.CustomOpenChannelMessageListAdapter;
-import com.sendbird.uikit.fragments.OpenChannelFragment;
-import com.sendbird.uikit.model.ReadyStatus;
-import com.sendbird.uikit.modules.OpenChannelModule;
-import com.sendbird.uikit.modules.components.OpenChannelHeaderComponent;
-import com.sendbird.uikit.modules.components.OpenChannelMessageInputComponent;
-import com.sendbird.uikit.vm.OpenChannelViewModel;
-
-/**
- * Displays an open channel screen used for live stream.
- */
-public class LiveStreamChannelFragment extends OpenChannelFragment {
- private String inputText;
-
- @NonNull
- @Override
- protected OpenChannelModule onCreateModule(@NonNull Bundle args) {
- return new OpenChannelModule(requireContext(), new OpenChannelModule.Params(requireContext(), R.style.AppThemeCustom_Sendbird));
- }
-
- @Override
- protected void onConfigureParams(@NonNull OpenChannelModule module, @NonNull Bundle args) {
- super.onConfigureParams(module, args);
- final String creatorName = args.getString("DESCRIPTION");
- this.inputText = args.getString("INPUT_TEXT");
-
- OpenChannelModule.Params moduleParams = module.getParams();
- moduleParams.setUseOverlayMode(getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE);
- moduleParams.setUseHeader(true);
-
- OpenChannelHeaderComponent.Params headerParams = module.getHeaderComponent().getParams();
- headerParams.setDescription(creatorName);
-
- OpenChannelMessageInputComponent.Params inputParams = module.getMessageInputComponent().getParams();
- inputParams.setInputText(inputText);
- inputParams.setKeyboardDisplayType(KeyboardDisplayType.Dialog);
- }
-
- @Override
- protected void onBeforeReady(@NonNull ReadyStatus status, @NonNull OpenChannelModule module, @NonNull OpenChannelViewModel viewModel) {
- super.onBeforeReady(status, module, viewModel);
- getModule().getMessageInputComponent().setOnInputTextChangedListener((s, start, before, count) -> inputText = s.toString());
- getModule().getMessageInputComponent().setOnInputLeftButtonClickListener(v -> showMessageTypeDialog());
- if (viewModel.getChannel() != null) {
- getModule().getMessageListComponent().setAdapter(new CustomOpenChannelMessageListAdapter(viewModel.getChannel(), true));
- }
- }
-
- private CustomMessageType customMessageType = CustomMessageType.NONE;
-
- @Override
- protected void onBeforeSendUserMessage(@NonNull UserMessageCreateParams params) {
- super.onBeforeSendUserMessage(params);
- params.setCustomType(customMessageType.getValue());
- params.setData(null);
- params.setMentionedUserIds(null);
- params.setMentionedUsers(null);
- params.setMetaArrays(null);
- params.setParentMessageId(0);
- params.setPushNotificationDeliveryOption(null);
- params.setTranslationTargetLanguages(null);
- }
-
- @Override
- protected void onBeforeSendFileMessage(@NonNull FileMessageCreateParams params) {
- super.onBeforeSendFileMessage(params);
- params.setCustomType(customMessageType.getValue());
- params.setData(null);
- params.setMentionedUserIds(null);
- params.setMentionedUsers(null);
- params.setMetaArrays(null);
- params.setParentMessageId(0);
- params.setPushNotificationDeliveryOption(null);
- }
-
- @Override
- protected void onBeforeUpdateUserMessage(@NonNull UserMessageUpdateParams params) {
- super.onBeforeUpdateUserMessage(params);
- params.setCustomType(customMessageType.getValue());
- params.setData(null);
- params.setMentionedUserIds(null);
- params.setMentionedUsers(null);
- }
-
- @Override
- protected void sendUserMessage(@NonNull UserMessageCreateParams params) {
- super.sendUserMessage(params);
- }
-
- @Override
- protected void sendFileMessage(@NonNull Uri uri) {
- super.sendFileMessage(uri);
- }
-
- @Override
- protected void updateUserMessage(long messageId, @NonNull UserMessageUpdateParams params) {
- super.updateUserMessage(messageId, params);
- }
-
- @Override
- protected void deleteMessage(@NonNull BaseMessage message) {
- super.deleteMessage(message);
- }
-
- @Override
- protected void resendMessage(@NonNull BaseMessage message) {
- super.resendMessage(message);
- }
-
- public void setCustomMessageType(@NonNull CustomMessageType customMessageType) {
- this.customMessageType = customMessageType;
- }
-
- @NonNull
- public CustomMessageType getCustomMessageType() {
- return customMessageType;
- }
-
- private void showMessageTypeDialog() {
- if (!isFragmentAlive()) return;
- AlertDialog.Builder builder = new AlertDialog.Builder(requireContext());
- builder.setTitle("Pick message type")
- .setMultiChoiceItems(new String[]{com.sendbird.uikit.customsample.consts.StringSet.highlight},
- new boolean[]{getCustomMessageType().equals(CustomMessageType.HIGHLIGHT)},
- (dialog, which, isChecked) -> {
- final CustomMessageType type = isChecked ? CustomMessageType.HIGHLIGHT : CustomMessageType.NONE;
- setCustomMessageType(type);
- })
- .create()
- .show();
- }
-
- @NonNull
- @Override
- protected String getChannelUrl() {
- final Bundle args = getArguments() == null ? new Bundle() : getArguments();
- return args.getString("CHANNEL_URL", "");
- }
-}
diff --git a/uikit-custom-sample/src/main/java/com/sendbird/uikit/customsample/openchannel/livestream/LiveStreamListAdapter.java b/uikit-custom-sample/src/main/java/com/sendbird/uikit/customsample/openchannel/livestream/LiveStreamListAdapter.java
deleted file mode 100644
index 71e59543..00000000
--- a/uikit-custom-sample/src/main/java/com/sendbird/uikit/customsample/openchannel/livestream/LiveStreamListAdapter.java
+++ /dev/null
@@ -1,106 +0,0 @@
-package com.sendbird.uikit.customsample.openchannel.livestream;
-
-import android.graphics.drawable.Drawable;
-import android.view.LayoutInflater;
-import android.view.View;
-import android.view.ViewGroup;
-
-import androidx.annotation.NonNull;
-
-import com.bumptech.glide.Glide;
-import com.bumptech.glide.load.engine.DiskCacheStrategy;
-import com.sendbird.android.channel.OpenChannel;
-import com.sendbird.uikit.activities.adapter.OpenChannelListAdapter;
-import com.sendbird.uikit.activities.viewholder.BaseViewHolder;
-import com.sendbird.uikit.customsample.R;
-import com.sendbird.uikit.customsample.databinding.ViewLiveStreamListItemBinding;
-import com.sendbird.uikit.customsample.models.LiveStreamingChannelData;
-import com.sendbird.uikit.customsample.utils.DrawableUtils;
-import com.sendbird.uikit.interfaces.UserInfo;
-import com.sendbird.uikit.utils.TextUtils;
-
-import org.json.JSONException;
-import org.json.JSONObject;
-
-import java.util.Locale;
-
-/**
- * RecyclerView adapter for OpenChannel
list used for live stream.
- */
-public class LiveStreamListAdapter extends OpenChannelListAdapter {
- @NonNull
- @Override
- public BaseViewHoldertrue
if the user profile is shown, false
otherwise
+ * @since 3.5.0
+ */
+ public NotificationMessageListAdapter(@NonNull GroupChannel channel, boolean shouldDisplayUserProfile) {
+ this.channel = GroupChannel.clone(channel);
+ this.currentLastSeenAt = channel.getMyLastRead();
+ this.shouldDisplayUserProfile = shouldDisplayUserProfile;
+ }
+
+ /**
+ * Called when RecyclerView needs a new {@link NotificationChannelMessageViewHolder} of the given type to represent
+ * an item.
+ *
+ * @param parent The ViewGroup into which the new View will be added after it is bound to
+ * an adapter position.
+ * @param viewType The view type of the new View.
+ * @return A new {@link NotificationChannelMessageViewHolder} that holds a View of the given view type.
+ * @see #getItemViewType(int)
+ * @see #onBindViewHolder(NotificationChannelMessageViewHolder, int)
+ * @since 3.5.0
+ */
+ @NonNull
+ @Override
+ public NotificationChannelMessageViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
+ final TypedValue values = new TypedValue();
+ parent.getContext().getTheme().resolveAttribute(R.attr.sb_component_list, values, true);
+ final Context contextWrapper = new ContextThemeWrapper(parent.getContext(), values.resourceId);
+ LayoutInflater inflater = LayoutInflater.from(contextWrapper);
+ return new NotificationChannelMessageViewHolder(SbViewMessageNotificationChannelBinding.inflate(inflater, parent, false), shouldDisplayUserProfile);
+ }
+
+ /**
+ * Called by RecyclerView to display the data at the specified position. This method should
+ * update the contents of the {@link NotificationChannelMessageViewHolder#itemView} to reflect the item at the given
+ * position.
+ *
+ * @param holder The {@link NotificationChannelMessageViewHolder} which should be updated to represent
+ * the contents of the item at the given position in the data set.
+ * @param position The position of the item within the adapter's data set.
+ * @since 3.5.0
+ */
+ @Override
+ public void onBindViewHolder(@NonNull NotificationChannelMessageViewHolder holder, final int position) {
+ final BaseMessage message = getItem(position);
+ holder.setOnMessageTemplateActionHandler(onMessageTemplateActionHandler);
+ holder.bind(channel, message, currentLastSeenAt);
+ }
+
+ /**
+ * Return the view type of the {@link NotificationChannelMessageViewHolder}.
+ * Notification channel always returns {@link MessageType#VIEW_TYPE_NOTIFICATION_CHANNEL_MESSAGE}
+ *
+ * @param position position to query
+ * @return integer value identifying the type of the view needed to represent the item at position
.
+ * @see MessageViewHolderFactory#getViewType(BaseMessage)
+ * @since 3.5.0
+ */
+ @Override
+ public int getItemViewType(int position) {
+ return MessageType.VIEW_TYPE_NOTIFICATION_CHANNEL_MESSAGE.getValue();
+ }
+
+ /**
+ * Return ID for the message at position
.
+ *
+ * @param position Adapter position to query
+ * @return the stable ID of the item at position
+ * @since 3.5.0
+ */
+ @Override
+ public long getItemId(int position) {
+ return getItem(position).getMessageId();
+ }
+
+ /**
+ * Sets the {@link Listtrue
if the header is used, false
otherwise.
+ * @return This Builder object to allow for chaining of calls to set methods.
+ * @since 3.5.0
+ */
+ @NonNull
+ public Builder setUseHeader(boolean useHeader) {
+ bundle.putBoolean(StringSet.KEY_USE_HEADER, useHeader);
+ return this;
+ }
+
+ /**
+ * Sets whether to display the user profile when drawing a message.
+ *
+ * @param shouldDisplayUserProfile true
if the user profile is shown, false
otherwise
+ * @return This Builder object to allow for chaining of calls to set methods.
+ * @since 3.5.0
+ */
+ @NonNull
+ public Builder setDisplayUserProfile(boolean shouldDisplayUserProfile) {
+ bundle.putBoolean(StringSet.KEY_SHOULD_DISPLAY_USER_PROFILE, shouldDisplayUserProfile);
+ return this;
+ }
+
+ /**
+ * Sets whether the left button of the header is used.
+ *
+ * @param useHeaderLeftButton true
if the left button of the header is used,
+ * false
otherwise.
+ * @return This Builder object to allow for chaining of calls to set methods.
+ * @since 3.5.0
+ */
+ @NonNull
+ public Builder setUseHeaderLeftButton(boolean useHeaderLeftButton) {
+ bundle.putBoolean(StringSet.KEY_USE_HEADER_LEFT_BUTTON, useHeaderLeftButton);
+ return this;
+ }
+
+ /**
+ * Sets the icon on the left button of the header.
+ *
+ * @param resId the resource identifier of the drawable.
+ * @return This Builder object to allow for chaining of calls to set methods.
+ * @since 3.5.0
+ */
+ @NonNull
+ public Builder setHeaderLeftButtonIconResId(@DrawableRes int resId) {
+ return setHeaderLeftButtonIcon(resId, null);
+ }
+
+ /**
+ * Sets the icon on the left button of the header.
+ *
+ * @param resId the resource identifier of the drawable.
+ * @param tint Color state list to use for tinting this resource, or null to clear the tint.
+ * @return This Builder object to allow for chaining of calls to set methods.
+ * @since 3.5.0
+ */
+ @NonNull
+ public Builder setHeaderLeftButtonIcon(@DrawableRes int resId, @Nullable ColorStateList tint) {
+ bundle.putInt(StringSet.KEY_HEADER_LEFT_BUTTON_ICON_RES_ID, resId);
+ bundle.putParcelable(StringSet.KEY_HEADER_LEFT_BUTTON_ICON_TINT, tint);
+ return this;
+ }
+
+ /**
+ * Sets the click listener on the left button of the header.
+ *
+ * @param listener The callback that will run.
+ * @return This Builder object to allow for chaining of calls to set methods.
+ * @since 3.5.0
+ */
+ @NonNull
+ public Builder setOnHeaderLeftButtonClickListener(@NonNull View.OnClickListener listener) {
+ this.headerLeftButtonClickListener = listener;
+ return this;
+ }
+
+ /**
+ * Sets the custom fragment. It must inherit {@link NotificationChannelFragment}.
+ *
+ * @param fragment custom fragment.
+ * @return This Builder object to allow for chaining of calls to set methods.
+ * @since 3.5.0
+ */
+ @NonNull
+ public If this function is used override, {@link #getRootView()} must also be override.
+ * + * @param context The {@code Context} this component is currently associated with + * @param inflater The LayoutInflater object that can be used to inflate any views in the component + * @param parent The ViewGroup into which the new View will be added + * @param args The arguments supplied when the component was instantiated, if any + * @return Return the View for the UI. + * @since 3.5.0 + */ + @NonNull + public View onCreateView(@NonNull Context context, @NonNull LayoutInflater inflater, @NonNull ViewGroup parent, @Nullable Bundle args) { + if (args != null) params.apply(context, args); + + this.pagerRecyclerView = new PagerRecyclerView(context, null, R.attr.sb_component_list); + pagerRecyclerView.setHasFixedSize(true); + pagerRecyclerView.setClipToPadding(false); + pagerRecyclerView.setThreshold(5); + pagerRecyclerView.setUseDivider(false); + pagerRecyclerView.setItemAnimator(new ItemAnimator()); + + final LinearLayoutManager layoutManager = new InnerLinearLayoutManager(pagerRecyclerView.getContext()); + layoutManager.setReverseLayout(false); + pagerRecyclerView.setLayoutManager(layoutManager); + return this.pagerRecyclerView; + } + + /** + * Sets the paged data loader for message list. + * + * @param pagedDataLoader The paged data loader to be applied to this list component + * @since 3.5.0 + */ + public void setPagedDataLoader(@NonNull OnPagedDataLoaderWhen adapter is changed, all existing views are recycled back to the pool. If the pool has only one adapter, it will be cleared.
+ * + * @param adapter The adapter to be applied to this list component + * @since 3.5.0 + */ + public void setAdapter(@NonNull NotificationMessageListAdapter adapter) { + this.adapter = adapter; + if (pagerRecyclerView == null) return; + if (this.adapter.getOnMessageTemplateActionHandler() == null) { + this.adapter.setOnMessageTemplateActionHandler(this::onMessageTemplateActionClicked); + } + pagerRecyclerView.setAdapter(this.adapter); + } + + /** + * Register a callback to be invoked when the view that has an {@link com.sendbird.uikit.model.Action} data is clicked. + * If an Action is registered in a specific view, it is called when a click event occurs. + * + * @param handler The callback that will run + * @since 3.5.0 + */ + public void setOnMessageTemplateActionHandler(@Nullable OnMessageTemplateActionHandler handler) { + this.onMessageTemplateActionHandler = handler; + } + + /** + * Called when the view that has an {@link com.sendbird.uikit.model.Action} data is clicked. + * + * @param view the view that was clicked. + * @param action the registered Action data + * @param message the clicked message + * @since 3.5.0 + */ + protected void onMessageTemplateActionClicked(@NonNull View view, @NonNull Action action, @NonNull BaseMessage message) { + if (onMessageTemplateActionHandler != null) onMessageTemplateActionHandler.onHandleAction(view, action, message); + } + + /** + * Handles a new channel when data has changed. + * + * @param channel The latest group channel + * @since 3.5.0 + */ + public void notifyChannelChanged(@NonNull GroupChannel channel) { + if (getAdapter() == null) { + setAdapter(new NotificationMessageListAdapter(channel, params.shouldDisplayUserProfile)); + } + } + + /** + * Handles the data needed to draw the message list has changed. + * + * @param messageList The list of messages to be drawn + * @param channel The latest group channel + * @param callback Callback when the message list is updated + * @since 3.5.0 + */ + public void notifyDataSetChanged(@NonNull ListSince the onCreateView configuring View uses the values of the set Params, we recommend that you set up for Params before the onCreateView is called.
+ * + * @see #getParams() + * @since 3.5.0 + */ + public static class Params { + private boolean shouldDisplayUserProfile = true; + + /** + * Sets whether to display the user profile when drawing a message. + * + * @param shouldDisplayUserProfiletrue
if the user profile is shown, false
otherwise
+ * @since 3.5.0
+ */
+ public void setDisplayUserProfile(boolean shouldDisplayUserProfile) {
+ this.shouldDisplayUserProfile = shouldDisplayUserProfile;
+ }
+
+ /**
+ * Returns whether to display the user profile when drawing a message.
+ *
+ * @return true
if the user profile is shown, false
otherwise
+ * @since 3.5.0
+ */
+ public boolean shouldDisplayUserProfile() {
+ return shouldDisplayUserProfile;
+ }
+
+ /**
+ * Apply data that matches keys mapped to Params' properties.
+ * {@code KEY_USE_USER_PROFILE} is mapped to {@link #setDisplayUserProfile(boolean)}
+ *
+ * @param context The {@code Context} this component is currently associated with
+ * @param args The sets of arguments to apply at Params.
+ * @return This Params object that applied with given data.
+ * @since 3.5.0
+ */
+ @NonNull
+ protected Params apply(@NonNull Context context, @NonNull Bundle args) {
+ if (args.containsKey(StringSet.KEY_SHOULD_DISPLAY_USER_PROFILE)) {
+ setDisplayUserProfile(args.getBoolean(StringSet.KEY_SHOULD_DISPLAY_USER_PROFILE));
+ }
+ return this;
+ }
+ }
+
+}
diff --git a/uikit/src/main/java/com/sendbird/uikit/utils/DrawableUtils.java b/uikit/src/main/java/com/sendbird/uikit/utils/DrawableUtils.java
index dd5c8099..8515774c 100644
--- a/uikit/src/main/java/com/sendbird/uikit/utils/DrawableUtils.java
+++ b/uikit/src/main/java/com/sendbird/uikit/utils/DrawableUtils.java
@@ -16,6 +16,7 @@
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.appcompat.content.res.AppCompatResources;
+import androidx.core.content.ContextCompat;
import androidx.core.graphics.drawable.DrawableCompat;
import com.sendbird.uikit.R;
@@ -72,6 +73,13 @@ public static Drawable setTintList(@Nullable Drawable drawable, @Nullable ColorS
return mutated;
}
+ @NonNull
+ public static Drawable createOvalIcon(@NonNull Context context, @ColorRes int color) {
+ final ShapeDrawable drawable = new ShapeDrawable(new OvalShape());
+ drawable.getPaint().setColor(ContextCompat.getColor(context, color));
+ return drawable;
+ }
+
@NonNull
public static Drawable createOvalIcon(@NonNull Context context, @ColorRes int backgroundColor,
@DrawableRes int iconRes, @ColorRes int iconTint) {
@@ -90,6 +98,15 @@ public static Drawable createOvalIcon(@NonNull Context context, @ColorRes int ba
}
@NonNull
+ public static Drawable createOvalIconWithInset(@NonNull Context context, @ColorRes int background, @DrawableRes int iconRes, @ColorRes int iconTint, int inset) {
+ final ShapeDrawable drawable = new ShapeDrawable(new OvalShape());
+ drawable.getPaint().setColor(ContextCompat.getColor(context, background));
+ final Drawable icon = setTintList(context, iconRes, iconTint);
+ return createLayerIcon(drawable, icon, inset);
+ }
+
+
+ @NonNull
public static Drawable createLayerIcon(@Nullable Drawable background, @Nullable Drawable icon, int inset) {
Drawable[] layer = {background, icon};
LayerDrawable layerDrawable = new LayerDrawable(layer);
diff --git a/uikit/src/main/java/com/sendbird/uikit/utils/ViewUtils.java b/uikit/src/main/java/com/sendbird/uikit/utils/ViewUtils.java
index 08f9e601..e04fe32f 100644
--- a/uikit/src/main/java/com/sendbird/uikit/utils/ViewUtils.java
+++ b/uikit/src/main/java/com/sendbird/uikit/utils/ViewUtils.java
@@ -239,6 +239,15 @@ public static void drawNickname(@NonNull TextView tvNickname, @Nullable BaseMess
tvNickname.setText(nickname);
}
+ public static void drawNotificationProfile(@NonNull ImageView ivProfile, @Nullable BaseMessage message) {
+ int iconTint = SendbirdUIKit.isDarkMode() ? R.color.onlight_01 : R.color.ondark_01;
+ int backgroundTint = R.color.background_300;
+ int inset = ivProfile.getContext().getResources().getDimensionPixelSize(R.dimen.sb_size_6);
+ final Drawable profile = DrawableUtils.createOvalIconWithInset(ivProfile.getContext(),
+ backgroundTint, R.drawable.icon_channels, iconTint, inset);
+ ivProfile.setImageDrawable(profile);
+ }
+
public static void drawProfile(@NonNull ImageView ivProfile, @Nullable BaseMessage message) {
if (message == null) {
return;
diff --git a/uikit/src/main/java/com/sendbird/uikit/vm/ChannelListViewModel.java b/uikit/src/main/java/com/sendbird/uikit/vm/ChannelListViewModel.java
index 241904cd..c9b6f183 100644
--- a/uikit/src/main/java/com/sendbird/uikit/vm/ChannelListViewModel.java
+++ b/uikit/src/main/java/com/sendbird/uikit/vm/ChannelListViewModel.java
@@ -99,6 +99,7 @@ private synchronized void disposeChannelCollection() {
private void notifyChannelChanged() {
if (collection == null) return;
ListBaseMessage
s for the first time.
+ * If there is no more pages to be read, an empty List
(not null
) returns.
+ * If the request is succeed, you can observe updated data through {@link #getMessageList()}.
+ *
+ * @param startingPoint Timestamp that is the starting point when the message list is fetched
+ * @since 3.5.0
+ */
+ @UiThread
+ public synchronized boolean loadInitial(final long startingPoint) {
+ Logger.d(">> NotificationChannelViewModel::loadInitial() startingPoint=%s", startingPoint);
+ initMessageCollection(startingPoint);
+ if (collection == null) {
+ Logger.d("-- channel instance is null. an authenticate process must be proceed first");
+ return false;
+ }
+
+ collection.initialize(MessageCollectionInitPolicy.CACHE_AND_REPLACE_BY_API, new MessageCollectionInitHandler() {
+ @Override
+ public void onCacheResult(@Nullable ListBaseMessage
s when the page goes to the previous.
+ * If there is no more pages to be read, an empty List
(not null
) returns.
+ * If the request is succeed, you can observe updated data through {@link #getMessageList()}.
+ *
+ * @return Returns the list of BaseMessage
s if no error occurs
+ * @throws Exception Throws exception if getting the message list are failed
+ * @since 3.5.0
+ */
+ @WorkerThread
+ @NonNull
+ @Override
+ public ListBaseMessage
s when the page goes to the next.
+ * If there is no more pages to be read, an empty List
(not null
) returns.
+ * If the request is succeed, you can observe updated data through {@link #getMessageList()}.
+ *
+ * @return Returns the list of BaseMessage
s if no error occurs
+ * @throws Exception Throws exception if getting the message list are failed
+ * @since 3.5.0
+ */
+ @WorkerThread
+ @NonNull
+ @Override
+ public List