parent
c0c5d1afec
commit
e4b0dbae82
|
@ -152,7 +152,6 @@ class AudioContentMainFragment : BaseFragment<FragmentAudioContentMainBinding>(
|
||||||
}
|
}
|
||||||
|
|
||||||
binding.flSearchChannel.setOnClickListener {
|
binding.flSearchChannel.setOnClickListener {
|
||||||
(requireActivity() as MainActivity).showSearchBar()
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -154,7 +154,6 @@ class AudioContentMainTabHomeFragment : BaseFragment<FragmentAudioContentMainTab
|
||||||
if (SharedPreferenceManager.token.isNotBlank()) {
|
if (SharedPreferenceManager.token.isNotBlank()) {
|
||||||
binding.flSearch.visibility = View.VISIBLE
|
binding.flSearch.visibility = View.VISIBLE
|
||||||
binding.flSearch.setOnClickListener {
|
binding.flSearch.setOnClickListener {
|
||||||
(requireActivity() as MainActivity).showSearchBar()
|
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
binding.flSearch.visibility = View.GONE
|
binding.flSearch.visibility = View.GONE
|
||||||
|
|
|
@ -2,7 +2,6 @@ package kr.co.vividnext.sodalive.main
|
||||||
|
|
||||||
import android.Manifest
|
import android.Manifest
|
||||||
import android.annotation.SuppressLint
|
import android.annotation.SuppressLint
|
||||||
import android.app.Service
|
|
||||||
import android.content.BroadcastReceiver
|
import android.content.BroadcastReceiver
|
||||||
import android.content.ComponentName
|
import android.content.ComponentName
|
||||||
import android.content.Context
|
import android.content.Context
|
||||||
|
@ -10,14 +9,11 @@ import android.content.Intent
|
||||||
import android.content.IntentFilter
|
import android.content.IntentFilter
|
||||||
import android.content.SharedPreferences
|
import android.content.SharedPreferences
|
||||||
import android.content.res.ColorStateList
|
import android.content.res.ColorStateList
|
||||||
import android.graphics.Rect
|
|
||||||
import android.os.Build
|
import android.os.Build
|
||||||
import android.os.Bundle
|
import android.os.Bundle
|
||||||
import android.os.Handler
|
import android.os.Handler
|
||||||
import android.os.Looper
|
import android.os.Looper
|
||||||
import android.view.View
|
import android.view.View
|
||||||
import android.view.inputmethod.InputMethodManager
|
|
||||||
import androidx.activity.addCallback
|
|
||||||
import androidx.core.content.ContextCompat
|
import androidx.core.content.ContextCompat
|
||||||
import androidx.core.content.res.ResourcesCompat
|
import androidx.core.content.res.ResourcesCompat
|
||||||
import androidx.media3.common.MediaItem
|
import androidx.media3.common.MediaItem
|
||||||
|
@ -26,17 +22,12 @@ import androidx.media3.common.Player
|
||||||
import androidx.media3.common.util.UnstableApi
|
import androidx.media3.common.util.UnstableApi
|
||||||
import androidx.media3.session.MediaController
|
import androidx.media3.session.MediaController
|
||||||
import androidx.media3.session.SessionToken
|
import androidx.media3.session.SessionToken
|
||||||
import androidx.recyclerview.widget.LinearLayoutManager
|
|
||||||
import androidx.recyclerview.widget.RecyclerView
|
|
||||||
import coil.load
|
import coil.load
|
||||||
import coil.transform.RoundedCornersTransformation
|
import coil.transform.RoundedCornersTransformation
|
||||||
import com.google.firebase.messaging.FirebaseMessaging
|
import com.google.firebase.messaging.FirebaseMessaging
|
||||||
import com.gun0912.tedpermission.PermissionListener
|
import com.gun0912.tedpermission.PermissionListener
|
||||||
import com.gun0912.tedpermission.normal.TedPermission
|
import com.gun0912.tedpermission.normal.TedPermission
|
||||||
import com.jakewharton.rxbinding4.widget.textChanges
|
|
||||||
import com.orhanobut.logger.Logger
|
import com.orhanobut.logger.Logger
|
||||||
import io.reactivex.rxjava3.android.schedulers.AndroidSchedulers
|
|
||||||
import io.reactivex.rxjava3.schedulers.Schedulers
|
|
||||||
import kr.co.vividnext.sodalive.R
|
import kr.co.vividnext.sodalive.R
|
||||||
import kr.co.vividnext.sodalive.audio_content.AudioContentPlayService
|
import kr.co.vividnext.sodalive.audio_content.AudioContentPlayService
|
||||||
import kr.co.vividnext.sodalive.audio_content.detail.AudioContentDetailActivity
|
import kr.co.vividnext.sodalive.audio_content.detail.AudioContentDetailActivity
|
||||||
|
@ -51,26 +42,19 @@ import kr.co.vividnext.sodalive.common.LoadingDialog
|
||||||
import kr.co.vividnext.sodalive.common.SharedPreferenceManager
|
import kr.co.vividnext.sodalive.common.SharedPreferenceManager
|
||||||
import kr.co.vividnext.sodalive.databinding.ActivityMainBinding
|
import kr.co.vividnext.sodalive.databinding.ActivityMainBinding
|
||||||
import kr.co.vividnext.sodalive.databinding.ItemMainTabBinding
|
import kr.co.vividnext.sodalive.databinding.ItemMainTabBinding
|
||||||
import kr.co.vividnext.sodalive.explorer.ExplorerViewModel
|
|
||||||
import kr.co.vividnext.sodalive.explorer.profile.UserProfileActivity
|
import kr.co.vividnext.sodalive.explorer.profile.UserProfileActivity
|
||||||
import kr.co.vividnext.sodalive.extensions.dpToPx
|
import kr.co.vividnext.sodalive.extensions.dpToPx
|
||||||
import kr.co.vividnext.sodalive.live.LiveFragment
|
import kr.co.vividnext.sodalive.live.LiveFragment
|
||||||
import kr.co.vividnext.sodalive.message.SelectMessageRecipientAdapter
|
|
||||||
import kr.co.vividnext.sodalive.mypage.MyPageFragment
|
import kr.co.vividnext.sodalive.mypage.MyPageFragment
|
||||||
import kr.co.vividnext.sodalive.settings.event.EventDetailActivity
|
import kr.co.vividnext.sodalive.settings.event.EventDetailActivity
|
||||||
import kr.co.vividnext.sodalive.settings.notification.NotificationSettingsDialog
|
import kr.co.vividnext.sodalive.settings.notification.NotificationSettingsDialog
|
||||||
import kr.co.vividnext.sodalive.user.login.LoginActivity
|
import kr.co.vividnext.sodalive.user.login.LoginActivity
|
||||||
import org.koin.android.ext.android.inject
|
import org.koin.android.ext.android.inject
|
||||||
import java.util.concurrent.TimeUnit
|
|
||||||
|
|
||||||
@UnstableApi
|
@UnstableApi
|
||||||
class MainActivity : BaseActivity<ActivityMainBinding>(ActivityMainBinding::inflate) {
|
class MainActivity : BaseActivity<ActivityMainBinding>(ActivityMainBinding::inflate) {
|
||||||
|
|
||||||
private val viewModel: MainViewModel by inject()
|
private val viewModel: MainViewModel by inject()
|
||||||
private val explorerViewModel: ExplorerViewModel by inject()
|
|
||||||
|
|
||||||
private lateinit var searchChannelAdapter: SelectMessageRecipientAdapter
|
|
||||||
private lateinit var imm: InputMethodManager
|
|
||||||
|
|
||||||
private lateinit var liveFragment: LiveFragment
|
private lateinit var liveFragment: LiveFragment
|
||||||
private lateinit var loadingDialog: LoadingDialog
|
private lateinit var loadingDialog: LoadingDialog
|
||||||
|
@ -79,7 +63,6 @@ class MainActivity : BaseActivity<ActivityMainBinding>(ActivityMainBinding::infl
|
||||||
private var mediaController: MediaController? = null
|
private var mediaController: MediaController? = null
|
||||||
private val handler = Handler(Looper.getMainLooper())
|
private val handler = Handler(Looper.getMainLooper())
|
||||||
private val audioContentReceiver = AudioContentReceiver()
|
private val audioContentReceiver = AudioContentReceiver()
|
||||||
private var isShowSearchBar = false
|
|
||||||
|
|
||||||
private val preferenceChangeListener =
|
private val preferenceChangeListener =
|
||||||
SharedPreferences.OnSharedPreferenceChangeListener { sharedPreferences, key ->
|
SharedPreferences.OnSharedPreferenceChangeListener { sharedPreferences, key ->
|
||||||
|
@ -196,9 +179,6 @@ class MainActivity : BaseActivity<ActivityMainBinding>(ActivityMainBinding::infl
|
||||||
|
|
||||||
override fun onCreate(savedInstanceState: Bundle?) {
|
override fun onCreate(savedInstanceState: Bundle?) {
|
||||||
super.onCreate(savedInstanceState)
|
super.onCreate(savedInstanceState)
|
||||||
imm = getSystemService(
|
|
||||||
Service.INPUT_METHOD_SERVICE
|
|
||||||
) as InputMethodManager
|
|
||||||
|
|
||||||
checkPermissions()
|
checkPermissions()
|
||||||
|
|
||||||
|
@ -231,15 +211,6 @@ class MainActivity : BaseActivity<ActivityMainBinding>(ActivityMainBinding::infl
|
||||||
|
|
||||||
handler.postDelayed({ executeDeeplink(intent) }, 1000)
|
handler.postDelayed({ executeDeeplink(intent) }, 1000)
|
||||||
}
|
}
|
||||||
|
|
||||||
onBackPressedDispatcher.addCallback {
|
|
||||||
if (isShowSearchBar) {
|
|
||||||
hideSearchBar()
|
|
||||||
} else {
|
|
||||||
isEnabled = false
|
|
||||||
onBackPressedDispatcher.onBackPressed()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onDestroy() {
|
override fun onDestroy() {
|
||||||
|
@ -292,7 +263,6 @@ class MainActivity : BaseActivity<ActivityMainBinding>(ActivityMainBinding::infl
|
||||||
}
|
}
|
||||||
|
|
||||||
setupBottomTabLayout()
|
setupBottomTabLayout()
|
||||||
setupSearchChannelView()
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun executeDeeplink(intent: Intent) {
|
private fun executeDeeplink(intent: Intent) {
|
||||||
|
@ -603,97 +573,6 @@ class MainActivity : BaseActivity<ActivityMainBinding>(ActivityMainBinding::infl
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@SuppressLint("NotifyDataSetChanged")
|
|
||||||
private fun setupSearchChannelView() {
|
|
||||||
searchChannelAdapter = SelectMessageRecipientAdapter {
|
|
||||||
hideKeyboard()
|
|
||||||
val intent = Intent(applicationContext, UserProfileActivity::class.java)
|
|
||||||
intent.putExtra(Constants.EXTRA_USER_ID, it.id)
|
|
||||||
startActivity(intent)
|
|
||||||
}
|
|
||||||
|
|
||||||
binding.rvSearchChannel.layoutManager = LinearLayoutManager(
|
|
||||||
this,
|
|
||||||
LinearLayoutManager.VERTICAL,
|
|
||||||
false
|
|
||||||
)
|
|
||||||
|
|
||||||
binding.rvSearchChannel.addItemDecoration(object : RecyclerView.ItemDecoration() {
|
|
||||||
override fun getItemOffsets(
|
|
||||||
outRect: Rect,
|
|
||||||
view: View,
|
|
||||||
parent: RecyclerView,
|
|
||||||
state: RecyclerView.State
|
|
||||||
) {
|
|
||||||
super.getItemOffsets(outRect, view, parent, state)
|
|
||||||
|
|
||||||
outRect.left = 13.3f.dpToPx().toInt()
|
|
||||||
outRect.right = 13.3f.dpToPx().toInt()
|
|
||||||
outRect.top = 13.3f.dpToPx().toInt()
|
|
||||||
outRect.bottom = 13.3f.dpToPx().toInt()
|
|
||||||
}
|
|
||||||
})
|
|
||||||
|
|
||||||
binding.rvSearchChannel.adapter = searchChannelAdapter
|
|
||||||
|
|
||||||
compositeDisposable.add(
|
|
||||||
binding.etSearchChannel.textChanges().skip(1)
|
|
||||||
.debounce(500, TimeUnit.MILLISECONDS)
|
|
||||||
.observeOn(AndroidSchedulers.mainThread())
|
|
||||||
.subscribeOn(Schedulers.io())
|
|
||||||
.subscribe {
|
|
||||||
if (it.length >= 2) {
|
|
||||||
explorerViewModel.searchChannel(it.toString())
|
|
||||||
binding.rvSearchChannel.visibility = View.VISIBLE
|
|
||||||
binding.tvResultX.visibility = View.GONE
|
|
||||||
} else {
|
|
||||||
binding.rvSearchChannel.visibility = View.GONE
|
|
||||||
binding.tvResultX.visibility = View.VISIBLE
|
|
||||||
}
|
|
||||||
}
|
|
||||||
)
|
|
||||||
|
|
||||||
explorerViewModel.searchChannelLiveData.observe(this) {
|
|
||||||
searchChannelAdapter.items.clear()
|
|
||||||
if (it.isNotEmpty()) {
|
|
||||||
searchChannelAdapter.items.addAll(it)
|
|
||||||
binding.rvSearchChannel.visibility = View.VISIBLE
|
|
||||||
binding.tvResultX.visibility = View.GONE
|
|
||||||
} else {
|
|
||||||
binding.rvSearchChannel.visibility = View.GONE
|
|
||||||
binding.tvResultX.visibility = View.VISIBLE
|
|
||||||
}
|
|
||||||
searchChannelAdapter.notifyDataSetChanged()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private fun hideKeyboard() {
|
|
||||||
handler.postDelayed({
|
|
||||||
imm.hideSoftInputFromWindow(
|
|
||||||
window.decorView.applicationWindowToken,
|
|
||||||
InputMethodManager.HIDE_NOT_ALWAYS
|
|
||||||
)
|
|
||||||
}, 100)
|
|
||||||
}
|
|
||||||
|
|
||||||
private fun hideSearchBar() {
|
|
||||||
isShowSearchBar = false
|
|
||||||
binding.nsSearch.visibility = View.GONE
|
|
||||||
binding.etSearchChannel.setText("")
|
|
||||||
}
|
|
||||||
|
|
||||||
fun showSearchBar() {
|
|
||||||
isShowSearchBar = true
|
|
||||||
binding.nsSearch.visibility = View.VISIBLE
|
|
||||||
binding.etSearchChannel.setText("")
|
|
||||||
|
|
||||||
binding.etSearchChannel.requestFocus()
|
|
||||||
binding.etSearchChannel.post {
|
|
||||||
val imm = getSystemService(INPUT_METHOD_SERVICE) as InputMethodManager
|
|
||||||
imm.showSoftInput(binding.etSearchChannel, InputMethodManager.SHOW_IMPLICIT)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
fun showLoginActivity() {
|
fun showLoginActivity() {
|
||||||
if (SharedPreferenceManager.token.isBlank()) {
|
if (SharedPreferenceManager.token.isBlank()) {
|
||||||
val extras = intent.extras
|
val extras = intent.extras
|
||||||
|
|
|
@ -190,71 +190,4 @@
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:layout_weight="1" />
|
android:layout_weight="1" />
|
||||||
</LinearLayout>
|
</LinearLayout>
|
||||||
|
|
||||||
<androidx.core.widget.NestedScrollView
|
|
||||||
android:id="@+id/ns_search"
|
|
||||||
android:layout_width="match_parent"
|
|
||||||
android:layout_height="match_parent"
|
|
||||||
android:background="@color/black"
|
|
||||||
android:visibility="gone">
|
|
||||||
|
|
||||||
<LinearLayout
|
|
||||||
android:layout_width="match_parent"
|
|
||||||
android:layout_height="match_parent"
|
|
||||||
android:orientation="vertical">
|
|
||||||
|
|
||||||
<RelativeLayout
|
|
||||||
android:id="@+id/fl_search_channel"
|
|
||||||
android:layout_width="match_parent"
|
|
||||||
android:layout_height="50dp"
|
|
||||||
android:layout_marginHorizontal="13.3dp"
|
|
||||||
android:layout_marginTop="20dp"
|
|
||||||
android:background="@drawable/bg_round_corner_6_7_222222_bbbbbb">
|
|
||||||
|
|
||||||
<ImageView
|
|
||||||
android:layout_width="wrap_content"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:layout_centerVertical="true"
|
|
||||||
android:layout_gravity="center_vertical"
|
|
||||||
android:layout_marginStart="21.3dp"
|
|
||||||
android:contentDescription="@null"
|
|
||||||
android:src="@drawable/ic_title_search_black" />
|
|
||||||
|
|
||||||
<EditText
|
|
||||||
android:id="@+id/et_search_channel"
|
|
||||||
android:layout_width="match_parent"
|
|
||||||
android:layout_height="match_parent"
|
|
||||||
android:layout_gravity="center_vertical"
|
|
||||||
android:background="@null"
|
|
||||||
android:fontFamily="@font/gmarket_sans_medium"
|
|
||||||
android:gravity="center_vertical"
|
|
||||||
android:hint="채널명을 입력해보세요"
|
|
||||||
android:importantForAutofill="no"
|
|
||||||
android:inputType="textWebEditText"
|
|
||||||
android:paddingHorizontal="54.67dp"
|
|
||||||
android:textColor="@color/color_eeeeee"
|
|
||||||
android:textColorHint="@color/color_555555"
|
|
||||||
android:textCursorDrawable="@drawable/edit_text_cursor"
|
|
||||||
android:textSize="13.3sp"
|
|
||||||
tools:ignore="LabelFor" />
|
|
||||||
</RelativeLayout>
|
|
||||||
|
|
||||||
<androidx.recyclerview.widget.RecyclerView
|
|
||||||
android:id="@+id/rv_search_channel"
|
|
||||||
android:layout_width="match_parent"
|
|
||||||
android:layout_height="match_parent"
|
|
||||||
android:clipToPadding="false"
|
|
||||||
android:nestedScrollingEnabled="false"
|
|
||||||
android:paddingVertical="20dp"
|
|
||||||
android:visibility="gone" />
|
|
||||||
|
|
||||||
<TextView
|
|
||||||
android:id="@+id/tv_result_x"
|
|
||||||
android:layout_width="match_parent"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:layout_marginVertical="40dp"
|
|
||||||
android:gravity="center"
|
|
||||||
android:text="검색 결과가 없습니다." />
|
|
||||||
</LinearLayout>
|
|
||||||
</androidx.core.widget.NestedScrollView>
|
|
||||||
</RelativeLayout>
|
</RelativeLayout>
|
||||||
|
|
Loading…
Reference in New Issue