Compare commits
67 Commits
molistar_r
...
molistar/g
Author | SHA1 | Date | |
---|---|---|---|
![]() |
691d19b502 | ||
![]() |
f51bd9815c | ||
![]() |
cea25c7497 | ||
![]() |
47d2bfd145 | ||
![]() |
047e1454bd | ||
![]() |
714d5baec6 | ||
![]() |
b20ee8064c | ||
![]() |
711135ae90 | ||
![]() |
ecf42e368e | ||
![]() |
205e1180e7 | ||
![]() |
bc48cc86a9 | ||
![]() |
e7b73a2961 | ||
![]() |
5070e21d16 | ||
![]() |
049006aa8b | ||
![]() |
86b498c00e | ||
![]() |
6df95cf11f | ||
![]() |
3b407c0bd6 | ||
![]() |
83af08076a | ||
![]() |
cdc1c51fec | ||
![]() |
a8191616a3 | ||
![]() |
410832690f | ||
![]() |
b1d2f0515b | ||
![]() |
82c2d8c25d | ||
![]() |
549088c99e | ||
![]() |
5910e7c5fd | ||
![]() |
53aed7599a | ||
![]() |
8aebb7c2c2 | ||
![]() |
3a120bf5f0 | ||
![]() |
2a0d8f06fa | ||
![]() |
495bae0d00 | ||
![]() |
2af7cec8dd | ||
![]() |
e9e4da8d60 | ||
![]() |
14c1805a2b | ||
![]() |
066fc4056b | ||
![]() |
f8ad0d3961 | ||
![]() |
0d974866c8 | ||
![]() |
b4f3c4f3e3 | ||
![]() |
f74b744f56 | ||
![]() |
b8f73ec0d5 | ||
![]() |
3ff80994f1 | ||
![]() |
c1426b39c4 | ||
![]() |
3b28974919 | ||
![]() |
63a28bc142 | ||
![]() |
729d626006 | ||
![]() |
a407268be1 | ||
![]() |
f4808e8acf | ||
![]() |
3e49dae43b | ||
![]() |
35d53ccdb2 | ||
![]() |
2a20d75ffd | ||
![]() |
5f157d8454 | ||
![]() |
5fbee068dc | ||
![]() |
046c7d66cd | ||
![]() |
accf4562b1 | ||
![]() |
5b90524144 | ||
![]() |
1284a6e8a2 | ||
![]() |
afdf3093a1 | ||
![]() |
843a37ed97 | ||
![]() |
f99c6d8b37 | ||
![]() |
7add521040 | ||
![]() |
b673f5603f | ||
![]() |
a4f9559ad9 | ||
![]() |
3226109442 | ||
![]() |
3c60225e35 | ||
![]() |
0a70c6a478 | ||
![]() |
16a8f9a52a | ||
![]() |
2a1983aa46 | ||
![]() |
eb187ebc56 |
3
.gitmodules
vendored
Normal file
3
.gitmodules
vendored
Normal file
@@ -0,0 +1,3 @@
|
||||
[submodule "modules/module_google"]
|
||||
path = modules/module_google
|
||||
url = https://e.coding.net/chwllive/peko/peko-android-gms.git
|
@@ -117,6 +117,7 @@ android {
|
||||
'src/module_treasure_box/java',
|
||||
'src/module_public_chat/java',
|
||||
'src/module_game/java',
|
||||
'src/module_community/java',
|
||||
|
||||
]
|
||||
|
||||
@@ -133,6 +134,7 @@ android {
|
||||
'src/module_treasure_box/res',
|
||||
'src/module_public_chat/res',
|
||||
'src/module_game/res',
|
||||
'src/module_community/res',
|
||||
|
||||
]
|
||||
|
||||
@@ -219,7 +221,6 @@ dependencies {
|
||||
api "com.jzxiang.pickerview:TimePickerDialog:1.0.1"
|
||||
api "com.github.zyyoona7:EasyPopup:1.0.2"
|
||||
api "com.github.donkingliang:LabelsView:1.6.5"
|
||||
api "com.github.yyued:SVGAPlayer-Android:2.6.1"
|
||||
api "com.ms-square:expandableTextView:0.1.4"
|
||||
annotationProcessor 'androidx.annotation:annotation:1.6.0'
|
||||
|
||||
@@ -337,6 +338,16 @@ xmlClassGuard {
|
||||
"com.chwl.core": "com.hhchu.core",
|
||||
"com.chwl.library": "com.hhchu.library"]
|
||||
moveDir = [
|
||||
"com.chwl.app.community.dynamic" : "ffefcef.ddbccaec",
|
||||
"com.chwl.app.community.helper" : "eaeecbea.ccefdeaf",
|
||||
"com.chwl.app.community.holder" : "aafebee.febeeba",
|
||||
"com.chwl.app.community.im" : "eedadfa.cccedea",
|
||||
"com.chwl.app.community.publish" : "ddae.cfdb",
|
||||
"com.chwl.app.community.square" : "bddfb.eedde",
|
||||
"com.chwl.app.community.user_dynamic" : "ddcdbcbc.acbfcfba",
|
||||
"com.chwl.app.community.utils" : "cceaf.cbdcdb",
|
||||
"com.chwl.app.community.widget" : "bdfaa.beeefc",
|
||||
"com.chwl.app.community" : "cadfd.aeddb",
|
||||
"com.chwl.app.avroom.headline" : "eefce.eecad",
|
||||
"com.chwl.core.bean.game" : "caeccd.fdedac",
|
||||
"com.chwl.core.bean.room" : "afceec.aaafbc",
|
||||
|
@@ -82,7 +82,8 @@
|
||||
<uses-permission android:name="android.permission.POST_NOTIFICATIONS" />
|
||||
<!-- 对于 Android 12.0 及以上设备,还需要添加如下权限: -->
|
||||
<uses-permission android:name="android.permission.BLUETOOTH_CONNECT" />
|
||||
|
||||
<uses-permission android:name="android.permission.FOREGROUND_SERVICE_MEDIA_PLAYBACK" />
|
||||
<uses-permission android:name="android.permission.FOREGROUND_SERVICE_REMOTE_MESSAGING" />
|
||||
<application
|
||||
android:name=".application.App"
|
||||
android:allowBackup="false"
|
||||
@@ -265,6 +266,9 @@
|
||||
android:name=".avroom.activity.RoomSettingActivity"
|
||||
android:label="@string/main_androidmanifest_07"
|
||||
android:screenOrientation="portrait" />
|
||||
<activity
|
||||
android:name=".avroom.activity.RoomTypeSwitchActivity"
|
||||
android:screenOrientation="portrait" />
|
||||
<activity
|
||||
android:name=".avroom.activity.RoomBgSettingActivity"
|
||||
android:screenOrientation="portrait" />
|
||||
@@ -873,19 +877,38 @@
|
||||
|
||||
<service
|
||||
android:name="com.netease.nimlib.service.NimService"
|
||||
android:foregroundServiceType="remoteMessaging"
|
||||
android:process=":core" />
|
||||
<service
|
||||
android:name="com.netease.nimlib.service.NimService$Aux"
|
||||
android:foregroundServiceType="remoteMessaging"
|
||||
android:process=":core" />
|
||||
<service
|
||||
android:name="com.netease.nimlib.job.NIMJobService"
|
||||
android:foregroundServiceType="remoteMessaging"
|
||||
android:permission="android.permission.BIND_JOB_SERVICE"
|
||||
android:process=":core" />
|
||||
<service android:name="com.netease.nimlib.service.ResponseService" />
|
||||
<service android:name="com.netease.nimlib.service.ResponseService"
|
||||
android:foregroundServiceType="remoteMessaging"/>
|
||||
<service
|
||||
android:name=".service.DaemonService"
|
||||
android:foregroundServiceType="mediaPlayback"
|
||||
android:enabled="true" />
|
||||
|
||||
<!-- Trigger Google Play services to install the backported photo picker module. -->
|
||||
<service
|
||||
android:name="com.google.android.gms.metadata.ModuleDependencies"
|
||||
android:enabled="false"
|
||||
android:exported="false"
|
||||
tools:ignore="MissingClass">
|
||||
<intent-filter>
|
||||
<action android:name="com.google.android.gms.metadata.MODULE_DEPENDENCIES" />
|
||||
</intent-filter>
|
||||
<meta-data
|
||||
android:name="photopicker_activity:0:required"
|
||||
android:value="" />
|
||||
</service>
|
||||
|
||||
<activity android:name=".avroom.room_album.RoomAlbumActivity" />
|
||||
|
||||
<activity android:name=".ui.language.LanguageActivity" />
|
||||
@@ -931,6 +954,23 @@
|
||||
android:launchMode="singleTask"
|
||||
android:screenOrientation="portrait"
|
||||
android:windowSoftInputMode="adjustPan" />
|
||||
<activity
|
||||
android:name=".community.dynamic.view.DynamicDetailActivity"
|
||||
android:screenOrientation="portrait"
|
||||
android:windowSoftInputMode="adjustPan" />
|
||||
<activity
|
||||
android:name=".community.publish.view.PublishActivity"
|
||||
android:launchMode="singleTop"
|
||||
android:screenOrientation="portrait"
|
||||
android:windowSoftInputMode="stateHidden|adjustNothing" />
|
||||
<activity
|
||||
android:windowSoftInputMode="adjustPan"
|
||||
android:name=".ui.feedback.FeedbackActivity"
|
||||
android:screenOrientation="portrait" />
|
||||
<activity android:name=".ui.debug.DebugActivity"
|
||||
android:screenOrientation="portrait"/>
|
||||
<activity android:name=".ui.game_team.record.GameTeamRecordActivity"
|
||||
android:screenOrientation="portrait"/>
|
||||
</application>
|
||||
|
||||
</manifest>
|
@@ -25,6 +25,7 @@ import androidx.lifecycle.ViewModelProvider;
|
||||
|
||||
import com.chwl.app.base.GlobalViewModelOwner;
|
||||
import com.chwl.app.common.widget.dialog.DialogManager;
|
||||
import com.chwl.app.community.square.SquareFragment;
|
||||
import com.chwl.app.game.core.GameStateAbility;
|
||||
import com.chwl.app.game.data.GameModel2;
|
||||
import com.chwl.app.game.ui.game.GameActivity;
|
||||
@@ -143,7 +144,7 @@ public class MainActivity extends BaseMvpActivity<IMainView, MainPresenter>
|
||||
private MainTabLayout mMainTabLayout;
|
||||
private AnchorCardView anchorCardView;
|
||||
private View viewClose;
|
||||
private int mCurrentTabType = MainTabType.TAB_TYPE_STAR;
|
||||
private int mCurrentTabType = MainTabType.TAB_TYPE_HOME;
|
||||
/**
|
||||
* 房间最小化动画,换成属性动画,原先的补间动画影响了activity的生命周期
|
||||
*/
|
||||
@@ -162,9 +163,9 @@ public class MainActivity extends BaseMvpActivity<IMainView, MainPresenter>
|
||||
private Runnable touchRunnable;
|
||||
|
||||
{
|
||||
fragmentArray.put(MainTabType.TAB_TYPE_STAR, new StarFragment());
|
||||
fragmentArray.put(MainTabType.TAB_TYPE_GAME, new GameHomeFragment());
|
||||
fragmentArray.put(MainTabType.TAB_TYPE_HOME, new HomeFragment());
|
||||
fragmentArray.put(MainTabType.TAB_TYPE_GAME, new GameHomeFragment());
|
||||
fragmentArray.put(MainTabType.TAB_TYPE_SQUARE, new SquareFragment());
|
||||
fragmentArray.put(MainTabType.TAB_TYPE_MSG, new ContactsListFragment());
|
||||
fragmentArray.put(MainTabType.TAB_TYPE_ME, new MeFragment());
|
||||
}
|
||||
|
@@ -84,7 +84,6 @@ import com.chwl.library.common.file.FileHelper;
|
||||
import com.chwl.library.net.rxnet.RxNet;
|
||||
import com.chwl.library.net.rxnet.converter.GsonConverterPlugins;
|
||||
import com.chwl.library.utils.AppMetaDataUtil;
|
||||
import com.chwl.library.utils.AppUtils;
|
||||
import com.chwl.library.utils.DeviceUuidFactory;
|
||||
import com.chwl.library.utils.ResUtil;
|
||||
import com.chwl.library.utils.SingleToastUtil;
|
||||
@@ -417,7 +416,7 @@ public class App extends BaseApp {
|
||||
httpParams.put("netType", String.valueOf(SystemUtils.getNetworkType(context)));
|
||||
httpParams.put("model", SystemUtils.getPhoneModel());
|
||||
httpParams.put("appVersion", VersionUtil.getLocalName(context));
|
||||
httpParams.put("appVersionCode", String.valueOf(AppUtils.getVersionCode(context)));
|
||||
httpParams.put("appVersionCode", String.valueOf(VersionUtil.getVersionCode(context)));
|
||||
httpParams.put("deviceId", DeviceUuidFactory.getDeviceId(context));
|
||||
httpParams.put("androidId", MD5Utils.getMD5String(Settings.Secure.getString(context.getContentResolver(), Settings.Secure.ANDROID_ID)));
|
||||
httpParams.put("channel", AppMetaDataUtil.getChannelID());
|
||||
@@ -484,7 +483,6 @@ public class App extends BaseApp {
|
||||
ChannelModel.get();
|
||||
MarketVerifyModel.get();
|
||||
GiftModel.get();
|
||||
GiftModel.get().tryLoadGiftList();
|
||||
// 模厅
|
||||
HallDataManager.get().application();
|
||||
//全局处理
|
||||
|
@@ -42,6 +42,7 @@ import com.alibaba.fastjson.JSONObject;
|
||||
import com.chwl.app.notify.RoomNotifyManager;
|
||||
import com.chwl.app.ui.webview.baishun.BaiShunGameWebFragment;
|
||||
import com.chwl.app.ui.webview.baishun.IBaiShunGameListener;
|
||||
import com.chwl.library.widget.SVGAView;
|
||||
import com.chwl.core.monsterhunting.bean.MonsterDataBean;
|
||||
import com.chwl.core.room.game.bean.BaiShunGameConfig;
|
||||
import com.chwl.core.support.room.AudioRoomContext;
|
||||
@@ -177,6 +178,15 @@ public class AVRoomActivity extends BaseMvpActivity<IAvRoomView, AvRoomPresenter
|
||||
private static final String TAG = "AVRoomActivity";
|
||||
private static final int SHOW_RED_DIALOG_MAX = 10;
|
||||
public static boolean isPKModel = false;
|
||||
private static SVGAView.SVGACache svgaCache;
|
||||
|
||||
public static SVGAView.SVGACache getSvgaCache() {
|
||||
if (svgaCache == null) {
|
||||
svgaCache = SVGAView.newCache(20);
|
||||
}
|
||||
return svgaCache;
|
||||
}
|
||||
|
||||
/**
|
||||
* 管理限制进房
|
||||
*/
|
||||
@@ -899,6 +909,10 @@ public class AVRoomActivity extends BaseMvpActivity<IAvRoomView, AvRoomPresenter
|
||||
GiftModel.get().cancelCountDownTimer();
|
||||
EventBus.getDefault().unregister(this);
|
||||
DemoCache.saveBoolean("FirstCharge", false);
|
||||
if (svgaCache != null) {
|
||||
svgaCache.clear();
|
||||
}
|
||||
svgaCache = null;
|
||||
super.onDestroy();
|
||||
}
|
||||
|
||||
|
@@ -0,0 +1,142 @@
|
||||
package com.chwl.app.avroom.activity
|
||||
|
||||
import android.annotation.SuppressLint
|
||||
import android.content.Context
|
||||
import android.content.Intent
|
||||
import android.view.View
|
||||
import androidx.core.view.isVisible
|
||||
import com.chwl.app.R
|
||||
import com.chwl.app.base.BaseViewBindingActivity
|
||||
import com.chwl.app.databinding.RoomTypeSwitchActivityBinding
|
||||
import com.chwl.app.home.helper.OpenRoomHelper
|
||||
import com.chwl.core.manager.AvRoomDataManager
|
||||
import com.chwl.core.room.bean.RoomInfo
|
||||
import com.chwl.core.super_admin.util.SuperAdminUtil
|
||||
import com.chwl.library.utils.ResUtil
|
||||
import com.chwl.library.utils.SingleToastUtil
|
||||
import com.example.lib_utils.ktx.singleClick
|
||||
import com.netease.nim.uikit.StatusBarUtil
|
||||
|
||||
class RoomTypeSwitchActivity : BaseViewBindingActivity<RoomTypeSwitchActivityBinding>() {
|
||||
|
||||
private var currentType: Int? = null
|
||||
|
||||
private var selectType: Int? = null
|
||||
|
||||
companion object {
|
||||
fun isCanSwitch(): Boolean {
|
||||
if (SuperAdminUtil.isSuperAdmin()) {
|
||||
return false
|
||||
}
|
||||
if (AvRoomDataManager.get().roomType != RoomInfo.ROOMTYPE_HOME_PARTY && AvRoomDataManager.get().roomType != RoomInfo.ROOMTYPE_PARTY && AvRoomDataManager.get().roomType != RoomInfo.ROOMTYPE_REVELRY) {
|
||||
return false
|
||||
}
|
||||
if (AvRoomDataManager.get().isDatingMode) {
|
||||
return false
|
||||
}
|
||||
val roomInfo = AvRoomDataManager.get().mCurrentRoomInfo
|
||||
if (roomInfo == null || roomInfo.isPermitRoom == 1) {
|
||||
return false
|
||||
}
|
||||
return AvRoomDataManager.get().isManager
|
||||
}
|
||||
|
||||
fun start(context: Context) {
|
||||
context.startActivity(Intent(context, RoomTypeSwitchActivity::class.java))
|
||||
}
|
||||
}
|
||||
|
||||
override fun init() {
|
||||
initWhiteTitleBar(ResUtil.getString(R.string.room_type))
|
||||
initEvent()
|
||||
this.currentType = AvRoomDataManager.get().mCurrentRoomInfo?.type
|
||||
updateSelectView(currentType)
|
||||
}
|
||||
|
||||
private fun initEvent() {
|
||||
binding.tvSubmit.singleClick {
|
||||
selectType?.let {
|
||||
if (currentType != it) {
|
||||
trySwitchRoomType(it)
|
||||
}
|
||||
}
|
||||
}
|
||||
addTypeSelectClick(binding.iv9, RoomInfo.ROOMTYPE_HOME_PARTY)
|
||||
addTypeSelectClick(binding.iv10, RoomInfo.ROOMTYPE_PARTY)
|
||||
addTypeSelectClick(binding.iv15, RoomInfo.ROOMTYPE_REVELRY)
|
||||
}
|
||||
|
||||
private fun addTypeSelectClick(view: View, type: Int) {
|
||||
view.setOnClickListener {
|
||||
updateSelectView(type)
|
||||
}
|
||||
}
|
||||
|
||||
private fun updateSelectView(type: Int?) {
|
||||
this.selectType = type
|
||||
val views = mapOf(
|
||||
RoomInfo.ROOMTYPE_HOME_PARTY to binding.iv9Border,
|
||||
RoomInfo.ROOMTYPE_PARTY to binding.iv10Border,
|
||||
RoomInfo.ROOMTYPE_REVELRY to binding.iv15Border
|
||||
)
|
||||
val displayRes = mapOf(
|
||||
RoomInfo.ROOMTYPE_HOME_PARTY to R.drawable.room_type_bg_9,
|
||||
RoomInfo.ROOMTYPE_PARTY to R.drawable.room_type_bg_10,
|
||||
RoomInfo.ROOMTYPE_REVELRY to R.drawable.room_type_bg_15
|
||||
)
|
||||
views.forEach {
|
||||
it.value.isVisible = it.key == type
|
||||
}
|
||||
val resId = displayRes.get(type)
|
||||
if (resId != null) {
|
||||
binding.ivSelected.setImageResource(resId)
|
||||
} else {
|
||||
binding.ivSelected.setImageDrawable(null)
|
||||
}
|
||||
if (type == currentType) {
|
||||
binding.tvSubmit.setText(R.string.room_type_using)
|
||||
} else {
|
||||
binding.tvSubmit.setText(R.string.room_type_use)
|
||||
}
|
||||
}
|
||||
|
||||
private fun trySwitchRoomType(type: Int) {
|
||||
val currentType = this.currentType
|
||||
if (currentType != null && currentType > type) {
|
||||
dialogManager.showOkCancelDialog(
|
||||
ResUtil.getString(R.string.switch_room_type_tips),
|
||||
ResUtil.getString(R.string.login_fragment_adduserinfofragment_04)
|
||||
) {
|
||||
requestSwitchRoomType(type)
|
||||
}
|
||||
} else {
|
||||
requestSwitchRoomType(type)
|
||||
}
|
||||
}
|
||||
|
||||
@SuppressLint("CheckResult")
|
||||
private fun requestSwitchRoomType(type: Int) {
|
||||
dialogManager.showProgressDialog(context)
|
||||
OpenRoomHelper.updateRoomInfoRx(
|
||||
AvRoomDataManager.get().mCurrentRoomInfo,
|
||||
type,
|
||||
0
|
||||
).compose(bindToLifecycle()).subscribe({
|
||||
dialogManager.dismissDialog()
|
||||
finish()
|
||||
}, {
|
||||
SingleToastUtil.showToast(it.message)
|
||||
dialogManager.dismissDialog()
|
||||
})
|
||||
}
|
||||
|
||||
override fun needSteepStateBar(): Boolean {
|
||||
return true
|
||||
}
|
||||
|
||||
override fun setStatusBar() {
|
||||
super.setStatusBar()
|
||||
StatusBarUtil.transparencyBar(this)
|
||||
StatusBarUtil.StatusBarLightMode(this)
|
||||
}
|
||||
}
|
@@ -15,8 +15,12 @@ import androidx.annotation.Nullable;
|
||||
import androidx.lifecycle.Observer;
|
||||
import androidx.recyclerview.widget.RecyclerView;
|
||||
|
||||
import com.chwl.app.avroom.activity.AVRoomActivity;
|
||||
import com.chwl.app.utils.AvatarHelper;
|
||||
import com.chwl.library.widget.SVGAView;
|
||||
import com.chwl.core.utils.extension.StringExtensionKt;
|
||||
import com.coorchice.library.SuperTextView;
|
||||
import com.example.lib_utils.StringUtils2;
|
||||
import com.netease.nim.uikit.common.util.string.StringUtil;
|
||||
import com.opensource.svgaplayer.SVGAImageView;
|
||||
import com.chwl.app.R;
|
||||
@@ -55,6 +59,9 @@ public abstract class BaseMicroViewAdapter extends RecyclerView.Adapter<Recycler
|
||||
public static final String MICRO_TYPE_DATING = "dating";
|
||||
public static final String MICRO_TYPE_DATING_VIP = "dating_vip";
|
||||
public static final String MICRO_TYPE_SINGLE = "single";
|
||||
public static final String MICRO_TYPE_PARTY = "party";
|
||||
public static final String MICRO_TYPE_REVELRY = "revelry";
|
||||
|
||||
protected static final int TYPE_KING = 2;
|
||||
protected static final int TYPE_BOSS = 1;
|
||||
protected static final int TYPE_NORMAL = 0;
|
||||
@@ -76,11 +83,16 @@ public abstract class BaseMicroViewAdapter extends RecyclerView.Adapter<Recycler
|
||||
RoomQueueInfo roomQueueInfo = AvRoomDataManager.get().getRoomQueueMemberInfoByMicPosition(position - 1);
|
||||
if (roomQueueInfo == null) return;
|
||||
NormalMicroViewHolder holder = (NormalMicroViewHolder) viewHolder;
|
||||
holder.micPositionNameOffset = getMicPositionNameOffset();
|
||||
holder.bind(roomQueueInfo, position - 1);
|
||||
}
|
||||
|
||||
public abstract String microType();
|
||||
|
||||
protected int getMicPositionNameOffset() {
|
||||
return 2;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getItemCount() {
|
||||
return 9;
|
||||
@@ -137,7 +149,7 @@ public abstract class BaseMicroViewAdapter extends RecyclerView.Adapter<Recycler
|
||||
SVGAImageView ivHalo;
|
||||
|
||||
@Nullable
|
||||
ImageView ivHeadWear;
|
||||
SVGAView ivHeadWear;
|
||||
@Nullable
|
||||
ImageView ivCharmLevelTag;
|
||||
|
||||
@@ -146,6 +158,7 @@ public abstract class BaseMicroViewAdapter extends RecyclerView.Adapter<Recycler
|
||||
|
||||
RoomQueueInfo info;
|
||||
int position = TYPE_INVALID;
|
||||
int micPositionNameOffset = 2;
|
||||
|
||||
NormalMicroViewHolder(View itemView) {
|
||||
super(itemView);
|
||||
@@ -162,6 +175,9 @@ public abstract class BaseMicroViewAdapter extends RecyclerView.Adapter<Recycler
|
||||
ivUpImage.setOnClickListener(this);
|
||||
ivLockImage.setOnClickListener(this);
|
||||
ivAvatar.setOnClickListener(this);
|
||||
if (ivHeadWear != null) {
|
||||
ivHeadWear.bindCache(AVRoomActivity.getSvgaCache());
|
||||
}
|
||||
}
|
||||
|
||||
public void clear() {
|
||||
@@ -267,6 +283,7 @@ public abstract class BaseMicroViewAdapter extends RecyclerView.Adapter<Recycler
|
||||
private void clearHeadWear() {
|
||||
if (ivHeadWear == null) return;
|
||||
ivHeadWear.clearAnimation();
|
||||
ivHeadWear.stopAnimation();
|
||||
ivHeadWear.setImageDrawable(null);
|
||||
ivHeadWear.setTag(R.id.mic_item_head_wear, null);
|
||||
ivHeadWear.setVisibility(View.GONE);
|
||||
@@ -274,7 +291,11 @@ public abstract class BaseMicroViewAdapter extends RecyclerView.Adapter<Recycler
|
||||
|
||||
protected void setDefalutText(int index) {
|
||||
tvNick.setTextColor(Color.WHITE);
|
||||
tvNick.setText("NO."+ (index + 1));
|
||||
tvNick.setText(getMicPositionName(index));
|
||||
}
|
||||
|
||||
protected String getMicPositionName(int index) {
|
||||
return "NO." + (index + micPositionNameOffset);
|
||||
}
|
||||
|
||||
protected void setSelectText(int index, String nick, int gender) {
|
||||
@@ -286,10 +307,13 @@ public abstract class BaseMicroViewAdapter extends RecyclerView.Adapter<Recycler
|
||||
private void updateNobleView(MicMemberInfo chatRoomMember) {
|
||||
if (ivHeadWear == null) return;
|
||||
String headWear = chatRoomMember.getHeadWearUrl();
|
||||
int headWearType = chatRoomMember.getHeadWearType();
|
||||
if (TextUtils.isEmpty(headWear)) {
|
||||
headWear = NobleUtil.getHeadResource(HeadWearInfo.EFFECT, chatRoomMember) != null ?
|
||||
NobleUtil.getHeadResource(HeadWearInfo.EFFECT, chatRoomMember) :
|
||||
NobleUtil.getHeadResource(HeadWearInfo.PIC, chatRoomMember);
|
||||
String type = NobleUtil.getHeadResource(HeadWearInfo.TYPE, chatRoomMember);
|
||||
headWearType = StringUtils2.INSTANCE.toInt(type);
|
||||
}
|
||||
String nobleHeadWear = (String) NobleUtil.getResource(NobleResourceType.KEY_HEAD_WEAR, chatRoomMember);
|
||||
if (!TextUtils.isEmpty(headWear)) {
|
||||
@@ -297,7 +321,7 @@ public abstract class BaseMicroViewAdapter extends RecyclerView.Adapter<Recycler
|
||||
//只有头饰发生改变才更新,防止闪烁
|
||||
if (!headWear.equals(ivHeadWear.getTag(R.id.mic_item_head_wear))) {
|
||||
ivHeadWear.setTag(R.id.mic_item_head_wear, headWear);
|
||||
NobleUtil.loadMicHeadWear(headWear, ivHeadWear, R.id.mic_item_head_wear, headWear);
|
||||
AvatarHelper.loadAvatarFrame(ivHeadWear, headWear, headWearType);
|
||||
}
|
||||
} else if (!TextUtils.isEmpty(nobleHeadWear)) {
|
||||
// 头饰
|
||||
@@ -478,10 +502,10 @@ public abstract class BaseMicroViewAdapter extends RecyclerView.Adapter<Recycler
|
||||
//控制最高最低头饰
|
||||
Observer<Integer> headWearObserver = headWearValue -> {
|
||||
if (ivCharmLevelTag == null) return;
|
||||
ivCharmLevelTag.setVisibility(View.GONE);
|
||||
if (headWearValue == 1) {
|
||||
ivCharmLevelTag.setVisibility(View.VISIBLE);
|
||||
ivCharmLevelTag.setImageDrawable(context.getResources().getDrawable(R.drawable.ic_charm_level_min));
|
||||
ivCharmLevelTag.setVisibility(View.GONE);
|
||||
// ivCharmLevelTag.setVisibility(View.VISIBLE);
|
||||
// ivCharmLevelTag.setImageDrawable(context.getResources().getDrawable(R.drawable.ic_charm_level_min));
|
||||
} else if (headWearValue == 2) {
|
||||
ivCharmLevelTag.setVisibility(View.VISIBLE);
|
||||
ivCharmLevelTag.setImageDrawable(context.getResources().getDrawable(R.drawable.ic_charm_level_max));
|
||||
|
@@ -27,6 +27,11 @@ public class CpMicroViewAdapter extends BaseMicroViewAdapter {
|
||||
return BaseMicroViewAdapter.MICRO_TYPE_CP;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected int getMicPositionNameOffset() {
|
||||
return 1;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void bindToRecyclerView(RecyclerView recyclerView) {
|
||||
GridLayoutManager layoutManager = new GridLayoutManager(context, 3);
|
||||
|
@@ -27,6 +27,9 @@ import com.chwl.library.utils.ResUtil
|
||||
* @date 2017/12/18
|
||||
*/
|
||||
class DatingMicroViewAdapter(context: Context?) : BaseMicroViewAdapter(context) {
|
||||
override fun getMicPositionNameOffset(): Int {
|
||||
return 1
|
||||
}
|
||||
|
||||
/**
|
||||
* Set LayoutManager and bind this to RecyclerView
|
||||
|
@@ -2,7 +2,6 @@ package com.chwl.app.avroom.adapter;
|
||||
|
||||
import android.annotation.SuppressLint;
|
||||
import android.content.Context;
|
||||
import android.graphics.Color;
|
||||
import android.view.LayoutInflater;
|
||||
import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
@@ -13,8 +12,6 @@ import androidx.recyclerview.widget.RecyclerView;
|
||||
|
||||
import com.chwl.app.R;
|
||||
import com.chwl.core.bean.RoomQueueInfo;
|
||||
import com.chwl.core.manager.AvRoomDataManager;
|
||||
import com.chwl.library.utils.ResUtil;
|
||||
|
||||
/**
|
||||
* @author xiaoyu
|
||||
@@ -27,6 +24,11 @@ public class MicroViewAdapter extends BaseMicroViewAdapter {
|
||||
super(context);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected int getMicPositionNameOffset() {
|
||||
return 1;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set LayoutManager and bind this to RecyclerView
|
||||
*/
|
||||
@@ -62,15 +64,6 @@ public class MicroViewAdapter extends BaseMicroViewAdapter {
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onBindViewHolder(RecyclerView.ViewHolder viewHolder, final int position) {
|
||||
RoomQueueInfo roomQueueInfo = AvRoomDataManager.get().getRoomQueueMemberInfoByMicPosition(position - 1);
|
||||
if (roomQueueInfo == null) {
|
||||
return;
|
||||
}
|
||||
NormalMicroViewHolder holder = (NormalMicroViewHolder) viewHolder;
|
||||
holder.bind(roomQueueInfo, position - 1);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String microType() {
|
||||
|
@@ -0,0 +1,79 @@
|
||||
package com.chwl.app.avroom.adapter;
|
||||
|
||||
import android.annotation.SuppressLint;
|
||||
import android.content.Context;
|
||||
import android.view.LayoutInflater;
|
||||
import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
|
||||
import androidx.recyclerview.widget.GridLayoutManager;
|
||||
import androidx.recyclerview.widget.LinearLayoutManager;
|
||||
import androidx.recyclerview.widget.RecyclerView;
|
||||
|
||||
import com.chwl.app.R;
|
||||
import com.chwl.core.bean.RoomQueueInfo;
|
||||
import com.chwl.core.manager.AvRoomDataManager;
|
||||
|
||||
/**
|
||||
* @author xiaoyu
|
||||
* @date 2017/12/18
|
||||
*/
|
||||
|
||||
public class PartyMicroViewAdapter extends BaseMicroViewAdapter {
|
||||
|
||||
public PartyMicroViewAdapter(Context context) {
|
||||
super(context);
|
||||
}
|
||||
|
||||
/**
|
||||
* Set LayoutManager and bind this to RecyclerView
|
||||
*/
|
||||
@Override
|
||||
public void bindToRecyclerView(RecyclerView recyclerView) {
|
||||
GridLayoutManager layoutManager = new GridLayoutManager(context, 5);
|
||||
layoutManager.setOrientation(LinearLayoutManager.VERTICAL);
|
||||
recyclerView.setLayoutManager(layoutManager);
|
||||
recyclerView.setAdapter(this);
|
||||
}
|
||||
|
||||
@Override
|
||||
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
|
||||
View item;
|
||||
item = LayoutInflater.from(parent.getContext()).
|
||||
inflate(R.layout.list_item_micro, parent, false);
|
||||
return new MicroViewHolder(item);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String microType() {
|
||||
return BaseMicroViewAdapter.MICRO_TYPE_PARTY;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getItemViewType(int position) {
|
||||
return TYPE_NORMAL;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getItemCount() {
|
||||
return 10;
|
||||
}
|
||||
|
||||
class MicroViewHolder extends GiftValueViewHolder {
|
||||
MicroViewHolder(View itemView) {
|
||||
super(itemView);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void bind(RoomQueueInfo info, int position) {
|
||||
super.bind(info, position);
|
||||
ivUpImage.setImageResource(R.drawable.icon_room_up_micro);
|
||||
}
|
||||
|
||||
@SuppressLint("SetTextI18n")
|
||||
@Override
|
||||
public void setDefalutText(int index) {
|
||||
super.setDefalutText(index);
|
||||
}
|
||||
}
|
||||
}
|
@@ -0,0 +1,79 @@
|
||||
package com.chwl.app.avroom.adapter;
|
||||
|
||||
import android.annotation.SuppressLint;
|
||||
import android.content.Context;
|
||||
import android.view.LayoutInflater;
|
||||
import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
|
||||
import androidx.recyclerview.widget.GridLayoutManager;
|
||||
import androidx.recyclerview.widget.LinearLayoutManager;
|
||||
import androidx.recyclerview.widget.RecyclerView;
|
||||
|
||||
import com.chwl.app.R;
|
||||
import com.chwl.core.bean.RoomQueueInfo;
|
||||
import com.chwl.core.manager.AvRoomDataManager;
|
||||
|
||||
/**
|
||||
* @author xiaoyu
|
||||
* @date 2017/12/18
|
||||
*/
|
||||
|
||||
public class RevelryMicroViewAdapter extends BaseMicroViewAdapter {
|
||||
|
||||
public RevelryMicroViewAdapter(Context context) {
|
||||
super(context);
|
||||
}
|
||||
|
||||
/**
|
||||
* Set LayoutManager and bind this to RecyclerView
|
||||
*/
|
||||
@Override
|
||||
public void bindToRecyclerView(RecyclerView recyclerView) {
|
||||
GridLayoutManager layoutManager = new GridLayoutManager(context, 5);
|
||||
layoutManager.setOrientation(LinearLayoutManager.VERTICAL);
|
||||
recyclerView.setLayoutManager(layoutManager);
|
||||
recyclerView.setAdapter(this);
|
||||
}
|
||||
|
||||
@Override
|
||||
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
|
||||
View item;
|
||||
item = LayoutInflater.from(parent.getContext()).
|
||||
inflate(R.layout.list_item_micro, parent, false);
|
||||
return new MicroViewHolder(item);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String microType() {
|
||||
return BaseMicroViewAdapter.MICRO_TYPE_REVELRY;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getItemViewType(int position) {
|
||||
return TYPE_NORMAL;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getItemCount() {
|
||||
return 15;
|
||||
}
|
||||
|
||||
class MicroViewHolder extends GiftValueViewHolder {
|
||||
MicroViewHolder(View itemView) {
|
||||
super(itemView);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void bind(RoomQueueInfo info, int position) {
|
||||
super.bind(info, position);
|
||||
ivUpImage.setImageResource(R.drawable.icon_room_up_micro);
|
||||
}
|
||||
|
||||
@SuppressLint("SetTextI18n")
|
||||
@Override
|
||||
public void setDefalutText(int index) {
|
||||
super.setDefalutText(index);
|
||||
}
|
||||
}
|
||||
}
|
@@ -4,13 +4,13 @@ import android.annotation.SuppressLint
|
||||
import android.os.Bundle
|
||||
import android.view.WindowManager
|
||||
import com.chwl.app.R
|
||||
import com.chwl.app.base.BaseDialog
|
||||
import com.chwl.app.base.BaseDialogFragment
|
||||
import com.chwl.app.databinding.DialogRoomPkFinishBinding
|
||||
import com.chwl.app.ui.utils.ImageLoadUtils
|
||||
import com.chwl.core.im.custom.bean.RoomPkBean
|
||||
import com.chwl.core.utils.extension.subAndReplaceDot
|
||||
|
||||
class RoomPkFinishDialog : BaseDialog<DialogRoomPkFinishBinding>() {
|
||||
class RoomPkFinishDialog : BaseDialogFragment<DialogRoomPkFinishBinding>() {
|
||||
|
||||
companion object {
|
||||
@JvmStatic
|
||||
|
@@ -4,13 +4,13 @@ import android.annotation.SuppressLint
|
||||
import android.os.Bundle
|
||||
import android.view.WindowManager
|
||||
import com.chwl.app.R
|
||||
import com.chwl.app.base.BaseDialog
|
||||
import com.chwl.app.base.BaseDialogFragment
|
||||
import com.chwl.app.databinding.DialogRoomPkForceFinishBinding
|
||||
import com.chwl.app.ui.utils.ImageLoadUtils
|
||||
import com.chwl.core.im.custom.bean.RoomPkBean
|
||||
import com.chwl.core.utils.extension.subAndReplaceDot
|
||||
|
||||
class RoomPkForceFinishDialog : BaseDialog<DialogRoomPkForceFinishBinding>() {
|
||||
class RoomPkForceFinishDialog : BaseDialogFragment<DialogRoomPkForceFinishBinding>() {
|
||||
|
||||
companion object {
|
||||
@JvmStatic
|
||||
|
@@ -4,7 +4,7 @@ import android.annotation.SuppressLint
|
||||
import android.os.Bundle
|
||||
import androidx.core.view.isVisible
|
||||
import com.chwl.app.R
|
||||
import com.chwl.app.base.BaseDialog
|
||||
import com.chwl.app.base.BaseDialogFragment
|
||||
import com.chwl.app.databinding.DialogRoomPkReceivedBinding
|
||||
import com.chwl.core.im.custom.bean.RoomPkBean
|
||||
import com.chwl.core.manager.AvRoomDataManager
|
||||
@@ -16,7 +16,7 @@ import io.reactivex.android.schedulers.AndroidSchedulers
|
||||
import io.reactivex.disposables.Disposable
|
||||
import java.util.concurrent.TimeUnit
|
||||
|
||||
class RoomPkReceivedDialog : BaseDialog<DialogRoomPkReceivedBinding>() {
|
||||
class RoomPkReceivedDialog : BaseDialogFragment<DialogRoomPkReceivedBinding>() {
|
||||
|
||||
companion object {
|
||||
|
||||
|
@@ -1,9 +1,9 @@
|
||||
package com.chwl.app.avroom.anotherroompk
|
||||
|
||||
import com.chwl.app.base.BaseDialog
|
||||
import com.chwl.app.base.BaseDialogFragment
|
||||
import com.chwl.app.databinding.DialogRoomPkRuleBinding
|
||||
|
||||
class RoomPkRuleDialog : BaseDialog<DialogRoomPkRuleBinding>() {
|
||||
class RoomPkRuleDialog : BaseDialogFragment<DialogRoomPkRuleBinding>() {
|
||||
|
||||
companion object {
|
||||
|
||||
|
@@ -6,7 +6,7 @@ import android.view.WindowManager
|
||||
import androidx.recyclerview.widget.GridLayoutManager
|
||||
import com.chwl.app.avroom.adapter.CreateRoomGameGuideAdapter
|
||||
import com.chwl.app.base.BaseActivity
|
||||
import com.chwl.app.base.BaseDialog
|
||||
import com.chwl.app.base.BaseDialogFragment
|
||||
import com.chwl.app.databinding.DialogCreateGameRoomBinding
|
||||
import com.chwl.app.home.helper.OpenRoomHelper
|
||||
import com.chwl.app.ui.utils.RVDelegate
|
||||
@@ -14,7 +14,7 @@ import com.chwl.core.room.bean.RoomInfo
|
||||
import com.chwl.core.room.game.bean.GameInfo
|
||||
import com.chwl.core.room.game.GameModel
|
||||
|
||||
class CreateGameRoomDialog : BaseDialog<DialogCreateGameRoomBinding>() {
|
||||
class CreateGameRoomDialog : BaseDialogFragment<DialogCreateGameRoomBinding>() {
|
||||
|
||||
private lateinit var rvDelegate: RVDelegate<GameInfo>
|
||||
private val gameAdapter = CreateRoomGameGuideAdapter()
|
||||
|
@@ -9,7 +9,7 @@ import androidx.recyclerview.widget.LinearLayoutManager
|
||||
import com.chwl.app.R
|
||||
import com.chwl.app.avroom.adapter.CreateRoomGameAdapter
|
||||
import com.chwl.app.base.BaseActivity
|
||||
import com.chwl.app.base.BaseDialog
|
||||
import com.chwl.app.base.BaseDialogFragment
|
||||
import com.chwl.app.databinding.DialogCreateRoomBinding
|
||||
import com.chwl.app.home.helper.OpenRoomHelper
|
||||
import com.chwl.app.ui.utils.RVDelegate
|
||||
@@ -19,7 +19,7 @@ import com.chwl.core.room.game.GameModel
|
||||
import com.chwl.core.utils.extension.toast
|
||||
import com.chwl.library.utils.ResUtil
|
||||
|
||||
class CreateRoomDialog : BaseDialog<DialogCreateRoomBinding>() {
|
||||
class CreateRoomDialog : BaseDialogFragment<DialogCreateRoomBinding>() {
|
||||
|
||||
private lateinit var rvDelegate: RVDelegate<GameInfo>
|
||||
private val gameAdapter = CreateRoomGameAdapter()
|
||||
|
@@ -1,12 +1,12 @@
|
||||
package com.chwl.app.avroom.dialog
|
||||
|
||||
import com.chwl.app.base.BaseDialog
|
||||
import com.chwl.app.base.BaseDialogFragment
|
||||
import com.chwl.app.databinding.DialogNewUserGiftBinding
|
||||
import com.chwl.app.ui.utils.load
|
||||
import com.chwl.core.gift.bean.GiftInfo
|
||||
|
||||
class NewUserGiftDialog(val giftInfo: GiftInfo) :
|
||||
BaseDialog<DialogNewUserGiftBinding>() {
|
||||
BaseDialogFragment<DialogNewUserGiftBinding>() {
|
||||
|
||||
override fun init() {
|
||||
binding?.ivClose?.setOnClickListener {
|
||||
|
@@ -95,7 +95,10 @@ public class PKSelectPeopleDialog extends BaseDialog implements View.OnClickList
|
||||
keys[i] = micQueue.keyAt(i);
|
||||
}
|
||||
Arrays.sort(keys);
|
||||
for (int i = 0; i < keys.length; i++) {
|
||||
for (int i = 0; i < micEntityList.size(); i++) {
|
||||
if (i >= micQueue.size()) {
|
||||
continue;
|
||||
}
|
||||
RoomQueueInfo roomQueueInfo = micQueue.get(keys[i]);
|
||||
MicMemberInfo chatRoomMember = roomQueueInfo.mChatRoomMember;
|
||||
if (chatRoomMember != null) {
|
||||
|
@@ -25,6 +25,7 @@ import com.chwl.core.auth.AuthModel
|
||||
import com.chwl.core.manager.AvRoomDataManager
|
||||
import com.chwl.core.room.anotherroompk.SingleRoomPKModel
|
||||
import com.chwl.core.room.bean.RoomIcon
|
||||
import com.chwl.core.room.bean.RoomInfo
|
||||
import com.chwl.core.room.core.RoomDataService
|
||||
import com.chwl.core.room.game.bean.BaiShunGameConfig
|
||||
import com.chwl.core.room.model.AvRoomModel
|
||||
@@ -261,10 +262,7 @@ class RoomGameplayDialog :
|
||||
if (SuperAdminUtil.isSuperAdmin()) {
|
||||
return null
|
||||
}
|
||||
if (AvRoomDataManager.get().isOpenGame) {
|
||||
return null
|
||||
}
|
||||
if (AvRoomDataManager.get().isSingleRoom) {
|
||||
if (AvRoomDataManager.get().roomType != RoomInfo.ROOMTYPE_HOME_PARTY && AvRoomDataManager.get().roomType != RoomInfo.ROOMTYPE_PARTY && AvRoomDataManager.get().roomType != RoomInfo.ROOMTYPE_REVELRY) {
|
||||
return null
|
||||
}
|
||||
val roomInfo = AvRoomDataManager.get().mCurrentRoomInfo
|
||||
@@ -299,10 +297,7 @@ class RoomGameplayDialog :
|
||||
if (SuperAdminUtil.isSuperAdmin()) {
|
||||
return null
|
||||
}
|
||||
if (AvRoomDataManager.get().isOpenGame) {
|
||||
return null
|
||||
}
|
||||
if (AvRoomDataManager.get().isSingleRoom) {
|
||||
if (AvRoomDataManager.get().roomType != RoomInfo.ROOMTYPE_HOME_PARTY && AvRoomDataManager.get().roomType != RoomInfo.ROOMTYPE_PARTY && AvRoomDataManager.get().roomType != RoomInfo.ROOMTYPE_REVELRY) {
|
||||
return null
|
||||
}
|
||||
val roomInfo = AvRoomDataManager.get().mCurrentRoomInfo
|
||||
|
@@ -14,6 +14,7 @@ import androidx.recyclerview.widget.RecyclerView;
|
||||
|
||||
import com.chad.library.adapter.base.BaseQuickAdapter;
|
||||
import com.chad.library.adapter.base.BaseViewHolder;
|
||||
import com.chwl.app.avroom.activity.RoomTypeSwitchActivity;
|
||||
import com.coorchice.library.utils.LogUtils;
|
||||
import com.google.android.material.bottomsheet.BottomSheetDialog;
|
||||
import com.hjq.toast.ToastUtils;
|
||||
@@ -131,6 +132,7 @@ public class RoomOperationDialog extends BottomSheetDialog {
|
||||
// addGiftValueAction(optAdapter);
|
||||
addSuperAdminAction(optAdapter);
|
||||
addShieldReportAction(optAdapter);
|
||||
addRoomTypeSwitchAction(optAdapter);
|
||||
rvOPtList.setAdapter(optAdapter);
|
||||
}
|
||||
|
||||
@@ -286,10 +288,7 @@ public class RoomOperationDialog extends BottomSheetDialog {
|
||||
if (SuperAdminUtil.isSuperAdmin()) {
|
||||
return;
|
||||
}
|
||||
if (AvRoomDataManager.get().isOpenGame()) {
|
||||
return;
|
||||
}
|
||||
if (AvRoomDataManager.get().isSingleRoom()) {
|
||||
if (AvRoomDataManager.get().getRoomType() != RoomInfo.ROOMTYPE_HOME_PARTY) {
|
||||
return;
|
||||
}
|
||||
if (AvRoomDataManager.get().isManager() && !AvRoomDataManager.get().isCpRoom()) {
|
||||
@@ -556,6 +555,18 @@ public class RoomOperationDialog extends BottomSheetDialog {
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 房间类型切换
|
||||
*
|
||||
* @param optAdapter
|
||||
*/
|
||||
private void addRoomTypeSwitchAction(OptAdapter optAdapter) {
|
||||
if (RoomTypeSwitchActivity.Companion.isCanSwitch()) {
|
||||
optAdapter.addData(new OptAction(R.drawable.icon_room_type_switch,
|
||||
getContext().getResources().getString(R.string.room_type), () -> RoomTypeSwitchActivity.Companion.start(getContext())));
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 超管管理
|
||||
*/
|
||||
|
@@ -5,7 +5,7 @@ import android.view.WindowManager
|
||||
import androidx.constraintlayout.widget.ConstraintLayout
|
||||
import androidx.core.view.isVisible
|
||||
import com.chwl.app.R
|
||||
import com.chwl.app.base.BaseDialog
|
||||
import com.chwl.app.base.BaseDialogFragment
|
||||
import com.chwl.app.databinding.RoomTeamPkDialogBinding
|
||||
import com.chwl.app.ui.utils.loadAvatar
|
||||
import com.chwl.app.ui.widget.dialog.CommonTipDialog
|
||||
@@ -28,7 +28,7 @@ import org.greenrobot.eventbus.Subscribe
|
||||
import org.greenrobot.eventbus.ThreadMode
|
||||
import java.util.Locale
|
||||
|
||||
class RoomTeamPkDialog : BaseDialog<RoomTeamPkDialogBinding>() {
|
||||
class RoomTeamPkDialog : BaseDialogFragment<RoomTeamPkDialogBinding>() {
|
||||
|
||||
private var compositeDisposable: CompositeDisposable? = null
|
||||
|
||||
|
@@ -9,7 +9,7 @@ import android.view.WindowManager
|
||||
import androidx.recyclerview.widget.LinearLayoutManager
|
||||
import com.chwl.app.avroom.adapter.SendBroadcastAdapter
|
||||
import com.chwl.app.base.BaseActivity
|
||||
import com.chwl.app.base.BaseDialog
|
||||
import com.chwl.app.base.BaseDialogFragment
|
||||
import com.chwl.app.databinding.DialogSendBroadcastBinding
|
||||
import com.chwl.app.ui.utils.RVDelegate
|
||||
import com.chwl.app.utils.SpannableBuilder
|
||||
@@ -24,7 +24,7 @@ import io.reactivex.android.schedulers.AndroidSchedulers
|
||||
import io.reactivex.disposables.Disposable
|
||||
import java.util.concurrent.TimeUnit
|
||||
|
||||
class SendBroadcastDialog : BaseDialog<DialogSendBroadcastBinding>() {
|
||||
class SendBroadcastDialog : BaseDialogFragment<DialogSendBroadcastBinding>() {
|
||||
|
||||
private lateinit var rvDelegate: RVDelegate<String>
|
||||
private lateinit var adapter: SendBroadcastAdapter
|
||||
|
@@ -2,11 +2,11 @@ package com.chwl.app.avroom.dialog
|
||||
|
||||
import android.annotation.SuppressLint
|
||||
import android.view.WindowManager
|
||||
import com.chwl.app.base.BaseDialog
|
||||
import com.chwl.app.base.BaseDialogFragment
|
||||
import com.chwl.app.databinding.DialogSingleRoomTipBinding
|
||||
|
||||
class SingleRoomTipDialog :
|
||||
BaseDialog<DialogSingleRoomTipBinding>() {
|
||||
BaseDialogFragment<DialogSingleRoomTipBinding>() {
|
||||
@SuppressLint("ClickableViewAccessibility")
|
||||
override fun init() {
|
||||
binding?.root?.setOnClickListener {
|
||||
|
@@ -650,6 +650,7 @@ open class BaseRoomFragment<V : IBaseRoomView?, P1 : BaseRoomPresenter<V>?> :
|
||||
open fun updateView() {
|
||||
// 更新底欄
|
||||
showBottomViewForDifRole()
|
||||
bottomView.notifyStateChanged()
|
||||
}
|
||||
|
||||
/**
|
||||
|
@@ -116,10 +116,14 @@ class GameRoomFragment : BaseRoomFragment<IGameRoomView?, GameRoomPresenter?>(),
|
||||
dialogManager.showOkCancelDialog(
|
||||
getString(R.string.room_switch_standard_room_tips)
|
||||
) {
|
||||
var type = AvRoomDataManager.get().mCurrentRoomInfo?.oldType
|
||||
if (type == null || type <= 0) {
|
||||
type = RoomInfo.ROOMTYPE_HOME_PARTY
|
||||
}
|
||||
OpenRoomHelper.updateRoomInfo(
|
||||
baseActivity,
|
||||
AvRoomDataManager.get().mCurrentRoomInfo,
|
||||
RoomInfo.ROOMTYPE_HOME_PARTY,
|
||||
type,
|
||||
0,
|
||||
false
|
||||
)
|
||||
|
@@ -15,8 +15,10 @@ import android.widget.TextView;
|
||||
|
||||
import androidx.annotation.Nullable;
|
||||
import androidx.databinding.DataBindingUtil;
|
||||
import androidx.fragment.app.DialogFragment;
|
||||
import androidx.fragment.app.Fragment;
|
||||
|
||||
import com.chwl.app.avroom.activity.RoomTitleEditActivity;
|
||||
import com.chwl.app.ui.utils.ImageLoadUtilsV2;
|
||||
import com.chwl.app.ui.widget.GiftDialog;
|
||||
import com.chwl.app.ui.widget.UserInfoDialog;
|
||||
@@ -117,7 +119,6 @@ public class HomePartyFragment extends BaseFragment implements View.OnClickListe
|
||||
if (roomFragment instanceof HomePartyRoomFragment) {
|
||||
((HomePartyRoomFragment) roomFragment).onNewIntent(intent);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -193,6 +194,7 @@ public class HomePartyFragment extends BaseFragment implements View.OnClickListe
|
||||
|
||||
@Override
|
||||
public void onSetListener() {
|
||||
gameMainBinding.ivRoomNotice.setOnClickListener(this);
|
||||
roomMore.setOnClickListener(this);
|
||||
ivFollowRoom.setOnClickListener(this);
|
||||
// ivRoomShare.setOnClickListener(this);
|
||||
@@ -359,8 +361,18 @@ public class HomePartyFragment extends BaseFragment implements View.OnClickListe
|
||||
tempFragment = SingleRoomFragment.newInstance();
|
||||
}
|
||||
break;
|
||||
case RoomInfo.ROOMTYPE_PARTY:
|
||||
if (!(tempFragment instanceof PartyRoomFragment)) {
|
||||
tempFragment = PartyRoomFragment.Companion.newInstance();
|
||||
}
|
||||
break;
|
||||
case RoomInfo.ROOMTYPE_REVELRY:
|
||||
if (!(tempFragment instanceof RevelryRoomFragment)) {
|
||||
tempFragment = RevelryRoomFragment.Companion.newInstance();
|
||||
}
|
||||
break;
|
||||
default:
|
||||
if (!(tempFragment instanceof HomePartyRoomFragment)) {
|
||||
if (tempFragment == null || !(tempFragment.getClass().getSimpleName().equals(HomePartyRoomFragment.class.getSimpleName()))) {
|
||||
tempFragment = HomePartyRoomFragment.newInstance();
|
||||
}
|
||||
break;
|
||||
@@ -390,6 +402,12 @@ public class HomePartyFragment extends BaseFragment implements View.OnClickListe
|
||||
ivFollowRoom.setImageResource(AvRoomDataManager.get().isRoomFans ? R.drawable.room_ic_collect_yes : R.drawable.room_ic_collect_no);
|
||||
|
||||
setIdOnlineData();
|
||||
|
||||
if (AvRoomDataManager.get().getRoomType() != RoomInfo.ROOMTYPE_GAME) {
|
||||
gameMainBinding.ivRoomNotice.setVisibility(View.VISIBLE);
|
||||
} else {
|
||||
gameMainBinding.ivRoomNotice.setVisibility(View.GONE);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -411,6 +429,9 @@ public class HomePartyFragment extends BaseFragment implements View.OnClickListe
|
||||
@Override
|
||||
public void onClick(View v) {
|
||||
switch (v.getId()) {
|
||||
case R.id.iv_room_notice:
|
||||
showRoomIntroduction(AvRoomDataManager.get().isRoomOwner() || AvRoomDataManager.get().isRoomAdmin());
|
||||
break;
|
||||
case R.id.room_more:
|
||||
int gravity = Gravity.END;
|
||||
if(UiUtils.INSTANCE.isRtl(requireContext())){
|
||||
@@ -572,4 +593,22 @@ public class HomePartyFragment extends BaseFragment implements View.OnClickListe
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
private void showRoomIntroduction(Boolean modify) {
|
||||
var isModify = modify;
|
||||
RoomInfo info = AvRoomDataManager.get().mCurrentRoomInfo;
|
||||
if (info == null) {
|
||||
return;
|
||||
}
|
||||
if (SuperAdminUtil.isSuperAdmin()) {
|
||||
isModify = false;
|
||||
}
|
||||
if (isModify) {
|
||||
RoomTitleEditActivity.startForResult(getActivity(), info.getRoomDesc(), info.getIntroduction());
|
||||
} else {
|
||||
DialogFragment dialogFragment =
|
||||
RoomTitleDialogFragment.getInstance(info.getRoomDesc(), info.getIntroduction());
|
||||
dialogFragment.show(requireActivity().getSupportFragmentManager(), "roomTitle");
|
||||
}
|
||||
}
|
||||
}
|
@@ -467,6 +467,17 @@ public class HomePartyRoomFragment extends BaseRoomFragment<IHomePartyView, Home
|
||||
gameBinding.ivQueuingMicro.setVisibility(View.GONE);
|
||||
gameBinding.bottomView.updateQueuingMicButton();
|
||||
}
|
||||
updateMicroView();
|
||||
changeModelShowView();
|
||||
refreshDatingNextStatus();
|
||||
if (AvRoomDataManager.get().isDatingMode()) {
|
||||
gameBinding.ivGame.setVisibility(View.GONE);
|
||||
} else {
|
||||
gameBinding.ivGame.setVisibility(View.VISIBLE);
|
||||
}
|
||||
}
|
||||
|
||||
protected void updateMicroView(){
|
||||
String microType = microView.getAdapter() == null ? BaseMicroViewAdapter.MICRO_TYPE_NULL : microView.getAdapter().microType();
|
||||
if (AvRoomDataManager.get().isCpRoom()) {
|
||||
if (!microType.equals(BaseMicroViewAdapter.MICRO_TYPE_CP)) {
|
||||
@@ -484,16 +495,8 @@ public class HomePartyRoomFragment extends BaseRoomFragment<IHomePartyView, Home
|
||||
if (microView.getAdapter() != null) {
|
||||
microView.getAdapter().notifyDataSetChanged();
|
||||
}
|
||||
changeModelShowView();
|
||||
refreshDatingNextStatus();
|
||||
if (AvRoomDataManager.get().isDatingMode()) {
|
||||
gameBinding.ivGame.setVisibility(View.GONE);
|
||||
} else {
|
||||
gameBinding.ivGame.setVisibility(View.VISIBLE);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
public void updateMicBtn() {
|
||||
super.updateMicBtn();
|
||||
refreshDatingNextStatus();
|
||||
|
@@ -0,0 +1,34 @@
|
||||
package com.chwl.app.avroom.fragment
|
||||
|
||||
import com.chwl.app.avroom.adapter.BaseMicroViewAdapter
|
||||
import com.chwl.app.avroom.adapter.PartyMicroViewAdapter
|
||||
import com.example.lib_utils.UiUtils
|
||||
import com.example.lib_utils.ktx.setMargin
|
||||
|
||||
/**
|
||||
* 聚会房
|
||||
*/
|
||||
class PartyRoomFragment : HomePartyRoomFragment() {
|
||||
|
||||
companion object {
|
||||
fun newInstance(): PartyRoomFragment {
|
||||
return PartyRoomFragment()
|
||||
}
|
||||
}
|
||||
|
||||
override fun onFindViews() {
|
||||
super.onFindViews()
|
||||
microView.setMargin(0,UiUtils.dip2px(30f),0,0)
|
||||
}
|
||||
|
||||
override fun updateMicroView() {
|
||||
val microType =
|
||||
if (microView.adapter == null) BaseMicroViewAdapter.MICRO_TYPE_NULL else microView.adapter.microType()
|
||||
if (microType != BaseMicroViewAdapter.MICRO_TYPE_PARTY) {
|
||||
microView.bindAdapter(PartyMicroViewAdapter(mContext))
|
||||
}
|
||||
if (microView.adapter != null) {
|
||||
microView.adapter.notifyDataSetChanged()
|
||||
}
|
||||
}
|
||||
}
|
@@ -0,0 +1,34 @@
|
||||
package com.chwl.app.avroom.fragment
|
||||
|
||||
import com.chwl.app.avroom.adapter.BaseMicroViewAdapter
|
||||
import com.chwl.app.avroom.adapter.RevelryMicroViewAdapter
|
||||
import com.example.lib_utils.UiUtils
|
||||
import com.example.lib_utils.ktx.setMargin
|
||||
|
||||
/**
|
||||
* 狂欢房
|
||||
*/
|
||||
class RevelryRoomFragment : HomePartyRoomFragment() {
|
||||
|
||||
companion object {
|
||||
fun newInstance(): RevelryRoomFragment {
|
||||
return RevelryRoomFragment()
|
||||
}
|
||||
}
|
||||
|
||||
override fun onFindViews() {
|
||||
super.onFindViews()
|
||||
microView.setMargin(0, UiUtils.dip2px(30f),0,0)
|
||||
}
|
||||
|
||||
override fun updateMicroView() {
|
||||
val microType =
|
||||
if (microView.adapter == null) BaseMicroViewAdapter.MICRO_TYPE_NULL else microView.adapter.microType()
|
||||
if (microType != BaseMicroViewAdapter.MICRO_TYPE_REVELRY) {
|
||||
microView.bindAdapter(RevelryMicroViewAdapter(mContext))
|
||||
}
|
||||
if (microView.adapter != null) {
|
||||
microView.adapter.notifyDataSetChanged()
|
||||
}
|
||||
}
|
||||
}
|
@@ -2,6 +2,7 @@ package com.chwl.app.avroom.headline
|
||||
|
||||
import android.content.Context
|
||||
import android.util.AttributeSet
|
||||
import android.view.Gravity
|
||||
import android.view.LayoutInflater
|
||||
import androidx.core.view.isVisible
|
||||
import androidx.databinding.DataBindingUtil
|
||||
@@ -9,12 +10,15 @@ import com.chwl.app.R
|
||||
import com.chwl.app.databinding.RoomHeadlineWidgetBinding
|
||||
import com.chwl.app.public_chat.core.ChatRoomClient
|
||||
import com.chwl.app.public_chat.core.ChatRoomClientManager
|
||||
import com.chwl.app.ui.utils.loadAvatar
|
||||
import com.chwl.core.im.custom.bean.CustomAttachment
|
||||
import com.chwl.core.im.custom.bean.HeadlineChangedAttachment
|
||||
import com.chwl.core.public_chat_hall.bean.HeadlineBean
|
||||
import com.chwl.core.public_chat_hall.model.PublicChatModel
|
||||
import com.chwl.core.support.room.FrameLayoutRoomWidget
|
||||
import com.chwl.core.support.room.RoomView
|
||||
import com.example.lib_utils.AppUtils
|
||||
import com.example.lib_utils.UiUtils
|
||||
import com.netease.nimlib.sdk.chatroom.model.ChatRoomMessage
|
||||
import com.netease.nimlib.sdk.msg.constant.MsgTypeEnum
|
||||
|
||||
@@ -44,6 +48,12 @@ class RoomHeadlineWidget : FrameLayoutRoomWidget {
|
||||
defStyleRes: Int
|
||||
) : super(context, attrs, defStyleAttr, defStyleRes)
|
||||
|
||||
init {
|
||||
if (UiUtils.isRtl(AppUtils.getApp())) {
|
||||
binding.tvHeadlineContent.gravity = Gravity.RIGHT
|
||||
}
|
||||
}
|
||||
|
||||
override fun onStart(roomView: RoomView) {
|
||||
super.onStart(roomView)
|
||||
if (!isInEditMode) {
|
||||
@@ -89,13 +99,11 @@ class RoomHeadlineWidget : FrameLayoutRoomWidget {
|
||||
}
|
||||
|
||||
private fun updateHeadline(data: HeadlineBean?) {
|
||||
val content = data?.content
|
||||
if (data?.isValid() == true && !content.isNullOrEmpty()) {
|
||||
binding.tvHeadlineContent.text = content
|
||||
this.isVisible = true
|
||||
} else {
|
||||
this.isVisible = false
|
||||
}
|
||||
binding.tvHeadlineContent.text = data?.content ?: ""
|
||||
binding.ivAvatar.loadAvatar(data?.avatar)
|
||||
binding.tvName.text = "${data?.nick ?: ""} :"
|
||||
binding.tvMoney.text = data?.payMoneyNum?.toString() ?: "0"
|
||||
this.isVisible = data?.isValid() == true && !data.content.isNullOrEmpty()
|
||||
}
|
||||
|
||||
override fun onStop() {
|
||||
|
@@ -9,6 +9,7 @@ import android.util.SparseArray;
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.annotation.Nullable;
|
||||
|
||||
import com.chwl.core.manager.RoomMicQueueModel;
|
||||
import com.chwl.core.support.room.AudioRoomContext;
|
||||
import com.google.gson.Gson;
|
||||
import com.google.gson.JsonElement;
|
||||
@@ -121,11 +122,11 @@ public class AvRoomPresenter extends BaseMvpPresenter<IAvRoomView> {
|
||||
AvRoomDataManager.get().updateServiceRoomInfo(roomInfo);
|
||||
mAvRoomModel.enterRoom(roomInfo.getRoomId(), 3, fromType, fromNick, fromUid)
|
||||
.flatMap(this::dealServerMicInfo)
|
||||
.map(this::dealMicMemberFromIMNet)
|
||||
.flatMap(this::dealMicChatRoomMemberFromIMNet)
|
||||
.flatMap((Function<SparseArray<RoomQueueInfo>, ObservableSource<SparseArray<RoomQueueInfo>>>) roomQueue -> RoomMicQueueModel.INSTANCE.queueMicQueue(roomInfo.getRoomId(),roomQueue))
|
||||
.compose(bindUntilEvent(PresenterEvent.DESTROY))
|
||||
.observeOn(AndroidSchedulers.mainThread())
|
||||
.subscribe(roomQueueInfoSparseArray -> {
|
||||
AvRoomDataManager.get().replaceMicQueue(roomQueueInfoSparseArray);
|
||||
long uid = AuthModel.get().getCurrentUid();
|
||||
AudioEngineManager.get().startRtcEngine(uid, roomInfo.getAudioSdkType());
|
||||
// TODO 临时方案:后续逐步完善整个房间的RoomContext替换计划
|
||||
@@ -220,52 +221,12 @@ public class AvRoomPresenter extends BaseMvpPresenter<IAvRoomView> {
|
||||
IMNetEaseManager.get().getChatRoomEventObservable().onNext(new RoomEvent().setEvent(RoomEvent.ROOM_EXIT));
|
||||
}
|
||||
|
||||
/**
|
||||
* 处理网易云信队列上人员的信息
|
||||
*/
|
||||
private Observable<SparseArray<RoomQueueInfo>> dealMicChatRoomMemberFromIMNet(List<String> accounts) {
|
||||
if (ListUtils.isListEmpty(accounts))
|
||||
return Observable.just(AvRoomDataManager.get().mMicQueueMemberMap);
|
||||
return IMNetEaseManager.get().fetchRoomMembersByIds(accounts).observeOn(AndroidSchedulers.mainThread())
|
||||
.flatMap(chatRoomMembers -> {
|
||||
for (ChatRoomMember chatRoomMember : chatRoomMembers) {
|
||||
AvRoomDataManager.get().updateQueueChatRoomMemberExtension(chatRoomMember);
|
||||
}
|
||||
return Single.just(AvRoomDataManager.get().mMicQueueMemberMap);
|
||||
}).toObservable();
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 处理网易云信坑位信息
|
||||
*/
|
||||
private List<String> dealMicMemberFromIMNet(List<Entry<String, String>> entries) {
|
||||
List<String> accounts = new ArrayList<>();
|
||||
if (!ListUtils.isListEmpty(entries)) {
|
||||
JsonParser jsonParser = new JsonParser();
|
||||
MicMemberInfo chatRoomMember;
|
||||
for (Entry<String, String> entry : entries) {
|
||||
RoomQueueInfo roomQueueInfo = AvRoomDataManager.get().mMicQueueMemberMap.get(Integer.parseInt(entry.key));
|
||||
if (roomQueueInfo != null) {
|
||||
JsonObject valueJsonObj = jsonParser.parse(entry.value).getAsJsonObject();
|
||||
if (valueJsonObj != null) {
|
||||
chatRoomMember = mGson.fromJson(valueJsonObj, MicMemberInfo.class);
|
||||
accounts.add(chatRoomMember.getAccount());
|
||||
roomQueueInfo.mChatRoomMember = chatRoomMember;
|
||||
}
|
||||
AvRoomDataManager.get().mMicQueueMemberMap.put(Integer.valueOf(entry.key), roomQueueInfo);
|
||||
}
|
||||
}
|
||||
}
|
||||
return accounts;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 处理服务端坑位信息
|
||||
*/
|
||||
@Nullable
|
||||
private ObservableSource<List<Entry<String, String>>> dealServerMicInfo(EnterChatRoomResultData enterChatRoomResultData) {
|
||||
private ObservableSource<SparseArray<RoomQueueInfo>> dealServerMicInfo(EnterChatRoomResultData enterChatRoomResultData) {
|
||||
AvRoomDataManager.get().mEnterChatRoomResultData = enterChatRoomResultData;
|
||||
if (enterChatRoomResultData == null)
|
||||
return Observable.error(new Throwable(GET_ROOM_FROM_IMNET_ERROR));
|
||||
@@ -295,11 +256,12 @@ public class AvRoomPresenter extends BaseMvpPresenter<IAvRoomView> {
|
||||
//初始化所有坑位
|
||||
Map<String, String> micMapStr = mGson.fromJson(roomMicStr, new TypeToken<Map<String, String>>() {
|
||||
}.getType());
|
||||
SparseArray<RoomQueueInfo> queue = new SparseArray<>();
|
||||
for (Map.Entry<String, String> entry : micMapStr.entrySet()) {
|
||||
AvRoomDataManager.get().mMicQueueMemberMap.put(Integer.valueOf(entry.getKey()),
|
||||
queue.put(Integer.valueOf(entry.getKey()),
|
||||
new RoomQueueInfo(mGson.fromJson(entry.getValue(), RoomMicInfo.class), null));
|
||||
}
|
||||
return mAvRoomModel.queryRoomMicInfo(roomInfo.getRoomId());
|
||||
return Observable.just(queue);
|
||||
}
|
||||
}
|
||||
return Observable.error(new Throwable(GET_ROOM_FROM_IMNET_ERROR));
|
||||
|
@@ -3,13 +3,13 @@ package com.chwl.app.avroom.room_album
|
||||
import android.annotation.SuppressLint
|
||||
import android.os.Bundle
|
||||
import com.hjq.toast.ToastUtils
|
||||
import com.chwl.app.base.BaseDialog
|
||||
import com.chwl.app.base.BaseDialogFragment
|
||||
import com.chwl.app.databinding.DialogLockRoomAlbumPhotoBinding
|
||||
import com.chwl.app.ui.utils.ImageLoadUtilsV2
|
||||
import com.chwl.core.gift.bean.GiftReceiveInfo
|
||||
import com.chwl.core.manager.AvRoomDataManager
|
||||
|
||||
class UnlockRoomAlbumPhotoDialog : BaseDialog<DialogLockRoomAlbumPhotoBinding>(){
|
||||
class UnlockRoomAlbumPhotoDialog : BaseDialogFragment<DialogLockRoomAlbumPhotoBinding>(){
|
||||
|
||||
var onUnlockRoomPhotoListener: OnUnlockRoomPhotoListener? = null
|
||||
|
||||
|
@@ -5,7 +5,7 @@ import android.os.Bundle
|
||||
import android.view.WindowManager
|
||||
import androidx.core.view.isVisible
|
||||
import com.chwl.app.R
|
||||
import com.chwl.app.base.BaseDialog
|
||||
import com.chwl.app.base.BaseDialogFragment
|
||||
import com.chwl.app.databinding.DialogSingleRoomPkFinishBinding
|
||||
import com.chwl.app.ui.utils.load
|
||||
import com.chwl.core.im.custom.bean.RoomPkBean
|
||||
@@ -14,7 +14,7 @@ import io.reactivex.Observable
|
||||
import io.reactivex.android.schedulers.AndroidSchedulers
|
||||
import java.util.concurrent.TimeUnit
|
||||
|
||||
class SingleRoomPkFinishDialog : BaseDialog<DialogSingleRoomPkFinishBinding>() {
|
||||
class SingleRoomPkFinishDialog : BaseDialogFragment<DialogSingleRoomPkFinishBinding>() {
|
||||
|
||||
companion object {
|
||||
@JvmStatic
|
||||
|
@@ -4,13 +4,13 @@ import android.annotation.SuppressLint
|
||||
import android.os.Bundle
|
||||
import android.view.WindowManager
|
||||
import com.chwl.app.R
|
||||
import com.chwl.app.base.BaseDialog
|
||||
import com.chwl.app.base.BaseDialogFragment
|
||||
import com.chwl.app.databinding.DialogSingleRoomPkForceFinishBinding
|
||||
import com.chwl.app.ui.utils.ImageLoadUtils
|
||||
import com.chwl.core.im.custom.bean.RoomPkBean
|
||||
import com.chwl.core.utils.extension.subAndReplaceDot
|
||||
|
||||
class SingleRoomPkForceFinishDialog : BaseDialog<DialogSingleRoomPkForceFinishBinding>() {
|
||||
class SingleRoomPkForceFinishDialog : BaseDialogFragment<DialogSingleRoomPkForceFinishBinding>() {
|
||||
|
||||
companion object {
|
||||
@JvmStatic
|
||||
|
@@ -4,7 +4,7 @@ import android.annotation.SuppressLint
|
||||
import android.os.Bundle
|
||||
import androidx.core.view.isVisible
|
||||
import com.chwl.app.R
|
||||
import com.chwl.app.base.BaseDialog
|
||||
import com.chwl.app.base.BaseDialogFragment
|
||||
import com.chwl.app.databinding.DialogSingleRoomPkReceivedBinding
|
||||
import com.chwl.core.im.custom.bean.RoomPkBean
|
||||
import com.chwl.core.manager.AvRoomDataManager
|
||||
@@ -17,7 +17,7 @@ import io.reactivex.android.schedulers.AndroidSchedulers
|
||||
import io.reactivex.disposables.Disposable
|
||||
import java.util.concurrent.TimeUnit
|
||||
|
||||
class SingleRoomPkReceivedDialog : BaseDialog<DialogSingleRoomPkReceivedBinding>() {
|
||||
class SingleRoomPkReceivedDialog : BaseDialogFragment<DialogSingleRoomPkReceivedBinding>() {
|
||||
|
||||
companion object {
|
||||
|
||||
|
@@ -1,12 +1,12 @@
|
||||
package com.chwl.app.avroom.singleroompk
|
||||
|
||||
import android.text.method.ScrollingMovementMethod
|
||||
import com.chwl.app.base.BaseDialog
|
||||
import com.chwl.app.base.BaseDialogFragment
|
||||
import com.chwl.app.databinding.DialogSingleRoomPkRuleBinding
|
||||
import com.chwl.core.room.anotherroompk.SingleRoomPKModel
|
||||
import com.chwl.core.utils.extension.toast
|
||||
|
||||
class SingleRoomPkRuleDialog : BaseDialog<DialogSingleRoomPkRuleBinding>() {
|
||||
class SingleRoomPkRuleDialog : BaseDialogFragment<DialogSingleRoomPkRuleBinding>() {
|
||||
|
||||
companion object {
|
||||
|
||||
|
@@ -20,6 +20,7 @@ import android.widget.TextView;
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.annotation.Nullable;
|
||||
|
||||
import com.chwl.app.avroom.activity.RoomTypeSwitchActivity;
|
||||
import com.chwl.app.avroom.dialog.RoomGameplayDialog;
|
||||
import com.chwl.core.utils.extension.StringExtensionKt;
|
||||
import com.netease.nim.uikit.api.NimUIKit;
|
||||
@@ -59,6 +60,7 @@ public class BottomView extends LinearLayout implements View.OnClickListener {
|
||||
*/
|
||||
private static final int NEW_OPTION = 1;
|
||||
private static final String SH_NEW_OPTION = "sh_new_option";
|
||||
private static final String NEW_OPTION_ROOM_TYPE = "new_option_room_type";
|
||||
|
||||
private BottomViewListenerWrapper wrapper;
|
||||
private ImageView openMic;
|
||||
@@ -156,8 +158,11 @@ public class BottomView extends LinearLayout implements View.OnClickListener {
|
||||
|
||||
if (newOption == NEW_OPTION) {
|
||||
sendMagic.setImageResource(R.drawable.room_menu_ic_more);
|
||||
if (isRemindOptionForRoomType()) {
|
||||
sendMagic.setImageResource(R.drawable.room_menu_ic_more_new);
|
||||
}
|
||||
} else {
|
||||
sendMagic.setImageResource(R.drawable.room_menu_ic_more);
|
||||
sendMagic.setImageResource(R.drawable.room_menu_ic_more_new);
|
||||
}
|
||||
sendMagic.setClickable(true);
|
||||
sendMagic.setOnClickListener(this);
|
||||
@@ -168,6 +173,29 @@ public class BottomView extends LinearLayout implements View.OnClickListener {
|
||||
}
|
||||
}
|
||||
|
||||
private boolean isRemindOptionForRoomType() {
|
||||
boolean isReminded = (boolean) SharedPreferenceUtils.get(NEW_OPTION_ROOM_TYPE, false);
|
||||
if (isReminded) {
|
||||
return false;
|
||||
}
|
||||
if (RoomTypeSwitchActivity.Companion.isCanSwitch()) {
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
private boolean updateOptionForRoomType() {
|
||||
boolean isReminded = (boolean) SharedPreferenceUtils.get(NEW_OPTION_ROOM_TYPE, false);
|
||||
if (isReminded) {
|
||||
return false;
|
||||
}
|
||||
if (RoomTypeSwitchActivity.Companion.isCanSwitch()) {
|
||||
SharedPreferenceUtils.put(NEW_OPTION_ROOM_TYPE, true);
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
@Subscribe(threadMode = ThreadMode.MAIN)
|
||||
public void onReceiveRecentContactChanged(List<RecentContact> imMessages) {
|
||||
setRoomMessageUnread(IMMessageManager.get().queryUnreadMsg());
|
||||
@@ -215,6 +243,10 @@ public class BottomView extends LinearLayout implements View.OnClickListener {
|
||||
}
|
||||
}
|
||||
|
||||
public void notifyStateChanged() {
|
||||
setMagicBtnEnable(true);
|
||||
}
|
||||
|
||||
public void showHomePartyUpMicBottom() {
|
||||
faceLayout.setVisibility(VISIBLE);
|
||||
micLayout.setVisibility(VISIBLE);
|
||||
@@ -295,12 +327,14 @@ public class BottomView extends LinearLayout implements View.OnClickListener {
|
||||
}
|
||||
break;
|
||||
case R.id.icon_room_send_magic:
|
||||
|
||||
int newOption = (int) SharedPreferenceUtils.get(SH_NEW_OPTION, 0);
|
||||
if (newOption != NEW_OPTION) {
|
||||
SharedPreferenceUtils.put(SH_NEW_OPTION, NEW_OPTION);
|
||||
setMagicBtnEnable(true);
|
||||
}
|
||||
if (updateOptionForRoomType()) {
|
||||
setMagicBtnEnable(true);
|
||||
}
|
||||
|
||||
if (wrapper != null) {
|
||||
wrapper.onMoreBtnClick();
|
||||
|
@@ -6,7 +6,6 @@ import android.os.Handler;
|
||||
import android.os.Message;
|
||||
import android.text.TextUtils;
|
||||
import android.util.AttributeSet;
|
||||
import android.util.Log;
|
||||
import android.view.LayoutInflater;
|
||||
import android.view.View;
|
||||
import android.view.animation.AccelerateDecelerateInterpolator;
|
||||
@@ -14,7 +13,7 @@ import android.widget.RelativeLayout;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
|
||||
import com.chwl.core.helper.PathHelper;
|
||||
import com.chwl.library.utils.PathHelper;
|
||||
import com.chwl.library.download.DownloadException;
|
||||
import com.chwl.library.download.DownloadManager;
|
||||
import com.chwl.library.download.DownloadRequest;
|
||||
|
@@ -2286,7 +2286,7 @@ public class MessageView extends FrameLayout {
|
||||
})
|
||||
.append(ResUtil.getString(R.string.gift_message_01), new ForegroundColorSpan(getResources().getColor(R.color.white)));
|
||||
|
||||
text.append(luckyGiftInfo.getGiftName() + ResUtil.getString(R.string.gift_message_02), new ForegroundColorSpan(getResources().getColor(R.color.white)))
|
||||
text.append(luckyGiftInfo.getFirstGiftName() + ResUtil.getString(R.string.gift_message_02), new ForegroundColorSpan(getResources().getColor(R.color.white)))
|
||||
.append(luckyGiftInfo.getUser().getNick(), new ForegroundColorSpan(roomTipNickColor), new OriginalDrawStatusClickSpan() {
|
||||
@Override
|
||||
public void onClick(@NonNull View widget) {
|
||||
@@ -2341,7 +2341,7 @@ public class MessageView extends FrameLayout {
|
||||
})
|
||||
.append(ResUtil.getString(R.string.gift_message_01), new ForegroundColorSpan(getResources().getColor(R.color.white)));
|
||||
|
||||
text.append(luckyGiftInfo.getGiftName() + ResUtil.getString(R.string.gift_message_02), new ForegroundColorSpan(getResources().getColor(R.color.white)))
|
||||
text.append(luckyGiftInfo.getFirstGiftName() + ResUtil.getString(R.string.gift_message_02), new ForegroundColorSpan(getResources().getColor(R.color.white)))
|
||||
.append(luckyGiftInfo.getUser().getNick(), new ForegroundColorSpan(roomTipNickColor), new OriginalDrawStatusClickSpan() {
|
||||
@Override
|
||||
public void onClick(@NonNull View widget) {
|
||||
|
@@ -17,7 +17,7 @@ import com.trello.rxlifecycle3.components.support.RxDialogFragment
|
||||
import kotlinx.coroutines.launch
|
||||
import java.lang.reflect.ParameterizedType
|
||||
|
||||
abstract class BaseDialog<T : ViewBinding> : RxDialogFragment() {
|
||||
abstract class BaseDialogFragment<T : ViewBinding> : RxDialogFragment() {
|
||||
|
||||
val isViewLoaded: Boolean get() = _binding != null
|
||||
protected var _binding: T? = null
|
@@ -17,7 +17,6 @@ import com.chwl.app.databinding.PhotoDialogBinding
|
||||
import com.chwl.app.ui.widget.dialog.CommonTipDialog
|
||||
import com.chwl.library.common.base.BaseDialogFragment
|
||||
import com.chwl.library.common.photo.PhotoProvider
|
||||
import com.chwl.library.common.photo.PhotoProviderNew
|
||||
import com.chwl.library.common.util.PhotoCompressCallback
|
||||
import com.chwl.library.common.util.PhotoCompressUtil
|
||||
import com.chwl.library.common.util.PhotosCompressCallback
|
||||
@@ -84,7 +83,7 @@ class PhotoDialog : BaseDialogFragment<PhotoDialogBinding>(), EasyPermissions.Pe
|
||||
if (Build.VERSION.SDK_INT >= 33) Manifest.permission.READ_MEDIA_IMAGES else Manifest.permission.READ_EXTERNAL_STORAGE
|
||||
)
|
||||
} else {
|
||||
PhotoProviderNew.photoProvider(this, resultCode = REQUEST_CODE_OPEN_PHOTO_PROVIDER)
|
||||
PhotoProvider.photoProvider(this, resultCode = REQUEST_CODE_OPEN_PHOTO_PROVIDER)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -118,7 +117,7 @@ class PhotoDialog : BaseDialogFragment<PhotoDialogBinding>(), EasyPermissions.Pe
|
||||
if (Build.VERSION.SDK_INT >= 33) Manifest.permission.READ_MEDIA_IMAGES else Manifest.permission.READ_EXTERNAL_STORAGE
|
||||
)
|
||||
} else {
|
||||
PhotoProviderNew.photoCamera(this, REQUEST_CODE_OPEN_CAMERA_PROVIDER)
|
||||
PhotoProvider.photoCamera(this, REQUEST_CODE_OPEN_CAMERA_PROVIDER)
|
||||
}
|
||||
}
|
||||
|
||||
|
@@ -1,72 +0,0 @@
|
||||
package com.chwl.app.decoration.adapter;
|
||||
|
||||
import android.view.View;
|
||||
|
||||
import com.chwl.app.R;
|
||||
import com.chwl.app.bindadapter.BaseAdapter;
|
||||
import com.chwl.app.bindadapter.BindingViewHolder;
|
||||
import com.chwl.app.databinding.ItemHeadWearBinding;
|
||||
import com.chwl.core.decoration.headwear.bean.HeadWearInfo;
|
||||
import com.chwl.core.noble.NobleUtil;
|
||||
import com.chwl.library.utils.ListUtils;
|
||||
|
||||
/**
|
||||
* Created by huangmeng1 on 2018/5/10.
|
||||
*/
|
||||
|
||||
public class HeadWearShopAdapter extends BaseAdapter<HeadWearInfo> {
|
||||
private int selectPosition;
|
||||
|
||||
public int getSelectPosition() {
|
||||
return selectPosition;
|
||||
}
|
||||
|
||||
public void setSelectPosition(int selectPosition) {
|
||||
notifyItemChanged(this.selectPosition);
|
||||
this.selectPosition = selectPosition;
|
||||
notifyItemChanged(this.selectPosition);
|
||||
}
|
||||
|
||||
public HeadWearShopAdapter(int layoutResId, int brid) {
|
||||
super(layoutResId, brid);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void convert(BindingViewHolder helper, HeadWearInfo item) {
|
||||
super.convert(helper, item);
|
||||
ItemHeadWearBinding binding = (ItemHeadWearBinding) helper.getBinding();
|
||||
binding.llRoot.setSelected(selectPosition == helper.getAdapterPosition());
|
||||
NobleUtil.loadHeadWears(item.getPic(), binding.ivHeadWear);
|
||||
binding.setSelectPosition(selectPosition == helper.getAdapterPosition());
|
||||
|
||||
if (item.getLabelType() == HeadWearInfo.LABEL_TYPE_NORMAL) {
|
||||
binding.ivTag.setVisibility(View.GONE);
|
||||
|
||||
} else if (HeadWearInfo.LABEL_TYPE_NEW == item.getLabelType()) {
|
||||
binding.ivTag.setVisibility(View.VISIBLE);
|
||||
binding.ivTag.setImageResource(R.drawable.ic_mark_new);
|
||||
|
||||
} else if (HeadWearInfo.LABEL_TYPE_DISCOUNT == item.getLabelType()) {
|
||||
binding.ivTag.setVisibility(View.VISIBLE);
|
||||
binding.ivTag.setImageResource(R.drawable.ic_mark_discount);
|
||||
|
||||
} else if (HeadWearInfo.LABEL_TYPE_LIMIT == item.getLabelType()) {
|
||||
binding.ivTag.setVisibility(View.VISIBLE);
|
||||
binding.ivTag.setImageResource(R.drawable.ic_mark_limit);
|
||||
|
||||
} else if (HeadWearInfo.LABEL_TYPE_EXCLUSIVE == item.getLabelType()) {
|
||||
binding.ivTag.setVisibility(View.VISIBLE);
|
||||
binding.ivTag.setImageResource(R.drawable.ic_mark_exclusive);
|
||||
}
|
||||
|
||||
binding.tvHeadName.setText(item.getName() + "");
|
||||
}
|
||||
|
||||
public void setCarInfoHasBeenBought(HeadWearInfo carInfo) {
|
||||
if (carInfo.getHeadwearId() <= 0 || ListUtils.isListEmpty(mData)) return;
|
||||
int index = mData.indexOf(carInfo);
|
||||
if (index == -1) return;
|
||||
mData.get(index).setStatus(HeadWearInfo.STATUS_IN_USED);
|
||||
notifyItemChanged(index);
|
||||
}
|
||||
}
|
@@ -6,9 +6,11 @@ import com.chwl.app.R;
|
||||
import com.chwl.app.bindadapter.BaseAdapter;
|
||||
import com.chwl.app.bindadapter.BindingViewHolder;
|
||||
import com.chwl.app.databinding.ItemMyHeadWearBinding;
|
||||
import com.chwl.app.utils.AvatarHelper;
|
||||
import com.chwl.core.decoration.headwear.bean.HeadWearInfo;
|
||||
import com.chwl.core.noble.NobleUtil;
|
||||
import com.chwl.library.utils.ResUtil;
|
||||
import com.chwl.library.widget.SVGAView;
|
||||
|
||||
/**
|
||||
* Created by huangmeng1 on 2018/5/11.
|
||||
@@ -20,11 +22,14 @@ public class MyHeadWearAdapter extends BaseAdapter<HeadWearInfo> {
|
||||
super(layoutResId, brid);
|
||||
}
|
||||
|
||||
private SVGAView.SVGACache svgaCache = SVGAView.newCache(10);
|
||||
|
||||
@Override
|
||||
protected void convert(BindingViewHolder helper, HeadWearInfo item) {
|
||||
super.convert(helper, item);
|
||||
ItemMyHeadWearBinding binding = (ItemMyHeadWearBinding) helper.getBinding();
|
||||
NobleUtil.loadHeadWears(item.getPic(), binding.ivCarCover);
|
||||
binding.ivCarCover.bindCache(svgaCache);
|
||||
AvatarHelper.loadAvatarFrame(binding.ivCarCover, item.getFirstUrl(), item.getType());
|
||||
helper.addOnClickListener(R.id.tv_used);
|
||||
|
||||
if (item.getLabelType() == HeadWearInfo.LABEL_TYPE_NORMAL) {
|
||||
|
@@ -19,25 +19,25 @@ class HomeMeViewModel : BaseViewModel() {
|
||||
}
|
||||
}
|
||||
|
||||
fun getHomeHistoryList(pageNum: Int) {
|
||||
fun getHomeHistoryList(pageNum: Int, pageSize: Int) {
|
||||
safeLaunch(
|
||||
onError = {
|
||||
historyRoomListLiveData.value = ListResult.failed(pageNum)
|
||||
},
|
||||
block = {
|
||||
val result = HomeModel.getHomeHistoryRoomList(pageNum, 10)
|
||||
val result = HomeModel.getHomeHistoryRoomList(pageNum, pageSize)
|
||||
historyRoomListLiveData.value = ListResult.success(result, pageNum)
|
||||
}
|
||||
)
|
||||
}
|
||||
|
||||
fun getHomeCollectList(pageNum: Int) {
|
||||
fun getHomeCollectList(pageNum: Int, pageSize: Int) {
|
||||
safeLaunch(
|
||||
onError = {
|
||||
collectRoomListLiveData.value = ListResult.failed(pageNum)
|
||||
},
|
||||
block = {
|
||||
val result = HomeModel.getHomeMyCollectRoomList(pageNum, 10)
|
||||
val result = HomeModel.getHomeMyCollectRoomList(pageNum, pageSize)
|
||||
collectRoomListLiveData.value = ListResult.success(result, pageNum)
|
||||
}
|
||||
)
|
||||
|
@@ -27,13 +27,13 @@ class HomeViewModel : BaseViewModel() {
|
||||
val homeTabLiveData: MutableLiveData<List<HomeTagInfo>> = MutableLiveData<List<HomeTagInfo>>()
|
||||
|
||||
val homeRankListLiveData = MutableLiveData<List<List<HomeRankBean>>>()
|
||||
fun getTabRoomList(tabId: Int, pageNum: Int) {
|
||||
fun getTabRoomList(tabId: Int, pageNum: Int, pageSize: Int) {
|
||||
safeLaunch(
|
||||
onError = {
|
||||
tabRoomListLiveData.value = ListResult.failed(pageNum)
|
||||
},
|
||||
block = {
|
||||
val result = HomeModel.getHomeTabHome(tabId, pageNum, 10)
|
||||
val result = HomeModel.getHomeTabHome(tabId, pageNum, pageSize)
|
||||
tabRoomListLiveData.value = ListResult.success(result, pageNum)
|
||||
}
|
||||
)
|
||||
|
@@ -1,6 +1,8 @@
|
||||
package com.chwl.app.home.adapter;
|
||||
|
||||
|
||||
import android.text.TextUtils;
|
||||
import android.widget.TextView;
|
||||
|
||||
import com.chad.library.adapter.base.BaseQuickAdapter;
|
||||
import com.chad.library.adapter.base.BaseViewHolder;
|
||||
@@ -59,7 +61,8 @@ public class CommunityNoticeAdapter extends BaseQuickAdapter<CommunityNoticeInfo
|
||||
}
|
||||
|
||||
helper.setGone(R.id.tv_label_community_notice_list, false);
|
||||
helper.setText(R.id.tv_content_community_notice_list, item.getMessage());
|
||||
TextView textView = helper.getView(R.id.tv_content_community_notice_list);
|
||||
textView.setText(item.getMessage());
|
||||
switch (item.getActionType()) {
|
||||
case 1: // 评论
|
||||
if (item.getTargetUid() == AuthModel.get().getCurrentUid()) {
|
||||
|
@@ -39,8 +39,8 @@ public class HomeIndicatorAdapter extends CommonNavigatorAdapter {
|
||||
@Override
|
||||
public IPagerTitleView getTitleView(Context context, final int i) {
|
||||
ScaleTransitionPagerTitleView scaleTransitionPagerTitleView = new ScaleTransitionPagerTitleView(context, true);
|
||||
scaleTransitionPagerTitleView.setNormalColor(ContextCompat.getColor(context, R.color.white_transparent_60));
|
||||
scaleTransitionPagerTitleView.setSelectedColor(ContextCompat.getColor(context, R.color.color_FFFFFF));
|
||||
scaleTransitionPagerTitleView.setNormalColor(ContextCompat.getColor(context, R.color.color_990C1D18));
|
||||
scaleTransitionPagerTitleView.setSelectedColor(ContextCompat.getColor(context, R.color.color_0C1D18));
|
||||
scaleTransitionPagerTitleView.setMinScale(minScale);
|
||||
scaleTransitionPagerTitleView.setTextSize(textSize);
|
||||
int padding = UIUtil.dip2px(context, 13);
|
||||
@@ -59,10 +59,10 @@ public class HomeIndicatorAdapter extends CommonNavigatorAdapter {
|
||||
public IPagerIndicator getIndicator(Context context) {
|
||||
LinePagerIndicator indicator = new LinePagerIndicator(context);
|
||||
indicator.setMode(LinePagerIndicator.MODE_EXACTLY);
|
||||
indicator.setLineHeight(UIUtil.dip2px(mContext, 2.5));
|
||||
indicator.setRoundRadius(UIUtil.dip2px(mContext, 1.5));
|
||||
indicator.setLineWidth(UIUtil.dip2px(mContext, 10));
|
||||
indicator.setColors(context.getResources().getColor(R.color.color_10ECD6));
|
||||
indicator.setLineHeight(context.getResources().getDimensionPixelOffset(R.dimen.dp_4));
|
||||
indicator.setRoundRadius(context.getResources().getDimensionPixelOffset(R.dimen.dp_2));
|
||||
indicator.setLineWidth(context.getResources().getDimensionPixelOffset(R.dimen.dp_13));
|
||||
indicator.setColors(context.getResources().getColor(R.color.color_002512));
|
||||
FrameLayout.LayoutParams lp = new FrameLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT);
|
||||
// lp.bottomMargin = mBottomMargin;
|
||||
indicator.setLayoutParams(lp);
|
||||
|
@@ -1,9 +1,13 @@
|
||||
package com.chwl.app.home.adapter
|
||||
|
||||
import android.graphics.Rect
|
||||
import android.view.View
|
||||
import android.view.ViewGroup
|
||||
import android.widget.ImageView
|
||||
import androidx.core.view.isInvisible
|
||||
import androidx.core.view.isVisible
|
||||
import androidx.recyclerview.widget.LinearLayoutManager
|
||||
import androidx.recyclerview.widget.RecyclerView
|
||||
import androidx.recyclerview.widget.RecyclerView.RecycledViewPool
|
||||
import com.chad.library.adapter.base.BaseQuickAdapter
|
||||
import com.chad.library.adapter.base.BaseViewHolder
|
||||
import com.chwl.app.R
|
||||
@@ -11,14 +15,54 @@ import com.chwl.app.ui.utils.ImageLoadUtils
|
||||
import com.chwl.app.ui.utils.load
|
||||
import com.chwl.app.ui.utils.loadFromAssets
|
||||
import com.chwl.core.home.bean.HomeRoomInfo
|
||||
import com.example.lib_utils.AppUtils
|
||||
import com.example.lib_utils.UiUtils
|
||||
import com.opensource.svgaplayer.SVGADrawable
|
||||
import com.opensource.svgaplayer.SVGAImageView
|
||||
|
||||
/**
|
||||
* create by lvzebiao @2019/11/13
|
||||
*/
|
||||
class HomeRoomAdapter :
|
||||
BaseQuickAdapter<HomeRoomInfo, BaseViewHolder>(R.layout.home_item_room) {
|
||||
class HomeRoomAdapter : BaseQuickAdapter<HomeRoomInfo, BaseViewHolder>(R.layout.home_item_room) {
|
||||
private var micUserItemViewPool = RecycledViewPool().apply {
|
||||
setMaxRecycledViews(0, 50)
|
||||
}
|
||||
|
||||
private val isRTL = UiUtils.isRtl(AppUtils.getApp())
|
||||
|
||||
override fun onCreateDefViewHolder(parent: ViewGroup, viewType: Int): BaseViewHolder {
|
||||
return super.onCreateDefViewHolder(parent, viewType).apply {
|
||||
val micUserRecyclerView = this.getView<RecyclerView>(R.id.recycler_view_users)
|
||||
micUserRecyclerView.setOnTouchListener { v, event -> true }
|
||||
micUserRecyclerView.setRecycledViewPool(micUserItemViewPool)
|
||||
micUserRecyclerView.setHasFixedSize(true)
|
||||
micUserRecyclerView.layoutManager =
|
||||
LinearLayoutManager(parent.context, RecyclerView.HORIZONTAL, false).apply {
|
||||
this.recycleChildrenOnDetach = true
|
||||
this.isSmoothScrollbarEnabled
|
||||
}
|
||||
micUserRecyclerView.addItemDecoration(object : RecyclerView.ItemDecoration() {
|
||||
val offset = AppUtils.getApp().resources.getDimensionPixelOffset(R.dimen.dp_4) * -1
|
||||
override fun getItemOffsets(
|
||||
outRect: Rect,
|
||||
view: View,
|
||||
parent: RecyclerView,
|
||||
state: RecyclerView.State
|
||||
) {
|
||||
super.getItemOffsets(outRect, view, parent, state)
|
||||
val position = parent.getChildAdapterPosition(view)
|
||||
if (position != 0) {
|
||||
if (isRTL) {
|
||||
outRect.right = offset
|
||||
} else {
|
||||
outRect.left = offset
|
||||
}
|
||||
}
|
||||
}
|
||||
})
|
||||
micUserRecyclerView.adapter = HomeRoomUserAdapter()
|
||||
}
|
||||
}
|
||||
|
||||
override fun convert(helper: BaseViewHolder, item: HomeRoomInfo) {
|
||||
helper.apply {
|
||||
@@ -28,18 +72,10 @@ class HomeRoomAdapter :
|
||||
setText(R.id.tv_desc, item.roomDesc)
|
||||
}
|
||||
|
||||
val avatars: Array<ImageView> = arrayOf(
|
||||
helper.getView(R.id.iv_avatar_0),
|
||||
helper.getView(R.id.iv_avatar_1),
|
||||
helper.getView(R.id.iv_avatar_2),
|
||||
helper.getView(R.id.iv_avatar_3),
|
||||
helper.getView(R.id.iv_avatar_4)
|
||||
)
|
||||
for (i in avatars.indices) {
|
||||
val avatarUrl = item.micUsers?.getOrNull(i)?.avatar
|
||||
avatars[i].isInvisible = avatarUrl.isNullOrBlank()
|
||||
avatars[i].load(avatarUrl)
|
||||
}
|
||||
val micUserRecyclerView = helper.getView<RecyclerView>(R.id.recycler_view_users)
|
||||
val userAdapter = micUserRecyclerView.adapter as HomeRoomUserAdapter
|
||||
userAdapter.setNewData(item.micUsers)
|
||||
|
||||
val topView = helper.getView<ImageView>(R.id.iv_top)
|
||||
if (item.isHourTop1 == 1) {
|
||||
topView.setImageResource(R.drawable.home_room_bg_hour_top)
|
||||
|
@@ -0,0 +1,16 @@
|
||||
package com.chwl.app.home.adapter
|
||||
|
||||
import android.widget.ImageView
|
||||
import com.chad.library.adapter.base.BaseQuickAdapter
|
||||
import com.chad.library.adapter.base.BaseViewHolder
|
||||
import com.chwl.app.R
|
||||
import com.chwl.app.ui.utils.loadAvatar
|
||||
import com.chwl.core.home.bean.MicUsersBean
|
||||
|
||||
class HomeRoomUserAdapter :
|
||||
BaseQuickAdapter<MicUsersBean, BaseViewHolder>(R.layout.home_item_room_user) {
|
||||
override fun convert(helper: BaseViewHolder, item: MicUsersBean?) {
|
||||
val avatarView = helper.getView<ImageView>(R.id.iv_avatar)
|
||||
avatarView.loadAvatar(item?.avatar)
|
||||
}
|
||||
}
|
@@ -7,14 +7,14 @@ import android.view.WindowManager
|
||||
import android.widget.ImageView
|
||||
import androidx.core.view.isGone
|
||||
import com.chwl.app.R
|
||||
import com.chwl.app.base.BaseDialog
|
||||
import com.chwl.app.base.BaseDialogFragment
|
||||
import com.chwl.app.databinding.DialogHelloMessageBinding
|
||||
import com.chwl.app.ui.utils.load
|
||||
import com.chwl.app.room_chat.activity.RoomMsgActivity
|
||||
import com.chwl.core.channel_page.bean.HelloMessageInfo
|
||||
import com.chwl.library.utils.ResUtil
|
||||
|
||||
class HelloMessageDialog : BaseDialog<DialogHelloMessageBinding>() {
|
||||
class HelloMessageDialog : BaseDialogFragment<DialogHelloMessageBinding>() {
|
||||
|
||||
companion object {
|
||||
|
||||
|
@@ -4,13 +4,13 @@ import android.annotation.SuppressLint
|
||||
import android.os.Bundle
|
||||
import android.view.WindowManager
|
||||
import com.chwl.app.avroom.activity.AVRoomActivity
|
||||
import com.chwl.app.base.BaseDialog
|
||||
import com.chwl.app.base.BaseDialogFragment
|
||||
import com.chwl.app.databinding.DialogNewUserHelloBinding
|
||||
import com.chwl.app.ui.utils.load
|
||||
import com.chwl.core.channel_page.bean.NewUserHelloInfo
|
||||
import com.chwl.core.utils.extension.subAndReplaceDot
|
||||
|
||||
class NewUserHelloDialog : BaseDialog<DialogNewUserHelloBinding>() {
|
||||
class NewUserHelloDialog : BaseDialogFragment<DialogNewUserHelloBinding>() {
|
||||
|
||||
companion object {
|
||||
|
||||
|
@@ -3,12 +3,12 @@ package com.chwl.app.home.dialog
|
||||
import android.annotation.SuppressLint
|
||||
import android.os.Bundle
|
||||
import com.chwl.app.avroom.activity.AVRoomActivity
|
||||
import com.chwl.app.base.BaseDialog
|
||||
import com.chwl.app.base.BaseDialogFragment
|
||||
import com.chwl.app.databinding.DialogRecommendRoomBinding
|
||||
import com.chwl.app.ui.utils.ImageLoadUtils
|
||||
import com.chwl.core.home.bean.HomeRoomInfo
|
||||
|
||||
class RecommendRoomDialog : BaseDialog<DialogRecommendRoomBinding>() {
|
||||
class RecommendRoomDialog : BaseDialogFragment<DialogRecommendRoomBinding>() {
|
||||
|
||||
companion object {
|
||||
|
||||
|
@@ -26,6 +26,7 @@ import com.chwl.app.support.FragmentVisibleStateHelper
|
||||
import com.chwl.app.ui.im.friend.FriendListFragment
|
||||
import com.chwl.app.ui.im.recent.RecentListFragment
|
||||
import com.chwl.app.ui.relation.FansListFragment
|
||||
import com.chwl.app.ui.user.adapter.ContactsIndicatorAdapter
|
||||
import com.chwl.app.ui.user.adapter.UserInfoIndicatorAdapter
|
||||
import com.chwl.app.ui.widget.magicindicator.buildins.commonnavigator.CommonNavigator
|
||||
import com.chwl.core.Constants
|
||||
@@ -85,7 +86,7 @@ class ContactsListFragment : BaseViewBindingFragment<FragmentContactListBinding>
|
||||
tagList.add(getString(R.string.layout_fragment_contact_list_04))
|
||||
val commonNavigator = CommonNavigator(context)
|
||||
commonNavigator.setTitleWrapContent(false)
|
||||
val magicIndicatorAdapter = UserInfoIndicatorAdapter(context, tagList)
|
||||
val magicIndicatorAdapter = ContactsIndicatorAdapter(context, tagList)
|
||||
magicIndicatorAdapter.setOnItemSelectListener { position: Int, view: TextView? ->
|
||||
binding.viewPager.currentItem = position
|
||||
}
|
||||
@@ -138,7 +139,7 @@ class ContactsListFragment : BaseViewBindingFragment<FragmentContactListBinding>
|
||||
}
|
||||
|
||||
override fun onScroll(
|
||||
e1: MotionEvent,
|
||||
e1: MotionEvent?,
|
||||
e2: MotionEvent,
|
||||
distanceX: Float,
|
||||
distanceY: Float
|
||||
@@ -150,7 +151,7 @@ class ContactsListFragment : BaseViewBindingFragment<FragmentContactListBinding>
|
||||
}
|
||||
|
||||
override fun onFling(
|
||||
e1: MotionEvent,
|
||||
e1: MotionEvent?,
|
||||
e2: MotionEvent,
|
||||
velocityX: Float,
|
||||
velocityY: Float
|
||||
|
@@ -198,7 +198,7 @@ class HomeRecommendFragment : BaseViewBindingFragment<FragmentHomeRecommendBindi
|
||||
override fun createFragment(position: Int): Fragment {
|
||||
val itemId = getItemId(position)
|
||||
return HomeTabRoomFragment.newInstance(itemId.toInt()).apply {
|
||||
autoRefreshOnVisible = true
|
||||
this.autoRefreshOnVisible = true
|
||||
}
|
||||
}
|
||||
|
||||
|
@@ -29,6 +29,7 @@ class HomeRoomCollectListFragment : BaseViewBindingFragment<HomeTabRoomFragmentB
|
||||
private val viewModel: HomeMeViewModel by viewModels()
|
||||
|
||||
private var pageNum = 1
|
||||
private val pageSize = 50
|
||||
|
||||
companion object {
|
||||
fun newInstance(): HomeRoomCollectListFragment {
|
||||
@@ -58,7 +59,7 @@ class HomeRoomCollectListFragment : BaseViewBindingFragment<HomeTabRoomFragmentB
|
||||
}
|
||||
}
|
||||
rvDelegate = RVDelegate.Builder<HomeRoomInfo>()
|
||||
.setPageSize(10)
|
||||
.setPageSize(pageSize)
|
||||
.setAdapter(adapter)
|
||||
.setRecyclerView(binding.mRecyclerRoom)
|
||||
.setEmptyView(
|
||||
@@ -90,7 +91,7 @@ class HomeRoomCollectListFragment : BaseViewBindingFragment<HomeTabRoomFragmentB
|
||||
} else {
|
||||
pageNum++
|
||||
}
|
||||
viewModel.getHomeCollectList(pageNum)
|
||||
viewModel.getHomeCollectList(pageNum, pageSize)
|
||||
}
|
||||
|
||||
override fun onRefresh() {
|
||||
|
@@ -29,6 +29,7 @@ class HomeRoomHistoryListFragment : BaseViewBindingFragment<HomeTabRoomFragmentB
|
||||
private val viewModel: HomeMeViewModel by viewModels()
|
||||
|
||||
private var pageNum = 1
|
||||
private val pageSize = 50
|
||||
|
||||
companion object {
|
||||
fun newInstance(): HomeRoomHistoryListFragment {
|
||||
@@ -58,7 +59,7 @@ class HomeRoomHistoryListFragment : BaseViewBindingFragment<HomeTabRoomFragmentB
|
||||
}
|
||||
}
|
||||
rvDelegate = RVDelegate.Builder<HomeRoomInfo>()
|
||||
.setPageSize(10)
|
||||
.setPageSize(pageSize)
|
||||
.setAdapter(adapter)
|
||||
.setRecyclerView(binding.mRecyclerRoom)
|
||||
.setEmptyView(
|
||||
@@ -90,7 +91,7 @@ class HomeRoomHistoryListFragment : BaseViewBindingFragment<HomeTabRoomFragmentB
|
||||
} else {
|
||||
pageNum++
|
||||
}
|
||||
viewModel.getHomeHistoryList(pageNum)
|
||||
viewModel.getHomeHistoryList(pageNum, pageSize)
|
||||
}
|
||||
|
||||
override fun onRefresh() {
|
||||
|
@@ -1,7 +1,6 @@
|
||||
package com.chwl.app.home.fragment
|
||||
|
||||
import android.os.Bundle
|
||||
import android.util.Log
|
||||
import android.view.View
|
||||
import androidx.fragment.app.viewModels
|
||||
import androidx.recyclerview.widget.LinearLayoutManager
|
||||
@@ -33,6 +32,7 @@ class HomeTabRoomFragment : BaseViewBindingFragment<HomeTabRoomFragmentBinding>(
|
||||
var autoRefreshOnVisible = false
|
||||
|
||||
private var pageNum = 1
|
||||
private val pageSize = 50
|
||||
private var tabId: Int? = null
|
||||
|
||||
companion object {
|
||||
@@ -70,7 +70,7 @@ class HomeTabRoomFragment : BaseViewBindingFragment<HomeTabRoomFragmentBinding>(
|
||||
}
|
||||
}
|
||||
rvDelegate = RVDelegate.Builder<HomeRoomInfo>()
|
||||
.setPageSize(10)
|
||||
.setPageSize(pageSize)
|
||||
.setAdapter(adapter)
|
||||
.setRecyclerView(binding.mRecyclerRoom)
|
||||
.setEmptyView(
|
||||
@@ -102,7 +102,7 @@ class HomeTabRoomFragment : BaseViewBindingFragment<HomeTabRoomFragmentBinding>(
|
||||
} else {
|
||||
pageNum++
|
||||
}
|
||||
homeViewModel.getTabRoomList(tabId ?: 0, pageNum)
|
||||
homeViewModel.getTabRoomList(tabId ?: 0, pageNum, pageSize)
|
||||
}
|
||||
|
||||
override fun onRefresh() {
|
||||
|
@@ -35,6 +35,8 @@ import com.chwl.core.utils.net.RxHelper;
|
||||
import com.chwl.library.utils.ResUtil;
|
||||
import com.chwl.library.utils.SingleToastUtil;
|
||||
|
||||
import io.reactivex.Single;
|
||||
|
||||
public class OpenRoomHelper {
|
||||
|
||||
public static void openRoom(BaseActivity activity) {
|
||||
@@ -135,6 +137,25 @@ public class OpenRoomHelper {
|
||||
|
||||
}
|
||||
|
||||
public static Single<RoomInfo> updateRoomInfoRx(RoomInfo roomInfo, int type, long gameId) {
|
||||
RoomSettingModel roomSettingModel = new RoomSettingModel();
|
||||
return roomSettingModel.updateRoomInfo(
|
||||
roomInfo.getTitle(),
|
||||
roomInfo.getRoomDesc(),
|
||||
roomInfo.getIntroduction(),
|
||||
roomInfo.roomPwd,
|
||||
roomInfo.getRoomTypeLable(),
|
||||
roomInfo.tagId,
|
||||
roomInfo.getUid(),
|
||||
AuthModel.get().getTicket(),
|
||||
roomInfo.isHasAnimationEffect(),
|
||||
roomInfo.getAudioQuality(),
|
||||
roomInfo.getLimitType(),
|
||||
roomInfo.isPureMode(),
|
||||
type,
|
||||
gameId);
|
||||
}
|
||||
|
||||
public static void updateRoomInfo(BaseActivity activity, RoomInfo roomInfo, int type, long gameId, boolean needOpen) {
|
||||
RoomSettingModel roomSettingModel = new RoomSettingModel();
|
||||
roomSettingModel.updateRoomInfo(
|
||||
|
@@ -15,7 +15,12 @@ import androidx.databinding.DataBindingUtil;
|
||||
|
||||
import com.bumptech.glide.request.RequestOptions;
|
||||
import com.chwl.app.ui.login.LoginPasswordActivity;
|
||||
import com.chwl.core.auth.AuthModel;
|
||||
import com.chwl.core.bean.response.result.TicketResult;
|
||||
import com.chwl.core.gift.GiftModel;
|
||||
import com.chwl.library.language.LanguageHelper;
|
||||
import com.chwl.library.utils.SingleToastUtil;
|
||||
import com.example.lib_utils.log.LogUtil;
|
||||
import com.netease.nim.uikit.StatusBarUtil;
|
||||
import com.netease.nim.uikit.support.glide.GlideApp;
|
||||
import com.chwl.app.MainActivity;
|
||||
@@ -32,6 +37,10 @@ import com.chwl.core.utils.OaidUtil;
|
||||
import com.chwl.core.utils.SharedPreferenceUtils;
|
||||
import com.chwl.library.common.util.DeviceUtil;
|
||||
|
||||
import io.reactivex.SingleObserver;
|
||||
import io.reactivex.disposables.CompositeDisposable;
|
||||
import io.reactivex.disposables.Disposable;
|
||||
|
||||
/**
|
||||
* @author xiaoyu
|
||||
* @date 2017/12/30
|
||||
@@ -43,8 +52,15 @@ public class SplashActivity extends AppCompatActivity implements View.OnClickLis
|
||||
private ActivitySplashBinding mBinding;
|
||||
private SplashComponent mLocalSplashVo;
|
||||
|
||||
private CompositeDisposable disposable = new CompositeDisposable();
|
||||
|
||||
// ticket状态 -1:加载失败、0:加载中、1:加载成功
|
||||
private int ticketState = 0;
|
||||
|
||||
private volatile boolean needJump = false;
|
||||
|
||||
private Runnable jumpRunnable;
|
||||
|
||||
public static void start(Context context) {
|
||||
Intent starter = new Intent(context, SplashActivity.class);
|
||||
context.startActivity(starter);
|
||||
@@ -72,9 +88,10 @@ public class SplashActivity extends AppCompatActivity implements View.OnClickLis
|
||||
// 从堆栈恢复,不再重复解析之前的intent
|
||||
setIntent(new Intent());
|
||||
}
|
||||
initiate();
|
||||
StatusBarUtil.transparencyBar(this);
|
||||
StatusBarUtil.StatusBarLightMode(this);
|
||||
initTicket();
|
||||
initiate();
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -145,8 +162,12 @@ public class SplashActivity extends AppCompatActivity implements View.OnClickLis
|
||||
}
|
||||
|
||||
public void jumpActivity(Intent intent) {
|
||||
AccountInfo currentAccountInfo = DemoCache.readCurrentAccountInfo();
|
||||
if (currentAccountInfo == null || TextUtils.isEmpty(currentAccountInfo.getAccess_token())) {
|
||||
jumpRunnable = () -> jumpActivityImpl(intent);
|
||||
next();
|
||||
}
|
||||
|
||||
public void jumpActivityImpl(Intent intent) {
|
||||
if (!AuthModel.get().isLogin()) {
|
||||
NimMiddleActivity.openCommunity = false;
|
||||
LoginPasswordActivity.start(this);
|
||||
finish();
|
||||
@@ -190,4 +211,53 @@ public class SplashActivity extends AppCompatActivity implements View.OnClickLis
|
||||
|
||||
}
|
||||
|
||||
private void initTicket() {
|
||||
ticketState = 0;
|
||||
if (!AuthModel.get().isLogin()) {
|
||||
ticketState = -1;
|
||||
next();
|
||||
return;
|
||||
}
|
||||
AuthModel.get().refreshTicket().subscribe(new SingleObserver<TicketResult>() {
|
||||
@Override
|
||||
public void onSubscribe(Disposable d) {
|
||||
disposable.add(d);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onSuccess(TicketResult ticketResult) {
|
||||
LogUtil.d("SplashActivity", "initTicket onSuccess", false);
|
||||
onTicketSuccess();
|
||||
ticketState = 1;
|
||||
next();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onError(Throwable throwable) {
|
||||
LogUtil.d("SplashActivity", "initTicket throwable:" + throwable.getMessage(), false);
|
||||
SingleToastUtil.showToast(throwable.getMessage());
|
||||
AuthModel.get().reset();
|
||||
ticketState = -1;
|
||||
next();
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
private void onTicketSuccess() {
|
||||
GiftModel.get().tryLoadGiftList();
|
||||
}
|
||||
|
||||
private void next() {
|
||||
if (ticketState != 0 && jumpRunnable != null) {
|
||||
jumpRunnable.run();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onDestroy() {
|
||||
super.onDestroy();
|
||||
if (disposable != null && !disposable.isDisposed()) {
|
||||
disposable.dispose();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@@ -15,6 +15,7 @@ import com.chwl.library.common.util.AlbumUtils;
|
||||
import com.chwl.library.common.util.ExecutorCenter;
|
||||
import com.chwl.library.utils.ResUtil;
|
||||
import com.example.matisse.internal.entity.CustomItem;
|
||||
import com.netease.nim.uikit.StatusBarUtil;
|
||||
import com.netease.nim.uikit.common.util.log.LogUtil;
|
||||
|
||||
import java.util.ArrayList;
|
||||
@@ -192,4 +193,16 @@ public class BigPhotoActivity extends BaseViewBindingActivity<ActivityBigPhotoBi
|
||||
super.finish();
|
||||
}
|
||||
|
||||
@Override
|
||||
protected boolean needSteepStateBar() {
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void setStatusBar() {
|
||||
super.setStatusBar();
|
||||
StatusBarUtil.transparencyBar(this);
|
||||
StatusBarUtil.StatusBarLightMode(this);
|
||||
}
|
||||
|
||||
}
|
||||
|
@@ -0,0 +1,76 @@
|
||||
package com.chwl.app.photo;
|
||||
|
||||
import android.content.Context;
|
||||
import android.view.ViewGroup;
|
||||
import android.widget.ImageView;
|
||||
|
||||
import androidx.annotation.Nullable;
|
||||
import androidx.constraintlayout.widget.ConstraintLayout;
|
||||
|
||||
import com.chad.library.adapter.base.BaseQuickAdapter;
|
||||
import com.chad.library.adapter.base.BaseViewHolder;
|
||||
import com.chwl.app.R;
|
||||
import com.chwl.app.ui.utils.ImageLoadUtilsV2;
|
||||
import com.chwl.app.ui.widget.magicindicator.buildins.UIUtil;
|
||||
import com.chwl.core.community.bean.DynamicMedia;
|
||||
import com.chwl.library.utils.ScreenUtils;
|
||||
import com.chwl.library.utils.config.BasicConfig;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import lombok.Setter;
|
||||
|
||||
public class DynamicImageAdapter extends BaseQuickAdapter<DynamicMedia, BaseViewHolder> {
|
||||
|
||||
private Context context;
|
||||
@Setter
|
||||
private int mTwoImageHeight;
|
||||
@Setter
|
||||
private int mThreeImageHeight;
|
||||
|
||||
private int imageWidth;
|
||||
|
||||
private int bigImageWidth;
|
||||
|
||||
@Setter
|
||||
private int singleImageHeight;
|
||||
|
||||
public DynamicImageAdapter(int layoutResId, @Nullable List<DynamicMedia> data) {
|
||||
super(layoutResId, data);
|
||||
context = BasicConfig.INSTANCE.getAppContext();
|
||||
imageWidth = UIUtil.getScreenWidth(context) * 2 / 5;
|
||||
bigImageWidth = UIUtil.getScreenWidth(context);
|
||||
|
||||
mTwoImageHeight = (ScreenUtils.getScreenWidth(context) - UIUtil.dip2px(context, 50F)) / 2;
|
||||
mThreeImageHeight = (ScreenUtils.getScreenWidth(context) - UIUtil.dip2px(context, 60F)) / 3;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void convert(BaseViewHolder helper, DynamicMedia item) {
|
||||
ImageView ivPhoto = helper.getView(R.id.riv_photo);
|
||||
helper.setGone(R.id.iv_gif_tag, item.isGif());
|
||||
ViewGroup.LayoutParams layoutParams = ivPhoto.getLayoutParams();
|
||||
if (helper.itemView instanceof ConstraintLayout && getData().size() > 1) {
|
||||
ImageLoadUtilsV2.loadImage(ivPhoto, item.getResUrl(), imageWidth);
|
||||
} else {
|
||||
switch (getData().size()) {
|
||||
case 1:
|
||||
layoutParams.height = singleImageHeight;
|
||||
ivPhoto.setLayoutParams(layoutParams);
|
||||
ImageLoadUtilsV2.loadImage(ivPhoto, item.getResUrl(), bigImageWidth);
|
||||
break;
|
||||
case 2:
|
||||
layoutParams.height = mTwoImageHeight;
|
||||
ivPhoto.setLayoutParams(layoutParams);
|
||||
ImageLoadUtilsV2.loadImage(ivPhoto, item.getResUrl(), imageWidth);
|
||||
break;
|
||||
case 3:
|
||||
default:
|
||||
layoutParams.height = mThreeImageHeight;
|
||||
ivPhoto.setLayoutParams(layoutParams);
|
||||
ImageLoadUtilsV2.loadImage(ivPhoto, item.getResUrl(), imageWidth);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
@@ -3,7 +3,7 @@ package com.chwl.app.support
|
||||
import androidx.lifecycle.viewModelScope
|
||||
import com.chwl.app.BuildConfig
|
||||
import com.chwl.app.base.BaseViewModel
|
||||
import com.chwl.core.helper.PathHelper
|
||||
import com.chwl.library.utils.PathHelper
|
||||
import com.chwl.core.home.model.HomeModel
|
||||
import com.chwl.library.common.util.SPUtils
|
||||
import com.chwl.library.download.DownloadException
|
||||
|
50
app/src/main/java/com/chwl/app/ui/debug/DebugActivity.kt
Normal file
50
app/src/main/java/com/chwl/app/ui/debug/DebugActivity.kt
Normal file
@@ -0,0 +1,50 @@
|
||||
package com.chwl.app.ui.debug
|
||||
|
||||
import com.chwl.app.base.BaseViewBindingActivity
|
||||
import com.chwl.app.databinding.DebugActivityBinding
|
||||
import com.netease.nim.uikit.StatusBarUtil
|
||||
|
||||
class DebugActivity : BaseViewBindingActivity<DebugActivityBinding>() {
|
||||
override fun init() {
|
||||
initWhiteTitleBar("调试")
|
||||
initSVGAList()
|
||||
}
|
||||
|
||||
private fun initSVGAList() {
|
||||
val adapter = DebugAdapter()
|
||||
binding.recyclerView.adapter = adapter
|
||||
// binding.recyclerView.setItemViewCacheSize(-1)
|
||||
val svgaList = listOf(
|
||||
"https://image.pekolive.com/花和玫瑰.svga",
|
||||
"https://image.pekolive.com/firecrown.svga",
|
||||
"https://image.pekolive.com/ningtangchengbaoqietu.svga",
|
||||
"https://image.pekolive.com/xunmengfengche.svga",
|
||||
"https://image.pekolive.com/tonghuaqiyuan1334.svga",
|
||||
"https://image.pekolive.com/mengquyinhe.svga",
|
||||
"https://image.pekolive.com/duqinghuashu.svga",
|
||||
"https://image.pekolive.com/juzhijingling.svga",
|
||||
"https://image.pekolive.com/3121_aixintouwei.svga",
|
||||
"https://image.pekolive.com/4051_langmanyewan.svga"
|
||||
)
|
||||
val list = ArrayList<String>()
|
||||
list.addAll(svgaList)
|
||||
list.addAll(svgaList)
|
||||
adapter.setNewData(list)
|
||||
binding.btnRefreshAll.setOnClickListener {
|
||||
adapter.notifyDataSetChanged()
|
||||
}
|
||||
binding.btnRefresh.setOnClickListener {
|
||||
adapter.notifyItemChanged(5, true)
|
||||
}
|
||||
}
|
||||
|
||||
override fun needSteepStateBar(): Boolean {
|
||||
return true
|
||||
}
|
||||
|
||||
override fun setStatusBar() {
|
||||
super.setStatusBar()
|
||||
StatusBarUtil.transparencyBar(this)
|
||||
StatusBarUtil.StatusBarLightMode(this)
|
||||
}
|
||||
}
|
47
app/src/main/java/com/chwl/app/ui/debug/DebugAdapter.kt
Normal file
47
app/src/main/java/com/chwl/app/ui/debug/DebugAdapter.kt
Normal file
@@ -0,0 +1,47 @@
|
||||
package com.chwl.app.ui.debug
|
||||
|
||||
import com.chad.library.adapter.base.BaseQuickAdapter
|
||||
import com.chad.library.adapter.base.BaseViewHolder
|
||||
import com.chwl.app.R
|
||||
import com.chwl.library.widget.SVGAView
|
||||
import com.example.lib_utils.log.ILog
|
||||
|
||||
class DebugAdapter : BaseQuickAdapter<String, BaseViewHolder>(R.layout.debug_item_svga), ILog {
|
||||
|
||||
private val svgaCache = SVGAView.newCache(10)
|
||||
override fun convertPayloads(
|
||||
helper: BaseViewHolder,
|
||||
item: String?,
|
||||
payloads: MutableList<Any>
|
||||
) {
|
||||
super.convertPayloads(helper, item, payloads)
|
||||
logD("convertPayloads holder:${helper.absoluteAdapterPosition} #${helper.hashCode()} SVGAView")
|
||||
val svgaView = helper.getView<SVGAView>(R.id.svga_view)
|
||||
svgaView.loadUrl(item)
|
||||
}
|
||||
|
||||
override fun convert(helper: BaseViewHolder, item: String?) {
|
||||
logD("convert holder:${helper.absoluteAdapterPosition} #${helper.hashCode()} SVGAView")
|
||||
helper.setText(R.id.tv_name, helper.absoluteAdapterPosition.toString())
|
||||
val item = getItem(helper.bindingAdapterPosition)
|
||||
val svgaView = helper.getView<SVGAView>(R.id.svga_view)
|
||||
svgaView.bindCache(svgaCache)
|
||||
svgaView.setLogTag(helper.absoluteAdapterPosition.toString())
|
||||
svgaView.loadUrl(item)
|
||||
}
|
||||
|
||||
override fun onViewAttachedToWindow(holder: BaseViewHolder) {
|
||||
super.onViewAttachedToWindow(holder)
|
||||
logD("onViewAttachedToWindow holder:${holder.absoluteAdapterPosition} #${holder.hashCode()} SVGAView")
|
||||
// val item = getItem(holder.bindingAdapterPosition)
|
||||
// val svgaView = holder.getView<SVGAView>(R.id.svga_view)
|
||||
// svgaView.bindCache(SVGAView.newCache(10))
|
||||
// svgaView.setLogTag(holder.absoluteAdapterPosition.toString())
|
||||
// svgaView.loadUrl(item)
|
||||
}
|
||||
|
||||
override fun onViewDetachedFromWindow(holder: BaseViewHolder) {
|
||||
super.onViewDetachedFromWindow(holder)
|
||||
logD("onViewDetachedFromWindow holder:${holder.absoluteAdapterPosition} #${holder.hashCode()} SVGAView")
|
||||
}
|
||||
}
|
@@ -0,0 +1,61 @@
|
||||
package com.chwl.app.ui.feedback
|
||||
|
||||
import android.content.ClipData
|
||||
import android.content.ClipboardManager
|
||||
import android.content.Context
|
||||
import android.view.WindowManager
|
||||
import com.chwl.app.R
|
||||
import com.chwl.app.base.BaseBindingDialog
|
||||
import com.chwl.app.databinding.FeedbackCustomerServiceDialogBinding
|
||||
import com.chwl.app.ui.widget.recyclerview.decoration.SpacingDecoration
|
||||
import com.chwl.library.annatation.ActLayoutRes
|
||||
import com.chwl.library.utils.SingleToastUtil
|
||||
|
||||
@ActLayoutRes(R.layout.feedback_customer_service_dialog)
|
||||
class CustomerServiceDialog(context: Context, val map: Map<String, String?>) :
|
||||
BaseBindingDialog<FeedbackCustomerServiceDialogBinding>(context, R.style.dialog) {
|
||||
private val adapter = CustomerServiceItemAdapter()
|
||||
|
||||
override fun onStart() {
|
||||
width = WindowManager.LayoutParams.MATCH_PARENT
|
||||
super.onStart()
|
||||
}
|
||||
|
||||
override fun init() {
|
||||
binding.layoutRoot.setOnClickListener {
|
||||
dismiss()
|
||||
}
|
||||
binding.tvNext.setOnClickListener {
|
||||
dismiss()
|
||||
}
|
||||
binding.recyclerView.addItemDecoration(
|
||||
SpacingDecoration(
|
||||
0,
|
||||
context.resources.getDimensionPixelOffset(R.dimen.dp_10),
|
||||
false
|
||||
)
|
||||
)
|
||||
binding.recyclerView.adapter = adapter
|
||||
val list = map.map {
|
||||
it
|
||||
}
|
||||
adapter.setNewData(list)
|
||||
adapter.setOnItemChildClickListener { adapter, view, position ->
|
||||
val text = this.adapter.getItem(position)?.value
|
||||
if (text != null) {
|
||||
copyText(text)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private fun copyText(text: String) {
|
||||
try {
|
||||
val cm =
|
||||
context?.getSystemService(Context.CLIPBOARD_SERVICE) as ClipboardManager
|
||||
cm.setPrimaryClip(ClipData.newPlainText("text", text))
|
||||
SingleToastUtil.showToast(R.string.have_copy)
|
||||
} catch (e: Exception) {
|
||||
SingleToastUtil.showToast(e.toString())
|
||||
}
|
||||
}
|
||||
}
|
@@ -0,0 +1,34 @@
|
||||
package com.chwl.app.ui.feedback
|
||||
|
||||
import android.annotation.SuppressLint
|
||||
import android.view.Gravity
|
||||
import android.view.ViewGroup
|
||||
import android.widget.TextView
|
||||
import com.chad.library.adapter.base.BaseQuickAdapter
|
||||
import com.chad.library.adapter.base.BaseViewHolder
|
||||
import com.chwl.app.R
|
||||
import com.example.lib_utils.AppUtils
|
||||
import com.example.lib_utils.UiUtils
|
||||
|
||||
class CustomerServiceItemAdapter :
|
||||
BaseQuickAdapter<Map.Entry<String, String?>, BaseViewHolder>(R.layout.feedback_customer_service_item) {
|
||||
|
||||
private var isRTL = UiUtils.isRtl(AppUtils.getApp())
|
||||
|
||||
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): BaseViewHolder {
|
||||
return super.onCreateViewHolder(parent, viewType).apply {
|
||||
this.addOnClickListener(R.id.layout_copy)
|
||||
val textView = getView<TextView>(R.id.tv_content)
|
||||
if (isRTL) {
|
||||
textView.gravity = Gravity.RIGHT
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@SuppressLint("SetTextI18n")
|
||||
override fun convert(helper: BaseViewHolder, item: Map.Entry<String, String?>) {
|
||||
val textView = helper.getView<TextView>(R.id.tv_content)
|
||||
textView.text = "${item.key}: ${item.value ?: ""}"
|
||||
}
|
||||
|
||||
}
|
353
app/src/main/java/com/chwl/app/ui/feedback/FeedbackActivity.kt
Normal file
353
app/src/main/java/com/chwl/app/ui/feedback/FeedbackActivity.kt
Normal file
@@ -0,0 +1,353 @@
|
||||
package com.chwl.app.ui.feedback
|
||||
|
||||
import android.Manifest
|
||||
import android.annotation.SuppressLint
|
||||
import android.content.Intent
|
||||
import android.os.Build
|
||||
import android.widget.ImageView.ScaleType
|
||||
import androidx.activity.viewModels
|
||||
import androidx.lifecycle.Lifecycle
|
||||
import androidx.lifecycle.lifecycleScope
|
||||
import androidx.lifecycle.repeatOnLifecycle
|
||||
import com.chwl.app.R
|
||||
import com.chwl.app.base.BaseViewBindingActivity
|
||||
import com.chwl.app.databinding.FeedbackActivityBinding
|
||||
import com.chwl.app.ui.utils.load
|
||||
import com.chwl.app.ui.widget.dialog.CommonTipDialog
|
||||
import com.chwl.core.file.FileModel
|
||||
import com.chwl.core.home.bean.FeedbackTypeBean
|
||||
import com.chwl.library.common.photo.PhotoProvider
|
||||
import com.chwl.library.common.photo.PhotoProvider.photoProvider
|
||||
import com.chwl.library.common.util.PhotoCompressUtil
|
||||
import com.chwl.library.common.util.PhotosCompressCallback
|
||||
import com.chwl.library.easypermisssion.EasyPermissions
|
||||
import com.chwl.library.easyphoto.utils.settings.SettingsUtils
|
||||
import com.chwl.library.utils.ResUtil
|
||||
import com.chwl.library.utils.SingleToastUtil
|
||||
import com.example.lib_utils.SolveEditTextScrollClash
|
||||
import com.example.lib_utils.ktx.getColorById
|
||||
import com.example.lib_utils.ktx.setOnInputChangedListener
|
||||
import com.example.lib_utils.ktx.singleClick
|
||||
import com.example.lib_utils.spannable.SpannableTextBuilder
|
||||
import com.google.android.flexbox.FlexDirection
|
||||
import com.google.android.flexbox.FlexWrap
|
||||
import com.google.android.flexbox.FlexboxLayoutManager
|
||||
import com.google.android.flexbox.JustifyContent
|
||||
import com.hjq.toast.ToastUtils
|
||||
import com.netease.nim.uikit.StatusBarUtil
|
||||
import kotlinx.coroutines.Job
|
||||
import kotlinx.coroutines.flow.collectLatest
|
||||
import kotlinx.coroutines.launch
|
||||
|
||||
class FeedbackActivity : BaseViewBindingActivity<FeedbackActivityBinding>(),
|
||||
EasyPermissions.PermissionCallbacks {
|
||||
|
||||
private val PERMISSION_CODE_STORAGE = 12
|
||||
private val REQUEST_CODE_OPEN_PHOTO_PROVIDER = 111 // 从相册中选择
|
||||
|
||||
private val viewModel: FeedbackViewModel by viewModels()
|
||||
private val adapter = FeedbackTypeAdapter()
|
||||
private var compressJob: Job? = null
|
||||
private var wantShowCustomerService = false
|
||||
private var imagePath: String? = null
|
||||
private var imageUrl: String? = null
|
||||
|
||||
override fun init() {
|
||||
initWhiteTitleBar(ResUtil.getString(R.string.feedback_title))
|
||||
initView()
|
||||
initEvent()
|
||||
initObserve()
|
||||
refreshSubmitState()
|
||||
}
|
||||
|
||||
private fun initView() {
|
||||
val flexBoxLayoutManager = FlexboxLayoutManager(context)
|
||||
flexBoxLayoutManager.flexDirection = FlexDirection.ROW
|
||||
flexBoxLayoutManager.flexWrap = FlexWrap.WRAP
|
||||
flexBoxLayoutManager.justifyContent = JustifyContent.FLEX_START
|
||||
binding.recyclerViewType.layoutManager = flexBoxLayoutManager
|
||||
binding.recyclerViewType.adapter = adapter
|
||||
binding.etContent.setOnTouchListener(SolveEditTextScrollClash(binding.etContent))
|
||||
}
|
||||
|
||||
private fun initEvent() {
|
||||
adapter.setOnItemClickListener { adapter, view, position ->
|
||||
this.adapter.selectItem(this.adapter.getItem(position))
|
||||
refreshSubmitState()
|
||||
}
|
||||
binding.tvSubmit.singleClick {
|
||||
dialogManager.showProgressDialog(this)
|
||||
submit()
|
||||
}
|
||||
binding.ivImage.singleClick {
|
||||
checkStoragePermission()
|
||||
}
|
||||
binding.ivCustomerService.singleClick {
|
||||
showCustomerServiceDialog()
|
||||
}
|
||||
binding.etContent.setOnInputChangedListener {
|
||||
updateContentInputTips(this)
|
||||
refreshSubmitState()
|
||||
true
|
||||
}
|
||||
binding.etContact.setOnInputChangedListener {
|
||||
refreshSubmitState()
|
||||
true
|
||||
}
|
||||
}
|
||||
|
||||
private fun initObserve() {
|
||||
viewModel.loadingLiveData.observe(this) {
|
||||
if (it) dialogManager.showProgressDialog(this)
|
||||
else dialogManager.dismissDialog()
|
||||
}
|
||||
viewModel.configLiveData.observe(this) {
|
||||
if (it?.isSuccess == true) {
|
||||
loadTypeList(it.data?.typeEnumList)
|
||||
if (wantShowCustomerService) {
|
||||
showCustomerServiceDialog(it.data?.customContactMap)
|
||||
}
|
||||
} else if (it?.message != null) {
|
||||
toast(it.message ?: "")
|
||||
}
|
||||
wantShowCustomerService = false
|
||||
}
|
||||
lifecycleScope.launch {
|
||||
repeatOnLifecycle(Lifecycle.State.RESUMED) {
|
||||
viewModel.submitStateFlow.collectLatest {
|
||||
dialogManager.dismissDialog()
|
||||
if (it.isSuccess) {
|
||||
toast(R.string.home_model_homemodel_01)
|
||||
finish()
|
||||
} else if (it.message != null) {
|
||||
toast(it.message)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private fun updateContentInputTips(length: Int) {
|
||||
if (length > 0) {
|
||||
SpannableTextBuilder(binding.tvContentCount)
|
||||
.appendText(
|
||||
text = length.toString(),
|
||||
textColor = getColorById(R.color.color_3FDDAC)
|
||||
)
|
||||
.appendText(text = "/300")
|
||||
.apply()
|
||||
} else {
|
||||
binding.tvContentCount.text = "${length}/300"
|
||||
}
|
||||
}
|
||||
|
||||
private fun showCustomerServiceDialog() {
|
||||
val config = viewModel.configLiveData.value?.data
|
||||
if (config == null) {
|
||||
wantShowCustomerService = true
|
||||
viewModel.getConfig()
|
||||
return
|
||||
}
|
||||
showCustomerServiceDialog(config.customContactMap)
|
||||
}
|
||||
|
||||
private fun showCustomerServiceDialog(info: Map<String, String>?) {
|
||||
if (info.isNullOrEmpty()) {
|
||||
return
|
||||
}
|
||||
CustomerServiceDialog(this, info).show()
|
||||
}
|
||||
|
||||
private fun loadTypeList(type: List<FeedbackTypeBean>?) {
|
||||
adapter.setNewData(type)
|
||||
}
|
||||
|
||||
private fun onAddImage(path: String?) {
|
||||
if (path.isNullOrEmpty()) {
|
||||
imagePath = null
|
||||
imageUrl = null
|
||||
binding.ivImage.scaleType = ScaleType.CENTER_INSIDE
|
||||
binding.ivImage.setImageResource(R.drawable.feedback_ic_add)
|
||||
} else {
|
||||
imagePath = path
|
||||
imageUrl = null
|
||||
binding.ivImage.load(path)
|
||||
binding.ivImage.scaleType = ScaleType.CENTER_CROP
|
||||
}
|
||||
refreshSubmitState()
|
||||
}
|
||||
|
||||
private fun refreshSubmitState() {
|
||||
binding.tvSubmit.isEnabled = canSubmit()
|
||||
}
|
||||
|
||||
private fun canSubmit(): Boolean {
|
||||
if (binding.etContent.text.isNullOrEmpty()) {
|
||||
return false
|
||||
}
|
||||
if (binding.etContact.text.isNullOrEmpty()) {
|
||||
return false
|
||||
}
|
||||
if (adapter.getSelectItem() == null) {
|
||||
return false
|
||||
}
|
||||
return true
|
||||
}
|
||||
|
||||
private fun submit() {
|
||||
val content = binding.etContent.text.trim().toString()
|
||||
val contact = binding.etContact.text.trim().toString()
|
||||
val type = adapter.getSelectItem()?.type ?: ""
|
||||
val imagePath = imagePath
|
||||
if (imagePath != null && imageUrl == null) {
|
||||
uploadImage(imagePath, {
|
||||
imageUrl = it
|
||||
submit()
|
||||
}, {
|
||||
if (it != null) {
|
||||
toast(ResUtil.getString(R.string.ui_user_userinfomodifyactivity_08) + ":${it.message}")
|
||||
}
|
||||
dialogManager.dismissDialog()
|
||||
})
|
||||
} else {
|
||||
viewModel.submitFeedback(
|
||||
type = type,
|
||||
content = content,
|
||||
image = imageUrl ?: "",
|
||||
contact = contact
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
@SuppressLint("CheckResult")
|
||||
private fun uploadImage(path: String, success: (String) -> Unit, failed: (Throwable?) -> Unit) {
|
||||
FileModel.get()
|
||||
.uploadFile(path)
|
||||
.compose(bindToLifecycle())
|
||||
.subscribe { url: String?, throwable: Throwable? ->
|
||||
if (url != null) {
|
||||
success.invoke(url)
|
||||
} else {
|
||||
failed.invoke(throwable)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
|
||||
super.onActivityResult(requestCode, resultCode, data)
|
||||
if (resultCode == RESULT_OK) {
|
||||
if (requestCode == REQUEST_CODE_OPEN_PHOTO_PROVIDER) {
|
||||
if (data == null) {
|
||||
return
|
||||
}
|
||||
PhotoProvider.getResultPathListAsync(data) { list ->
|
||||
if (list.isNullOrEmpty()) {
|
||||
SingleToastUtil.showToastShort(com.netease.nim.uikit.R.string.picker_image_error)
|
||||
return@getResultPathListAsync
|
||||
}
|
||||
val paths = list.map { it.path }.toMutableList()
|
||||
compressPhotos(paths)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
override fun onRequestPermissionsResult(
|
||||
requestCode: Int,
|
||||
permissions: Array<String?>,
|
||||
grantResults: IntArray
|
||||
) {
|
||||
super.onRequestPermissionsResult(requestCode, permissions, grantResults)
|
||||
EasyPermissions.onRequestPermissionsResult(requestCode, permissions, grantResults, this)
|
||||
}
|
||||
|
||||
private fun checkStoragePermission() {
|
||||
if (!EasyPermissions.hasPermissions(
|
||||
this,
|
||||
if (Build.VERSION.SDK_INT >= 33) Manifest.permission.READ_MEDIA_IMAGES else Manifest.permission.READ_EXTERNAL_STORAGE
|
||||
)
|
||||
) {
|
||||
EasyPermissions.requestPermissions(
|
||||
this,
|
||||
getString(R.string.permission_storage_rationale),
|
||||
PERMISSION_CODE_STORAGE,
|
||||
if (Build.VERSION.SDK_INT >= 33) Manifest.permission.READ_MEDIA_IMAGES else Manifest.permission.READ_EXTERNAL_STORAGE
|
||||
)
|
||||
} else {
|
||||
photoProvider(
|
||||
this,
|
||||
1,
|
||||
true,
|
||||
REQUEST_CODE_OPEN_PHOTO_PROVIDER,
|
||||
true,
|
||||
true
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
private fun compressPhotos(paths: MutableList<String>) {
|
||||
compressJob?.cancel(null)
|
||||
compressJob = PhotoCompressUtil.compress(
|
||||
this, paths,
|
||||
PhotoCompressUtil.getCompressCachePath(),
|
||||
object : PhotosCompressCallback {
|
||||
override fun onSuccess(compressedImgList: ArrayList<String>) {
|
||||
val firstItem = compressedImgList.firstOrNull() ?: return
|
||||
onAddImage(firstItem)
|
||||
}
|
||||
|
||||
override fun onFail(e: Throwable) {
|
||||
ToastUtils.show(getString(R.string.picker_image_error))
|
||||
}
|
||||
}
|
||||
)
|
||||
}
|
||||
|
||||
override fun needSteepStateBar(): Boolean {
|
||||
return true
|
||||
}
|
||||
|
||||
override fun setStatusBar() {
|
||||
super.setStatusBar()
|
||||
StatusBarUtil.transparencyBar(this)
|
||||
StatusBarUtil.StatusBarLightMode(this)
|
||||
}
|
||||
|
||||
override fun onPermissionsGranted(requestCode: Int, perms: MutableList<String>) {
|
||||
if (requestCode == PERMISSION_CODE_STORAGE) {
|
||||
checkStoragePermission()
|
||||
}
|
||||
}
|
||||
|
||||
override fun onPermissionsDenied(requestCode: Int, perms: MutableList<String>) {
|
||||
if (requestCode == PERMISSION_CODE_STORAGE) {
|
||||
val requestTip = getString(R.string.permission_storage_denied)
|
||||
val mPrivacyDialog = CommonTipDialog(context)
|
||||
mPrivacyDialog.setTipMsg(requestTip)
|
||||
mPrivacyDialog.setOkText(getString(R.string.room_perform_go_update))
|
||||
mPrivacyDialog.setOnActionListener(object : CommonTipDialog.OnActionListener {
|
||||
override fun onOk() {
|
||||
//同意跳到应用详情页面
|
||||
SettingsUtils.startMyApplicationDetailsForResult(
|
||||
this@FeedbackActivity,
|
||||
packageName
|
||||
)
|
||||
}
|
||||
|
||||
override fun onCancel() {
|
||||
super.onCancel()
|
||||
//取消跳到应用详情页面
|
||||
ToastUtils.show(getString(R.string.permission_storage_refused))
|
||||
}
|
||||
})
|
||||
mPrivacyDialog.show()
|
||||
}
|
||||
}
|
||||
|
||||
override fun onResume() {
|
||||
super.onResume()
|
||||
if (viewModel.configLiveData.value?.data == null) {
|
||||
viewModel.getConfig()
|
||||
}
|
||||
}
|
||||
}
|
@@ -0,0 +1,42 @@
|
||||
package com.chwl.app.ui.feedback
|
||||
|
||||
import com.chad.library.adapter.base.BaseQuickAdapter
|
||||
import com.chad.library.adapter.base.BaseViewHolder
|
||||
import com.chwl.app.R
|
||||
import com.chwl.core.home.bean.FeedbackTypeBean
|
||||
|
||||
class FeedbackTypeAdapter : BaseQuickAdapter<FeedbackTypeBean, BaseViewHolder>(R.layout.feedback_item_type) {
|
||||
|
||||
private var selectItem: FeedbackTypeBean? = null
|
||||
|
||||
override fun convertPayloads(
|
||||
helper: BaseViewHolder,
|
||||
item: FeedbackTypeBean?,
|
||||
payloads: MutableList<Any>
|
||||
) {
|
||||
super.convertPayloads(helper, item, payloads)
|
||||
convertState(helper, item)
|
||||
}
|
||||
|
||||
override fun convert(helper: BaseViewHolder, item: FeedbackTypeBean?) {
|
||||
helper.setText(R.id.tv_name, item?.desc ?: "")
|
||||
convertState(helper, item)
|
||||
}
|
||||
|
||||
private fun convertState(helper: BaseViewHolder, item: FeedbackTypeBean?) {
|
||||
if (selectItem == item) {
|
||||
helper.setBackgroundRes(R.id.tv_name, R.drawable.shape_85f6d3_15dp)
|
||||
} else {
|
||||
helper.setBackgroundRes(R.id.tv_name, R.drawable.shape_f3f5fa_15dp)
|
||||
}
|
||||
}
|
||||
|
||||
fun selectItem(item: FeedbackTypeBean?) {
|
||||
this.selectItem = item
|
||||
notifyItemRangeChanged(0, itemCount, true)
|
||||
}
|
||||
|
||||
fun getSelectItem(): FeedbackTypeBean? {
|
||||
return selectItem
|
||||
}
|
||||
}
|
@@ -0,0 +1,36 @@
|
||||
package com.chwl.app.ui.feedback
|
||||
|
||||
import androidx.lifecycle.MutableLiveData
|
||||
import com.chwl.app.base.BaseViewModel
|
||||
import com.chwl.core.bean.response.BeanResult
|
||||
import com.chwl.core.home.bean.FeedbackConfigBean
|
||||
import com.chwl.core.home.model.HomeModel
|
||||
import kotlinx.coroutines.flow.MutableSharedFlow
|
||||
|
||||
class FeedbackViewModel : BaseViewModel() {
|
||||
val configLiveData = MutableLiveData<BeanResult<FeedbackConfigBean>?>()
|
||||
|
||||
val submitStateFlow = MutableSharedFlow<BeanResult<Any?>>()
|
||||
|
||||
fun getConfig() {
|
||||
safeLaunch(
|
||||
needLoading = true,
|
||||
onError = {
|
||||
configLiveData.postValue(BeanResult.failed(it))
|
||||
}) {
|
||||
val value = HomeModel.getFeedbackConfig()
|
||||
configLiveData.postValue(BeanResult.success(value))
|
||||
}
|
||||
}
|
||||
|
||||
fun submitFeedback(type: String, content: String, image: String, contact: String) {
|
||||
safeLaunch(
|
||||
needLoading = true,
|
||||
onError = {
|
||||
submitStateFlow.emit(BeanResult.failed(it))
|
||||
}) {
|
||||
val value = HomeModel.commitFeedback(contact, content, image, type)
|
||||
submitStateFlow.emit(BeanResult.success(value))
|
||||
}
|
||||
}
|
||||
}
|
@@ -0,0 +1,202 @@
|
||||
package com.chwl.app.ui.game_team.invite
|
||||
|
||||
import android.annotation.SuppressLint
|
||||
import android.os.Bundle
|
||||
import android.view.Gravity
|
||||
import android.view.WindowManager
|
||||
import androidx.fragment.app.viewModels
|
||||
import androidx.lifecycle.Lifecycle
|
||||
import androidx.lifecycle.lifecycleScope
|
||||
import androidx.lifecycle.repeatOnLifecycle
|
||||
import com.chwl.app.R
|
||||
import com.chwl.app.base.BaseDialogFragment
|
||||
import com.chwl.app.common.widget.dialog.DialogManager
|
||||
import com.chwl.app.databinding.GameTeamInviteDialogBinding
|
||||
import com.chwl.app.ui.pay.ChargeActivity
|
||||
import com.chwl.app.ui.utils.load
|
||||
import com.chwl.core.game_team.UserGameTeamInfo
|
||||
import com.chwl.core.pay.PayModel
|
||||
import com.chwl.core.pay.bean.WalletInfo
|
||||
import com.chwl.core.utils.net.BalanceNotEnoughExeption
|
||||
import com.chwl.library.utils.ResUtil
|
||||
import com.chwl.library.utils.SingleToastUtil
|
||||
import com.example.lib_utils.ktx.singleClick
|
||||
import kotlinx.coroutines.flow.collectLatest
|
||||
import kotlinx.coroutines.launch
|
||||
import java.math.BigDecimal
|
||||
import java.math.RoundingMode
|
||||
|
||||
|
||||
class GameTeamInviteDialog : BaseDialogFragment<GameTeamInviteDialogBinding>() {
|
||||
|
||||
private val viewModel: GameTeamInviteViewModel by viewModels()
|
||||
|
||||
override var width = WindowManager.LayoutParams.MATCH_PARENT
|
||||
override var gravity = Gravity.CENTER
|
||||
|
||||
private var gameId: Long = 0
|
||||
private var gameUid: Long = 0
|
||||
private var gameBackground: String? = null
|
||||
private var gamePrice: Long = 0
|
||||
private var gameInning: Long = 1
|
||||
private var dialogManager: DialogManager? = null
|
||||
|
||||
var successListener: (() -> Unit)? = null
|
||||
|
||||
companion object {
|
||||
fun newInstance(info: UserGameTeamInfo): GameTeamInviteDialog {
|
||||
return newInstance(info.uid ?: 0, info.gameId ?: 0, info.pic, info.price ?: 0, 1)
|
||||
}
|
||||
|
||||
fun newInstance(
|
||||
targetUid: Long,
|
||||
gameId: Long,
|
||||
gameBackground: String?,
|
||||
gamePrice: Long,
|
||||
gameInning: Long,
|
||||
): GameTeamInviteDialog {
|
||||
return GameTeamInviteDialog().apply {
|
||||
arguments = Bundle().apply {
|
||||
putLong("targetUid", targetUid)
|
||||
putLong("gameId", gameId)
|
||||
putSerializable("gameBackground", gameBackground)
|
||||
putLong("gamePrice", gamePrice)
|
||||
putLong("gameInning", gameInning)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
override fun init() {
|
||||
gameUid = arguments?.getLong("targetUid") ?: 0
|
||||
gameId = arguments?.getLong("gameId") ?: 0
|
||||
gameBackground = arguments?.getString("gameBackground")
|
||||
gamePrice = arguments?.getLong("gamePrice") ?: 0
|
||||
gameInning = arguments?.getLong("gameInning") ?: 1
|
||||
dialogManager = DialogManager(requireContext())
|
||||
initView()
|
||||
initEvent()
|
||||
initObserve()
|
||||
}
|
||||
|
||||
override fun onResume() {
|
||||
super.onResume()
|
||||
updateBalance()
|
||||
}
|
||||
|
||||
private fun initView() {
|
||||
binding.ivGameImage.load(gameBackground)
|
||||
updateInning(0)
|
||||
requestBalance()
|
||||
}
|
||||
|
||||
private fun initEvent() {
|
||||
binding.ivClose.setOnClickListener {
|
||||
safeDismiss()
|
||||
}
|
||||
|
||||
binding.tvPay.singleClick {
|
||||
pay()
|
||||
}
|
||||
|
||||
binding.layoutRecharge.setOnClickListener {
|
||||
ChargeActivity.start(context)
|
||||
}
|
||||
|
||||
binding.ivCountAdd.setOnClickListener {
|
||||
updateInning(1)
|
||||
}
|
||||
|
||||
binding.ivCountSubtract.setOnClickListener {
|
||||
updateInning(-1)
|
||||
}
|
||||
}
|
||||
|
||||
private fun initObserve() {
|
||||
viewLifecycleOwner.lifecycleScope.launch {
|
||||
viewLifecycleOwner.lifecycle.repeatOnLifecycle(Lifecycle.State.STARTED) {
|
||||
viewModel.payResultFlow.collectLatest {
|
||||
dialogManager?.dismissDialog()
|
||||
if (it.isSuccess) {
|
||||
successListener?.invoke()
|
||||
SingleToastUtil.showToast(R.string.game_team_19)
|
||||
safeDismiss()
|
||||
} else if (it.code == BalanceNotEnoughExeption.code) {
|
||||
showBalanceNotEnoughDialog()
|
||||
} else {
|
||||
it.message?.let { msg ->
|
||||
SingleToastUtil.showToast(msg)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private fun showBalanceNotEnoughDialog() {
|
||||
dialogManager?.showOkCancelDialog(
|
||||
ResUtil.getString(R.string.widget_dialog_dialoguihelper_04),
|
||||
ResUtil.getString(R.string.treasure_to_charge)
|
||||
) {
|
||||
ChargeActivity.start(context)
|
||||
}
|
||||
}
|
||||
|
||||
private fun pay() {
|
||||
dialogManager?.showProgressDialog(requireContext())
|
||||
viewModel.pay(gameId, gameUid, gameInning)
|
||||
}
|
||||
|
||||
private fun updateInning(add: Int) {
|
||||
var newInning = gameInning + add
|
||||
if (newInning <= 0) {
|
||||
newInning = 1
|
||||
}
|
||||
gameInning = newInning
|
||||
if (gameInning <= 1L) {
|
||||
binding.ivCountSubtract.setImageResource(R.drawable.game_team_invite_ic_subtract_disabled)
|
||||
binding.ivCountSubtract.isEnabled = false
|
||||
} else {
|
||||
binding.ivCountSubtract.setImageResource(R.drawable.game_team_invite_ic_subtract)
|
||||
binding.ivCountSubtract.isEnabled = true
|
||||
}
|
||||
binding.tvCount.text = gameInning.toString()
|
||||
updateMoney()
|
||||
}
|
||||
|
||||
private fun updateMoney() {
|
||||
val total = gamePrice * gameInning
|
||||
binding.tvMoney.text = total.toString()
|
||||
}
|
||||
|
||||
@SuppressLint("SetTextI18n")
|
||||
private fun updateBalance() {
|
||||
if (_binding == null) {
|
||||
return
|
||||
}
|
||||
val balanceTitle = getString(R.string.gift_wallet_overage)
|
||||
val balanceValue = PayModel.get().currentWalletInfo?.diamondNum ?: 0.0
|
||||
var balanceBigDecimal = BigDecimal.valueOf(balanceValue)
|
||||
balanceBigDecimal = balanceBigDecimal.setScale(0, RoundingMode.DOWN)
|
||||
binding.tvBalance.text = "$balanceTitle${balanceBigDecimal.toPlainString()}"
|
||||
}
|
||||
|
||||
@SuppressLint("CheckResult")
|
||||
private fun requestBalance() {
|
||||
PayModel.get().myRemoteWalletInfo.compose<WalletInfo>(bindToLifecycle())
|
||||
.subscribe { info: WalletInfo ->
|
||||
updateBalance()
|
||||
}
|
||||
}
|
||||
|
||||
override fun onDestroyView() {
|
||||
super.onDestroyView()
|
||||
dialogManager?.dismissDialog()
|
||||
dialogManager = null
|
||||
}
|
||||
|
||||
override fun onDestroy() {
|
||||
super.onDestroy()
|
||||
successListener = null
|
||||
}
|
||||
}
|
@@ -0,0 +1,22 @@
|
||||
package com.chwl.app.ui.game_team.invite
|
||||
|
||||
import com.chwl.app.base.BaseViewModel
|
||||
import com.chwl.core.auth.AuthModel
|
||||
import com.chwl.core.bean.response.BeanResult
|
||||
import com.chwl.core.room.game.GameModel
|
||||
import kotlinx.coroutines.flow.MutableSharedFlow
|
||||
|
||||
class GameTeamInviteViewModel : BaseViewModel() {
|
||||
|
||||
var payResultFlow = MutableSharedFlow<BeanResult<Any>>()
|
||||
|
||||
fun pay(gameId: Long, gameUid: Long, inning: Long) {
|
||||
safeLaunch(onError = {
|
||||
payResultFlow.emit(BeanResult.failed(it))
|
||||
}) {
|
||||
val result =
|
||||
GameModel.startGameTeam(gameId, gameUid, inning, AuthModel.get().currentUid)
|
||||
payResultFlow.emit(BeanResult.success(result))
|
||||
}
|
||||
}
|
||||
}
|
@@ -0,0 +1,63 @@
|
||||
package com.chwl.app.ui.game_team.record
|
||||
|
||||
import android.content.Context
|
||||
import android.content.Intent
|
||||
import android.widget.TextView
|
||||
import androidx.fragment.app.Fragment
|
||||
import com.chwl.app.R
|
||||
import com.chwl.app.avroom.adapter.CommonVPAdapter
|
||||
import com.chwl.app.base.BaseViewBindingActivity
|
||||
import com.chwl.app.databinding.GameTeamRecordActivityBinding
|
||||
import com.chwl.app.ui.widget.magicindicator.ViewPagerHelper
|
||||
import com.chwl.app.ui.widget.magicindicator.buildins.commonnavigator.CommonNavigator
|
||||
import com.chwl.library.utils.ResUtil
|
||||
import com.netease.nim.uikit.StatusBarUtil
|
||||
|
||||
class GameTeamRecordActivity : BaseViewBindingActivity<GameTeamRecordActivityBinding>() {
|
||||
|
||||
companion object {
|
||||
fun start(context: Context) {
|
||||
context.startActivity(Intent(context, GameTeamRecordActivity::class.java))
|
||||
}
|
||||
}
|
||||
|
||||
override fun init() {
|
||||
initWhiteTitleBar(ResUtil.getString(R.string.game_team_09))
|
||||
initTab()
|
||||
}
|
||||
|
||||
private fun initTab() {
|
||||
val fragmentList = ArrayList<Fragment>()
|
||||
fragmentList.add(GameTeamRecordFragment.newInstance(GameTeamRecordFragment.TYPE_INITIATOR))
|
||||
fragmentList.add(GameTeamRecordFragment.newInstance(GameTeamRecordFragment.TYPE_RECEIVER))
|
||||
val titleList = ArrayList<String>()
|
||||
titleList.add(getString(R.string.game_team_10))
|
||||
titleList.add(getString(R.string.game_team_11))
|
||||
val commonNavigator = CommonNavigator(context)
|
||||
commonNavigator.setTitleWrapContent(false)
|
||||
val magicIndicatorAdapter = GameTeamRecordIndicatorAdapter(context, titleList)
|
||||
magicIndicatorAdapter.setOnItemSelectListener { position: Int, view: TextView? ->
|
||||
binding.viewPager.currentItem = position
|
||||
}
|
||||
commonNavigator.adapter = magicIndicatorAdapter
|
||||
binding.magicIndicator.navigator = commonNavigator
|
||||
binding.viewPager.offscreenPageLimit = 2
|
||||
binding.viewPager.adapter = CommonVPAdapter(
|
||||
supportFragmentManager,
|
||||
lifecycle,
|
||||
fragmentList
|
||||
)
|
||||
binding.viewPager.isUserInputEnabled = false
|
||||
ViewPagerHelper.bind(binding.magicIndicator, binding.viewPager)
|
||||
}
|
||||
|
||||
override fun needSteepStateBar(): Boolean {
|
||||
return true
|
||||
}
|
||||
|
||||
override fun setStatusBar() {
|
||||
super.setStatusBar()
|
||||
StatusBarUtil.transparencyBar(this)
|
||||
StatusBarUtil.StatusBarLightMode(this)
|
||||
}
|
||||
}
|
@@ -0,0 +1,38 @@
|
||||
package com.chwl.app.ui.game_team.record
|
||||
|
||||
import android.view.View
|
||||
import android.widget.ImageView
|
||||
import androidx.core.view.isVisible
|
||||
import com.chad.library.adapter.base.BaseQuickAdapter
|
||||
import com.chad.library.adapter.base.BaseViewHolder
|
||||
import com.chwl.app.R
|
||||
import com.chwl.app.ui.utils.load
|
||||
import com.chwl.app.ui.utils.loadAvatar
|
||||
import com.chwl.core.game_team.GameTeamRecordBean
|
||||
|
||||
class GameTeamRecordAdapter :
|
||||
BaseQuickAdapter<GameTeamRecordBean, BaseViewHolder>(R.layout.game_team_record_item) {
|
||||
|
||||
var isInitiator = false
|
||||
|
||||
override fun convert(helper: BaseViewHolder, item: GameTeamRecordBean?) {
|
||||
helper.addOnClickListener(R.id.tv_repurchase, R.id.tv_chat, R.id.iv_order_id_copy)
|
||||
val userAvatarView = helper.getView<ImageView>(R.id.iv_user_avatar)
|
||||
val repurchaseView = helper.getView<View>(R.id.tv_repurchase)
|
||||
if (isInitiator) {
|
||||
repurchaseView.isVisible = true
|
||||
helper.setText(R.id.tv_user_name, item?.toNick ?: "")
|
||||
helper.setText(R.id.tv_user_id, item?.toErBanNo?.toString() ?: "")
|
||||
userAvatarView.load(item?.toAvatar)
|
||||
} else {
|
||||
repurchaseView.isVisible = false
|
||||
helper.setText(R.id.tv_user_name, item?.fromNick ?: "")
|
||||
helper.setText(R.id.tv_user_id, item?.fromErBanNo?.toString() ?: "")
|
||||
userAvatarView.load(item?.fromAvatar)
|
||||
}
|
||||
helper.setText(R.id.tv_game_name, item?.gameName ?: "")
|
||||
helper.setText(R.id.tv_order_money, item?.amount?.toString())
|
||||
helper.setText(R.id.tv_order_time, item?.orderTime)
|
||||
helper.setText(R.id.tv_order_id, item?.orderNo)
|
||||
}
|
||||
}
|
@@ -0,0 +1,154 @@
|
||||
package com.chwl.app.ui.game_team.record
|
||||
|
||||
import android.os.Bundle
|
||||
import androidx.fragment.app.viewModels
|
||||
import androidx.recyclerview.widget.LinearLayoutManager
|
||||
import com.chwl.app.R
|
||||
import com.chwl.app.base.BaseViewBindingFragment
|
||||
import com.chwl.app.common.EmptyViewHelper
|
||||
import com.chwl.app.databinding.GameTemaRecordFragmentBinding
|
||||
import com.chwl.app.ui.game_team.invite.GameTeamInviteDialog
|
||||
import com.chwl.app.ui.im.avtivity.NimP2PMessageActivity
|
||||
import com.chwl.app.ui.utils.RVDelegate
|
||||
import com.chwl.app.utils.ClipboardUtils
|
||||
import com.chwl.core.game_team.GameTeamRecordBean
|
||||
import com.chwl.library.utils.SingleToastUtil
|
||||
|
||||
class GameTeamRecordFragment : BaseViewBindingFragment<GameTemaRecordFragmentBinding>() {
|
||||
|
||||
companion object {
|
||||
const val TYPE_INITIATOR = 0
|
||||
const val TYPE_RECEIVER = 1
|
||||
fun newInstance(type: Int): GameTeamRecordFragment {
|
||||
return GameTeamRecordFragment().apply {
|
||||
arguments = Bundle().apply {
|
||||
putInt("type", type)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private val viewModel: GameTeamRecordViewModel by viewModels()
|
||||
private val adapter = GameTeamRecordAdapter()
|
||||
|
||||
private var type: Int = TYPE_INITIATOR
|
||||
|
||||
private var rvDelegate: RVDelegate<GameTeamRecordBean>? = null
|
||||
|
||||
private var pageNum = 1
|
||||
|
||||
private val pageSize = 20
|
||||
|
||||
override fun init() {
|
||||
type = arguments?.getInt("type", TYPE_INITIATOR) ?: TYPE_INITIATOR
|
||||
initView()
|
||||
initEvent()
|
||||
initObserve()
|
||||
binding.swipeRefresh.isRefreshing = true
|
||||
loadData(true)
|
||||
}
|
||||
|
||||
private fun initView() {
|
||||
adapter.isInitiator = type == TYPE_INITIATOR
|
||||
binding.recyclerView.adapter = adapter
|
||||
rvDelegate = RVDelegate.Builder<GameTeamRecordBean>()
|
||||
.setPageSize(pageSize)
|
||||
.setAdapter(adapter)
|
||||
.setRecyclerView(binding.recyclerView)
|
||||
.setEmptyView(
|
||||
EmptyViewHelper.createEmptyTextViewHeight(
|
||||
context,
|
||||
getString(R.string.data_empty)
|
||||
)
|
||||
)
|
||||
.setLayoutManager(LinearLayoutManager(mContext))
|
||||
.build()
|
||||
}
|
||||
|
||||
private fun initEvent() {
|
||||
adapter.setOnItemChildClickListener { adapter, view, position ->
|
||||
val item = (adapter.getItem(position) as? GameTeamRecordBean)
|
||||
?: return@setOnItemChildClickListener
|
||||
|
||||
when (view.id) {
|
||||
R.id.tv_repurchase -> {
|
||||
jumpRepurchase(item)
|
||||
}
|
||||
|
||||
R.id.tv_chat -> {
|
||||
jumpChat(item)
|
||||
}
|
||||
|
||||
R.id.iv_order_id_copy -> {
|
||||
ClipboardUtils.copyText(item.orderNo ?: "")
|
||||
toast(getString(R.string.have_copy))
|
||||
}
|
||||
}
|
||||
}
|
||||
binding.swipeRefresh.setOnRefreshListener {
|
||||
loadData(true)
|
||||
}
|
||||
adapter.setOnLoadMoreListener({
|
||||
loadData(false)
|
||||
}, binding.recyclerView)
|
||||
}
|
||||
|
||||
private fun initObserve() {
|
||||
viewModel.listLiveData.observe(this) {
|
||||
binding.swipeRefresh.isRefreshing = false
|
||||
rvDelegate?.loadData(it)
|
||||
if (!it.isSuccess && it.message != null) {
|
||||
toast(it.message)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private fun jumpRepurchase(item: GameTeamRecordBean) {
|
||||
val uid = getTargetUidByItem(item)
|
||||
val gameId = item.gameId
|
||||
val gameBackground = item.gamePic
|
||||
val gamePrice = item.price ?: 0
|
||||
val gameInning = item.inning ?: 1
|
||||
if (uid == null || gameId == null) {
|
||||
toast(R.string.data_parsing_exception)
|
||||
return
|
||||
}
|
||||
GameTeamInviteDialog.newInstance(
|
||||
targetUid = uid,
|
||||
gameId = gameId,
|
||||
gameBackground = gameBackground,
|
||||
gamePrice = gamePrice,
|
||||
gameInning = gameInning
|
||||
).apply {
|
||||
this.successListener = {
|
||||
loadData(true)
|
||||
}
|
||||
}.safeShow(requireActivity().supportFragmentManager, requireActivity())
|
||||
}
|
||||
|
||||
private fun jumpChat(item: GameTeamRecordBean) {
|
||||
val targetUid = getTargetUidByItem(item)?.toString()
|
||||
if (targetUid.isNullOrEmpty()) {
|
||||
return
|
||||
}
|
||||
NimP2PMessageActivity.start(requireContext(), targetUid)
|
||||
}
|
||||
|
||||
private fun getTargetUidByItem(item: GameTeamRecordBean): Long? {
|
||||
val targetUid = if (type == TYPE_INITIATOR) {
|
||||
item.toUid
|
||||
} else {
|
||||
item.fromUid
|
||||
}
|
||||
return targetUid
|
||||
}
|
||||
|
||||
private fun loadData(isRefresh: Boolean) {
|
||||
if (isRefresh) {
|
||||
pageNum = 1
|
||||
} else {
|
||||
pageNum++
|
||||
}
|
||||
viewModel.getRecordList(type, pageNum, pageSize)
|
||||
}
|
||||
}
|
@@ -0,0 +1,103 @@
|
||||
package com.chwl.app.ui.game_team.record;
|
||||
|
||||
import android.content.Context;
|
||||
import android.view.ViewGroup;
|
||||
import android.widget.FrameLayout;
|
||||
import android.widget.TextView;
|
||||
|
||||
import androidx.core.content.ContextCompat;
|
||||
|
||||
import com.chwl.app.R;
|
||||
import com.chwl.app.ui.widget.XRecyclerView.ScaleTransitionPagerTitleView;
|
||||
import com.chwl.app.ui.widget.magicindicator.buildins.UIUtil;
|
||||
import com.chwl.app.ui.widget.magicindicator.buildins.commonnavigator.abs.CommonNavigatorAdapter;
|
||||
import com.chwl.app.ui.widget.magicindicator.buildins.commonnavigator.abs.IPagerIndicator;
|
||||
import com.chwl.app.ui.widget.magicindicator.buildins.commonnavigator.abs.IPagerTitleView;
|
||||
import com.chwl.app.ui.widget.magicindicator.buildins.commonnavigator.indicators.LinePagerIndicator;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
public class GameTeamRecordIndicatorAdapter extends CommonNavigatorAdapter {
|
||||
private final Context mContext;
|
||||
private final List<? extends CharSequence> mTitleList;
|
||||
|
||||
private int textSize = 14;
|
||||
private float minScale = 1f;
|
||||
private boolean showIndicator = true;
|
||||
private OnItemSelectListener mOnItemSelectListener;
|
||||
|
||||
public GameTeamRecordIndicatorAdapter(Context context, List<? extends CharSequence> charSequences) {
|
||||
this.mContext = context;
|
||||
this.mTitleList = charSequences;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getCount() {
|
||||
return mTitleList == null ? 0 : mTitleList.size();
|
||||
}
|
||||
|
||||
@Override
|
||||
public IPagerTitleView getTitleView(Context context, final int i) {
|
||||
ScaleTransitionPagerTitleView scaleTransitionPagerTitleView = new ScaleTransitionPagerTitleView(context, true);
|
||||
scaleTransitionPagerTitleView.setNormalColor(ContextCompat.getColor(context, R.color.color_66000000));
|
||||
scaleTransitionPagerTitleView.setSelectedColor(ContextCompat.getColor(context, R.color.color_000000));
|
||||
scaleTransitionPagerTitleView.setMinScale(minScale);
|
||||
scaleTransitionPagerTitleView.setTextSize(textSize);
|
||||
int padding = UIUtil.dip2px(context, 13);
|
||||
scaleTransitionPagerTitleView.setPadding(padding, 0, padding, 0);
|
||||
scaleTransitionPagerTitleView.setText(mTitleList.get(i));
|
||||
scaleTransitionPagerTitleView.setOnClickListener(view -> {
|
||||
if (mOnItemSelectListener != null) {
|
||||
mOnItemSelectListener.onItemSelect(i, scaleTransitionPagerTitleView);
|
||||
}
|
||||
|
||||
});
|
||||
return scaleTransitionPagerTitleView;
|
||||
}
|
||||
|
||||
@Override
|
||||
public IPagerIndicator getIndicator(Context context) {
|
||||
LinePagerIndicator indicator = new LinePagerIndicator(context);
|
||||
indicator.setMode(LinePagerIndicator.MODE_EXACTLY);
|
||||
indicator.setLineHeight(context.getResources().getDimensionPixelOffset(R.dimen.dp_3));
|
||||
indicator.setRoundRadius(context.getResources().getDimensionPixelOffset(R.dimen.dp_2));
|
||||
indicator.setLineWidth(context.getResources().getDimensionPixelOffset(R.dimen.dp_13));
|
||||
indicator.setColors(context.getResources().getColor(R.color.color_0FCA81));
|
||||
FrameLayout.LayoutParams lp = new FrameLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT);
|
||||
// lp.bottomMargin = mBottomMargin;
|
||||
indicator.setLayoutParams(lp);
|
||||
return indicator;
|
||||
}
|
||||
|
||||
public int getTextSize() {
|
||||
return textSize;
|
||||
}
|
||||
|
||||
public void setTextSize(int textSize) {
|
||||
this.textSize = textSize;
|
||||
}
|
||||
|
||||
public float getMinScale() {
|
||||
return minScale;
|
||||
}
|
||||
|
||||
public void setMinScale(float minScale) {
|
||||
this.minScale = minScale;
|
||||
}
|
||||
|
||||
public boolean isShowIndicator() {
|
||||
return showIndicator;
|
||||
}
|
||||
|
||||
public void setShowIndicator(boolean showIndicator) {
|
||||
this.showIndicator = showIndicator;
|
||||
}
|
||||
|
||||
public void setOnItemSelectListener(OnItemSelectListener onItemSelectListener) {
|
||||
mOnItemSelectListener = onItemSelectListener;
|
||||
}
|
||||
|
||||
public interface OnItemSelectListener {
|
||||
void onItemSelect(int position, TextView view);
|
||||
}
|
||||
}
|
@@ -0,0 +1,23 @@
|
||||
package com.chwl.app.ui.game_team.record
|
||||
|
||||
import androidx.lifecycle.MutableLiveData
|
||||
import com.chwl.app.base.BaseViewModel
|
||||
import com.chwl.core.auth.AuthModel
|
||||
import com.chwl.core.bean.response.ListResult
|
||||
import com.chwl.core.game_team.GameTeamRecordBean
|
||||
import com.chwl.core.room.game.GameModel
|
||||
|
||||
class GameTeamRecordViewModel : BaseViewModel() {
|
||||
|
||||
val listLiveData = MutableLiveData<ListResult<GameTeamRecordBean>>()
|
||||
|
||||
fun getRecordList(type: Int, pageNum: Int, pageSize: Int) {
|
||||
safeLaunch(onError = {
|
||||
listLiveData.postValue(ListResult.failed(pageNum, it))
|
||||
}) {
|
||||
val list =
|
||||
GameModel.getGameTeamRecordList(type, pageNum, pageSize, AuthModel.get().currentUid)
|
||||
listLiveData.postValue(ListResult.success(list, pageNum))
|
||||
}
|
||||
}
|
||||
}
|
@@ -71,6 +71,11 @@ public class GiftInfoVm extends BaseItem<GiftInfo> {
|
||||
*/
|
||||
public boolean isSuperLuckyGift;
|
||||
|
||||
/**
|
||||
* 礼物名称
|
||||
*/
|
||||
public String giftName;
|
||||
|
||||
public GiftInfoVm(Context context, GiftInfo data, boolean select, boolean isKnap) {
|
||||
super(context, data);
|
||||
this.isSelect.set(select);
|
||||
@@ -110,6 +115,7 @@ public class GiftInfoVm extends BaseItem<GiftInfo> {
|
||||
SimpleVipInfo vipInfo = data.getGiftVipInfo();
|
||||
isLocked = vipInfo != null && VipHelper.getMyVipLevel() < vipInfo.getVipLevel();
|
||||
vipIcon = vipInfo == null ? "" : vipInfo.getVipIcon();
|
||||
giftName = data.getFirstGiftName();
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@@ -2,7 +2,13 @@ package com.chwl.app.ui.im;
|
||||
|
||||
import android.content.Context;
|
||||
|
||||
import com.chwl.app.community.holder.DynamicSysHolder;
|
||||
import com.chwl.app.community.im.WorldDynamicShareViewHolder;
|
||||
import com.chwl.app.module_hall.im.msgholder.FamilyMsgViewHolder;
|
||||
import com.chwl.app.ui.im.chat.GameTeamInviteViewHolder;
|
||||
import com.chwl.core.community.attachment.DynamicSysAttachment;
|
||||
import com.chwl.core.community.im.WorldDynamicAttachment;
|
||||
import com.chwl.core.im.custom.bean.GameTeamInviteAttachment;
|
||||
import com.chwl.core.module_hall.im.FamilyAttachment;
|
||||
import com.netease.nim.uikit.api.NimUIKit;
|
||||
import com.netease.nim.uikit.api.model.contact.ContactEventListener;
|
||||
@@ -151,6 +157,10 @@ public class ImInitHelper {
|
||||
//瓜分钻石 三级
|
||||
NimUIKit.registerMsgItemViewHolder(CarveUpGoldThirdLevelAttachment.class, MsgViewHolderText.class);
|
||||
|
||||
// 社区动态
|
||||
NimUIKit.registerMsgItemViewHolder(DynamicSysAttachment.class, DynamicSysHolder.class);
|
||||
NimUIKit.registerMsgItemViewHolder(WorldDynamicAttachment.class, WorldDynamicShareViewHolder.class);
|
||||
|
||||
NimUIKit.registerMsgItemViewHolder(ChatHintAttachment.class, MsgViewHolderChatHint.class);
|
||||
|
||||
//技能卡
|
||||
@@ -161,6 +171,9 @@ public class ImInitHelper {
|
||||
// 客服充值
|
||||
NimUIKit.registerMsgItemViewHolder(P2PContactRechargeAttachment.class, MsgViewHolderP2PContactRecharge.class);
|
||||
|
||||
// 游戏组队 - 邀请
|
||||
NimUIKit.registerMsgItemViewHolder(GameTeamInviteAttachment.class, GameTeamInviteViewHolder.class);
|
||||
|
||||
NimUIKit.setSessionListener(listener);
|
||||
NimUIKit.setContactEventListener(listener1);
|
||||
}
|
||||
|
@@ -41,6 +41,7 @@ import com.netease.nim.uikit.common.ui.recyclerview.adapter.BaseFetchLoadAdapter
|
||||
import com.netease.nim.uikit.common.ui.recyclerview.adapter.IRecyclerView;
|
||||
import com.netease.nim.uikit.common.ui.recyclerview.listener.OnItemClickListener;
|
||||
import com.netease.nim.uikit.common.ui.recyclerview.loadmore.MsgListFetchLoadMoreView;
|
||||
import com.netease.nim.uikit.common.util.AntiSpamUtil;
|
||||
import com.netease.nim.uikit.common.util.media.BitmapDecoder;
|
||||
import com.netease.nim.uikit.common.util.sys.ClipboardUtil;
|
||||
import com.netease.nim.uikit.common.util.sys.NetworkUtil;
|
||||
@@ -449,19 +450,12 @@ public class MessageListPanelEx {
|
||||
int index = getItemIndex(message.getUuid());
|
||||
if (index >= 0 && index < items.size()) {
|
||||
IMMessage item = items.get(index);
|
||||
String antiSpamRes = message.getYidunAntiSpamRes();
|
||||
if (!TextUtils.isEmpty(antiSpamRes)) {
|
||||
JSONObject jsonObject = JSON.parseObject(antiSpamRes);
|
||||
if (jsonObject.getIntValue("suggestion") == 2) {
|
||||
item.setStatus(MsgStatusEnum.fail);
|
||||
NIMClient.getService(MsgService.class).updateIMMessageStatus(item);
|
||||
} else {
|
||||
item.setStatus(message.getStatus());
|
||||
}
|
||||
if (AntiSpamUtil.isAntiSpam(message)) {
|
||||
item.setStatus(MsgStatusEnum.fail);
|
||||
NIMClient.getService(MsgService.class).updateIMMessageStatus(item);
|
||||
} else {
|
||||
item.setStatus(message.getStatus());
|
||||
}
|
||||
|
||||
item.setAttachStatus(message.getAttachStatus());
|
||||
|
||||
// 处理语音、音视频通话
|
||||
@@ -1052,6 +1046,9 @@ public class MessageListPanelEx {
|
||||
if (message.getDirect() == MsgDirectionEnum.Out) {
|
||||
// 发出的消息,如果是发送失败,直接重发,否则有可能是漫游到的多媒体消息,但文件下载
|
||||
if (message.getStatus() == MsgStatusEnum.fail) {
|
||||
if (AntiSpamUtil.isAntiSpam(message)) {
|
||||
return;
|
||||
}
|
||||
resendMessage(message); // 重发
|
||||
} else {
|
||||
if (message.getAttachment() instanceof FileAttachment) {
|
||||
|
@@ -2,10 +2,13 @@ package com.chwl.app.ui.im;
|
||||
|
||||
import android.annotation.SuppressLint;
|
||||
import android.content.Context;
|
||||
import android.content.Intent;
|
||||
|
||||
import com.chwl.app.decoration.view.DecorationStoreActivity;
|
||||
import com.chwl.app.earn.activity.EarnRecordActivity;
|
||||
import com.chwl.app.pay.activity.GiveGoldActivity;
|
||||
import com.chwl.app.ui.feedback.FeedbackActivity;
|
||||
import com.chwl.app.ui.game_team.record.GameTeamRecordActivity;
|
||||
import com.chwl.core.module_hall.hall.bean.H5FamilyInfo;
|
||||
import com.chwl.core.module_hall.hall.bean.UserClanInfo;
|
||||
import com.trello.rxlifecycle3.components.support.RxAppCompatActivity;
|
||||
@@ -32,13 +35,11 @@ import com.chwl.app.team.view.NimTeamMessageActivity;
|
||||
import com.chwl.app.ui.login.BindPhoneActivity;
|
||||
import com.chwl.app.ui.login.ShowBindPhoneActivity;
|
||||
import com.chwl.app.ui.pay.ChargeActivity;
|
||||
import com.chwl.app.ui.setting.FeedbackActivity;
|
||||
import com.chwl.app.ui.setting.ModifyPwdActivity;
|
||||
import com.chwl.app.ui.user.activity.UserInfoActivity;
|
||||
import com.chwl.app.ui.webview.CommonWebViewActivity;
|
||||
import com.chwl.app.vip.VipMainActivity;
|
||||
import com.chwl.core.DemoCache;
|
||||
import com.chwl.core.UriProvider;
|
||||
import com.chwl.core.auth.AuthModel;
|
||||
import com.chwl.core.community.event.SquareTaskEvent;
|
||||
import com.chwl.core.im.custom.bean.RouterType;
|
||||
@@ -209,7 +210,7 @@ public class RouterHandler {
|
||||
break;
|
||||
|
||||
case RouterType.FEED_BACK:
|
||||
FeedbackActivity.start(context);
|
||||
context.startActivity(new Intent(context, FeedbackActivity.class));
|
||||
break;
|
||||
case RouterType.SET_PASSWORD:
|
||||
ModifyPwdActivity.start(context, ModifyPwdActivity.LOGIN_PWD);
|
||||
@@ -293,6 +294,9 @@ public class RouterHandler {
|
||||
case RouterType.MY_DONATION:
|
||||
GiveGoldActivity.Companion.start(context);
|
||||
break;
|
||||
case RouterType.GAME_TEAM_RECORD:
|
||||
GameTeamRecordActivity.Companion.start(context);
|
||||
break;
|
||||
default:
|
||||
SingleToastUtil.showToast(ResUtil.getString(R.string.ui_im_routerhandler_07));
|
||||
return false;
|
||||
|
@@ -0,0 +1,118 @@
|
||||
package com.chwl.app.ui.im.chat
|
||||
|
||||
import android.content.Context
|
||||
import android.graphics.Color
|
||||
import android.widget.ImageView
|
||||
import android.widget.TextView
|
||||
import androidx.annotation.Keep
|
||||
import com.chwl.app.R
|
||||
import com.chwl.app.ui.utils.load
|
||||
import com.chwl.core.im.custom.bean.GameTeamInviteAttachment
|
||||
import com.example.lib_utils.AppUtils
|
||||
import com.example.lib_utils.UiUtils
|
||||
import com.google.android.material.imageview.ShapeableImageView
|
||||
import com.google.android.material.shape.CornerFamily
|
||||
import com.google.android.material.shape.ShapeAppearanceModel
|
||||
import com.netease.nim.uikit.business.session.viewholder.MsgViewHolderBase
|
||||
import com.netease.nim.uikit.common.ui.recyclerview.adapter.BaseMultiItemFetchLoadAdapter
|
||||
|
||||
@Keep
|
||||
class GameTeamInviteViewHolder(adapter: BaseMultiItemFetchLoadAdapter<*, *>) :
|
||||
MsgViewHolderBase(adapter) {
|
||||
|
||||
private val isRTL = UiUtils.isRtl(AppUtils.getApp())
|
||||
|
||||
private val leftShapeAppearance: ShapeAppearanceModel by lazy(LazyThreadSafetyMode.NONE) {
|
||||
buildBackgroundShapeAppearance(context ?: AppUtils.getApp(), true)
|
||||
}
|
||||
private val rightShapeAppearance: ShapeAppearanceModel by lazy(LazyThreadSafetyMode.NONE) {
|
||||
buildBackgroundShapeAppearance(context ?: AppUtils.getApp(), false)
|
||||
}
|
||||
|
||||
override fun getContentResId(): Int {
|
||||
return R.layout.layout_msg_view_holder_game_team_invite
|
||||
}
|
||||
|
||||
override fun inflateContentView() {
|
||||
}
|
||||
|
||||
override fun leftBackground(): Int {
|
||||
return R.color.transparent
|
||||
}
|
||||
|
||||
override fun rightBackground(): Int {
|
||||
return R.color.transparent
|
||||
}
|
||||
|
||||
override fun bindContentView() {
|
||||
val attachment = message?.attachment as? GameTeamInviteAttachment
|
||||
val data = attachment?.msgData
|
||||
val gameNameView = findViewById<TextView>(R.id.tv_game_name)
|
||||
val gameInningView = findViewById<TextView>(R.id.tv_game_inning)
|
||||
val gameIconView = findViewById<ImageView>(R.id.iv_icon)
|
||||
val gameBackgroundView = findViewById<ShapeableImageView>(R.id.iv_image)
|
||||
val gameBackgroundMaskView = findViewById<ShapeableImageView>(R.id.iv_image_mask)
|
||||
val shapeAppearance = getBackgroundShapeAppearance()
|
||||
gameBackgroundView.shapeAppearanceModel = shapeAppearance
|
||||
gameBackgroundMaskView.shapeAppearanceModel = shapeAppearance
|
||||
gameNameView.text = data?.gameName ?: ""
|
||||
gameInningView.text =
|
||||
context?.getString(R.string.game_team_18)?.format(data?.inning?.toString() ?: "0") ?: ""
|
||||
gameIconView.load(data?.gameLogo)
|
||||
gameBackgroundView.load(data?.gamePic, defaultRes = R.color.color_33000000)
|
||||
}
|
||||
|
||||
private fun getBackgroundShapeAppearance(): ShapeAppearanceModel {
|
||||
return if (isReceivedMessage) {
|
||||
if (isRTL) {
|
||||
rightShapeAppearance
|
||||
} else {
|
||||
leftShapeAppearance
|
||||
}
|
||||
} else {
|
||||
if (isRTL) {
|
||||
leftShapeAppearance
|
||||
} else {
|
||||
rightShapeAppearance
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private fun buildBackgroundShapeAppearance(
|
||||
context: Context,
|
||||
isLeft: Boolean
|
||||
): ShapeAppearanceModel {
|
||||
val cornerA = context.resources.getDimension(R.dimen.dp_12)
|
||||
val cornerB = context.resources.getDimension(R.dimen.dp_2)
|
||||
val topLeftCorner: Float
|
||||
val topRightCorner: Float
|
||||
if (isLeft) {
|
||||
topLeftCorner = cornerB
|
||||
topRightCorner = cornerA
|
||||
} else {
|
||||
topLeftCorner = cornerA
|
||||
topRightCorner = cornerB
|
||||
}
|
||||
return ShapeAppearanceModel.Builder().apply {
|
||||
this.setTopLeftCorner(
|
||||
CornerFamily.ROUNDED,
|
||||
topLeftCorner
|
||||
)
|
||||
|
||||
this.setTopRightCorner(
|
||||
CornerFamily.ROUNDED,
|
||||
topRightCorner
|
||||
)
|
||||
|
||||
this.setBottomLeftCorner(
|
||||
CornerFamily.ROUNDED,
|
||||
cornerA
|
||||
)
|
||||
|
||||
this.setBottomRightCorner(
|
||||
CornerFamily.ROUNDED,
|
||||
cornerA
|
||||
)
|
||||
}.build()
|
||||
}
|
||||
}
|
@@ -1,24 +1,10 @@
|
||||
package com.chwl.app.ui.im.chat;
|
||||
|
||||
import android.graphics.Color;
|
||||
import android.text.SpannableString;
|
||||
import android.text.Spanned;
|
||||
import android.text.TextUtils;
|
||||
import android.text.method.LinkMovementMethod;
|
||||
import android.text.style.ForegroundColorSpan;
|
||||
import android.view.View;
|
||||
import android.widget.TextView;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
|
||||
import com.netease.nim.uikit.business.session.viewholder.MsgViewHolderBase;
|
||||
import com.netease.nim.uikit.common.ui.recyclerview.adapter.BaseMultiItemFetchLoadAdapter;
|
||||
import com.chwl.app.R;
|
||||
import com.chwl.app.common.widget.OriginalDrawStatusClickSpan;
|
||||
import com.chwl.app.ui.webview.SimpleWebViewActivity;
|
||||
import com.chwl.core.UriProvider;
|
||||
import com.chwl.core.im.custom.bean.ChatHintAttachment;
|
||||
import com.chwl.library.utils.ResUtil;
|
||||
|
||||
public class MsgViewHolderChatHint extends MsgViewHolderBase {
|
||||
|
||||
@@ -58,30 +44,7 @@ public class MsgViewHolderChatHint extends MsgViewHolderBase {
|
||||
ChatHintAttachment attachment = (ChatHintAttachment) message.getAttachment();
|
||||
if (attachment != null) {
|
||||
String content = attachment.getContent();
|
||||
String restoreTitle = ResUtil.getString(R.string.im_chat_msgviewholderchathint_01);
|
||||
if (TextUtils.isEmpty(content) || !content.contains(restoreTitle)) {
|
||||
tvContent.setText(content);
|
||||
} else {
|
||||
SpannableString ss = new SpannableString(content);
|
||||
int restoreTitleIndex = content.indexOf(restoreTitle);
|
||||
ss.setSpan(
|
||||
new ForegroundColorSpan(Color.parseColor("#FB486A")),
|
||||
restoreTitleIndex,
|
||||
restoreTitleIndex + restoreTitle.length(),
|
||||
Spanned.SPAN_INCLUSIVE_EXCLUSIVE);
|
||||
ss.setSpan(
|
||||
new OriginalDrawStatusClickSpan() {
|
||||
@Override
|
||||
public void onClick(@NonNull View widget) {
|
||||
SimpleWebViewActivity.start(context, UriProvider.getLiveAgreement());
|
||||
}
|
||||
},
|
||||
restoreTitleIndex,
|
||||
restoreTitleIndex + restoreTitle.length(),
|
||||
Spanned.SPAN_INCLUSIVE_EXCLUSIVE);
|
||||
tvContent.setText(ss);
|
||||
tvContent.setMovementMethod(new LinkMovementMethod());
|
||||
}
|
||||
tvContent.setText(content);
|
||||
}
|
||||
}
|
||||
|
||||
|
@@ -29,7 +29,6 @@ import com.netease.nim.uikit.business.session.constant.Extras;
|
||||
import com.netease.nim.uikit.business.session.module.Container;
|
||||
import com.netease.nim.uikit.business.session.module.ModuleProxy;
|
||||
import com.netease.nim.uikit.business.session.module.input.InputPanel;
|
||||
import com.netease.nim.uikit.business.session.module.input.NimAudioChatEvent;
|
||||
import com.netease.nim.uikit.business.session.module.input.NimImageActionEvent;
|
||||
import com.netease.nim.uikit.common.fragment.TFragment;
|
||||
import com.netease.nim.uikit.impl.NimUIKitImpl;
|
||||
|
@@ -27,6 +27,7 @@ import androidx.core.content.ContextCompat;
|
||||
|
||||
import com.chwl.app.BuildConfig;
|
||||
import com.chwl.app.common.widget.OriginalDrawStatusClickSpan;
|
||||
import com.chwl.app.ui.feedback.FeedbackActivity;
|
||||
import com.chwl.app.ui.setting.LabActivity;
|
||||
import com.chwl.app.ui.webview.CommonWebViewActivity;
|
||||
import com.chwl.core.UriProvider;
|
||||
@@ -275,7 +276,9 @@ public class LoginPasswordActivity extends BaseActivity {
|
||||
});
|
||||
setProtocol();
|
||||
findViewById(R.id.layout_google).setOnClickListener(v -> googleLogin());
|
||||
|
||||
findViewById(R.id.tv_feedback).setOnClickListener(v -> {
|
||||
startActivity(new Intent(this, FeedbackActivity.class));
|
||||
});
|
||||
if (BuildConfig.DEBUG) {
|
||||
findViewById(R.id.iv_logo).setOnClickListener(v -> {
|
||||
startActivity(new Intent(this, LabActivity.class));
|
||||
|
@@ -64,7 +64,7 @@ public class LogoutHelper {
|
||||
|
||||
String text = ResUtil.getString(R.string.login_helper_logouthelper_09) + simpleDateFormat.format(new Date(exception.getCancelDate()));
|
||||
int end = text.length();
|
||||
text += ResUtil.getString(R.string.login_helper_logouthelper_010);
|
||||
text += ResUtil.getString(R.string.login_helper_logouthelper_010);
|
||||
SpannableString spannableString = new SpannableString(text);
|
||||
spannableString.setSpan(new ForegroundColorSpan(ContextCompat.getColor(activity, R.color.appColor)),
|
||||
0, end, Spannable.SPAN_INCLUSIVE_EXCLUSIVE);
|
||||
|
@@ -1,100 +0,0 @@
|
||||
package com.chwl.app.ui.setting;
|
||||
|
||||
import android.content.Context;
|
||||
import android.content.Intent;
|
||||
import android.os.Bundle;
|
||||
import android.widget.Button;
|
||||
import android.widget.EditText;
|
||||
|
||||
import com.netease.nim.uikit.StatusBarUtil;
|
||||
import com.trello.rxlifecycle3.android.ActivityEvent;
|
||||
import com.chwl.app.R;
|
||||
import com.chwl.app.base.BaseActivity;
|
||||
import com.chwl.core.auth.AuthModel;
|
||||
import com.chwl.core.home.model.HomeModel;
|
||||
import com.chwl.library.utils.ResUtil;
|
||||
|
||||
import io.reactivex.SingleObserver;
|
||||
import io.reactivex.disposables.Disposable;
|
||||
|
||||
public class FeedbackActivity extends BaseActivity {
|
||||
|
||||
private EditText edtContent;
|
||||
private EditText edtContact;
|
||||
private Button btnCommit;
|
||||
|
||||
public static void start(Context context) {
|
||||
Intent intent = new Intent(context, FeedbackActivity.class);
|
||||
context.startActivity(intent);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onCreate(Bundle savedInstanceState) {
|
||||
super.onCreate(savedInstanceState);
|
||||
setContentView(R.layout.activity_feedback);
|
||||
initWhiteTitleBar(ResUtil.getString(R.string.ui_setting_feedbackactivity_01));
|
||||
initView();
|
||||
initData();
|
||||
SetListener();
|
||||
}
|
||||
|
||||
private void SetListener() {
|
||||
btnCommit.setOnClickListener(v ->
|
||||
HomeModel.INSTANCE.commitFeedback(AuthModel.get().getCurrentUid(),
|
||||
edtContent.getText().toString(),
|
||||
edtContact.getText().toString()
|
||||
)
|
||||
.compose(bindUntilEvent(ActivityEvent.DESTROY))
|
||||
.subscribe(new SingleObserver<String>() {
|
||||
@Override
|
||||
public void onSubscribe(Disposable d) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onSuccess(String s) {
|
||||
onCommitFeedback();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onError(Throwable e) {
|
||||
onCommitFeedbackFail(e.getMessage());
|
||||
}
|
||||
})
|
||||
|
||||
);
|
||||
}
|
||||
|
||||
private void initData() {
|
||||
|
||||
}
|
||||
|
||||
private void initView() {
|
||||
edtContent = findViewById(R.id.edt_content);
|
||||
edtContact = findViewById(R.id.edt_contact);
|
||||
btnCommit = findViewById(R.id.btn_commit);
|
||||
}
|
||||
|
||||
public void onCommitFeedback(){
|
||||
getDialogManager().showProgressDialog(FeedbackActivity.this, ResUtil.getString(R.string.ui_setting_feedbackactivity_02));
|
||||
toast(ResUtil.getString(R.string.ui_setting_feedbackactivity_03));
|
||||
finish();
|
||||
|
||||
}
|
||||
|
||||
public void onCommitFeedbackFail(String error){
|
||||
// toast(error);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected boolean needSteepStateBar() {
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void setStatusBar() {
|
||||
super.setStatusBar();
|
||||
StatusBarUtil.transparencyBar(this);
|
||||
StatusBarUtil.StatusBarLightMode(this);
|
||||
}
|
||||
}
|
@@ -13,6 +13,8 @@ import com.chwl.app.base.BaseViewBindingActivity
|
||||
import com.chwl.app.common.widget.dialog.DialogManager.OkCancelDialogListener
|
||||
import com.chwl.app.databinding.ActivitySettingBinding
|
||||
import com.chwl.app.notify.RoomNotifyManager
|
||||
import com.chwl.app.ui.debug.DebugActivity
|
||||
import com.chwl.app.ui.game_team.record.GameTeamRecordActivity
|
||||
import com.chwl.app.ui.im.avtivity.BlackListManageActivity
|
||||
import com.chwl.app.ui.language.LanguageActivity
|
||||
import com.chwl.app.ui.login.BindPhoneActivity
|
||||
@@ -221,7 +223,8 @@ class SettingActivity : BaseViewBindingActivity<ActivitySettingBinding>(), View.
|
||||
}
|
||||
|
||||
private fun debug() {
|
||||
// CommonWebViewActivity.start(this,"https://api.molistar.xyz/molistar/activity/2024-invitationFission/index.html")
|
||||
startActivity(Intent(this, GameTeamRecordActivity::class.java))
|
||||
// CommonWebViewActivity.start(this,"http://beta.api.molistar.xyz/molistar/modules/order/index.html")
|
||||
// PublicChatRoomMessageActivity.start(this)
|
||||
// MyDecorationActivity.start(this,0)
|
||||
}
|
||||
|
@@ -7,21 +7,31 @@ import android.content.ClipData;
|
||||
import android.content.ClipboardManager;
|
||||
import android.content.Context;
|
||||
import android.content.Intent;
|
||||
import android.os.CountDownTimer;
|
||||
import android.text.TextUtils;
|
||||
import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
import android.widget.ImageView;
|
||||
import android.widget.LinearLayout;
|
||||
import android.widget.TextView;
|
||||
|
||||
import androidx.core.content.ContextCompat;
|
||||
import androidx.core.widget.NestedScrollView;
|
||||
import androidx.fragment.app.Fragment;
|
||||
import androidx.lifecycle.ViewModelProvider;
|
||||
import androidx.viewpager.widget.ViewPager;
|
||||
import androidx.viewpager2.widget.ViewPager2;
|
||||
|
||||
import com.chwl.app.avroom.adapter.CommonVPAdapter;
|
||||
import com.chwl.app.ui.user.adapter.UserInfoTopAlbumAdapter;
|
||||
import com.chwl.app.ui.user.fragment.UserInfoDataFragment;
|
||||
import com.chwl.app.ui.user.fragment.UserInfoDynamicFragment;
|
||||
import com.chwl.app.utils.AppBarStateChangeListener;
|
||||
import com.chwl.app.utils.AvatarHelper;
|
||||
import com.chwl.library.widget.SVGAView;
|
||||
import com.chwl.core.decoration.headwear.bean.HeadWearInfo;
|
||||
import com.example.lib_utils.UiUtils;
|
||||
import com.google.android.material.appbar.AppBarLayout;
|
||||
import com.netease.nim.uikit.StatusBarUtil;
|
||||
import com.netease.nim.uikit.common.util.sys.TimeUtil;
|
||||
import com.netease.nim.uikit.impl.cache.NimUserInfoCache;
|
||||
import com.netease.nimlib.sdk.RequestCallbackWrapper;
|
||||
import com.netease.nimlib.sdk.uinfo.model.NimUserInfo;
|
||||
@@ -32,7 +42,6 @@ import com.opensource.svgaplayer.SVGAVideoEntity;
|
||||
import com.chwl.app.R;
|
||||
import com.chwl.app.UIHelper;
|
||||
import com.chwl.app.audio.helper.AudioPlayerHelper;
|
||||
import com.chwl.app.audio.helper.OnPlayListener;
|
||||
import com.chwl.app.avroom.ButtonItemFactory;
|
||||
import com.chwl.app.avroom.activity.AVRoomActivity;
|
||||
import com.chwl.app.base.BaseBindingActivity;
|
||||
@@ -41,28 +50,19 @@ import com.chwl.app.common.widget.dialog.DialogManager;
|
||||
import com.chwl.app.databinding.ActivityUserInfoBinding;
|
||||
import com.chwl.app.ui.im.avtivity.NimFriendModel;
|
||||
import com.chwl.app.ui.im.avtivity.NimP2PMessageActivity;
|
||||
import com.chwl.app.ui.user.adapter.SelfPhotoAdapter;
|
||||
import com.chwl.app.ui.user.adapter.UserInfoIndicatorAdapter;
|
||||
import com.chwl.app.ui.user.adapter.UserInfoPhotoAdapter;
|
||||
import com.chwl.app.ui.user.adapter.UserPhotoAdapter;
|
||||
import com.chwl.app.ui.user.fragment.UserInfoGiftWallFragment;
|
||||
import com.chwl.app.ui.user.fragment.UserInfoInfoFragment;
|
||||
import com.chwl.app.ui.user.viewmodel.UserInfoViewModel;
|
||||
import com.chwl.app.ui.utils.ImageLoadUtils;
|
||||
import com.chwl.app.ui.utils.ImageLoadUtilsV2;
|
||||
import com.chwl.app.ui.widget.ButtonItem;
|
||||
import com.chwl.app.ui.widget.ObservableScrollView;
|
||||
import com.chwl.app.ui.widget.magicindicator.buildins.commonnavigator.CommonNavigator;
|
||||
import com.chwl.app.ui.widget.rollviewpager.adapter.StaticPagerAdapterWrapper;
|
||||
import com.chwl.app.utils.RegexUtil;
|
||||
import com.chwl.core.XConstants;
|
||||
import com.chwl.core.Constants;
|
||||
import com.chwl.core.auth.AuthModel;
|
||||
import com.chwl.core.bean.RoomQueueInfo;
|
||||
import com.chwl.core.im.friend.IMFriendModel;
|
||||
import com.chwl.core.level.UserLevelVo;
|
||||
import com.chwl.core.manager.AudioEngineManager;
|
||||
import com.chwl.core.manager.AvRoomDataManager;
|
||||
import com.chwl.core.praise.PraiseModel;
|
||||
import com.chwl.core.praise.event.IsLikedEvent;
|
||||
import com.chwl.core.praise.event.PraiseEvent;
|
||||
@@ -72,12 +72,9 @@ import com.chwl.core.user.bean.UserDetailInfo;
|
||||
import com.chwl.core.user.bean.UserInfo;
|
||||
import com.chwl.core.user.bean.UserPhoto;
|
||||
import com.chwl.core.user.event.LoginUserInfoUpdateEvent;
|
||||
import com.chwl.core.utils.LogUtils;
|
||||
import com.chwl.core.utils.CoreLogger;
|
||||
import com.chwl.library.annatation.ActLayoutRes;
|
||||
import com.chwl.library.utils.ListUtils;
|
||||
import com.chwl.library.utils.SingleToastUtil;
|
||||
import com.chwl.library.utils.SizeUtils;
|
||||
import com.zhpan.bannerview.constants.IndicatorGravity;
|
||||
|
||||
import org.greenrobot.eventbus.EventBus;
|
||||
import org.greenrobot.eventbus.Subscribe;
|
||||
@@ -107,24 +104,20 @@ public class UserInfoActivity extends BaseBindingActivity<ActivityUserInfoBindin
|
||||
private ImageView ivOfficialMask;
|
||||
private TextView tvOfficialMask;
|
||||
|
||||
private StaticPagerAdapterWrapper bannerAdapter;
|
||||
|
||||
private UserInfoViewModel viewModel;
|
||||
|
||||
private boolean audioPlaying = false;
|
||||
|
||||
private boolean isRemoteMute = false;//是否静音
|
||||
private boolean isMute = true;//是否开麦
|
||||
|
||||
@SuppressLint("CheckResult")
|
||||
@Override
|
||||
protected void init() {
|
||||
mActivity = this;
|
||||
userId = getIntent().getLongExtra("userId", 0);
|
||||
viewModel = new ViewModelProvider(this).get(UserInfoViewModel.class);
|
||||
viewModel.setUserId(userId);
|
||||
UserInfoUiMgr.get().setUid(userId);
|
||||
|
||||
onFindViews();
|
||||
onSetListener();
|
||||
initTopAlbumView();
|
||||
EventBus.getDefault().register(this);
|
||||
initUserInfoDetailObserver();
|
||||
initAttentionView();
|
||||
@@ -146,22 +139,11 @@ public class UserInfoActivity extends BaseBindingActivity<ActivityUserInfoBindin
|
||||
super.onResume();
|
||||
viewModel.getUserInfo();
|
||||
viewModel.getUserInfoDetail();
|
||||
viewModel.getUserHallAndClan();
|
||||
}
|
||||
|
||||
private void initAttentionView() {
|
||||
if (AvRoomDataManager.get().mCurrentRoomInfo != null) {
|
||||
RoomQueueInfo roomQueueInfo = AvRoomDataManager.get()
|
||||
.getRoomQueueMemberInfoByAccount(String.valueOf(AuthModel.get().getCurrentUid()));
|
||||
if (roomQueueInfo != null && roomQueueInfo.mRoomMicInfo != null) {
|
||||
isMute = AudioEngineManager.get().isMute();
|
||||
}
|
||||
isRemoteMute = AudioEngineManager.get().isRemoteMute();
|
||||
}
|
||||
|
||||
if (AuthModel.get().getCurrentUid() == userId) {
|
||||
identityState = OWN;
|
||||
mBinding.tvFansCount.setOnClickListener(this);
|
||||
mBinding.layoutLive.setVisibility(View.GONE);
|
||||
if (bottomViewLayout != null)
|
||||
bottomViewLayout.setVisibility(View.GONE);
|
||||
@@ -223,11 +205,11 @@ public class UserInfoActivity extends BaseBindingActivity<ActivityUserInfoBindin
|
||||
|
||||
private void initViewPager() {
|
||||
List<Fragment> fragmentList = new ArrayList<>(2);
|
||||
fragmentList.add(new UserInfoInfoFragment());
|
||||
fragmentList.add(new UserInfoGiftWallFragment());
|
||||
fragmentList.add(new UserInfoDataFragment());
|
||||
fragmentList.add(new UserInfoDynamicFragment());
|
||||
final List<String> tagList = new ArrayList<>(2);
|
||||
tagList.add(getString(R.string.me_data));
|
||||
tagList.add(getString(R.string.me_gift_wall));
|
||||
tagList.add(getString(R.string.me_dynamic));
|
||||
CommonNavigator commonNavigator = new CommonNavigator(context);
|
||||
commonNavigator.setTitleWrapContent(false);
|
||||
UserInfoIndicatorAdapter magicIndicatorAdapter = new UserInfoIndicatorAdapter(context, tagList);
|
||||
@@ -236,9 +218,8 @@ public class UserInfoActivity extends BaseBindingActivity<ActivityUserInfoBindin
|
||||
});
|
||||
commonNavigator.setAdapter(magicIndicatorAdapter);
|
||||
mBinding.magicIndicator.setNavigator(commonNavigator);
|
||||
commonNavigator.getTitleContainer().setShowDividers(LinearLayout.SHOW_DIVIDER_MIDDLE);
|
||||
mBinding.viewPager.setOffscreenPageLimit(2);
|
||||
mBinding.viewPager.setAdapter(new CommonVPAdapter(getSupportFragmentManager(),getLifecycle(),fragmentList));
|
||||
mBinding.viewPager.setOffscreenPageLimit(fragmentList.size());
|
||||
mBinding.viewPager.setAdapter(new CommonVPAdapter(getSupportFragmentManager(), getLifecycle(), fragmentList));
|
||||
mBinding.viewPager.registerOnPageChangeCallback(new ViewPager2.OnPageChangeCallback() {
|
||||
@Override
|
||||
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
|
||||
@@ -256,10 +237,10 @@ public class UserInfoActivity extends BaseBindingActivity<ActivityUserInfoBindin
|
||||
mBinding.magicIndicator.onPageScrollStateChanged(state);
|
||||
}
|
||||
});
|
||||
mBinding.viewPager.setUserInputEnabled(false);
|
||||
}
|
||||
|
||||
private void initUserInfoDetailObserver() {
|
||||
viewModel = new ViewModelProvider(this).get(UserInfoViewModel.class);
|
||||
viewModel.getUserInfoDetailData().observe(this, dataBean -> {
|
||||
initPhoto(dataBean.getPrivatePhoto());
|
||||
setWhereVisible();
|
||||
@@ -274,6 +255,7 @@ public class UserInfoActivity extends BaseBindingActivity<ActivityUserInfoBindin
|
||||
mBinding.tbUserInfo.setTitle("");
|
||||
ivOfficialMask = mBinding.inOfficialMask.findViewById(R.id.iv_official_mask);
|
||||
tvOfficialMask = mBinding.inOfficialMask.findViewById(R.id.tv_official_mask);
|
||||
mBinding.ivHeadWear.bindCache(SVGAView.newCache(1));
|
||||
}
|
||||
|
||||
@Subscribe(threadMode = ThreadMode.MAIN)
|
||||
@@ -287,19 +269,55 @@ public class UserInfoActivity extends BaseBindingActivity<ActivityUserInfoBindin
|
||||
private void initData(UserInfo userInfo) {
|
||||
if (null != userInfo) {
|
||||
ImageLoadUtilsV2.loadImage(mBinding.ivUserHead, userInfo.getAvatar());
|
||||
HeadWearInfo headWearInfo = userInfo.getUserHeadwear();
|
||||
if (headWearInfo != null && headWearInfo.getFirstUrl() != null) {
|
||||
AvatarHelper.loadAvatarFrame(mBinding.ivHeadWear, headWearInfo.getFirstUrl(), headWearInfo.getType());
|
||||
mBinding.ivUserHead.setPadding(0, 0, 0, 0);
|
||||
mBinding.ivUserHead.setStrokeWidth(0);
|
||||
} else {
|
||||
int padding = getResources().getDimensionPixelOffset(R.dimen.dp_0_5);
|
||||
mBinding.ivUserHead.setPadding(padding, padding, padding, padding);
|
||||
mBinding.ivUserHead.setStrokeWidth(getResources().getDimensionPixelOffset(R.dimen.dp_1));
|
||||
mBinding.ivHeadWear.setVisibility(View.GONE);
|
||||
}
|
||||
//设置昵称
|
||||
String nick = RegexUtil.getPrintableString(userInfo.getNick());
|
||||
mBinding.tvNick.setText(nick);
|
||||
//设置签名
|
||||
UserInfoUiMgr.get().setValue(userInfo);
|
||||
mBinding.tvDesc.setText(userInfo.getUserDesc() != null ? userInfo.getUserDesc() : getResources().getString(R.string.msg_no_user_desc));
|
||||
mBinding.tvDesc.setText(userInfo.getUserDesc() != null ? userInfo.getUserDesc() : "");
|
||||
|
||||
mBinding.tvGenderAge.setGender(userInfo.getGender());
|
||||
mBinding.tvGenderAge.setBirthDay(userInfo.getBirth());
|
||||
|
||||
mBinding.tvFansCount.setText(String.valueOf(userInfo.getFansNum()));
|
||||
mBinding.tvErbanId.setText(getString(R.string.me_user_id, userInfo.getErbanNo()));
|
||||
mBinding.ivGoodNumber.setVisibility(userInfo.isHasPrettyErbanNo() ? View.VISIBLE : View.GONE);
|
||||
mBinding.tvFollowCount.setText(String.valueOf(userInfo.getFollowNum()));
|
||||
mBinding.tvErbanId.setText(String.valueOf(userInfo.getErbanNo()));
|
||||
if (userInfo.isHasPrettyErbanNo()) {
|
||||
mBinding.ivId.setVisibility(View.GONE);
|
||||
mBinding.tvErbanId.setTextColor(ContextCompat.getColor(context, R.color.color_FEFFBF));
|
||||
mBinding.tvErbanId.setBackgroundResource(R.drawable.user_info_bg_good_id);
|
||||
setMarginTop(mBinding.layoutRegion, getResources().getDimensionPixelOffset(R.dimen.dp_5));
|
||||
} else {
|
||||
mBinding.tvErbanId.setTextColor(ContextCompat.getColor(context, R.color.color_CC191919));
|
||||
mBinding.tvErbanId.setBackgroundDrawable(null);
|
||||
mBinding.ivId.setVisibility(View.VISIBLE);
|
||||
setMarginTop(mBinding.layoutRegion, getResources().getDimensionPixelOffset(R.dimen.dp_8));
|
||||
}
|
||||
|
||||
String birth = TimeUtil.getChinaDateTimeString(userInfo.getBirth(), "yyyy-MM-dd");
|
||||
mBinding.tvRegion.setText(userInfo.getRegion());
|
||||
mBinding.tvBirthday.setText(birth);
|
||||
if (mBinding.tvRegion.getText().length() == 0 || mBinding.tvBirthday.getText().length() == 0) {
|
||||
mBinding.vRegionBirthdayLine.setVisibility(View.GONE);
|
||||
} else {
|
||||
mBinding.vRegionBirthdayLine.setVisibility(View.VISIBLE);
|
||||
}
|
||||
if (mBinding.tvRegion.getText().length() == 0 && mBinding.tvBirthday.getText().length() == 0) {
|
||||
mBinding.layoutRegion.setVisibility(View.GONE);
|
||||
} else {
|
||||
mBinding.layoutRegion.setVisibility(View.VISIBLE);
|
||||
}
|
||||
|
||||
//等级魅力值
|
||||
setUserLevel(userInfo.getUserLevelVo());
|
||||
@@ -311,19 +329,20 @@ public class UserInfoActivity extends BaseBindingActivity<ActivityUserInfoBindin
|
||||
|
||||
mBinding.ivChargeAgent.setVisibility(userInfo.isRechargeUser() ? View.VISIBLE : View.GONE);
|
||||
|
||||
// VipHelper.loadVipIcon(mBinding.ivVipIcon, userInfo.getUserVipInfoVO());
|
||||
|
||||
initVoiceShow(userInfo.getAudioCard());
|
||||
|
||||
// initLabel(userInfo.getLabels());
|
||||
|
||||
mBinding.tvErbanId.setOnLongClickListener(view -> {
|
||||
mBinding.llId.setOnClickListener(view -> {
|
||||
copyName();
|
||||
return true;
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
private void setMarginTop(View view, int top) {
|
||||
if (view.getLayoutParams() instanceof ViewGroup.MarginLayoutParams) {
|
||||
ViewGroup.MarginLayoutParams layoutParams = (ViewGroup.MarginLayoutParams) view.getLayoutParams();
|
||||
layoutParams.setMargins(layoutParams.leftMargin, top, layoutParams.rightMargin, layoutParams.bottomMargin);
|
||||
view.requestLayout();
|
||||
}
|
||||
}
|
||||
|
||||
private void copyName() {
|
||||
try {
|
||||
ClipboardManager cm = (ClipboardManager) UserInfoActivity.this.getSystemService(Context.CLIPBOARD_SERVICE);
|
||||
@@ -369,36 +388,34 @@ public class UserInfoActivity extends BaseBindingActivity<ActivityUserInfoBindin
|
||||
// userInfoLabelAdapter.setNewData(labels);
|
||||
// }
|
||||
|
||||
private void initTopAlbumView() {
|
||||
UserInfoTopAlbumAdapter adapter = new UserInfoTopAlbumAdapter(viewModel.isMe());
|
||||
int width = context.getResources().getDimensionPixelOffset(R.dimen.dp_5);
|
||||
boolean isRTL = UiUtils.INSTANCE.isRtl(this);
|
||||
int marginEnd = context.getResources().getDimensionPixelOffset(R.dimen.dp_8);
|
||||
mBinding.bannerView
|
||||
.setLifecycleRegistry(getLifecycle())
|
||||
.setOnPageClickListener((clickedView, position) -> {
|
||||
showUserPhoto(position);
|
||||
})
|
||||
.setRTLMode(isRTL)
|
||||
.setIndicatorHeight(width)
|
||||
.setIndicatorGravity(isRTL ? IndicatorGravity.START : IndicatorGravity.END)
|
||||
.setIndicatorSliderWidth(width, width * 2)
|
||||
.setIndicatorSliderGap(context.getResources().getDimensionPixelOffset(R.dimen.dp_6))
|
||||
.setIndicatorMargin(isRTL ? marginEnd : 0, 0, isRTL ? 0 : marginEnd, context.getResources().getDimensionPixelOffset(R.dimen.dp_71))
|
||||
.setAdapter(adapter).create();
|
||||
}
|
||||
|
||||
/**
|
||||
* 相册
|
||||
*/
|
||||
private void initPhoto(List<UserDetailInfo.DataBean.PrivatePhotoBean> list) {
|
||||
if (ListUtils.isListEmpty(list)) {
|
||||
return;
|
||||
if (list == null) {
|
||||
mBinding.bannerView.refreshData(new ArrayList());
|
||||
} else {
|
||||
mBinding.bannerView.refreshData(list);
|
||||
}
|
||||
if (bannerAdapter == null) {
|
||||
// mBinding.rollView.setHintViewDelegate(new RollPagerView.HintViewDelegate() {
|
||||
// @SuppressLint("SetTextI18n")
|
||||
// @Override
|
||||
// public void setCurrentPosition(int position, HintView hintView) {
|
||||
// if (mBinding.rollView.getAdapter() != null) {
|
||||
// mBinding.tvRollHint.setText((position + 1) + "/" + mBinding.rollView.getAdapter().getCount());
|
||||
// }
|
||||
// }
|
||||
//
|
||||
// @Override
|
||||
// public void initView(int length, int gravity, HintView hintView) {
|
||||
//
|
||||
// }
|
||||
// });
|
||||
bannerAdapter = identityState == OWN ? new SelfPhotoAdapter(list, this)
|
||||
: new UserInfoPhotoAdapter(list, this);
|
||||
mBinding.rollView.setAdapter(bannerAdapter);
|
||||
//设置透明度
|
||||
mBinding.rollView.setAnimationDurtion(500);
|
||||
}
|
||||
bannerAdapter.setData(list);
|
||||
bannerAdapter.notifyDataSetChanged();
|
||||
}
|
||||
|
||||
private void setUserLevel(UserLevelVo userLevelVo) {
|
||||
@@ -424,24 +441,45 @@ public class UserInfoActivity extends BaseBindingActivity<ActivityUserInfoBindin
|
||||
}
|
||||
|
||||
private void initNestScrollView() {
|
||||
mBinding.appBarLayout.addOnOffsetChangedListener((appBarLayout, verticalOffset) -> {
|
||||
LogUtils.d("verticalOffset=" + verticalOffset);
|
||||
if (flag == 0 && Math.abs(verticalOffset) > SizeUtils.dp2px(context, 200)) {
|
||||
//展开
|
||||
flag = 1;
|
||||
mBinding.ivUserBack.setImageResource(R.drawable.icon_user_back_black);
|
||||
mBinding.tbUserInfo.setBackgroundColor(getResources().getColor(R.color.white));
|
||||
setTitleVisible(true);
|
||||
setEditButton(identityState, true);
|
||||
} else if (flag == 1 && Math.abs(verticalOffset) <= 200) {
|
||||
//合起来
|
||||
flag = 0;
|
||||
mBinding.ivUserBack.setImageResource(R.drawable.icon_user_back);
|
||||
mBinding.tbUserInfo.setBackgroundColor(getResources().getColor(R.color.transparent));
|
||||
setTitleVisible(false);
|
||||
setEditButton(identityState, false);
|
||||
mBinding.appBarLayout.addOnOffsetChangedListener(new AppBarStateChangeListener() {
|
||||
@Override
|
||||
protected float getBias() {
|
||||
return 0.6f;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onStateChanged(AppBarLayout appBarLayout, State state) {
|
||||
if (state == State.COLLAPSED) {
|
||||
mBinding.ivUserBack.setImageResource(R.drawable.icon_user_back_black);
|
||||
mBinding.tbUserInfo.setBackgroundColor(getResources().getColor(R.color.white));
|
||||
setTitleVisible(true);
|
||||
setEditButton(identityState, true);
|
||||
}else{
|
||||
mBinding.ivUserBack.setImageResource(R.drawable.icon_user_back);
|
||||
mBinding.tbUserInfo.setBackgroundColor(getResources().getColor(R.color.transparent));
|
||||
setTitleVisible(false);
|
||||
setEditButton(identityState, false);
|
||||
}
|
||||
}
|
||||
});
|
||||
// mBinding.appBarLayout.addOnOffsetChangedListener((appBarLayout, verticalOffset) -> {
|
||||
// LogUtils.d("verticalOffset=" + verticalOffset);
|
||||
// if (flag == 0 && Math.abs(verticalOffset) > SizeUtils.dp2px(context, 200)) {
|
||||
// //展开
|
||||
// flag = 1;
|
||||
// mBinding.ivUserBack.setImageResource(R.drawable.icon_user_back_black);
|
||||
// mBinding.tbUserInfo.setBackgroundColor(getResources().getColor(R.color.white));
|
||||
// setTitleVisible(true);
|
||||
// setEditButton(identityState, true);
|
||||
// } else if (flag == 1 && Math.abs(verticalOffset) <= 200) {
|
||||
// //合起来
|
||||
// flag = 0;
|
||||
// mBinding.ivUserBack.setImageResource(R.drawable.icon_user_back);
|
||||
// mBinding.tbUserInfo.setBackgroundColor(getResources().getColor(R.color.transparent));
|
||||
// setTitleVisible(false);
|
||||
// setEditButton(identityState, false);
|
||||
// }
|
||||
// });
|
||||
}
|
||||
|
||||
private void setEditButton(int identityState, boolean isExpanded) {
|
||||
@@ -480,9 +518,15 @@ public class UserInfoActivity extends BaseBindingActivity<ActivityUserInfoBindin
|
||||
}
|
||||
|
||||
private void showUserPhoto(int position) {
|
||||
if (userInfo == null) {
|
||||
return;
|
||||
}
|
||||
//创建一个集合拿来做用户所有照片信息
|
||||
ArrayList<UserPhoto> userPhotos = new ArrayList<>();
|
||||
List<UserPhoto> realmList = userInfo.getPrivatePhoto();
|
||||
if (realmList == null) {
|
||||
return;
|
||||
}
|
||||
for (UserPhoto photo : realmList) {
|
||||
UserPhoto newPhoto = new UserPhoto();
|
||||
newPhoto.setPid(photo.getPid());
|
||||
@@ -598,7 +642,7 @@ public class UserInfoActivity extends BaseBindingActivity<ActivityUserInfoBindin
|
||||
|
||||
private void setLikedText(boolean isliked) {
|
||||
mIslike = isliked;
|
||||
attentionLayout.setText(getString((isliked) ? R.string.already_attention : R.string.attention));
|
||||
attentionLayout.setText(getString((isliked) ? R.string.already_attention : R.string.follow));
|
||||
}
|
||||
|
||||
@Subscribe(threadMode = ThreadMode.MAIN)
|
||||
@@ -629,138 +673,9 @@ public class UserInfoActivity extends BaseBindingActivity<ActivityUserInfoBindin
|
||||
}
|
||||
}
|
||||
|
||||
public void initVoiceShow(UserInfo.SoundBean audioCard) {
|
||||
if (audioCard != null && !TextUtils.isEmpty(audioCard.getAudioUrl())) {
|
||||
if (AuthModel.get().getCurrentUid() == userId) {//主态
|
||||
if (audioCard.getStatus() == 2) {
|
||||
showSoundCard(audioCard);
|
||||
} else {
|
||||
mBinding.llAudio.setVisibility(View.GONE);
|
||||
// mBinding.llAudioTip.setVisibility(View.VISIBLE);
|
||||
}
|
||||
} else if (audioCard.getStatus() == 2) {//客态
|
||||
showSoundCard(audioCard);
|
||||
}
|
||||
} else {
|
||||
if (AuthModel.get().getCurrentUid() == userId) {//主态
|
||||
mBinding.llAudio.setVisibility(View.GONE);
|
||||
// mBinding.llAudioTip.setVisibility(View.VISIBLE);
|
||||
} else {
|
||||
mBinding.llAudio.setVisibility(View.GONE);
|
||||
// mBinding.llAudioTip.setVisibility(View.GONE);
|
||||
}
|
||||
}
|
||||
// mBinding.llAudioTip.setOnClickListener(view -> {
|
||||
// // 点击跳转到声音签名页面
|
||||
// UIHelper.showSoundAct(
|
||||
// this,
|
||||
// UserInfoModifyActivity.Method.AUDIO,
|
||||
// ResUtil.getString(R.string.ui_user_userinfomodifyactivity_07),
|
||||
// audioCard);
|
||||
// });
|
||||
}
|
||||
|
||||
private void showSoundCard(UserInfo.SoundBean audioCard) {
|
||||
mBinding.llAudio.setVisibility(View.VISIBLE);
|
||||
// mBinding.llAudioTip.setVisibility(View.GONE);
|
||||
mBinding.tvAudio.setText(audioCard.getSecond() + "s");
|
||||
mBinding.livUser.stopAnimation();
|
||||
mBinding.llAudio.setOnClickListener(v -> toggleAudio(audioCard));
|
||||
}
|
||||
|
||||
private void toggleAudio(UserInfo.SoundBean audioCard) {
|
||||
String url = "";
|
||||
if (audioCard.getAudioUrl().contains("http")) {
|
||||
url = audioCard.getAudioUrl();
|
||||
}
|
||||
if (TextUtils.isEmpty(url)) return;
|
||||
if (!audioPlaying) {
|
||||
playAudio(url, audioCard.getSecond());
|
||||
} else {
|
||||
stopAudio(audioCard.getSecond());
|
||||
}
|
||||
}
|
||||
|
||||
private CountDownTimer timer = null;
|
||||
|
||||
private void playAudio(String url, int second) {
|
||||
if (audioPlaying) return;
|
||||
audioPlaying = true;
|
||||
playSvgaBg(mBinding.livUser, "svga/user_sound_play.svga");
|
||||
mBinding.ivAudioControl.setImageResource(R.drawable.user_info_ic_audio_pause);
|
||||
startCountDown(second);
|
||||
if (AvRoomDataManager.get().mCurrentRoomInfo != null) {
|
||||
AudioEngineManager.get().setRemoteMute(true);//設置靜音
|
||||
AudioEngineManager.get().setMute(true);//不能説話
|
||||
AudioEngineManager.get().setRole(Constants.CLIENT_ROLE_AUDIENCE);
|
||||
}
|
||||
AudioPlayerHelper.get().playInThread(url, new OnPlayListener() {
|
||||
|
||||
@Override
|
||||
public void onError(String error) {
|
||||
SingleToastUtil.showToast(getString(R.string.me_error_playing));
|
||||
stopAudio(second);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onPrepared() {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onPlaying(long currDuration) {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onCompletion() {
|
||||
stopAudio(second);
|
||||
}
|
||||
|
||||
});
|
||||
}
|
||||
|
||||
private void startCountDown(int time) {
|
||||
timer = new CountDownTimer((time + 1) * 1000L, 1000L) {
|
||||
@Override
|
||||
public void onTick(long millisUntilFinished) {
|
||||
String time = String.valueOf(millisUntilFinished / 1000);
|
||||
mBinding.tvAudio.setText(time + "s");
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onFinish() {
|
||||
}
|
||||
};
|
||||
timer.start();
|
||||
}
|
||||
|
||||
private void stopCountDown(int second) {
|
||||
if (timer != null) {
|
||||
mBinding.tvAudio.setText(second+"s");
|
||||
timer.cancel();
|
||||
}
|
||||
}
|
||||
|
||||
private void stopAudio(int second) {
|
||||
stopCountDown(second);
|
||||
if (!audioPlaying) return;
|
||||
audioPlaying = false;
|
||||
mBinding.livUser.stopAnimation();
|
||||
mBinding.ivAudioControl.setImageResource(R.drawable.user_info_ic_audio_play);
|
||||
AudioPlayerHelper.get().endPlay();
|
||||
if (AvRoomDataManager.get().mCurrentRoomInfo != null) {
|
||||
AudioEngineManager.get().setRemoteMute(isRemoteMute);//非靜音
|
||||
AudioEngineManager.get().setMute(isMute);//能説話
|
||||
AudioEngineManager.get().setRole(isMute ? Constants.CLIENT_ROLE_AUDIENCE : Constants.CLIENT_ROLE_BROADCASTER);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onPause() {
|
||||
super.onPause();
|
||||
if (audioPlaying) {
|
||||
stopAudio(userInfo.getAudioCard().getSecond());
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@@ -35,13 +35,12 @@ import com.chwl.app.ui.widget.dialog.CommonTipDialog
|
||||
import com.chwl.app.utils.RegexUtil
|
||||
import com.chwl.core.auth.AuthModel
|
||||
import com.chwl.core.file.FileModel
|
||||
import com.chwl.core.file.cos.CosException
|
||||
import com.chwl.core.user.UserModel
|
||||
import com.chwl.core.user.bean.UserInfo
|
||||
import com.chwl.core.user.bean.UserPhoto
|
||||
import com.chwl.core.utils.CoreLogger
|
||||
import com.chwl.library.common.file.FileHelper
|
||||
import com.chwl.library.common.photo.PhotoProviderNew
|
||||
import com.chwl.library.common.photo.PhotoProvider
|
||||
import com.chwl.library.common.util.PhotoCompressCallback
|
||||
import com.chwl.library.common.util.PhotoCompressUtil
|
||||
import com.chwl.library.easypermisssion.EasyPermissions
|
||||
@@ -372,7 +371,7 @@ class UserInfoModifyActivity : BaseViewBindingActivity<ActivityUserInfoModifyBin
|
||||
)
|
||||
} else {
|
||||
mUri = Uri.parse("file://${FileHelper.getRootCacheDir()?.path}/${getNowTime()}.jpg")
|
||||
PhotoProviderNew.photoProvider(
|
||||
PhotoProvider.photoProvider(
|
||||
this,
|
||||
resultCode = REQUEST_CODE_OPEN_PHOTO_PROVIDER
|
||||
)
|
||||
@@ -430,7 +429,7 @@ class UserInfoModifyActivity : BaseViewBindingActivity<ActivityUserInfoModifyBin
|
||||
}
|
||||
}
|
||||
REQUEST_CODE_OPEN_PHOTO_PROVIDER -> data?.let {
|
||||
val photos = PhotoProviderNew.getResultPhotoList(it)
|
||||
val photos = PhotoProvider.getResultPhotoList(it)
|
||||
if (!photos.isNullOrEmpty()) {
|
||||
val photo = photos[0]
|
||||
crop(photo.uri, photo.size, mUri)
|
||||
|
@@ -32,7 +32,7 @@ import com.chwl.core.user.bean.UserPhoto
|
||||
import com.chwl.core.utils.CoreLogger
|
||||
import com.chwl.core.utils.net.BeanObserver
|
||||
import com.chwl.library.common.file.FileHelper
|
||||
import com.chwl.library.common.photo.PhotoProviderNew
|
||||
import com.chwl.library.common.photo.PhotoProvider
|
||||
import com.chwl.library.common.util.PhotoCompressCallback
|
||||
import com.chwl.library.common.util.PhotoCompressUtil
|
||||
import com.chwl.library.easypermisssion.EasyPermissions
|
||||
@@ -232,7 +232,7 @@ class UserModifyPhotosActivity : TakePhotoActivity(), PhotoItemClickListener,
|
||||
)
|
||||
} else {
|
||||
mUri = Uri.parse("file://${FileHelper.getRootCacheDir()?.path}/${getNowTime()}.jpg")
|
||||
PhotoProviderNew.photoProvider(
|
||||
PhotoProvider.photoProvider(
|
||||
this,
|
||||
resultCode = REQUEST_CODE_OPEN_PHOTO_PROVIDER
|
||||
)
|
||||
@@ -252,7 +252,7 @@ class UserModifyPhotosActivity : TakePhotoActivity(), PhotoItemClickListener,
|
||||
} else if (resultCode == RESULT_OK) {
|
||||
when (requestCode) {
|
||||
REQUEST_CODE_OPEN_PHOTO_PROVIDER -> data?.let {
|
||||
val photos = PhotoProviderNew.getResultPhotoList(data) ?: return
|
||||
val photos = PhotoProvider.getResultPhotoList(data) ?: return
|
||||
if (photos.isNotEmpty()) {
|
||||
val photo = photos[0]
|
||||
crop(photo.uri, photo.size, mUri)
|
||||
|
@@ -0,0 +1,100 @@
|
||||
package com.chwl.app.ui.user.adapter;
|
||||
|
||||
import android.content.Context;
|
||||
import android.view.Gravity;
|
||||
import android.view.ViewGroup;
|
||||
import android.widget.FrameLayout;
|
||||
import android.widget.TextView;
|
||||
|
||||
import androidx.core.content.ContextCompat;
|
||||
|
||||
import com.chwl.app.R;
|
||||
import com.chwl.app.ui.widget.XRecyclerView.ScaleTransitionPagerTitleView;
|
||||
import com.chwl.app.ui.widget.magicindicator.buildins.UIUtil;
|
||||
import com.chwl.app.ui.widget.magicindicator.buildins.commonnavigator.abs.CommonNavigatorAdapter;
|
||||
import com.chwl.app.ui.widget.magicindicator.buildins.commonnavigator.abs.IPagerIndicator;
|
||||
import com.chwl.app.ui.widget.magicindicator.buildins.commonnavigator.abs.IPagerTitleView;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
public class ContactsIndicatorAdapter extends CommonNavigatorAdapter {
|
||||
private final List<? extends CharSequence> mTitleList;
|
||||
|
||||
private int textSize = 16;
|
||||
private float minScale = 1f;
|
||||
private boolean showIndicator = true;
|
||||
private OnItemSelectListener mOnItemSelectListener;
|
||||
|
||||
public ContactsIndicatorAdapter(Context context, List<? extends CharSequence> charSequences) {
|
||||
this.mTitleList = charSequences;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getCount() {
|
||||
return mTitleList == null ? 0 : mTitleList.size();
|
||||
}
|
||||
|
||||
@Override
|
||||
public IPagerTitleView getTitleView(Context context, final int i) {
|
||||
ScaleTransitionPagerTitleView scaleTransitionPagerTitleView = new ScaleTransitionPagerTitleView(context, true);
|
||||
scaleTransitionPagerTitleView.setNormalColor(ContextCompat.getColor(context, R.color.color_84868A));
|
||||
scaleTransitionPagerTitleView.setSelectedColor(ContextCompat.getColor(context, R.color.color_1E1E1F));
|
||||
scaleTransitionPagerTitleView.setMinScale(minScale);
|
||||
scaleTransitionPagerTitleView.setTextSize(textSize);
|
||||
int padding = UIUtil.dip2px(context, 16);
|
||||
scaleTransitionPagerTitleView.setPadding(padding, 0, padding, 0);
|
||||
scaleTransitionPagerTitleView.setText(mTitleList.get(i));
|
||||
scaleTransitionPagerTitleView.setOnClickListener(view -> {
|
||||
if (mOnItemSelectListener != null) {
|
||||
mOnItemSelectListener.onItemSelect(i, scaleTransitionPagerTitleView);
|
||||
}
|
||||
});
|
||||
return scaleTransitionPagerTitleView;
|
||||
}
|
||||
|
||||
@Override
|
||||
public IPagerIndicator getIndicator(Context context) {
|
||||
if (!showIndicator) return null;
|
||||
DrawableIndicator indicator = new DrawableIndicator(context);
|
||||
indicator.setMode(DrawableIndicator.MODE_EXACTLY);
|
||||
indicator.setDrawableWidth(context.getResources().getDimensionPixelOffset(R.dimen.dp_24));
|
||||
indicator.setDrawableHeight(context.getResources().getDimensionPixelOffset(R.dimen.dp_7));
|
||||
indicator.setIndicatorDrawable(context.getResources().getDrawable(R.drawable.base_ic_indicator));
|
||||
FrameLayout.LayoutParams lp = new FrameLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT);
|
||||
lp.gravity = Gravity.END;
|
||||
indicator.setLayoutParams(lp);
|
||||
return indicator;
|
||||
}
|
||||
|
||||
public int getTextSize() {
|
||||
return textSize;
|
||||
}
|
||||
|
||||
public void setTextSize(int textSize) {
|
||||
this.textSize = textSize;
|
||||
}
|
||||
|
||||
public float getMinScale() {
|
||||
return minScale;
|
||||
}
|
||||
|
||||
public void setMinScale(float minScale) {
|
||||
this.minScale = minScale;
|
||||
}
|
||||
|
||||
public boolean isShowIndicator() {
|
||||
return showIndicator;
|
||||
}
|
||||
|
||||
public void setShowIndicator(boolean showIndicator) {
|
||||
this.showIndicator = showIndicator;
|
||||
}
|
||||
|
||||
public void setOnItemSelectListener(OnItemSelectListener onItemSelectListener) {
|
||||
mOnItemSelectListener = onItemSelectListener;
|
||||
}
|
||||
|
||||
public interface OnItemSelectListener {
|
||||
void onItemSelect(int position, TextView view);
|
||||
}
|
||||
}
|
@@ -63,8 +63,8 @@ public class HomeRecommendIndicatorAdapter extends CommonNavigatorAdapter {
|
||||
if (!showIndicator) return null;
|
||||
DrawableIndicator indicator = new DrawableIndicator(context);
|
||||
indicator.setMode(DrawableIndicator.MODE_EXACTLY);
|
||||
indicator.setDrawableWidth(UIUtil.dip2px(context, 24));
|
||||
indicator.setDrawableHeight(UIUtil.dip2px(context, 8));
|
||||
indicator.setDrawableWidth(context.getResources().getDimensionPixelOffset(R.dimen.dp_24));
|
||||
indicator.setDrawableHeight(context.getResources().getDimensionPixelOffset(R.dimen.dp_7));
|
||||
indicator.setIndicatorDrawable(context.getResources().getDrawable(R.drawable.base_ic_indicator));
|
||||
FrameLayout.LayoutParams lp = new FrameLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT);
|
||||
lp.gravity = Gravity.END;
|
||||
|
@@ -1,48 +0,0 @@
|
||||
package com.chwl.app.ui.user.adapter
|
||||
|
||||
import android.content.Context
|
||||
import android.view.Gravity
|
||||
import android.view.View
|
||||
import android.view.ViewGroup
|
||||
import android.widget.FrameLayout
|
||||
import android.widget.ImageView
|
||||
import com.chwl.app.R
|
||||
import com.chwl.app.ui.widget.magicindicator.buildins.UIUtil
|
||||
import com.chwl.app.ui.widget.rollviewpager.adapter.StaticPagerAdapterWrapper
|
||||
import com.chwl.core.user.bean.UserDetailInfo
|
||||
|
||||
class SelfPhotoAdapter(
|
||||
photoBeans: List<UserDetailInfo.DataBean.PrivatePhotoBean>,
|
||||
context: Context
|
||||
) : StaticPagerAdapterWrapper<UserDetailInfo.DataBean.PrivatePhotoBean>(photoBeans, context) {
|
||||
private val origin by lazy {
|
||||
UserInfoPhotoAdapter(photoBeans, context)
|
||||
}
|
||||
|
||||
override fun getView(container: ViewGroup?, position: Int): View {
|
||||
val originView = origin.getView(container, position)
|
||||
val flContainer = FrameLayout(context)
|
||||
flContainer.layoutParams = FrameLayout.LayoutParams(
|
||||
FrameLayout.LayoutParams.MATCH_PARENT,
|
||||
FrameLayout.LayoutParams.WRAP_CONTENT
|
||||
)
|
||||
flContainer.addView(originView)
|
||||
//overlay
|
||||
val statusView = ImageView(context)
|
||||
statusView.setImageResource(R.drawable.ic_album_auditing)
|
||||
statusView.scaleType = ImageView.ScaleType.CENTER_INSIDE
|
||||
val statusViewLayoutParams =
|
||||
FrameLayout.LayoutParams(UIUtil.dip2px(context, 86.0), UIUtil.dip2px(context, 51.0))
|
||||
statusViewLayoutParams.gravity = Gravity.RIGHT
|
||||
flContainer.addView(statusView, statusViewLayoutParams)
|
||||
|
||||
val isVisit = (dataList.getOrNull(position)?.isReview == true)
|
||||
statusView.visibility = if (isVisit) View.VISIBLE else View.GONE
|
||||
return flContainer
|
||||
}
|
||||
|
||||
override fun setData(dataList: MutableList<UserDetailInfo.DataBean.PrivatePhotoBean>?) {
|
||||
super.setData(dataList)
|
||||
origin.setData(dataList)
|
||||
}
|
||||
}
|
@@ -0,0 +1,17 @@
|
||||
package com.chwl.app.ui.user.adapter
|
||||
|
||||
import android.widget.ImageView
|
||||
import com.chad.library.adapter.base.BaseQuickAdapter
|
||||
import com.chad.library.adapter.base.BaseViewHolder
|
||||
import com.chwl.app.R
|
||||
import com.chwl.app.ui.utils.load
|
||||
import com.chwl.core.user.bean.UserDetailInfo
|
||||
import com.chwl.core.user.bean.UserPhoto
|
||||
|
||||
class UserInfoAlbumAdapter :
|
||||
BaseQuickAdapter<UserPhoto, BaseViewHolder>(R.layout.user_info_item_album) {
|
||||
override fun convert(helper: BaseViewHolder, item: UserPhoto) {
|
||||
val imageView = helper.getView<ImageView>(R.id.iv_image)
|
||||
imageView.load(item.photoUrl)
|
||||
}
|
||||
}
|
@@ -0,0 +1,249 @@
|
||||
package com.chwl.app.ui.user.adapter;
|
||||
|
||||
|
||||
import android.app.Activity;
|
||||
import android.content.Context;
|
||||
import android.text.TextUtils;
|
||||
import android.util.SparseBooleanArray;
|
||||
import android.util.SparseIntArray;
|
||||
import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
import android.widget.ImageView;
|
||||
import android.widget.LinearLayout;
|
||||
import android.widget.TextView;
|
||||
|
||||
import androidx.recyclerview.widget.GridLayoutManager;
|
||||
import androidx.recyclerview.widget.RecyclerView;
|
||||
|
||||
import com.chad.library.adapter.base.BaseQuickAdapter;
|
||||
import com.chad.library.adapter.base.BaseViewHolder;
|
||||
import com.chwl.app.R;
|
||||
import com.chwl.app.community.dynamic.view.DynamicDetailActivity;
|
||||
import com.chwl.app.community.helper.CalcSize;
|
||||
import com.chwl.app.community.helper.DynamicUiHelper;
|
||||
import com.chwl.app.community.helper.ImageUiHelper;
|
||||
import com.chwl.app.photo.DynamicImageAdapter;
|
||||
import com.chwl.app.community.utils.ObjectTypeHelper;
|
||||
import com.chwl.app.community.widget.ExpandableTextView;
|
||||
import com.chwl.app.photo.BigPhotoActivity;
|
||||
import com.chwl.app.photo.PagerOption;
|
||||
import com.chwl.app.ui.widget.magicindicator.buildins.UIUtil;
|
||||
import com.chwl.app.utils.TimeUiUtils;
|
||||
import com.chwl.core.community.bean.DynamicMedia;
|
||||
import com.chwl.core.community.bean.WorldDynamicBean;
|
||||
import com.chwl.core.community.dynamic.DynamicModel;
|
||||
import com.chwl.core.utils.net.DontWarnObserver;
|
||||
import com.chwl.core.utils.net.RxHelper;
|
||||
import com.chwl.library.utils.ResUtil;
|
||||
import com.chwl.library.utils.SingleToastUtil;
|
||||
import com.netease.nim.uikit.common.util.log.LogUtil;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* create by lvzebiao @2019/11/13
|
||||
*/
|
||||
public class UserInfoDynamicAdapter extends BaseQuickAdapter<WorldDynamicBean, BaseViewHolder> {
|
||||
|
||||
private SparseBooleanArray mCollapsedStatus = new SparseBooleanArray();
|
||||
private SparseIntArray mCollapsedHeightStatus = new SparseIntArray(2);
|
||||
|
||||
private Context context;
|
||||
|
||||
private long worldId;
|
||||
|
||||
private int iconWidth;
|
||||
|
||||
private int iconHeight;
|
||||
|
||||
/**
|
||||
* 单图情况下的边界
|
||||
*/
|
||||
private int imageBorder;
|
||||
/**
|
||||
* 图片的边界值
|
||||
*/
|
||||
private int divider;
|
||||
|
||||
public UserInfoDynamicAdapter(Context context) {
|
||||
super(R.layout.item_userinfo_dynamic);
|
||||
this.context = context;
|
||||
iconWidth = UIUtil.dip2px(context, 32);
|
||||
iconHeight = UIUtil.dip2px(context, 15);
|
||||
//0.68
|
||||
imageBorder = UIUtil.getScreenWidth(context) * ImageUiHelper.BORDER_MIN / ImageUiHelper.BORDER_MAX;
|
||||
divider = UIUtil.dip2px(context, 10);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void convert(BaseViewHolder helper, WorldDynamicBean item) {
|
||||
//这个值,有没有文本UI部分,改变图片部分的margin
|
||||
boolean noTextUi = TextUtils.isEmpty(item.getContent());
|
||||
RecyclerView rvImage = helper.getView(R.id.rv_image);
|
||||
List<DynamicMedia> dynamicMediaList = item.getDynamicResList();
|
||||
if (item.getType() == WorldDynamicBean.TYPE_IMAGE
|
||||
&& dynamicMediaList != null && dynamicMediaList.size() > 0) {
|
||||
rvImage.setVisibility(View.VISIBLE);
|
||||
initRecyclerView(rvImage, dynamicMediaList, noTextUi);
|
||||
} else {
|
||||
rvImage.setVisibility(View.GONE);
|
||||
}
|
||||
|
||||
//时间
|
||||
helper.setText(R.id.tv_time, TimeUiUtils.getDynamicUi(item.getPublishTime()));
|
||||
|
||||
ExpandableTextView etvContent = helper.getView(R.id.etv_content);
|
||||
etvContent.setEventType(1);
|
||||
if (noTextUi) {
|
||||
etvContent.setVisibility(View.GONE);
|
||||
} else {
|
||||
etvContent.setVisibility(View.VISIBLE);
|
||||
CharSequence formatText = DynamicUiHelper.formatFirstDynamicContent(
|
||||
item, etvContent.mTv, iconWidth, iconHeight);
|
||||
etvContent.setText(formatText, mCollapsedStatus, helper.getAdapterPosition(), mCollapsedHeightStatus);
|
||||
}
|
||||
|
||||
helper.setGone(R.id.layout_root_mini_world, item.getTag() != null);
|
||||
helper.setText(R.id.tv_mini_world_name, "#" + item.getTag());
|
||||
|
||||
//评论
|
||||
setCommentCount(helper, item.getCommentCount());
|
||||
|
||||
//点赞
|
||||
setLikeCount(helper, item.getLikeCount(), item.isLike(), false);
|
||||
LinearLayout llLike = helper.getView(R.id.ll_like);
|
||||
llLike.setEnabled(true);
|
||||
llLike.setOnClickListener(new View.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(View v) {
|
||||
if (item.getDynamicId() == 0) {
|
||||
SingleToastUtil.showToast(ResUtil.getString(R.string.the_default_dynamic_cannot_be_liked));
|
||||
return;
|
||||
}
|
||||
llLike.setEnabled(false);
|
||||
int status = item.isLike() ? 0 : 1;
|
||||
DynamicModel.get().like(worldId, item.getDynamicId(), item.getUid(), status, 1)
|
||||
.compose(RxHelper.bindContext(context))
|
||||
.subscribe(new DontWarnObserver<String>() {
|
||||
@Override
|
||||
public void accept(String s, String error) {
|
||||
super.accept(s, error);
|
||||
llLike.setEnabled(true);
|
||||
if (error != null) {
|
||||
SingleToastUtil.showToast(error);
|
||||
} else {
|
||||
LogUtil.print(mContext.getString(R.string.me_call_the_like_interface_to_complete));
|
||||
if (status == 1) {
|
||||
item.setLikeCount(item.getLikeCount() + 1);
|
||||
} else {
|
||||
item.setLikeCount(item.getLikeCount() - 1);
|
||||
}
|
||||
item.setLike(status == 1);
|
||||
setLikeCount(helper, item.getLikeCount(), item.isLike(), true);
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
});
|
||||
//评论
|
||||
helper.getView(R.id.ll_comment).setOnClickListener(v -> {
|
||||
if (item.getDynamicId() == 0) {
|
||||
SingleToastUtil.showToast(ResUtil.getString(R.string.the_default_dynamic_cannot_be_commented));
|
||||
return;
|
||||
}
|
||||
DynamicDetailActivity.start(context, item.getDynamicId(), worldId,
|
||||
helper.getAdapterPosition(), true, 1);
|
||||
}
|
||||
);
|
||||
helper.setVisible(R.id.iv_more, item.getDynamicId() != 0);
|
||||
if (item.getDynamicId() != 0) {
|
||||
helper.addOnClickListener(R.id.iv_more).addOnClickListener(R.id.ll_share);
|
||||
}
|
||||
|
||||
View.OnClickListener toDetailListener = v -> {
|
||||
if (item.getDynamicId() == 0) {
|
||||
return;
|
||||
}
|
||||
DynamicDetailActivity.start(context, item.getDynamicId(), worldId,
|
||||
helper.getAdapterPosition(), false, 1);
|
||||
};
|
||||
|
||||
if (etvContent.mTv != null) {
|
||||
etvContent.mTv.setOnClickListener(toDetailListener);
|
||||
}
|
||||
//跳转去详情
|
||||
helper.itemView.setOnClickListener(toDetailListener);
|
||||
helper.setGone(R.id.line_bottom, getItemCount() - 1 != helper.getLayoutPosition());
|
||||
}
|
||||
|
||||
private void setLikeCount(BaseViewHolder helper, int likeCount, boolean isLike, boolean isAnim) {
|
||||
TextView tvLike = helper.getView(R.id.tv_like);
|
||||
String likeCountStr;
|
||||
if (likeCount < 0) {
|
||||
likeCountStr = "0";
|
||||
} else if (likeCount >= 1000) {
|
||||
likeCountStr = "999+";
|
||||
} else {
|
||||
likeCountStr = String.valueOf(likeCount);
|
||||
}
|
||||
tvLike.setText(likeCountStr);
|
||||
|
||||
ImageView ivLikeAnim = helper.getView(R.id.iv_like_pic);
|
||||
if (isLike) {
|
||||
ivLikeAnim.setImageResource(R.drawable.icon_dy_list_like);
|
||||
} else {
|
||||
ivLikeAnim.setImageResource(R.drawable.icon_dy_list_like_false);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
private void initRecyclerView(RecyclerView rvImage, List<DynamicMedia> imageUrl, boolean noTextUi) {
|
||||
if (imageUrl == null) {
|
||||
return;
|
||||
}
|
||||
CalcSize calcSize = new CalcSize(imageBorder);
|
||||
ViewGroup.MarginLayoutParams params = (ViewGroup.MarginLayoutParams) rvImage.getLayoutParams();
|
||||
if (imageUrl.size() > 1) {
|
||||
params.width = ViewGroup.LayoutParams.MATCH_PARENT;
|
||||
params.height = ViewGroup.LayoutParams.WRAP_CONTENT;
|
||||
} else {
|
||||
//单图的情况,按比例显示
|
||||
DynamicMedia media = null;
|
||||
if (imageUrl.size() > 0) {
|
||||
media = imageUrl.get(0);
|
||||
}
|
||||
if (media == null) {
|
||||
return;
|
||||
}
|
||||
calcSize = ImageUiHelper.calcImage(media, imageBorder);
|
||||
params.width = calcSize.width + divider;
|
||||
params.height = calcSize.height + divider;
|
||||
}
|
||||
rvImage.setLayoutParams(params);
|
||||
rvImage.setNestedScrollingEnabled(false);
|
||||
rvImage.setLayoutManager(new GridLayoutManager(mContext, imageUrl.size() > 2 ? 3 : imageUrl.size()));
|
||||
DynamicImageAdapter adapter = new DynamicImageAdapter(R.layout.item_dynamic_image, imageUrl);
|
||||
adapter.setSingleImageHeight(calcSize.height);
|
||||
adapter.setOnItemClickListener((adapter1, view, position) -> {
|
||||
PagerOption option = new PagerOption().setSave(true);
|
||||
BigPhotoActivity.start((Activity) mContext, ObjectTypeHelper.mediaToCustomList(imageUrl),
|
||||
position, option);
|
||||
}
|
||||
);
|
||||
rvImage.setAdapter(adapter);
|
||||
}
|
||||
|
||||
private void setCommentCount(BaseViewHolder helper, int commentCount) {
|
||||
TextView tvComment = helper.getView(R.id.tv_comment);
|
||||
String commentCountStr;
|
||||
if (commentCount < 0) {
|
||||
commentCountStr = "0";
|
||||
} else if (commentCount >= 1000) {
|
||||
commentCountStr = "999+";
|
||||
} else {
|
||||
commentCountStr = String.valueOf(commentCount);
|
||||
}
|
||||
tvComment.setText(commentCountStr);
|
||||
}
|
||||
|
||||
}
|
@@ -0,0 +1,31 @@
|
||||
package com.chwl.app.ui.user.adapter
|
||||
|
||||
import android.view.View
|
||||
import android.view.ViewGroup
|
||||
import android.widget.ImageView
|
||||
import androidx.core.view.isVisible
|
||||
import com.chad.library.adapter.base.BaseQuickAdapter
|
||||
import com.chad.library.adapter.base.BaseViewHolder
|
||||
import com.chwl.app.R
|
||||
import com.chwl.app.ui.utils.load
|
||||
import com.chwl.core.game_team.UserGameTeamInfo
|
||||
|
||||
class UserInfoGameTeamAdapter(private val isMe: Boolean) :
|
||||
BaseQuickAdapter<UserGameTeamInfo, BaseViewHolder>(R.layout.user_info_item_game_team) {
|
||||
|
||||
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): BaseViewHolder {
|
||||
return super.onCreateViewHolder(parent, viewType).apply {
|
||||
addOnClickListener(R.id.layout_play)
|
||||
getView<View>(R.id.layout_play).isVisible = !isMe
|
||||
}
|
||||
}
|
||||
|
||||
override fun convert(helper: BaseViewHolder, item: UserGameTeamInfo) {
|
||||
helper.setText(R.id.tv_name, item.gameName)
|
||||
helper.setText(R.id.tv_level, item.proficiency)
|
||||
helper.setText(R.id.tv_price, item.price?.toString() ?: "")
|
||||
helper.getView<ImageView>(R.id.iv_icon).load(item.logo)
|
||||
helper.getView<ImageView>(R.id.iv_bg)
|
||||
.load(item.background, defaultRes = R.color.color_66000000)
|
||||
}
|
||||
}
|
@@ -0,0 +1,36 @@
|
||||
package com.chwl.app.ui.user.adapter
|
||||
|
||||
import android.view.ViewGroup
|
||||
import android.widget.ImageView
|
||||
import com.chad.library.adapter.base.BaseQuickAdapter
|
||||
import com.chad.library.adapter.base.BaseViewHolder
|
||||
import com.chwl.app.R
|
||||
import com.chwl.app.ui.utils.load
|
||||
import com.chwl.core.bean.UserInfoItem
|
||||
import com.chwl.core.user.bean.GiftWallInfo
|
||||
|
||||
class UserInfoGiftAdapter(private val itemBgRes: Int = R.drawable.user_info_bg_gift) :
|
||||
BaseQuickAdapter<GiftWallInfo, BaseViewHolder>(R.layout.user_info_item_gift) {
|
||||
override fun onCreateDefViewHolder(parent: ViewGroup?, viewType: Int): BaseViewHolder {
|
||||
return super.onCreateDefViewHolder(parent, viewType).apply {
|
||||
getView<ImageView>(R.id.iv_bg).setImageResource(itemBgRes)
|
||||
}
|
||||
}
|
||||
|
||||
override fun convert(helper: BaseViewHolder, item: GiftWallInfo) {
|
||||
helper.setText(R.id.tv_name, item.giftName)
|
||||
helper.setText(R.id.tv_count, "x${item.reciveCount}")
|
||||
val iconView = helper.getView<ImageView>(R.id.iv_icon)
|
||||
iconView.load(item.picUrl)
|
||||
val rankView = helper.itemView.findViewById<ImageView>(R.id.iv_rank)
|
||||
if (helper.bindingAdapterPosition == 0) {
|
||||
rankView.setImageResource(R.drawable.ic_gift_one)
|
||||
} else if (helper.bindingAdapterPosition == 1) {
|
||||
rankView.setImageResource(R.drawable.ic_gift_two)
|
||||
} else if (helper.bindingAdapterPosition == 2) {
|
||||
rankView.setImageResource(R.drawable.ic_gift_three)
|
||||
} else {
|
||||
rankView.setImageDrawable(null)
|
||||
}
|
||||
}
|
||||
}
|
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user