diff --git a/CHANGELOG.md b/CHANGELOG.md index fe454d30..61b2814e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,4 +1,7 @@ # Changelog +### v3.10.1 (Nov 9, 2023) with Chat SDK `v4.13.0` +* Added `uikit-samples` project to demonstrate the usage of `UIKit`. +* Added `resetToDefault()` in `FragmentProviders`, `ModuleProviders`, `AdapterProviders` and `ViewModelProviders` to reset the providers to default. ### v3.10.0 (Nov 3, 2023) with Chat SDK `v4.13.0` * Added the `Suggested Replies` feature to enable quick and effective question asking to the bot. * Added `ChannelConfig.enableSuggestedReplies` configuration to enable/disable `Suggested Replies` feature. diff --git a/gradle.properties b/gradle.properties index 667ca39e..e36ef25e 100644 --- a/gradle.properties +++ b/gradle.properties @@ -16,5 +16,5 @@ org.gradle.jvmargs=-Xmx1536m # https://developer.android.com/topic/libraries/support-library/androidx-rn android.useAndroidX=true -UIKIT_VERSION = 3.10.0 +UIKIT_VERSION = 3.10.1 UIKIT_VERSION_CODE = 1 diff --git a/settings.gradle b/settings.gradle index caaa2085..87127053 100644 --- a/settings.gradle +++ b/settings.gradle @@ -15,6 +15,6 @@ dependencyResolutionManagement { } } -include ':uikit-custom-sample' -include ':uikit-sample', ':uikit' +include ':uikit' rootProject.name='sendbird-uikit-android-sources' +include ':uikit-samples' diff --git a/uikit-custom-sample/build.gradle b/uikit-custom-sample/build.gradle deleted file mode 100644 index 8555dc83..00000000 --- a/uikit-custom-sample/build.gradle +++ /dev/null @@ -1,59 +0,0 @@ -plugins { - id 'com.android.application' - id 'com.google.gms.google-services' -} - -android { - compileSdkVersion 33 - - defaultConfig { - applicationId "com.sendbird.uikit.customsample" - minSdkVersion 21 - targetSdkVersion 33 - versionCode 1 - versionName "1.0" - multiDexEnabled true - - buildConfigField "String", "VERSION_NAME", "\"$UIKIT_VERSION\"" - } - - buildTypes { - release { - minifyEnabled false - proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' - } - } - - compileOptions { - sourceCompatibility = 1.8 - targetCompatibility = 1.8 - } - - buildFeatures { - viewBinding true - } -} - -dependencies { - implementation fileTree(dir: "libs", include: ["*.jar"]) -// implementation project(":uikit") - implementation "com.sendbird.sdk:uikit:$UIKIT_VERSION" - - implementation platform('com.google.firebase:firebase-bom:31.3.0') - implementation "androidx.multidex:multidex:2.0.1" - implementation 'com.google.firebase:firebase-messaging' - - implementation 'androidx.appcompat:appcompat:1.4.1' - // To use Android Photo Picker backported version - implementation 'androidx.activity:activity:1.7.0-beta01' - implementation(platform("org.jetbrains.kotlin:kotlin-bom:1.8.0")) - implementation 'androidx.recyclerview:recyclerview:1.2.1' - implementation 'androidx.constraintlayout:constraintlayout:2.1.3' - - implementation 'com.google.android.material:material:1.5.0' - implementation 'androidx.viewpager2:viewpager2:1.0.0' - - implementation 'com.github.bumptech.glide:glide:4.13.0' - annotationProcessor 'com.github.bumptech.glide:compiler:4.13.0' -} - diff --git a/uikit-custom-sample/google-services.json b/uikit-custom-sample/google-services.json deleted file mode 100644 index e1093147..00000000 --- a/uikit-custom-sample/google-services.json +++ /dev/null @@ -1,98 +0,0 @@ -{ - "project_info": { - "project_number": "45318056021", - "firebase_url": "https://sample-android-uikit.firebaseio.com", - "project_id": "sample-android-uikit", - "storage_bucket": "sample-android-uikit.appspot.com" - }, - "client": [ - { - "client_info": { - "mobilesdk_app_id": "1:45318056021:android:54331c18dc2a59c97e8cdc", - "android_client_info": { - "package_name": "com.sendbird.orange_sample" - } - }, - "oauth_client": [ - { - "client_id": "45318056021-79pcjv9ifmjj53nh5aphgkrdm0ns31f2.apps.googleusercontent.com", - "client_type": 3 - } - ], - "api_key": [ - { - "current_key": "AIzaSyC71JAO4Gu5nHXTengB7qf4fptqx9EmVvI" - } - ], - "services": { - "appinvite_service": { - "other_platform_oauth_client": [ - { - "client_id": "45318056021-79pcjv9ifmjj53nh5aphgkrdm0ns31f2.apps.googleusercontent.com", - "client_type": 3 - } - ] - } - } - }, - { - "client_info": { - "mobilesdk_app_id": "1:45318056021:android:5e77060a31abc51a7e8cdc", - "android_client_info": { - "package_name": "com.sendbird.uikit.customsample" - } - }, - "oauth_client": [ - { - "client_id": "45318056021-79pcjv9ifmjj53nh5aphgkrdm0ns31f2.apps.googleusercontent.com", - "client_type": 3 - } - ], - "api_key": [ - { - "current_key": "AIzaSyC71JAO4Gu5nHXTengB7qf4fptqx9EmVvI" - } - ], - "services": { - "appinvite_service": { - "other_platform_oauth_client": [ - { - "client_id": "45318056021-79pcjv9ifmjj53nh5aphgkrdm0ns31f2.apps.googleusercontent.com", - "client_type": 3 - } - ] - } - } - }, - { - "client_info": { - "mobilesdk_app_id": "1:45318056021:android:9351cabdc8e2eb1b7e8cdc", - "android_client_info": { - "package_name": "com.sendbird.uikit.sample" - } - }, - "oauth_client": [ - { - "client_id": "45318056021-79pcjv9ifmjj53nh5aphgkrdm0ns31f2.apps.googleusercontent.com", - "client_type": 3 - } - ], - "api_key": [ - { - "current_key": "AIzaSyC71JAO4Gu5nHXTengB7qf4fptqx9EmVvI" - } - ], - "services": { - "appinvite_service": { - "other_platform_oauth_client": [ - { - "client_id": "45318056021-79pcjv9ifmjj53nh5aphgkrdm0ns31f2.apps.googleusercontent.com", - "client_type": 3 - } - ] - } - } - } - ], - "configuration_version": "1" -} \ No newline at end of file diff --git a/uikit-custom-sample/src/main/java/com/sendbird/uikit/customsample/BaseApplication.java b/uikit-custom-sample/src/main/java/com/sendbird/uikit/customsample/BaseApplication.java deleted file mode 100644 index f97aa60d..00000000 --- a/uikit-custom-sample/src/main/java/com/sendbird/uikit/customsample/BaseApplication.java +++ /dev/null @@ -1,248 +0,0 @@ -package com.sendbird.uikit.customsample; - - -import androidx.annotation.NonNull; -import androidx.annotation.Nullable; -import androidx.lifecycle.LiveData; -import androidx.lifecycle.MutableLiveData; -import androidx.multidex.MultiDexApplication; - -import com.sendbird.android.SendbirdChat; -import com.sendbird.android.exception.SendbirdError; -import com.sendbird.android.exception.SendbirdException; -import com.sendbird.android.handler.InitResultHandler; -import com.sendbird.android.params.ApplicationUserListQueryParams; -import com.sendbird.android.params.FileMessageCreateParams; -import com.sendbird.android.params.GroupChannelCreateParams; -import com.sendbird.android.params.GroupChannelUpdateParams; -import com.sendbird.android.params.OpenChannelCreateParams; -import com.sendbird.android.params.OpenChannelUpdateParams; -import com.sendbird.android.params.UserMessageCreateParams; -import com.sendbird.android.params.UserMessageUpdateParams; -import com.sendbird.android.user.User; -import com.sendbird.android.user.query.ApplicationUserListQuery; -import com.sendbird.uikit.SendbirdUIKit; -import com.sendbird.uikit.adapter.SendbirdUIKitAdapter; -import com.sendbird.uikit.consts.ReplyType; -import com.sendbird.uikit.consts.ThreadReplySelectType; -import com.sendbird.uikit.customsample.consts.InitState; -import com.sendbird.uikit.customsample.consts.StringSet; -import com.sendbird.uikit.customsample.fcm.MyFirebaseMessagingService; -import com.sendbird.uikit.customsample.models.CustomUser; -import com.sendbird.uikit.customsample.utils.PreferenceUtils; -import com.sendbird.uikit.customsample.utils.PushUtils; -import com.sendbird.uikit.interfaces.CustomParamsHandler; -import com.sendbird.uikit.interfaces.CustomUserListQueryHandler; -import com.sendbird.uikit.interfaces.OnListResultHandler; -import com.sendbird.uikit.interfaces.UserInfo; -import com.sendbird.uikit.log.Logger; -import com.sendbird.uikit.model.UserMentionConfig; -import com.sendbird.uikit.model.configurations.UIKitConfig; - -import java.util.ArrayList; -import java.util.List; - -/** - * Base application to initialize Sendbird UIKit. - */ -public class BaseApplication extends MultiDexApplication { - - private static final String APP_ID = "2D7B4CDB-932F-4082-9B09-A1153792DC8D"; - private static final MutableLiveData initState = new MutableLiveData<>(); - - /** - * Initializes Sendbird UIKit - */ - @Override - public void onCreate() { - super.onCreate(); - PreferenceUtils.init(getApplicationContext()); - - SendbirdUIKit.init(new SendbirdUIKitAdapter() { - @NonNull - @Override - public String getAppId() { - return APP_ID; - } - - @Override - public String getAccessToken() { - return ""; - } - - @NonNull - @Override - public UserInfo getUserInfo() { - return new UserInfo() { - @NonNull - @Override - public String getUserId() { - return PreferenceUtils.getUserId(); - } - - @Override - public String getNickname() { - return PreferenceUtils.getNickname(); - } - - @Override - public String getProfileUrl() { - return PreferenceUtils.getProfileUrl(); - } - }; - } - - @NonNull - @Override - public InitResultHandler getInitResultHandler() { - return new InitResultHandler() { - @Override - public void onMigrationStarted() { - initState.setValue(InitState.MIGRATING); - } - - @Override - public void onInitFailed(@NonNull SendbirdException e) { - initState.setValue(InitState.FAILED); - } - - @Override - public void onInitSucceed() { - // register push notification - PushUtils.registerPushHandler(new MyFirebaseMessagingService()); - SendbirdUIKit.setDefaultThemeMode(SendbirdUIKit.ThemeMode.Light); - // set logger - SendbirdUIKit.setLogLevel(SendbirdUIKit.LogLevel.ALL); - // set whether to use user profile - UIKitConfig.getCommon().setEnableUsingDefaultUserProfile(false); - // set reply type - UIKitConfig.getGroupChannelConfig().setReplyType(ReplyType.THREAD); - UIKitConfig.getGroupChannelConfig().setThreadReplySelectType(ThreadReplySelectType.THREAD); - // set custom user list query - SendbirdUIKit.setCustomUserListQueryHandler(getCustomUserListQuery()); - initState.setValue(InitState.SUCCEED); - } - }; - } - }, this); - - // set custom params - SendbirdUIKit.setCustomParamsHandler(new CustomParamsHandler() { - @Override - public void onBeforeCreateGroupChannel(@NonNull GroupChannelCreateParams groupChannelParams) { - // You can set GroupChannelParams globally before creating a channel. - } - - @Override - public void onBeforeUpdateGroupChannel(@NonNull GroupChannelUpdateParams groupChannelParams) { - // You can set GroupChannelParams globally before updating a channel. - } - - @Override - public void onBeforeSendUserMessage(@NonNull UserMessageCreateParams userMessageParams) { - // You can set UserMessageParams globally before sending a text message. - } - - @Override - public void onBeforeSendFileMessage(@NonNull FileMessageCreateParams fileMessageParams) { - // You can set FileMessageParams globally before sending a binary file message. - } - - @Override - public void onBeforeUpdateUserMessage(@NonNull UserMessageUpdateParams userMessageParams) { - // You can set UserMessageParams globally before updating a text message. - } - - @Override - public void onBeforeUpdateOpenChannel(@NonNull OpenChannelUpdateParams openChannelParams) { - // You can set OpenChannelParams globally before updating a channel. - } - - @Override - public void onBeforeCreateOpenChannel(@NonNull OpenChannelCreateParams params) { - // You can set OpenChannelCreateParams globally before creating a open channel. - params.setCustomType(StringSet.SB_COMMUNITY_TYPE); - } - }); - - // set custom UIKit fragment factory - SendbirdUIKit.setUIKitFragmentFactory(new CustomFragmentFactory()); - // set whether to use user mention - UIKitConfig.getGroupChannelConfig().setEnableMention(true); - // set the voice message - UIKitConfig.getGroupChannelConfig().setEnableVoiceMessage(true); - // set whether to use Multiple Files Message - UIKitConfig.getGroupChannelConfig().setEnableMultipleFilesMessage(true); - // set the mention configuration - SendbirdUIKit.setMentionConfig(new UserMentionConfig.Builder() - .setMaxMentionCount(5) - .setMaxSuggestionCount(10) - .build()); - } - - /** - * Returns the state of the result from initialization of Sendbird UIKit. - * - * @return the {@link InitState} instance - */ - @NonNull - public static LiveData initStateChanges() { - return initState; - } - - /** - * Returns the user list query to be used to retrieve user list. - * - * @return the {@link CustomUserListQueryHandler} instance - */ - @NonNull - public static CustomUserListQueryHandler getCustomUserListQuery() { - return new CustomUserListQueryHandler() { - @Nullable - ApplicationUserListQuery userListQuery = null; - @Override - public void loadInitial(@NonNull OnListResultHandler handler) { - final ApplicationUserListQueryParams params = new ApplicationUserListQueryParams(); - params.setLimit(3); - userListQuery = SendbirdChat.createApplicationUserListQuery(params); - userListQuery.next((list, e) -> { - if (e != null || list == null) { - if (e != null && e.getCode() == SendbirdError.ERR_NON_AUTHORIZED) { - Logger.w("An error occurred because you don't have access to the user list in your application. " + - "In order to gain access, you can turn on this attribute in the Access Control List settings on Sendbird Dashboard."); - } - return; - } - - final List customUserList = new ArrayList<>(); - for (User user : list) { - customUserList.add(new CustomUser(user)); - } - handler.onResult(customUserList, null); - }); - } - - @Override - public void loadMore(@NonNull OnListResultHandler handler) { - if (userListQuery == null) return; - userListQuery.next((list, e) -> { - if (e != null || list == null) { - return; - } - - List customUserList = new ArrayList<>(); - for (User user : list) { - customUserList.add(new CustomUser(user)); - } - handler.onResult(customUserList, null); - }); - } - - @Override - public boolean hasMore() { - if (userListQuery == null) return false; - return userListQuery.getHasNext(); - } - }; - } -} diff --git a/uikit-custom-sample/src/main/java/com/sendbird/uikit/customsample/CustomFragmentFactory.java b/uikit-custom-sample/src/main/java/com/sendbird/uikit/customsample/CustomFragmentFactory.java deleted file mode 100644 index a00a9501..00000000 --- a/uikit-custom-sample/src/main/java/com/sendbird/uikit/customsample/CustomFragmentFactory.java +++ /dev/null @@ -1,151 +0,0 @@ -package com.sendbird.uikit.customsample; - -import android.os.Bundle; - -import androidx.annotation.NonNull; -import androidx.fragment.app.Fragment; - -import com.sendbird.uikit.consts.CreatableChannelType; -import com.sendbird.uikit.customsample.groupchannel.fragments.CustomBannedUserListFragment; -import com.sendbird.uikit.customsample.groupchannel.fragments.CustomChannelFragment; -import com.sendbird.uikit.customsample.groupchannel.fragments.CustomChannelListFragment; -import com.sendbird.uikit.customsample.groupchannel.fragments.CustomChannelSettingsFragment; -import com.sendbird.uikit.customsample.groupchannel.fragments.CustomCreateChannelFragment; -import com.sendbird.uikit.customsample.groupchannel.fragments.CustomInviteUserFragment; -import com.sendbird.uikit.customsample.groupchannel.fragments.CustomMemberListFragment; -import com.sendbird.uikit.customsample.groupchannel.fragments.CustomMessageSearchFragment; -import com.sendbird.uikit.customsample.groupchannel.fragments.CustomModerationFragment; -import com.sendbird.uikit.customsample.groupchannel.fragments.CustomMutedMemberListFragment; -import com.sendbird.uikit.customsample.groupchannel.fragments.CustomOperatorListFragment; -import com.sendbird.uikit.customsample.groupchannel.fragments.CustomParticipantListFragment; -import com.sendbird.uikit.customsample.groupchannel.fragments.CustomRegisterOperatorFragment; -import com.sendbird.uikit.customsample.openchannel.CustomCreateOpenChannelFragment; -import com.sendbird.uikit.customsample.openchannel.CustomOpenChannelSettingsFragment; -import com.sendbird.uikit.fragments.ChannelFragment; -import com.sendbird.uikit.fragments.UIKitFragmentFactory; - -/** - * UIKit fragment factory implementation to provide customized fragments. - */ -public class CustomFragmentFactory extends UIKitFragmentFactory { - @NonNull - @Override - public Fragment newChannelListFragment(@NonNull Bundle args) { - final Fragment fragment = new CustomChannelListFragment(); - fragment.setArguments(args); - return fragment; - } - - @NonNull - @Override - public Fragment newChannelFragment(@NonNull String channelUrl, @NonNull Bundle args) { - return new ChannelFragment.Builder(channelUrl) - .setCustomFragment(new CustomChannelFragment()) - .withArguments(args) - .build(); - } - - @NonNull - @Override - public Fragment newMessageSearchFragment(@NonNull String channelUrl, @NonNull Bundle args) { - final Fragment fragment = new CustomMessageSearchFragment(); - fragment.setArguments(args); - return fragment; - } - - @NonNull - @Override - public Fragment newCreateChannelFragment(@NonNull CreatableChannelType channelType, @NonNull Bundle args) { - final Fragment fragment = new CustomCreateChannelFragment(); - fragment.setArguments(args); - return fragment; - } - - @NonNull - @Override - public Fragment newChannelSettingsFragment(@NonNull String channelUrl, @NonNull Bundle args) { - final Fragment fragment = new CustomChannelSettingsFragment(); - fragment.setArguments(args); - return fragment; - } - - @NonNull - @Override - public Fragment newInviteUserFragment(@NonNull String channelUrl, @NonNull Bundle args) { - final Fragment fragment = new CustomInviteUserFragment(); - fragment.setArguments(args); - return fragment; - } - - @NonNull - @Override - public Fragment newRegisterOperatorFragment(@NonNull String channelUrl, @NonNull Bundle args) { - final Fragment fragment = new CustomRegisterOperatorFragment(); - fragment.setArguments(args); - return fragment; - } - - @NonNull - @Override - public Fragment newModerationFragment(@NonNull String channelUrl, @NonNull Bundle args) { - final Fragment fragment = new CustomModerationFragment(); - fragment.setArguments(args); - return fragment; - } - - @NonNull - @Override - public Fragment newMemberListFragment(@NonNull String channelUrl, @NonNull Bundle args) { - final Fragment fragment = new CustomMemberListFragment(); - fragment.setArguments(args); - return fragment; - } - - @NonNull - @Override - public Fragment newBannedUserListFragment(@NonNull String channelUrl, @NonNull Bundle args) { - final Fragment fragment = new CustomBannedUserListFragment(); - fragment.setArguments(args); - return fragment; - } - - @NonNull - @Override - public Fragment newOperatorListFragment(@NonNull String channelUrl, @NonNull Bundle args) { - final Fragment fragment = new CustomOperatorListFragment(); - fragment.setArguments(args); - return fragment; - } - - @NonNull - @Override - public Fragment newMutedMemberListFragment(@NonNull String channelUrl, @NonNull Bundle args) { - final Fragment fragment = new CustomMutedMemberListFragment(); - fragment.setArguments(args); - return fragment; - } - - @NonNull - @Override - public Fragment newParticipantListFragment(@NonNull String channelUrl, @NonNull Bundle args) { - final Fragment fragment = new CustomParticipantListFragment(); - fragment.setArguments(args); - return fragment; - } - - @NonNull - @Override - public Fragment newOpenChannelSettingsFragment(@NonNull String channelUrl, @NonNull Bundle args) { - final CustomOpenChannelSettingsFragment fragment = new CustomOpenChannelSettingsFragment(); - fragment.setArguments(args); - return fragment; - } - - @NonNull - @Override - public Fragment newCreateOpenChannelFragment(@NonNull Bundle args) { - final CustomCreateOpenChannelFragment fragment = new CustomCreateOpenChannelFragment(); - fragment.setArguments(args); - return fragment; - } -} diff --git a/uikit-custom-sample/src/main/java/com/sendbird/uikit/customsample/HomeActivity.java b/uikit-custom-sample/src/main/java/com/sendbird/uikit/customsample/HomeActivity.java deleted file mode 100644 index 53ca3bd0..00000000 --- a/uikit-custom-sample/src/main/java/com/sendbird/uikit/customsample/HomeActivity.java +++ /dev/null @@ -1,177 +0,0 @@ -package com.sendbird.uikit.customsample; - -import android.Manifest; -import android.app.NotificationManager; -import android.content.Context; -import android.content.Intent; -import android.net.Uri; -import android.os.Build; -import android.os.Bundle; -import android.provider.Settings; -import android.view.View; - -import androidx.activity.result.ActivityResultLauncher; -import androidx.activity.result.contract.ActivityResultContracts; -import androidx.annotation.NonNull; -import androidx.annotation.Nullable; -import androidx.appcompat.app.AlertDialog; -import androidx.appcompat.app.AppCompatActivity; -import androidx.core.app.ActivityCompat; -import androidx.core.content.ContextCompat; -import androidx.core.content.PermissionChecker; - -import com.sendbird.android.SendbirdChat; -import com.sendbird.android.exception.SendbirdException; -import com.sendbird.android.handler.PushRequestCompleteHandler; -import com.sendbird.android.handler.UserEventHandler; -import com.sendbird.android.params.GroupChannelTotalUnreadMessageCountParams; -import com.sendbird.android.user.User; -import com.sendbird.uikit.BuildConfig; -import com.sendbird.uikit.SendbirdUIKit; -import com.sendbird.uikit.customsample.databinding.ActivityHomeBinding; -import com.sendbird.uikit.customsample.groupchannel.GroupChannelMainActivity; -import com.sendbird.uikit.customsample.openchannel.OpenChannelMainActivity; -import com.sendbird.uikit.customsample.utils.PreferenceUtils; -import com.sendbird.uikit.customsample.utils.PushUtils; -import com.sendbird.uikit.customsample.widgets.WaitingDialog; -import com.sendbird.uikit.utils.ContextUtils; - -import java.util.List; -import java.util.Locale; -import java.util.Map; - -/** - * Displays a channel select screen. - */ -public class HomeActivity extends AppCompatActivity { - private ActivityHomeBinding binding; - private static final String USER_EVENT_HANDLER_KEY = "USER_EVENT_HANDLER_KEY" + System.currentTimeMillis(); - - @NonNull - private final ActivityResultLauncher requestPermissionLauncher = registerForActivityResult(new ActivityResultContracts.RequestPermission(), isGranted -> {}); - @NonNull - private final ActivityResultLauncher appSettingLauncher = registerForActivityResult(new ActivityResultContracts.StartActivityForResult(), intent -> {}); - - @Override - protected void onCreate(@Nullable Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - binding = ActivityHomeBinding.inflate(getLayoutInflater()); - View view = binding.getRoot(); - setContentView(view); - String sdkVersion = String.format(getResources().getString(R.string.text_version_info), BuildConfig.VERSION_NAME, SendbirdChat.getSdkVersion()); - binding.tvVersionInfo.setText(sdkVersion); - - binding.groupChannelButton.setOnClickListener(v -> clickGroupChannel()); - binding.openChannelButton.setOnClickListener(v -> clickOpenChannel()); - binding.btSignOut.setOnClickListener(v -> signOut()); - - binding.tvUnreadCount.setTextAppearance(this, R.style.SendbirdCaption3OnDark01); - binding.tvUnreadCount.setBackgroundResource(R.drawable.shape_badge_background); - - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) { - final String permission = Manifest.permission.POST_NOTIFICATIONS; - if (ContextCompat.checkSelfPermission(this, permission) == PermissionChecker.PERMISSION_GRANTED) { - return; - } - if (ActivityCompat.shouldShowRequestPermissionRationale(this, permission)) { - showPermissionRationalePopup(permission); - return; - } - requestPermissionLauncher.launch(permission); - } - } - - @Override - protected void onResume() { - super.onResume(); - // initialize total unread count - SendbirdChat.getTotalUnreadMessageCount(new GroupChannelTotalUnreadMessageCountParams(), (totalCount, e) -> { - if (e != null) { - return; - } - - if (totalCount > 0) { - binding.tvUnreadCount.setVisibility(View.VISIBLE); - binding.tvUnreadCount.setText(totalCount > 99 ? - getString(R.string.text_tab_badge_max_count) : - String.valueOf(totalCount)); - } else { - binding.tvUnreadCount.setVisibility(View.GONE); - } - }); - - // register total unread count event - SendbirdChat.addUserEventHandler(USER_EVENT_HANDLER_KEY, new UserEventHandler() { - @Override - public void onFriendsDiscovered(@NonNull List list) {} - - @Override - public void onTotalUnreadMessageCountChanged(int totalCount, @NonNull Map totalCountByCustomType) { - if (totalCount > 0) { - binding.tvUnreadCount.setVisibility(View.VISIBLE); - binding.tvUnreadCount.setText(totalCount > 99 ? - getString(R.string.text_tab_badge_max_count) : - String.valueOf(totalCount)); - } else { - binding.tvUnreadCount.setVisibility(View.GONE); - } - } - }); - } - - @Override - protected void onPause() { - super.onPause(); - SendbirdChat.removeUserEventHandler(USER_EVENT_HANDLER_KEY); - } - - private void clickGroupChannel() { - Intent intent = new Intent(this, GroupChannelMainActivity.class); - startActivity(intent); - } - - private void clickOpenChannel() { - Intent intent = new Intent(this, OpenChannelMainActivity.class); - startActivity(intent); - } - - private void signOut() { - WaitingDialog.show(this); - PushUtils.unregisterPushHandler(new PushRequestCompleteHandler() { - @Override - public void onComplete(boolean isActive, String token) { - SendbirdUIKit.disconnect(() -> { - WaitingDialog.dismiss(); - PreferenceUtils.clearAll(); - NotificationManager notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE); - notificationManager.cancelAll(); - startActivity(new Intent(HomeActivity.this, LoginActivity.class)); - finish(); - }); - } - - @Override - public void onError(@NonNull SendbirdException e) { - WaitingDialog.dismiss(); - } - }); - } - - private void showPermissionRationalePopup(@NonNull String permission) { - AlertDialog.Builder builder = new AlertDialog.Builder(this); - builder.setTitle(getString(com.sendbird.uikit.R.string.sb_text_dialog_permission_title)); - builder.setMessage(String.format(Locale.US, getString(R.string.sb_text_need_to_allow_permission_notification), ContextUtils.getApplicationName(this))); - builder.setPositiveButton(com.sendbird.uikit.R.string.sb_text_go_to_settings, (dialogInterface, i) -> { - Intent intent = new Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS); - intent.setAction(Settings.ACTION_APPLICATION_DETAILS_SETTINGS); - intent.addCategory(Intent.CATEGORY_DEFAULT); - intent.setData(Uri.parse("package:" + getPackageName())); - intent.addFlags(Intent.FLAG_ACTIVITY_NO_HISTORY); - intent.addFlags(Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS); - appSettingLauncher.launch(intent); - }); - AlertDialog dialog = builder.create(); - dialog.show(); - dialog.getButton(AlertDialog.BUTTON_POSITIVE).setTextColor(ContextCompat.getColor(this, com.sendbird.uikit.R.color.secondary_300)); - } -} diff --git a/uikit-custom-sample/src/main/java/com/sendbird/uikit/customsample/LoginActivity.java b/uikit-custom-sample/src/main/java/com/sendbird/uikit/customsample/LoginActivity.java deleted file mode 100644 index f8daeb50..00000000 --- a/uikit-custom-sample/src/main/java/com/sendbird/uikit/customsample/LoginActivity.java +++ /dev/null @@ -1,73 +0,0 @@ -package com.sendbird.uikit.customsample; - -import android.content.Intent; -import android.os.Bundle; -import android.widget.EditText; -import android.widget.TextView; - -import androidx.annotation.Nullable; -import androidx.appcompat.app.AppCompatActivity; - -import com.sendbird.android.SendbirdChat; -import com.sendbird.uikit.BuildConfig; -import com.sendbird.uikit.SendbirdUIKit; -import com.sendbird.uikit.customsample.fcm.MyFirebaseMessagingService; -import com.sendbird.uikit.customsample.utils.PreferenceUtils; -import com.sendbird.uikit.customsample.utils.PushUtils; -import com.sendbird.uikit.customsample.widgets.WaitingDialog; -import com.sendbird.uikit.log.Logger; -import com.sendbird.uikit.utils.TextUtils; - -/** - * Displays a login screen. - */ -public class LoginActivity extends AppCompatActivity { - - @Override - protected void onCreate(@Nullable Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - - setContentView(R.layout.activity_login); - - EditText etUserId = findViewById(R.id.etUserId); - EditText etNickname = findViewById(R.id.etNickname); - TextView tvVersion = findViewById(R.id.tvVersionInfo); - - etUserId.setSelectAllOnFocus(true); - etNickname.setSelectAllOnFocus(true); - - String sdkVersion = String.format(getResources().getString(R.string.text_version_info), BuildConfig.VERSION_NAME, SendbirdChat.getSdkVersion()); - tvVersion.setText(sdkVersion); - - findViewById(R.id.btSignIn).setOnClickListener(v -> { - String userId = etUserId.getText().toString(); - // Remove all spaces from userID - String userIdString = userId.replaceAll("\\s", ""); - - String userNickname = etNickname.getText().toString(); - if (TextUtils.isEmpty(userId) || TextUtils.isEmpty(userNickname)) { - return; - } - - PreferenceUtils.setUserId(userIdString); - PreferenceUtils.setNickname(userNickname); - - WaitingDialog.show(this); - SendbirdUIKit.connect((user, e) -> { - if (e != null) { - Logger.e(e); - WaitingDialog.dismiss(); - PreferenceUtils.clearAll(); - return; - } - WaitingDialog.dismiss(); - PreferenceUtils.setUserId(userIdString); - PreferenceUtils.setNickname(userNickname); - PushUtils.registerPushHandler(new MyFirebaseMessagingService()); - Intent intent = new Intent(LoginActivity.this, HomeActivity.class); - startActivity(intent); - finish(); - }); - }); - } -} diff --git a/uikit-custom-sample/src/main/java/com/sendbird/uikit/customsample/SettingsFragment.java b/uikit-custom-sample/src/main/java/com/sendbird/uikit/customsample/SettingsFragment.java deleted file mode 100644 index 67713cc5..00000000 --- a/uikit-custom-sample/src/main/java/com/sendbird/uikit/customsample/SettingsFragment.java +++ /dev/null @@ -1,366 +0,0 @@ -package com.sendbird.uikit.customsample; - -import static android.app.Activity.RESULT_OK; - -import android.Manifest; -import android.content.Context; -import android.content.Intent; -import android.net.Uri; -import android.os.Bundle; -import android.provider.Settings; -import android.view.LayoutInflater; -import android.view.View; -import android.view.ViewGroup; -import android.widget.TextView; - -import androidx.activity.result.ActivityResultLauncher; -import androidx.activity.result.contract.ActivityResultContracts; -import androidx.annotation.NonNull; -import androidx.annotation.Nullable; -import androidx.appcompat.app.AlertDialog; -import androidx.appcompat.widget.AppCompatImageView; -import androidx.appcompat.widget.SwitchCompat; -import androidx.appcompat.widget.Toolbar; -import androidx.core.content.ContextCompat; -import androidx.fragment.app.Fragment; - -import com.bumptech.glide.Glide; -import com.bumptech.glide.load.engine.DiskCacheStrategy; -import com.sendbird.android.SendbirdChat; -import com.sendbird.android.params.UserUpdateParams; -import com.sendbird.android.user.User; -import com.sendbird.uikit.SendbirdUIKit; -import com.sendbird.uikit.consts.DialogEditTextParams; -import com.sendbird.uikit.customsample.consts.StringSet; -import com.sendbird.uikit.customsample.utils.DrawableUtils; -import com.sendbird.uikit.customsample.utils.PreferenceUtils; -import com.sendbird.uikit.customsample.widgets.WaitingDialog; -import com.sendbird.uikit.interfaces.OnEditTextResultListener; -import com.sendbird.uikit.log.Logger; -import com.sendbird.uikit.model.DialogListItem; -import com.sendbird.uikit.utils.ContextUtils; -import com.sendbird.uikit.utils.DialogUtils; -import com.sendbird.uikit.utils.FileUtils; -import com.sendbird.uikit.utils.IntentUtils; -import com.sendbird.uikit.utils.PermissionUtils; -import com.sendbird.uikit.utils.TextUtils; - -import java.io.File; -import java.util.List; -import java.util.Locale; -import java.util.TimeZone; - -/** - * Displays a settings screen. - */ -public class SettingsFragment extends Fragment { - private final String[] REQUIRED_PERMISSIONS = PermissionUtils.CAMERA_PERMISSION; - - private AppCompatImageView profileImageView; - private TextView nicknameTextView; - private SwitchCompat disturbSwitch; - private Uri mediaUri; - - private final ActivityResultLauncher appSettingLauncher = registerForActivityResult(new ActivityResultContracts.StartActivityForResult(), intent -> { - if (getContext() == null) return; - final boolean hasPermission = PermissionUtils.hasPermissions(getContext(), REQUIRED_PERMISSIONS); - if (hasPermission) { - showMediaSelectDialog(); - } - }); - private final ActivityResultLauncher permissionLauncher = registerForActivityResult(new ActivityResultContracts.RequestMultiplePermissions(), permissionResults -> { - if (PermissionUtils.getNotGrantedPermissions(permissionResults).isEmpty()) { - showMediaSelectDialog(); - } - }); - - private final ActivityResultLauncher takeCameraLauncher = registerForActivityResult(new ActivityResultContracts.StartActivityForResult(), result -> { - SendbirdChat.setAutoBackgroundDetection(true); - int resultCode = result.getResultCode(); - - if (resultCode != RESULT_OK || getContext() == null) return; - final Uri mediaUri = this.mediaUri; - if (mediaUri != null) { - final File file = FileUtils.uriToFile(getContext().getApplicationContext(), mediaUri); - updateUserProfileImage(file); - } - }); - private final ActivityResultLauncher getContentLauncher = registerForActivityResult(new ActivityResultContracts.StartActivityForResult(), result -> { - SendbirdChat.setAutoBackgroundDetection(true); - final Intent intent = result.getData(); - int resultCode = result.getResultCode(); - - if (resultCode != RESULT_OK || intent == null || getContext() == null) return; - final Uri mediaUri = intent.getData(); - if (mediaUri != null) { - final File file = FileUtils.uriToFile(getContext().getApplicationContext(), mediaUri); - updateUserProfileImage(file); - } - }); - - @Override - public void onCreate(@Nullable Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - SendbirdUIKit.connect(null); - } - - @Nullable - @Override - public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { - return inflater.inflate(R.layout.fragment_settings, container, false); - } - - @Override - public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) { - super.onViewCreated(view, savedInstanceState); - initPage(view); - } - - @Override - public void onDestroy() { - super.onDestroy(); - SendbirdChat.setAutoBackgroundDetection(true); - } - - private void initPage(@NonNull View view) { - if (getContext() == null) { - return; - } - - Toolbar toolbar = view.findViewById(R.id.tbSettings); - toolbar.inflateMenu(R.menu.settings_menu); - toolbar.getMenu().findItem(R.id.action_edit_profile) - .getActionView().setOnClickListener(v -> { - Logger.d("++ edit button clicked"); - showEditProfileDialog(); - }); - - boolean useDoNotDisturb = true; - if (getArguments() != null) { - useDoNotDisturb = getArguments().getBoolean(StringSet.SETTINGS_USE_DO_NOT_DISTURB, true); - } - - profileImageView = view.findViewById(R.id.ivProfileView); - loadUserProfileUrl(PreferenceUtils.getProfileUrl()); - TextView userIdTextView = view.findViewById(R.id.tvUserId); - userIdTextView.setText(PreferenceUtils.getUserId()); - nicknameTextView = view.findViewById(R.id.tvNickname); - nicknameTextView.setText(PreferenceUtils.getNickname()); - - View disturbItem = view.findViewById(R.id.itemDisturb); - disturbItem.setVisibility(useDoNotDisturb ? View.VISIBLE : View.GONE); - if (useDoNotDisturb) { - disturbItem.setOnClickListener(v -> { - Logger.d("++ disturb clicked"); - updateDoNotDisturb(); - }); - - disturbSwitch = view.findViewById(R.id.scDisturbSwitch); - SendbirdChat.getDoNotDisturb((b, i, i1, i2, i3, s, e) -> { - PreferenceUtils.setDoNotDisturb(b); - disturbSwitch.setChecked(PreferenceUtils.getDoNotDisturb()); - }); - disturbSwitch.setOnClickListener(v -> { - Logger.d("++ disturb clicked"); - updateDoNotDisturb(); - }); - } - - View signOutItem = view.findViewById(R.id.itemHome); - signOutItem.setOnClickListener(v -> { - Logger.d("++ home clicked"); - if (getActivity() != null) { - getActivity().finish(); - } - }); - } - - private void showEditProfileDialog() { - if (getContext() == null || getFragmentManager() == null) return; - - DialogListItem[] items = { - new DialogListItem(R.string.text_settings_change_user_nickname), - new DialogListItem(R.string.text_settings_change_user_profile_image) - }; - - DialogUtils.showListBottomDialog(requireContext(), items, (v, p, item) -> { - final int key = item.getKey(); - if (key == R.string.text_settings_change_user_nickname) { - Logger.dev("change user nickname"); - OnEditTextResultListener listener = result -> { - if (TextUtils.isEmpty(result)) { - return; - } - updateUserNickname(result); - }; - - DialogEditTextParams params = new DialogEditTextParams(getString(com.sendbird.uikit.R.string.sb_text_channel_settings_change_channel_name_hint)); - params.setEnableSingleLine(true); - DialogUtils.showInputDialog( - requireContext(), - getString(R.string.text_settings_change_user_nickname), - params, listener, - getString(com.sendbird.uikit.R.string.sb_text_button_save), null, - getString(com.sendbird.uikit.R.string.sb_text_button_cancel), null); - } else if (key == R.string.text_settings_change_user_profile_image) { - Logger.dev("change user profile"); - - if (getContext() == null) return; - final boolean hasPermission = PermissionUtils.hasPermissions(getContext(), REQUIRED_PERMISSIONS); - if (hasPermission) { - showMediaSelectDialog(); - return; - } - - requestPermission(REQUIRED_PERMISSIONS); - } - }); - } - - private void requestPermission(@NonNull String[] permissions) { - if (getContext() == null || getActivity() == null) return; - // 1. check permission - final boolean hasPermission = PermissionUtils.hasPermissions(getContext(), permissions); - if (hasPermission) { - showMediaSelectDialog(); - return; - } - - // 2. determine whether rationale popup should show - final List deniedList = PermissionUtils.getExplicitDeniedPermissionList(getActivity(), permissions); - if (!deniedList.isEmpty()) { - showPermissionRationalePopup(deniedList.get(0)); - return; - } - // 3. request permission - this.permissionLauncher.launch(permissions); - } - - private void showPermissionRationalePopup(@NonNull String permission) { - AlertDialog.Builder builder = new AlertDialog.Builder(requireContext()); - builder.setTitle(getString(com.sendbird.uikit.R.string.sb_text_dialog_permission_title)); - builder.setMessage(getPermissionGuideMessage(requireContext(), permission)); - builder.setPositiveButton(com.sendbird.uikit.R.string.sb_text_go_to_settings, (dialogInterface, i) -> { - Intent intent = new Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS); - intent.setAction(Settings.ACTION_APPLICATION_DETAILS_SETTINGS); - intent.addCategory(Intent.CATEGORY_DEFAULT); - intent.setData(Uri.parse("package:" + requireContext().getPackageName())); - intent.addFlags(Intent.FLAG_ACTIVITY_NO_HISTORY); - intent.addFlags(Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS); - appSettingLauncher.launch(intent); - }); - AlertDialog dialog = builder.create(); - dialog.show(); - dialog.getButton(AlertDialog.BUTTON_POSITIVE).setTextColor(ContextCompat.getColor(requireContext(), com.sendbird.uikit.R.color.secondary_300)); - } - - private void updateUserNickname(@NonNull String nickname) { - if (getContext() == null) return; - WaitingDialog.show(getContext()); - final UserUpdateParams params = new UserUpdateParams(); - params.setNickname(nickname); - SendbirdUIKit.updateUserInfo(params, e -> { - WaitingDialog.dismiss(); - if (e != null) { - Logger.e(e); - return; - } - - PreferenceUtils.setNickname(nickname); - nicknameTextView.setText(nickname); - }); - } - - private void updateUserProfileImage(@NonNull File profileImage) { - if (getContext() == null) return; - WaitingDialog.show(getContext()); - final UserUpdateParams params = new UserUpdateParams(); - params.setProfileImageFile(profileImage); - SendbirdUIKit.updateUserInfo(params, e -> { - WaitingDialog.dismiss(); - if (e != null) { - Logger.e(e); - return; - } - - final User currentUser = SendbirdChat.getCurrentUser(); - if (currentUser != null) { - final String profileUrl = currentUser.getProfileUrl(); - PreferenceUtils.setProfileUrl(profileUrl); - loadUserProfileUrl(profileUrl); - } - }); - } - - private void updateDoNotDisturb() { - disturbSwitch.setChecked(!PreferenceUtils.getDoNotDisturb()); - Logger.d("update do not disturb : " + !PreferenceUtils.getDoNotDisturb()); - SendbirdChat.setDoNotDisturb(!PreferenceUtils.getDoNotDisturb(), 0, 0, 23, 59, TimeZone.getDefault().getID(), e -> { - if (e != null) { - disturbSwitch.setChecked(PreferenceUtils.getDoNotDisturb()); - return; - } - Logger.d("update do not disturb on callback : " + !PreferenceUtils.getDoNotDisturb()); - PreferenceUtils.setDoNotDisturb(!PreferenceUtils.getDoNotDisturb()); - }); - } - - private void showMediaSelectDialog() { - if (getContext() == null) return; - DialogListItem[] items = { - new DialogListItem(com.sendbird.uikit.R.string.sb_text_channel_settings_change_channel_image_camera), - new DialogListItem(com.sendbird.uikit.R.string.sb_text_channel_settings_change_channel_image_gallery)}; - - DialogUtils.showListDialog(requireContext(), - getString(com.sendbird.uikit.R.string.sb_text_channel_settings_change_channel_image), - items, (v, p, item) -> { - try { - final int key = item.getKey(); - if (key == com.sendbird.uikit.R.string.sb_text_channel_settings_change_channel_image_camera) { - takeCamera(); - } else if (key == com.sendbird.uikit.R.string.sb_text_channel_settings_change_channel_image_gallery) { - takePhoto(); - } - } catch (Exception e) { - Logger.e(e); - } - }); - } - - private void takeCamera() { - SendbirdChat.setAutoBackgroundDetection(false); - this.mediaUri = FileUtils.createImageFileUri(requireContext()); - if (mediaUri == null) return; - Intent intent = IntentUtils.getCameraIntent(requireContext(), mediaUri); - if (IntentUtils.hasIntent(requireContext(), intent)) { - takeCameraLauncher.launch(intent); - } - } - - private void takePhoto() { - SendbirdChat.setAutoBackgroundDetection(false); - Intent intent = IntentUtils.getImageGalleryIntent(); - getContentLauncher.launch(intent); - } - - private static String getPermissionGuideMessage(@NonNull Context context, @NonNull String permission) { - int textResId; - if (Manifest.permission.CAMERA.equals(permission)) { - textResId = com.sendbird.uikit.R.string.sb_text_need_to_allow_permission_camera; - } else { - textResId = com.sendbird.uikit.R.string.sb_text_need_to_allow_permission_storage; - } - return String.format(Locale.US, context.getString(textResId), ContextUtils.getApplicationName(context)); - } - - private void loadUserProfileUrl(final String url) { - if (getContext() != null) { - Glide.with(requireContext()) - .load(url) - .circleCrop() - .diskCacheStrategy(DiskCacheStrategy.ALL) - .error(DrawableUtils.setTintList(requireContext(), R.drawable.icon_user, SendbirdUIKit.getDefaultThemeMode().getMonoTintResId())) - .into(profileImageView); - } - } -} diff --git a/uikit-custom-sample/src/main/java/com/sendbird/uikit/customsample/SplashActivity.java b/uikit-custom-sample/src/main/java/com/sendbird/uikit/customsample/SplashActivity.java deleted file mode 100644 index ae510e5f..00000000 --- a/uikit-custom-sample/src/main/java/com/sendbird/uikit/customsample/SplashActivity.java +++ /dev/null @@ -1,57 +0,0 @@ -package com.sendbird.uikit.customsample; - -import android.content.Intent; -import android.os.Bundle; -import android.text.TextUtils; - -import androidx.annotation.Nullable; -import androidx.appcompat.app.AppCompatActivity; - -import com.sendbird.uikit.SendbirdUIKit; -import com.sendbird.uikit.customsample.utils.PreferenceUtils; -import com.sendbird.uikit.customsample.widgets.WaitingDialog; -import com.sendbird.uikit.log.Logger; - -/** - * Displays a splash screen. - */ -public class SplashActivity extends AppCompatActivity { - - @Override - protected void onCreate(@Nullable Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - setContentView(R.layout.activity_splash); - - BaseApplication.initStateChanges().observe(this, initState -> { - Logger.i("++ init state : %s", initState); - WaitingDialog.dismiss(); - switch (initState) { - case MIGRATING: - WaitingDialog.show(SplashActivity.this); - break; - case FAILED: - case SUCCEED: - String userId = PreferenceUtils.getUserId(); - if (!TextUtils.isEmpty(userId)) { - SendbirdUIKit.connect((user, e) -> { - startActivity(getNextIntent()); - finish(); - }); - } else { - startActivity(getNextIntent()); - finish(); - } - break; - } - }); - } - - private Intent getNextIntent() { - String userId = PreferenceUtils.getUserId(); - if (!TextUtils.isEmpty(userId)) { - return new Intent(SplashActivity.this, HomeActivity.class); - } - - return new Intent(SplashActivity.this, LoginActivity.class); - } -} diff --git a/uikit-custom-sample/src/main/java/com/sendbird/uikit/customsample/consts/InitState.java b/uikit-custom-sample/src/main/java/com/sendbird/uikit/customsample/consts/InitState.java deleted file mode 100644 index 1ec94f92..00000000 --- a/uikit-custom-sample/src/main/java/com/sendbird/uikit/customsample/consts/InitState.java +++ /dev/null @@ -1,20 +0,0 @@ -package com.sendbird.uikit.customsample.consts; - -/** - * Used with Sendbird UIKit initialization. - */ -public enum InitState { - /** - * Indicates the migrating state. - */ - MIGRATING, - /** - * Indicates the failed state. - */ - FAILED, - /** - * Indicates the succeeded state. - */ - SUCCEED, - ; -} diff --git a/uikit-custom-sample/src/main/java/com/sendbird/uikit/customsample/consts/StringSet.java b/uikit-custom-sample/src/main/java/com/sendbird/uikit/customsample/consts/StringSet.java deleted file mode 100644 index be53cfc4..00000000 --- a/uikit-custom-sample/src/main/java/com/sendbird/uikit/customsample/consts/StringSet.java +++ /dev/null @@ -1,31 +0,0 @@ -package com.sendbird.uikit.customsample.consts; - -public class StringSet { - public static final String CHANNEL_NAME = "CHANNEL_NAME"; - public static final String CHANNEL_ID = "CHANNEL_ID"; - public static final String KEY_CHANNEL_URL = "KEY_CHANNEL_URL"; - public static final String PUSH_REDIRECT_CHANNEL = "PUSH_REDIRECT_CHANNEL"; - public static final String PUSH_REDIRECT_MESSAGE_ID = "PUSH_REDIRECT_MESSAGE_ID"; - public static final String SETTINGS_USE_DO_NOT_DISTURB = "SETTINGS_USE_DO_NOT_DISTURB"; - public static final String KEY_INPUT_TEXT = "KEY_INPUT_TEXT"; - - public static final String sendbird = "sendbird"; - public static final String channel = "channel"; - public static final String channel_url = "channel_url"; - public static final String message_id = "message_id"; - public static final String message = "message"; - public static final String sender = "sender"; - public static final String name = "name"; - public static final String highlight = "highlight"; - public static final String profile_url = "profile_url"; - - public static final String id = "id"; - public static final String tags = "tags"; - public static final String creator_info = "creator_info"; - public static final String thumbnail_url = "thumbnail_url"; - public static final String live_channel_url = "live_channel_url"; - public static final String emoji_type = "emoji_type"; - - public static final String SB_LIVE_TYPE = "SB_LIVE_TYPE"; - public static final String SB_COMMUNITY_TYPE = "SB_COMMUNITY_TYPE"; -} diff --git a/uikit-custom-sample/src/main/java/com/sendbird/uikit/customsample/fcm/MyFirebaseMessagingService.java b/uikit-custom-sample/src/main/java/com/sendbird/uikit/customsample/fcm/MyFirebaseMessagingService.java deleted file mode 100644 index 27ca31b1..00000000 --- a/uikit-custom-sample/src/main/java/com/sendbird/uikit/customsample/fcm/MyFirebaseMessagingService.java +++ /dev/null @@ -1,131 +0,0 @@ -package com.sendbird.uikit.customsample.fcm; - -import android.annotation.SuppressLint; -import android.app.Notification; -import android.app.NotificationChannel; -import android.app.NotificationManager; -import android.app.PendingIntent; -import android.content.Context; -import android.content.Intent; -import android.graphics.BitmapFactory; -import android.media.RingtoneManager; -import android.net.Uri; -import android.os.Build; -import android.util.Log; - -import androidx.annotation.NonNull; -import androidx.annotation.Nullable; -import androidx.core.app.NotificationCompat; -import androidx.core.content.ContextCompat; - -import com.google.firebase.messaging.RemoteMessage; -import com.sendbird.android.SendbirdChat; -import com.sendbird.android.push.SendbirdPushHandler; -import com.sendbird.uikit.customsample.R; -import com.sendbird.uikit.customsample.consts.StringSet; -import com.sendbird.uikit.customsample.groupchannel.GroupChannelMainActivity; -import com.sendbird.uikit.log.Logger; - -import org.json.JSONException; -import org.json.JSONObject; - -import java.util.concurrent.atomic.AtomicReference; - -/** - * Concrete implementation of a sendbird push handler. - */ -public class MyFirebaseMessagingService extends SendbirdPushHandler { - - private static final String TAG = "MyFirebaseMsgService"; - private static final AtomicReference pushToken = new AtomicReference<>(); - - @Override - public boolean isUniquePushToken() { - return false; - } - - @Override - public void onNewToken(@Nullable String token) { - Log.i(TAG, "onNewToken(" + token + ")"); - pushToken.set(token); - } - - /** - * Called when message is received. - * - * @param remoteMessage Object representing the message received from Firebase Cloud Messaging. - */ - @Override - public void onMessageReceived(@Nullable Context context, @Nullable RemoteMessage remoteMessage) { - if (context == null || remoteMessage == null) return; - Logger.d("From: " + remoteMessage.getFrom()); - if (remoteMessage.getData().size() > 0) { - Logger.d( "Message data payload: " + remoteMessage.getData()); - } - - // Check if message contains a notification payload. - if (remoteMessage.getNotification() != null) { - Logger.d( "Message Notification Body: " + remoteMessage.getNotification().getBody()); - } - - try { - if (remoteMessage.getData().containsKey(StringSet.sendbird)) { - String jsonStr = remoteMessage.getData().get(StringSet.sendbird); - SendbirdChat.markAsDelivered(remoteMessage.getData()); - if (jsonStr != null) { - sendNotification(context, new JSONObject(jsonStr)); - } - } - } catch (JSONException e) { - Logger.e(e); - } - } - - /** - * Create and show a simple notification containing the received FCM message. - * - * @param sendBird JSONObject payload from FCM - */ - public static void sendNotification(@NonNull Context context, @NonNull JSONObject sendBird) throws JSONException { - String message = sendBird.getString(StringSet.message); - JSONObject channel = sendBird.getJSONObject(StringSet.channel); - String channelUrl = channel.getString(StringSet.channel_url); - long messageId = sendBird.getLong(StringSet.message_id); - - String senderName = context.getString(R.string.app_name); - if (sendBird.has(StringSet.sender)) { - JSONObject sender = sendBird.getJSONObject(StringSet.sender); - senderName = sender.getString(StringSet.name); - } - - NotificationManager notificationManager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE); - - final String CHANNEL_ID = StringSet.CHANNEL_ID; - if (Build.VERSION.SDK_INT >= 26) { // Build.VERSION_CODES.O - NotificationChannel mChannel = new NotificationChannel(CHANNEL_ID, StringSet.CHANNEL_NAME, NotificationManager.IMPORTANCE_HIGH); - notificationManager.createNotificationChannel(mChannel); - } - - Intent intent = GroupChannelMainActivity.newRedirectToChannelIntent(context, channelUrl, messageId); - intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); - @SuppressLint("UnspecifiedImmutableFlag") - PendingIntent pendingIntent = android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.M ? - PendingIntent.getActivity(context, (int) messageId /* Request code */, intent, PendingIntent.FLAG_IMMUTABLE) : - PendingIntent.getActivity(context, (int) messageId /* Request code */, intent, 0); - - Uri defaultSoundUri = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION); - NotificationCompat.Builder notificationBuilder = new NotificationCompat.Builder(context, CHANNEL_ID) - .setSmallIcon(R.drawable.icon_push_lollipop) - .setColor(ContextCompat.getColor(context, R.color.primary_300)) // small icon background color - .setLargeIcon(BitmapFactory.decodeResource(context.getResources(), R.drawable.icon_push_oreo)) - .setContentTitle(senderName) - .setAutoCancel(true) - .setSound(defaultSoundUri) - .setPriority(Notification.PRIORITY_MAX) - .setDefaults(Notification.DEFAULT_ALL) - .setContentIntent(pendingIntent); - notificationBuilder.setContentText(message); - - notificationManager.notify(String.valueOf(System.currentTimeMillis()), 0, notificationBuilder.build()); - } -} diff --git a/uikit-custom-sample/src/main/java/com/sendbird/uikit/customsample/groupchannel/GroupChannelMainActivity.java b/uikit-custom-sample/src/main/java/com/sendbird/uikit/customsample/groupchannel/GroupChannelMainActivity.java deleted file mode 100644 index 9e39fbe4..00000000 --- a/uikit-custom-sample/src/main/java/com/sendbird/uikit/customsample/groupchannel/GroupChannelMainActivity.java +++ /dev/null @@ -1,179 +0,0 @@ -package com.sendbird.uikit.customsample.groupchannel; - -import static com.sendbird.uikit.customsample.consts.StringSet.PUSH_REDIRECT_CHANNEL; -import static com.sendbird.uikit.customsample.consts.StringSet.PUSH_REDIRECT_MESSAGE_ID; - -import android.content.Context; -import android.content.Intent; -import android.os.Bundle; -import android.view.View; - -import androidx.annotation.NonNull; -import androidx.annotation.Nullable; -import androidx.appcompat.app.AppCompatActivity; -import androidx.fragment.app.Fragment; -import androidx.fragment.app.FragmentManager; -import androidx.fragment.app.FragmentPagerAdapter; -import androidx.viewpager.widget.ViewPager; - -import com.google.android.material.tabs.TabLayout; -import com.sendbird.android.SendbirdChat; -import com.sendbird.android.handler.UserEventHandler; -import com.sendbird.android.params.GroupChannelTotalUnreadMessageCountParams; -import com.sendbird.android.user.User; -import com.sendbird.uikit.activities.ChannelActivity; -import com.sendbird.uikit.customsample.R; -import com.sendbird.uikit.customsample.SettingsFragment; -import com.sendbird.uikit.customsample.widgets.CustomTabView; -import com.sendbird.uikit.providers.FragmentProviders; - -import java.util.List; -import java.util.Map; -import java.util.Objects; - -/** - * Displays a group channel list screen. - */ -public class GroupChannelMainActivity extends AppCompatActivity { - private static final String USER_EVENT_HANDLER_KEY = "USER_EVENT_HANDLER_KEY"; - private CustomTabView unreadCountTab; - private ViewPager mainPage; - - @Override - protected void onCreate(@Nullable Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - setContentView(R.layout.activity_main); - initPage(); - } - - private void initPage() { - mainPage = findViewById(R.id.vpMain); - mainPage.setAdapter(new MainAdapter(getSupportFragmentManager(), FragmentPagerAdapter.BEHAVIOR_RESUME_ONLY_CURRENT_FRAGMENT)); - - TabLayout tabLayout = findViewById(R.id.tlMain); - tabLayout.setupWithViewPager(mainPage); - - unreadCountTab = new CustomTabView(this); - unreadCountTab.setBadgeVisibility(View.GONE); - unreadCountTab.setTitle(getString(R.string.text_tab_channels)); - unreadCountTab.setIcon(R.drawable.icon_chat_filled); - - CustomTabView settingsTab = new CustomTabView(this); - settingsTab.setBadgeVisibility(View.GONE); - settingsTab.setTitle(getString(R.string.text_tab_settings)); - settingsTab.setIcon(R.drawable.icon_settings_filled); - - Objects.requireNonNull(tabLayout.getTabAt(0)).setCustomView(unreadCountTab); - Objects.requireNonNull(tabLayout.getTabAt(1)).setCustomView(settingsTab); - - redirectChannelIfNeeded(getIntent()); - } - - @Override - protected void onResume() { - super.onResume(); - SendbirdChat.getTotalUnreadMessageCount(new GroupChannelTotalUnreadMessageCountParams(), (totalCount, e) -> { - if (e != null) { - return; - } - - if (totalCount > 0) { - unreadCountTab.setBadgeVisibility(View.VISIBLE); - unreadCountTab.setBadgeCount(totalCount > 99 ? - getString(R.string.text_tab_badge_max_count) : - String.valueOf(totalCount)); - } else { - unreadCountTab.setBadgeVisibility(View.GONE); - } - }); - - SendbirdChat.addUserEventHandler(USER_EVENT_HANDLER_KEY, new UserEventHandler() { - @Override - public void onFriendsDiscovered(@NonNull List list) {} - - @Override - public void onTotalUnreadMessageCountChanged(int totalCount, @NonNull Map totalCountByCustomType) { - if (totalCount > 0) { - unreadCountTab.setBadgeVisibility(View.VISIBLE); - unreadCountTab.setBadgeCount(totalCount > 99 ? - getString(R.string.text_tab_badge_max_count) : - String.valueOf(totalCount)); - } else { - unreadCountTab.setBadgeVisibility(View.GONE); - } - } - }); - } - - @Override - protected void onPause() { - super.onPause(); - SendbirdChat.removeUserEventHandler(USER_EVENT_HANDLER_KEY); - } - - @Override - protected void onNewIntent(@Nullable Intent intent) { - super.onNewIntent(intent); - redirectChannelIfNeeded(intent); - } - - @NonNull - public static Intent newRedirectToChannelIntent(@NonNull Context context, - @NonNull String channelUrl, - long messageId) { - Intent intent = new Intent(context, GroupChannelMainActivity.class); - intent.putExtra(PUSH_REDIRECT_CHANNEL, channelUrl); - intent.putExtra(PUSH_REDIRECT_MESSAGE_ID, messageId); - return intent; - } - - private void redirectChannelIfNeeded(Intent intent) { - if (intent == null) return; - - if ((intent.getFlags() & Intent.FLAG_ACTIVITY_LAUNCHED_FROM_HISTORY) == Intent.FLAG_ACTIVITY_LAUNCHED_FROM_HISTORY) { - intent.removeExtra(PUSH_REDIRECT_CHANNEL); - intent.removeExtra(PUSH_REDIRECT_MESSAGE_ID); - } - if (intent.hasExtra(PUSH_REDIRECT_CHANNEL)) { - String channelUrl = intent.getStringExtra(PUSH_REDIRECT_CHANNEL); - - if (intent.hasExtra(PUSH_REDIRECT_MESSAGE_ID)) { - long messageId = intent.getLongExtra(PUSH_REDIRECT_MESSAGE_ID, 0L); - if (messageId > 0L) { - startActivity(ChannelActivity.newRedirectToMessageThreadIntent(this, channelUrl, messageId)); - intent.removeExtra(PUSH_REDIRECT_MESSAGE_ID); - } - } else { - startActivity(ChannelActivity.newIntent(this, channelUrl)); - } - intent.removeExtra(PUSH_REDIRECT_CHANNEL); - } - } - - public void moveToSettings() { - mainPage.setCurrentItem(1); - } - - private static class MainAdapter extends FragmentPagerAdapter { - private static final int PAGE_SIZE = 2; - - public MainAdapter(@NonNull FragmentManager fm, int behavior) { - super(fm, behavior); - } - - @NonNull - @Override - public Fragment getItem(int position) { - if (position == 0) { - return FragmentProviders.getChannelList().provide(new Bundle()); - } else { - return new SettingsFragment(); - } - } - - @Override - public int getCount() { - return PAGE_SIZE; - } - } -} diff --git a/uikit-custom-sample/src/main/java/com/sendbird/uikit/customsample/groupchannel/components/CustomChannelHeaderComponent.java b/uikit-custom-sample/src/main/java/com/sendbird/uikit/customsample/groupchannel/components/CustomChannelHeaderComponent.java deleted file mode 100644 index adadc4e9..00000000 --- a/uikit-custom-sample/src/main/java/com/sendbird/uikit/customsample/groupchannel/components/CustomChannelHeaderComponent.java +++ /dev/null @@ -1,69 +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.android.channel.GroupChannel; -import com.sendbird.uikit.customsample.R; -import com.sendbird.uikit.log.Logger; -import com.sendbird.uikit.modules.components.ChannelHeaderComponent; - -/** - * Implements the customized 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 b75d200b..00000000 --- a/uikit-custom-sample/src/main/java/com/sendbird/uikit/customsample/groupchannel/components/CustomMessageInputComponent.java +++ /dev/null @@ -1,288 +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 onHighlightCheckedListener; - @Nullable - private View.OnClickListener onMenuCameraClickListener; - @Nullable - private View.OnClickListener onMenuPhotoClickListener; - @Nullable - private View.OnClickListener onMenuFileClickListener; - @Nullable - private View.OnClickListener onVoiceMessageClickListener; - @Nullable - private OnItemClickListener onEmojiClickListener; - @NonNull - private MessageInputView.Mode mode = MessageInputView.Mode.DEFAULT; - @NonNull - private final EmojiAdapter adapter = new EmojiAdapter(); - private boolean isLeftClosed = false; - - public CustomMessageInputComponent() { - super(); - } - - @Nullable - @Override - public View getRootView() { - return binding.getRoot(); - } - - - @Nullable - @Override - public EditText getEditTextView() { - return binding.input; - } - - @Override - public void notifyChannelChanged(@NonNull GroupChannel channel) { - super.notifyChannelChanged(channel); - this.channel = channel; - } - - @NonNull - @Override - public View onCreateView(@NonNull Context context, @NonNull LayoutInflater inflater, @NonNull ViewGroup parent, @Nullable Bundle savedInstanceState) { - binding = ViewCustomChannelInputBinding.inflate(inflater, null, false); - binding.emojiPanel.setLayoutManager(new GridLayoutManager(context, 6)); - binding.emojiPanel.setAdapter(adapter); - binding.sendButton.setOnClickListener(this::onInputRightButtonClicked); - binding.leftButton.setOnClickListener(v -> { - if (isLeftClosed) { - requestInputMode(MessageInputView.Mode.DEFAULT); - if (channel != null) { - notifyDataChanged(null, channel); - } - } else { - requestInputMode(MODE_MENU); - } - }); - binding.emojiButton.setOnClickListener(v -> { - if (isLeftClosed) { - requestInputMode(MessageInputView.Mode.DEFAULT); - if (channel != null) { - notifyDataChanged(null, channel); - } - } else { - requestInputMode(MODE_EMOJI); - } - }); - binding.highlightSwitch.setOnCheckedChangeListener((buttonView, isChecked) -> { - if (onHighlightCheckedListener != null) onHighlightCheckedListener.onCheckedChanged(buttonView, isChecked); - }); - binding.camera.setOnClickListener(v -> { - if (onMenuCameraClickListener != null) onMenuCameraClickListener.onClick(v); - }); - binding.photo.setOnClickListener(v -> { - if (onMenuPhotoClickListener != null) onMenuPhotoClickListener.onClick(v); - }); - binding.file.setOnClickListener(v -> { - if (onMenuFileClickListener != null) onMenuFileClickListener.onClick(v); - }); - binding.voiceMessageButton.setOnClickListener(v -> { - if (onVoiceMessageClickListener != null) onVoiceMessageClickListener.onClick(v); - }); - binding.input.addTextChangedListener(new TextWatcher() { - @Override - public void beforeTextChanged(CharSequence s, int start, int count, int after) {} - - @Override - public void onTextChanged(CharSequence s, int start, int before, int count) { - onInputTextChanged(s, start, before, count); - } - - @Override - public void afterTextChanged(Editable s) {} - }); - - adapter.emojiClickListener = onEmojiClickListener; - return binding.getRoot(); - } - - @Override - public void notifyDataChanged(@Nullable BaseMessage message, @NonNull GroupChannel channel, @NonNull String defaultValue) { - super.notifyDataChanged(message, channel, defaultValue); - - if (mode == MessageInputView.Mode.QUOTE_REPLY) { - if (message != null) { - binding.replyPanel.setText(message.getMessage()); - binding.replyPanel.setVisibility(View.VISIBLE); - } - } else if (mode == MessageInputView.Mode.EDIT) { - if (message != null) { - String customType = message.getCustomType(); - if (!TextUtils.isEmpty(customType) && - customType.equals(StringSet.highlight)) { - binding.highlightSwitch.setChecked(true); - } - binding.input.setText(message.getMessage()); - } - } else { - binding.input.setText(defaultValue); - } - } - - @Override - public void requestInputMode(@NonNull MessageInputView.Mode mode) { - final MessageInputView.Mode before = this.mode; - this.mode = mode; - - if (mode == MessageInputView.Mode.QUOTE_REPLY) { - binding.sendButton.setOnClickListener(this::onInputRightButtonClicked); - binding.emojiPanel.setVisibility(View.GONE); - binding.highlightSwitch.setChecked(false); - binding.menuPanel.setVisibility(View.GONE); - setLeftButton(true); - } else if (mode == MessageInputView.Mode.EDIT) { - binding.sendButton.setOnClickListener(this::onEditModeSaveButtonClicked); - binding.replyPanel.setVisibility(View.GONE); - binding.emojiPanel.setVisibility(View.GONE); - binding.menuPanel.setVisibility(View.GONE); - setLeftButton(false); - } else { - binding.sendButton.setOnClickListener(this::onInputRightButtonClicked); - binding.replyPanel.setVisibility(View.GONE); - binding.emojiPanel.setVisibility(View.GONE); - binding.menuPanel.setVisibility(View.GONE); - binding.highlightSwitch.setChecked(false); - setLeftButton(false); - } - - onInputModeChanged(before, mode); - } - - public void requestInputMode(@NonNull String mode) { - if (mode.equals(MODE_EMOJI)) { - binding.replyPanel.setVisibility(View.GONE); - binding.menuPanel.setVisibility(View.GONE); - binding.highlightSwitch.setChecked(false); - binding.emojiPanel.setVisibility(View.VISIBLE); - } else if (mode.equals(MODE_MENU)) { - binding.replyPanel.setVisibility(View.GONE); - binding.emojiPanel.setVisibility(View.GONE); - binding.highlightSwitch.setChecked(false); - binding.menuPanel.setVisibility(View.VISIBLE); - } - setLeftButton(true); - } - - public void setOnHighlightCheckedListener(@Nullable CompoundButton.OnCheckedChangeListener onHighlightCheckedListener) { - this.onHighlightCheckedListener = onHighlightCheckedListener; - } - - public void setOnMenuCameraClickListener(@Nullable View.OnClickListener onMenuCameraClickListener) { - this.onMenuCameraClickListener = onMenuCameraClickListener; - } - - public void setOnMenuPhotoClickListener(@Nullable View.OnClickListener onMenuPhotoClickListener) { - this.onMenuPhotoClickListener = onMenuPhotoClickListener; - } - - public void setOnMenuFileClickListener(@Nullable View.OnClickListener onMenuFileClickListener) { - this.onMenuFileClickListener = onMenuFileClickListener; - } - - public void setOnVoiceMessageClickListener(@Nullable View.OnClickListener onVoiceMessageClickListener) { - this.onVoiceMessageClickListener = onVoiceMessageClickListener; - } - - public void setOnEmojiClickListener(@Nullable OnItemClickListener onEmojiClickListener) { - this.onEmojiClickListener = onEmojiClickListener; - adapter.emojiClickListener = onEmojiClickListener; - } - - private void setLeftButton(final boolean isLeftClosed) { - this.isLeftClosed = isLeftClosed; - if (isLeftClosed) { - binding.leftButton.setImageResource(R.drawable.icon_close); - } else { - binding.leftButton.setImageResource(R.drawable.icon_add); - } - } - - private static class EmojiAdapter extends RecyclerView.Adapter { - @NonNull - private final List emojis = EmojiManager.getAllEmojis(); - @Nullable - private OnItemClickListener emojiClickListener; - - @NonNull - @Override - public EmojiViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new EmojiViewHolder(new AppCompatImageView(parent.getContext())); - } - - @Override - public void onBindViewHolder(@NonNull EmojiViewHolder holder, int position) { - final String emojiUrl = emojis.get(position).getUrl(); - holder.bind(emojiUrl); - holder.itemView.setOnClickListener(v -> { - if (emojiClickListener != null) { - emojiClickListener.onItemClick(v, position, emojiUrl); - } - }); - } - - @Override - public int getItemCount() { - return emojis.size(); - } - - static class EmojiViewHolder extends RecyclerView.ViewHolder { - public EmojiViewHolder(@NonNull View itemView) { - super(itemView); - } - - public void bind(@NonNull String emojiUrl) { - Glide.with(itemView) - .load(emojiUrl) - .circleCrop() - .diskCacheStrategy(DiskCacheStrategy.ALL) - .into((AppCompatImageView) itemView); - } - } - } -} diff --git a/uikit-custom-sample/src/main/java/com/sendbird/uikit/customsample/groupchannel/components/CustomMessageSearchHeaderComponent.java b/uikit-custom-sample/src/main/java/com/sendbird/uikit/customsample/groupchannel/components/CustomMessageSearchHeaderComponent.java deleted file mode 100644 index 7b789920..00000000 --- a/uikit-custom-sample/src/main/java/com/sendbird/uikit/customsample/groupchannel/components/CustomMessageSearchHeaderComponent.java +++ /dev/null @@ -1,57 +0,0 @@ -package com.sendbird.uikit.customsample.groupchannel.components; - -import android.content.Context; -import android.os.Bundle; -import android.view.KeyEvent; -import android.view.LayoutInflater; -import android.view.View; -import android.view.ViewGroup; -import android.widget.EditText; -import android.widget.TextView; - -import androidx.annotation.NonNull; -import androidx.annotation.Nullable; - -import com.sendbird.uikit.customsample.R; -import com.sendbird.uikit.modules.components.MessageSearchHeaderComponent; -import com.sendbird.uikit.utils.TextUtils; - -/** - * Implements the customized MessageSearchHeaderComponent. - */ -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 BaseViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new CustomChannelViewHolder(ViewCustomChannelHolderBinding.inflate(LayoutInflater.from(parent.getContext()), parent, false)); - } - - @Override - public void onBindViewHolder(@NonNull BaseViewHolder holder, int position) { - super.onBindViewHolder(holder, position); - } -} diff --git a/uikit-custom-sample/src/main/java/com/sendbird/uikit/customsample/groupchannel/components/adapters/CustomCreateChannelUserListAdapter.java b/uikit-custom-sample/src/main/java/com/sendbird/uikit/customsample/groupchannel/components/adapters/CustomCreateChannelUserListAdapter.java deleted file mode 100644 index 3f3667a6..00000000 --- a/uikit-custom-sample/src/main/java/com/sendbird/uikit/customsample/groupchannel/components/adapters/CustomCreateChannelUserListAdapter.java +++ /dev/null @@ -1,79 +0,0 @@ -package com.sendbird.uikit.customsample.groupchannel.components.adapters; - -import static androidx.recyclerview.widget.RecyclerView.NO_POSITION; - -import android.view.LayoutInflater; -import android.view.View; -import android.view.ViewGroup; -import android.widget.CheckBox; -import android.widget.TextView; - -import androidx.annotation.NonNull; - -import com.sendbird.uikit.activities.adapter.CreateChannelUserListAdapter; -import com.sendbird.uikit.activities.viewholder.BaseViewHolder; -import com.sendbird.uikit.customsample.R; -import com.sendbird.uikit.interfaces.UserInfo; - -/** - * Implements the customized CreateChannelUserListAdapter to adapt the customized user list items. - */ -public class CustomCreateChannelUserListAdapter extends CreateChannelUserListAdapter { - @NonNull - @Override - public BaseViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.view_custom_user_holder, parent, false); - return new UserInfoViewHolder(view); - } - - private class UserInfoViewHolder extends BaseViewHolder { - private final TextView nickname; - private final CheckBox checkBox; - - /** - * Constructor - * - * @param itemView View to be displayed. - */ - public UserInfoViewHolder(@NonNull View itemView) { - super(itemView); - nickname = itemView.findViewById(R.id.tvNickname); - checkBox = itemView.findViewById(R.id.cbUser); - - itemView.setOnClickListener(v -> { - int userPosition = getAdapterPosition(); - if (userPosition != NO_POSITION) { - final UserInfo item = getItem(userPosition); - boolean isSelected = isSelected(item); - checkBox.setChecked(!isSelected); - } - }); - - checkBox.setOnCheckedChangeListener((buttonView, isSelected) -> { - int userPosition = getAdapterPosition(); - if (userPosition != NO_POSITION) { - final UserInfo userInfo = getItem(userPosition); - - if (isSelected && !isDisabled(userInfo)) { - selectedUserIdList.add(userInfo.getUserId()); - } else { - selectedUserIdList.remove(userInfo.getUserId()); - } - - if (userSelectChangedListener != null) { - userSelectChangedListener.onUserSelectChanged(selectedUserIdList, !isSelected); - } - } - }); - } - - @Override - public void bind(@NonNull UserInfo userInfo) { - nickname.setText(userInfo.getNickname()); - itemView.setEnabled(!isDisabled(userInfo)); - checkBox.setEnabled(!isDisabled(userInfo)); - checkBox.setChecked(isSelected(userInfo) || isDisabled(userInfo)); - } - } -} - diff --git a/uikit-custom-sample/src/main/java/com/sendbird/uikit/customsample/groupchannel/components/adapters/CustomInviteUserListAdapter.java b/uikit-custom-sample/src/main/java/com/sendbird/uikit/customsample/groupchannel/components/adapters/CustomInviteUserListAdapter.java deleted file mode 100644 index f5641422..00000000 --- a/uikit-custom-sample/src/main/java/com/sendbird/uikit/customsample/groupchannel/components/adapters/CustomInviteUserListAdapter.java +++ /dev/null @@ -1,79 +0,0 @@ -package com.sendbird.uikit.customsample.groupchannel.components.adapters; - -import static androidx.recyclerview.widget.RecyclerView.NO_POSITION; - -import android.view.LayoutInflater; -import android.view.View; -import android.view.ViewGroup; -import android.widget.CheckBox; -import android.widget.TextView; - -import androidx.annotation.NonNull; - -import com.sendbird.uikit.activities.adapter.InviteUserListAdapter; -import com.sendbird.uikit.activities.viewholder.BaseViewHolder; -import com.sendbird.uikit.customsample.R; -import com.sendbird.uikit.interfaces.UserInfo; - -/** - * Implements the customized InviteUserListAdapter to adapt the customized user list items. - */ -public class CustomInviteUserListAdapter extends InviteUserListAdapter { - @NonNull - @Override - public BaseViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.view_custom_user_holder, parent, false); - return new UserInfoViewHolder(view); - } - - private class UserInfoViewHolder extends BaseViewHolder { - private final TextView nickname; - private final CheckBox checkBox; - - /** - * Constructor - * - * @param itemView View to be displayed. - */ - public UserInfoViewHolder(@NonNull View itemView) { - super(itemView); - nickname = itemView.findViewById(R.id.tvNickname); - checkBox = itemView.findViewById(R.id.cbUser); - - itemView.setOnClickListener(v -> { - int userPosition = getAdapterPosition(); - if (userPosition != NO_POSITION) { - final UserInfo item = getItem(userPosition); - boolean isSelected = isSelected(item); - checkBox.setChecked(!isSelected); - } - }); - - checkBox.setOnCheckedChangeListener((buttonView, isSelected) -> { - int userPosition = getAdapterPosition(); - if (userPosition != NO_POSITION) { - final UserInfo userInfo = getItem(userPosition); - - if (isSelected && !isDisabled(userInfo)) { - selectedUserIdList.add(userInfo.getUserId()); - } else { - selectedUserIdList.remove(userInfo.getUserId()); - } - - if (userSelectChangedListener != null) { - userSelectChangedListener.onUserSelectChanged(selectedUserIdList, !isSelected); - } - } - }); - } - - @Override - public void bind(@NonNull UserInfo userInfo) { - nickname.setText(userInfo.getNickname()); - itemView.setEnabled(!isDisabled(userInfo)); - checkBox.setEnabled(!isDisabled(userInfo)); - checkBox.setChecked(isSelected(userInfo) || isDisabled(userInfo)); - } - } -} - diff --git a/uikit-custom-sample/src/main/java/com/sendbird/uikit/customsample/groupchannel/components/adapters/CustomMemberListAdapter.java b/uikit-custom-sample/src/main/java/com/sendbird/uikit/customsample/groupchannel/components/adapters/CustomMemberListAdapter.java deleted file mode 100644 index 81bd0e8c..00000000 --- a/uikit-custom-sample/src/main/java/com/sendbird/uikit/customsample/groupchannel/components/adapters/CustomMemberListAdapter.java +++ /dev/null @@ -1,83 +0,0 @@ -package com.sendbird.uikit.customsample.groupchannel.components.adapters; - -import static androidx.recyclerview.widget.RecyclerView.NO_POSITION; - -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.channel.Role; -import com.sendbird.android.user.Member; -import com.sendbird.uikit.activities.adapter.MemberListAdapter; -import com.sendbird.uikit.activities.viewholder.BaseViewHolder; -import com.sendbird.uikit.customsample.R; -import com.sendbird.uikit.interfaces.OnItemClickListener; - -import java.util.List; - -/** - * Implements the customized MemberListAdapter to adapt the customized member list items. - */ -public class CustomMemberListAdapter extends MemberListAdapter { - private OnItemClickListener actionItemClickListener; - private OnItemClickListener profileClickListener; - @NonNull - private Role myRole = Role.NONE; - - @NonNull - @Override - public BaseViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.view_custom_user_typed_holder, parent, false); - return new MemberPreviewHolder(v); - } - - @Override - public void setOnActionItemClickListener(@Nullable OnItemClickListener listener) { - this.actionItemClickListener = listener; - } - - @Override - public void setOnProfileClickListener(@Nullable OnItemClickListener profileClickListener) { - this.profileClickListener = profileClickListener; - } - - @Override - public void setItems(@NonNull List userList, @NonNull Role myRole) { - super.setItems(userList, myRole); - this.myRole = myRole; - } - - private class MemberPreviewHolder extends BaseViewHolder { - public MemberPreviewHolder(@NonNull View itemView) { - super(itemView); - - itemView.findViewById(R.id.ivAction).setOnClickListener(v -> { - int userPosition = getBindingAdapterPosition(); - if (userPosition != NO_POSITION && actionItemClickListener != null) { - actionItemClickListener.onItemClick(v, userPosition, getItem(userPosition)); - } - }); - - itemView.findViewById(R.id.ivProfile).setOnClickListener(v -> { - int userPosition = getBindingAdapterPosition(); - if (userPosition != NO_POSITION && profileClickListener != null) { - profileClickListener.onItemClick(v, userPosition, getItem(userPosition)); - } - }); - } - - @Override - public void bind(@NonNull Member user) { - if (myRole == Role.OPERATOR && actionItemClickListener != null) { - itemView.findViewById(R.id.ivAction).setVisibility(View.VISIBLE); - } else { - itemView.findViewById(R.id.ivAction).setVisibility(View.GONE); - } - ((TextView) itemView.findViewById(R.id.tvNickname)).setText(user.getNickname()); - } - } -} diff --git a/uikit-custom-sample/src/main/java/com/sendbird/uikit/customsample/groupchannel/components/adapters/CustomMessageListAdapter.java b/uikit-custom-sample/src/main/java/com/sendbird/uikit/customsample/groupchannel/components/adapters/CustomMessageListAdapter.java deleted file mode 100644 index bd8decfe..00000000 --- a/uikit-custom-sample/src/main/java/com/sendbird/uikit/customsample/groupchannel/components/adapters/CustomMessageListAdapter.java +++ /dev/null @@ -1,95 +0,0 @@ -package com.sendbird.uikit.customsample.groupchannel.components.adapters; - -import android.text.TextUtils; -import android.view.LayoutInflater; -import android.view.ViewGroup; - -import androidx.annotation.NonNull; - -import com.sendbird.android.channel.GroupChannel; -import com.sendbird.android.message.BaseMessage; -import com.sendbird.android.message.UserMessage; -import com.sendbird.uikit.activities.adapter.MessageListAdapter; -import com.sendbird.uikit.activities.viewholder.MessageViewHolder; -import com.sendbird.uikit.customsample.consts.StringSet; -import com.sendbird.uikit.customsample.databinding.ViewEmojiMessageMeHolderBinding; -import com.sendbird.uikit.customsample.databinding.ViewEmojiMessageOtherHolderBinding; -import com.sendbird.uikit.customsample.databinding.ViewHighlightMessageMeHolderBinding; -import com.sendbird.uikit.customsample.databinding.ViewHighlightMessageOtherHolderBinding; -import com.sendbird.uikit.customsample.groupchannel.components.viewholders.EmojiMessageMeViewHolder; -import com.sendbird.uikit.customsample.groupchannel.components.viewholders.EmojiMessageOtherViewHolder; -import com.sendbird.uikit.customsample.groupchannel.components.viewholders.HighlightMessageMeViewHolder; -import com.sendbird.uikit.customsample.groupchannel.components.viewholders.HighlightMessageOtherViewHolder; -import com.sendbird.uikit.utils.MessageUtils; - -/** - * Implements the customized MessageListAdapter 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 OnItemClickListener itemClickListener; - - @NonNull - @Override - public BaseViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new SearchedMessageViewHolder(LayoutInflater.from(parent.getContext()).inflate(R.layout.view_custom_searched_message_holder, parent, false)); - } - - @Override - public void setOnItemClickListener(@Nullable OnItemClickListener listener) { - itemClickListener = listener; - } - - private class SearchedMessageViewHolder extends BaseViewHolder { - @NonNull - private final TextView nickname; - @NonNull - private final TextView message; - @NonNull - private final TextView sentAt; - - /** - * Constructor - * - * @param itemView View to be displayed. - */ - public SearchedMessageViewHolder(@NonNull View itemView) { - super(itemView); - nickname = itemView.findViewById(R.id.tvSender); - message = itemView.findViewById(R.id.tvMessage); - sentAt = itemView.findViewById(R.id.tvSentAt); - itemView.setOnClickListener(v -> { - int position = getAdapterPosition(); - if (position != NO_POSITION && itemClickListener != null) { - BaseMessage message = getItem(position); - itemClickListener.onItemClick(v, position, message); - } - }); - } - - @Override - public void bind(@NonNull BaseMessage message) { - nickname.setText(message.getSender().getNickname()); - this.message.setText(message.getMessage()); - sentAt.setText(DateUtils.formatDateTime(itemView.getContext(), message.getCreatedAt(), DateUtils.FORMAT_SHOW_TIME)); - } - } -} diff --git a/uikit-custom-sample/src/main/java/com/sendbird/uikit/customsample/groupchannel/components/adapters/CustomRegisterOperatorListAdapter.java b/uikit-custom-sample/src/main/java/com/sendbird/uikit/customsample/groupchannel/components/adapters/CustomRegisterOperatorListAdapter.java deleted file mode 100644 index 492c42e3..00000000 --- a/uikit-custom-sample/src/main/java/com/sendbird/uikit/customsample/groupchannel/components/adapters/CustomRegisterOperatorListAdapter.java +++ /dev/null @@ -1,79 +0,0 @@ -package com.sendbird.uikit.customsample.groupchannel.components.adapters; - -import static androidx.recyclerview.widget.RecyclerView.NO_POSITION; - -import android.view.LayoutInflater; -import android.view.View; -import android.view.ViewGroup; -import android.widget.CheckBox; -import android.widget.TextView; - -import androidx.annotation.NonNull; - -import com.sendbird.android.user.Member; -import com.sendbird.uikit.activities.adapter.RegisterOperatorListAdapter; -import com.sendbird.uikit.activities.viewholder.BaseViewHolder; -import com.sendbird.uikit.customsample.R; - -/** - * Implements the customized RegisterOperatorListAdapter to adapt the register as operators list items. - */ -public class CustomRegisterOperatorListAdapter extends RegisterOperatorListAdapter { - @NonNull - @Override - public BaseViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.view_custom_user_holder, parent, false); - return new UserInfoViewHolder(view); - } - - private class UserInfoViewHolder extends BaseViewHolder { - private final TextView nickname; - private final CheckBox checkBox; - - /** - * Constructor - * - * @param itemView View to be displayed. - */ - public UserInfoViewHolder(@NonNull View itemView) { - super(itemView); - nickname = itemView.findViewById(R.id.tvNickname); - checkBox = itemView.findViewById(R.id.cbUser); - - itemView.setOnClickListener(v -> { - int userPosition = getAdapterPosition(); - if (userPosition != NO_POSITION) { - final Member item = getItem(userPosition); - boolean isSelected = isSelected(item); - checkBox.setChecked(!isSelected); - } - }); - - checkBox.setOnCheckedChangeListener((buttonView, isSelected) -> { - int userPosition = getAdapterPosition(); - if (userPosition != NO_POSITION) { - final Member member = getItem(userPosition); - - if (isSelected && !isDisabled(member)) { - selectedUserIdList.add(member.getUserId()); - } else { - selectedUserIdList.remove(member.getUserId()); - } - - if (userSelectChangedListener != null) { - userSelectChangedListener.onUserSelectChanged(selectedUserIdList, !isSelected); - } - } - }); - } - - @Override - public void bind(@NonNull Member member) { - nickname.setText(member.getNickname()); - itemView.setEnabled(!isDisabled(member)); - checkBox.setEnabled(!isDisabled(member)); - checkBox.setChecked(isSelected(member) || isDisabled(member)); - } - } -} - diff --git a/uikit-custom-sample/src/main/java/com/sendbird/uikit/customsample/groupchannel/components/adapters/CustomSuggestedMentionListAdapter.java b/uikit-custom-sample/src/main/java/com/sendbird/uikit/customsample/groupchannel/components/adapters/CustomSuggestedMentionListAdapter.java deleted file mode 100644 index 0c2f3556..00000000 --- a/uikit-custom-sample/src/main/java/com/sendbird/uikit/customsample/groupchannel/components/adapters/CustomSuggestedMentionListAdapter.java +++ /dev/null @@ -1,67 +0,0 @@ -package com.sendbird.uikit.customsample.groupchannel.components.adapters; - -import static androidx.recyclerview.widget.RecyclerView.NO_POSITION; - -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.user.User; -import com.sendbird.uikit.activities.adapter.SuggestedMentionListAdapter; -import com.sendbird.uikit.activities.viewholder.BaseViewHolder; -import com.sendbird.uikit.customsample.R; -import com.sendbird.uikit.interfaces.OnItemClickListener; - -/** - * Implements the customized SuggestedMentionListAdapter to adapt the suggested mention user list items. - */ -public class CustomSuggestedMentionListAdapter extends SuggestedMentionListAdapter { - @Nullable - private OnItemClickListener itemClickListener; - - @NonNull - @Override - public BaseViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.view_custom_suggested_mention_holder, parent, false); - return new SuggestedMentionViewHolder(view); - } - - @Override - public void setOnItemClickListener(@Nullable OnItemClickListener listener) { - this.itemClickListener = listener; - } - - private class SuggestedMentionViewHolder extends BaseViewHolder { - private final TextView nickname; - - /** - * Constructor - * - * @param itemView View to be displayed. - */ - public SuggestedMentionViewHolder(@NonNull View itemView) { - super(itemView); - nickname = itemView.findViewById(R.id.tvNickname); - - itemView.setOnClickListener(v -> { - int userPosition = getAdapterPosition(); - - if (userPosition != NO_POSITION) { - final User user = getItem(userPosition); - if (itemClickListener != null) { - itemClickListener.onItemClick(v, userPosition, user); - } - } - }); - } - - @Override - public void bind(@NonNull User user) { - nickname.setText(user.getNickname()); - } - } -} diff --git a/uikit-custom-sample/src/main/java/com/sendbird/uikit/customsample/groupchannel/components/viewholders/CustomChannelViewHolder.java b/uikit-custom-sample/src/main/java/com/sendbird/uikit/customsample/groupchannel/components/viewholders/CustomChannelViewHolder.java deleted file mode 100644 index 7716e8a6..00000000 --- a/uikit-custom-sample/src/main/java/com/sendbird/uikit/customsample/groupchannel/components/viewholders/CustomChannelViewHolder.java +++ /dev/null @@ -1,53 +0,0 @@ -package com.sendbird.uikit.customsample.groupchannel.components.viewholders; - -import android.view.View; - -import androidx.annotation.NonNull; - -import com.sendbird.android.channel.GroupChannel; -import com.sendbird.uikit.activities.viewholder.BaseViewHolder; -import com.sendbird.uikit.customsample.databinding.ViewCustomChannelHolderBinding; -import com.sendbird.uikit.utils.ChannelUtils; -import com.sendbird.uikit.utils.DateUtils; - -/** - * ViewHolder to draw the channel list item for the GroupChannel. - */ -public class CustomChannelViewHolder extends BaseViewHolder { - private final ViewCustomChannelHolderBinding binding; - - public CustomChannelViewHolder(@NonNull ViewCustomChannelHolderBinding binding) { - super(binding.getRoot()); - this.binding = binding; - } - - @Override - public void bind(@NonNull GroupChannel channel) { - binding.tvTitle.setText(ChannelUtils.makeTitleText(binding.getRoot().getContext(), channel)); - - if (channel.getLastMessage() != null) { - binding.tvLastMessage.setText(channel.getLastMessage().getMessage()); - binding.tvUpdatedAt.setText(DateUtils.formatDateTime(binding.getRoot().getContext(), channel.getLastMessage().getCreatedAt())); - } - - if (channel.getMemberCount() > 2) { - binding.tvMemberCount.setVisibility(View.VISIBLE); - binding.tvMemberCount.setText(String.valueOf(channel.getMemberCount())); - } else { - binding.tvMemberCount.setVisibility(View.GONE); - } - - if (channel.getUnreadMessageCount() > 0) { - binding.tvUnreadCount.setVisibility(View.VISIBLE); - binding.tvUnreadCount.setText(String.valueOf(channel.getUnreadMessageCount())); - } else { - binding.tvUnreadCount.setVisibility(View.GONE); - } - - if (channel.getMyPushTriggerOption() == GroupChannel.PushTriggerOption.OFF) { - binding.ivPushEnabledIcon.setVisibility(View.VISIBLE); - } else { - binding.ivPushEnabledIcon.setVisibility(View.GONE); - } - } -} diff --git a/uikit-custom-sample/src/main/java/com/sendbird/uikit/customsample/groupchannel/components/viewholders/EmojiMessageMeViewHolder.java b/uikit-custom-sample/src/main/java/com/sendbird/uikit/customsample/groupchannel/components/viewholders/EmojiMessageMeViewHolder.java deleted file mode 100644 index a7cc05af..00000000 --- a/uikit-custom-sample/src/main/java/com/sendbird/uikit/customsample/groupchannel/components/viewholders/EmojiMessageMeViewHolder.java +++ /dev/null @@ -1,70 +0,0 @@ -package com.sendbird.uikit.customsample.groupchannel.components.viewholders; - -import android.content.Context; -import android.text.format.DateUtils; -import android.view.View; - -import androidx.annotation.NonNull; -import androidx.annotation.Nullable; - -import com.bumptech.glide.Glide; -import com.bumptech.glide.load.engine.DiskCacheStrategy; -import com.sendbird.android.channel.BaseChannel; -import com.sendbird.android.message.BaseMessage; -import com.sendbird.android.message.Reaction; -import com.sendbird.android.message.SendingStatus; -import com.sendbird.uikit.activities.viewholder.GroupChannelMessageViewHolder; -import com.sendbird.uikit.consts.ClickableViewIdentifier; -import com.sendbird.uikit.customsample.databinding.ViewEmojiMessageMeHolderBinding; -import com.sendbird.uikit.customsample.utils.DrawableUtils; -import com.sendbird.uikit.interfaces.OnItemClickListener; -import com.sendbird.uikit.interfaces.OnItemLongClickListener; -import com.sendbird.uikit.model.MessageListUIParams; - -import java.util.List; -import java.util.Map; -import java.util.concurrent.ConcurrentHashMap; - -/** - * ViewHolder to draw the emoji message sent from current user in the GroupChannel. - */ -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 List reactionList, @Nullable OnItemClickListener emojiReactionClickListener, @Nullable OnItemLongClickListener emojiReactionLongClickListener, @Nullable View.OnClickListener moreButtonClickListener) { - } - - @NonNull - @Override - public Map getClickableViewMap() { - return new ConcurrentHashMap() {{ - put(ClickableViewIdentifier.Chat.name(), binding.ivEmoji); - }}; - } -} diff --git a/uikit-custom-sample/src/main/java/com/sendbird/uikit/customsample/groupchannel/components/viewholders/EmojiMessageOtherViewHolder.java b/uikit-custom-sample/src/main/java/com/sendbird/uikit/customsample/groupchannel/components/viewholders/EmojiMessageOtherViewHolder.java deleted file mode 100644 index c1d74e1f..00000000 --- a/uikit-custom-sample/src/main/java/com/sendbird/uikit/customsample/groupchannel/components/viewholders/EmojiMessageOtherViewHolder.java +++ /dev/null @@ -1,90 +0,0 @@ -package com.sendbird.uikit.customsample.groupchannel.components.viewholders; - -import android.content.Context; -import android.graphics.drawable.Drawable; -import android.text.TextUtils; -import android.text.format.DateUtils; -import android.view.View; - -import androidx.annotation.NonNull; -import androidx.annotation.Nullable; - -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.message.BaseMessage; -import com.sendbird.android.message.Reaction; -import com.sendbird.android.message.SendingStatus; -import com.sendbird.android.user.Sender; -import com.sendbird.uikit.activities.viewholder.GroupChannelMessageViewHolder; -import com.sendbird.uikit.consts.ClickableViewIdentifier; -import com.sendbird.uikit.customsample.R; -import com.sendbird.uikit.customsample.databinding.ViewEmojiMessageOtherHolderBinding; -import com.sendbird.uikit.customsample.utils.DrawableUtils; -import com.sendbird.uikit.interfaces.OnItemClickListener; -import com.sendbird.uikit.interfaces.OnItemLongClickListener; -import com.sendbird.uikit.model.MessageListUIParams; - -import java.util.List; -import java.util.Map; -import java.util.concurrent.ConcurrentHashMap; - -/** - * ViewHolder to draw the emoji message sent from other users in the GroupChannel. - */ -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 Map getClickableViewMap() { - return new ConcurrentHashMap() {{ - put(ClickableViewIdentifier.Chat.name(),binding.ivEmoji); - put(ClickableViewIdentifier.Profile.name(), binding.ivProfileView); - }}; - } - - @Override - public void setEmojiReaction(@NonNull List reactionList, @Nullable OnItemClickListener emojiReactionClickListener, @Nullable OnItemLongClickListener emojiReactionLongClickListener, @Nullable View.OnClickListener moreButtonClickListener) {} -} diff --git a/uikit-custom-sample/src/main/java/com/sendbird/uikit/customsample/groupchannel/components/viewholders/HighlightMessageMeViewHolder.java b/uikit-custom-sample/src/main/java/com/sendbird/uikit/customsample/groupchannel/components/viewholders/HighlightMessageMeViewHolder.java deleted file mode 100644 index a4ffe3fe..00000000 --- a/uikit-custom-sample/src/main/java/com/sendbird/uikit/customsample/groupchannel/components/viewholders/HighlightMessageMeViewHolder.java +++ /dev/null @@ -1,63 +0,0 @@ -package com.sendbird.uikit.customsample.groupchannel.components.viewholders; - -import android.content.Context; -import android.text.format.DateUtils; -import android.view.View; - -import androidx.annotation.NonNull; -import androidx.annotation.Nullable; - -import com.sendbird.android.channel.BaseChannel; -import com.sendbird.android.message.BaseMessage; -import com.sendbird.android.message.Reaction; -import com.sendbird.android.message.SendingStatus; -import com.sendbird.uikit.activities.viewholder.GroupChannelMessageViewHolder; -import com.sendbird.uikit.consts.ClickableViewIdentifier; -import com.sendbird.uikit.customsample.databinding.ViewHighlightMessageMeHolderBinding; -import com.sendbird.uikit.customsample.utils.DrawableUtils; -import com.sendbird.uikit.interfaces.OnItemClickListener; -import com.sendbird.uikit.interfaces.OnItemLongClickListener; -import com.sendbird.uikit.model.MessageListUIParams; - -import java.util.List; -import java.util.Map; -import java.util.concurrent.ConcurrentHashMap; - -/** - * ViewHolder to draw the highlight message sent from current user in the GroupChannel. - */ -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 Map getClickableViewMap() { - return new ConcurrentHashMap() {{ - put(ClickableViewIdentifier.Chat.name(), binding.tvMessage); - }}; - } - - @Override - public void setEmojiReaction(@NonNull List reactionList, @Nullable OnItemClickListener emojiReactionClickListener, @Nullable OnItemLongClickListener emojiReactionLongClickListener, @Nullable View.OnClickListener moreButtonClickListener) {} -} diff --git a/uikit-custom-sample/src/main/java/com/sendbird/uikit/customsample/groupchannel/components/viewholders/HighlightMessageOtherViewHolder.java b/uikit-custom-sample/src/main/java/com/sendbird/uikit/customsample/groupchannel/components/viewholders/HighlightMessageOtherViewHolder.java deleted file mode 100644 index db738399..00000000 --- a/uikit-custom-sample/src/main/java/com/sendbird/uikit/customsample/groupchannel/components/viewholders/HighlightMessageOtherViewHolder.java +++ /dev/null @@ -1,86 +0,0 @@ -package com.sendbird.uikit.customsample.groupchannel.components.viewholders; - -import android.content.Context; -import android.graphics.drawable.Drawable; -import android.text.TextUtils; -import android.text.format.DateUtils; -import android.view.View; - -import androidx.annotation.NonNull; -import androidx.annotation.Nullable; - -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.message.BaseMessage; -import com.sendbird.android.message.Reaction; -import com.sendbird.android.message.SendingStatus; -import com.sendbird.android.user.Sender; -import com.sendbird.uikit.activities.viewholder.GroupChannelMessageViewHolder; -import com.sendbird.uikit.consts.ClickableViewIdentifier; -import com.sendbird.uikit.customsample.R; -import com.sendbird.uikit.customsample.databinding.ViewHighlightMessageOtherHolderBinding; -import com.sendbird.uikit.customsample.utils.DrawableUtils; -import com.sendbird.uikit.interfaces.OnItemClickListener; -import com.sendbird.uikit.interfaces.OnItemLongClickListener; -import com.sendbird.uikit.model.MessageListUIParams; - -import java.util.List; -import java.util.Map; -import java.util.concurrent.ConcurrentHashMap; - -/** - * ViewHolder to draw the highlight message sent from other users in the GroupChannel. - */ -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 Map getClickableViewMap() { - return new ConcurrentHashMap() {{ - put(ClickableViewIdentifier.Chat.name(),binding.tvMessage); - put(ClickableViewIdentifier.Profile.name(), binding.ivProfileView); - }}; - } - - @Override - public void setEmojiReaction(@NonNull List reactionList, @Nullable OnItemClickListener emojiReactionClickListener, @Nullable OnItemLongClickListener emojiReactionLongClickListener, @Nullable View.OnClickListener moreButtonClickListener) {} -} diff --git a/uikit-custom-sample/src/main/java/com/sendbird/uikit/customsample/groupchannel/fragments/CustomBannedUserListFragment.java b/uikit-custom-sample/src/main/java/com/sendbird/uikit/customsample/groupchannel/fragments/CustomBannedUserListFragment.java deleted file mode 100644 index e817179e..00000000 --- a/uikit-custom-sample/src/main/java/com/sendbird/uikit/customsample/groupchannel/fragments/CustomBannedUserListFragment.java +++ /dev/null @@ -1,37 +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.BannedUserListFragment; -import com.sendbird.uikit.modules.BannedUserListModule; -import com.sendbird.uikit.modules.components.HeaderComponent; - -/** - * Implements the customized BannedUserListFragment. - */ -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 6e184e88..00000000 --- a/uikit-custom-sample/src/main/java/com/sendbird/uikit/customsample/groupchannel/fragments/CustomChannelFragment.java +++ /dev/null @@ -1,119 +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.setOnMenuCameraClickListener(v -> takeCamera()); - customInput.setOnMenuPhotoClickListener(v -> takePhoto()); - customInput.setOnMenuFileClickListener(v -> takeFile()); - customInput.setOnVoiceMessageClickListener(v -> takeVoiceRecorder()); - customInput.setOnHighlightCheckedListener((buttonView, isChecked) -> - customMessageType = isChecked ? CustomMessageType.HIGHLIGHT : CustomMessageType.NONE); - customInput.setOnEmojiClickListener((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 List customTypes = new ArrayList<>(); - customTypes.add(CustomMessageType.NONE.getValue()); - customTypes.add(CustomMessageType.HIGHLIGHT.getValue()); - customTypes.add(CustomMessageType.EMOJI.getValue()); - params.setCustomTypes(customTypes); - return params; - } -} diff --git a/uikit-custom-sample/src/main/java/com/sendbird/uikit/customsample/groupchannel/viewmodels/ViewModelFactory.java b/uikit-custom-sample/src/main/java/com/sendbird/uikit/customsample/groupchannel/viewmodels/ViewModelFactory.java deleted file mode 100644 index 07ab9242..00000000 --- a/uikit-custom-sample/src/main/java/com/sendbird/uikit/customsample/groupchannel/viewmodels/ViewModelFactory.java +++ /dev/null @@ -1,31 +0,0 @@ -package com.sendbird.uikit.customsample.groupchannel.viewmodels; - -import androidx.annotation.NonNull; -import androidx.lifecycle.ViewModel; -import androidx.lifecycle.ViewModelProvider; - -import com.sendbird.android.params.MessageListParams; - -import java.util.Objects; - -/** - * Provides to create the customized ViewModels. - */ -public class ViewModelFactory extends ViewModelProvider.NewInstanceFactory { - private final Object[] params; - - public ViewModelFactory(@NonNull Object... params) { - this.params = params; - } - - @SuppressWarnings("unchecked") - @NonNull - @Override - public T create(@NonNull Class modelClass) { - if (modelClass.isAssignableFrom(CustomChannelViewModel.class)) { - return (T) new CustomChannelViewModel((String) Objects.requireNonNull(params)[0], params.length > 1 ? (MessageListParams) params[1] : null); - } else { - return super.create(modelClass); - } - } -} diff --git a/uikit-custom-sample/src/main/java/com/sendbird/uikit/customsample/models/CustomMessageType.java b/uikit-custom-sample/src/main/java/com/sendbird/uikit/customsample/models/CustomMessageType.java deleted file mode 100644 index ec6dada6..00000000 --- a/uikit-custom-sample/src/main/java/com/sendbird/uikit/customsample/models/CustomMessageType.java +++ /dev/null @@ -1,41 +0,0 @@ -package com.sendbird.uikit.customsample.models; - -import androidx.annotation.NonNull; - -import com.sendbird.uikit.customsample.consts.StringSet; - -/** - * Used with drawing messages by this type. - */ -public enum CustomMessageType { - /** - * Draws the UIKit default message type. - */ - NONE(""), - /** - * Draws the highlighted message type. - */ - HIGHLIGHT(StringSet.highlight), - /** - * Draws the emoji message type. - */ - EMOJI(StringSet.emoji_type); - - private final String value; - CustomMessageType(String value) { this.value = value; } - - @NonNull - public String getValue() { - return value; - } - - @NonNull - public static CustomMessageType from(@NonNull String value) { - for (CustomMessageType type : values()) { - if (type.value.equals(value)) { - return type; - } - } - return NONE; - } -} diff --git a/uikit-custom-sample/src/main/java/com/sendbird/uikit/customsample/models/CustomUser.java b/uikit-custom-sample/src/main/java/com/sendbird/uikit/customsample/models/CustomUser.java deleted file mode 100644 index e991113a..00000000 --- a/uikit-custom-sample/src/main/java/com/sendbird/uikit/customsample/models/CustomUser.java +++ /dev/null @@ -1,36 +0,0 @@ -package com.sendbird.uikit.customsample.models; - -import androidx.annotation.NonNull; -import androidx.annotation.Nullable; - -import com.sendbird.android.user.User; -import com.sendbird.uikit.interfaces.UserInfo; - -/** - * Model class for a user data to adapt UIKit UserInfo interface. - */ -public class CustomUser implements UserInfo { - User user; - - public CustomUser(@NonNull User user) { - this.user = user; - } - - @NonNull - @Override - public String getUserId() { - return user.getUserId(); - } - - @NonNull - @Override - public String getNickname() { - return user.getNickname(); - } - - @Nullable - @Override - public String getProfileUrl() { - return user.getProfileUrl(); - } -} diff --git a/uikit-custom-sample/src/main/java/com/sendbird/uikit/customsample/models/LiveStreamingChannelData.java b/uikit-custom-sample/src/main/java/com/sendbird/uikit/customsample/models/LiveStreamingChannelData.java deleted file mode 100644 index 6317f107..00000000 --- a/uikit-custom-sample/src/main/java/com/sendbird/uikit/customsample/models/LiveStreamingChannelData.java +++ /dev/null @@ -1,176 +0,0 @@ -package com.sendbird.uikit.customsample.models; - -import androidx.annotation.NonNull; -import androidx.annotation.Nullable; - -import com.sendbird.uikit.customsample.consts.StringSet; -import com.sendbird.uikit.interfaces.UserInfo; - -import org.json.JSONArray; -import org.json.JSONException; -import org.json.JSONObject; - -import java.util.ArrayList; -import java.util.List; - -/** - * Model class for a live streaming channel data. - */ -public class LiveStreamingChannelData { - private final String name; - private final List tags = new ArrayList<>(); - private final Creator creator; - private final String thumbnailUrl; - private final String liveUrl; - - public LiveStreamingChannelData(@NonNull JSONObject jsonObject) throws JSONException { - this.name = jsonObject.optString(StringSet.name); - this.creator = jsonObject.has(StringSet.creator_info) ? new Creator(jsonObject.getJSONObject(StringSet.creator_info)) : null; - JSONArray tagsJsonArray = jsonObject.optJSONArray(StringSet.tags); - if (tagsJsonArray != null) { - for (int i = 0; i < tagsJsonArray.length(); i++) { - this.tags.add(tagsJsonArray.opt(i).toString()); - } - } - - this.thumbnailUrl = jsonObject.optString(StringSet.thumbnail_url); - this.liveUrl = jsonObject.optString(StringSet.live_channel_url); - } - - @Nullable - public String getName() { - return name; - } - - @Nullable - public List getTags() { - return tags; - } - - @Nullable - public UserInfo getCreator() { - return creator; - } - - @Nullable - public String getThumbnailUrl() { - return thumbnailUrl; - } - - @Nullable - public String getLiveUrl() { - return liveUrl; - } - - private static class Creator implements UserInfo { - final String userId; - final String nickname; - final String profileUrl; - - public Creator(JSONObject jsonObject) { - userId = jsonObject.optString(StringSet.id); - nickname = jsonObject.optString(StringSet.name); - profileUrl = jsonObject.optString(StringSet.profile_url); - } - - @NonNull - @Override - public String getUserId() { - return userId; - } - - @Override - public String getNickname() { - return nickname; - } - - @Override - public String getProfileUrl() { - return profileUrl; - } - - @Override - public boolean equals(Object o) { - if (this == o) return true; - if (!(o instanceof Creator)) return false; - Creator creator = (Creator) o; - - if (!userId.equals(creator.userId)) { - return false; - } - - if (!nickname.equals(creator.nickname)) { - return false; - } - - return profileUrl.equals(creator.profileUrl); - } - - @Override - public int hashCode() { - int result = 17; - result = result * 31 + (userId != null ? userId.hashCode() : 0); - result = result * 31 + (nickname != null ? nickname.hashCode() : 0); - result = result * 31 + (profileUrl != null ? profileUrl.hashCode() : 0); - return result; - } - - @NonNull - @Override - public String toString() { - return "Creator{" + - "userId='" + userId + '\'' + - ", nickname='" + nickname + '\'' + - ", profileUrl='" + profileUrl + '\'' + - '}'; - } - } - - @Override - public boolean equals(Object o) { - if (this == o) return true; - if (!(o instanceof LiveStreamingChannelData)) return false; - LiveStreamingChannelData that = (LiveStreamingChannelData) o; - - if (!name.equals(that.name)) { - return false; - } - - if (!tags.equals(that.tags)) { - return false; - } - - if (!creator.equals(that.creator)) { - return false; - } - - if (!thumbnailUrl.equals(that.thumbnailUrl)) { - return false; - } - - return liveUrl.equals(that.liveUrl); - } - - @Override - public int hashCode() { - int result = 17; - result = result * 31 + (name != null ? name.hashCode() : 0); - result = result * 31 + tags.hashCode(); - result = result * 31 + (creator != null ? creator.hashCode() : 0); - result = result * 31 + (thumbnailUrl != null ? thumbnailUrl.hashCode() : 0); - result = result * 31 + (liveUrl != null ? liveUrl.hashCode() : 0); - return result; - } - - @NonNull - @Override - public String toString() { - return "LiveStreamingChannelData{" + - "name='" + name + '\'' + - ", tags=" + tags + - ", creator=" + creator + - ", thumbnailUrl='" + thumbnailUrl + '\'' + - ", liveUrl='" + liveUrl + '\'' + - '}'; - } -} diff --git a/uikit-custom-sample/src/main/java/com/sendbird/uikit/customsample/openchannel/CustomCreateOpenChannelFragment.java b/uikit-custom-sample/src/main/java/com/sendbird/uikit/customsample/openchannel/CustomCreateOpenChannelFragment.java deleted file mode 100644 index 8d904e54..00000000 --- a/uikit-custom-sample/src/main/java/com/sendbird/uikit/customsample/openchannel/CustomCreateOpenChannelFragment.java +++ /dev/null @@ -1,21 +0,0 @@ -package com.sendbird.uikit.customsample.openchannel; - -import static android.app.Activity.RESULT_OK; - -import androidx.annotation.NonNull; - -import com.sendbird.android.channel.OpenChannel; -import com.sendbird.uikit.activities.OpenChannelActivity; -import com.sendbird.uikit.customsample.openchannel.community.CommunityActivity; -import com.sendbird.uikit.fragments.CreateOpenChannelFragment; - -public class CustomCreateOpenChannelFragment extends CreateOpenChannelFragment { - @Override - protected void onNewChannelCreated(@NonNull OpenChannel channel) { - if (isFragmentAlive() && getActivity() != null) { - startActivity(OpenChannelActivity.newIntent(requireContext(), CommunityActivity.class, channel.getUrl())); - getActivity().setResult(RESULT_OK); - shouldActivityFinish(); - } - } -} diff --git a/uikit-custom-sample/src/main/java/com/sendbird/uikit/customsample/openchannel/CustomOpenChannelMessageListAdapter.java b/uikit-custom-sample/src/main/java/com/sendbird/uikit/customsample/openchannel/CustomOpenChannelMessageListAdapter.java deleted file mode 100644 index 09ee6522..00000000 --- a/uikit-custom-sample/src/main/java/com/sendbird/uikit/customsample/openchannel/CustomOpenChannelMessageListAdapter.java +++ /dev/null @@ -1,69 +0,0 @@ -package com.sendbird.uikit.customsample.openchannel; - -import android.text.TextUtils; -import android.view.LayoutInflater; -import android.view.ViewGroup; - -import androidx.annotation.NonNull; - -import com.sendbird.android.channel.OpenChannel; -import com.sendbird.android.message.BaseMessage; -import com.sendbird.android.message.UserMessage; -import com.sendbird.uikit.activities.adapter.OpenChannelMessageListAdapter; -import com.sendbird.uikit.activities.viewholder.MessageViewHolder; -import com.sendbird.uikit.customsample.consts.StringSet; -import com.sendbird.uikit.customsample.databinding.ViewOpenChannelHighlightMessageHolderBinding; -import com.sendbird.uikit.utils.MessageUtils; - -/** - * Implements the customized 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 Map getClickableViewMap() { - return new ConcurrentHashMap() {{ - put(ClickableViewIdentifier.Chat.name(), binding.contentPanel); - put(ClickableViewIdentifier.Profile.name(), binding.ivProfileView); - }}; - } -} diff --git a/uikit-custom-sample/src/main/java/com/sendbird/uikit/customsample/openchannel/OpenChannelMainActivity.java b/uikit-custom-sample/src/main/java/com/sendbird/uikit/customsample/openchannel/OpenChannelMainActivity.java deleted file mode 100644 index 4a3a9476..00000000 --- a/uikit-custom-sample/src/main/java/com/sendbird/uikit/customsample/openchannel/OpenChannelMainActivity.java +++ /dev/null @@ -1,173 +0,0 @@ -package com.sendbird.uikit.customsample.openchannel; - -import android.os.Bundle; -import android.view.View; - -import androidx.annotation.NonNull; -import androidx.annotation.Nullable; -import androidx.appcompat.app.AppCompatActivity; -import androidx.fragment.app.Fragment; -import androidx.fragment.app.FragmentActivity; -import androidx.fragment.app.FragmentManager; -import androidx.lifecycle.Lifecycle; -import androidx.viewpager2.adapter.FragmentStateAdapter; -import androidx.viewpager2.widget.ViewPager2; - -import com.google.android.material.tabs.TabLayoutMediator; -import com.sendbird.android.params.OpenChannelListQueryParams; -import com.sendbird.uikit.SendbirdUIKit; -import com.sendbird.uikit.customsample.R; -import com.sendbird.uikit.customsample.SettingsFragment; -import com.sendbird.uikit.customsample.consts.StringSet; -import com.sendbird.uikit.customsample.databinding.ActivityOpenChannelMainBinding; -import com.sendbird.uikit.customsample.openchannel.community.CommunityListFragment; -import com.sendbird.uikit.customsample.openchannel.livestream.LiveStreamListAdapter; -import com.sendbird.uikit.customsample.openchannel.livestream.LiveStreamListFragment; -import com.sendbird.uikit.customsample.widgets.CustomTabView; -import com.sendbird.uikit.fragments.OpenChannelListFragment; - -/** - * Displays an open channel list screen. - */ -public class OpenChannelMainActivity extends AppCompatActivity { - private ActivityOpenChannelMainBinding binding; - - @Override - protected void onCreate(@Nullable Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - int themeResId = SendbirdUIKit.getDefaultThemeMode().getResId(); - setTheme(themeResId); - binding = ActivityOpenChannelMainBinding.inflate(getLayoutInflater()); - View view = binding.getRoot(); - setContentView(view); - initPage(); - } - - private void initPage() { - setSupportActionBar(binding.tbMain); - binding.vpMain.setAdapter(new MainAdapter(this)); - - int backgroundRedId = R.color.background_50; - binding.tlMain.setBackgroundResource(backgroundRedId); - - CustomTabView liveStreamTab = new CustomTabView(this); - liveStreamTab.setBadgeVisibility(View.GONE); - liveStreamTab.setTitle(getString(R.string.text_live_streams)); - liveStreamTab.setIcon(R.drawable.icon_streaming); - - CustomTabView communityTab = new CustomTabView(this); - communityTab.setBadgeVisibility(View.GONE); - communityTab.setTitle(getString(R.string.text_community)); - communityTab.setIcon(R.drawable.icon_channels); - - CustomTabView settingsTab = new CustomTabView(this); - settingsTab.setBadgeVisibility(View.GONE); - settingsTab.setTitle(getString(R.string.text_tab_settings)); - settingsTab.setIcon(R.drawable.icon_settings_filled); - - binding.tvDescription.setVisibility(View.VISIBLE); - binding.tvDescription.setText(R.string.text_live_streaming_description); - setActionBarTitle(getString(R.string.text_live_streams)); - - new TabLayoutMediator(binding.tlMain, binding.vpMain, (tab, position) -> { - switch (position) { - case 0: - tab.setCustomView(liveStreamTab); - break; - case 1: - tab.setCustomView(communityTab); - break; - case 2: - tab.setCustomView(settingsTab); - break; - default: - break; - - } - }).attach(); - - binding.vpMain.setOffscreenPageLimit(3); - binding.vpMain.registerOnPageChangeCallback(new ViewPager2.OnPageChangeCallback() { - @Override - public void onPageSelected(int position) { - if (position == 0) { - binding.tvDescription.setVisibility(View.VISIBLE); - binding.tvDescription.setText(R.string.text_live_streaming_description); - setActionBarTitle(getString(R.string.text_live_streams)); - binding.tbMain.setVisibility(View.VISIBLE); - binding.tbBorder.setVisibility(View.VISIBLE); - } else if (position == 1) { - binding.tvDescription.setVisibility(View.GONE); - setActionBarTitle(getString(R.string.text_community)); - binding.tbMain.setVisibility(View.VISIBLE); - binding.tbBorder.setVisibility(View.VISIBLE); - } else { - binding.tvDescription.setVisibility(View.GONE); - setActionBarTitle(getString(R.string.text_tab_settings)); - binding.tbMain.setVisibility(View.GONE); - binding.tbBorder.setVisibility(View.GONE); - } - } - }); - } - - private void setActionBarTitle(String title) { - if (getSupportActionBar() == null) return; - getSupportActionBar().setTitle(title); - } - - private static class MainAdapter extends FragmentStateAdapter { - private static final int PAGE_SIZE = 3; - - /** - * @param fragmentActivity if the {@link ViewPager2} lives directly in a - * {@link FragmentActivity} subclass. - * @see FragmentStateAdapter#FragmentStateAdapter(Fragment) - * @see FragmentStateAdapter#FragmentStateAdapter(FragmentManager, Lifecycle) - */ - public MainAdapter(@NonNull FragmentActivity fragmentActivity) { - super(fragmentActivity); - } - - @NonNull - @Override - public Fragment createFragment(int position) { - - if (position == 0) { - final OpenChannelListQueryParams params = new OpenChannelListQueryParams(); - params.setCustomTypeFilter(StringSet.SB_LIVE_TYPE); - return new com.sendbird.uikit.fragments.OpenChannelListFragment.Builder() - .setCustomFragment(new LiveStreamListFragment()) - .setOpenChannelListAdapter(new LiveStreamListAdapter()) - .setUseHeader(false) - .setUseRefreshLayout(false) - .setCustomQueryParams(params) - .build(); - } else if (position == 1) { - final OpenChannelListQueryParams params = new OpenChannelListQueryParams(); - params.setCustomTypeFilter(StringSet.SB_COMMUNITY_TYPE); - return new OpenChannelListFragment.Builder() - .setCustomFragment(new CommunityListFragment()) - .setUseHeader(false) - .setCustomQueryParams(params) - .build(); - } else { - SettingsFragment fragment = new SettingsFragment(); - Bundle bundle = new Bundle(); - bundle.putBoolean(StringSet.SETTINGS_USE_DO_NOT_DISTURB, false); - fragment.setArguments(bundle); - return fragment; - } - } - - /** - * Returns the total number of items in the data set held by the adapter. - * - * @return The total number of items in this adapter. - */ - @Override - public int getItemCount() { - return PAGE_SIZE; - } - } -} diff --git a/uikit-custom-sample/src/main/java/com/sendbird/uikit/customsample/openchannel/community/CommunityActivity.java b/uikit-custom-sample/src/main/java/com/sendbird/uikit/customsample/openchannel/community/CommunityActivity.java deleted file mode 100644 index 2b4d87ac..00000000 --- a/uikit-custom-sample/src/main/java/com/sendbird/uikit/customsample/openchannel/community/CommunityActivity.java +++ /dev/null @@ -1,26 +0,0 @@ -package com.sendbird.uikit.customsample.openchannel.community; - -import android.content.Intent; -import android.os.Bundle; - -import androidx.annotation.NonNull; -import androidx.fragment.app.Fragment; - -import com.sendbird.uikit.activities.OpenChannelActivity; - - -/** - * Displays an open channel screen used for community. - */ -public class CommunityActivity extends OpenChannelActivity { - - @NonNull - @Override - protected Fragment createFragment() { - final Intent intent = getIntent(); - final Bundle args = intent != null && intent.getExtras() != null ? intent.getExtras() : new Bundle(); - CommunityChannelFragment fragment = new CommunityChannelFragment(); - fragment.setArguments(args); - return fragment; - } -} diff --git a/uikit-custom-sample/src/main/java/com/sendbird/uikit/customsample/openchannel/community/CommunityChannelFragment.java b/uikit-custom-sample/src/main/java/com/sendbird/uikit/customsample/openchannel/community/CommunityChannelFragment.java deleted file mode 100644 index 0a3cf124..00000000 --- a/uikit-custom-sample/src/main/java/com/sendbird/uikit/customsample/openchannel/community/CommunityChannelFragment.java +++ /dev/null @@ -1,70 +0,0 @@ -package com.sendbird.uikit.customsample.openchannel.community; - -import android.os.Bundle; - -import androidx.annotation.NonNull; -import androidx.appcompat.app.AlertDialog; - -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.vm.OpenChannelViewModel; - -/** - * Displays an open channel screen used for community. - */ -public class CommunityChannelFragment extends OpenChannelFragment { - private CustomMessageType customMessageType = CustomMessageType.NONE; - - @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); - OpenChannelModule.Params params = module.getParams(); - params.setUseHeader(true); - - OpenChannelHeaderComponent.Params headerParams = module.getHeaderComponent().getParams(); - headerParams.setUseLeftButton(true); - } - - @Override - protected void onBeforeReady(@NonNull ReadyStatus status, @NonNull OpenChannelModule module, @NonNull OpenChannelViewModel viewModel) { - super.onBeforeReady(status, module, viewModel); - getModule().getMessageInputComponent().setOnInputLeftButtonClickListener(v -> showMessageTypeDialog()); - if (viewModel.getChannel() != null) { - getModule().getMessageListComponent().setAdapter(new CustomOpenChannelMessageListAdapter(viewModel.getChannel(), true)); - } - } - - 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(); - } -} diff --git a/uikit-custom-sample/src/main/java/com/sendbird/uikit/customsample/openchannel/community/CommunityListFragment.java b/uikit-custom-sample/src/main/java/com/sendbird/uikit/customsample/openchannel/community/CommunityListFragment.java deleted file mode 100644 index 766e260c..00000000 --- a/uikit-custom-sample/src/main/java/com/sendbird/uikit/customsample/openchannel/community/CommunityListFragment.java +++ /dev/null @@ -1,57 +0,0 @@ -package com.sendbird.uikit.customsample.openchannel.community; - -import android.content.Intent; -import android.view.Menu; -import android.view.MenuInflater; -import android.view.MenuItem; -import android.view.View; - -import androidx.annotation.NonNull; - -import com.sendbird.android.channel.OpenChannel; -import com.sendbird.uikit.activities.CreateOpenChannelActivity; -import com.sendbird.uikit.activities.OpenChannelActivity; -import com.sendbird.uikit.customsample.R; -import com.sendbird.uikit.fragments.OpenChannelListFragment; -import com.sendbird.uikit.log.Logger; - -/** - * Displays an open channel list screen used for community. - */ -public class CommunityListFragment extends OpenChannelListFragment { - @Override - public void onCreateOptionsMenu(@NonNull Menu menu, @NonNull MenuInflater inflater) { - super.onCreateOptionsMenu(menu, inflater); - inflater.inflate(R.menu.community_list_menu, menu); - } - - @Override - public void onPrepareOptionsMenu(@NonNull Menu menu) { - final MenuItem createMenuItem = menu.findItem(R.id.action_create_channel); - View rootView = createMenuItem.getActionView(); - if (rootView != null) rootView.setOnClickListener(v -> onOptionsItemSelected(createMenuItem)); - super.onPrepareOptionsMenu(menu); - } - - @Override - public boolean onOptionsItemSelected(@NonNull MenuItem item) { - if (item.getItemId() == R.id.action_create_channel && getActivity() != null) { - Logger.d("++ create button clicked"); - Intent intent = new Intent(getActivity(), CreateOpenChannelActivity.class); - startActivity(intent); - } - return super.onOptionsItemSelected(item); - } - - @Override - protected void onItemClicked(@NonNull View view, int position, @NonNull OpenChannel channel) { - startActivity(OpenChannelActivity.newIntent(requireContext(), CommunityActivity.class, channel.getUrl())); - - } - - @Override - public void onResume() { - super.onResume(); - setHasOptionsMenu(true); - } -} diff --git a/uikit-custom-sample/src/main/java/com/sendbird/uikit/customsample/openchannel/livestream/LiveStreamActivity.java b/uikit-custom-sample/src/main/java/com/sendbird/uikit/customsample/openchannel/livestream/LiveStreamActivity.java deleted file mode 100644 index a41c56ac..00000000 --- a/uikit-custom-sample/src/main/java/com/sendbird/uikit/customsample/openchannel/livestream/LiveStreamActivity.java +++ /dev/null @@ -1,271 +0,0 @@ -package com.sendbird.uikit.customsample.openchannel.livestream; - -import android.animation.Animator; -import android.animation.AnimatorListenerAdapter; -import android.content.Context; -import android.content.Intent; -import android.content.res.Configuration; -import android.os.Bundle; -import android.os.Handler; -import android.os.Looper; -import android.os.Message; -import android.text.TextUtils; -import android.view.View; - -import androidx.annotation.NonNull; -import androidx.annotation.Nullable; -import androidx.appcompat.app.AppCompatActivity; -import androidx.fragment.app.FragmentManager; - -import com.bumptech.glide.Glide; -import com.bumptech.glide.load.engine.DiskCacheStrategy; -import com.sendbird.android.SendbirdChat; -import com.sendbird.android.channel.BaseChannel; -import com.sendbird.android.channel.OpenChannel; -import com.sendbird.android.handler.OpenChannelHandler; -import com.sendbird.android.message.BaseMessage; -import com.sendbird.android.user.User; -import com.sendbird.uikit.customsample.R; -import com.sendbird.uikit.customsample.consts.StringSet; -import com.sendbird.uikit.customsample.databinding.ActivityLiveStreamBinding; -import com.sendbird.uikit.customsample.models.LiveStreamingChannelData; -import com.sendbird.uikit.fragments.OpenChannelFragment; -import com.sendbird.uikit.utils.ContextUtils; - -import org.json.JSONException; -import org.json.JSONObject; - -import java.lang.ref.WeakReference; -import java.util.Locale; - -/** - * Displays an open channel screen used for live stream. - */ -public class LiveStreamActivity extends AppCompatActivity { - private final String CHANNEL_HANDLER_KEY = getClass().getSimpleName() + System.currentTimeMillis(); - - private ActivityLiveStreamBinding binding; - private String creatorName; - private String channelUrl; - private String inputText; - - private final HideHandler hideHandler = new HideHandler(this); - - /** - * Hides the system UI for full screen. - */ - private static class HideHandler extends Handler { - private final WeakReference weakReference; - - public HideHandler(@NonNull LiveStreamActivity activity) { - super(Looper.getMainLooper()); - this.weakReference = new WeakReference<>(activity); - } - - @Override - public void handleMessage(@NonNull Message msg) { - LiveStreamActivity activity = weakReference.get(); - if (activity != null) { - activity.hideSystemUI(); - } - } - } - - @NonNull - public static Intent newIntent(@NonNull Context context, @NonNull String channelUrl) { - Intent intent = new Intent(context, LiveStreamActivity.class); - intent.putExtra(StringSet.KEY_CHANNEL_URL, channelUrl); - return intent; - } - - @Override - protected void onSaveInstanceState(@NonNull Bundle outState) { - super.onSaveInstanceState(outState); - outState.putString(StringSet.KEY_INPUT_TEXT, inputText); - } - - @Override - protected void onCreate(@Nullable Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - binding = ActivityLiveStreamBinding.inflate(getLayoutInflater()); - View view = binding.getRoot(); - setContentView(view); - addChannelHandler(); - binding.ivLive.setVisibility(View.VISIBLE); - binding.ivLive.setOnClickListener(v -> { - if (binding.groupLiveControl.getVisibility() == View.VISIBLE) { - binding.groupLiveControl.setVisibility(View.GONE); - } else { - binding.groupLiveControl.setVisibility(View.VISIBLE); - } - }); - - binding.ivClose.setOnClickListener(v -> finish()); - if (binding.ivChatToggle != null) { - binding.ivChatToggle.setOnClickListener(v -> { - if (binding.sbFragmentContainer.getVisibility() == View.GONE) { - binding.sbFragmentContainer.animate() - .setDuration(300) - .alpha(1.0f) - .translationX(0.0f) - .setListener(new AnimatorListenerAdapter() { - @Override - public void onAnimationStart(Animator animation) { - super.onAnimationStart(animation); - binding.sbFragmentContainer.setVisibility(View.VISIBLE); - } - }); - binding.ivChatToggle.animate() - .setDuration(300) - .translationX(0.0f); - binding.ivChatToggle.setImageResource(R.drawable.ic_chat_hide); - } else { - binding.sbFragmentContainer.animate() - .setDuration(300) - .alpha(0.0f) - .translationX(binding.sbFragmentContainer.getWidth()) - .setListener(new AnimatorListenerAdapter() { - @Override - public void onAnimationEnd(Animator animation) { - super.onAnimationEnd(animation); - binding.sbFragmentContainer.setVisibility(View.GONE); - } - }); - binding.ivChatToggle.animate() - .setDuration(300) - .translationX(binding.sbFragmentContainer.getWidth()); - binding.ivChatToggle.setImageResource(R.drawable.ic_chat_show); - } - }); - } - - channelUrl = getIntent().getStringExtra(StringSet.KEY_CHANNEL_URL); - if (TextUtils.isEmpty(channelUrl)) { - ContextUtils.toastError(this, R.string.sb_text_error_get_channel); - } else { - OpenChannel.getChannel(channelUrl, (openChannel, e) -> { - if (e != null) { - return; - } - - if (binding == null || openChannel == null) return; - updateParticipantCount(openChannel.getParticipantCount()); - try { - LiveStreamingChannelData channelData = new LiveStreamingChannelData(new JSONObject(openChannel.getData())); - if (channelData.getCreator() == null) { - creatorName = ""; - } else { - creatorName = channelData.getCreator().getNickname(); - } - Glide.with(binding.getRoot().getContext()) - .load(channelData.getLiveUrl()) - .override(binding.ivLive.getMeasuredWidth(), binding.ivLive.getHeight()) - .diskCacheStrategy(DiskCacheStrategy.ALL) - .error(R.color.background_600) - .into(binding.ivLive); - } catch (JSONException ex) { - ex.printStackTrace(); - } - - if(savedInstanceState != null) { - inputText = savedInstanceState.getString(StringSet.KEY_INPUT_TEXT); - savedInstanceState.clear(); - } - - OpenChannelFragment fragment = createOpenChannelFragment(openChannel.getUrl()); - FragmentManager manager = getSupportFragmentManager(); - manager.popBackStack(); - manager.beginTransaction() - .replace(R.id.sb_fragment_container, fragment) - .commit(); - }); - } - } - - private void addChannelHandler() { - SendbirdChat.addChannelHandler(CHANNEL_HANDLER_KEY, new OpenChannelHandler() { - @Override - public void onMessageReceived(@NonNull BaseChannel baseChannel, @NonNull BaseMessage baseMessage) { - - } - - @Override - public void onUserEntered(@NonNull OpenChannel channel, @NonNull User user) { - if (channel.getUrl().equals(channelUrl)) { - updateParticipantCount(channel.getParticipantCount()); - } - } - - @Override - public void onUserExited(@NonNull OpenChannel channel, @NonNull User user) { - if (channel.getUrl().equals(channelUrl)) { - updateParticipantCount(channel.getParticipantCount()); - } - } - }); - } - - private void updateParticipantCount(int count) { - String text = String.valueOf(count); - if (count > 1000) { - text = String.format(Locale.US, "%.1fK", count / 1000F); - } - binding.tvParticipantCount.setText(String.format(getString(R.string.text_participants), text)); - } - - @Override - protected void onDestroy() { - super.onDestroy(); - hideHandler.removeMessages(0); - SendbirdChat.removeChannelHandler(CHANNEL_HANDLER_KEY); - } - - @Override - public void onWindowFocusChanged(boolean hasFocus) { - super.onWindowFocusChanged(hasFocus); - if (hasFocus) { - delayedHide(); - } else { - hideHandler.removeMessages(0); - } - } - - private void hideSystemUI() { - if (getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE) { - getWindow().getDecorView().setSystemUiVisibility( - View.SYSTEM_UI_FLAG_LAYOUT_STABLE | - View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION | - View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN | - View.SYSTEM_UI_FLAG_HIDE_NAVIGATION | - View.SYSTEM_UI_FLAG_FULLSCREEN | - View.SYSTEM_UI_FLAG_LOW_PROFILE | - View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY - ); - } - } - - private void delayedHide() { - hideHandler.removeMessages(0); - hideHandler.sendEmptyMessageDelayed(0, 300); - } - - /** - * Creates OpenChannelFragment with channel url. - *

