diff --git a/app/build.gradle b/app/build.gradle index 921cbc776..0532953b0 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -250,9 +250,9 @@ dependencies { // 易盾一键登录 implementation(name: 'quicklogin_libary-external-release', ext: 'aar') - implementation(name: 'CMCCSSOSDK-WY', ext: 'aar') - implementation(name: 'Ui-factory_oauth_mobile_3.8.3.1', ext: 'aar') - implementation(name: 'CTAccount_sdk_api_v3.7.0_all', ext: 'aar') + implementation(name: 'CMCCSSOSDK-wy-release', ext: 'aar') + implementation(name: 'Ui-factory_oauth_mobile_3.9.1.7_external', ext: 'aar') + implementation(name: 'CTAccount_sdk_api_v3.8.3_all', ext: 'aar') implementation 'com.github.fodroid:XRadioGroup:v1.5' implementation files('libs/msa_mdid_1.0.13.aar') diff --git a/app/quick-pass-libs/CMCCSSOSDK-WY.aar b/app/quick-pass-libs/CMCCSSOSDK-WY.aar deleted file mode 100644 index adf4c19c5..000000000 Binary files a/app/quick-pass-libs/CMCCSSOSDK-WY.aar and /dev/null differ diff --git a/app/quick-pass-libs/CMCCSSOSDK-wy-release.aar b/app/quick-pass-libs/CMCCSSOSDK-wy-release.aar new file mode 100644 index 000000000..f798760d3 Binary files /dev/null and b/app/quick-pass-libs/CMCCSSOSDK-wy-release.aar differ diff --git a/app/quick-pass-libs/CTAccount_sdk_api_v3.7.0_all.aar b/app/quick-pass-libs/CTAccount_sdk_api_v3.7.0_all.aar deleted file mode 100644 index 412bc5f19..000000000 Binary files a/app/quick-pass-libs/CTAccount_sdk_api_v3.7.0_all.aar and /dev/null differ diff --git a/app/quick-pass-libs/CTAccount_sdk_api_v3.8.3_all.aar b/app/quick-pass-libs/CTAccount_sdk_api_v3.8.3_all.aar new file mode 100644 index 000000000..95c91b3f3 Binary files /dev/null and b/app/quick-pass-libs/CTAccount_sdk_api_v3.8.3_all.aar differ diff --git a/app/quick-pass-libs/Ui-factory_oauth_mobile_3.8.3.1.aar b/app/quick-pass-libs/Ui-factory_oauth_mobile_3.8.3.1.aar deleted file mode 100644 index cbd2d4e83..000000000 Binary files a/app/quick-pass-libs/Ui-factory_oauth_mobile_3.8.3.1.aar and /dev/null differ diff --git a/app/quick-pass-libs/Ui-factory_oauth_mobile_3.9.1.7_external.aar b/app/quick-pass-libs/Ui-factory_oauth_mobile_3.9.1.7_external.aar new file mode 100644 index 000000000..082d82536 Binary files /dev/null and b/app/quick-pass-libs/Ui-factory_oauth_mobile_3.9.1.7_external.aar differ diff --git a/app/quick-pass-libs/quicklogin_libary-external-release.aar b/app/quick-pass-libs/quicklogin_libary-external-release.aar index e1726d21d..6cbeefacf 100644 Binary files a/app/quick-pass-libs/quicklogin_libary-external-release.aar and b/app/quick-pass-libs/quicklogin_libary-external-release.aar differ diff --git a/app/src/common/res/drawable/bg_f6f7f9_8_radius.xml b/app/src/common/res/drawable/bg_f6f7f9_8_radius.xml new file mode 100644 index 000000000..0b35519c6 --- /dev/null +++ b/app/src/common/res/drawable/bg_f6f7f9_8_radius.xml @@ -0,0 +1,6 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 6ffb6f8c5..ddc202620 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -1233,6 +1233,14 @@ android:name=".avroom.firstcharge.FirstChargeDialog" android:theme="@style/dialogactivity" /> + + + + diff --git a/app/src/main/java/com/yizhuan/erban/avroom/adapter/UpMicAdapter.java b/app/src/main/java/com/yizhuan/erban/avroom/adapter/UpMicAdapter.java index d5b567c71..7657a2e07 100644 --- a/app/src/main/java/com/yizhuan/erban/avroom/adapter/UpMicAdapter.java +++ b/app/src/main/java/com/yizhuan/erban/avroom/adapter/UpMicAdapter.java @@ -37,7 +37,7 @@ public class UpMicAdapter extends BaseQuickAdapter { this.consumer = consumer; this.upUid = upUid; List list = new ArrayList<>(); - int size = AvRoomDataManager.get().isCpRoom() ? 2 : 9; + int size = AvRoomDataManager.get().isCpRoom() ? 2 : (AvRoomDataManager.get().isOpenGame() ? 6 : 9); for (int i = 0; i < size; i++) { list.add(""); } diff --git a/app/src/main/java/com/yizhuan/erban/base/TitleBar.java b/app/src/main/java/com/yizhuan/erban/base/TitleBar.java index 4854b376f..8bb1dc506 100644 --- a/app/src/main/java/com/yizhuan/erban/base/TitleBar.java +++ b/app/src/main/java/com/yizhuan/erban/base/TitleBar.java @@ -65,7 +65,7 @@ public class TitleBar extends ViewGroup implements View.OnClickListener { setBackgroundColor(mBackgroundColor); } - private int mBackgroundColor = getResources().getColor(R.color.translucent); + private int mBackgroundColor = getResources().getColor(R.color.transparent); public TitleBar(Context context) { super(context); diff --git a/app/src/main/java/com/yizhuan/erban/home/fragment/MeFragment.java b/app/src/main/java/com/yizhuan/erban/home/fragment/MeFragment.java index 2f4651364..bf6beef12 100644 --- a/app/src/main/java/com/yizhuan/erban/home/fragment/MeFragment.java +++ b/app/src/main/java/com/yizhuan/erban/home/fragment/MeFragment.java @@ -157,6 +157,12 @@ public class MeFragment extends BaseFragment implements View.OnClickListener { public void onResume() { super.onResume(); initUserDate(); + // 每次页面重新可见的时候,如果处于审核状态,都尝试刷新拿取最新信息 + // 不算是一个多好的做法,但是 it works + // 不算频繁,可以接受 + if (mUserInfo != null && mUserInfo.isReview()) { + requestUpdateUserInfo(); + } } private void initUserDate() { diff --git a/app/src/main/java/com/yizhuan/erban/ui/setting/GrantedPermissionsActivity.kt b/app/src/main/java/com/yizhuan/erban/ui/setting/GrantedPermissionsActivity.kt new file mode 100644 index 000000000..6e5995420 --- /dev/null +++ b/app/src/main/java/com/yizhuan/erban/ui/setting/GrantedPermissionsActivity.kt @@ -0,0 +1,102 @@ +package com.yizhuan.erban.ui.setting + +import android.content.Context +import android.content.Intent +import android.os.Bundle +import android.view.View +import android.widget.ImageView +import android.widget.TextView +import androidx.recyclerview.widget.LinearLayoutManager +import androidx.recyclerview.widget.RecyclerView +import com.chad.library.adapter.base.BaseQuickAdapter +import com.chad.library.adapter.base.BaseViewHolder +import com.trello.rxlifecycle3.android.ActivityEvent +import com.yizhuan.erban.R +import com.yizhuan.erban.base.BaseActivity +import com.yizhuan.erban.common.EmptyViewHelper +import com.yizhuan.erban.ui.setting.bean.PermissionEntity +import com.yizhuan.erban.ui.utils.RVDelegate +import com.yizhuan.erban.ui.widget.DividerItemDecoration +import com.yizhuan.erban.ui.widget.magicindicator.buildins.UIUtil +import com.yizhuan.erban.utils.PermissionUtil +import io.reactivex.Completable +import io.reactivex.android.schedulers.AndroidSchedulers +import io.reactivex.schedulers.Schedulers +import java.util.concurrent.TimeUnit + +class GrantedPermissionsActivity : BaseActivity() { + private lateinit var recyclerView: RecyclerView + private lateinit var rvDelegate: RVDelegate + private var isResumedFromSetting = false + + companion object { + fun start(context: Context) { + val intent = Intent(context, GrantedPermissionsActivity::class.java) + context.startActivity(intent) + } + } + + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + setContentView(R.layout.activity_granted_permissions) + initTitleBar("系统权限管理") + initView() + rvDelegate = RVDelegate.Builder() + .setLayoutManager(LinearLayoutManager(this, LinearLayoutManager.VERTICAL, false)) + .setRecyclerView(recyclerView) + .setEmptyView(EmptyViewHelper.createEmptyView(this, "未有已授权的系统权限")) + .setAdapter(PermissionAdapter()) + .build() + } + + override fun onResume() {//修改系统权限设置返回立即读取会有黑屏问题 + super.onResume() + if (isResumedFromSetting) { + isResumedFromSetting = false + Completable.timer(1500, TimeUnit.MILLISECONDS) + .compose(bindUntilEvent(ActivityEvent.DESTROY)) + .subscribeOn(Schedulers.io()) + .observeOn(AndroidSchedulers.mainThread()) + .doOnSubscribe { dialogManager.showProgressDialog(context, false) } + .doOnComplete { + rvDelegate.setNewData(PermissionUtil.instance.getGrantedPermissions(context)) + dialogManager.dismissDialog() + } + .doOnError { dialogManager.dismissDialog() } + .subscribe() + } else { + rvDelegate.setNewData(PermissionUtil.instance.getGrantedPermissions(context)) + } + } + + override fun onStop() { + super.onStop() + isResumedFromSetting = true + } + + private fun initView() { + recyclerView = findViewById(R.id.recycler_view) + recyclerView.addItemDecoration( + DividerItemDecoration( + this, LinearLayoutManager.VERTICAL, + UIUtil.dip2px(this, 16.toDouble()), + R.color.transparent + ) + ) + } + + fun jumpToSystemSetting(view: View) { + PermissionUtil.instance.jumpToSetting(this) + } + + class PermissionAdapter : + BaseQuickAdapter(R.layout.item_permission_granted) { + override fun convert(helper: BaseViewHolder, item: PermissionEntity?) { + item?.let { + helper.getView(R.id.tv_name)?.text = it.alias + helper.getView(R.id.tv_desc)?.text = it.description + helper.getView(R.id.icon)?.setImageResource(it.icon) + } + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/yizhuan/erban/ui/setting/PermissionGuideActivity.kt b/app/src/main/java/com/yizhuan/erban/ui/setting/PermissionGuideActivity.kt new file mode 100644 index 000000000..790b1b87c --- /dev/null +++ b/app/src/main/java/com/yizhuan/erban/ui/setting/PermissionGuideActivity.kt @@ -0,0 +1,53 @@ +package com.yizhuan.erban.ui.setting + +import android.content.Context +import android.content.Intent +import android.os.Bundle +import android.view.View +import androidx.databinding.DataBindingUtil +import com.yizhuan.erban.BuildConfig +import com.yizhuan.erban.R +import com.yizhuan.erban.base.BaseActivity +import com.yizhuan.erban.base.BaseViewBindingActivity +import com.yizhuan.erban.databinding.ActivityPermissionGuideBinding +import com.yizhuan.erban.ui.webview.CommonWebViewActivity +import com.yizhuan.erban.utils.PermissionUtil +import com.yizhuan.xchat_android_core.UriProvider + +class PermissionGuideActivity : BaseViewBindingActivity(), + View.OnClickListener { + + companion object { + fun start(context: Context) { + val intent = Intent(context, PermissionGuideActivity::class.java) + context.startActivity(intent) + } + } + + override fun init() { + initTitleBar("个人信息与权限") + binding.click = this + } + + override fun onClick(v: View?) { + when (v?.id) { + R.id.tv_system_permission -> GrantedPermissionsActivity.start(this) + R.id.tv_jump_setting -> PermissionUtil.instance.jumpToSetting(this) + R.id.tv_privacy_guide -> CommonWebViewActivity.start( + this,UriProvider.getPrivacyUrl() + ) + R.id.tv_sdk_permission -> CommonWebViewActivity.start( + this, + UriProvider.getSDKPermissionUrl() + ) + R.id.tv_device_permission -> CommonWebViewActivity.start( + this, + UriProvider.getDeivcePermissionUrl() + ) + R.id.tv_personal_permission -> CommonWebViewActivity.start( + this, + UriProvider.getPersonalInfoUrl() + ) + } + } +} diff --git a/app/src/main/java/com/yizhuan/erban/ui/setting/SettingActivity.java b/app/src/main/java/com/yizhuan/erban/ui/setting/SettingActivity.java index 592d09426..77bbaa869 100644 --- a/app/src/main/java/com/yizhuan/erban/ui/setting/SettingActivity.java +++ b/app/src/main/java/com/yizhuan/erban/ui/setting/SettingActivity.java @@ -228,6 +228,9 @@ public class SettingActivity extends BaseActivity implements View.OnClickListene case R.id.tv_notice_setting: NoticeSettingActivity.start(context); break; + case R.id.rly_permission: + PermissionGuideActivity.Companion.start(context); + break; } } diff --git a/app/src/main/java/com/yizhuan/erban/ui/setting/bean/PermissionEntity.kt b/app/src/main/java/com/yizhuan/erban/ui/setting/bean/PermissionEntity.kt new file mode 100644 index 000000000..19358af4c --- /dev/null +++ b/app/src/main/java/com/yizhuan/erban/ui/setting/bean/PermissionEntity.kt @@ -0,0 +1,71 @@ +package com.yizhuan.erban.ui.setting.bean + +import android.Manifest +import com.yizhuan.erban.R +import com.yizhuan.xchat_android_core.utils.TextUtils + +enum class PermissionEntity( + val alias: String, + val description: String, + var icon: Int = R.drawable.icon_permission_common, + val permissionName: Array +) { + + + PHONE( + "电话", + "读取通话状态、移动网络信息和设备信息", + R.drawable.icon_permission_phone, + arrayOf(Manifest.permission.READ_PHONE_STATE) + ), + LOCATOIN( + "位置", + "访问大致位置(通过网络定位)", + R.drawable.icon_permission_location, + arrayOf( + Manifest.permission.ACCESS_FINE_LOCATION, + Manifest.permission.ACCESS_COARSE_LOCATION + ) + + ), + CONTACT( + "联系人", + "获取系统中通讯录信息", + R.drawable.icon_permission_common, + arrayOf( + Manifest.permission.READ_CONTACTS, + Manifest.permission.WRITE_CONTACTS, + Manifest.permission.GET_ACCOUNTS + ) + ), + MICROPHONE( + "录音", + "录制音频", + R.drawable.icon_permission_mic, + arrayOf(Manifest.permission.RECORD_AUDIO) + ), + CAMERA( + "相机", + "拍摄相片或录制视频", + R.drawable.icon_permission_camera, + arrayOf(Manifest.permission.CAMERA) + ), + STORAGE( + "存储", "读取手机存储,修改/删除手机储存", R.drawable.icon_permission_storage, + arrayOf( + Manifest.permission.READ_EXTERNAL_STORAGE, + Manifest.permission.WRITE_EXTERNAL_STORAGE + ) + ); + + companion object { + fun fetchPermission(name: String): PermissionEntity? { + if (TextUtils.isEmptyText(name)) return null + + values().forEach { + if (it.permissionName.contains(name)) return it + } + return null + } + } +} diff --git a/app/src/main/java/com/yizhuan/erban/ui/user/UserInfoActivity.java b/app/src/main/java/com/yizhuan/erban/ui/user/UserInfoActivity.java index 246d7b5dc..25a5dc718 100644 --- a/app/src/main/java/com/yizhuan/erban/ui/user/UserInfoActivity.java +++ b/app/src/main/java/com/yizhuan/erban/ui/user/UserInfoActivity.java @@ -1,5 +1,7 @@ package com.yizhuan.erban.ui.user; +import static com.yizhuan.erban.ui.user.UserInfoActivity.IdentityState.OWN; + import android.annotation.SuppressLint; import android.content.Context; import android.content.Intent; @@ -19,6 +21,9 @@ import androidx.recyclerview.widget.RecyclerView; import com.netease.nim.uikit.StatusBarUtil; import com.netease.nim.uikit.common.util.sys.ScreenUtil; import com.yizhuan.erban.module_hall.hall.activity.ModuleClanActivity; +import com.yizhuan.erban.ui.user.adapter.SelfPhotoAdapter; +import com.yizhuan.erban.ui.utils.ImageLoadUtilsV2; +import com.yizhuan.erban.ui.widget.rollviewpager.adapter.StaticPagerAdapterWrapper; import com.yizhuan.erban.ui.widget.rollviewpager.hintview.TextHintView; import com.netease.nim.uikit.impl.cache.NimUserInfoCache; import com.netease.nim.uikit.support.glide.GlideApp; @@ -113,9 +118,10 @@ public class UserInfoActivity extends BaseBindingActivity 0) { showUserPhoto(position - 1); } else { + UIHelper.showModifyPhotosAct(this, userId); } } else { @@ -564,7 +572,7 @@ public class UserInfoActivity extends BaseBindingActivity { ErbanTakePhotoActivity.startToSelectPhoto(this, this); @@ -299,7 +315,7 @@ public class UserInfoModifyActivity extends BaseActivity case R.id.rl_audio_record: checkPermission(() -> { // 点击跳转到我的声音页面 - UIHelper.showMyVoiceAct(UserInfoModifyActivity.this, Method.AUDIO,"编辑资料"); + UIHelper.showMyVoiceAct(UserInfoModifyActivity.this, Method.AUDIO, "编辑资料"); isAvatar = false; }, R.string.ask_again, Manifest.permission.RECORD_AUDIO); @@ -319,6 +335,7 @@ public class UserInfoModifyActivity extends BaseActivity UserInfo user = new UserInfo(); user.setUid(AuthModel.get().getCurrentUid()); user.setAvatar(url); + showAvatarAuditing = true; UserModel.get().requestUpdateUserInfo(user).subscribe(userInfoUpdateObserver); } } @@ -382,6 +399,10 @@ public class UserInfoModifyActivity extends BaseActivity initData(mUserInfo); } getDialogManager().dismissDialog(); + if (showAvatarAuditing) { + showAvatarAuditing = false; + showAvatarAuditingDialog(); + } } @Override @@ -401,4 +422,17 @@ public class UserInfoModifyActivity extends BaseActivity StatusBarUtil.transparencyBar(this); StatusBarUtil.StatusBarLightMode(this); } + + private void showAvatarAuditingDialog() { + toast(R.string.avatar_auditing); + //延迟3秒重新获取用户信息更新状态 + ivAvatarAuditiong.setVisibility(View.VISIBLE); + Completable.timer(3000, TimeUnit.MILLISECONDS) + .compose(bindUntilEvent(ActivityEvent.STOP)) + .doOnComplete(() -> { + UserModel.get().updateCurrentUserInfo().subscribe(userInfoUpdateObserver); + }).doOnError(throwable -> { + throwable.printStackTrace(); + }).subscribe(); + } } diff --git a/app/src/main/java/com/yizhuan/erban/ui/user/UserModifyPhotosActivity.java b/app/src/main/java/com/yizhuan/erban/ui/user/UserModifyPhotosActivity.java index 46b95798e..aad950f34 100644 --- a/app/src/main/java/com/yizhuan/erban/ui/user/UserModifyPhotosActivity.java +++ b/app/src/main/java/com/yizhuan/erban/ui/user/UserModifyPhotosActivity.java @@ -200,6 +200,7 @@ public class UserModifyPhotosActivity extends TakePhotoActivity implements UserM @Override public void onSuccess(UserInfo info) { + toast("相片已送审,审核成功后自动上传相片"); isChanged = true; getDialogManager().dismissDialog(); if (info.getUid() == userId) { diff --git a/app/src/main/java/com/yizhuan/erban/ui/user/adapter/SelfPhotoAdapter.kt b/app/src/main/java/com/yizhuan/erban/ui/user/adapter/SelfPhotoAdapter.kt new file mode 100644 index 000000000..7f26bc75d --- /dev/null +++ b/app/src/main/java/com/yizhuan/erban/ui/user/adapter/SelfPhotoAdapter.kt @@ -0,0 +1,48 @@ +package com.yizhuan.erban.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.yizhuan.erban.R +import com.yizhuan.erban.ui.widget.magicindicator.buildins.UIUtil +import com.yizhuan.erban.ui.widget.rollviewpager.adapter.StaticPagerAdapterWrapper +import com.yizhuan.xchat_android_core.user.bean.UserDetailInfo + +class SelfPhotoAdapter( + photoBeans: List, + context: Context +) : StaticPagerAdapterWrapper(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?) { + super.setData(dataList) + origin.setData(dataList) + } +} \ No newline at end of file diff --git a/app/src/main/java/com/yizhuan/erban/ui/user/adapter/UserInfoPhotoAdapter.java b/app/src/main/java/com/yizhuan/erban/ui/user/adapter/UserInfoPhotoAdapter.java index 1ba7aa5de..02c358744 100644 --- a/app/src/main/java/com/yizhuan/erban/ui/user/adapter/UserInfoPhotoAdapter.java +++ b/app/src/main/java/com/yizhuan/erban/ui/user/adapter/UserInfoPhotoAdapter.java @@ -10,7 +10,7 @@ import android.widget.ImageView; import com.yizhuan.erban.R; import com.yizhuan.erban.ui.user.ShowPhotoActivity; import com.yizhuan.erban.ui.utils.ImageLoadUtils; -import com.yizhuan.erban.ui.widget.rollviewpager.adapter.StaticPagerAdapter; +import com.yizhuan.erban.ui.widget.rollviewpager.adapter.StaticPagerAdapterWrapper; import com.yizhuan.xchat_android_core.user.bean.UserDetailInfo; import com.yizhuan.xchat_android_core.user.bean.UserPhoto; @@ -22,47 +22,33 @@ import java.util.List; * @date 2017/8/7 */ -public class UserInfoPhotoAdapter extends StaticPagerAdapter { - private Context context; - private List photoBeanList; +public class UserInfoPhotoAdapter extends StaticPagerAdapterWrapper { private LayoutInflater mInflater; public UserInfoPhotoAdapter(List photoBeans, Context context) { - this.context = context; - this.photoBeanList = photoBeans; + super(photoBeans, context); mInflater = LayoutInflater.from(context); } @Override public View getView(ViewGroup container, int position) { - UserDetailInfo.DataBean.PrivatePhotoBean photoInfo = photoBeanList.get(position); + UserDetailInfo.DataBean.PrivatePhotoBean photoInfo = dataList.get(position); ImageView imgBanner = (ImageView) mInflater.inflate(R.layout.banner_userinfo_photo_item, container, false); if (photoInfo == null) return imgBanner; - ImageLoadUtils.loadImage(context, photoInfo.getPhotoUrl(), imgBanner); - imgBanner.setOnClickListener(v -> { - showUserPhoto(position); - }); + ImageLoadUtils.loadImage(context, photoInfo.getPhotoUrl(), imgBanner); + imgBanner.setOnClickListener(v -> { + showUserPhoto(position); + }); return imgBanner; } - @Override - public int getCount() { - return photoBeanList == null ? 0 : photoBeanList.size(); - - } - - public void setData(List bannerInfos) { - this.photoBeanList = bannerInfos; - } - - private void showUserPhoto(int position) { //创建一个集合拿来做用户所有照片信息 ArrayList userPhotos = new ArrayList<>(); - for (int i = 0 ; i < photoBeanList.size() ; i++) { + for (int i = 0; i < dataList.size(); i++) { UserPhoto newPhoto = new UserPhoto(); - newPhoto.setPhotoUrl(photoBeanList.get(i).getPhotoUrl()); + newPhoto.setPhotoUrl(dataList.get(i).getPhotoUrl()); userPhotos.add(newPhoto); } Intent intent = new Intent(context, ShowPhotoActivity.class); diff --git a/app/src/main/java/com/yizhuan/erban/ui/utils/sys/PermissionUtil.kt b/app/src/main/java/com/yizhuan/erban/ui/utils/sys/PermissionUtil.kt new file mode 100644 index 000000000..e6540a2f2 --- /dev/null +++ b/app/src/main/java/com/yizhuan/erban/ui/utils/sys/PermissionUtil.kt @@ -0,0 +1,4 @@ +package com.yizhuan.erban.ui.utils.sys + +class PermissionUtil { +} \ No newline at end of file diff --git a/app/src/main/java/com/yizhuan/erban/ui/widget/dialog/CommonMessageDialog.kt b/app/src/main/java/com/yizhuan/erban/ui/widget/dialog/CommonMessageDialog.kt new file mode 100644 index 000000000..2c213a230 --- /dev/null +++ b/app/src/main/java/com/yizhuan/erban/ui/widget/dialog/CommonMessageDialog.kt @@ -0,0 +1,17 @@ +package com.yizhuan.erban.ui.widget.dialog + +import android.content.Context +import com.yizhuan.erban.R +import com.yizhuan.erban.databinding.DialogCommonMessageBinding +import com.yizhuan.erban.treasure_box.widget.dialog.BaseBindingDialog +import com.yizhuan.xchat_android_library.annatation.ActLayoutRes + +@ActLayoutRes(R.layout.dialog_common_message) +class CommonMessageDialog(context: Context, theme: Int) : + BaseBindingDialog(context, theme) { + constructor(context: Context) : this(context, R.style.dialog) + + override fun init() { + setCancelable(true) + } +} \ No newline at end of file diff --git a/app/src/main/java/com/yizhuan/erban/ui/widget/rollviewpager/adapter/StaticPagerAdapterWrapper.java b/app/src/main/java/com/yizhuan/erban/ui/widget/rollviewpager/adapter/StaticPagerAdapterWrapper.java new file mode 100644 index 000000000..98ceee4fe --- /dev/null +++ b/app/src/main/java/com/yizhuan/erban/ui/widget/rollviewpager/adapter/StaticPagerAdapterWrapper.java @@ -0,0 +1,26 @@ +package com.yizhuan.erban.ui.widget.rollviewpager.adapter; + +import android.content.Context; + +import java.util.List; + +public abstract class StaticPagerAdapterWrapper extends StaticPagerAdapter { + + protected Context context; + protected List dataList; + + + public StaticPagerAdapterWrapper(List dataList, Context context) { + this.context = context; + this.dataList = dataList; + } + + public void setData(List dataList) { + this.dataList = dataList; + } + + @Override + public int getCount() { + return dataList == null ? 0 : dataList.size(); + } +} \ No newline at end of file diff --git a/app/src/main/java/com/yizhuan/erban/utils/PermissionUtil.kt b/app/src/main/java/com/yizhuan/erban/utils/PermissionUtil.kt new file mode 100644 index 000000000..8f2196cc5 --- /dev/null +++ b/app/src/main/java/com/yizhuan/erban/utils/PermissionUtil.kt @@ -0,0 +1,126 @@ +package com.yizhuan.erban.utils + +import android.content.ComponentName +import android.content.Context +import android.content.Intent +import android.content.pm.PackageManager +import android.net.Uri +import android.os.Build +import com.microquation.linkedme.android.v4.ContextCompatLKMe +import com.yizhuan.erban.BuildConfig +import com.yizhuan.erban.ui.setting.bean.PermissionEntity +import java.lang.Exception + +class PermissionUtil { + companion object { + val instance = PermissionUtil() + } + + fun getGrantedPermissions(context: Context): List { + val packageInfo = context.packageManager.getPackageInfo( + context.packageName, + PackageManager.GET_PERMISSIONS, + ) + val permissions = packageInfo.requestedPermissions + val list = permissions?.filter { str -> str.startsWith("android.permission") }?.let { + if (Build.VERSION.SDK_INT < 23) { + it + } else { + it.filter { s -> + ContextCompatLKMe.checkSelfPermission(context, s) == + PackageManager.PERMISSION_GRANTED + } + } + } + + val permissionList = ArrayList() + list?.forEach { + PermissionEntity.fetchPermission(it) + ?.let { permission -> + if (!permissionList.contains(permission)) permissionList.add(permission) + } + } + return permissionList + } + + fun jumpToSetting(context: Context) { + when (Build.BRAND?.toLowerCase()) { + "redmi", "xiaomi" -> toXiaomiPermission(context) + "huawei", "honor" -> toHuaWeiPermission(context) + "meizu" -> toMeizuPermission(context) + else -> toCommonPermission(context) + } + } + + private fun toHuaWeiPermission(context: Context) { + try { + val intent = Intent() + intent.flags = Intent.FLAG_ACTIVITY_NEW_TASK + val comp = ComponentName( + "com.huawei.systemmanager", + "com.huawei.permissionmanager.ui.MainActivity" + )//华为权限管理 + intent.component = comp + context.startActivity(intent) + } catch (e: Exception) { + e.printStackTrace() + toCommonPermission(context) + } + } + + private fun toXiaomiPermission(context: Context) { + try { // MIUI 8 + val localIntent = Intent("miui.intent.action.APP_PERM_EDITOR") + localIntent.setClassName( + "com.miui.securitycenter", + "com.miui.permcenter.permissions.PermissionsEditorActivity" + ) + localIntent.putExtra("extra_pkgname", context.packageName) + context.startActivity(localIntent) + } catch (e: Exception) { + try { // MIUI 5/6/7 + val localIntent = Intent("miui.intent.action.APP_PERM_EDITOR") + localIntent.setClassName( + "com.miui.securitycenter", + "com.miui.permcenter.permissions.AppPermissionsEditorActivity" + ) + localIntent.putExtra("extra_pkgname", context.packageName) + context.startActivity(localIntent) + } catch (e1: Exception) { // 否则跳转到应用详情 + toCommonPermission(context) + } + } + } + + private fun toMeizuPermission(context: Context) { + try { + val intent = Intent("com.meizu.safe.security.SHOW_APPSEC") + intent.addCategory(Intent.CATEGORY_DEFAULT) + intent.putExtra("packageName", BuildConfig.APPLICATION_ID) + context.startActivity(intent) + } catch (e: Exception) { + e.printStackTrace() + toCommonPermission(context) + } + } + + private fun toCommonPermission(context: Context) { + val localIntent = Intent() + localIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK) + if (Build.VERSION.SDK_INT >= 9) { + localIntent.action = "android.settings.APPLICATION_DETAILS_SETTINGS" + localIntent.data = Uri.fromParts("package", context.packageName, null) + } else if (Build.VERSION.SDK_INT <= 8) { + localIntent.action = Intent.ACTION_VIEW + localIntent.setClassName( + "com.android.settings", + "com.android.settings.InstalledAppDetails" + ) + localIntent.putExtra( + "com.android.settings.ApplicationPkgName", + context.packageName + ) + } + context.startActivity(localIntent) + } +} diff --git a/app/src/main/res/drawable-xhdpi/ic_album_auditing.png b/app/src/main/res/drawable-xhdpi/ic_album_auditing.png new file mode 100644 index 000000000..ce938f260 Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/ic_album_auditing.png differ diff --git a/app/src/main/res/drawable-xhdpi/ic_avatar_auditing.png b/app/src/main/res/drawable-xhdpi/ic_avatar_auditing.png new file mode 100644 index 000000000..426d9d636 Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/ic_avatar_auditing.png differ diff --git a/app/src/main/res/drawable-xhdpi/ic_dialog_auditing.png b/app/src/main/res/drawable-xhdpi/ic_dialog_auditing.png new file mode 100644 index 000000000..61e7334a4 Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/ic_dialog_auditing.png differ diff --git a/app/src/main/res/drawable-xhdpi/icon_permission_camera.png b/app/src/main/res/drawable-xhdpi/icon_permission_camera.png new file mode 100644 index 000000000..c2b2ca66e Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/icon_permission_camera.png differ diff --git a/app/src/main/res/drawable-xhdpi/icon_permission_common.png b/app/src/main/res/drawable-xhdpi/icon_permission_common.png new file mode 100644 index 000000000..ec9bf72e3 Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/icon_permission_common.png differ diff --git a/app/src/main/res/drawable-xhdpi/icon_permission_location.png b/app/src/main/res/drawable-xhdpi/icon_permission_location.png new file mode 100644 index 000000000..0152ce2e3 Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/icon_permission_location.png differ diff --git a/app/src/main/res/drawable-xhdpi/icon_permission_mic.png b/app/src/main/res/drawable-xhdpi/icon_permission_mic.png new file mode 100644 index 000000000..b4fd8cf1d Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/icon_permission_mic.png differ diff --git a/app/src/main/res/drawable-xhdpi/icon_permission_phone.png b/app/src/main/res/drawable-xhdpi/icon_permission_phone.png new file mode 100644 index 000000000..42a318473 Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/icon_permission_phone.png differ diff --git a/app/src/main/res/drawable-xhdpi/icon_permission_storage.png b/app/src/main/res/drawable-xhdpi/icon_permission_storage.png new file mode 100644 index 000000000..9ed02161f Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/icon_permission_storage.png differ diff --git a/app/src/main/res/drawable-xxhdpi/quick_pass_checked.png b/app/src/main/res/drawable-xxhdpi/quick_pass_checked.png new file mode 100644 index 000000000..39031cbaa Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/quick_pass_checked.png differ diff --git a/app/src/main/res/drawable-xxhdpi/quick_pass_uncheck.png b/app/src/main/res/drawable-xxhdpi/quick_pass_uncheck.png new file mode 100644 index 000000000..6fcc7aab3 Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/quick_pass_uncheck.png differ diff --git a/app/src/main/res/drawable/bg_room_pk_bottom.xml b/app/src/main/res/drawable/bg_room_pk_bottom.xml index b99276981..949855eb5 100644 --- a/app/src/main/res/drawable/bg_room_pk_bottom.xml +++ b/app/src/main/res/drawable/bg_room_pk_bottom.xml @@ -2,7 +2,7 @@ diff --git a/app/src/main/res/drawable/shape_circle_33_white.xml b/app/src/main/res/drawable/shape_circle_33_white.xml new file mode 100644 index 000000000..a07296edd --- /dev/null +++ b/app/src/main/res/drawable/shape_circle_33_white.xml @@ -0,0 +1,10 @@ + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_granted_permissions.xml b/app/src/main/res/layout/activity_granted_permissions.xml new file mode 100644 index 000000000..2accdcf29 --- /dev/null +++ b/app/src/main/res/layout/activity_granted_permissions.xml @@ -0,0 +1,88 @@ + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_permission_guide.xml b/app/src/main/res/layout/activity_permission_guide.xml new file mode 100644 index 000000000..c52efe984 --- /dev/null +++ b/app/src/main/res/layout/activity_permission_guide.xml @@ -0,0 +1,124 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_setting.xml b/app/src/main/res/layout/activity_setting.xml index 73195f981..215b5aeac 100644 --- a/app/src/main/res/layout/activity_setting.xml +++ b/app/src/main/res/layout/activity_setting.xml @@ -308,6 +308,37 @@ android:textColor="@color/text_title_white" android:textSize="14sp" /> + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_me.xml b/app/src/main/res/layout/fragment_me.xml index a6186cb4b..263aa5493 100644 --- a/app/src/main/res/layout/fragment_me.xml +++ b/app/src/main/res/layout/fragment_me.xml @@ -5,6 +5,8 @@ + + @@ -67,7 +69,7 @@ + + diff --git a/app/src/main/res/layout/item_micro_game.xml b/app/src/main/res/layout/item_micro_game.xml index b269a7bcc..071fc484a 100644 --- a/app/src/main/res/layout/item_micro_game.xml +++ b/app/src/main/res/layout/item_micro_game.xml @@ -52,6 +52,13 @@ android:visibility="gone" tools:visibility="visible" /> + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/values/colors.xml b/app/src/main/res/values/colors.xml index d633223ff..fcf911a1d 100644 --- a/app/src/main/res/values/colors.xml +++ b/app/src/main/res/values/colors.xml @@ -587,4 +587,8 @@ + + #99FFFFFF + #1AFFFFFF + diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 9a62d8cc2..31a8b5177 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -683,6 +683,7 @@ 关于&app_name; 检查版本 实验室 + 个人信息与权限 退出当前账号 清除缓存 @@ -908,4 +909,6 @@ 1)只有牌照房房主和超管才可以发起跨房pk,一次只能选择一个牌照房发起;\n 2)只有房主和超管才可以接受或拒绝跨房pk请求,若10秒内不点击pk邀请弹窗,弹窗消失,视为自动拒绝;\n 3)发起pk时需选择pk时间和pk对象,自定义时间下限为5,上限为180,只能填写整数;\n 4)pk发起后,未到pk时间无法自行结束,若有特殊情况需提前结束可联系客服,但本场pk不算胜负。 1.每人仅可获得1次首充福利\n2.每个手机号,设备,实名认证等如已参与过首充,则无法获得奖励。 关注的人和收藏的房间都会出现在这里\n暂无关注的人和收藏的房间哦 + 头像已送审,审核成功后自动应用头像 + diff --git a/app/src/main/res/values/styles.xml b/app/src/main/res/values/styles.xml index 0a8a4ba93..8a6eda7d8 100644 --- a/app/src/main/res/values/styles.xml +++ b/app/src/main/res/values/styles.xml @@ -546,4 +546,19 @@ @anim/anim_message_tip_out + + diff --git a/app/src/module_community/res/drawable-xhdpi/icon_dy_item_more.png b/app/src/module_community/res/drawable-xhdpi/icon_dy_item_more.png index 15f113c8a..fa43ab28a 100644 Binary files a/app/src/module_community/res/drawable-xhdpi/icon_dy_item_more.png and b/app/src/module_community/res/drawable-xhdpi/icon_dy_item_more.png differ diff --git a/app/src/module_community/res/layout/activity_publish.xml b/app/src/module_community/res/layout/activity_publish.xml index 9637915c6..c4233633c 100644 --- a/app/src/module_community/res/layout/activity_publish.xml +++ b/app/src/module_community/res/layout/activity_publish.xml @@ -43,7 +43,7 @@ android:paddingTop="@dimen/dp_10" android:paddingEnd="@dimen/dp_20" android:paddingBottom="@dimen/dp_10" - android:textColor="@color/white" + android:textColor="@color/text_title_white" android:textColorHint="@color/text_secondary_4f516a" android:textSize="@dimen/sp_13" app:layout_constraintTop_toBottomOf="@id/title_bar" /> diff --git a/app/src/module_quick_pass/java/com/yizhuan/erban/quick_pass/QuickLoginUiConfig.java b/app/src/module_quick_pass/java/com/yizhuan/erban/quick_pass/QuickLoginUiConfig.java index 5fec67294..84b9687cf 100644 --- a/app/src/module_quick_pass/java/com/yizhuan/erban/quick_pass/QuickLoginUiConfig.java +++ b/app/src/module_quick_pass/java/com/yizhuan/erban/quick_pass/QuickLoginUiConfig.java @@ -7,7 +7,7 @@ import androidx.core.content.ContextCompat; import com.netease.nis.quicklogin.helper.UnifyUiConfig; import com.yizhuan.erban.R; -import com.yizhuan.xchat_android_core.UriProvider; +import com.yizhuan.xchat_android_core.PreferencesUtils; /** * Created by hzhuqi on 2019/12/31 @@ -27,6 +27,7 @@ public class QuickLoginUiConfig { int X_OFFSET = 0; int BOTTOM_OFFSET = 0; + final boolean privacyState = PreferencesUtils.readPrivacyState(); UnifyUiConfig uiConfig = new UnifyUiConfig.Builder() // 状态栏 .setStatusBarDarkColor(false) @@ -80,20 +81,23 @@ public class QuickLoginUiConfig { */ // .setPrivacyXOffset(43) - .setPrivacyState(false) + .setPrivacyState(privacyState) .setPrivacySize(12) // .setPrivacyTopYOffset(510) .setPrivacyBottomYOffset(20) + .setPrivacyXOffset(20) + .setPrivacyMarginRight(20) .setCheckedImageName("quick_pass_checked") .setUnCheckedImageName("quick_pass_uncheck") // 协议详情页导航栏 .setProtocolPageNavTitle("服务条款") .setProtocolPageNavBackIcon("quick_pass_back") .setProtocolPageNavColor(Color.WHITE) - -// .setBackgroundImage("bg1") - // 自定义控件 -// .addCustomView(otherLoginRel, "relative", UnifyUiConfig.POSITION_IN_BODY, null) + .setClickEventListener((viewType, code) -> { + if (viewType == 2) { + PreferencesUtils.savePrivacyState(code == 1); + } + }) .build(context); return uiConfig; } diff --git a/app/src/module_quick_pass/java/com/yizhuan/erban/quick_pass/QuickPassLoginAct.java b/app/src/module_quick_pass/java/com/yizhuan/erban/quick_pass/QuickPassLoginAct.java index 3ab4279b9..2cc13c0e8 100644 --- a/app/src/module_quick_pass/java/com/yizhuan/erban/quick_pass/QuickPassLoginAct.java +++ b/app/src/module_quick_pass/java/com/yizhuan/erban/quick_pass/QuickPassLoginAct.java @@ -177,7 +177,6 @@ public class QuickPassLoginAct extends BaseLoginAct implements View.OnClickListe login.onePass(new QuickLoginTokenListener() { @Override public void onGetTokenSuccess(String s, String s1) { - getDialogManager().showProgressDialog(QuickPassLoginAct.this); setClickEnable(false); AuthModel.get().quickPassLogin(s, s1, "", "") .compose(bindToLifecycle()) @@ -192,15 +191,13 @@ public class QuickPassLoginAct extends BaseLoginAct implements View.OnClickListe @Override public void onSuccess(String s) { setClickEnable(false); - getDialogManager().dismissDialog(); - finish(); + login.quitActivity(); StatisticManager.Instance().onEvent( StatisticsProtocol.Event.EVENT_ONE_CLICK_LOGIN_SUCCEED, "一键登录成功"); } @Override public void onError(Throwable e) { - getDialogManager().dismissDialog(); dealWithLoginError(e); setClickEnable(true); StatisticManager.Instance().onEvent( diff --git a/core/src/diff_src_erban/java/com/yizhuan/xchat_android_core/UriProvider.java b/core/src/diff_src_erban/java/com/yizhuan/xchat_android_core/UriProvider.java index d0fbce467..f0928fc31 100644 --- a/core/src/diff_src_erban/java/com/yizhuan/xchat_android_core/UriProvider.java +++ b/core/src/diff_src_erban/java/com/yizhuan/xchat_android_core/UriProvider.java @@ -348,4 +348,35 @@ public class UriProvider { return IM_SERVER_URL.concat("/yinyou/modules/room_rank/index.html?roomUid="+ AvRoomDataManager.get().getRoomUid()); } + /** + * 第三方SDK协议 + * + * @return + */ + public static String getSDKPermissionUrl() { + return JAVA_WEB_URL.concat("/yinyou/modules/rule/sdk.html"); + } + + /** + * 隐私协议设备权限 + * + * @return + */ + public static String getDeivcePermissionUrl() { + return JAVA_WEB_URL.concat("/yinyou/modules/rule/permissions.html"); + } + + /** + * 隐私协议-个人信息 + */ + public static String getPersonalInfoUrl() { + return JAVA_WEB_URL.concat("/yinyou/modules/rule/personal-info.html"); + } + + /** + * 隐私指引 + */ + public static String getPrivacyUrl() { + return JAVA_WEB_URL.concat("/yinyou/modules/rule/privacy-wap.html"); + } } diff --git a/core/src/diff_src_erban/java/com/yizhuan/xchat_android_core/manager/RtcEngineManager.java b/core/src/diff_src_erban/java/com/yizhuan/xchat_android_core/manager/RtcEngineManager.java deleted file mode 100644 index 5c8bc2268..000000000 --- a/core/src/diff_src_erban/java/com/yizhuan/xchat_android_core/manager/RtcEngineManager.java +++ /dev/null @@ -1,634 +0,0 @@ -package com.yizhuan.xchat_android_core.manager; - -import android.annotation.SuppressLint; -import android.os.Environment; -import android.os.Handler; -import android.os.Message; -import android.text.TextUtils; -import android.util.Log; - -import androidx.annotation.Nullable; - -import com.yizhuan.xchat_android_constants.XChatConstants; -import com.yizhuan.xchat_android_core.auth.AuthModel; -import com.yizhuan.xchat_android_core.room.bean.RoomInfo; -import com.yizhuan.xchat_android_core.room.ktv.event.RemoteVideoEvent; -import com.yizhuan.xchat_android_core.room.queue.bean.MicMemberInfo; -import com.yizhuan.xchat_android_core.statistic.LogFactory; -import com.yizhuan.xchat_android_core.statistic.StatisticManager; -import com.yizhuan.xchat_android_core.statistic.protocol.LogProtocol; -import com.yizhuan.xchat_android_library.rxbus.RxBus; -import com.yizhuan.xchat_android_library.utils.SingleToastUtil; -import com.yizhuan.xchat_android_library.utils.config.BasicConfig; - -import java.io.File; -import java.lang.ref.WeakReference; -import java.util.ArrayList; -import java.util.List; -import java.util.Locale; - -import io.agora.ktvkit.IKTVKitEventHandler; -import io.agora.ktvkit.KTVKit; -import io.agora.rtc.Constants; -import io.agora.rtc.IRtcEngineEventHandler; -import io.agora.rtc.RtcEngine; -import io.agora.rtc.video.VideoCanvas; - -import static io.agora.rtc.Constants.AUDIO_PROFILE_MUSIC_STANDARD; -import static io.agora.rtc.Constants.AUDIO_RECORDING_QUALITY_LOW; -import static io.agora.rtc.Constants.AUDIO_SCENARIO_GAME_STREAMING; - -/** - *

声网管理类

- * - * @author jiahui - * @date 2017/12/12 - */ -public final class RtcEngineManager { - - @Nullable - private RtcEngine mRtcEngine; - - /** - * 队列说话列表 - */ - private List speakQueueMembersPosition; - private String uid; - public boolean isAudienceRole; - /** - * 麦上是否闭麦,true:闭麦,false:开麦 - */ - public boolean isMute; - /** - * 听筒是否关闭 - */ - public boolean isRemoteMute; - private boolean needRecord; - private boolean isOpenAVRoomActivity; - private boolean isOpenVoiceMatchActivity; - //是否在房间,判断是切换品质还是第一次进 - private boolean inRoom; - private EngineEventHandler eventHandler; - - private static final class Helper { - private static final RtcEngineManager INSTANCE = new RtcEngineManager(); - } - - private RtcEngineManager() { - System.out.println("hehehehe" + RtcEngine.getSdkVersion()); - speakQueueMembersPosition = new ArrayList<>(); - } - - public static RtcEngineManager get() { - return Helper.INSTANCE; - } - - public void startRtcEngine(long uid) { - RoomInfo curRoomInfo = AvRoomDataManager.get().mCurrentRoomInfo; - joinChannel(curRoomInfo.getRoomId(), uid); - if (curRoomInfo.getUid() == uid && curRoomInfo.getType() != RoomInfo.ROOMTYPE_HOME_PARTY) { - //设置用户角色为主播,轰趴房不能默认设置房主为主播 - setRole(Constants.CLIENT_ROLE_BROADCASTER); - } else { - setRole(Constants.CLIENT_ROLE_AUDIENCE); - } - } - - public void joinChannel(long channelId, long uid) { - initRtcEngine(channelId, uid, AUDIO_PROFILE_MUSIC_STANDARD, AUDIO_SCENARIO_GAME_STREAMING); - } - - private void initRtcEngine(long channelId, long uid, int quality, int audioShowRoom) { - this.uid = uid + ""; - this.isMute = false; - this.isRemoteMute = false; - enterChannel(channelId, (int) uid, quality, audioShowRoom); - } - - private void enterChannel(long channelId, int uid, int quality, int audioShowRoom) { - if (eventHandler == null) { - eventHandler = new EngineEventHandler(this); - } - eventHandler.isEnter = true; - if (mRtcEngine == null) { - try { - mRtcEngine = RtcEngine.create(BasicConfig.INSTANCE.getAppContext(), XChatConstants.AGORA_KEY, eventHandler); - } catch (Exception e) { - throw new RuntimeException("NEED TO check rtc sdk init fatal error\n" + Log.getStackTraceString(e)); - } - //设置频道模式为直播 - mRtcEngine.setChannelProfile(Constants.CHANNEL_PROFILE_LIVE_BROADCASTING); - mRtcEngine.setAudioProfile(quality, audioShowRoom); - mRtcEngine.enableAudioVolumeIndication(600, 3,false); - mRtcEngine.setDefaultAudioRoutetoSpeakerphone(true); - mRtcEngine.setExternalVideoSource(true, false, true); - mRtcEngine.setRecordingAudioFrameParameters(48000, 2, 2, 960); - mRtcEngine.setVideoProfile(Constants.VIDEO_PROFILE_360P, false); - mRtcEngine.enableDualStreamMode(true); - mRtcEngine.setParameters(String.format(Locale.US, "{\"che.audio.headset.monitoring,true\"}")); - mRtcEngine.setParameters(String.format(Locale.US, "{\"che.audio.enable.androidlowlatencymode,true\"}")); - mRtcEngine.setLogFile(Environment.getExternalStorageDirectory() - + File.separator + BasicConfig.INSTANCE.getAppContext().getPackageName() + "/log/agora-rtc.log"); - } - //创建并加入频道 - mRtcEngine.joinChannel(null, String.valueOf(channelId), null, uid); - } - - - public int stopAudioMixing() { - if (mRtcEngine != null) { - return mRtcEngine.stopAudioMixing(); - } - return -1; - } - - public void leaveChannel() { - if (mRtcEngine != null) { - stopAudioMixing(); - mRtcEngine.leaveChannel(); - mRtcEngine = null; - } - if (handler != null) - handler.removeCallbacksAndMessages(null); - isMute = false; - isRemoteMute = false; - needRecord = false; - inRoom = false; - } - - public void setOpenAVRoomActivity(boolean openAVRoomActivity) { - isOpenAVRoomActivity = openAVRoomActivity; - setRemoteMute(isRemoteMute); - setMute(isMute); - } - - public void setOpenVoiceMatchActivity(boolean openVoiceMatchActivity) { - isOpenVoiceMatchActivity = openVoiceMatchActivity; - setRemoteMute(isRemoteMute); - setMute(isMute); - } - - //设置静音 - public void setRemoteMute(boolean mute) { - if (mRtcEngine != null) { - int result = mRtcEngine.muteAllRemoteAudioStreams(mute || (isOpenVoiceMatchActivity && !isOpenAVRoomActivity)); - if (result == 0) { - isRemoteMute = mute; - } - } - } - - public void setRemoteMute(int uid, boolean mute) { - if (mRtcEngine != null) { - mRtcEngine.muteRemoteAudioStream(uid, mute); - } - } - - public void setRemoteMute(MicMemberInfo chatRoomMember, boolean mute) { - if (chatRoomMember != null && !TextUtils.isEmpty(chatRoomMember.getAccount())) { - String account = chatRoomMember.getAccount(); - Integer uid = Integer.valueOf(account); - if (uid != 0) - AudioEngineManager.get().setRemoteMute(uid, false); - } - } - - /** - * 设置角色,上麦,下麦(调用) - * - * @param role CLIENT_ROLE_AUDIENCE: 听众 ,CLIENT_ROLE_BROADCASTER: 主播 - */ - public void setRole(int role) { - if (mRtcEngine != null) { - //先已是否静音为准 - mRtcEngine.setClientRole(role); - isAudienceRole = role != Constants.CLIENT_ROLE_BROADCASTER; - } - } - - /** - * 设置是否能说话,静音,人自己的行为 - * - * @param mute true:静音,false:不静音 - */ - @SuppressLint("CheckResult") - public void setMute(boolean mute) { - if (mRtcEngine != null) { - int result = mRtcEngine.muteLocalAudioStream(mute || (isOpenVoiceMatchActivity && !isOpenAVRoomActivity)); - if (result == 0) { - isMute = mute; - } - } - } - - private Handler handler = new RtcEngineHandler(this); - - private static class RtcEngineHandler extends Handler { - private WeakReference mReference; - - RtcEngineHandler(RtcEngineManager manager) { - mReference = new WeakReference<>(manager); - } - - @Override - public void handleMessage(Message msg) { - super.handleMessage(msg); - RtcEngineManager rtcEngineManager = mReference.get(); - if (rtcEngineManager == null) return; - if (msg.what == 0) { - if (!RtcEngineManager.get().inRoom) { - IMNetEaseManager.get().joinAvRoom(); - } - - RtcEngineManager.get().inRoom = true; - if (rtcEngineManager.needRecord && rtcEngineManager.mRtcEngine != null) { - rtcEngineManager.mRtcEngine.startAudioRecording(Environment.getExternalStorageDirectory() - + File.separator + BasicConfig.INSTANCE.getAppContext().getPackageName() - + "/audio/" + System.currentTimeMillis() + ".aac", AUDIO_RECORDING_QUALITY_LOW); - } - - } else if (msg.what == 1) {//onAudioVolumeIndication 说话声音音量提示回调 - IRtcEngineEventHandler.AudioVolumeInfo[] speakers = (IRtcEngineEventHandler.AudioVolumeInfo[]) msg.obj; - RoomInfo roomInfo = AvRoomDataManager.get().mCurrentRoomInfo; - if (roomInfo == null) return; - if (rtcEngineManager.speakQueueMembersPosition.size() > 0) { - rtcEngineManager.speakQueueMembersPosition.clear(); - } - if (speakers == null || speakers.length == 0) return; - for (IRtcEngineEventHandler.AudioVolumeInfo speaker : speakers) { - // 0 代表的是房主,其他代表的是uid - int uid = speaker.uid == 0 ? Integer.valueOf(rtcEngineManager.uid) : speaker.uid; - int micPosition = AvRoomDataManager.get().getMicPosition(uid); - // 如果是房主的话,并且房主的mic位置没有的啊,则把房主的位置设置为-1(兼容ios轻聊房光晕) - if (uid == AvRoomDataManager.get().mCurrentRoomInfo.getUid() && - AvRoomDataManager.get().mCurrentRoomInfo.getType() == RoomInfo.ROOMTYPE_LIGHT_CHAT - && micPosition == Integer.MIN_VALUE) { - micPosition = -1; - } - if (micPosition == Integer.MIN_VALUE && - uid == AuthModel.get().getCurrentUid()) { - // 如果麦上没有自己,并且自己在说话,要把自己变成听众 - AudioEngineManager.get().setRole(Constants.CLIENT_ROLE_AUDIENCE); - } else if (micPosition == Integer.MIN_VALUE && - uid != AuthModel.get().getCurrentUid()) { - // 如果麦上没有这个人,要把他静音 - AudioEngineManager.get().setRemoteMute(uid, true); - } - if (micPosition == Integer.MIN_VALUE) continue; - rtcEngineManager.speakQueueMembersPosition.add(micPosition); - } - IMNetEaseManager.get().getChatRoomEventObservable().onNext( - new RoomEvent().setEvent(RoomEvent.SPEAK_STATE_CHANGE) - .setMicPositionList(rtcEngineManager.speakQueueMembersPosition) - ); - } else if (msg.what == 2) {//onUserMuteAudio 用户静音回调 - Integer uid = (Integer) msg.obj; - } - } - } - - private static class EngineEventHandler extends IRtcEngineEventHandler { - private WeakReference mReference; - private boolean isEnter; - - EngineEventHandler(RtcEngineManager manager) { - mReference = new WeakReference<>(manager); - isEnter = true; - } - - @Override - public void onJoinChannelSuccess(String channel, int uid, int elapsed) { - super.onJoinChannelSuccess(channel, uid, elapsed); - //声网进入频道成功日志 - StatisticManager.Instance().sendAliyunLog(LogFactory.create( - LogProtocol.LogLevel.LEVEL_VERBOSE, - LogProtocol.Topic.TOPIC_AUDIO_LOG, - LogProtocol.Event.EVENT_AUDIO_CHANNEL - ) - .append("uid", String.valueOf(AuthModel.get().getCurrentUid())) - .append("type", "1") - .append("room_id", channel)); - if (mReference.get() != null && isEnter) { - isEnter = false; - mReference.get().handler.sendEmptyMessage(0); - } - } - - - @Override - public void onRejoinChannelSuccess(String channel, int uid, int elapsed) { - super.onRejoinChannelSuccess(channel, uid, elapsed); - //声网重新链接频道成功日志 - StatisticManager.Instance().sendAliyunLog(LogFactory.create( - LogProtocol.LogLevel.LEVEL_VERBOSE, - LogProtocol.Topic.TOPIC_AUDIO_LOG, - LogProtocol.Event.EVENT_AUDIO_CHANNEL - ) - .append("uid", String.valueOf(AuthModel.get().getCurrentUid())) - .append("type", "3") - .append("room_id", channel)); - - } - - @Override - public void onLeaveChannel(RtcStats stats) { - super.onLeaveChannel(stats); - //声网离开频道成功日志 - StatisticManager.Instance().sendAliyunLog(LogFactory.create( - LogProtocol.LogLevel.LEVEL_VERBOSE, - LogProtocol.Topic.TOPIC_AUDIO_LOG, - LogProtocol.Event.EVENT_AUDIO_CHANNEL - ) - .append("uid", String.valueOf(AuthModel.get().getCurrentUid())) - .append("type", "2")); - } - - @Override - public void onUserJoined(int uid, int elapsed) { - super.onUserJoined(uid, elapsed); - } - - @Override - public void onActiveSpeaker(int uid) { - super.onActiveSpeaker(uid); - } - - @Override - public void onLastmileQuality(int quality) { - super.onLastmileQuality(quality); - if (quality >= 3) { - IMNetEaseManager.postRoomEvent(new RoomEvent().setEvent(RoomEvent.RTC_ENGINE_NETWORK_BAD) - ); - } - } - - @Override - public void onConnectionInterrupted() { - super.onConnectionInterrupted(); - IMNetEaseManager.postRoomEvent(new RoomEvent().setEvent(RoomEvent.RTC_ENGINE_NETWORK_CLOSE)); - } - - @Override - public void onConnectionLost() { - super.onConnectionLost(); - IMNetEaseManager.postRoomEvent(new RoomEvent().setEvent(RoomEvent.RTC_ENGINE_NETWORK_CLOSE)); - } - - @Override - public void onAudioVolumeIndication(AudioVolumeInfo[] speakers, int totalVolume) { - super.onAudioVolumeIndication(speakers, totalVolume); - RtcEngineManager manager = mReference.get(); - if (manager != null) { - Message message = manager.handler.obtainMessage(); - message.what = 1; - message.obj = speakers; - manager.handler.sendMessage(message); - } - } - - @Override - public void onUserMuteAudio(int uid, boolean muted) { - super.onUserMuteAudio(uid, muted); - RtcEngineManager manager = mReference.get(); - if (manager != null) { - if (muted) { - Message message = manager.handler.obtainMessage(); - message.what = 2; - message.obj = uid; - manager.handler.sendMessage(message); - } - } - } - - @Override - public void onClientRoleChanged(int oldRole, int newRole) { - super.onClientRoleChanged(oldRole, newRole); - if (newRole==1) - get().setMute(get().isMute); - } - - @Override - public void onAudioMixingFinished() {//伴奏播放已结束回调 - super.onAudioMixingFinished(); - IMNetEaseManager.get().getChatRoomEventObservable().onNext( - new RoomEvent().setEvent(RoomEvent.METHOD_ON_AUDIO_MIXING_FINISHED) - ); - } - - @Override - public void onFirstRemoteVideoDecoded(final int uid, int width, int height, int elapsed) { - RxBus.get().post(new RemoteVideoEvent(uid)); - get().remoteUid = uid; - } - } - - //音乐播放相关---------------begin-------------------------- - - public void adjustAudioMixingVolume(int volume) { - if (mRtcEngine != null) { - mRtcEngine.adjustAudioMixingVolume(volume); - } - } - - public void adjustRecordingSignalVolume(int volume) { - if (mRtcEngine != null) { - mRtcEngine.adjustRecordingSignalVolume(volume); - } - } - - public int resumeAudioMixing() { - if (mRtcEngine != null) { - int result = mRtcEngine.resumeAudioMixing(); - return result; - } - return -1; - } - - public int pauseAudioMixing() { - if (mRtcEngine != null) { - int result = mRtcEngine.pauseAudioMixing(); - return result; - } - return -1; - } - - - public int startAudioMixing(String filePath, boolean loopback, int cycle) { - if (mRtcEngine != null) { - mRtcEngine.stopAudioMixing(); - int result = 0; - try { - result = mRtcEngine.startAudioMixing(filePath, loopback, false, cycle); - } catch (Exception e) { - return -1; - } - return result; - } - return -1; - } - - public int getAudioMixingCurrentPosition() { - return mRtcEngine.getAudioMixingCurrentPosition(); - } - - public int getAudioMixingDuration() { - return mRtcEngine.getAudioMixingDuration(); - } - //音乐播放相关---------------end-------------------------- - - - //ktv相关---------------begin-------------------------- - private boolean isPlaying; - private boolean isAccompany = true; - private boolean isPush; - private boolean isOpenKtv; - private boolean isLive; - private int remoteUid; - private double accompanyVoice = 0.5; - private double personVoice = 0.5; - @Nullable - private KTVKit ktvKit; - - public synchronized void openKtvModel() { - if (mRtcEngine == null || isOpenKtv) return; - try { - ktvKit = KTVKit.create(mRtcEngine, BasicConfig.INSTANCE.getAppContext(), new IKTVKitEventHandler() { - @Override - public void onPlayerError(int error) { - SingleToastUtil.showToast("MV播放出现未知错误,可以点击报错向我们反馈哦~~"); - } - }); - } catch (Exception e) { - e.printStackTrace(); - } - mRtcEngine.enableVideo(); - mRtcEngine.enableLocalVideo(false); - isOpenKtv = true; - } - - public synchronized void closeKtvModel() { - if (!isOpenKtv) return; - stopPush(); - isPlaying = false; - isOpenKtv = false; - isLive = false; - if (mRtcEngine != null) { - mRtcEngine.disableVideo(); - } - if (ktvKit != null) { - KTVKit.destroy(); - ktvKit = null; - } - } - - public void stopPush() { - if (isPush){ - isPush = false; - if (mRtcEngine != null) { - mRtcEngine.muteLocalVideoStream(true); - mRtcEngine.enableLocalVideo(false); - // mRtcEngine.enableInEarMonitoring(false); - } - if (ktvKit != null) ktvKit.stopPlayVideoFile(); - } - } - - public synchronized void startMv(String url) { - if (ktvKit == null || mRtcEngine == null || !isOpenKtv || !AvRoomDataManager.get().isOwnerOnMic()) - return; - mRtcEngine.enableLocalVideo(true); - mRtcEngine.muteLocalVideoStream(false); - ktvKit.openAndPlayVideoFile(url); - setAccompanyVoice(accompanyVoice); - setPersonVoice(personVoice); - isPlaying = true; - isPush = true; - isLive = true; - } - - public synchronized void setupRemoteVideo(VideoCanvas canvas, int remoteUid) { - if (mRtcEngine != null && isOpenKtv) { - isPlaying = true; - isLive = true; - mRtcEngine.setupRemoteVideo(canvas); - } - } - - - public void playOrPause() { - if (ktvKit != null) ktvKit.pause(); - isPlaying = !isPlaying; - } - - public void changeAudioStream() { - if (ktvKit != null) ktvKit.switchAudioTrack(); - isAccompany = !isAccompany; - } - - public void setAccompanyVoice(double progress) { - if (progress < 0 || progress > 1) { - return; - } - accompanyVoice = progress; - if (ktvKit != null) ktvKit.adjustAccompanyVolume(progress); - } - - public void setPersonVoice(double progress) { - if (progress < 0 || progress > 1) { - return; - } - personVoice = progress; - if (ktvKit != null) ktvKit.adjustVoiceVolume(personVoice); - } - - public boolean isPlaying() { - return isPlaying; - } - - public boolean isPush() { - return isPush; - } - - public boolean isAccompany() { - return isAccompany; - } - - public boolean isOpenKtv() { - return isOpenKtv; - } - - public boolean isLive() { - return isLive; - } - - public void setLive(boolean live) { - isLive = live; - } - - public int getRemoteUid() { - return remoteUid; - } - - public double getAccompanyVoice() { - return accompanyVoice; - } - - public double getPersonVoice() { - return personVoice; - } - - @Nullable - public KTVKit getKtvKit() { - return ktvKit; - } - - public double getPlayPos() { - return ktvKit == null ? 0 : ktvKit.getCurrentPosition(); - } - - public int getPlayDuration() { - return ktvKit == null ? 0 : ktvKit.getDuration(); - } - - //ktv相关---------------end-------------------------- -} diff --git a/core/src/diff_src_erban/java/com/yizhuan/xchat_android_core/manager/trtc/TRTCEngineAdapter.java b/core/src/diff_src_erban/java/com/yizhuan/xchat_android_core/manager/trtc/TRTCEngineAdapter.java index 99f0c2e59..08e9089d0 100644 --- a/core/src/diff_src_erban/java/com/yizhuan/xchat_android_core/manager/trtc/TRTCEngineAdapter.java +++ b/core/src/diff_src_erban/java/com/yizhuan/xchat_android_core/manager/trtc/TRTCEngineAdapter.java @@ -299,16 +299,6 @@ public class TRTCEngineAdapter extends BaseAdapterImpl { if (setLiveTransCodingFlag) { sInstance.setLiveTranscoding(currentTranscodingConfig); } - if (bDefaultMuteAllRemoteAudioStreams) { - trtcCloud.muteRemoteAudio(userId, true); - } else { - trtcCloud.muteRemoteAudio(userId, false); - } - if (bDefaultMuteAllRemoteVideoStreams) { - trtcCloud.muteRemoteVideoStream(userId, true); - } else { - trtcCloud.muteRemoteVideoStream(userId, false); - } } @Override diff --git a/core/src/diff_src_erban/java/com/yizhuan/xchat_android_core/manager/trtc/TRtcEngineManager.java b/core/src/diff_src_erban/java/com/yizhuan/xchat_android_core/manager/trtc/TRtcEngineManager.java index 00ce3bf7b..5bec5ec88 100644 --- a/core/src/diff_src_erban/java/com/yizhuan/xchat_android_core/manager/trtc/TRtcEngineManager.java +++ b/core/src/diff_src_erban/java/com/yizhuan/xchat_android_core/manager/trtc/TRtcEngineManager.java @@ -139,8 +139,8 @@ public class TRtcEngineManager extends BaseEngine { @Override public void setRemoteMute(long uid, boolean mute) { Logger.t(TAG).d("setRemoteMute uid:%s mute:%s", uid, mute); - - if (mRtcEngine != null) { + //调用这个方法会影导致muteAllRemoteAudioStreams(true)失效! + if (mRtcEngine != null && !isRemoteMute) { mRtcEngine.muteRemoteAudioStream((int) uid, mute); } } diff --git a/core/src/main/java/com/yizhuan/xchat_android_core/PreferencesUtils.java b/core/src/main/java/com/yizhuan/xchat_android_core/PreferencesUtils.java index 485efc0a0..8fca9cf56 100644 --- a/core/src/main/java/com/yizhuan/xchat_android_core/PreferencesUtils.java +++ b/core/src/main/java/com/yizhuan/xchat_android_core/PreferencesUtils.java @@ -27,6 +27,7 @@ public class PreferencesUtils { private static final String KEY_ACCOUNT_INFO = "AccountInfo"; private static final String KEY_NOTI_TOGGLE = "NotiToggle"; private static final String KEY_NOTI_CONFIG = "StatusBarNotificationConfig"; + private static final String KEY_AGREE_PRIVACY = "key_agree_privacy"; public static void saveTicketInfo(TicketInfo ticketInfo) { @@ -77,6 +78,7 @@ public class PreferencesUtils { public static void setFristSendGold(boolean isOpen) { SettingsPref.instance(BasicConfig.INSTANCE.getAppContext()).putBoolean(KEY_FRIST_SEED_GOLD, isOpen); } + public static boolean readFristQQ() { return SettingsPref.instance(BasicConfig.INSTANCE.getAppContext()).getBoolean(KEY_FRIST_QQ, true); } @@ -84,6 +86,7 @@ public class PreferencesUtils { public static void setFristQQ(boolean isOpen) { SettingsPref.instance(BasicConfig.INSTANCE.getAppContext()).putBoolean(KEY_FRIST_QQ, isOpen); } + public static boolean readFristUser() { return SettingsPref.instance(BasicConfig.INSTANCE.getAppContext()).getBoolean(KEY_FRIST_USER, true); } @@ -93,7 +96,6 @@ public class PreferencesUtils { } - public static void saveStatusBarNotificationConfig(StatusBarNotificationConfig notificationConfig) { ObjectPref.instance(BasicConfig.INSTANCE.getAppContext()).put(KEY_NOTI_CONFIG, notificationConfig); } @@ -109,4 +111,12 @@ public class PreferencesUtils { saveTicketInfo(new TicketInfo()); saveLoginInfo(new LoginInfo("", "")); } + + public static void savePrivacyState(boolean privacy) { + ObjectPref.instance(BasicConfig.INSTANCE.getAppContext()).put(KEY_AGREE_PRIVACY, privacy); + } + + public static boolean readPrivacyState() { + return (boolean) ObjectPref.instance(BasicConfig.INSTANCE.getAppContext()).get(KEY_AGREE_PRIVACY, false); + } } diff --git a/core/src/main/java/com/yizhuan/xchat_android_core/user/bean/UserDetailInfo.java b/core/src/main/java/com/yizhuan/xchat_android_core/user/bean/UserDetailInfo.java index aec203057..b1d3203e6 100644 --- a/core/src/main/java/com/yizhuan/xchat_android_core/user/bean/UserDetailInfo.java +++ b/core/src/main/java/com/yizhuan/xchat_android_core/user/bean/UserDetailInfo.java @@ -53,6 +53,7 @@ public class UserDetailInfo implements Serializable { * userGiftWall : [{"uid":935007,"giftPrice":100,"giftId":1362,"giftName":"棒棒糖","picUrl":"http://image.doudouyuyin.com/FutM6ydZBdAn6Iz_ro7mgen1Cmph?imageslim","reciveCount":152}] * dynamicInfo : [{"uid":935007,"worldId":-1,"content":"人生不如意之事 十之八九\n放下才是解脱","likeCount":1,"commentCount":2,"dynamicId":1339,"publishTime":1587726740000,"playCount":0,"type":2,"dynamicResList":[{"id":950,"resUrl":"https://image.zhongjialx.com/FhWRCGNLYybra8--ItDfuN3lpCIX?imageslim","resDuration":0,"format":"jpeg","width":2000,"height":1500}],"status":1,"isLike":false,"nick":"大幽魂上衣","avatar":"https://image.zhongjialx.com/rotate_picture_1587010848888.jpg?imageslim"},{"uid":935007,"worldId":-1,"content":"努力,才能保证你的价值🌹🌷💐🥀🍂🍁🌼🌸🌺🍃🌾🌱🌾🎍🌵🌵🌿🍀🌳🌳💐🌻🌷🌻","likeCount":1,"commentCount":1,"dynamicId":1337,"publishTime":1587726053000,"playCount":0,"type":2,"dynamicResList":[{"id":948,"resUrl":"https://image.zhongjialx.com/FhwRh_iAaqRkgsOZdHK3n3TM75Zq?imageslim","resDuration":0,"format":"jpeg","width":2000,"height":1500}],"status":1,"isLike":false,"nick":"大幽魂上衣","avatar":"https://image.zhongjialx.com/rotate_picture_1587010848888.jpg?imageslim"},{"uid":935007,"worldId":-1,"content":"盘他","likeCount":1,"commentCount":1,"dynamicId":1330,"publishTime":1587721604000,"playCount":0,"type":2,"dynamicResList":[{"id":947,"resUrl":"https://image.zhongjialx.com/FpthMLmgrkDHfEatTBKb0h05mnXj?imageslim","resDuration":0,"format":"jpeg","width":1080,"height":1672}],"status":1,"isLike":false,"nick":"大幽魂上衣","avatar":"https://image.zhongjialx.com/rotate_picture_1587010848888.jpg?imageslim"},{"uid":935007,"worldId":-1,"content":"铁汁,奥力给,没毛病吧?!","likeCount":1,"commentCount":3,"dynamicId":1329,"publishTime":1587720609000,"playCount":0,"type":2,"dynamicResList":[{"id":946,"resUrl":"https://image.zhongjialx.com/FtV48sdlmrKkc69OSft43J-S7wDk?imageslim","resDuration":0,"format":"png","width":1080,"height":1920}],"status":1,"isLike":false,"nick":"大幽魂上衣","avatar":"https://image.zhongjialx.com/rotate_picture_1587010848888.jpg?imageslim"},{"uid":935007,"worldId":-1,"content":"上热门🦆","likeCount":5,"commentCount":7,"dynamicId":1327,"publishTime":1587711821000,"playCount":0,"type":2,"dynamicResList":[{"id":938,"resUrl":"https://image.zhongjialx.com/FgInE7evjBy8lL33uHkmvORMlC1_?imageslim","resDuration":0,"format":"jpeg","width":1296,"height":1728}],"status":1,"isLike":false,"nick":"大幽魂上衣","avatar":"https://image.zhongjialx.com/rotate_picture_1587010848888.jpg?imageslim"}] * privatePhoto : [{"photoUrl":"https://image.zhongjialx.com/rotate_picture_1587010848888.jpg?imageslim","seqNo":0}] + isReview boolean */ private int uid; @@ -375,6 +376,7 @@ public class UserDetailInfo implements Serializable { private String photoUrl; private int seqNo; + private boolean isReview; public String getPhotoUrl() { return photoUrl; @@ -391,6 +393,14 @@ public class UserDetailInfo implements Serializable { public void setSeqNo(int seqNo) { this.seqNo = seqNo; } + + public boolean isReview() { + return isReview; + } + + public void setReview(boolean review) { + isReview = review; + } } } } diff --git a/core/src/main/java/com/yizhuan/xchat_android_core/user/bean/UserInfo.java b/core/src/main/java/com/yizhuan/xchat_android_core/user/bean/UserInfo.java index 0c91fe848..c10c3d3de 100644 --- a/core/src/main/java/com/yizhuan/xchat_android_core/user/bean/UserInfo.java +++ b/core/src/main/java/com/yizhuan/xchat_android_core/user/bean/UserInfo.java @@ -48,6 +48,10 @@ public class UserInfo implements Serializable { private String nick; //头像 private String avatar; + //isReview头像是否在审核中 + private boolean isReview; + //新的头像 + private String newAvatar; //性别 1:男 2:女 0 :未知 private int gender; //生日 @@ -350,6 +354,8 @@ public class UserInfo implements Serializable { this.phone = userInfo.phone; this.isBindPhone = userInfo.isBindPhone; this.bindType = userInfo.bindType; + this.isReview = userInfo.isReview; + this.newAvatar = userInfo.newAvatar; } // @@ -537,6 +543,22 @@ public class UserInfo implements Serializable { return remainDay; } + public void setNewAvatar(String newAvatar) { + this.newAvatar = newAvatar; + } + + public String getNewAvatar() { + return newAvatar; + } + + public void setReview(boolean review) { + isReview = review; + } + + public boolean isReview() { + return isReview; + } + public void setRemainDay(int remainDay) { this.remainDay = remainDay; } diff --git a/nim_uikit/res/values/colors.xml b/nim_uikit/res/values/colors.xml index 68409c0bc..8035150c8 100644 --- a/nim_uikit/res/values/colors.xml +++ b/nim_uikit/res/values/colors.xml @@ -61,6 +61,7 @@ #ff333333 + #0A333333 #ff666666 #ff999999 #bfc2c5