# V3 Breaking changes
- #### Prerequisites
- minSDKVersion is increased from **16** to **21**.
- Sendbird Chat SDK for Android 4.0.0 and later
- changed `databinding` of buildFeatures to use `viewbinding`.
- #### Breaking changes
##### Common changes
- Rename the main class from `SendBirdUIKit` to `SendbirdUIKit`.
- Rename the class from `SendBirdUIKitAdapter` to `SendbirdUIKitAdapter`.
- All `useHeader` property's default value in `Builder` class has been changed from `false` to `true`.
- All fragments inherites `BaseModuleFragment` and it has abstract methods related to the module. So below functions are added all fragments.
> For more information on this changes of `BaseModuleFragment`, refer to [this](https://sendbird.com/docs/uikit/v1/android/guides/group-channel).
- `onCreateModule(Bundle)`
- `onConfigureParams(BaseModule, Bundle)`
- `onCreateViewModel()`
- `onBeforeReady(ReadyStatus, BaseModule, BaseViewModel)`
- `onReady(ReadyStatus, BaseModule, BaseViewModel)`
- Added `Modules` and `Components` classes. Each fragment has it's corresponding module and components.
| fragment | module | component | viewmodel | style name | recyclerview adapter |
| ------------------------------- | ------------------------- | ------------------------------------------------------------ | ---------------------------- | ---------------------------- | ----------------------------- |
| **ChannelListFragment** | ChannelListModule | HeaderComponent
ChannelListComponent
StatusComponent | ChannelListViewModel | `Module.ChannelList` | ChanelListAdapter |
| **ChannelFragment** | ChannelModule | ChannelHeaderComponent
MessageListComponent
MessageInputComponent
StatusComponent | ChannelViewModel | `Module.Channel` | MessageListAdapter |
| **OpenChannelFragment** | OpenChannelModule | OpenChannelHeaderComponent
OpenChannelMessageListComponent
OpenChannelMessageInputComponent
StatusComponent | OpenChannelViewModel | `Module.OpenChannel` | OpenChannelMessageListAdapter |
| **CreateChannelFragment** | CreateChannelModule | SelectUserHeaderComponent
CreateChannelUserListComponent
StatusComponent | CreateChannelViewModel | `Module.CreateChannel` | CreateChannelUserListAdapter |
| **ChannelSettingsFragment** | ChannelSettingsModule | ChannelSettingsHeaderComponent
ChannelSettingsInfoComponent
ChannelSettingsMenuComponent | ChannelSettingsViewModel | `Module.ChannelSettings` | |
| **OpenChannelSettingsFragment** | OpenChannelSettingsModule | OpenChannelSettingsHeaderComponent
OpenChannelSettingsInfoComponent
OpenChannelSettingsMenuComponent | OpenChannelSettingsViewModel | `Module.OpenChannelSettings` | |
| **InviteUserFragment** | InviteUserModule | SelectUserHeaderComponent
InviteUserListComponent
StatusComponent | InviteUserViewModel | `Module.InviteUser` | InviteUserListAdapter |
| **RegisterOperatorFragment** | RegisterOperatorModule | SelectUserHeaderComponent
RegisterOperatorListComponent
StatusComponent | RegisterOperatorViewModel | `Module.RegisterOperator` | RegisterOperatorListAdapter |
| **ModerationFragment** | ModerationModule | HeaderComponent
ModerationListComponent | ModerationViewModel | `Module.Moderation` | |
| **MemberListFragment** | MemberListModule | HeaderComponent
MemberListComponent
StatusComponent | MemberListViewModel | `Module.MemberList` | MemberListAdapter |
| **BannedUserListFragment** | BannedUserListModule | HeaderComponent
BannedUserListComponent
StatusComponent | BannedUserListViewModel | `Module.BannedUserList` | BannedUserListAdater |
| **MutedMemberListFragment** | MutedMemberListModule | HeaderComponent
MutedMemberListComponent
StatusComponent | MutedMemberListViewModel | `Module.MutedMemberList` | MutedMemberListAdapter |
| **OperatorListFragment** | OperatorListModule | HeaderComponent
OperatorListComponent
StatusComponent | OperatorListViewModel | `Module.OperatorList` | OperatorListAdapter |
| **MessageSearchFragment** | MessageSearchModule | MessageSearchHeaderComponent
MessageSearchListComponent
StatusComponent | MessageSearchViewModel | `Module.MessageSearch` | MessageSearchAdapter |
| **ParticipantListFragment** | ParticipantListModule | HeaderComponent
ParticipantListComponent
StatusComponent | ParticipantViewModel | `Module.ParticipantList` | ParticipantListAdapter |
- Deleted below functions in all fragments.
- `onConfigure()`
- `onDrawPage()`
- `onReadyFailure()`
- Deleted **deprecated** functions in `MessageListAdapter`.
- MessageListAdapter(GroupChannel, OnItemClickListener)
- MessageListAdapter(GroupChannel, OnItemClickListener, OnItemLongClickListener)
- MessageListAdapter(GroupChannel, OnItemClickListener, OnItemLongClickListener, boolean)
- setItems(GroupChannel, List)
- setOnItemClickListener(OnItemClickListener)
- setOnItemLongClickListener(OnItemLongClickListener)
- setOnProfileClickListener(OnItemClickListener)
- Deleted **deprecated** functions in `OpenChannelMessageListAdapter`.
- OpenChannelMessageListAdapter(OpenChannel, OnItemClickListener)
- OpenChannelMessageListAdapter(OpenChannel, OnItemClickListener, OnItemLongClickListener)
- OpenChannelMessageListAdapter(OpenChannel, OnItemClickListener, OnItemLongClickListener, boolean)
- setItems(OpenChannel, List)
- setOnItemClickListener(OnItemClickListener)
- setOnItemLongClickListener(OnItemLongClickListener)
- setOnProfileClickListener(OnItemClickListener)
- Deleted `CustomMemberListQueryHandler` class.
- Replaced interface of `CreateableChannelType` to `CreatableChannelType`.
------
##### SendbirdUIkit
- Replaced `updateUserInfo(String, String, UserInfoUpdateHandler)` to `updateUserInfo(UserUpdateParams, CompletionHandler)`.
- Replaced `connect(SendBird.ConnectHandler)` to `connect(ConnectHandler)`.
- Replaced `disconnect(SendBird.DisconnectHandler)` to `disconnect(DisconnectHandler)`.
------
##### CustomParamsHandler
- Replaced `onBeforeCreateGroupChannel(GroupChannelParams)` to `onBeforeCreateGroupChannel(GroupChannelCreateParams)`.
- Replaced `onBeforeSendUserMessage(UserMessageParams)` to `onBeforeSendUserMessage(UserMessageCreateParams)`.
- Replaced `onBeforeUpdateGroupChannel(GroupChannelParams)` to `onBeforeUpdateGroupChannel(GroupChannelUpdateParams)`.
- Replaced `onBeforeUpdateUserMessage(UserMessageParams)` to `onBeforeUpdateUserMessage(UserMessageUpdateParams)`.
- Replaced `onBeforeSendFileMessage(FileMessageParams)` to `onBeforeSendFileMessage(FileMessageCreateParams).`
- Replaced `onBeforeCreateOpenChannel(OpenChannelParams)` to `onBeforeCreateOpenChannel(OpenChannelCreateParams)`
------
##### OnCompleteHandler
- Repleace `onComplete(SendBirdException)` to `onComplete(SendbirdException)`.
------
##### OnResultHandler
- Replaced `onResult(List, SendBirdException)` to `onComplete(List, SendbirdException)`.
------
##### OnListResultHandler
- Replaced `onError(SendBirdException)` to `onError(SendbirdException)`.
------
##### Group channel list
- ###### ChannelListActivity
- Replaced `ChannelListFragment createChannelListFragment()` to `Fragment createFragment()`.
- ###### ChannelListFragment
- Deleted `setErrorFrame()`
- Added `onBindHeaderComponent(HeaderComponent, ChannelListViewModel)`
- Added `onBindChannelListComponent(ChannelListComponent, ChannelListViewModel)`
- Added `onBindStatusComponent(StatusComponent, ChannelListViewModel)`
- ###### ChannelListFragment.Builder
- Replaced `setHeaderLeftButtonListener(OnClickListener)` to `setOnLeftbuttonClickListener(OnClickListener`
- Replaced `setHeaderRightButtonListener(OnClickListener)` to `setOnRightbuttonClickListener(OnClickListener)`
- Replaced `setItemClickListener(OnItemClickListener)` to `setOnItemClickListener(OnItemClickListener)`
- Replaced `setItemLongClickListener(OnItemClickListener)` to `setOnItemLongClickListener(OnItemClickListener)`
- Deleted `setCustomChannelListFragment(ChannelListFragment)`
- Deleted `setIncludeEmpty(boolean)`
- Deleted `setCustomChannelListFragment(ChannelListFragment)`
- Added `withArguments(Bundle)`
------
##### Chat in group channel
- ###### ChannelActivity
- Replaced `ChannelFragment createChannelFragment(String)` to `Fragment createFragment()`.
- ###### ChannelFragment
- Moved `getTooltipMessage(int)` into `MessageListComponent`
- Replaced `onIdentifiableItemClick(View, String, int, BaseMessage)` to use `onMessageClicked(View, int, BaseMessage)`, `onMessageProfileClicked(View, int, BaseMessage)`, and `onQuoteReplyMessageClicked(View, int, BaseMessage)`.
- Replaced `onIdentifiableItemLongClick(View, String, int, BaseMessage)` to use `onMessageLongClicked(View, int, BaseMessage)`, `onMessageProfileLongClicked(View, int, BaseMessage)`, and `onQuoteReplyMessageLongClicked(View, int, BaseMessage)`.
- Replaced `sendUserMessage(UserMessageParams)` to use `sendUserMessage(UserMessageCreateParams)`.
- Replaced `updateUserMessage(long, UserMessageParams)` to use `updateUserMessage(long, UserMessageUpdateParams)`.
- Replaced `onBeforeSendUserMessage(UserMessageParams)` to use `onBeforeSendUserMessage(UserMessageCreateParams)`.
- Replaced `onBeforeUpdateUserMessage(UserMessageParams)` to use `onBeforeUpdateUserMessage(UserMessageUpdateParams)`.
- Replaced `onBeforeSendFileMessage(FileMessageParams)` to use `onBeforeSendFileMessage(FileMessageCreateParams)`.
- Added `onBindChannelHeaderComponent(ChannelHeaderComponent, ChannelViewMode, GroupChannel)`
- Added `onBindMessageListComponent(MessageListComponent, ChannelViewModel, GroupChannel)`
- Added `onBindMessageInputComponent(MessageInputComponent, ChannelViewModel, GroupChannel)`
- Added `onBindStatusComponent(StatusComponent, ChannelViewModel, GroupChannel)`
- ###### ChannelFragment.Builder
- Replaced `setHeaderLeftButtonListener(OnClickListener)` to `setOnLeftbuttonClickListener(OnClickListener`
- Replaced `setHeaderRightButtonListener(OnClickListener)` to `setOnRightbuttonClickListener(OnClickListener)`
- Replaced `setInputLeftButtonListener(OnClickListener)` to `setOnInputLeftbuttonClickListener(OnClickListener)`
- Replaced `setOnProfileClickListener(OnItemClickListener<>)` to `setOnMessageProfileClickListener(OnItemClickListener<>)`
- Deleted `setCustomChannelFragment(ChannelFragment)`
- Deleted `setItemClickListener(OnItemClickListener)`
- Deleted `setItemLongClickListener(OnItemClickListener)`
- Deleted `setListItemClickListener(OnIdentificableItemClickListener<>)`
- Deleted `setListItemLongClickListener(OnIdentificableItemClickListener<>)`
- Deleted `setLastSeenAt(boolean)`
- Deleted `setCustomChannelFragment(ChannelFragment)`
- Added `withArguments(Bundle)`
- Added `setOnMessageClickListener(OnItemClickListener)`
- Added `setOnMessageLongClickListener(OnItemLongClickListener)`
- Added `setOnQuoteReplyMessageClickListener(OnItemClickListener)`
- Added `setOnQuoteReplyMessageLongClickListener(OnItemLongClickListener)`
------
##### Chat in open channel
- ###### OpenChannelFragment
- Replaced `onIdentifiableItemClick(View, String, int, BaseMessage)` to use `onMessageClicked(View, int, BaseMessage)` and `onMessageProfileClicked(View, int, BaseMessage)`.
- Replaced `onIdentifiableItemLongClick(View, String, int, BaseMessage)` to use `onMessageLongClicked(View, int, BaseMessage)` and `onMessageProfileLongClicked(View, int, BaseMessage)`.
- Replaced `sendUserMessage(UserMessageParams)` to use `sendUserMessage(UserMessageCreateParams)`.
- Replaced `updateUserMessage(long, UserMessageParams)` to use `updateUserMessage(long, UserMessageUpdateParams)`.
- Replaced `onBeforeSendUserMessage(UserMessageParams)` to use `onBeforeSendUserMessage(UserMessageCreateParams)`.
- Replaced `onBeforeUpdateUserMessage(UserMessageParams)` to use `onBeforeUpdateUserMessage(UserMessageUpdateParams)`.
- Replaced `onBeforeSendFileMessage(FileMessageParams)` to use `onBeforeSendFileMessage(FileMessageCreateParams)`.
- Added `onBindChannelHeaderComponent(OpenChannelChannelHeaderComponent, OpenChannelViewModel, OpenChannel)`
- Added `onBindMessageListComponent(OpenChannelMessageListComponent, OpenChannelViewModel, OpenChannel)`
- Added `onBindMessageInputComponent(OpenChannelMessageInputComponent, OpenChannelViewModel, OpenChannel)`
- Added `onBindStatusComponent(StatusComponent, OpenChannelViewModel, OpenChannel)`
- ###### OpenChannelFragment.Builder
- Replaced `setHeaderLeftButtonListener(OnClickListener)` to `setOnLeftbuttonClickListener(OnClickListener`
- Replaced `setHeaderRightButtonListener(OnClickListener)` to `setOnRightbuttonClickListener(OnClickListener)`
- Replaced `setInputLeftButtonListener(OnClickListener)` to `setOnInputLeftbuttonClickListener(OnClickListener)`
- Replaced `setOnProfileClickListener(OnItemClickListener<>)` to `setOnMessageProfileClickListener(OnItemClickListener<>)`
- Deleted `setCustomOpenChannelFragment(OpenChannelFragment)`
- Deleted `setItemClickListener(OnItemClickListener)`
- Deleted `setItemLongClickListener(OnItemClickListener)`
- Deleted `setListItemClickListener(OnIdentificableItemClickListener<>)`
- Deleted `setListItemLongClickListener(OnIdentificableItemClickListener<>)`
- Added `withArguments(Bundle)`
- Added `setOnProfileLongClickListener(OnItemClickListener<>)` to `setOnMessageProfileClickListener(OnItemClickListener<>)`
- Added `setOnMessageClickListener(OnItemClickListener)`
- Added `setOnMessageLongClickListener(OnItemLongClickListener)`
------
##### Create group channel
- ###### CreateChannelActivity
- Replaced `CreateChannelFragment createChannelFragment()` and `CreateChannelFragment createChannelFragment(CreatableChannelType)` to `Fragment createFragment()`.
- ###### CreateChannelFragment
- Deleted `setErrorFrame()` .
- Replaced `setRightButtonText(CharSequence)` and `setCreateButtonText(CharSequence)` to use `setRightButtonText(String)` in `StateHeaderComponent.Params`.
- Replaced `setRightButtonEnabled(boolean)` and `setCreateButtonEnabled(boolean)` to use `setUseRightButton(boolean)` in `StateHeaderComponent.Params`.
- Replaced `setUserListAdapter(UserListAdapter)` to use `setAdapter(UserInfoListAdapter)` in `CreateChannelUserListComponent`.
- Replaced `setHeaderLeftButtonListener(OnClickListener)` to use `setOnLeftButtonClickListener(OnClickListener)` in `StateHeaderComponent`
- Replaced `setCustomUserListQueryHandler(CustomUserListQueryHandler)` to use `PagedQueryHandler createQueryHandler()` in `CreateChannelViewModel`.
- Replaced `onBeforeCreateGroupChannel(GroupChannelParams)` to `onBeforeCreateGroupChannel(GroupChannelCreateParams)`.
- Replaced `createGroupChannel(GroupChannelParams)` to `createGroupChannel(GroupChannelCreateParams)`.
- Added `onBindHeaderComponent(SelectUserHeaderComponent, CreateChannelViewModel)`
- Added `onBindUserListComponent(CreateChannelUserListComponent, CreateChannelViewModel)`
- Added `onBindStatusComponent(StatusComponent, CreateChannelViewModel)`
- ###### CreateChannelFragment.Builder
- Replaced `setCustomUserListQueryHandler(CustomUserListQueryHandler)` to `setCustomPagedQueryHandler(PagedQueryHandler)`
- Replaced `setUserListAdapter(UserListAdapter)` to `setCreateChannelUserListAdapter(CreateChannelUserListAdapter)`
- Replaced `setHeaderLeftButtonListener(OnClickListener)` to `setOnLeftButtonClickListener(OnClickListener)`
- Deleted `setCustomCreateChannelFragment(CreateChannelFragment)`
- Added `withArguments(Bundle)`
------
##### Configure group channel settings
- ###### ChannelSettingsActivity
- Replaced `ChannelSettingsFragment createChannelSettingsFragment(String)` to `Fragment createFragment()`.
- ###### ChannelSettingsFragment
- Replaced `setHeaderLeftButtonListener(OnClickListener)` to use `setOnLeftButtonClickListener(OnClickListener)` in `ChannelSettingsHeaderComponent`.
- Replaced `setOnMenuItemClickListener(OnMenuItemClickListener)` to use `setOnMenuClickListener(OnItemClickListener