- * In preparation for screen configuration change, the value is initialized. - *

- * @param channelUrl The channel url to be applied to this screen - * @return OpenChannelFragment 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 BaseViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - LayoutInflater inflater = LayoutInflater.from(parent.getContext()); - ViewLiveStreamListItemBinding binding = ViewLiveStreamListItemBinding.inflate(inflater, parent, false); - return new LiveStreamingListViewHolder(binding); - } - - static class LiveStreamingListViewHolder extends BaseViewHolder { - private final ViewLiveStreamListItemBinding binding; - - public LiveStreamingListViewHolder(@NonNull ViewLiveStreamListItemBinding binding) { - super(binding.getRoot()); - this.binding = binding; - } - - @Override - public void bind(@NonNull OpenChannel openChannel) { - int count = openChannel.getParticipantCount(); - String text = String.valueOf(count); - if (count > 1000) { - text = String.format(Locale.US, "%.1fK", count / 1000F); - } - binding.tvParticipantCount.setText(text); - - try { - LiveStreamingChannelData channelData = new LiveStreamingChannelData(new JSONObject(openChannel.getData())); - - binding.tvLiveTitle.setVisibility(View.VISIBLE); - binding.tvLiveTitle.setText(channelData.getName()); - - UserInfo creatorInfo = channelData.getCreator(); - if (creatorInfo == null || TextUtils.isEmpty(creatorInfo.getNickname())) { - binding.tvCreator.setVisibility(View.GONE); - } else { - binding.tvCreator.setVisibility(View.VISIBLE); - binding.tvCreator.setText(creatorInfo.getNickname()); - } - - if (channelData.getTags() == null || TextUtils.isEmpty(channelData.getTags().get(0))) { - binding.tvBadge.setVisibility(View.GONE); - } else { - binding.tvBadge.setVisibility(View.VISIBLE); - binding.tvBadge.setText(channelData.getTags().get(0)); - } - - Glide.with(binding.getRoot().getContext()) - .load(channelData.getLiveUrl()) - .override(binding.ivLiveThumbnail.getWidth(), binding.ivLiveThumbnail.getHeight()) - .centerCrop() - .diskCacheStrategy(DiskCacheStrategy.ALL) - .error(R.color.background_600) - .into(binding.ivLiveThumbnail); - - binding.ivChannelThumbnail.setVisibility(View.VISIBLE); - - Drawable errorIcon = DrawableUtils.createOvalIcon(binding.getRoot().getContext(), - R.color.background_300, R.drawable.icon_channels, R.color.ondark_01); - Glide.with(binding.getRoot().getContext()) - .load(channelData.getThumbnailUrl()) - .override(binding.ivChannelThumbnail.getWidth(), binding.ivChannelThumbnail.getHeight()) - .circleCrop() - .diskCacheStrategy(DiskCacheStrategy.ALL) - .error(errorIcon) - .into(binding.ivChannelThumbnail); - } catch (JSONException e) { - e.printStackTrace(); - binding.ivLiveThumbnail.setImageDrawable(null); - binding.ivChannelThumbnail.setVisibility(View.GONE); - binding.tvLiveTitle.setVisibility(View.GONE); - binding.tvBadge.setVisibility(View.GONE); - binding.tvCreator.setVisibility(View.GONE); - } - } - } -} diff --git a/uikit-custom-sample/src/main/java/com/sendbird/uikit/customsample/openchannel/livestream/LiveStreamListFragment.java b/uikit-custom-sample/src/main/java/com/sendbird/uikit/customsample/openchannel/livestream/LiveStreamListFragment.java deleted file mode 100644 index db3954d8..00000000 --- a/uikit-custom-sample/src/main/java/com/sendbird/uikit/customsample/openchannel/livestream/LiveStreamListFragment.java +++ /dev/null @@ -1,18 +0,0 @@ -package com.sendbird.uikit.customsample.openchannel.livestream; - -import android.view.View; - -import androidx.annotation.NonNull; - -import com.sendbird.android.channel.OpenChannel; -import com.sendbird.uikit.fragments.OpenChannelListFragment; - -/** - * Displays an open channel list screen used for live stream. - */ -public class LiveStreamListFragment extends OpenChannelListFragment { - @Override - protected void onItemClicked(@NonNull View view, int position, @NonNull OpenChannel channel) { - startActivity(LiveStreamActivity.newIntent(requireContext(), channel.getUrl())); - } -} diff --git a/uikit-custom-sample/src/main/java/com/sendbird/uikit/customsample/utils/DrawableUtils.java b/uikit-custom-sample/src/main/java/com/sendbird/uikit/customsample/utils/DrawableUtils.java deleted file mode 100644 index 994ee2f0..00000000 --- a/uikit-custom-sample/src/main/java/com/sendbird/uikit/customsample/utils/DrawableUtils.java +++ /dev/null @@ -1,79 +0,0 @@ -package com.sendbird.uikit.customsample.utils; - -import android.content.Context; -import android.content.res.ColorStateList; -import android.graphics.drawable.Drawable; -import android.graphics.drawable.LayerDrawable; -import android.graphics.drawable.ShapeDrawable; -import android.graphics.drawable.shapes.OvalShape; -import android.widget.ImageView; - -import androidx.annotation.ColorRes; -import androidx.annotation.DrawableRes; -import androidx.annotation.NonNull; -import androidx.annotation.Nullable; -import androidx.appcompat.content.res.AppCompatResources; -import androidx.core.graphics.drawable.DrawableCompat; - -import com.sendbird.android.message.BaseMessage; -import com.sendbird.android.message.SendingStatus; -import com.sendbird.uikit.R; - -/** - * This provides methods to draw icon and color. - */ -public class DrawableUtils { - @Nullable - public static Drawable setTintList(@NonNull Context context, int resId, int colorRes) { - if (colorRes == 0) { - return AppCompatResources.getDrawable(context, resId); - } - return setTintList(AppCompatResources.getDrawable(context, resId), AppCompatResources.getColorStateList(context, colorRes)); - } - - @Nullable - public static Drawable setTintList(@Nullable Drawable drawable, @Nullable ColorStateList colorStateList) { - if (drawable == null || colorStateList == null) { - return drawable; - } - drawable = DrawableCompat.wrap(drawable); - DrawableCompat.setTintList(drawable, colorStateList); - return drawable.mutate(); - } - - @NonNull - public static Drawable createOvalIcon(@NonNull Context context, @ColorRes int backgroundColor, - @DrawableRes int iconRes, @ColorRes int iconTint) { - return createOvalIcon(context, backgroundColor, 255, iconRes, iconTint); - } - - @NonNull - public static Drawable createOvalIcon(@NonNull Context context, @ColorRes int backgroundColor, int backgroundAlpha, - @DrawableRes int iconRes, @ColorRes int iconTint) { - ShapeDrawable ovalBackground = new ShapeDrawable(new OvalShape()); - ovalBackground.getPaint().setColor(context.getResources().getColor(backgroundColor)); - ovalBackground.getPaint().setAlpha(backgroundAlpha); - Drawable icon = setTintList(context, iconRes, iconTint); - int inset = (int) context.getResources().getDimension(R.dimen.sb_size_24); - return createLayerIcon(ovalBackground, icon, inset); - } - - @NonNull - public static Drawable createLayerIcon(@NonNull Drawable background, @Nullable Drawable icon, int inset) { - Drawable[] layer = {background, icon}; - LayerDrawable layerDrawable = new LayerDrawable(layer); - layerDrawable.setLayerInset(1, inset, inset, inset, inset); - return layerDrawable; - } - - public static void drawStatus(@NonNull ImageView view, @NonNull BaseMessage message) { - Context context = view.getContext(); - if (message.getSendingStatus() == SendingStatus.CANCELED || message.getSendingStatus() == SendingStatus.FAILED) { - view.setImageDrawable(DrawableUtils.setTintList(context, com.sendbird.uikit.customsample.R.drawable.icon_error, com.sendbird.uikit.customsample.R.color.error_300)); - } else if (message.getSendingStatus() == SendingStatus.SUCCEEDED) { - view.setImageDrawable(DrawableUtils.setTintList(context, com.sendbird.uikit.customsample.R.drawable.icon_done, com.sendbird.uikit.customsample.R.color.secondary_300)); - } else if (message.getSendingStatus() == SendingStatus.PENDING) { - view.setImageDrawable(DrawableUtils.setTintList(context, com.sendbird.uikit.customsample.R.drawable.sb_message_progress, com.sendbird.uikit.customsample.R.color.primary_300)); - } - } -} diff --git a/uikit-custom-sample/src/main/java/com/sendbird/uikit/customsample/utils/PreferenceUtils.java b/uikit-custom-sample/src/main/java/com/sendbird/uikit/customsample/utils/PreferenceUtils.java deleted file mode 100644 index be4c24d2..00000000 --- a/uikit-custom-sample/src/main/java/com/sendbird/uikit/customsample/utils/PreferenceUtils.java +++ /dev/null @@ -1,80 +0,0 @@ -package com.sendbird.uikit.customsample.utils; - -import android.annotation.SuppressLint; -import android.content.Context; -import android.content.SharedPreferences; - -import androidx.annotation.NonNull; - -/** - * This provides methods to manage preferences data. - */ -public class PreferenceUtils { - - private static final String PREFERENCE_KEY_USER_ID = "PREFERENCE_KEY_USER_ID"; - private static final String PREFERENCE_KEY_NICKNAME = "PREFERENCE_KEY_NICKNAME"; - private static final String PREFERENCE_KEY_PROFILE_URL = "PREFERENCE_KEY_PROFILE_URL"; - private static final String PREFERENCE_KEY_DO_NOT_DISTURB = "PREFERENCE_KEY_DO_NOT_DISTURB"; - - @SuppressLint("StaticFieldLeak") - private static Context context; - - // Prevent instantiation - private PreferenceUtils() { - } - - public static void init(@NonNull Context appContext) { - context = appContext.getApplicationContext(); - } - - private static SharedPreferences getSharedPreferences() { - return context.getSharedPreferences("sendbird", Context.MODE_PRIVATE); - } - - public static void setUserId(@NonNull String userId) { - SharedPreferences.Editor editor = getSharedPreferences().edit(); - editor.putString(PREFERENCE_KEY_USER_ID, userId).apply(); - } - - @NonNull - public static String getUserId() { - final String result = getSharedPreferences().getString(PREFERENCE_KEY_USER_ID, ""); - return result == null ? "" : result; - } - - public static void setNickname(@NonNull String nickname) { - SharedPreferences.Editor editor = getSharedPreferences().edit(); - editor.putString(PREFERENCE_KEY_NICKNAME, nickname).apply(); - } - - @NonNull - public static String getNickname() { - final String result = getSharedPreferences().getString(PREFERENCE_KEY_NICKNAME, ""); - return result == null ? "" : result; - } - - public static void setProfileUrl(@NonNull String profileUrl) { - SharedPreferences.Editor editor = getSharedPreferences().edit(); - editor.putString(PREFERENCE_KEY_PROFILE_URL, profileUrl).apply(); - } - - @NonNull - public static String getProfileUrl() { - final String result = getSharedPreferences().getString(PREFERENCE_KEY_PROFILE_URL, ""); - return result == null ? "" : result; - } - - public static void setDoNotDisturb(boolean doNotDisturb) { - SharedPreferences.Editor editor = getSharedPreferences().edit(); - editor.putBoolean(PREFERENCE_KEY_DO_NOT_DISTURB, doNotDisturb).apply(); - } - - public static boolean getDoNotDisturb() { - return getSharedPreferences().getBoolean(PREFERENCE_KEY_DO_NOT_DISTURB, false); - } - - public static void clearAll() { - SharedPreferences.Editor editor = getSharedPreferences().edit(); - editor.clear().apply(); - } -} diff --git a/uikit-custom-sample/src/main/java/com/sendbird/uikit/customsample/utils/PushUtils.java b/uikit-custom-sample/src/main/java/com/sendbird/uikit/customsample/utils/PushUtils.java deleted file mode 100644 index fec86a0d..00000000 --- a/uikit-custom-sample/src/main/java/com/sendbird/uikit/customsample/utils/PushUtils.java +++ /dev/null @@ -1,21 +0,0 @@ -package com.sendbird.uikit.customsample.utils; - -import androidx.annotation.NonNull; - -import com.sendbird.android.handler.PushRequestCompleteHandler; -import com.sendbird.android.push.SendbirdPushHandler; -import com.sendbird.android.push.SendbirdPushHelper; - -/** - * This provides methods to manage push handler. - */ -public class PushUtils { - - public static void registerPushHandler(@NonNull SendbirdPushHandler handler) { - SendbirdPushHelper.registerPushHandler(handler); - } - - public static void unregisterPushHandler(@NonNull PushRequestCompleteHandler listener) { - SendbirdPushHelper.unregisterPushHandler(listener); - } -} diff --git a/uikit-custom-sample/src/main/java/com/sendbird/uikit/customsample/widgets/CustomTabView.java b/uikit-custom-sample/src/main/java/com/sendbird/uikit/customsample/widgets/CustomTabView.java deleted file mode 100644 index 2e295d9c..00000000 --- a/uikit-custom-sample/src/main/java/com/sendbird/uikit/customsample/widgets/CustomTabView.java +++ /dev/null @@ -1,77 +0,0 @@ -package com.sendbird.uikit.customsample.widgets; - -import android.content.Context; -import android.util.AttributeSet; -import android.view.LayoutInflater; -import android.view.View; -import android.widget.FrameLayout; -import android.widget.ImageView; -import android.widget.TextView; - -import androidx.annotation.DrawableRes; -import androidx.annotation.NonNull; -import androidx.annotation.Nullable; -import androidx.appcompat.content.res.AppCompatResources; - -import com.sendbird.uikit.SendbirdUIKit; -import com.sendbird.uikit.customsample.R; -import com.sendbird.uikit.customsample.utils.DrawableUtils; - -/** - * View displaying icon and badge in tabs. - */ -public class CustomTabView extends FrameLayout { - private int tintColorRedId; - private TextView badgeView; - private ImageView iconView; - private TextView titleView; - - public CustomTabView(@NonNull Context context) { - this(context, null); - } - - public CustomTabView(@NonNull Context context, @Nullable AttributeSet attrs) { - this(context, attrs, 0); - } - - public CustomTabView(@NonNull Context context, @Nullable AttributeSet attrs, int defStyleAttr) { - super(context, attrs, defStyleAttr); - initView(context); - } - - private void initView(@NonNull Context context) { - LayoutInflater inflater = LayoutInflater.from(getContext()); - View view = inflater.inflate(R.layout.view_custom_tab, this, true); - badgeView = view.findViewById(R.id.badge); - iconView = view.findViewById(R.id.ivIcon); - titleView = view.findViewById(R.id.tvTitle); - - boolean isDarkMode = SendbirdUIKit.isDarkMode(); - tintColorRedId = isDarkMode ? R.color.selector_tab_tint_dark : R.color.selector_tab_tint; - - int badgeTextAppearance = isDarkMode ? R.style.SendbirdCaption3OnLight01 : R.style.SendbirdCaption3OnDark01; - int badgeBackgroundRes = isDarkMode ? R.drawable.shape_badge_background_dark : R.drawable.shape_badge_background; - int titleTextAppearance = isDarkMode ? R.style.SendbirdCaption2Primary200 : R.style.SendbirdCaption2Primary300; - - badgeView.setTextAppearance(context, badgeTextAppearance); - badgeView.setBackgroundResource(badgeBackgroundRes); - titleView.setTextAppearance(context, titleTextAppearance); - titleView.setTextColor(AppCompatResources.getColorStateList(context, tintColorRedId)); - } - - public void setBadgeVisibility(int visibility) { - badgeView.setVisibility(visibility); - } - - public void setBadgeCount(@Nullable String countString) { - badgeView.setText(countString); - } - - public void setIcon(@DrawableRes int iconResId) { - iconView.setImageDrawable(DrawableUtils.setTintList(getContext(), iconResId, tintColorRedId)); - } - - public void setTitle(@Nullable String title) { - titleView.setText(title); - } -} diff --git a/uikit-custom-sample/src/main/java/com/sendbird/uikit/customsample/widgets/WaitingDialog.java b/uikit-custom-sample/src/main/java/com/sendbird/uikit/customsample/widgets/WaitingDialog.java deleted file mode 100644 index 19986c71..00000000 --- a/uikit-custom-sample/src/main/java/com/sendbird/uikit/customsample/widgets/WaitingDialog.java +++ /dev/null @@ -1,81 +0,0 @@ -package com.sendbird.uikit.customsample.widgets; - -import android.app.Dialog; -import android.content.Context; -import android.content.DialogInterface; -import android.os.Handler; -import android.os.Looper; -import android.util.Log; - -import androidx.annotation.NonNull; -import androidx.annotation.Nullable; - -import com.sendbird.uikit.customsample.R; - - -public class WaitingDialog { - private final static String TAG = "logger"; - private final static Handler mainHandler = new Handler(Looper.getMainLooper()); - private static final Object waitingDialogLock = new Object(); - private static Dialog waitingDialog; - - - private static Dialog getWaitingDialog(@NonNull Context context) { - synchronized (waitingDialogLock) { - if (waitingDialog != null) { - return waitingDialog; - } - - waitingDialog = new Dialog(context, R.style.Widget_Sendbird_SendbirdProgressDialog); - return waitingDialog; - } - } - - public static void show(@NonNull Context context) { - show(context, false); - } - - public static void show(@NonNull Context context, int layoutResId) { - show(context, false, layoutResId, null); - } - - public static void show(@NonNull Context context, final boolean cancelable) { - show(context, cancelable, 0, null); - } - - public static void show(@NonNull Context context, final boolean cancelable, final int layoutResId, @Nullable DialogInterface.OnCancelListener listener) { - dismiss(); - - mainHandler.post(() -> { - Log.d(TAG, ">> WaitingDialog::show()"); - waitingDialog = getWaitingDialog(context); - // here we set layout of progress dialog - if (layoutResId <= 0) { - waitingDialog.setContentView(R.layout.sb_view_waiting_dialog); - } else { - waitingDialog.setContentView(layoutResId); - } - waitingDialog.setCancelable(cancelable); - if (listener != null) { - waitingDialog.setOnCancelListener(listener); - } - waitingDialog.show(); - }); - } - - public static void dismiss() { - mainHandler.post(() -> { - try { - Log.d(TAG, ">> WaitingDialog::cancel()"); - if (waitingDialog != null) { - synchronized (waitingDialogLock) { - waitingDialog.cancel(); - waitingDialog = null; - } - } - } catch (Exception e) { - Log.d(TAG, "", e); - } - }); - } -} diff --git a/uikit-custom-sample/src/main/res/drawable-hdpi/home_card_bg.9.png b/uikit-custom-sample/src/main/res/drawable-hdpi/home_card_bg.9.png deleted file mode 100644 index 9821eb49..00000000 Binary files a/uikit-custom-sample/src/main/res/drawable-hdpi/home_card_bg.9.png and /dev/null differ diff --git a/uikit-custom-sample/src/main/res/drawable-hdpi/icon_add.png b/uikit-custom-sample/src/main/res/drawable-hdpi/icon_add.png deleted file mode 100644 index 8c0dbebc..00000000 Binary files a/uikit-custom-sample/src/main/res/drawable-hdpi/icon_add.png and /dev/null differ diff --git a/uikit-custom-sample/src/main/res/drawable-hdpi/icon_arrow_left.png b/uikit-custom-sample/src/main/res/drawable-hdpi/icon_arrow_left.png deleted file mode 100644 index bc725b99..00000000 Binary files a/uikit-custom-sample/src/main/res/drawable-hdpi/icon_arrow_left.png and /dev/null differ diff --git a/uikit-custom-sample/src/main/res/drawable-hdpi/icon_channels.png b/uikit-custom-sample/src/main/res/drawable-hdpi/icon_channels.png deleted file mode 100644 index 1aa37f45..00000000 Binary files a/uikit-custom-sample/src/main/res/drawable-hdpi/icon_channels.png and /dev/null differ diff --git a/uikit-custom-sample/src/main/res/drawable-hdpi/icon_create.png b/uikit-custom-sample/src/main/res/drawable-hdpi/icon_create.png deleted file mode 100644 index c6f64606..00000000 Binary files a/uikit-custom-sample/src/main/res/drawable-hdpi/icon_create.png and /dev/null differ diff --git a/uikit-custom-sample/src/main/res/drawable-hdpi/icon_info.png b/uikit-custom-sample/src/main/res/drawable-hdpi/icon_info.png deleted file mode 100644 index c80555f7..00000000 Binary files a/uikit-custom-sample/src/main/res/drawable-hdpi/icon_info.png and /dev/null differ diff --git a/uikit-custom-sample/src/main/res/drawable-hdpi/icon_members.png b/uikit-custom-sample/src/main/res/drawable-hdpi/icon_members.png deleted file mode 100644 index f7759d06..00000000 Binary files a/uikit-custom-sample/src/main/res/drawable-hdpi/icon_members.png and /dev/null differ diff --git a/uikit-custom-sample/src/main/res/drawable-hdpi/icon_send.png b/uikit-custom-sample/src/main/res/drawable-hdpi/icon_send.png deleted file mode 100644 index 649209b9..00000000 Binary files a/uikit-custom-sample/src/main/res/drawable-hdpi/icon_send.png and /dev/null differ diff --git a/uikit-custom-sample/src/main/res/drawable-hdpi/logo_sendbird.png b/uikit-custom-sample/src/main/res/drawable-hdpi/logo_sendbird.png deleted file mode 100644 index 5c1bfad3..00000000 Binary files a/uikit-custom-sample/src/main/res/drawable-hdpi/logo_sendbird.png and /dev/null differ diff --git a/uikit-custom-sample/src/main/res/drawable-mdpi/home_card_bg.9.png b/uikit-custom-sample/src/main/res/drawable-mdpi/home_card_bg.9.png deleted file mode 100644 index 47a1cbdc..00000000 Binary files a/uikit-custom-sample/src/main/res/drawable-mdpi/home_card_bg.9.png and /dev/null differ diff --git a/uikit-custom-sample/src/main/res/drawable-mdpi/icon_add.png b/uikit-custom-sample/src/main/res/drawable-mdpi/icon_add.png deleted file mode 100644 index c90a3722..00000000 Binary files a/uikit-custom-sample/src/main/res/drawable-mdpi/icon_add.png and /dev/null differ diff --git a/uikit-custom-sample/src/main/res/drawable-mdpi/icon_arrow_left.png b/uikit-custom-sample/src/main/res/drawable-mdpi/icon_arrow_left.png deleted file mode 100644 index 1a886705..00000000 Binary files a/uikit-custom-sample/src/main/res/drawable-mdpi/icon_arrow_left.png and /dev/null differ diff --git a/uikit-custom-sample/src/main/res/drawable-mdpi/icon_create.png b/uikit-custom-sample/src/main/res/drawable-mdpi/icon_create.png deleted file mode 100644 index 28a8eff0..00000000 Binary files a/uikit-custom-sample/src/main/res/drawable-mdpi/icon_create.png and /dev/null differ diff --git a/uikit-custom-sample/src/main/res/drawable-mdpi/icon_info.png b/uikit-custom-sample/src/main/res/drawable-mdpi/icon_info.png deleted file mode 100644 index ff1a6dd6..00000000 Binary files a/uikit-custom-sample/src/main/res/drawable-mdpi/icon_info.png and /dev/null differ diff --git a/uikit-custom-sample/src/main/res/drawable-mdpi/icon_members.png b/uikit-custom-sample/src/main/res/drawable-mdpi/icon_members.png deleted file mode 100644 index c9403274..00000000 Binary files a/uikit-custom-sample/src/main/res/drawable-mdpi/icon_members.png and /dev/null differ diff --git a/uikit-custom-sample/src/main/res/drawable-mdpi/icon_send.png b/uikit-custom-sample/src/main/res/drawable-mdpi/icon_send.png deleted file mode 100644 index 5ad58da7..00000000 Binary files a/uikit-custom-sample/src/main/res/drawable-mdpi/icon_send.png and /dev/null differ diff --git a/uikit-custom-sample/src/main/res/drawable-mdpi/logo_sendbird.png b/uikit-custom-sample/src/main/res/drawable-mdpi/logo_sendbird.png deleted file mode 100644 index 69d8ddf1..00000000 Binary files a/uikit-custom-sample/src/main/res/drawable-mdpi/logo_sendbird.png and /dev/null differ diff --git a/uikit-custom-sample/src/main/res/drawable-xhdpi/home_card_bg.9.png b/uikit-custom-sample/src/main/res/drawable-xhdpi/home_card_bg.9.png deleted file mode 100644 index 41fce76d..00000000 Binary files a/uikit-custom-sample/src/main/res/drawable-xhdpi/home_card_bg.9.png and /dev/null differ diff --git a/uikit-custom-sample/src/main/res/drawable-xhdpi/icon_add.png b/uikit-custom-sample/src/main/res/drawable-xhdpi/icon_add.png deleted file mode 100644 index 4d49264d..00000000 Binary files a/uikit-custom-sample/src/main/res/drawable-xhdpi/icon_add.png and /dev/null differ diff --git a/uikit-custom-sample/src/main/res/drawable-xhdpi/icon_arrow_left.png b/uikit-custom-sample/src/main/res/drawable-xhdpi/icon_arrow_left.png deleted file mode 100644 index 03374a91..00000000 Binary files a/uikit-custom-sample/src/main/res/drawable-xhdpi/icon_arrow_left.png and /dev/null differ diff --git a/uikit-custom-sample/src/main/res/drawable-xhdpi/icon_create.png b/uikit-custom-sample/src/main/res/drawable-xhdpi/icon_create.png deleted file mode 100644 index 0d9e05a9..00000000 Binary files a/uikit-custom-sample/src/main/res/drawable-xhdpi/icon_create.png and /dev/null differ diff --git a/uikit-custom-sample/src/main/res/drawable-xhdpi/icon_info.png b/uikit-custom-sample/src/main/res/drawable-xhdpi/icon_info.png deleted file mode 100644 index 7c61abed..00000000 Binary files a/uikit-custom-sample/src/main/res/drawable-xhdpi/icon_info.png and /dev/null differ diff --git a/uikit-custom-sample/src/main/res/drawable-xhdpi/icon_members.png b/uikit-custom-sample/src/main/res/drawable-xhdpi/icon_members.png deleted file mode 100644 index ec61347a..00000000 Binary files a/uikit-custom-sample/src/main/res/drawable-xhdpi/icon_members.png and /dev/null differ diff --git a/uikit-custom-sample/src/main/res/drawable-xhdpi/icon_send.png b/uikit-custom-sample/src/main/res/drawable-xhdpi/icon_send.png deleted file mode 100644 index 8bdd61b8..00000000 Binary files a/uikit-custom-sample/src/main/res/drawable-xhdpi/icon_send.png and /dev/null differ diff --git a/uikit-custom-sample/src/main/res/drawable-xhdpi/logo_sendbird.png b/uikit-custom-sample/src/main/res/drawable-xhdpi/logo_sendbird.png deleted file mode 100644 index 781c85fc..00000000 Binary files a/uikit-custom-sample/src/main/res/drawable-xhdpi/logo_sendbird.png and /dev/null differ diff --git a/uikit-custom-sample/src/main/res/drawable-xxhdpi/home_card_bg.9.png b/uikit-custom-sample/src/main/res/drawable-xxhdpi/home_card_bg.9.png deleted file mode 100644 index 429edce2..00000000 Binary files a/uikit-custom-sample/src/main/res/drawable-xxhdpi/home_card_bg.9.png and /dev/null differ diff --git a/uikit-custom-sample/src/main/res/drawable-xxhdpi/icon_add.png b/uikit-custom-sample/src/main/res/drawable-xxhdpi/icon_add.png deleted file mode 100644 index df4d8fea..00000000 Binary files a/uikit-custom-sample/src/main/res/drawable-xxhdpi/icon_add.png and /dev/null differ diff --git a/uikit-custom-sample/src/main/res/drawable-xxhdpi/icon_arrow_left.png b/uikit-custom-sample/src/main/res/drawable-xxhdpi/icon_arrow_left.png deleted file mode 100644 index 65fd66a2..00000000 Binary files a/uikit-custom-sample/src/main/res/drawable-xxhdpi/icon_arrow_left.png and /dev/null differ diff --git a/uikit-custom-sample/src/main/res/drawable-xxhdpi/icon_create.png b/uikit-custom-sample/src/main/res/drawable-xxhdpi/icon_create.png deleted file mode 100644 index 1168ecdd..00000000 Binary files a/uikit-custom-sample/src/main/res/drawable-xxhdpi/icon_create.png and /dev/null differ diff --git a/uikit-custom-sample/src/main/res/drawable-xxhdpi/icon_info.png b/uikit-custom-sample/src/main/res/drawable-xxhdpi/icon_info.png deleted file mode 100644 index f2db23d5..00000000 Binary files a/uikit-custom-sample/src/main/res/drawable-xxhdpi/icon_info.png and /dev/null differ diff --git a/uikit-custom-sample/src/main/res/drawable-xxhdpi/icon_members.png b/uikit-custom-sample/src/main/res/drawable-xxhdpi/icon_members.png deleted file mode 100644 index 5d652ffb..00000000 Binary files a/uikit-custom-sample/src/main/res/drawable-xxhdpi/icon_members.png and /dev/null differ diff --git a/uikit-custom-sample/src/main/res/drawable-xxhdpi/icon_send.png b/uikit-custom-sample/src/main/res/drawable-xxhdpi/icon_send.png deleted file mode 100644 index 5cb35692..00000000 Binary files a/uikit-custom-sample/src/main/res/drawable-xxhdpi/icon_send.png and /dev/null differ diff --git a/uikit-custom-sample/src/main/res/drawable-xxhdpi/logo_sendbird.png b/uikit-custom-sample/src/main/res/drawable-xxhdpi/logo_sendbird.png deleted file mode 100644 index 8dfa42d6..00000000 Binary files a/uikit-custom-sample/src/main/res/drawable-xxhdpi/logo_sendbird.png and /dev/null differ diff --git a/uikit-custom-sample/src/main/res/drawable-xxxhdpi/home_card_bg.9.png b/uikit-custom-sample/src/main/res/drawable-xxxhdpi/home_card_bg.9.png deleted file mode 100644 index 076347e7..00000000 Binary files a/uikit-custom-sample/src/main/res/drawable-xxxhdpi/home_card_bg.9.png and /dev/null differ diff --git a/uikit-custom-sample/src/main/res/drawable-xxxhdpi/icon_add.png b/uikit-custom-sample/src/main/res/drawable-xxxhdpi/icon_add.png deleted file mode 100644 index e3ae542e..00000000 Binary files a/uikit-custom-sample/src/main/res/drawable-xxxhdpi/icon_add.png and /dev/null differ diff --git a/uikit-custom-sample/src/main/res/drawable-xxxhdpi/icon_arrow_left.png b/uikit-custom-sample/src/main/res/drawable-xxxhdpi/icon_arrow_left.png deleted file mode 100644 index 3eb44265..00000000 Binary files a/uikit-custom-sample/src/main/res/drawable-xxxhdpi/icon_arrow_left.png and /dev/null differ diff --git a/uikit-custom-sample/src/main/res/drawable-xxxhdpi/icon_create.png b/uikit-custom-sample/src/main/res/drawable-xxxhdpi/icon_create.png deleted file mode 100644 index 3b2464d2..00000000 Binary files a/uikit-custom-sample/src/main/res/drawable-xxxhdpi/icon_create.png and /dev/null differ diff --git a/uikit-custom-sample/src/main/res/drawable-xxxhdpi/icon_info.png b/uikit-custom-sample/src/main/res/drawable-xxxhdpi/icon_info.png deleted file mode 100644 index 9d3eb100..00000000 Binary files a/uikit-custom-sample/src/main/res/drawable-xxxhdpi/icon_info.png and /dev/null differ diff --git a/uikit-custom-sample/src/main/res/drawable-xxxhdpi/icon_members.png b/uikit-custom-sample/src/main/res/drawable-xxxhdpi/icon_members.png deleted file mode 100644 index a0567ac8..00000000 Binary files a/uikit-custom-sample/src/main/res/drawable-xxxhdpi/icon_members.png and /dev/null differ diff --git a/uikit-custom-sample/src/main/res/drawable-xxxhdpi/icon_send.png b/uikit-custom-sample/src/main/res/drawable-xxxhdpi/icon_send.png deleted file mode 100644 index 83156f39..00000000 Binary files a/uikit-custom-sample/src/main/res/drawable-xxxhdpi/icon_send.png and /dev/null differ diff --git a/uikit-custom-sample/src/main/res/drawable-xxxhdpi/logo_sendbird.png b/uikit-custom-sample/src/main/res/drawable-xxxhdpi/logo_sendbird.png deleted file mode 100644 index d83fc20c..00000000 Binary files a/uikit-custom-sample/src/main/res/drawable-xxxhdpi/logo_sendbird.png and /dev/null differ diff --git a/uikit-custom-sample/src/main/res/drawable/custom_unread_count_background.xml b/uikit-custom-sample/src/main/res/drawable/custom_unread_count_background.xml deleted file mode 100644 index 913a2b68..00000000 --- a/uikit-custom-sample/src/main/res/drawable/custom_unread_count_background.xml +++ /dev/null @@ -1,10 +0,0 @@ - - - - - \ No newline at end of file diff --git a/uikit-custom-sample/src/main/res/drawable/sb_button_uncontained_background_custom.xml b/uikit-custom-sample/src/main/res/drawable/sb_button_uncontained_background_custom.xml deleted file mode 100644 index b57814c1..00000000 --- a/uikit-custom-sample/src/main/res/drawable/sb_button_uncontained_background_custom.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - - - - \ No newline at end of file diff --git a/uikit-custom-sample/src/main/res/drawable/selector_button_primary_300.xml b/uikit-custom-sample/src/main/res/drawable/selector_button_primary_300.xml deleted file mode 100644 index 2ff9611d..00000000 --- a/uikit-custom-sample/src/main/res/drawable/selector_button_primary_300.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - - - \ No newline at end of file diff --git a/uikit-custom-sample/src/main/res/drawable/selector_home_channel_type_button.xml b/uikit-custom-sample/src/main/res/drawable/selector_home_channel_type_button.xml deleted file mode 100644 index ec7c2988..00000000 --- a/uikit-custom-sample/src/main/res/drawable/selector_home_channel_type_button.xml +++ /dev/null @@ -1,26 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/uikit-custom-sample/src/main/res/drawable/shape_badge_background_dark.xml b/uikit-custom-sample/src/main/res/drawable/shape_badge_background_dark.xml deleted file mode 100644 index 9749dd4f..00000000 --- a/uikit-custom-sample/src/main/res/drawable/shape_badge_background_dark.xml +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - - \ No newline at end of file diff --git a/uikit-custom-sample/src/main/res/drawable/shape_edit_text_background_light.xml b/uikit-custom-sample/src/main/res/drawable/shape_edit_text_background_light.xml deleted file mode 100644 index bf1b45a7..00000000 --- a/uikit-custom-sample/src/main/res/drawable/shape_edit_text_background_light.xml +++ /dev/null @@ -1,17 +0,0 @@ - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/uikit-custom-sample/src/main/res/drawable/shape_image_view_background_light.xml b/uikit-custom-sample/src/main/res/drawable/shape_image_view_background_light.xml deleted file mode 100644 index 79c2bb85..00000000 --- a/uikit-custom-sample/src/main/res/drawable/shape_image_view_background_light.xml +++ /dev/null @@ -1,5 +0,0 @@ - - - - \ No newline at end of file diff --git a/uikit-custom-sample/src/main/res/drawable/shape_round_rect_primary_500.xml b/uikit-custom-sample/src/main/res/drawable/shape_round_rect_primary_500.xml deleted file mode 100644 index 89d2600d..00000000 --- a/uikit-custom-sample/src/main/res/drawable/shape_round_rect_primary_500.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - - \ No newline at end of file diff --git a/uikit-custom-sample/src/main/res/layout-land/activity_live_stream.xml b/uikit-custom-sample/src/main/res/layout-land/activity_live_stream.xml deleted file mode 100644 index 0c049119..00000000 --- a/uikit-custom-sample/src/main/res/layout-land/activity_live_stream.xml +++ /dev/null @@ -1,105 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/uikit-custom-sample/src/main/res/layout/activity_home.xml b/uikit-custom-sample/src/main/res/layout/activity_home.xml deleted file mode 100644 index eabb8df8..00000000 --- a/uikit-custom-sample/src/main/res/layout/activity_home.xml +++ /dev/null @@ -1,200 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/uikit-custom-sample/src/main/res/layout/activity_live_stream.xml b/uikit-custom-sample/src/main/res/layout/activity_live_stream.xml deleted file mode 100644 index 5ec43542..00000000 --- a/uikit-custom-sample/src/main/res/layout/activity_live_stream.xml +++ /dev/null @@ -1,87 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/uikit-custom-sample/src/main/res/layout/activity_login.xml b/uikit-custom-sample/src/main/res/layout/activity_login.xml deleted file mode 100644 index 3e772f6c..00000000 --- a/uikit-custom-sample/src/main/res/layout/activity_login.xml +++ /dev/null @@ -1,132 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/uikit-custom-sample/src/main/res/layout/activity_open_channel_main.xml b/uikit-custom-sample/src/main/res/layout/activity_open_channel_main.xml deleted file mode 100644 index d12ce2c2..00000000 --- a/uikit-custom-sample/src/main/res/layout/activity_open_channel_main.xml +++ /dev/null @@ -1,73 +0,0 @@ - - - - - - - - - - - - - - diff --git a/uikit-custom-sample/src/main/res/layout/activity_splash.xml b/uikit-custom-sample/src/main/res/layout/activity_splash.xml deleted file mode 100644 index 80f4c1cd..00000000 --- a/uikit-custom-sample/src/main/res/layout/activity_splash.xml +++ /dev/null @@ -1,21 +0,0 @@ - - - - - - - \ No newline at end of file diff --git a/uikit-custom-sample/src/main/res/layout/fragment_open_channel_list.xml b/uikit-custom-sample/src/main/res/layout/fragment_open_channel_list.xml deleted file mode 100644 index 8e1de4b3..00000000 --- a/uikit-custom-sample/src/main/res/layout/fragment_open_channel_list.xml +++ /dev/null @@ -1,19 +0,0 @@ - - - - - - - - \ No newline at end of file diff --git a/uikit-custom-sample/src/main/res/layout/fragment_settings.xml b/uikit-custom-sample/src/main/res/layout/fragment_settings.xml deleted file mode 100644 index db3d9a39..00000000 --- a/uikit-custom-sample/src/main/res/layout/fragment_settings.xml +++ /dev/null @@ -1,202 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/uikit-custom-sample/src/main/res/layout/view_community_list_item.xml b/uikit-custom-sample/src/main/res/layout/view_community_list_item.xml deleted file mode 100644 index a7a08423..00000000 --- a/uikit-custom-sample/src/main/res/layout/view_community_list_item.xml +++ /dev/null @@ -1,76 +0,0 @@ - - - - - - - - - - - - - - \ No newline at end of file diff --git a/uikit-custom-sample/src/main/res/layout/view_custom_channel_holder.xml b/uikit-custom-sample/src/main/res/layout/view_custom_channel_holder.xml deleted file mode 100644 index 03f4b20b..00000000 --- a/uikit-custom-sample/src/main/res/layout/view_custom_channel_holder.xml +++ /dev/null @@ -1,106 +0,0 @@ - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/uikit-custom-sample/src/main/res/layout/view_custom_channel_input.xml b/uikit-custom-sample/src/main/res/layout/view_custom_channel_input.xml deleted file mode 100644 index 3dfe09fa..00000000 --- a/uikit-custom-sample/src/main/res/layout/view_custom_channel_input.xml +++ /dev/null @@ -1,143 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/uikit-custom-sample/src/main/res/layout/view_custom_channel_menu_search_button.xml b/uikit-custom-sample/src/main/res/layout/view_custom_channel_menu_search_button.xml deleted file mode 100644 index 334b3802..00000000 --- a/uikit-custom-sample/src/main/res/layout/view_custom_channel_menu_search_button.xml +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - diff --git a/uikit-custom-sample/src/main/res/layout/view_custom_channel_menu_settings_button.xml b/uikit-custom-sample/src/main/res/layout/view_custom_channel_menu_settings_button.xml deleted file mode 100644 index 27fa7053..00000000 --- a/uikit-custom-sample/src/main/res/layout/view_custom_channel_menu_settings_button.xml +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - diff --git a/uikit-custom-sample/src/main/res/layout/view_custom_channel_settings_menu.xml b/uikit-custom-sample/src/main/res/layout/view_custom_channel_settings_menu.xml deleted file mode 100644 index b1c3c08d..00000000 --- a/uikit-custom-sample/src/main/res/layout/view_custom_channel_settings_menu.xml +++ /dev/null @@ -1,61 +0,0 @@ - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/uikit-custom-sample/src/main/res/layout/view_custom_channel_settings_menu_edit_button.xml b/uikit-custom-sample/src/main/res/layout/view_custom_channel_settings_menu_edit_button.xml deleted file mode 100644 index cd05fa77..00000000 --- a/uikit-custom-sample/src/main/res/layout/view_custom_channel_settings_menu_edit_button.xml +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - diff --git a/uikit-custom-sample/src/main/res/layout/view_custom_channels_menu_create_button.xml b/uikit-custom-sample/src/main/res/layout/view_custom_channels_menu_create_button.xml deleted file mode 100644 index fe865778..00000000 --- a/uikit-custom-sample/src/main/res/layout/view_custom_channels_menu_create_button.xml +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - diff --git a/uikit-custom-sample/src/main/res/layout/view_custom_channels_menu_settings_button.xml b/uikit-custom-sample/src/main/res/layout/view_custom_channels_menu_settings_button.xml deleted file mode 100644 index bae667a7..00000000 --- a/uikit-custom-sample/src/main/res/layout/view_custom_channels_menu_settings_button.xml +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - diff --git a/uikit-custom-sample/src/main/res/layout/view_custom_menu_create_button.xml b/uikit-custom-sample/src/main/res/layout/view_custom_menu_create_button.xml deleted file mode 100644 index 52f276f1..00000000 --- a/uikit-custom-sample/src/main/res/layout/view_custom_menu_create_button.xml +++ /dev/null @@ -1,17 +0,0 @@ - - - - - - diff --git a/uikit-custom-sample/src/main/res/layout/view_custom_menu_edit_button.xml b/uikit-custom-sample/src/main/res/layout/view_custom_menu_edit_button.xml deleted file mode 100644 index 7d368c4a..00000000 --- a/uikit-custom-sample/src/main/res/layout/view_custom_menu_edit_button.xml +++ /dev/null @@ -1,17 +0,0 @@ - - - - - - diff --git a/uikit-custom-sample/src/main/res/layout/view_custom_menu_select_button.xml b/uikit-custom-sample/src/main/res/layout/view_custom_menu_select_button.xml deleted file mode 100644 index 71ef2705..00000000 --- a/uikit-custom-sample/src/main/res/layout/view_custom_menu_select_button.xml +++ /dev/null @@ -1,18 +0,0 @@ - - - - - - diff --git a/uikit-custom-sample/src/main/res/layout/view_custom_message_search_header.xml b/uikit-custom-sample/src/main/res/layout/view_custom_message_search_header.xml deleted file mode 100644 index a24b5b1f..00000000 --- a/uikit-custom-sample/src/main/res/layout/view_custom_message_search_header.xml +++ /dev/null @@ -1,51 +0,0 @@ - - - - - - - - - - \ No newline at end of file diff --git a/uikit-custom-sample/src/main/res/layout/view_custom_moderation_list.xml b/uikit-custom-sample/src/main/res/layout/view_custom_moderation_list.xml deleted file mode 100644 index 4f03c99c..00000000 --- a/uikit-custom-sample/src/main/res/layout/view_custom_moderation_list.xml +++ /dev/null @@ -1,98 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/uikit-custom-sample/src/main/res/layout/view_custom_searched_message_holder.xml b/uikit-custom-sample/src/main/res/layout/view_custom_searched_message_holder.xml deleted file mode 100644 index 820a1ce9..00000000 --- a/uikit-custom-sample/src/main/res/layout/view_custom_searched_message_holder.xml +++ /dev/null @@ -1,50 +0,0 @@ - - - - - - - - - - \ No newline at end of file diff --git a/uikit-custom-sample/src/main/res/layout/view_custom_suggested_mention_holder.xml b/uikit-custom-sample/src/main/res/layout/view_custom_suggested_mention_holder.xml deleted file mode 100644 index a97edbc0..00000000 --- a/uikit-custom-sample/src/main/res/layout/view_custom_suggested_mention_holder.xml +++ /dev/null @@ -1,24 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/uikit-custom-sample/src/main/res/layout/view_custom_user_holder.xml b/uikit-custom-sample/src/main/res/layout/view_custom_user_holder.xml deleted file mode 100644 index d0382568..00000000 --- a/uikit-custom-sample/src/main/res/layout/view_custom_user_holder.xml +++ /dev/null @@ -1,31 +0,0 @@ - - - - - - - - \ No newline at end of file diff --git a/uikit-custom-sample/src/main/res/layout/view_custom_user_typed_holder.xml b/uikit-custom-sample/src/main/res/layout/view_custom_user_typed_holder.xml deleted file mode 100644 index dd209b47..00000000 --- a/uikit-custom-sample/src/main/res/layout/view_custom_user_typed_holder.xml +++ /dev/null @@ -1,48 +0,0 @@ - - - - - - - - - - \ No newline at end of file diff --git a/uikit-custom-sample/src/main/res/layout/view_custom_user_typed_menu_right_button.xml b/uikit-custom-sample/src/main/res/layout/view_custom_user_typed_menu_right_button.xml deleted file mode 100644 index 1af13f40..00000000 --- a/uikit-custom-sample/src/main/res/layout/view_custom_user_typed_menu_right_button.xml +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - diff --git a/uikit-custom-sample/src/main/res/layout/view_emoji_message_me_holder.xml b/uikit-custom-sample/src/main/res/layout/view_emoji_message_me_holder.xml deleted file mode 100644 index 34fb2181..00000000 --- a/uikit-custom-sample/src/main/res/layout/view_emoji_message_me_holder.xml +++ /dev/null @@ -1,55 +0,0 @@ - - - - - - - - - - - - diff --git a/uikit-custom-sample/src/main/res/layout/view_emoji_message_other_holder.xml b/uikit-custom-sample/src/main/res/layout/view_emoji_message_other_holder.xml deleted file mode 100644 index 7b24e4cb..00000000 --- a/uikit-custom-sample/src/main/res/layout/view_emoji_message_other_holder.xml +++ /dev/null @@ -1,69 +0,0 @@ - - - - - - - - - - - - - - \ No newline at end of file diff --git a/uikit-custom-sample/src/main/res/layout/view_live_stream_list_item.xml b/uikit-custom-sample/src/main/res/layout/view_live_stream_list_item.xml deleted file mode 100644 index 9a8e5825..00000000 --- a/uikit-custom-sample/src/main/res/layout/view_live_stream_list_item.xml +++ /dev/null @@ -1,117 +0,0 @@ - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/uikit-custom-sample/src/main/res/layout/view_open_channel_highlight_message_holder.xml b/uikit-custom-sample/src/main/res/layout/view_open_channel_highlight_message_holder.xml deleted file mode 100644 index 58d02988..00000000 --- a/uikit-custom-sample/src/main/res/layout/view_open_channel_highlight_message_holder.xml +++ /dev/null @@ -1,98 +0,0 @@ - - - - - - - - - - - - - - - - - - - - diff --git a/uikit-custom-sample/src/main/res/menu/channel_menu.xml b/uikit-custom-sample/src/main/res/menu/channel_menu.xml deleted file mode 100644 index 77723e84..00000000 --- a/uikit-custom-sample/src/main/res/menu/channel_menu.xml +++ /dev/null @@ -1,18 +0,0 @@ - - - - - - - \ No newline at end of file diff --git a/uikit-custom-sample/src/main/res/menu/channel_settings_menu.xml b/uikit-custom-sample/src/main/res/menu/channel_settings_menu.xml deleted file mode 100644 index 8c027e35..00000000 --- a/uikit-custom-sample/src/main/res/menu/channel_settings_menu.xml +++ /dev/null @@ -1,11 +0,0 @@ - - - - - \ No newline at end of file diff --git a/uikit-custom-sample/src/main/res/menu/channels_menu.xml b/uikit-custom-sample/src/main/res/menu/channels_menu.xml deleted file mode 100644 index db715d80..00000000 --- a/uikit-custom-sample/src/main/res/menu/channels_menu.xml +++ /dev/null @@ -1,17 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/uikit-custom-sample/src/main/res/menu/community_list_menu.xml b/uikit-custom-sample/src/main/res/menu/community_list_menu.xml deleted file mode 100644 index aea349b4..00000000 --- a/uikit-custom-sample/src/main/res/menu/community_list_menu.xml +++ /dev/null @@ -1,10 +0,0 @@ - - - - \ No newline at end of file diff --git a/uikit-custom-sample/src/main/res/menu/select_user_menu.xml b/uikit-custom-sample/src/main/res/menu/select_user_menu.xml deleted file mode 100644 index e4f6c088..00000000 --- a/uikit-custom-sample/src/main/res/menu/select_user_menu.xml +++ /dev/null @@ -1,11 +0,0 @@ - - - - - \ No newline at end of file diff --git a/uikit-custom-sample/src/main/res/menu/settings_menu.xml b/uikit-custom-sample/src/main/res/menu/settings_menu.xml deleted file mode 100644 index a493da2c..00000000 --- a/uikit-custom-sample/src/main/res/menu/settings_menu.xml +++ /dev/null @@ -1,10 +0,0 @@ - - - - \ No newline at end of file diff --git a/uikit-custom-sample/src/main/res/menu/user_typed_menu.xml b/uikit-custom-sample/src/main/res/menu/user_typed_menu.xml deleted file mode 100644 index 24391fb7..00000000 --- a/uikit-custom-sample/src/main/res/menu/user_typed_menu.xml +++ /dev/null @@ -1,10 +0,0 @@ - - - - \ No newline at end of file diff --git a/uikit-custom-sample/src/main/res/values/colors.xml b/uikit-custom-sample/src/main/res/values/colors.xml deleted file mode 100644 index 35c8d97b..00000000 --- a/uikit-custom-sample/src/main/res/values/colors.xml +++ /dev/null @@ -1,42 +0,0 @@ - - - #0091FF - #006BBD - #2EBA9F - #F78900 - - #006BBD - #007CBD - #0091FF - #35A8FF - #85CAFF - #066858 - #027d69 - #259c72 - #69c085 - #a8e2ab - #9d091e - #bf0711 - #de360b - #f66161 - #fdaaaa - #000000 - #161616 - #2c2c2c - #393939 - #bdbdbd - #e0e0e0 - #eeeeee - #ffffff - #8c000000 - #51000000 - #e1000000 - #80000000 - #61000000 - #1e000000 - #e1ffffff - #80ffffff - #61ffffff - #1effffff - #adc9ff - \ No newline at end of file diff --git a/uikit-custom-sample/src/main/res/values/sendbird_text_appearance.xml b/uikit-custom-sample/src/main/res/values/sendbird_text_appearance.xml deleted file mode 100755 index fbf15fa2..00000000 --- a/uikit-custom-sample/src/main/res/values/sendbird_text_appearance.xml +++ /dev/null @@ -1,1216 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/uikit-custom-sample/src/main/res/values/strings.xml b/uikit-custom-sample/src/main/res/values/strings.xml deleted file mode 100644 index 89f38e04..00000000 --- a/uikit-custom-sample/src/main/res/values/strings.xml +++ /dev/null @@ -1,42 +0,0 @@ - - SendbirdUIKitCustomSample - Sendbird UIKit Sample - - UI Kit v%1$s      SDK v%2$s - User ID - Nickname - SIGN IN - - My settings - EDIT - User ID - Do not disturb - Exit to home - Change nickname - Change profile image - - Channels - Settings - 99+ - - SIGN OUT - Home - Group channel - Open channel - 1 on 1, Group chat with members - Live streams, Open community chat - Create community - Live streams - Community - Preset channels developed by UIKit - Create - Enter channel name - LIVE - %s participants - - - Leave this channel? - Okay - %d seleted - %s\nneeds permission to receive push notification. Go to Settings to allow access - diff --git a/uikit-custom-sample/src/main/res/values/styles.xml b/uikit-custom-sample/src/main/res/values/styles.xml deleted file mode 100644 index 61c921d8..00000000 --- a/uikit-custom-sample/src/main/res/values/styles.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - - \ No newline at end of file diff --git a/uikit-custom-sample/src/main/res/values/styles_custom.xml b/uikit-custom-sample/src/main/res/values/styles_custom.xml deleted file mode 100755 index d5fcdf74..00000000 --- a/uikit-custom-sample/src/main/res/values/styles_custom.xml +++ /dev/null @@ -1,214 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/uikit-sample/google-services.json b/uikit-sample/google-services.json deleted file mode 100644 index e1093147..00000000 --- a/uikit-sample/google-services.json +++ /dev/null @@ -1,98 +0,0 @@ -{ - "project_info": { - "project_number": "45318056021", - "firebase_url": "https://sample-android-uikit.firebaseio.com", - "project_id": "sample-android-uikit", - "storage_bucket": "sample-android-uikit.appspot.com" - }, - "client": [ - { - "client_info": { - "mobilesdk_app_id": "1:45318056021:android:54331c18dc2a59c97e8cdc", - "android_client_info": { - "package_name": "com.sendbird.orange_sample" - } - }, - "oauth_client": [ - { - "client_id": "45318056021-79pcjv9ifmjj53nh5aphgkrdm0ns31f2.apps.googleusercontent.com", - "client_type": 3 - } - ], - "api_key": [ - { - "current_key": "AIzaSyC71JAO4Gu5nHXTengB7qf4fptqx9EmVvI" - } - ], - "services": { - "appinvite_service": { - "other_platform_oauth_client": [ - { - "client_id": "45318056021-79pcjv9ifmjj53nh5aphgkrdm0ns31f2.apps.googleusercontent.com", - "client_type": 3 - } - ] - } - } - }, - { - "client_info": { - "mobilesdk_app_id": "1:45318056021:android:5e77060a31abc51a7e8cdc", - "android_client_info": { - "package_name": "com.sendbird.uikit.customsample" - } - }, - "oauth_client": [ - { - "client_id": "45318056021-79pcjv9ifmjj53nh5aphgkrdm0ns31f2.apps.googleusercontent.com", - "client_type": 3 - } - ], - "api_key": [ - { - "current_key": "AIzaSyC71JAO4Gu5nHXTengB7qf4fptqx9EmVvI" - } - ], - "services": { - "appinvite_service": { - "other_platform_oauth_client": [ - { - "client_id": "45318056021-79pcjv9ifmjj53nh5aphgkrdm0ns31f2.apps.googleusercontent.com", - "client_type": 3 - } - ] - } - } - }, - { - "client_info": { - "mobilesdk_app_id": "1:45318056021:android:9351cabdc8e2eb1b7e8cdc", - "android_client_info": { - "package_name": "com.sendbird.uikit.sample" - } - }, - "oauth_client": [ - { - "client_id": "45318056021-79pcjv9ifmjj53nh5aphgkrdm0ns31f2.apps.googleusercontent.com", - "client_type": 3 - } - ], - "api_key": [ - { - "current_key": "AIzaSyC71JAO4Gu5nHXTengB7qf4fptqx9EmVvI" - } - ], - "services": { - "appinvite_service": { - "other_platform_oauth_client": [ - { - "client_id": "45318056021-79pcjv9ifmjj53nh5aphgkrdm0ns31f2.apps.googleusercontent.com", - "client_type": 3 - } - ] - } - } - } - ], - "configuration_version": "1" -} \ No newline at end of file diff --git a/uikit-sample/proguard-rules.pro b/uikit-sample/proguard-rules.pro deleted file mode 100644 index f1b42451..00000000 --- a/uikit-sample/proguard-rules.pro +++ /dev/null @@ -1,21 +0,0 @@ -# Add project specific ProGuard rules here. -# You can control the set of applied configuration files using the -# proguardFiles setting in build.gradle. -# -# For more details, see -# http://developer.android.com/guide/developing/tools/proguard.html - -# If your project uses WebView with JS, uncomment the following -# and specify the fully qualified class name to the JavaScript interface -# class: -#-keepclassmembers class fqcn.of.javascript.interface.for.webview { -# public *; -#} - -# Uncomment this to preserve the line number information for -# debugging stack traces. -#-keepattributes SourceFile,LineNumberTable - -# If you keep the line number information, uncomment this to -# hide the original source file name. -#-renamesourcefileattribute SourceFile diff --git a/uikit-sample/src/main/AndroidManifest.xml b/uikit-sample/src/main/AndroidManifest.xml deleted file mode 100644 index 27806e5d..00000000 --- a/uikit-sample/src/main/AndroidManifest.xml +++ /dev/null @@ -1,57 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/uikit-sample/src/main/ic_launcher-web.png b/uikit-sample/src/main/ic_launcher-web.png deleted file mode 100644 index 39d9d3b3..00000000 Binary files a/uikit-sample/src/main/ic_launcher-web.png and /dev/null differ diff --git a/uikit-sample/src/main/kotlin/com/sendbird/uikit_messaging_android/BaseApplication.kt b/uikit-sample/src/main/kotlin/com/sendbird/uikit_messaging_android/BaseApplication.kt deleted file mode 100644 index aff389bb..00000000 --- a/uikit-sample/src/main/kotlin/com/sendbird/uikit_messaging_android/BaseApplication.kt +++ /dev/null @@ -1,133 +0,0 @@ -package com.sendbird.uikit_messaging_android - -import androidx.lifecycle.LiveData -import androidx.lifecycle.MutableLiveData -import androidx.multidex.MultiDexApplication -import com.sendbird.android.exception.SendbirdException -import com.sendbird.android.handler.InitResultHandler -import com.sendbird.android.params.OpenChannelCreateParams -import com.sendbird.uikit.SendbirdUIKit -import com.sendbird.uikit.adapter.SendbirdUIKitAdapter -import com.sendbird.uikit.consts.ReplyType -import com.sendbird.uikit.consts.ThreadReplySelectType -import com.sendbird.uikit.interfaces.CustomParamsHandler -import com.sendbird.uikit.interfaces.UserInfo -import com.sendbird.uikit.log.Logger -import com.sendbird.uikit.model.configurations.UIKitConfig -import com.sendbird.uikit_messaging_android.consts.InitState -import com.sendbird.uikit_messaging_android.consts.StringSet -import com.sendbird.uikit_messaging_android.fcm.MyFirebaseMessagingService -import com.sendbird.uikit_messaging_android.utils.PreferenceUtils -import com.sendbird.uikit_messaging_android.utils.PushUtils - -/** - * Base application to initialize Sendbird UIKit. - */ -class BaseApplication : MultiDexApplication() { - - companion object { - private const val APP_ID = "2D7B4CDB-932F-4082-9B09-A1153792DC8D" - private val initState = MutableLiveData() - - /** - * Returns the state of the result from initialization of Sendbird UIKit. - * - * @return the [InitState] instance - */ - fun initStateChanges(): LiveData { - return initState - } - } - - /** - * Initializes Sendbird UIKit - */ - override fun onCreate() { - super.onCreate() - PreferenceUtils.init(applicationContext) - SendbirdUIKit.init(object : SendbirdUIKitAdapter { - override fun getAppId(): String { - var appId: String - if (BuildConfig.DEBUG) { - appId = PreferenceUtils.appId - if (appId.isEmpty()) { - appId = APP_ID - } - } else { - appId = APP_ID - } - Logger.d("++ app id : %s", appId) - return appId - } - - override fun getAccessToken(): String { - return "" - } - - override fun getUserInfo(): UserInfo { - return object : UserInfo { - override fun getUserId(): String { - return PreferenceUtils.userId - } - - override fun getNickname(): String { - return PreferenceUtils.nickname - } - - override fun getProfileUrl(): String { - return PreferenceUtils.profileUrl - } - } - } - - override fun getInitResultHandler(): InitResultHandler { - return object : InitResultHandler { - override fun onMigrationStarted() { - initState.value = InitState.MIGRATING - } - - override fun onInitFailed(e: SendbirdException) { - initState.value = InitState.FAILED - } - - override fun onInitSucceed() { - initState.value = InitState.SUCCEED - } - } - } - }, this) - val useDarkTheme = PreferenceUtils.isUsingDarkTheme - SendbirdUIKit.setDefaultThemeMode(if (useDarkTheme) SendbirdUIKit.ThemeMode.Dark else SendbirdUIKit.ThemeMode.Light) - // register push notification - PushUtils.registerPushHandler(MyFirebaseMessagingService()) - // set logger - SendbirdUIKit.setLogLevel(SendbirdUIKit.LogLevel.ALL) - // set whether to use user profile - UIKitConfig.common.enableUsingDefaultUserProfile = true - // set whether to use typing indicators in channel list - UIKitConfig.groupChannelListConfig.enableTypingIndicator = true - // set whether to use read/delivery receipt in channel list - UIKitConfig.groupChannelListConfig.enableMessageReceiptStatus = true - // set whether to use user mention - UIKitConfig.groupChannelConfig.enableMention = true - // set reply type - UIKitConfig.groupChannelConfig.replyType = ReplyType.THREAD - UIKitConfig.groupChannelConfig.threadReplySelectType = ThreadReplySelectType.THREAD - // set whether to use voice message - UIKitConfig.groupChannelConfig.enableVoiceMessage = true - // set whether to use Multiple Files Message - UIKitConfig.groupChannelConfig.enableMultipleFilesMessage = true - // set whether to use suggested replies - UIKitConfig.groupChannelConfig.enableSuggestedReplies = true - // set whether to use form type message - UIKitConfig.groupChannelConfig.enableFormTypeMessage = true - - // set custom params - SendbirdUIKit.setCustomParamsHandler(object : CustomParamsHandler { - override fun onBeforeCreateOpenChannel(params: OpenChannelCreateParams) { - // You can set OpenChannelCreateParams globally before creating a open channel. - params.customType = StringSet.SB_COMMUNITY_TYPE - } - }) - } -} diff --git a/uikit-sample/src/main/kotlin/com/sendbird/uikit_messaging_android/HomeActivity.kt b/uikit-sample/src/main/kotlin/com/sendbird/uikit_messaging_android/HomeActivity.kt deleted file mode 100644 index 60859f46..00000000 --- a/uikit-sample/src/main/kotlin/com/sendbird/uikit_messaging_android/HomeActivity.kt +++ /dev/null @@ -1,191 +0,0 @@ -package com.sendbird.uikit_messaging_android - -import android.Manifest -import android.app.NotificationManager -import android.content.DialogInterface -import android.content.Intent -import android.net.Uri -import android.os.Build -import android.os.Bundle -import android.provider.Settings -import android.view.View -import androidx.activity.result.ActivityResult -import androidx.activity.result.contract.ActivityResultContracts -import androidx.appcompat.app.AlertDialog -import androidx.appcompat.app.AppCompatActivity -import androidx.core.app.ActivityCompat -import androidx.core.content.ContextCompat -import androidx.core.content.PermissionChecker -import androidx.core.widget.TextViewCompat -import com.sendbird.android.SendbirdChat.addUserEventHandler -import com.sendbird.android.SendbirdChat.getTotalUnreadMessageCount -import com.sendbird.android.SendbirdChat.removeUserEventHandler -import com.sendbird.android.SendbirdChat.sdkVersion -import com.sendbird.android.exception.SendbirdException -import com.sendbird.android.handler.PushRequestCompleteHandler -import com.sendbird.android.handler.UnreadMessageCountHandler -import com.sendbird.android.handler.UserEventHandler -import com.sendbird.android.params.GroupChannelTotalUnreadMessageCountParams -import com.sendbird.android.user.UnreadMessageCount -import com.sendbird.android.user.User -import com.sendbird.uikit.BuildConfig -import com.sendbird.uikit.SendbirdUIKit -import com.sendbird.uikit.utils.ContextUtils -import com.sendbird.uikit_messaging_android.databinding.ActivityHomeBinding -import com.sendbird.uikit_messaging_android.groupchannel.GroupChannelMainActivity -import com.sendbird.uikit_messaging_android.openchannel.OpenChannelMainActivity -import com.sendbird.uikit_messaging_android.utils.PreferenceUtils -import com.sendbird.uikit_messaging_android.utils.PushUtils -import com.sendbird.uikit_messaging_android.widgets.WaitingDialog -import java.util.Locale - -/** - * Displays a channel select screen. - */ -class HomeActivity : AppCompatActivity() { - private lateinit var binding: ActivityHomeBinding - private val requestPermissionLauncher = - registerForActivityResult(ActivityResultContracts.RequestPermission()) { _: Boolean? -> } - private val appSettingLauncher = - registerForActivityResult(ActivityResultContracts.StartActivityForResult()) { _: ActivityResult? -> } - - override fun onCreate(savedInstanceState: Bundle?) { - super.onCreate(savedInstanceState) - binding = ActivityHomeBinding.inflate(layoutInflater) - val view: View = binding.root - setContentView(view) - val sdkVersion = - String.format(resources.getString(R.string.text_version_info), BuildConfig.VERSION_NAME, sdkVersion) - binding.tvVersionInfo.text = sdkVersion - binding.groupChannelButton.setOnClickListener { clickGroupChannel() } - binding.openChannelButton.setOnClickListener { clickOpenChannel() } - binding.customSampleButton.setOnClickListener { moveToCustomSample() } - binding.aiBotButton.setOnClickListener { clickAiBot() } - binding.btSignOut.setOnClickListener { signOut() } - TextViewCompat.setTextAppearance(binding.tvGroupChannelUnreadCount, R.style.SendbirdCaption3OnDark01) - binding.tvGroupChannelUnreadCount.setBackgroundResource(R.drawable.shape_badge_background) - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) { - val permission = Manifest.permission.POST_NOTIFICATIONS - if (ContextCompat.checkSelfPermission(this, permission) == PermissionChecker.PERMISSION_GRANTED) { - return - } - if (ActivityCompat.shouldShowRequestPermissionRationale(this, permission)) { - showPermissionRationalePopup() - return - } - requestPermissionLauncher.launch(permission) - } - } - - override fun onResume() { - super.onResume() - // initialize total unread count - getTotalUnreadMessageCount( - GroupChannelTotalUnreadMessageCountParams(), - UnreadMessageCountHandler { totalCount: Int, _: Int, e: SendbirdException? -> - if (e != null) { - return@UnreadMessageCountHandler - } - if (totalCount > 0) { - binding.tvGroupChannelUnreadCount.visibility = View.VISIBLE - binding.tvGroupChannelUnreadCount.text = - if (totalCount > 99) getString(R.string.text_tab_badge_max_count) else totalCount.toString() - } else { - binding.tvGroupChannelUnreadCount.visibility = View.GONE - } - }) - // register total unread count event - addUserEventHandler(USER_EVENT_HANDLER_KEY, object : UserEventHandler() { - override fun onFriendsDiscovered(users: List) {} - override fun onTotalUnreadMessageCountChanged(unreadMessageCount: UnreadMessageCount) { - val totalCount = unreadMessageCount.groupChannelCount - if (totalCount > 0) { - binding.tvGroupChannelUnreadCount.visibility = View.VISIBLE - binding.tvGroupChannelUnreadCount.text = - if (totalCount > 99) getString(R.string.text_tab_badge_max_count) else totalCount.toString() - } else { - binding.tvGroupChannelUnreadCount.visibility = View.GONE - } - } - }) - } - - override fun onPause() { - super.onPause() - removeUserEventHandler(USER_EVENT_HANDLER_KEY) - } - - private fun clickGroupChannel() { - val intent = Intent(this, GroupChannelMainActivity::class.java) - startActivity(intent) - } - - private fun clickOpenChannel() { - val intent = Intent(this, OpenChannelMainActivity::class.java) - startActivity(intent) - } - - private fun moveToCustomSample() { - val url = "https://github.com/sendbird/sendbird-uikit-android/tree/main/uikit-custom-sample" - val browserIntent = Intent(Intent.ACTION_VIEW, Uri.parse(url)) - startActivity(browserIntent) - } - - private fun clickAiBot() { - val botId = "client_bot" - SendbirdUIKit.startChatWithAiBot(this, botId, true) { e -> - if (e != null) { - ContextUtils.toastError(this, "Failed to start chat with ai bot. ${e.message}") - } - } - } - - private fun signOut() { - WaitingDialog.show(this) - PushUtils.unregisterPushHandler(object : PushRequestCompleteHandler { - override fun onComplete(isRegistered: Boolean, token: String?) { - SendbirdUIKit.disconnect { - WaitingDialog.dismiss() - PreferenceUtils.clearAll() - val notificationManager = getSystemService(NOTIFICATION_SERVICE) as NotificationManager - notificationManager.cancelAll() - startActivity(Intent(this@HomeActivity, LoginActivity::class.java)) - finish() - } - } - - override fun onError(e: SendbirdException) { - WaitingDialog.dismiss() - } - }) - } - - private fun showPermissionRationalePopup() { - val builder = AlertDialog.Builder(this) - builder.setTitle(getString(com.sendbird.uikit.R.string.sb_text_dialog_permission_title)) - builder.setMessage( - String.format( - Locale.US, - getString(R.string.sb_text_need_to_allow_permission_notification), - ContextUtils.getApplicationName(this) - ) - ) - builder.setPositiveButton(com.sendbird.uikit.R.string.sb_text_go_to_settings) { _: DialogInterface?, _: Int -> - val intent = Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS) - intent.action = Settings.ACTION_APPLICATION_DETAILS_SETTINGS - intent.addCategory(Intent.CATEGORY_DEFAULT) - intent.data = Uri.parse("package:$packageName") - intent.addFlags(Intent.FLAG_ACTIVITY_NO_HISTORY) - intent.addFlags(Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS) - appSettingLauncher.launch(intent) - } - val dialog = builder.create() - dialog.show() - dialog.getButton(AlertDialog.BUTTON_POSITIVE) - .setTextColor(ContextCompat.getColor(this, com.sendbird.uikit.R.color.secondary_300)) - } - - companion object { - private val USER_EVENT_HANDLER_KEY = "USER_EVENT_HANDLER_KEY" + System.currentTimeMillis() - } -} diff --git a/uikit-sample/src/main/kotlin/com/sendbird/uikit_messaging_android/LoginActivity.kt b/uikit-sample/src/main/kotlin/com/sendbird/uikit_messaging_android/LoginActivity.kt deleted file mode 100644 index 613e7c16..00000000 --- a/uikit-sample/src/main/kotlin/com/sendbird/uikit_messaging_android/LoginActivity.kt +++ /dev/null @@ -1,83 +0,0 @@ -package com.sendbird.uikit_messaging_android - -import android.content.Intent -import android.os.Bundle -import android.os.Process -import android.view.View -import androidx.appcompat.app.AppCompatActivity -import com.sendbird.android.SendbirdChat.sdkVersion -import com.sendbird.android.exception.SendbirdException -import com.sendbird.android.user.User -import com.sendbird.uikit.SendbirdUIKit -import com.sendbird.uikit.log.Logger -import com.sendbird.uikit_messaging_android.databinding.ActivityLoginBinding -import com.sendbird.uikit_messaging_android.fcm.MyFirebaseMessagingService -import com.sendbird.uikit_messaging_android.utils.PreferenceUtils -import com.sendbird.uikit_messaging_android.utils.PushUtils -import com.sendbird.uikit_messaging_android.widgets.WaitingDialog - -/** - * Displays a login screen. - */ -class LoginActivity : AppCompatActivity() { - override fun onCreate(savedInstanceState: Bundle?) { - super.onCreate(savedInstanceState) - val binding = ActivityLoginBinding.inflate(layoutInflater) - val view: View = binding.root - setContentView(view) - if (BuildConfig.DEBUG) { - binding.applicationId.visibility = View.VISIBLE - binding.btSave.visibility = View.VISIBLE - if (SendbirdUIKit.getAdapter() != null) { - binding.applicationId.setText(SendbirdUIKit.getAdapter()!!.appId) - } - binding.btSave.setOnClickListener { _: View? -> - val appId = binding.applicationId.text - if (!appId.isNullOrEmpty()) { - PreferenceUtils.appId = appId.toString() - finish() - Process.killProcess(Process.myPid()) - } - } - } else { - binding.applicationId.visibility = View.GONE - binding.btSave.visibility = View.GONE - } - binding.etUserId.setSelectAllOnFocus(true) - binding.etNickname.setSelectAllOnFocus(true) - val sdkVersion = String.format( - resources.getString(R.string.text_version_info), - com.sendbird.uikit.BuildConfig.VERSION_NAME, - sdkVersion - ) - binding.tvVersionInfo.text = sdkVersion - binding.btSignIn.setOnClickListener { _: View? -> - val userId = binding.etUserId.text - val userNickname = binding.etNickname.text - if (userId.isNullOrEmpty() || userNickname.isNullOrEmpty()) { - return@setOnClickListener - } - - // Remove all spaces from userID - val userIdString = userId.toString().replace("\\s".toRegex(), "") - PreferenceUtils.userId = userIdString - PreferenceUtils.nickname = userNickname.toString() - WaitingDialog.show(this) - SendbirdUIKit.connect { _: User?, e: SendbirdException? -> - if (e != null) { - Logger.e(e) - WaitingDialog.dismiss() - PreferenceUtils.clearAll() - return@connect - } - WaitingDialog.dismiss() - PreferenceUtils.userId = userIdString - PreferenceUtils.nickname = userNickname.toString() - PushUtils.registerPushHandler(MyFirebaseMessagingService()) - val intent = Intent(this@LoginActivity, HomeActivity::class.java) - startActivity(intent) - finish() - } - } - } -} diff --git a/uikit-sample/src/main/kotlin/com/sendbird/uikit_messaging_android/openchannel/OpenChannelMainActivity.kt b/uikit-sample/src/main/kotlin/com/sendbird/uikit_messaging_android/openchannel/OpenChannelMainActivity.kt deleted file mode 100644 index 1514f266..00000000 --- a/uikit-sample/src/main/kotlin/com/sendbird/uikit_messaging_android/openchannel/OpenChannelMainActivity.kt +++ /dev/null @@ -1,177 +0,0 @@ -package com.sendbird.uikit_messaging_android.openchannel - -import android.os.Bundle -import android.view.View -import androidx.appcompat.app.AppCompatActivity -import androidx.core.content.res.ResourcesCompat -import androidx.fragment.app.Fragment -import androidx.fragment.app.FragmentActivity -import androidx.viewpager2.adapter.FragmentStateAdapter -import androidx.viewpager2.widget.ViewPager2.OnPageChangeCallback -import com.google.android.material.tabs.TabLayout -import com.google.android.material.tabs.TabLayoutMediator -import com.sendbird.android.params.OpenChannelListQueryParams -import com.sendbird.uikit.SendbirdUIKit -import com.sendbird.uikit.fragments.OpenChannelListFragment -import com.sendbird.uikit_messaging_android.R -import com.sendbird.uikit_messaging_android.SettingsFragment -import com.sendbird.uikit_messaging_android.consts.StringSet -import com.sendbird.uikit_messaging_android.databinding.ActivityOpenChannelMainBinding -import com.sendbird.uikit_messaging_android.openchannel.community.CommunityListFragment -import com.sendbird.uikit_messaging_android.openchannel.livestream.LiveStreamListAdapter -import com.sendbird.uikit_messaging_android.openchannel.livestream.LiveStreamListFragment -import com.sendbird.uikit_messaging_android.utils.PreferenceUtils -import com.sendbird.uikit_messaging_android.widgets.CustomTabView - -/** - * Displays an open channel list screen. - */ -class OpenChannelMainActivity : AppCompatActivity() { - private lateinit var binding: ActivityOpenChannelMainBinding - override fun onCreate(savedInstanceState: Bundle?) { - super.onCreate(savedInstanceState) - val themeResId = SendbirdUIKit.getDefaultThemeMode().resId - setTheme(themeResId) - binding = ActivityOpenChannelMainBinding.inflate(layoutInflater) - val view: View = binding.root - setContentView(view) - initPage() - } - - private fun initPage() { - val isDark = PreferenceUtils.isUsingDarkTheme - binding.background.setBackgroundResource(if (isDark) R.color.background_600 else R.color.background_50) - binding.tbMain.setBackgroundResource(if (isDark) R.color.background_500 else R.color.background_50) - binding.tbMain.setTitleTextColor( - ResourcesCompat.getColor( - resources, - if (isDark) R.color.ondark_01 else R.color.onlight_01, - null - ) - ) - binding.tvDescription.setTextColor( - ResourcesCompat.getColor( - resources, - if (isDark) R.color.ondark_02 else R.color.onlight_02, - null - ) - ) - setSupportActionBar(binding.tbMain) - binding.vpMain.adapter = MainAdapter(this) - val isDarkMode = PreferenceUtils.isUsingDarkTheme - val backgroundRedId = if (isDarkMode) R.color.background_600 else R.color.background_50 - binding.tlMain.setBackgroundResource(backgroundRedId) - val liveStreamTab = CustomTabView(this) - liveStreamTab.setBadgeVisibility(View.GONE) - liveStreamTab.setTitle(getString(R.string.text_live_streams)) - liveStreamTab.setIcon(R.drawable.icon_streaming) - val communityTab = CustomTabView(this) - communityTab.setBadgeVisibility(View.GONE) - communityTab.setTitle(getString(R.string.text_community)) - communityTab.setIcon(R.drawable.icon_channels) - val settingsTab = CustomTabView(this) - settingsTab.setBadgeVisibility(View.GONE) - settingsTab.setTitle(getString(R.string.text_tab_settings)) - settingsTab.setIcon(R.drawable.icon_settings_filled) - TabLayoutMediator(binding.tlMain, binding.vpMain) { tab: TabLayout.Tab, position: Int -> - when (position) { - 0 -> tab.customView = liveStreamTab - 1 -> tab.customView = communityTab - 2 -> tab.customView = settingsTab - else -> {} - } - }.attach() - binding.tvDescription.visibility = View.VISIBLE - binding.tvDescription.setText(R.string.text_live_streaming_description) - setActionBarTitle(getString(R.string.text_live_streams)) - binding.vpMain.offscreenPageLimit = 3 - binding.vpMain.registerOnPageChangeCallback(object : OnPageChangeCallback() { - /** - * This method will be invoked when a new page becomes selected. Animation is not - * necessarily complete. - * - * @param position Position index of the new selected page. - */ - override fun onPageSelected(position: Int) { - when (position) { - 0 -> { - binding.tvDescription.visibility = View.VISIBLE - binding.tvDescription.setText(R.string.text_live_streaming_description) - setActionBarTitle(getString(R.string.text_live_streams)) - } - - 1 -> { - binding.tvDescription.visibility = View.GONE - setActionBarTitle(getString(R.string.text_community)) - } - - else -> { - binding.tvDescription.visibility = View.GONE - setActionBarTitle(getString(R.string.text_tab_settings)) - } - } - } - }) - } - - private fun setActionBarTitle(title: String) { - val actionBar = supportActionBar ?: return - actionBar.title = title - } - - /** - * @param fragmentActivity if the ViewPager2 lives directly in a [FragmentActivity] subclass. - * @see FragmentStateAdapter - */ - private class MainAdapter(fragmentActivity: FragmentActivity) : FragmentStateAdapter(fragmentActivity) { - override fun createFragment(position: Int): Fragment { - return when (position) { - 0 -> { - val params = OpenChannelListQueryParams() - params.customTypeFilter = StringSet.SB_LIVE_TYPE - OpenChannelListFragment.Builder() - .setCustomFragment(LiveStreamListFragment()) - .setOpenChannelListAdapter( - LiveStreamListAdapter() - ) - .setUseHeader(false) - .setUseRefreshLayout(false) - .setCustomQueryParams(params) - .build() - } - - 1 -> { - val params = OpenChannelListQueryParams() - params.customTypeFilter = StringSet.SB_COMMUNITY_TYPE - OpenChannelListFragment.Builder() - .setCustomFragment(CommunityListFragment()) - .setUseHeader(false) - .setCustomQueryParams(params) - .build() - } - - else -> { - val fragment = SettingsFragment() - val bundle = Bundle() - bundle.putBoolean(StringSet.SETTINGS_USE_HEADER, false) - bundle.putBoolean(StringSet.SETTINGS_USE_DO_NOT_DISTURB, false) - fragment.arguments = bundle - fragment - } - } - } - - /** - * Returns the total number of items in the data set held by the adapter. - * - * @return The total number of items in this adapter. - */ - override fun getItemCount(): Int { - return PAGE_SIZE - } - - companion object { - private const val PAGE_SIZE = 3 - } - } -} diff --git a/uikit-sample/src/main/kotlin/com/sendbird/uikit_messaging_android/openchannel/livestream/LiveStreamChannelFragment.kt b/uikit-sample/src/main/kotlin/com/sendbird/uikit_messaging_android/openchannel/livestream/LiveStreamChannelFragment.kt deleted file mode 100644 index 5f0a161f..00000000 --- a/uikit-sample/src/main/kotlin/com/sendbird/uikit_messaging_android/openchannel/livestream/LiveStreamChannelFragment.kt +++ /dev/null @@ -1,42 +0,0 @@ -package com.sendbird.uikit_messaging_android.openchannel.livestream - -import android.content.res.Configuration -import android.os.Bundle -import com.sendbird.uikit.consts.KeyboardDisplayType -import com.sendbird.uikit.fragments.OpenChannelFragment -import com.sendbird.uikit.model.ReadyStatus -import com.sendbird.uikit.modules.OpenChannelModule -import com.sendbird.uikit.vm.OpenChannelViewModel - -/** - * Displays an open channel screen used for live stream. - */ -class LiveStreamChannelFragment : OpenChannelFragment() { - private var inputText: String? = null - - override fun onConfigureParams(module: OpenChannelModule, args: Bundle) { - super.onConfigureParams(module, args) - val creatorName = args.getString("DESCRIPTION") - inputText = args.getString("INPUT_TEXT") - val moduleParams = module.params - moduleParams.setUseOverlayMode(resources.configuration.orientation == Configuration.ORIENTATION_LANDSCAPE) - moduleParams.setUseHeader(true) - val headerParams = module.headerComponent.params - headerParams.description = creatorName - val inputParams = module.messageInputComponent.params - inputParams.inputText = inputText - inputParams.keyboardDisplayType = KeyboardDisplayType.Dialog - } - - public override fun onReady(status: ReadyStatus, module: OpenChannelModule, viewModel: OpenChannelViewModel) { - super.onReady(status, module, viewModel) - getModule().messageInputComponent.setOnInputTextChangedListener { s: CharSequence, _: Int, _: Int, _: Int -> - inputText = s.toString() - } - } - - override fun getChannelUrl(): String { - val args = if (arguments == null) Bundle() else requireArguments() - return args.getString("CHANNEL_URL", "") - } -} diff --git a/uikit-sample/src/main/kotlin/com/sendbird/uikit_messaging_android/openchannel/livestream/LiveStreamListAdapter.kt b/uikit-sample/src/main/kotlin/com/sendbird/uikit_messaging_android/openchannel/livestream/LiveStreamListAdapter.kt deleted file mode 100644 index fd252437..00000000 --- a/uikit-sample/src/main/kotlin/com/sendbird/uikit_messaging_android/openchannel/livestream/LiveStreamListAdapter.kt +++ /dev/null @@ -1,119 +0,0 @@ -package com.sendbird.uikit_messaging_android.openchannel.livestream - -import android.view.LayoutInflater -import android.view.View -import android.view.ViewGroup -import androidx.core.content.res.ResourcesCompat -import com.bumptech.glide.Glide -import com.bumptech.glide.load.engine.DiskCacheStrategy -import com.sendbird.android.channel.OpenChannel -import com.sendbird.uikit.SendbirdUIKit -import com.sendbird.uikit.activities.adapter.OpenChannelListAdapter -import com.sendbird.uikit.activities.viewholder.BaseViewHolder -import com.sendbird.uikit_messaging_android.R -import com.sendbird.uikit_messaging_android.databinding.ViewLiveStreamListItemBinding -import com.sendbird.uikit_messaging_android.model.LiveStreamingChannelData -import com.sendbird.uikit_messaging_android.utils.DrawableUtils -import com.sendbird.uikit_messaging_android.utils.PreferenceUtils -import org.json.JSONException -import org.json.JSONObject -import java.util.Locale - -/** - * RecyclerView adapter for `OpenChannel` list used for live stream. - */ -class LiveStreamListAdapter : OpenChannelListAdapter() { - override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): BaseViewHolder { - val inflater = LayoutInflater.from(parent.context) - val binding = ViewLiveStreamListItemBinding.inflate(inflater, parent, false) - return LiveStreamingListViewHolder(binding) - } - - private class LiveStreamingListViewHolder(private val binding: ViewLiveStreamListItemBinding) : - BaseViewHolder(binding.root) { - init { - val context = binding.root.context - val isDark = PreferenceUtils.isUsingDarkTheme - binding.background.setBackgroundResource(if (isDark) R.drawable.selector_list_background_dark else R.drawable.selector_list_background_light) - binding.tvLiveTitle.setTextColor( - ResourcesCompat.getColor( - context.resources, - if (isDark) R.color.ondark_01 else R.color.onlight_01, - null - ) - ) - binding.tvCreator.setTextColor( - ResourcesCompat.getColor( - context.resources, - if (isDark) R.color.ondark_02 else R.color.onlight_02, - null - ) - ) - binding.tvBadge.setTextColor( - ResourcesCompat.getColor( - context.resources, - if (isDark) R.color.ondark_02 else R.color.onlight_02, - null - ) - ) - binding.tvBadge.setBackgroundResource( - if (isDark) R.drawable.shape_live_badge_dark else R.drawable.shape_live_badge_light - ) - } - - override fun bind(openChannel: OpenChannel) { - val count = openChannel.participantCount - var text = count.toString() - if (count > 1000) { - text = String.format(Locale.US, "%.1fK", count / 1000f) - } - binding.tvParticipantCount.text = text - try { - val channelData = LiveStreamingChannelData(JSONObject(openChannel.data)) - binding.tvLiveTitle.visibility = View.VISIBLE - binding.tvLiveTitle.text = channelData.name - val creatorInfo = channelData.creator - if (creatorInfo == null || creatorInfo.nickname.isEmpty()) { - binding.tvCreator.visibility = View.GONE - } else { - binding.tvCreator.visibility = View.VISIBLE - binding.tvCreator.text = creatorInfo.nickname - } - val tags = channelData.tags - if (tags[0].isEmpty()) { - binding.tvBadge.visibility = View.GONE - } else { - binding.tvBadge.visibility = View.VISIBLE - binding.tvBadge.text = tags[0] - } - val context = binding.root.context - Glide.with(context) - .load(channelData.liveUrl) - .override(binding.ivLiveThumbnail.width, binding.ivLiveThumbnail.height) - .centerCrop() - .diskCacheStrategy(DiskCacheStrategy.ALL) - .error(R.color.background_600) - .into(binding.ivLiveThumbnail) - binding.ivChannelThumbnail.visibility = View.VISIBLE - val iconTint = if (SendbirdUIKit.isDarkMode()) R.color.onlight_01 else R.color.ondark_01 - val backgroundTint = if (SendbirdUIKit.isDarkMode()) R.color.background_400 else R.color.background_300 - val errorIcon = - DrawableUtils.createOvalIcon(context, backgroundTint, R.drawable.icon_channels, iconTint) - Glide.with(context) - .load(channelData.thumbnailUrl) - .override(binding.ivChannelThumbnail.width, binding.ivChannelThumbnail.height) - .circleCrop() - .diskCacheStrategy(DiskCacheStrategy.ALL) - .error(errorIcon) - .into(binding.ivChannelThumbnail) - } catch (e: JSONException) { - e.printStackTrace() - binding.ivLiveThumbnail.setImageDrawable(null) - binding.ivChannelThumbnail.visibility = View.GONE - binding.tvLiveTitle.visibility = View.GONE - binding.tvBadge.visibility = View.GONE - binding.tvCreator.visibility = View.GONE - } - } - } -} diff --git a/uikit-sample/src/main/kotlin/com/sendbird/uikit_messaging_android/utils/DrawableUtils.kt b/uikit-sample/src/main/kotlin/com/sendbird/uikit_messaging_android/utils/DrawableUtils.kt deleted file mode 100644 index ec1b0b9a..00000000 --- a/uikit-sample/src/main/kotlin/com/sendbird/uikit_messaging_android/utils/DrawableUtils.kt +++ /dev/null @@ -1,62 +0,0 @@ -package com.sendbird.uikit_messaging_android.utils - -import android.content.Context -import android.content.res.ColorStateList -import android.graphics.drawable.Drawable -import android.graphics.drawable.LayerDrawable -import android.graphics.drawable.ShapeDrawable -import android.graphics.drawable.shapes.OvalShape -import androidx.annotation.ColorRes -import androidx.annotation.DrawableRes -import androidx.appcompat.content.res.AppCompatResources -import androidx.core.graphics.drawable.DrawableCompat -import com.sendbird.uikit.R - -/** - * This provides methods to draw icon and color. - */ -object DrawableUtils { - fun setTintList(context: Context, resId: Int, colorRes: Int): Drawable? { - return if (colorRes == 0) { - AppCompatResources.getDrawable(context, resId) - } else setTintList( - AppCompatResources.getDrawable( - context, - resId - ) ?: return null, AppCompatResources.getColorStateList(context, colorRes) - ) - } - - private fun setTintList(drawable: Drawable, colorStateList: ColorStateList?): Drawable? { - var result = drawable - result = DrawableCompat.wrap(result) - DrawableCompat.setTintList(result, colorStateList) - return result.mutate() - } - - fun createOvalIcon( - context: Context, @ColorRes backgroundColor: Int, - @DrawableRes iconRes: Int, @ColorRes iconTint: Int - ): Drawable { - return createOvalIcon(context, backgroundColor, 255, iconRes, iconTint) - } - - private fun createOvalIcon( - context: Context, @ColorRes backgroundColor: Int, backgroundAlpha: Int, - @DrawableRes iconRes: Int, @ColorRes iconTint: Int - ): Drawable { - val ovalBackground = ShapeDrawable(OvalShape()) - ovalBackground.paint.color = context.resources.getColor(backgroundColor) - ovalBackground.paint.alpha = backgroundAlpha - val icon = setTintList(context, iconRes, iconTint) - val inset = context.resources.getDimension(R.dimen.sb_size_24).toInt() - return createLayerIcon(ovalBackground, icon, inset) - } - - private fun createLayerIcon(background: Drawable, icon: Drawable?, inset: Int): Drawable { - val layer = arrayOf(background, icon) - val layerDrawable = LayerDrawable(layer) - layerDrawable.setLayerInset(1, inset, inset, inset, inset) - return layerDrawable - } -} diff --git a/uikit-sample/src/main/kotlin/com/sendbird/uikit_messaging_android/utils/PreferenceUtils.kt b/uikit-sample/src/main/kotlin/com/sendbird/uikit_messaging_android/utils/PreferenceUtils.kt deleted file mode 100644 index 715a196e..00000000 --- a/uikit-sample/src/main/kotlin/com/sendbird/uikit_messaging_android/utils/PreferenceUtils.kt +++ /dev/null @@ -1,82 +0,0 @@ -package com.sendbird.uikit_messaging_android.utils - -import android.annotation.SuppressLint -import android.content.Context -import android.content.SharedPreferences - -/** - * This provides methods to manage preferences data. - */ -@SuppressLint("StaticFieldLeak") -object PreferenceUtils { - private const val PREFERENCE_KEY_APP_ID = "PREFERENCE_KEY_APP_ID" - private const val PREFERENCE_KEY_USER_ID = "PREFERENCE_KEY_USER_ID" - private const val PREFERENCE_KEY_NICKNAME = "PREFERENCE_KEY_NICKNAME" - private const val PREFERENCE_KEY_PROFILE_URL = "PREFERENCE_KEY_PROFILE_URL" - private const val PREFERENCE_KEY_USE_DARK_THEME = "PREFERENCE_KEY_USE_DARK_THEME" - private const val PREFERENCE_KEY_DO_NOT_DISTURB = "PREFERENCE_KEY_DO_NOT_DISTURB" - - private lateinit var context: Context - fun init(appContext: Context) { - context = appContext.applicationContext - } - - private val sharedPreferences: SharedPreferences - get() = context.getSharedPreferences("sendbird", Context.MODE_PRIVATE) - var appId: String - get() = sharedPreferences.getString(PREFERENCE_KEY_APP_ID, "") ?: "" - @SuppressLint("ApplySharedPref") - set(appId) { - val editor = sharedPreferences.edit() - editor.putString(PREFERENCE_KEY_APP_ID, appId).commit() - } - - var userId: String - get() { - val value = sharedPreferences.getString(PREFERENCE_KEY_USER_ID, "") - return value ?: "" - } - set(userId) { - val editor = sharedPreferences.edit() - editor.putString(PREFERENCE_KEY_USER_ID, userId).apply() - } - - var nickname: String - get() { - val value = sharedPreferences.getString(PREFERENCE_KEY_NICKNAME, "") - return value ?: "" - } - set(nickname) { - val editor = sharedPreferences.edit() - editor.putString(PREFERENCE_KEY_NICKNAME, nickname).apply() - } - - var profileUrl: String - get() { - val value = sharedPreferences.getString(PREFERENCE_KEY_PROFILE_URL, "") - return value ?: "" - } - set(profileUrl) { - val editor = sharedPreferences.edit() - editor.putString(PREFERENCE_KEY_PROFILE_URL, profileUrl).apply() - } - - var isUsingDarkTheme: Boolean - get() = sharedPreferences.getBoolean(PREFERENCE_KEY_USE_DARK_THEME, false) - set(useDarkTheme) { - val editor = sharedPreferences.edit() - editor.putBoolean(PREFERENCE_KEY_USE_DARK_THEME, useDarkTheme).apply() - } - - var doNotDisturb: Boolean - get() = sharedPreferences.getBoolean(PREFERENCE_KEY_DO_NOT_DISTURB, false) - set(doNotDisturb) { - val editor = sharedPreferences.edit() - editor.putBoolean(PREFERENCE_KEY_DO_NOT_DISTURB, doNotDisturb).apply() - } - - fun clearAll() { - val editor = sharedPreferences.edit() - editor.clear().apply() - } -} diff --git a/uikit-sample/src/main/kotlin/com/sendbird/uikit_messaging_android/utils/PushUtils.kt b/uikit-sample/src/main/kotlin/com/sendbird/uikit_messaging_android/utils/PushUtils.kt deleted file mode 100644 index 214a8849..00000000 --- a/uikit-sample/src/main/kotlin/com/sendbird/uikit_messaging_android/utils/PushUtils.kt +++ /dev/null @@ -1,18 +0,0 @@ -package com.sendbird.uikit_messaging_android.utils - -import com.sendbird.android.handler.PushRequestCompleteHandler -import com.sendbird.android.push.SendbirdPushHandler -import com.sendbird.android.push.SendbirdPushHelper - -/** - * This provides methods to manage push handler. - */ -object PushUtils { - fun registerPushHandler(handler: SendbirdPushHandler) { - SendbirdPushHelper.registerPushHandler(handler) - } - - fun unregisterPushHandler(listener: PushRequestCompleteHandler) { - SendbirdPushHelper.unregisterPushHandler(listener) - } -} diff --git a/uikit-sample/src/main/kotlin/com/sendbird/uikit_messaging_android/widgets/CustomTabView.kt b/uikit-sample/src/main/kotlin/com/sendbird/uikit_messaging_android/widgets/CustomTabView.kt deleted file mode 100644 index 2379cb89..00000000 --- a/uikit-sample/src/main/kotlin/com/sendbird/uikit_messaging_android/widgets/CustomTabView.kt +++ /dev/null @@ -1,65 +0,0 @@ -package com.sendbird.uikit_messaging_android.widgets - -import android.content.Context -import android.util.AttributeSet -import android.view.LayoutInflater -import android.widget.FrameLayout -import android.widget.ImageView -import android.widget.TextView -import androidx.annotation.DrawableRes -import androidx.appcompat.content.res.AppCompatResources -import com.sendbird.uikit_messaging_android.R -import com.sendbird.uikit_messaging_android.utils.DrawableUtils.setTintList -import com.sendbird.uikit_messaging_android.utils.PreferenceUtils.isUsingDarkTheme - -/** - * View displaying icon and badge in tabs. - */ -class CustomTabView @JvmOverloads constructor( - context: Context, attrs: AttributeSet? = null, defStyleAttr: Int = 0 -) : FrameLayout(context, attrs, defStyleAttr) { - private var tintColorRedId = 0 - private lateinit var badgeView: TextView - private lateinit var iconView: ImageView - private lateinit var titleView: TextView - - init { - initView(context) - } - - private fun initView(context: Context) { - val inflater = LayoutInflater.from(getContext()) - val view = inflater.inflate(R.layout.view_custom_tab, this, true) - badgeView = view.findViewById(R.id.badge) - iconView = view.findViewById(R.id.ivIcon) - titleView = view.findViewById(R.id.tvTitle) - val isDarkMode = isUsingDarkTheme - tintColorRedId = if (isDarkMode) R.color.selector_tab_tint_dark else R.color.selector_tab_tint - val badgeTextAppearance = - if (isDarkMode) R.style.SendbirdCaption3OnLight01 else R.style.SendbirdCaption3OnDark01 - val badgeBackgroundRes = - if (isDarkMode) R.drawable.shape_badge_background_dark else R.drawable.shape_badge_background - val titleTextAppearance = - if (isDarkMode) R.style.SendbirdCaption2Primary200 else R.style.SendbirdCaption2Primary300 - badgeView.setTextAppearance(context, badgeTextAppearance) - badgeView.setBackgroundResource(badgeBackgroundRes) - titleView.setTextAppearance(context, titleTextAppearance) - titleView.setTextColor(AppCompatResources.getColorStateList(context, tintColorRedId)) - } - - fun setBadgeVisibility(visibility: Int) { - badgeView.visibility = visibility - } - - fun setBadgeCount(countString: String?) { - badgeView.text = countString - } - - fun setIcon(@DrawableRes iconResId: Int) { - iconView.setImageDrawable(setTintList(context, iconResId, tintColorRedId)) - } - - fun setTitle(title: String?) { - titleView.text = title - } -} diff --git a/uikit-sample/src/main/res/color/selector_tab_tint_dark.xml b/uikit-sample/src/main/res/color/selector_tab_tint_dark.xml deleted file mode 100644 index 04fd7b36..00000000 --- a/uikit-sample/src/main/res/color/selector_tab_tint_dark.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/uikit-sample/src/main/res/drawable-hdpi/home_card_bg.9.png b/uikit-sample/src/main/res/drawable-hdpi/home_card_bg.9.png deleted file mode 100644 index 9821eb49..00000000 Binary files a/uikit-sample/src/main/res/drawable-hdpi/home_card_bg.9.png and /dev/null differ diff --git a/uikit-sample/src/main/res/drawable-hdpi/ic_chat_hide.png b/uikit-sample/src/main/res/drawable-hdpi/ic_chat_hide.png deleted file mode 100644 index b991f5cb..00000000 Binary files a/uikit-sample/src/main/res/drawable-hdpi/ic_chat_hide.png and /dev/null differ diff --git a/uikit-sample/src/main/res/drawable-hdpi/ic_chat_show.png b/uikit-sample/src/main/res/drawable-hdpi/ic_chat_show.png deleted file mode 100644 index a3971da7..00000000 Binary files a/uikit-sample/src/main/res/drawable-hdpi/ic_chat_show.png and /dev/null differ diff --git a/uikit-sample/src/main/res/drawable-hdpi/icon_chat_filled.png b/uikit-sample/src/main/res/drawable-hdpi/icon_chat_filled.png deleted file mode 100644 index 8a03087b..00000000 Binary files a/uikit-sample/src/main/res/drawable-hdpi/icon_chat_filled.png and /dev/null differ diff --git a/uikit-sample/src/main/res/drawable-hdpi/icon_leave.png b/uikit-sample/src/main/res/drawable-hdpi/icon_leave.png deleted file mode 100644 index 8ea04146..00000000 Binary files a/uikit-sample/src/main/res/drawable-hdpi/icon_leave.png and /dev/null differ diff --git a/uikit-sample/src/main/res/drawable-hdpi/icon_notifications_filled.png b/uikit-sample/src/main/res/drawable-hdpi/icon_notifications_filled.png deleted file mode 100644 index a99ee87d..00000000 Binary files a/uikit-sample/src/main/res/drawable-hdpi/icon_notifications_filled.png and /dev/null differ diff --git a/uikit-sample/src/main/res/drawable-hdpi/icon_push_lollipop.png b/uikit-sample/src/main/res/drawable-hdpi/icon_push_lollipop.png deleted file mode 100644 index 2186f719..00000000 Binary files a/uikit-sample/src/main/res/drawable-hdpi/icon_push_lollipop.png and /dev/null differ diff --git a/uikit-sample/src/main/res/drawable-hdpi/icon_push_oreo.png b/uikit-sample/src/main/res/drawable-hdpi/icon_push_oreo.png deleted file mode 100644 index d002c31a..00000000 Binary files a/uikit-sample/src/main/res/drawable-hdpi/icon_push_oreo.png and /dev/null differ diff --git a/uikit-sample/src/main/res/drawable-hdpi/icon_settings_filled.png b/uikit-sample/src/main/res/drawable-hdpi/icon_settings_filled.png deleted file mode 100644 index 1f961dfd..00000000 Binary files a/uikit-sample/src/main/res/drawable-hdpi/icon_settings_filled.png and /dev/null differ diff --git a/uikit-sample/src/main/res/drawable-hdpi/icon_streaming.png b/uikit-sample/src/main/res/drawable-hdpi/icon_streaming.png deleted file mode 100644 index 961a155f..00000000 Binary files a/uikit-sample/src/main/res/drawable-hdpi/icon_streaming.png and /dev/null differ diff --git a/uikit-sample/src/main/res/drawable-hdpi/img_groupchannel.png b/uikit-sample/src/main/res/drawable-hdpi/img_groupchannel.png deleted file mode 100644 index bfc290ef..00000000 Binary files a/uikit-sample/src/main/res/drawable-hdpi/img_groupchannel.png and /dev/null differ diff --git a/uikit-sample/src/main/res/drawable-hdpi/img_openchannel.png b/uikit-sample/src/main/res/drawable-hdpi/img_openchannel.png deleted file mode 100644 index eba504a9..00000000 Binary files a/uikit-sample/src/main/res/drawable-hdpi/img_openchannel.png and /dev/null differ diff --git a/uikit-sample/src/main/res/drawable-hdpi/logo_sendbird_full.png b/uikit-sample/src/main/res/drawable-hdpi/logo_sendbird_full.png deleted file mode 100644 index b72e745d..00000000 Binary files a/uikit-sample/src/main/res/drawable-hdpi/logo_sendbird_full.png and /dev/null differ diff --git a/uikit-sample/src/main/res/drawable-mdpi/home_card_bg.9.png b/uikit-sample/src/main/res/drawable-mdpi/home_card_bg.9.png deleted file mode 100644 index 47a1cbdc..00000000 Binary files a/uikit-sample/src/main/res/drawable-mdpi/home_card_bg.9.png and /dev/null differ diff --git a/uikit-sample/src/main/res/drawable-mdpi/ic_chat_hide.png b/uikit-sample/src/main/res/drawable-mdpi/ic_chat_hide.png deleted file mode 100644 index 4ba769ca..00000000 Binary files a/uikit-sample/src/main/res/drawable-mdpi/ic_chat_hide.png and /dev/null differ diff --git a/uikit-sample/src/main/res/drawable-mdpi/ic_chat_show.png b/uikit-sample/src/main/res/drawable-mdpi/ic_chat_show.png deleted file mode 100644 index e1a7c86a..00000000 Binary files a/uikit-sample/src/main/res/drawable-mdpi/ic_chat_show.png and /dev/null differ diff --git a/uikit-sample/src/main/res/drawable-mdpi/icon_channels.png b/uikit-sample/src/main/res/drawable-mdpi/icon_channels.png deleted file mode 100644 index 58aeac9a..00000000 Binary files a/uikit-sample/src/main/res/drawable-mdpi/icon_channels.png and /dev/null differ diff --git a/uikit-sample/src/main/res/drawable-mdpi/icon_chat_filled.png b/uikit-sample/src/main/res/drawable-mdpi/icon_chat_filled.png deleted file mode 100644 index d234a1e4..00000000 Binary files a/uikit-sample/src/main/res/drawable-mdpi/icon_chat_filled.png and /dev/null differ diff --git a/uikit-sample/src/main/res/drawable-mdpi/icon_leave.png b/uikit-sample/src/main/res/drawable-mdpi/icon_leave.png deleted file mode 100644 index a89a9955..00000000 Binary files a/uikit-sample/src/main/res/drawable-mdpi/icon_leave.png and /dev/null differ diff --git a/uikit-sample/src/main/res/drawable-mdpi/icon_notifications_filled.png b/uikit-sample/src/main/res/drawable-mdpi/icon_notifications_filled.png deleted file mode 100644 index 26176b95..00000000 Binary files a/uikit-sample/src/main/res/drawable-mdpi/icon_notifications_filled.png and /dev/null differ diff --git a/uikit-sample/src/main/res/drawable-mdpi/icon_push_lollipop.png b/uikit-sample/src/main/res/drawable-mdpi/icon_push_lollipop.png deleted file mode 100644 index 3a0a0649..00000000 Binary files a/uikit-sample/src/main/res/drawable-mdpi/icon_push_lollipop.png and /dev/null differ diff --git a/uikit-sample/src/main/res/drawable-mdpi/icon_push_oreo.png b/uikit-sample/src/main/res/drawable-mdpi/icon_push_oreo.png deleted file mode 100644 index c2512e98..00000000 Binary files a/uikit-sample/src/main/res/drawable-mdpi/icon_push_oreo.png and /dev/null differ diff --git a/uikit-sample/src/main/res/drawable-mdpi/icon_settings_filled.png b/uikit-sample/src/main/res/drawable-mdpi/icon_settings_filled.png deleted file mode 100644 index aa2fb5ac..00000000 Binary files a/uikit-sample/src/main/res/drawable-mdpi/icon_settings_filled.png and /dev/null differ diff --git a/uikit-sample/src/main/res/drawable-mdpi/icon_streaming.png b/uikit-sample/src/main/res/drawable-mdpi/icon_streaming.png deleted file mode 100644 index a2706b0a..00000000 Binary files a/uikit-sample/src/main/res/drawable-mdpi/icon_streaming.png and /dev/null differ diff --git a/uikit-sample/src/main/res/drawable-mdpi/img_groupchannel.png b/uikit-sample/src/main/res/drawable-mdpi/img_groupchannel.png deleted file mode 100644 index a6d49f2f..00000000 Binary files a/uikit-sample/src/main/res/drawable-mdpi/img_groupchannel.png and /dev/null differ diff --git a/uikit-sample/src/main/res/drawable-mdpi/img_openchannel.png b/uikit-sample/src/main/res/drawable-mdpi/img_openchannel.png deleted file mode 100644 index 3344e7c0..00000000 Binary files a/uikit-sample/src/main/res/drawable-mdpi/img_openchannel.png and /dev/null differ diff --git a/uikit-sample/src/main/res/drawable-mdpi/logo_sendbird_full.png b/uikit-sample/src/main/res/drawable-mdpi/logo_sendbird_full.png deleted file mode 100644 index c9296976..00000000 Binary files a/uikit-sample/src/main/res/drawable-mdpi/logo_sendbird_full.png and /dev/null differ diff --git a/uikit-sample/src/main/res/drawable-xhdpi/home_card_bg.9.png b/uikit-sample/src/main/res/drawable-xhdpi/home_card_bg.9.png deleted file mode 100644 index 41fce76d..00000000 Binary files a/uikit-sample/src/main/res/drawable-xhdpi/home_card_bg.9.png and /dev/null differ diff --git a/uikit-sample/src/main/res/drawable-xhdpi/ic_chat_hide.png b/uikit-sample/src/main/res/drawable-xhdpi/ic_chat_hide.png deleted file mode 100644 index 7118bee1..00000000 Binary files a/uikit-sample/src/main/res/drawable-xhdpi/ic_chat_hide.png and /dev/null differ diff --git a/uikit-sample/src/main/res/drawable-xhdpi/ic_chat_show.png b/uikit-sample/src/main/res/drawable-xhdpi/ic_chat_show.png deleted file mode 100644 index e410dc62..00000000 Binary files a/uikit-sample/src/main/res/drawable-xhdpi/ic_chat_show.png and /dev/null differ diff --git a/uikit-sample/src/main/res/drawable-xhdpi/icon_channels.png b/uikit-sample/src/main/res/drawable-xhdpi/icon_channels.png deleted file mode 100644 index 2193fd88..00000000 Binary files a/uikit-sample/src/main/res/drawable-xhdpi/icon_channels.png and /dev/null differ diff --git a/uikit-sample/src/main/res/drawable-xhdpi/icon_chat_filled.png b/uikit-sample/src/main/res/drawable-xhdpi/icon_chat_filled.png deleted file mode 100644 index a2ab3c96..00000000 Binary files a/uikit-sample/src/main/res/drawable-xhdpi/icon_chat_filled.png and /dev/null differ diff --git a/uikit-sample/src/main/res/drawable-xhdpi/icon_leave.png b/uikit-sample/src/main/res/drawable-xhdpi/icon_leave.png deleted file mode 100644 index 13202b4a..00000000 Binary files a/uikit-sample/src/main/res/drawable-xhdpi/icon_leave.png and /dev/null differ diff --git a/uikit-sample/src/main/res/drawable-xhdpi/icon_notifications_filled.png b/uikit-sample/src/main/res/drawable-xhdpi/icon_notifications_filled.png deleted file mode 100644 index e26c7214..00000000 Binary files a/uikit-sample/src/main/res/drawable-xhdpi/icon_notifications_filled.png and /dev/null differ diff --git a/uikit-sample/src/main/res/drawable-xhdpi/icon_push_lollipop.png b/uikit-sample/src/main/res/drawable-xhdpi/icon_push_lollipop.png deleted file mode 100644 index 2a6ff6aa..00000000 Binary files a/uikit-sample/src/main/res/drawable-xhdpi/icon_push_lollipop.png and /dev/null differ diff --git a/uikit-sample/src/main/res/drawable-xhdpi/icon_push_oreo.png b/uikit-sample/src/main/res/drawable-xhdpi/icon_push_oreo.png deleted file mode 100644 index d24b8b92..00000000 Binary files a/uikit-sample/src/main/res/drawable-xhdpi/icon_push_oreo.png and /dev/null differ diff --git a/uikit-sample/src/main/res/drawable-xhdpi/icon_settings_filled.png b/uikit-sample/src/main/res/drawable-xhdpi/icon_settings_filled.png deleted file mode 100644 index 0cabd6b4..00000000 Binary files a/uikit-sample/src/main/res/drawable-xhdpi/icon_settings_filled.png and /dev/null differ diff --git a/uikit-sample/src/main/res/drawable-xhdpi/icon_streaming.png b/uikit-sample/src/main/res/drawable-xhdpi/icon_streaming.png deleted file mode 100644 index f68f03a9..00000000 Binary files a/uikit-sample/src/main/res/drawable-xhdpi/icon_streaming.png and /dev/null differ diff --git a/uikit-sample/src/main/res/drawable-xhdpi/img_groupchannel.png b/uikit-sample/src/main/res/drawable-xhdpi/img_groupchannel.png deleted file mode 100644 index 2c117c58..00000000 Binary files a/uikit-sample/src/main/res/drawable-xhdpi/img_groupchannel.png and /dev/null differ diff --git a/uikit-sample/src/main/res/drawable-xhdpi/img_openchannel.png b/uikit-sample/src/main/res/drawable-xhdpi/img_openchannel.png deleted file mode 100644 index 0e3016ab..00000000 Binary files a/uikit-sample/src/main/res/drawable-xhdpi/img_openchannel.png and /dev/null differ diff --git a/uikit-sample/src/main/res/drawable-xhdpi/logo_sendbird_full.png b/uikit-sample/src/main/res/drawable-xhdpi/logo_sendbird_full.png deleted file mode 100644 index e93da43f..00000000 Binary files a/uikit-sample/src/main/res/drawable-xhdpi/logo_sendbird_full.png and /dev/null differ diff --git a/uikit-sample/src/main/res/drawable-xxhdpi/home_card_bg.9.png b/uikit-sample/src/main/res/drawable-xxhdpi/home_card_bg.9.png deleted file mode 100644 index 429edce2..00000000 Binary files a/uikit-sample/src/main/res/drawable-xxhdpi/home_card_bg.9.png and /dev/null differ diff --git a/uikit-sample/src/main/res/drawable-xxhdpi/ic_chat_hide.png b/uikit-sample/src/main/res/drawable-xxhdpi/ic_chat_hide.png deleted file mode 100644 index 36138fdb..00000000 Binary files a/uikit-sample/src/main/res/drawable-xxhdpi/ic_chat_hide.png and /dev/null differ diff --git a/uikit-sample/src/main/res/drawable-xxhdpi/ic_chat_show.png b/uikit-sample/src/main/res/drawable-xxhdpi/ic_chat_show.png deleted file mode 100644 index 200ece0d..00000000 Binary files a/uikit-sample/src/main/res/drawable-xxhdpi/ic_chat_show.png and /dev/null differ diff --git a/uikit-sample/src/main/res/drawable-xxhdpi/icon_channels.png b/uikit-sample/src/main/res/drawable-xxhdpi/icon_channels.png deleted file mode 100644 index 7936e3e7..00000000 Binary files a/uikit-sample/src/main/res/drawable-xxhdpi/icon_channels.png and /dev/null differ diff --git a/uikit-sample/src/main/res/drawable-xxhdpi/icon_chat_filled.png b/uikit-sample/src/main/res/drawable-xxhdpi/icon_chat_filled.png deleted file mode 100644 index 6c8c16ea..00000000 Binary files a/uikit-sample/src/main/res/drawable-xxhdpi/icon_chat_filled.png and /dev/null differ diff --git a/uikit-sample/src/main/res/drawable-xxhdpi/icon_leave.png b/uikit-sample/src/main/res/drawable-xxhdpi/icon_leave.png deleted file mode 100644 index 5ce541b2..00000000 Binary files a/uikit-sample/src/main/res/drawable-xxhdpi/icon_leave.png and /dev/null differ diff --git a/uikit-sample/src/main/res/drawable-xxhdpi/icon_notifications_filled.png b/uikit-sample/src/main/res/drawable-xxhdpi/icon_notifications_filled.png deleted file mode 100644 index 24916b2a..00000000 Binary files a/uikit-sample/src/main/res/drawable-xxhdpi/icon_notifications_filled.png and /dev/null differ diff --git a/uikit-sample/src/main/res/drawable-xxhdpi/icon_push_lollipop.png b/uikit-sample/src/main/res/drawable-xxhdpi/icon_push_lollipop.png deleted file mode 100644 index 24b6dfb9..00000000 Binary files a/uikit-sample/src/main/res/drawable-xxhdpi/icon_push_lollipop.png and /dev/null differ diff --git a/uikit-sample/src/main/res/drawable-xxhdpi/icon_push_oreo.png b/uikit-sample/src/main/res/drawable-xxhdpi/icon_push_oreo.png deleted file mode 100644 index 41185ede..00000000 Binary files a/uikit-sample/src/main/res/drawable-xxhdpi/icon_push_oreo.png and /dev/null differ diff --git a/uikit-sample/src/main/res/drawable-xxhdpi/icon_settings_filled.png b/uikit-sample/src/main/res/drawable-xxhdpi/icon_settings_filled.png deleted file mode 100644 index 059ffb69..00000000 Binary files a/uikit-sample/src/main/res/drawable-xxhdpi/icon_settings_filled.png and /dev/null differ diff --git a/uikit-sample/src/main/res/drawable-xxhdpi/icon_streaming.png b/uikit-sample/src/main/res/drawable-xxhdpi/icon_streaming.png deleted file mode 100644 index 97927a18..00000000 Binary files a/uikit-sample/src/main/res/drawable-xxhdpi/icon_streaming.png and /dev/null differ diff --git a/uikit-sample/src/main/res/drawable-xxhdpi/img_groupchannel.png b/uikit-sample/src/main/res/drawable-xxhdpi/img_groupchannel.png deleted file mode 100644 index 1eb6acd4..00000000 Binary files a/uikit-sample/src/main/res/drawable-xxhdpi/img_groupchannel.png and /dev/null differ diff --git a/uikit-sample/src/main/res/drawable-xxhdpi/img_openchannel.png b/uikit-sample/src/main/res/drawable-xxhdpi/img_openchannel.png deleted file mode 100644 index 8e9c775f..00000000 Binary files a/uikit-sample/src/main/res/drawable-xxhdpi/img_openchannel.png and /dev/null differ diff --git a/uikit-sample/src/main/res/drawable-xxhdpi/logo_sendbird_full.png b/uikit-sample/src/main/res/drawable-xxhdpi/logo_sendbird_full.png deleted file mode 100644 index 7404501a..00000000 Binary files a/uikit-sample/src/main/res/drawable-xxhdpi/logo_sendbird_full.png and /dev/null differ diff --git a/uikit-sample/src/main/res/drawable-xxxhdpi/home_card_bg.9.png b/uikit-sample/src/main/res/drawable-xxxhdpi/home_card_bg.9.png deleted file mode 100644 index 076347e7..00000000 Binary files a/uikit-sample/src/main/res/drawable-xxxhdpi/home_card_bg.9.png and /dev/null differ diff --git a/uikit-sample/src/main/res/drawable-xxxhdpi/ic_chat_hide.png b/uikit-sample/src/main/res/drawable-xxxhdpi/ic_chat_hide.png deleted file mode 100644 index be42b6f2..00000000 Binary files a/uikit-sample/src/main/res/drawable-xxxhdpi/ic_chat_hide.png and /dev/null differ diff --git a/uikit-sample/src/main/res/drawable-xxxhdpi/ic_chat_show.png b/uikit-sample/src/main/res/drawable-xxxhdpi/ic_chat_show.png deleted file mode 100644 index 51e94900..00000000 Binary files a/uikit-sample/src/main/res/drawable-xxxhdpi/ic_chat_show.png and /dev/null differ diff --git a/uikit-sample/src/main/res/drawable-xxxhdpi/icon_channels.png b/uikit-sample/src/main/res/drawable-xxxhdpi/icon_channels.png deleted file mode 100644 index 7731401d..00000000 Binary files a/uikit-sample/src/main/res/drawable-xxxhdpi/icon_channels.png and /dev/null differ diff --git a/uikit-sample/src/main/res/drawable-xxxhdpi/icon_chat_filled.png b/uikit-sample/src/main/res/drawable-xxxhdpi/icon_chat_filled.png deleted file mode 100644 index 083d9c0e..00000000 Binary files a/uikit-sample/src/main/res/drawable-xxxhdpi/icon_chat_filled.png and /dev/null differ diff --git a/uikit-sample/src/main/res/drawable-xxxhdpi/icon_leave.png b/uikit-sample/src/main/res/drawable-xxxhdpi/icon_leave.png deleted file mode 100644 index 07f7db33..00000000 Binary files a/uikit-sample/src/main/res/drawable-xxxhdpi/icon_leave.png and /dev/null differ diff --git a/uikit-sample/src/main/res/drawable-xxxhdpi/icon_notifications_filled.png b/uikit-sample/src/main/res/drawable-xxxhdpi/icon_notifications_filled.png deleted file mode 100644 index 4745c021..00000000 Binary files a/uikit-sample/src/main/res/drawable-xxxhdpi/icon_notifications_filled.png and /dev/null differ diff --git a/uikit-sample/src/main/res/drawable-xxxhdpi/icon_push_lollipop.png b/uikit-sample/src/main/res/drawable-xxxhdpi/icon_push_lollipop.png deleted file mode 100644 index a2e8e63b..00000000 Binary files a/uikit-sample/src/main/res/drawable-xxxhdpi/icon_push_lollipop.png and /dev/null differ diff --git a/uikit-sample/src/main/res/drawable-xxxhdpi/icon_push_oreo.png b/uikit-sample/src/main/res/drawable-xxxhdpi/icon_push_oreo.png deleted file mode 100644 index 40e8b060..00000000 Binary files a/uikit-sample/src/main/res/drawable-xxxhdpi/icon_push_oreo.png and /dev/null differ diff --git a/uikit-sample/src/main/res/drawable-xxxhdpi/icon_settings_filled.png b/uikit-sample/src/main/res/drawable-xxxhdpi/icon_settings_filled.png deleted file mode 100644 index f385dab4..00000000 Binary files a/uikit-sample/src/main/res/drawable-xxxhdpi/icon_settings_filled.png and /dev/null differ diff --git a/uikit-sample/src/main/res/drawable-xxxhdpi/icon_streaming.png b/uikit-sample/src/main/res/drawable-xxxhdpi/icon_streaming.png deleted file mode 100644 index e78b4947..00000000 Binary files a/uikit-sample/src/main/res/drawable-xxxhdpi/icon_streaming.png and /dev/null differ diff --git a/uikit-sample/src/main/res/drawable-xxxhdpi/img_groupchannel.png b/uikit-sample/src/main/res/drawable-xxxhdpi/img_groupchannel.png deleted file mode 100644 index c4f65814..00000000 Binary files a/uikit-sample/src/main/res/drawable-xxxhdpi/img_groupchannel.png and /dev/null differ diff --git a/uikit-sample/src/main/res/drawable-xxxhdpi/img_openchannel.png b/uikit-sample/src/main/res/drawable-xxxhdpi/img_openchannel.png deleted file mode 100644 index 010d4589..00000000 Binary files a/uikit-sample/src/main/res/drawable-xxxhdpi/img_openchannel.png and /dev/null differ diff --git a/uikit-sample/src/main/res/drawable-xxxhdpi/logo_sendbird_full.png b/uikit-sample/src/main/res/drawable-xxxhdpi/logo_sendbird_full.png deleted file mode 100644 index 9454a4ab..00000000 Binary files a/uikit-sample/src/main/res/drawable-xxxhdpi/logo_sendbird_full.png and /dev/null differ diff --git a/uikit-sample/src/main/res/drawable/selector_edit_text_clear_button_light.xml b/uikit-sample/src/main/res/drawable/selector_edit_text_clear_button_light.xml deleted file mode 100644 index ef74e70b..00000000 --- a/uikit-sample/src/main/res/drawable/selector_edit_text_clear_button_light.xml +++ /dev/null @@ -1,40 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/uikit-sample/src/main/res/drawable/selector_edittext_background_with_focusable.xml b/uikit-sample/src/main/res/drawable/selector_edittext_background_with_focusable.xml deleted file mode 100644 index 9c4f2edc..00000000 --- a/uikit-sample/src/main/res/drawable/selector_edittext_background_with_focusable.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - - - \ No newline at end of file diff --git a/uikit-sample/src/main/res/drawable/selector_home_channel_type_button.xml b/uikit-sample/src/main/res/drawable/selector_home_channel_type_button.xml deleted file mode 100644 index ec7c2988..00000000 --- a/uikit-sample/src/main/res/drawable/selector_home_channel_type_button.xml +++ /dev/null @@ -1,26 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/uikit-sample/src/main/res/drawable/selector_home_signout_button.xml b/uikit-sample/src/main/res/drawable/selector_home_signout_button.xml deleted file mode 100644 index 2800f882..00000000 --- a/uikit-sample/src/main/res/drawable/selector_home_signout_button.xml +++ /dev/null @@ -1,19 +0,0 @@ - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/uikit-sample/src/main/res/drawable/selector_list_background_light.xml b/uikit-sample/src/main/res/drawable/selector_list_background_light.xml deleted file mode 100644 index b104b5b9..00000000 --- a/uikit-sample/src/main/res/drawable/selector_list_background_light.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - - - - \ No newline at end of file diff --git a/uikit-sample/src/main/res/drawable/shape_badge_background.xml b/uikit-sample/src/main/res/drawable/shape_badge_background.xml deleted file mode 100644 index 9749dd4f..00000000 --- a/uikit-sample/src/main/res/drawable/shape_badge_background.xml +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - - \ No newline at end of file diff --git a/uikit-sample/src/main/res/drawable/shape_cursor_drawable.xml b/uikit-sample/src/main/res/drawable/shape_cursor_drawable.xml deleted file mode 100644 index 034c0113..00000000 --- a/uikit-sample/src/main/res/drawable/shape_cursor_drawable.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - - \ No newline at end of file diff --git a/uikit-sample/src/main/res/drawable/shape_cursor_drawable_bg_300.xml b/uikit-sample/src/main/res/drawable/shape_cursor_drawable_bg_300.xml deleted file mode 100644 index 31f50576..00000000 --- a/uikit-sample/src/main/res/drawable/shape_cursor_drawable_bg_300.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - - \ No newline at end of file diff --git a/uikit-sample/src/main/res/drawable/shape_live_badge_light.xml b/uikit-sample/src/main/res/drawable/shape_live_badge_light.xml deleted file mode 100644 index dfcebeda..00000000 --- a/uikit-sample/src/main/res/drawable/shape_live_badge_light.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - - \ No newline at end of file diff --git a/uikit-sample/src/main/res/drawable/shape_live_indicator.xml b/uikit-sample/src/main/res/drawable/shape_live_indicator.xml deleted file mode 100644 index 006a6cc0..00000000 --- a/uikit-sample/src/main/res/drawable/shape_live_indicator.xml +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/uikit-sample/src/main/res/drawable/shape_oval.xml b/uikit-sample/src/main/res/drawable/shape_oval.xml deleted file mode 100644 index 0d923d2b..00000000 --- a/uikit-sample/src/main/res/drawable/shape_oval.xml +++ /dev/null @@ -1,5 +0,0 @@ - - - \ No newline at end of file diff --git a/uikit-sample/src/main/res/drawable/shape_rect_transparent.xml b/uikit-sample/src/main/res/drawable/shape_rect_transparent.xml deleted file mode 100644 index 037168f7..00000000 --- a/uikit-sample/src/main/res/drawable/shape_rect_transparent.xml +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - - \ No newline at end of file diff --git a/uikit-sample/src/main/res/drawable/shape_round_rect_background_100.xml b/uikit-sample/src/main/res/drawable/shape_round_rect_background_100.xml deleted file mode 100644 index d3afa3e5..00000000 --- a/uikit-sample/src/main/res/drawable/shape_round_rect_background_100.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - - \ No newline at end of file diff --git a/uikit-sample/src/main/res/drawable/shape_round_rect_background_100_with_underline.xml b/uikit-sample/src/main/res/drawable/shape_round_rect_background_100_with_underline.xml deleted file mode 100644 index 73f8cd7e..00000000 --- a/uikit-sample/src/main/res/drawable/shape_round_rect_background_100_with_underline.xml +++ /dev/null @@ -1,18 +0,0 @@ - - - - - - - - - - - - - - - - diff --git a/uikit-sample/src/main/res/drawable/shape_round_rect_primary_300_dim.xml b/uikit-sample/src/main/res/drawable/shape_round_rect_primary_300_dim.xml deleted file mode 100644 index c1573006..00000000 --- a/uikit-sample/src/main/res/drawable/shape_round_rect_primary_300_dim.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - - \ No newline at end of file diff --git a/uikit-sample/src/main/res/layout/activity_home.xml b/uikit-sample/src/main/res/layout/activity_home.xml deleted file mode 100644 index 70c33b10..00000000 --- a/uikit-sample/src/main/res/layout/activity_home.xml +++ /dev/null @@ -1,309 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/uikit-sample/src/main/res/layout/activity_login.xml b/uikit-sample/src/main/res/layout/activity_login.xml deleted file mode 100644 index 62bee606..00000000 --- a/uikit-sample/src/main/res/layout/activity_login.xml +++ /dev/null @@ -1,162 +0,0 @@ - - - - - - - - - - - - - - -