package com.coldmint.rust.pro import android.annotation.SuppressLint import android.app.ActivityOptions import android.content.Context import android.content.Intent import android.graphics.Color import android.graphics.drawable.Drawable import android.os.Bundle import android.view.Gravity import android.view.LayoutInflater import android.view.View import android.view.inputmethod.EditorInfo import android.widget.EditText import androidx.core.view.isVisible import com.afollestad.materialdialogs.LayoutMode import com.afollestad.materialdialogs.MaterialDialog import com.afollestad.materialdialogs.bottomsheets.BottomSheet import com.afollestad.materialdialogs.input.getInputField import com.afollestad.materialdialogs.input.input import com.bumptech.glide.Glide import com.coldmint.rust.core.dataBean.ApiResponse import com.coldmint.rust.core.dataBean.user.SpaceInfoData import com.coldmint.rust.core.interfaces.ApiCallBack import com.coldmint.rust.core.web.* import com.coldmint.rust.pro.adapters.UserHomeStateAdapter import com.coldmint.rust.pro.base.BaseActivity import com.coldmint.rust.pro.databinding.ActivityUserHomePageBinding import com.coldmint.rust.pro.dialog.CommentDialog import com.coldmint.rust.pro.tool.AppSettings import com.coldmint.rust.pro.tool.GlobalMethod import com.google.android.material.appbar.AppBarLayout import com.google.android.material.appbar.CollapsingToolbarLayout import com.google.android.material.snackbar.Snackbar import com.google.android.material.tabs.TabLayout import com.google.android.material.tabs.TabLayoutMediator import com.gyf.immersionbar.ktx.immersionBar class UserHomePageActivity : BaseActivity() { lateinit var userId: String lateinit var account: String var userName: String? = null var fans: Int = 0 val userHomeStateAdapter by lazy { UserHomeStateAdapter(this, userId) } //旧的备份数据 var oldSpaceInfoData: SpaceInfoData? = null @SuppressLint("CheckResult") private fun initView() { // immersionBar { // transparentStatusBar().statusBarDarkFont(true) // .navigationBarDarkIcon(true) // } val thisIntent = intent val temUserId = thisIntent.getStringExtra("userId") if (temUserId == null) { showError("请传入用户id") return } else { userId = temUserId } val temAccount = AppSettings.getValue(AppSettings.Setting.Account, "") if (temAccount.isBlank()) { showError("请先登录") return } else { account = temAccount } viewBinding.toolbar.title = "" setReturnButton() viewBinding.followLayout.setOnClickListener { openUserList(userId, true) } viewBinding.fansLayout.setOnClickListener { openUserList(userId, false) } initButton() // val dlist = ArrayList() // for (i in 1..30) { //// dlist.add(getDrawable(R.drawable.emoji_2_3)!!) // dlist.add(getDrawable(R.drawable.emoji_1_3)!!) // } // viewBinding.bubbleView.setDrawableList(dlist) // viewBinding.bubbleView.startAnimation(5000, 5000,30) // viewBinding.emojiRainLayout.addEmoji(R.drawable.emoji_1_3) // viewBinding.emojiRainLayout.addEmoji(R.drawable.emoji_2_3) // viewBinding.emojiRainLayout.addEmoji(R.drawable.emoji_3_3) // viewBinding.emojiRainLayout.startDropping() } /** * 打开用户列表 * @param account String 账号 * @param isFollowMode Boolean 是否加载偶像 */ fun openUserList(account: String, isFollowMode: Boolean) { val bundle = Bundle() bundle.putString("account", account) bundle.putBoolean("isFollowMode", isFollowMode) val intent = Intent(this, UserListActivity::class.java) intent.putExtra("data", bundle) startActivity(intent) } /** * 初始化按钮 */ private fun initButton() { if (account == userId) { viewBinding.button.text = getString(R.string.editData) } else { Community.getFollowState(account, userId, object : ApiCallBack { override fun onResponse(t: ApiResponse) { if (t.code == ServerConfiguration.Success_Code) { val data = t.data if (data != null && ServerConfiguration.isEvent(data)) { when (data) { "@event:已互粉" -> { viewBinding.button.text = getString(R.string.each_other_follow) } "@event:已关注" -> { viewBinding.button.text = getString(R.string.followed) } "@event:关注" -> { viewBinding.button.text = getString(R.string.follow) } "@event:拒绝关注" -> { viewBinding.button.text = getString(R.string.reject_follow) viewBinding.button.isEnabled = false } } } } else { } } override fun onFailure(e: Exception) { } }) } } /** * 展示用户数据到视图 * @param spaceInfoData SpaceInfoData */ fun showUserdataIfNeed(spaceInfoData: SpaceInfoData) { var isFirst = false if (oldSpaceInfoData == null) { isFirst = true oldSpaceInfoData = spaceInfoData } else { if (oldSpaceInfoData == spaceInfoData) { return } } userName = spaceInfoData.data.userName viewBinding.appBar.addOnOffsetChangedListener(AppBarLayout.OnOffsetChangedListener { appBarLayout, verticalOffset -> viewBinding.toolbar.title = if ((Math.abs(verticalOffset) >= appBarLayout.totalScrollRange)) { spaceInfoData.data.userName } else { "" } }) viewBinding.nameView.text = spaceInfoData.data.userName viewBinding.describeView.text = spaceInfoData.data.introduce ?: getString(R.string.defaultIntroduced) viewBinding.loginTimeView.text = String.format( getString(R.string.user_info), spaceInfoData.data.loginTime, spaceInfoData.data.account, spaceInfoData.data.location ) viewBinding.fab.isVisible = true val gender = spaceInfoData.data.gender if (gender > 0) { Glide.with(this).load(R.drawable.boy).apply(GlobalMethod.getRequestOptions()) .into(viewBinding.genderView) } else { Glide.with(this).load(R.drawable.girl).apply(GlobalMethod.getRequestOptions()) .into(viewBinding.genderView) } val permission = spaceInfoData.data.permission when (permission) { 1 -> { viewBinding.cardView.isVisible = true viewBinding.cardView.setCardBackgroundColor(Color.parseColor("#f47920")) viewBinding.positionView.setText(R.string.super_admin) } 2 -> { viewBinding.cardView.isVisible = true viewBinding.cardView.setCardBackgroundColor(Color.parseColor("#ffd400")) viewBinding.positionView.setText(R.string.admin) } else -> { if (spaceInfoData.data.expirationTime == ServerConfiguration.ForeverTime) { viewBinding.cardView.isVisible = true viewBinding.cardView.setCardBackgroundColor(Color.parseColor("#33a3dc")) viewBinding.positionView.setText(R.string.forever_time) } } } val icon = spaceInfoData.data.headIcon if (icon != null) { val iconLink = ServerConfiguration.getRealLink(icon) Glide.with(this@UserHomePageActivity).load(iconLink) .apply(GlobalMethod.getRequestOptions(true)) .into(viewBinding.headIconView) } val cover = spaceInfoData.data.cover if (cover != null) { Glide.with(this).load(ServerConfiguration.getRealLink(cover)) .apply(GlobalMethod.getRequestOptions()) .into(viewBinding.coverView) } viewBinding.viewPager.adapter = userHomeStateAdapter viewBinding.coverView.setOnClickListener { if (cover != null) { val intent = Intent(this@UserHomePageActivity, FullScreenCoverActivity::class.java) val name = getString(R.string.transition_cover) val options = ActivityOptions.makeSceneTransitionAnimation(this, viewBinding.coverView, name) intent.putExtra("iconLink", cover) this@UserHomePageActivity.startActivity(intent, options.toBundle()) } } fans = spaceInfoData.data.fans viewBinding.fansNumView.text = ServerConfiguration.numberToString(spaceInfoData.data.fans) viewBinding.followNumView.text = ServerConfiguration.numberToString(spaceInfoData.data.follower) viewBinding.praiseNumView.text = ServerConfiguration.numberToString(spaceInfoData.data.praise) if (isFirst) { TabLayoutMediator(viewBinding.tabLayout, viewBinding.viewPager) { tab, position -> when (position) { 0 -> tab.text = getString(R.string.homepage) else -> { tab.text = getString(R.string.dynamic) } } }.attach() viewBinding.fab.hide() viewBinding.tabLayout.addOnTabSelectedListener(object : TabLayout.OnTabSelectedListener { override fun onTabSelected(tab: TabLayout.Tab?) { val finalTab = tab if (finalTab != null) { val tiltle = finalTab.text val dynamic = getString(R.string.dynamic) if (dynamic == tiltle && userId == account) { viewBinding.fab.show() } else { viewBinding.fab.hide() } } } override fun onTabUnselected(tab: TabLayout.Tab?) { } override fun onTabReselected(tab: TabLayout.Tab?) { } }) } } override fun onResume() { super.onResume() User.getSpaceInfo(userId, object : ApiCallBack { override fun onResponse(t: SpaceInfoData) { if (t.code == ServerConfiguration.Success_Code) { showUserdataIfNeed(t) } else { showError(t.message) } } override fun onFailure(e: Exception) { showInternetError(null, e) } }) } // /** // * 获取状态栏高度 // * @param context Context // * @return Int // */ // fun statusBarHeight(context: Context): Int { // var height = 0 // val res = context.resources // val resId = res.getIdentifier("status_bar_height", "dimen", "android") // if (resId > 0) { // height = res.getDimensionPixelSize(resId) // } // return height // } private fun initAction() { viewBinding.fab.setOnClickListener { CommentDialog(this).setTitle(R.string.send_dynamic).setCancelable(false) .setSubmitFun { button, textInputLayout, s, alertDialog -> val token = AppSettings.getValue(AppSettings.Setting.Token, "") if (!s.isBlank()) { Dynamic.instance.send( token, s, object : ApiCallBack { override fun onResponse(t: ApiResponse) { if (t.code == ServerConfiguration.Success_Code) { alertDialog.dismiss() Snackbar.make( viewBinding.button, R.string.release_ok, Snackbar.LENGTH_SHORT ).show() userHomeStateAdapter.updataDynamicList() } else { Snackbar.make( viewBinding.button, t.message, Snackbar.LENGTH_SHORT ).show() } } override fun onFailure(e: Exception) { showInternetError(viewBinding.button, e) } }) } }.show() // MaterialDialog(this, BottomSheet(LayoutMode.WRAP_CONTENT)).show { // input(maxLength = 255).title() // .positiveButton(R.string.dialog_ok) // .positiveButton { // val inputField: EditText = it.getInputField() // val text = inputField.text.toString() // // } // }.negativeButton(R.string.dialog_cancel) // // val editText = this.getInputField() // editText.inputType = // EditorInfo.TYPE_TEXT_FLAG_MULTI_LINE // editText.minLines = 3 // editText.gravity = Gravity.TOP // editText.isSingleLine = false // } } viewBinding.button.setOnClickListener { when (val type = viewBinding.button.text.toString()) { getString(R.string.follow) -> { viewBinding.button.setBackgroundColor( GlobalMethod.getThemeColor( this, R.attr.colorPrimaryVariant ) ) viewBinding.button.setText(R.string.request_data) Community.follow(account, userId, object : ApiCallBack { override fun onResponse(t: ApiResponse) { viewBinding.button.setBackgroundColor( GlobalMethod.getColorPrimary( this@UserHomePageActivity ) ) if (t.code == ServerConfiguration.Success_Code) { fans++ viewBinding.fansNumView.text = ServerConfiguration.numberToString(fans) viewBinding.button.text = getString(R.string.followed) } else { viewBinding.button.text = type Snackbar.make( viewBinding.button, t.message, Snackbar.LENGTH_SHORT ) .show() } } override fun onFailure(e: Exception) { showInternetError(viewBinding.button, e) viewBinding.button.setBackgroundColor( GlobalMethod.getColorPrimary( this@UserHomePageActivity ) ) viewBinding.button.text = type } }) } getString(R.string.followed), getString(R.string.each_other_follow) -> { val de = String.format(getString(R.string.defollow_tip), userName ?: userId) MaterialDialog(this).show { title(R.string.defollow).message(text = de) .positiveButton(R.string.dialog_ok).positiveButton { viewBinding.button.setBackgroundColor( GlobalMethod.getThemeColor( this@UserHomePageActivity, R.attr.colorPrimaryVariant ) ) viewBinding.button.setText(R.string.request_data) Community.deFollow( account, userId, object : ApiCallBack { override fun onResponse(t: ApiResponse) { viewBinding.button.setBackgroundColor( GlobalMethod.getColorPrimary( this@UserHomePageActivity ) ) if (t.code == ServerConfiguration.Success_Code) { fans-- viewBinding.fansNumView.text = ServerConfiguration.numberToString(fans) viewBinding.button.text = getString(R.string.follow) } else { Snackbar.make( viewBinding.button, t.message, Snackbar.LENGTH_SHORT ).show() viewBinding.button.text = type } } override fun onFailure(e: Exception) { showInternetError(viewBinding.button, e) } }) } }.negativeButton(R.string.dialog_cancel) } getString(R.string.editData) -> { val intent = Intent(this, EditUserInfoActivity::class.java) intent.putExtra("userId", userId) startActivity(intent) } } } } override fun getViewBindingObject(layoutInflater: LayoutInflater): ActivityUserHomePageBinding { return ActivityUserHomePageBinding.inflate(layoutInflater) } override fun whenCreateActivity(savedInstanceState: Bundle?, canUseView: Boolean) { if (canUseView) { initView() initAction() } } }