Compare commits
8 Commits
dev/app_1_
...
peko_relea
Author | SHA1 | Date | |
---|---|---|---|
![]() |
9096a9b57f | ||
![]() |
c46c49715c | ||
![]() |
31b785c511 | ||
![]() |
6f01c5ddad | ||
![]() |
306f15f7f9 | ||
![]() |
0babbedeb9 | ||
![]() |
d09e60d206 | ||
![]() |
e37796286b |
@@ -829,6 +829,10 @@
|
|||||||
<activity
|
<activity
|
||||||
android:name=".ui.webview.DatingRuleWebViewActivity"
|
android:name=".ui.webview.DatingRuleWebViewActivity"
|
||||||
android:theme="@style/dialog_web_view_activity" />
|
android:theme="@style/dialog_web_view_activity" />
|
||||||
|
<activity
|
||||||
|
android:name=".ui.webview.room_banner.RoomBannerWebDialogActivity"
|
||||||
|
android:theme="@style/dialog_web_view_activity"
|
||||||
|
android:windowSoftInputMode="adjustPan" />
|
||||||
<activity
|
<activity
|
||||||
android:name=".ui.webview.TarotPayWebViewActivity"
|
android:name=".ui.webview.TarotPayWebViewActivity"
|
||||||
android:theme="@style/dialog_web_view_activity" />
|
android:theme="@style/dialog_web_view_activity" />
|
||||||
|
@@ -410,6 +410,7 @@ public class MainActivity extends BaseMvpActivity<IMainView, MainPresenter>
|
|||||||
}
|
}
|
||||||
onParseIntent();
|
onParseIntent();
|
||||||
handleNimIntent();
|
handleNimIntent();
|
||||||
|
InitialModel.get().regionCheck();
|
||||||
}
|
}
|
||||||
|
|
||||||
private void onParseIntent() {
|
private void onParseIntent() {
|
||||||
@@ -519,6 +520,7 @@ public class MainActivity extends BaseMvpActivity<IMainView, MainPresenter>
|
|||||||
@Subscribe(threadMode = ThreadMode.MAIN)
|
@Subscribe(threadMode = ThreadMode.MAIN)
|
||||||
public void onLoadLoginUserInfoEvent(LoadLoginUserInfoEvent event) {
|
public void onLoadLoginUserInfoEvent(LoadLoginUserInfoEvent event) {
|
||||||
firstLoadedUserInfo();
|
firstLoadedUserInfo();
|
||||||
|
InitialModel.get().regionCheck();
|
||||||
}
|
}
|
||||||
|
|
||||||
public void onLogout() {
|
public void onLogout() {
|
||||||
|
@@ -16,6 +16,8 @@ import android.util.Log;
|
|||||||
import androidx.multidex.MultiDex;
|
import androidx.multidex.MultiDex;
|
||||||
|
|
||||||
import com.bumptech.glide.request.target.ViewTarget;
|
import com.bumptech.glide.request.target.ViewTarget;
|
||||||
|
import com.chuhai.utils.LanguageUtils;
|
||||||
|
import com.chuhai.utils.ServiceTime;
|
||||||
import com.coorchice.library.utils.LogUtils;
|
import com.coorchice.library.utils.LogUtils;
|
||||||
import com.facebook.stetho.Stetho;
|
import com.facebook.stetho.Stetho;
|
||||||
import com.hjq.toast.ToastUtils;
|
import com.hjq.toast.ToastUtils;
|
||||||
@@ -114,6 +116,9 @@ import io.realm.RealmConfiguration;
|
|||||||
public class XChatApplication extends BaseApp {
|
public class XChatApplication extends BaseApp {
|
||||||
public static final String TAG = "XChatApplication";
|
public static final String TAG = "XChatApplication";
|
||||||
public static Application gContext;
|
public static Application gContext;
|
||||||
|
|
||||||
|
// 接收到退出登录事件(跳转到登录页了)
|
||||||
|
private static long logoutEventTime = 0;
|
||||||
private static final MessageNotifierCustomization messageNotifierCustomization = new MessageNotifierCustomization() {
|
private static final MessageNotifierCustomization messageNotifierCustomization = new MessageNotifierCustomization() {
|
||||||
@Override
|
@Override
|
||||||
public String makeNotifyContent(String nick, IMMessage message) {
|
public String makeNotifyContent(String nick, IMMessage message) {
|
||||||
@@ -202,10 +207,11 @@ public class XChatApplication extends BaseApp {
|
|||||||
|
|
||||||
String channel = "";
|
String channel = "";
|
||||||
channel = ChannelReaderUtil.getChannel(instance);
|
channel = ChannelReaderUtil.getChannel(instance);
|
||||||
|
Log.d(TAG, "localChannel:" + channel);
|
||||||
if (TextUtils.isEmpty(channel)) {
|
if (TextUtils.isEmpty(channel)) {
|
||||||
channel = Constants.GOOGLE;
|
channel = Constants.GOOGLE;
|
||||||
}
|
}
|
||||||
|
Log.d(TAG, "finalChannel:" + channel);
|
||||||
BasicConfig.INSTANCE.setOriginalChannel(channel);
|
BasicConfig.INSTANCE.setOriginalChannel(channel);
|
||||||
|
|
||||||
BasicConfig.INSTANCE.setChannel(channel);
|
BasicConfig.INSTANCE.setChannel(channel);
|
||||||
@@ -244,6 +250,13 @@ public class XChatApplication extends BaseApp {
|
|||||||
SingleToastUtil.showToast(serviceResult.getMessage());
|
SingleToastUtil.showToast(serviceResult.getMessage());
|
||||||
EventBus.getDefault().post(new NeedCompleteInfoEvent());
|
EventBus.getDefault().post(new NeedCompleteInfoEvent());
|
||||||
throw new ServerException(serviceResult.getMessage(), serviceResult.getCode());
|
throw new ServerException(serviceResult.getMessage(), serviceResult.getCode());
|
||||||
|
} else if (serviceResult.getCode() == 401) {
|
||||||
|
if ((ServiceTime.INSTANCE.getTime() - logoutEventTime) > 800) {
|
||||||
|
logoutEventTime = ServiceTime.INSTANCE.getTime();
|
||||||
|
SingleToastUtil.showToast(serviceResult.getMessage());
|
||||||
|
AuthModel.get().cleanLogInfo();
|
||||||
|
}
|
||||||
|
throw new ServerException(serviceResult.getMessage(), serviceResult.getCode());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return null;
|
return null;
|
||||||
@@ -403,6 +416,7 @@ public class XChatApplication extends BaseApp {
|
|||||||
httpParams.put("deviceId", DeviceUuidFactory.getDeviceId(context));
|
httpParams.put("deviceId", DeviceUuidFactory.getDeviceId(context));
|
||||||
httpParams.put("androidId", MD5Utils.getMD5String(Settings.Secure.getString(context.getContentResolver(), Settings.Secure.ANDROID_ID)));
|
httpParams.put("androidId", MD5Utils.getMD5String(Settings.Secure.getString(context.getContentResolver(), Settings.Secure.ANDROID_ID)));
|
||||||
httpParams.put("channel", AppMetaDataUtil.getChannelID());
|
httpParams.put("channel", AppMetaDataUtil.getChannelID());
|
||||||
|
httpParams.put("lang", LanguageUtils.INSTANCE.getSystemLanguage().toLanguageTag());
|
||||||
RxNet.init(context)
|
RxNet.init(context)
|
||||||
.debug(BuildConfig.DEBUG)
|
.debug(BuildConfig.DEBUG)
|
||||||
.setBaseUrl(url)
|
.setBaseUrl(url)
|
||||||
|
@@ -513,9 +513,6 @@ open class BaseRoomFragment<V : IBaseRoomView?, P : BaseRoomPresenter<V>?> :
|
|||||||
//設置透明度
|
//設置透明度
|
||||||
rollPagerView.setAnimationDurtion(500)
|
rollPagerView.setAnimationDurtion(500)
|
||||||
bannerAdapter.notifyDataSetChanged()
|
bannerAdapter.notifyDataSetChanged()
|
||||||
bannerAdapter.setRoomActClickListener { url ->
|
|
||||||
DialogWebViewActivity.start(mContext, url)
|
|
||||||
}
|
|
||||||
|
|
||||||
// 模擬指示器在viewpager底部效果
|
// 模擬指示器在viewpager底部效果
|
||||||
val viewPager = rollPagerView.viewPager
|
val viewPager = rollPagerView.viewPager
|
||||||
|
@@ -34,7 +34,7 @@ class GameDelegate(val activity: Activity, val container: FrameLayout, var mgId:
|
|||||||
private val TAG = "GameDelegate"
|
private val TAG = "GameDelegate"
|
||||||
private var APP_CODE = ""
|
private var APP_CODE = ""
|
||||||
|
|
||||||
private val mRoomID = AvRoomDataManager.get().roomUid.toString()
|
private val mRoomID :String get() = AvRoomDataManager.get().roomUid.toString()
|
||||||
private val mLanguage = "zh-TW" //語言
|
private val mLanguage = "zh-TW" //語言
|
||||||
|
|
||||||
//調用遊戲SDK的接口,成功加載遊戲後可用:
|
//調用遊戲SDK的接口,成功加載遊戲後可用:
|
||||||
@@ -84,7 +84,10 @@ class GameDelegate(val activity: Activity, val container: FrameLayout, var mgId:
|
|||||||
}
|
}
|
||||||
|
|
||||||
fun updateGame(mgId: Long?) {
|
fun updateGame(mgId: Long?) {
|
||||||
if (mgId == null || mgId == 0L || mgId == mMGID || iSudFSTAPP == null) return
|
if (mgId == null || mgId == 0L) return
|
||||||
|
if (mgId == mMGID && iSudFSTAPP != null) {
|
||||||
|
return
|
||||||
|
}
|
||||||
mMGID = mgId
|
mMGID = mgId
|
||||||
updateMyMicQueue(GameStatus.STATUS_NOT_JOIN)
|
updateMyMicQueue(GameStatus.STATUS_NOT_JOIN)
|
||||||
loadMG(activity, mUid, mRoomID, APP_CODE, mMGID, mLanguage)
|
loadMG(activity, mUid, mRoomID, APP_CODE, mMGID, mLanguage)
|
||||||
|
@@ -1,95 +0,0 @@
|
|||||||
package com.yizhuan.erban.home.adapter;
|
|
||||||
|
|
||||||
import android.content.Context;
|
|
||||||
import android.view.LayoutInflater;
|
|
||||||
import android.view.View;
|
|
||||||
import android.view.ViewGroup;
|
|
||||||
import android.widget.ImageView;
|
|
||||||
|
|
||||||
import com.netease.nim.uikit.support.glide.GlideApp;
|
|
||||||
import com.yizhuan.erban.R;
|
|
||||||
import com.yizhuan.erban.avroom.firstcharge.FirstChargeDialog;
|
|
||||||
import com.yizhuan.erban.shipantics.PullRadishActivity;
|
|
||||||
import com.yizhuan.erban.treasure_box.widget.GoldBoxHelper;
|
|
||||||
import com.yizhuan.erban.treasurefairy.HomeFairyActivity;
|
|
||||||
import com.yizhuan.erban.ui.utils.ImageLoadUtils;
|
|
||||||
import com.yizhuan.erban.ui.widget.rollviewpager.adapter.StaticPagerAdapter;
|
|
||||||
import com.yizhuan.erban.utils.CommonJumpHelper;
|
|
||||||
import com.yizhuan.xchat_android_core.home.bean.BannerInfo;
|
|
||||||
import com.yizhuan.xchat_android_core.room.model.AvRoomModel;
|
|
||||||
import com.yizhuan.xchat_android_library.utils.config.BasicConfig;
|
|
||||||
|
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
public class RoomActAdapter extends StaticPagerAdapter {
|
|
||||||
|
|
||||||
private Context mContext;
|
|
||||||
private List<BannerInfo> data;
|
|
||||||
private RoomActClickListener listener;
|
|
||||||
|
|
||||||
public RoomActAdapter(Context context, List<BannerInfo> data) {
|
|
||||||
this.data = data;
|
|
||||||
this.mContext = context;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public View getView(ViewGroup container, int position) {
|
|
||||||
View view = LayoutInflater.from(mContext).inflate(R.layout.item_room_act, container, false);
|
|
||||||
ImageView ivCover = view.findViewById(R.id.iv_cover);
|
|
||||||
BannerInfo bannerInfo = data.get(position);
|
|
||||||
String actId = String.valueOf(bannerInfo.getBannerId());
|
|
||||||
ivCover.setScaleType(ImageView.ScaleType.CENTER_CROP);
|
|
||||||
if (bannerInfo.isFairy()) {
|
|
||||||
ivCover.setImageResource(R.drawable.ic_fairy_entrance);
|
|
||||||
} else if (bannerInfo.isFirstCharge()) {
|
|
||||||
ivCover.setImageResource(R.drawable.ic_first_charge_enter);
|
|
||||||
} else if (bannerInfo.isBox()) {
|
|
||||||
GlideApp.with(BasicConfig.INSTANCE.getAppContext())
|
|
||||||
.load(GoldBoxHelper.getBoxIcon())
|
|
||||||
.error(R.drawable.icon_room_treasure_box)
|
|
||||||
.into(ivCover);
|
|
||||||
} else if (bannerInfo.isRadish()) {
|
|
||||||
ivCover.setImageResource(R.drawable.ic_radish_entrance);
|
|
||||||
} else {
|
|
||||||
ImageLoadUtils.loadImage(mContext, bannerInfo.getBannerPic(), ivCover, R.drawable.default_cover);
|
|
||||||
}
|
|
||||||
ivCover.setOnClickListener(v -> {
|
|
||||||
if (bannerInfo.isFairy()) {
|
|
||||||
HomeFairyActivity.start(mContext);
|
|
||||||
} else if (bannerInfo.isFirstCharge()) {
|
|
||||||
FirstChargeDialog.start(mContext);
|
|
||||||
} else if (bannerInfo.isBox()) {
|
|
||||||
GoldBoxHelper.handleBoxClick(mContext);
|
|
||||||
} else if (bannerInfo.isRadish()) {
|
|
||||||
PullRadishActivity.start(mContext);
|
|
||||||
} else {
|
|
||||||
AvRoomModel.get().activityClickLog("2", actId).subscribe();
|
|
||||||
if (bannerInfo.getSkipType() == 3 && bannerInfo.getShowType() != 1) {
|
|
||||||
if (listener != null) {
|
|
||||||
listener.onWebClick(bannerInfo.getSkipUri());
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
CommonJumpHelper.bannerJump(mContext, bannerInfo);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
});
|
|
||||||
return view;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public int getCount() {
|
|
||||||
if (data != null) {
|
|
||||||
return data.size();
|
|
||||||
} else {
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setRoomActClickListener(RoomActClickListener listener) {
|
|
||||||
this.listener = listener;
|
|
||||||
}
|
|
||||||
|
|
||||||
public interface RoomActClickListener {
|
|
||||||
void onWebClick(String url);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
@@ -0,0 +1,80 @@
|
|||||||
|
package com.yizhuan.erban.home.adapter
|
||||||
|
|
||||||
|
import android.content.Context
|
||||||
|
import android.view.LayoutInflater
|
||||||
|
import android.view.View
|
||||||
|
import android.view.ViewGroup
|
||||||
|
import android.widget.ImageView
|
||||||
|
import com.netease.nim.uikit.support.glide.GlideApp
|
||||||
|
import com.yizhuan.erban.R
|
||||||
|
import com.yizhuan.erban.avroom.firstcharge.FirstChargeDialog
|
||||||
|
import com.yizhuan.erban.shipantics.PullRadishActivity
|
||||||
|
import com.yizhuan.erban.treasure_box.widget.GoldBoxHelper
|
||||||
|
import com.yizhuan.erban.treasurefairy.HomeFairyActivity
|
||||||
|
import com.yizhuan.erban.ui.utils.ImageLoadUtils
|
||||||
|
import com.yizhuan.erban.ui.webview.room_banner.RoomBannerWebDialogActivity
|
||||||
|
import com.yizhuan.erban.ui.widget.rollviewpager.adapter.StaticPagerAdapter
|
||||||
|
import com.yizhuan.erban.utils.CommonJumpHelper
|
||||||
|
import com.yizhuan.xchat_android_core.home.bean.BannerInfo
|
||||||
|
import com.yizhuan.xchat_android_core.room.model.AvRoomModel
|
||||||
|
import com.yizhuan.xchat_android_library.utils.config.BasicConfig
|
||||||
|
import okhttp3.internal.filterList
|
||||||
|
|
||||||
|
class RoomActAdapter(private val mContext: Context, private val data: List<BannerInfo>) :
|
||||||
|
StaticPagerAdapter() {
|
||||||
|
override fun getView(container: ViewGroup, position: Int): View {
|
||||||
|
val view = LayoutInflater.from(mContext).inflate(R.layout.item_room_act, container, false)
|
||||||
|
val ivCover = view.findViewById<ImageView>(R.id.iv_cover)
|
||||||
|
val bannerInfo = data[position]
|
||||||
|
val actId = bannerInfo.bannerId.toString()
|
||||||
|
ivCover.scaleType = ImageView.ScaleType.CENTER_CROP
|
||||||
|
if (bannerInfo.isFairy) {
|
||||||
|
ivCover.setImageResource(R.drawable.ic_fairy_entrance)
|
||||||
|
} else if (bannerInfo.isFirstCharge) {
|
||||||
|
ivCover.setImageResource(R.drawable.ic_first_charge_enter)
|
||||||
|
} else if (bannerInfo.isBox) {
|
||||||
|
GlideApp.with(BasicConfig.INSTANCE.appContext)
|
||||||
|
.load(GoldBoxHelper.getBoxIcon())
|
||||||
|
.error(R.drawable.icon_room_treasure_box)
|
||||||
|
.into(ivCover)
|
||||||
|
} else if (bannerInfo.isRadish) {
|
||||||
|
ivCover.setImageResource(R.drawable.ic_radish_entrance)
|
||||||
|
} else {
|
||||||
|
ImageLoadUtils.loadImage(
|
||||||
|
mContext,
|
||||||
|
bannerInfo.bannerPic,
|
||||||
|
ivCover,
|
||||||
|
R.drawable.default_cover
|
||||||
|
)
|
||||||
|
}
|
||||||
|
ivCover.setOnClickListener { v: View? ->
|
||||||
|
if (bannerInfo.isFairy) {
|
||||||
|
HomeFairyActivity.start(mContext)
|
||||||
|
} else if (bannerInfo.isFirstCharge) {
|
||||||
|
FirstChargeDialog.start(mContext)
|
||||||
|
} else if (bannerInfo.isBox) {
|
||||||
|
GoldBoxHelper.handleBoxClick(mContext)
|
||||||
|
} else if (bannerInfo.isRadish) {
|
||||||
|
PullRadishActivity.start(mContext)
|
||||||
|
} else {
|
||||||
|
AvRoomModel.get().activityClickLog("2", actId).subscribe()
|
||||||
|
if (bannerInfo.skipType == 3) {
|
||||||
|
val list = data.filterList {
|
||||||
|
skipType == 3
|
||||||
|
}
|
||||||
|
val newPosition = list.indexOfFirst {
|
||||||
|
it == bannerInfo
|
||||||
|
}
|
||||||
|
RoomBannerWebDialogActivity.start(mContext, newPosition, list)
|
||||||
|
} else {
|
||||||
|
CommonJumpHelper.bannerJump(mContext, bannerInfo)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return view
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun getCount(): Int {
|
||||||
|
return data.size
|
||||||
|
}
|
||||||
|
}
|
@@ -218,7 +218,11 @@ class SettingActivity : BaseViewBindingActivity<ActivitySettingBinding>(), View.
|
|||||||
|
|
||||||
private fun debug() {
|
private fun debug() {
|
||||||
// RedPackageOpenDialog2().show(this)
|
// RedPackageOpenDialog2().show(this)
|
||||||
val json = "{\"first\":3,\"second\":32,\"data\":{\"recvUserUid\":2735,\"recvUserAvatar\":\"https://img.pekolive.com/default_avatar.png\",\"recvUserNick\":\"66丢丢丢丢丢多多多的hhhh\",\"sendUserNick\":\"11的ass\",\"sendUserAvatar\":\"http://beta.img.pekolive.com/Fk7aur-1RBqKXC-qqBwMTjivZ3lV?imageslim\",\"sendUserUid\":2737,\"giftUrl\":\"http://beta.img.pekolive.com/Fn6h_gPFD5MwA-Ql_kcWqNpKp0JM?imageslim\",\"giftName\":\"幽靈糖果\",\"giftId\":2075,\"giftNum\":${Random.nextInt(1,1000)},\"giftGolds\":33440,\"notifyStaySecond\":5,\"isHomeShow\":true,\"isSkipRoom\":true,\"isFullScreen\":false,\"isSendMsg\":false,\"roomUid\":2737,\"roomErbanNo\":11,\"roomTitle\":\"11的工会\",\"levelNum\":${Random.nextInt(1,4)}}}"
|
// val json = "{\"first\":3,\"second\":32,\"data\":{\"recvUserUid\":2735,\"recvUserAvatar\":\"https://img.pekolive.com/default_avatar.png\",\"recvUserNick\":\"66丢丢丢丢丢多多多的hhhh\",\"sendUserNick\":\"11的ass\",\"sendUserAvatar\":\"http://beta.img.pekolive.com/Fk7aur-1RBqKXC-qqBwMTjivZ3lV?imageslim\",\"sendUserUid\":2737,\"giftUrl\":\"http://beta.img.pekolive.com/Fn6h_gPFD5MwA-Ql_kcWqNpKp0JM?imageslim\",\"giftName\":\"幽靈糖果\",\"giftId\":2075,\"giftNum\":${Random.nextInt(1,1000)},\"giftGolds\":33440,\"notifyStaySecond\":5,\"isHomeShow\":true,\"isSkipRoom\":true,\"isFullScreen\":false,\"isSendMsg\":false,\"roomUid\":2737,\"roomErbanNo\":11,\"roomTitle\":\"11的工会\",\"levelNum\":${Random.nextInt(1,4)}}}"
|
||||||
onReceivedNimBroadcastMessage(json)
|
// onReceivedNimBroadcastMessage(json)
|
||||||
|
// val json = "{\"first\":85,\"second\":855,\"data\":{\"nick\":\"66丢丢丢丢丢多多多的hhhh\",\"preVipName\":\"子爵\",\"floatPic\":\"https://image.hfighting.com/Fq3JtbK2acO3FN-3vWZo8ldtHfse\",\"uid\":2735,\"currVipName\":\"侯爵\",\"erbanNo\":66,\"roomUid\":2734,\"avatar\":\"https://img.pekolive.com/default_avatar.png\",\"currVipLevel\":5}}"
|
||||||
|
// onReceivedNimBroadcastMessage(json)
|
||||||
|
// CommonWebViewActivity.start(this,"https://api.anan.chat/anan_vestBag/modules/rank/index.html#/rank")
|
||||||
|
// CommonWebViewActivity.start(this,"https://api.anan.chat/anan_vestBag/modules/myincome/index.html#/DiamondLog")
|
||||||
}
|
}
|
||||||
}
|
}
|
@@ -9,11 +9,11 @@ import android.content.ClipboardManager;
|
|||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.content.DialogInterface;
|
import android.content.DialogInterface;
|
||||||
import android.content.Intent;
|
import android.content.Intent;
|
||||||
|
import android.graphics.Bitmap;
|
||||||
import android.net.Uri;
|
import android.net.Uri;
|
||||||
import android.net.http.SslError;
|
import android.net.http.SslError;
|
||||||
import android.os.Build;
|
import android.os.Build;
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
import android.os.Handler;
|
|
||||||
import android.text.TextUtils;
|
import android.text.TextUtils;
|
||||||
import android.view.View;
|
import android.view.View;
|
||||||
import android.webkit.SslErrorHandler;
|
import android.webkit.SslErrorHandler;
|
||||||
@@ -59,7 +59,6 @@ import org.greenrobot.eventbus.EventBus;
|
|||||||
import org.greenrobot.eventbus.Subscribe;
|
import org.greenrobot.eventbus.Subscribe;
|
||||||
import org.greenrobot.eventbus.ThreadMode;
|
import org.greenrobot.eventbus.ThreadMode;
|
||||||
|
|
||||||
import java.lang.ref.WeakReference;
|
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
@@ -99,32 +98,6 @@ public class CommonWebViewActivity extends BaseActivity implements ShareDialog.O
|
|||||||
private static final String POSITION = "position";
|
private static final String POSITION = "position";
|
||||||
private int mPosition;
|
private int mPosition;
|
||||||
|
|
||||||
private int mProgress;
|
|
||||||
|
|
||||||
private Handler mHandler = new Handler();
|
|
||||||
|
|
||||||
private ProgressRunnable mProgressRunnable = new ProgressRunnable(this);
|
|
||||||
|
|
||||||
private static class ProgressRunnable implements Runnable {
|
|
||||||
private WeakReference<CommonWebViewActivity> mWeakReference;
|
|
||||||
|
|
||||||
ProgressRunnable(CommonWebViewActivity activity) {
|
|
||||||
mWeakReference = new WeakReference<>(activity);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void run() {
|
|
||||||
CommonWebViewActivity activity = mWeakReference.get();
|
|
||||||
if (activity == null) return;
|
|
||||||
if (activity.mProgress < 96) {
|
|
||||||
activity.mProgress += 3;
|
|
||||||
activity.mProgressBar.setProgress(activity.mProgress);
|
|
||||||
activity.mHandler.postDelayed(activity.mProgressRunnable, 10);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
public static void start(Context context, String url) {
|
public static void start(Context context, String url) {
|
||||||
Intent intent = new Intent(context, CommonWebViewActivity.class);
|
Intent intent = new Intent(context, CommonWebViewActivity.class);
|
||||||
intent.putExtra("url", url);
|
intent.putExtra("url", url);
|
||||||
@@ -222,7 +195,6 @@ public class CommonWebViewActivity extends BaseActivity implements ShareDialog.O
|
|||||||
|
|
||||||
@SuppressLint("SetJavaScriptEnabled")
|
@SuppressLint("SetJavaScriptEnabled")
|
||||||
private void initData() {
|
private void initData() {
|
||||||
mHandler.post(mProgressRunnable);
|
|
||||||
webView.getSettings().setJavaScriptEnabled(true);
|
webView.getSettings().setJavaScriptEnabled(true);
|
||||||
webView.getSettings().setUseWideViewPort(true);
|
webView.getSettings().setUseWideViewPort(true);
|
||||||
webView.getSettings().setLoadWithOverviewMode(true);
|
webView.getSettings().setLoadWithOverviewMode(true);
|
||||||
@@ -290,9 +262,20 @@ public class CommonWebViewActivity extends BaseActivity implements ShareDialog.O
|
|||||||
mProgressBar.setVisibility(View.GONE);
|
mProgressBar.setVisibility(View.GONE);
|
||||||
super.onPageFinished(view, url);
|
super.onPageFinished(view, url);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onPageStarted(WebView view, String url, Bitmap favicon) {
|
||||||
|
super.onPageStarted(view, url, favicon);
|
||||||
|
mProgressBar.setVisibility(View.VISIBLE);
|
||||||
|
}
|
||||||
});
|
});
|
||||||
//获取webviewtitle作为titlebar的title
|
//获取webviewtitle作为titlebar的title
|
||||||
wvcc = new WebChromeClient() {
|
wvcc = new WebChromeClient() {
|
||||||
|
@Override
|
||||||
|
public void onProgressChanged(WebView view, int newProgress) {
|
||||||
|
super.onProgressChanged(view, newProgress);
|
||||||
|
mProgressBar.setProgress(newProgress);
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onReceivedTitle(WebView view, String title) {
|
public void onReceivedTitle(WebView view, String title) {
|
||||||
@@ -520,11 +503,6 @@ public class CommonWebViewActivity extends BaseActivity implements ShareDialog.O
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void onDestroy() {
|
protected void onDestroy() {
|
||||||
if (mHandler != null) {
|
|
||||||
mHandler.removeCallbacks(mProgressRunnable);
|
|
||||||
mProgressRunnable = null;
|
|
||||||
mHandler = null;
|
|
||||||
}
|
|
||||||
EventBus.getDefault().unregister(this);
|
EventBus.getDefault().unregister(this);
|
||||||
|
|
||||||
if (webViewCallBack != null) {
|
if (webViewCallBack != null) {
|
||||||
|
@@ -3,8 +3,8 @@ package com.yizhuan.erban.ui.webview;
|
|||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.content.Intent;
|
import android.content.Intent;
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
import android.view.Gravity;
|
|
||||||
import android.view.View;
|
import android.view.View;
|
||||||
|
import android.view.ViewGroup;
|
||||||
import android.view.WindowManager;
|
import android.view.WindowManager;
|
||||||
|
|
||||||
import com.netease.nim.uikit.common.util.sys.ScreenUtil;
|
import com.netease.nim.uikit.common.util.sys.ScreenUtil;
|
||||||
@@ -28,8 +28,18 @@ public class DialogWebViewActivity extends CommonWebViewActivity {
|
|||||||
@Override
|
@Override
|
||||||
protected void onCreate(Bundle savedInstanceState) {
|
protected void onCreate(Bundle savedInstanceState) {
|
||||||
super.onCreate(savedInstanceState);
|
super.onCreate(savedInstanceState);
|
||||||
getWindow().setLayout(WindowManager.LayoutParams.MATCH_PARENT, ScreenUtil.screenHeight / 3 * 2);
|
getWindow().getDecorView().setSystemUiVisibility(
|
||||||
getWindow().setGravity(Gravity.BOTTOM);
|
View.SYSTEM_UI_FLAG_FULLSCREEN
|
||||||
|
| View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
|
||||||
|
| View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
|
||||||
|
| View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY
|
||||||
|
);
|
||||||
|
getWindow().setLayout(WindowManager.LayoutParams.MATCH_PARENT, WindowManager.LayoutParams.MATCH_PARENT);
|
||||||
|
View topView = findViewById(R.id.v_top);
|
||||||
|
topView.setOnClickListener(v -> finish());
|
||||||
|
ViewGroup.LayoutParams params = topView.getLayoutParams();
|
||||||
|
params.height = ScreenUtil.screenHeight / 3;
|
||||||
|
topView.setLayoutParams(params);
|
||||||
showTitleBar = getIntent().getBooleanExtra("showTitleBar", true);
|
showTitleBar = getIntent().getBooleanExtra("showTitleBar", true);
|
||||||
if (!showTitleBar) {
|
if (!showTitleBar) {
|
||||||
layoutTitleBar.setVisibility(View.GONE);
|
layoutTitleBar.setVisibility(View.GONE);
|
||||||
|
@@ -0,0 +1,47 @@
|
|||||||
|
package com.yizhuan.erban.ui.webview.room_banner
|
||||||
|
|
||||||
|
import android.view.View
|
||||||
|
import android.widget.ImageView
|
||||||
|
import androidx.core.view.isInvisible
|
||||||
|
import com.chad.library.adapter.base.BaseQuickAdapter
|
||||||
|
import com.chad.library.adapter.base.BaseViewHolder
|
||||||
|
import com.yizhuan.erban.R
|
||||||
|
import com.yizhuan.erban.ui.utils.load
|
||||||
|
import com.yizhuan.xchat_android_core.home.bean.BannerInfo
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Created by Max on 2023/11/17 12:30
|
||||||
|
* Desc:
|
||||||
|
**/
|
||||||
|
class RoomBannerTabAdapter :
|
||||||
|
BaseQuickAdapter<BannerInfo, BaseViewHolder>(R.layout.room_banner_item_tab) {
|
||||||
|
|
||||||
|
private var selectedPosition = -1
|
||||||
|
override fun convert(helper: BaseViewHolder, item: BannerInfo?) {
|
||||||
|
helper.getView<ImageView>(R.id.iv_content).load(item?.bannerUrl)
|
||||||
|
convertState(helper, item)
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun convertPayloads(
|
||||||
|
helper: BaseViewHolder,
|
||||||
|
item: BannerInfo?,
|
||||||
|
payloads: MutableList<Any>
|
||||||
|
) {
|
||||||
|
super.convertPayloads(helper, item, payloads)
|
||||||
|
convertState(helper, item)
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun convertState(helper: BaseViewHolder, item: BannerInfo?) {
|
||||||
|
helper.getView<View>(R.id.v_selector).isInvisible =
|
||||||
|
helper.absoluteAdapterPosition != selectedPosition
|
||||||
|
}
|
||||||
|
|
||||||
|
fun getSelectedPosition(): Int {
|
||||||
|
return selectedPosition
|
||||||
|
}
|
||||||
|
|
||||||
|
fun select(position: Int) {
|
||||||
|
this.selectedPosition = position
|
||||||
|
notifyItemRangeChanged(0, itemCount, true)
|
||||||
|
}
|
||||||
|
}
|
@@ -0,0 +1,91 @@
|
|||||||
|
package com.yizhuan.erban.ui.webview.room_banner
|
||||||
|
|
||||||
|
import android.content.Context
|
||||||
|
import android.content.Intent
|
||||||
|
import android.graphics.Color
|
||||||
|
import android.os.Bundle
|
||||||
|
import android.view.View
|
||||||
|
import android.view.WindowManager
|
||||||
|
import androidx.recyclerview.widget.RecyclerView
|
||||||
|
import com.chuhai.utils.UiUtils
|
||||||
|
import com.yizhuan.erban.R
|
||||||
|
import com.yizhuan.erban.ui.webview.CommonWebViewActivity
|
||||||
|
import com.yizhuan.xchat_android_core.home.bean.BannerInfo
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Created by Max on 2023/11/17 11:38
|
||||||
|
* Desc:房间内-Banner-WEB展示页面
|
||||||
|
**/
|
||||||
|
class RoomBannerWebDialogActivity : CommonWebViewActivity() {
|
||||||
|
|
||||||
|
private var recyclerView: RecyclerView? = null
|
||||||
|
private var adapter: RoomBannerTabAdapter? = null
|
||||||
|
|
||||||
|
companion object {
|
||||||
|
@JvmStatic
|
||||||
|
fun start(context: Context, position: Int, list: List<BannerInfo>) {
|
||||||
|
val newList = ArrayList<BannerInfo>()
|
||||||
|
newList.addAll(list)
|
||||||
|
val intent = Intent(context, RoomBannerWebDialogActivity::class.java)
|
||||||
|
intent.putExtra("position", position)
|
||||||
|
intent.putExtra("list", newList)
|
||||||
|
context.startActivity(intent)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun getLayoutId(): Int {
|
||||||
|
return R.layout.room_banner_dialog
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun onCreate(savedInstanceState: Bundle?) {
|
||||||
|
super.onCreate(savedInstanceState)
|
||||||
|
window.decorView.systemUiVisibility = (View.SYSTEM_UI_FLAG_FULLSCREEN
|
||||||
|
or View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
|
||||||
|
or View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
|
||||||
|
or View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY)
|
||||||
|
window.setLayout(
|
||||||
|
WindowManager.LayoutParams.MATCH_PARENT,
|
||||||
|
WindowManager.LayoutParams.MATCH_PARENT
|
||||||
|
)
|
||||||
|
val topView = findViewById<View>(R.id.v_top)
|
||||||
|
topView.setOnClickListener { v: View? -> finish() }
|
||||||
|
val params = topView.layoutParams
|
||||||
|
params.height = UiUtils.dip2px(168f)
|
||||||
|
topView.layoutParams = params
|
||||||
|
webView.setBackgroundColor(Color.parseColor("#C9CBD1"))
|
||||||
|
recyclerView = findViewById(R.id.recyclerView)
|
||||||
|
val position = 0.coerceAtLeast(intent.getIntExtra("position", 0))
|
||||||
|
val list = intent.getSerializableExtra("list") as? ArrayList<BannerInfo>
|
||||||
|
// if ((list?.size ?: 0) <= 1) {
|
||||||
|
// recyclerView?.isVisible = false
|
||||||
|
// }
|
||||||
|
adapter = RoomBannerTabAdapter().apply {
|
||||||
|
setOnItemClickListener { adapter, view, position ->
|
||||||
|
if (this@RoomBannerWebDialogActivity.adapter?.getSelectedPosition() == position) {
|
||||||
|
return@setOnItemClickListener
|
||||||
|
}
|
||||||
|
switchTab(position)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
recyclerView?.adapter = adapter
|
||||||
|
adapter?.setNewData(list)
|
||||||
|
switchTab(position)
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun switchTab(position: Int) {
|
||||||
|
val url = adapter?.getItem(position)?.skipUri
|
||||||
|
showWebView(url)
|
||||||
|
adapter?.select(position)
|
||||||
|
recyclerView?.post {
|
||||||
|
recyclerView?.scrollToPosition(position)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun showWebView(url: String?) {
|
||||||
|
if (url.isNullOrEmpty()) {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
super.showWebView(url)
|
||||||
|
}
|
||||||
|
}
|
@@ -16,6 +16,7 @@ import android.widget.FrameLayout;
|
|||||||
|
|
||||||
import androidx.annotation.NonNull;
|
import androidx.annotation.NonNull;
|
||||||
|
|
||||||
|
import com.chuhai.utils.ServiceTime;
|
||||||
import com.opensource.svgaplayer.SVGADrawable;
|
import com.opensource.svgaplayer.SVGADrawable;
|
||||||
import com.opensource.svgaplayer.SVGADynamicEntity;
|
import com.opensource.svgaplayer.SVGADynamicEntity;
|
||||||
import com.opensource.svgaplayer.SVGAImageView;
|
import com.opensource.svgaplayer.SVGAImageView;
|
||||||
@@ -41,6 +42,8 @@ public class AllServiceVipLevelUPDialog extends BaseDialog {
|
|||||||
|
|
||||||
private final VipMessageInfo vipMessageInfo;
|
private final VipMessageInfo vipMessageInfo;
|
||||||
private DialogVipAllServiceLevelUpBinding binding;
|
private DialogVipAllServiceLevelUpBinding binding;
|
||||||
|
private long startTime = 0;
|
||||||
|
private int frameCount = 0;
|
||||||
|
|
||||||
public AllServiceVipLevelUPDialog(Context context, @NonNull VipMessageInfo vipMessageInfo) {
|
public AllServiceVipLevelUPDialog(Context context, @NonNull VipMessageInfo vipMessageInfo) {
|
||||||
super(context, R.style.FullScreenDialog);
|
super(context, R.style.FullScreenDialog);
|
||||||
@@ -87,7 +90,19 @@ public class AllServiceVipLevelUPDialog extends BaseDialog {
|
|||||||
svgaImageView.setCallback(new SimpleSvgaCallback() {
|
svgaImageView.setCallback(new SimpleSvgaCallback() {
|
||||||
@Override
|
@Override
|
||||||
public void onFinished() {
|
public void onFinished() {
|
||||||
|
long offset = ServiceTime.INSTANCE.getTime() - startTime;
|
||||||
|
if (offset < 6000) {
|
||||||
|
int centerFrame = frameCount / 2;
|
||||||
|
if (centerFrame > 0) {
|
||||||
|
// 目前的SVGA资源最后一帧是半透明的,这里强制跳到中间帧,最大程度避免这种情况
|
||||||
|
svgaImageView.stepToFrame(centerFrame, false);
|
||||||
|
}
|
||||||
|
svgaImageView.postDelayed(() -> {
|
||||||
closeSelf();
|
closeSelf();
|
||||||
|
}, 6000 - offset);
|
||||||
|
} else {
|
||||||
|
closeSelf();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
binding.flSvgaVipNotify.addView(svgaImageView);
|
binding.flSvgaVipNotify.addView(svgaImageView);
|
||||||
@@ -95,6 +110,8 @@ public class AllServiceVipLevelUPDialog extends BaseDialog {
|
|||||||
SVGAParser.Companion.shareParser().decodeFromURL(new URL(vipMessageInfo.getFloatPic()), new SVGAParser.ParseCompletion() {
|
SVGAParser.Companion.shareParser().decodeFromURL(new URL(vipMessageInfo.getFloatPic()), new SVGAParser.ParseCompletion() {
|
||||||
@Override
|
@Override
|
||||||
public void onComplete(@NonNull SVGAVideoEntity svgaVideoEntity) {
|
public void onComplete(@NonNull SVGAVideoEntity svgaVideoEntity) {
|
||||||
|
frameCount = svgaVideoEntity.getFrames();
|
||||||
|
startTime = ServiceTime.INSTANCE.getTime();
|
||||||
SVGADynamicEntity dynamicEntity = new SVGADynamicEntity();
|
SVGADynamicEntity dynamicEntity = new SVGADynamicEntity();
|
||||||
TextPaint textPaint = new TextPaint();
|
TextPaint textPaint = new TextPaint();
|
||||||
textPaint.setColor(Color.WHITE);//字体颜色
|
textPaint.setColor(Color.WHITE);//字体颜色
|
||||||
|
@@ -2,9 +2,9 @@
|
|||||||
<shape xmlns:android="http://schemas.android.com/apk/res/android"
|
<shape xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
android:shape="rectangle">
|
android:shape="rectangle">
|
||||||
|
|
||||||
<solid android:color="#FF87152D" />
|
<solid android:color="#FF49157D" />
|
||||||
<stroke
|
<stroke
|
||||||
android:width="1dp"
|
android:width="1dp"
|
||||||
android:color="#FFFFED77" />
|
android:color="#FFFE9FFF" />
|
||||||
<corners android:radius="8.5dp" />
|
<corners android:radius="8.5dp" />
|
||||||
</shape>
|
</shape>
|
@@ -2,9 +2,9 @@
|
|||||||
<shape xmlns:android="http://schemas.android.com/apk/res/android"
|
<shape xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
android:shape="rectangle">
|
android:shape="rectangle">
|
||||||
|
|
||||||
<solid android:color="#FF49157D" />
|
<solid android:color="#87152D" />
|
||||||
<stroke
|
<stroke
|
||||||
android:width="1dp"
|
android:width="1dp"
|
||||||
android:color="#FFFE9FFF" />
|
android:color="#FFED77" />
|
||||||
<corners android:radius="8.5dp" />
|
<corners android:radius="8.5dp" />
|
||||||
</shape>
|
</shape>
|
17
app/src/main/res/drawable/progress_drawable_room_banner.xml
Normal file
17
app/src/main/res/drawable/progress_drawable_room_banner.xml
Normal file
@@ -0,0 +1,17 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
|
||||||
|
|
||||||
|
<item
|
||||||
|
android:id="@android:id/background"
|
||||||
|
android:drawable="@color/transparent" />
|
||||||
|
|
||||||
|
<item android:id="@android:id/progress">
|
||||||
|
<scale android:scaleWidth="100%">
|
||||||
|
<shape>
|
||||||
|
<corners android:radius="2dp" />
|
||||||
|
<solid android:color="@color/white" />
|
||||||
|
</shape>
|
||||||
|
</scale>
|
||||||
|
</item>
|
||||||
|
|
||||||
|
</layer-list>
|
6
app/src/main/res/drawable/shape_9168fa_4.xml
Normal file
6
app/src/main/res/drawable/shape_9168fa_4.xml
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<shape xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
android:shape="rectangle">
|
||||||
|
<solid android:color="#9168fa" />
|
||||||
|
<corners android:radius="4dp" />
|
||||||
|
</shape>
|
@@ -1,9 +1,20 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<androidx.cardview.widget.CardView xmlns:android="http://schemas.android.com/apk/res/android"
|
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
xmlns:app="http://schemas.android.com/apk/res-auto"
|
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||||
xmlns:tools="http://schemas.android.com/tools"
|
xmlns:tools="http://schemas.android.com/tools"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="match_parent"
|
android:layout_height="match_parent"
|
||||||
|
android:orientation="vertical">
|
||||||
|
|
||||||
|
<View
|
||||||
|
android:id="@+id/v_top"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="0dp" />
|
||||||
|
|
||||||
|
<androidx.cardview.widget.CardView
|
||||||
|
android:id="@+id/layout_root"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="match_parent"
|
||||||
app:cardBackgroundColor="@color/white"
|
app:cardBackgroundColor="@color/white"
|
||||||
app:cardCornerRadius="10dp"
|
app:cardCornerRadius="10dp"
|
||||||
app:cardElevation="0dp">
|
app:cardElevation="0dp">
|
||||||
@@ -93,3 +104,4 @@
|
|||||||
|
|
||||||
</LinearLayout>
|
</LinearLayout>
|
||||||
</androidx.cardview.widget.CardView>
|
</androidx.cardview.widget.CardView>
|
||||||
|
</LinearLayout>
|
@@ -7,8 +7,8 @@
|
|||||||
android:orientation="horizontal">
|
android:orientation="horizontal">
|
||||||
<TextView
|
<TextView
|
||||||
android:id="@+id/btn_cancel"
|
android:id="@+id/btn_cancel"
|
||||||
android:layout_width="110dp"
|
android:layout_width="105dp"
|
||||||
android:layout_height="@dimen/dp_38"
|
android:layout_height="35dp"
|
||||||
android:gravity="center"
|
android:gravity="center"
|
||||||
android:text="@string/cancel"
|
android:text="@string/cancel"
|
||||||
android:textColor="@color/color_B3B3C3"
|
android:textColor="@color/color_B3B3C3"
|
||||||
|
118
app/src/main/res/layout/room_banner_dialog.xml
Normal file
118
app/src/main/res/layout/room_banner_dialog.xml
Normal file
@@ -0,0 +1,118 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||||
|
xmlns:tools="http://schemas.android.com/tools"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="match_parent"
|
||||||
|
android:orientation="vertical">
|
||||||
|
|
||||||
|
<View
|
||||||
|
android:id="@+id/v_top"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="0dp" />
|
||||||
|
|
||||||
|
<androidx.cardview.widget.CardView
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="match_parent"
|
||||||
|
app:cardBackgroundColor="@color/color_262629"
|
||||||
|
app:cardCornerRadius="8dp"
|
||||||
|
app:cardElevation="0dp">
|
||||||
|
|
||||||
|
<LinearLayout
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="match_parent"
|
||||||
|
android:orientation="vertical">
|
||||||
|
|
||||||
|
<FrameLayout
|
||||||
|
android:id="@+id/layout_title_bar"
|
||||||
|
android:layout_width="0dp"
|
||||||
|
android:layout_height="0dp"
|
||||||
|
android:visibility="gone">
|
||||||
|
|
||||||
|
<LinearLayout
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="match_parent"
|
||||||
|
android:gravity="center_vertical"
|
||||||
|
android:orientation="horizontal">
|
||||||
|
|
||||||
|
<ImageView
|
||||||
|
android:id="@+id/iv_back"
|
||||||
|
android:layout_width="45dp"
|
||||||
|
android:layout_height="45dp"
|
||||||
|
android:scaleType="center"
|
||||||
|
android:src="@drawable/arrow_left" />
|
||||||
|
|
||||||
|
<ImageView
|
||||||
|
android:id="@+id/iv_close"
|
||||||
|
android:layout_width="45dp"
|
||||||
|
android:layout_height="45dp"
|
||||||
|
android:layout_gravity="center_vertical|start"
|
||||||
|
android:scaleType="center"
|
||||||
|
android:src="@drawable/ic_close_black" />
|
||||||
|
|
||||||
|
</LinearLayout>
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:id="@+id/tv_title"
|
||||||
|
android:layout_width="200dp"
|
||||||
|
android:layout_height="match_parent"
|
||||||
|
android:layout_gravity="center"
|
||||||
|
android:gravity="center"
|
||||||
|
android:textColor="@color/text_title_color"
|
||||||
|
android:textSize="18sp" />
|
||||||
|
|
||||||
|
<ImageView
|
||||||
|
android:id="@+id/img_share"
|
||||||
|
android:layout_width="22dp"
|
||||||
|
android:layout_height="22dp"
|
||||||
|
android:layout_gravity="center_vertical|end"
|
||||||
|
android:layout_marginEnd="15dp"
|
||||||
|
android:src="@drawable/ic_share_white"
|
||||||
|
android:visibility="gone" />
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:id="@+id/tv_title_right"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_gravity="center_vertical|end"
|
||||||
|
android:layout_marginEnd="15dp"
|
||||||
|
android:textColor="@color/text_normal_c6c6e9"
|
||||||
|
android:textSize="14sp"
|
||||||
|
android:visibility="gone"
|
||||||
|
tools:text="@string/layout_activity_dialog_web_view_01" />
|
||||||
|
</FrameLayout>
|
||||||
|
|
||||||
|
<androidx.recyclerview.widget.RecyclerView
|
||||||
|
android:id="@+id/recyclerView"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="@dimen/dp_60"
|
||||||
|
android:orientation="horizontal"
|
||||||
|
android:paddingHorizontal="8dp"
|
||||||
|
android:paddingTop="@dimen/dp_2"
|
||||||
|
app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager" />
|
||||||
|
|
||||||
|
|
||||||
|
<androidx.cardview.widget.CardView
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="match_parent"
|
||||||
|
app:cardCornerRadius="8dp"
|
||||||
|
app:cardElevation="0dp">
|
||||||
|
|
||||||
|
<WebView
|
||||||
|
android:id="@+id/webview"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="match_parent" />
|
||||||
|
|
||||||
|
<ProgressBar
|
||||||
|
android:id="@+id/progress_bar"
|
||||||
|
style="@style/Widget.AppCompat.ProgressBar.Horizontal"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="4dp"
|
||||||
|
android:max="100"
|
||||||
|
android:progress="0"
|
||||||
|
android:progressDrawable="@drawable/progress_drawable_room_banner" />
|
||||||
|
</androidx.cardview.widget.CardView>
|
||||||
|
|
||||||
|
</LinearLayout>
|
||||||
|
</androidx.cardview.widget.CardView>
|
||||||
|
</LinearLayout>
|
25
app/src/main/res/layout/room_banner_item_tab.xml
Normal file
25
app/src/main/res/layout/room_banner_item_tab.xml
Normal file
@@ -0,0 +1,25 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||||
|
xmlns:tools="http://schemas.android.com/tools"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="match_parent"
|
||||||
|
android:layout_marginEnd="5dp">
|
||||||
|
|
||||||
|
<View
|
||||||
|
android:id="@+id/v_selector"
|
||||||
|
android:layout_width="@dimen/dp_93"
|
||||||
|
android:layout_height="@dimen/dp_45"
|
||||||
|
android:layout_gravity="center"
|
||||||
|
android:background="@drawable/shape_9168fa_4" />
|
||||||
|
|
||||||
|
<com.makeramen.roundedimageview.RoundedImageView
|
||||||
|
android:id="@+id/iv_content"
|
||||||
|
android:layout_width="@dimen/dp_90"
|
||||||
|
android:layout_height="@dimen/dp_42"
|
||||||
|
android:layout_gravity="center"
|
||||||
|
android:scaleType="centerCrop"
|
||||||
|
app:riv_corner_radius="4dp"
|
||||||
|
tools:src="@drawable/default_cover" />
|
||||||
|
|
||||||
|
</FrameLayout>
|
@@ -711,5 +711,6 @@
|
|||||||
<color name="color_FFF87A">#FFFFF87A</color>
|
<color name="color_FFF87A">#FFFFF87A</color>
|
||||||
<color name="color_ffffff_30">#4CFFFFFF</color>
|
<color name="color_ffffff_30">#4CFFFFFF</color>
|
||||||
<color name="color_FFE468">#FFFFE468</color>
|
<color name="color_FFE468">#FFFFE468</color>
|
||||||
|
<color name="color_C9CBD1">#C9CBD1</color>
|
||||||
|
|
||||||
</resources>
|
</resources>
|
||||||
|
@@ -16,6 +16,7 @@ import com.chad.library.adapter.base.BaseQuickAdapter
|
|||||||
import com.yizhuan.erban.R
|
import com.yizhuan.erban.R
|
||||||
import com.yizhuan.erban.base.BaseViewBindingFragment
|
import com.yizhuan.erban.base.BaseViewBindingFragment
|
||||||
import com.yizhuan.erban.common.EmptyViewHelper
|
import com.yizhuan.erban.common.EmptyViewHelper
|
||||||
|
import com.yizhuan.erban.common.widget.dialog.DialogManager
|
||||||
import com.yizhuan.erban.databinding.FragmentAssociationRoomBinding
|
import com.yizhuan.erban.databinding.FragmentAssociationRoomBinding
|
||||||
import com.yizhuan.erban.module_hall.hall.activity.ModuleHallActivity
|
import com.yizhuan.erban.module_hall.hall.activity.ModuleHallActivity
|
||||||
import com.yizhuan.erban.module_hall.hall.adapter.AssociationRoomAdapter
|
import com.yizhuan.erban.module_hall.hall.adapter.AssociationRoomAdapter
|
||||||
@@ -51,7 +52,7 @@ class AssociationRoomFragment : BaseViewBindingFragment<FragmentAssociationRoomB
|
|||||||
if (!TextUtils.isEmpty(binding.etSearch.text.toString())) {
|
if (!TextUtils.isEmpty(binding.etSearch.text.toString())) {
|
||||||
val hallList = list
|
val hallList = list
|
||||||
val list = hallList.filter {
|
val list = hallList.filter {
|
||||||
it.hallName.contains(binding.etSearch.text.toString()) || it.hallId.toString()
|
it.hallName.contains(binding.etSearch.text.toString()) || it.ownerErbanNo.toString()
|
||||||
.contains(binding.etSearch.text.toString())
|
.contains(binding.etSearch.text.toString())
|
||||||
}
|
}
|
||||||
if (list.isEmpty()) {
|
if (list.isEmpty()) {
|
||||||
@@ -124,25 +125,19 @@ class AssociationRoomFragment : BaseViewBindingFragment<FragmentAssociationRoomB
|
|||||||
}
|
}
|
||||||
if (it.hallBtnStatus == 3) {
|
if (it.hallBtnStatus == 3) {
|
||||||
NimP2PMessageActivity.startRecord(
|
NimP2PMessageActivity.startRecord(
|
||||||
mContext, bean.hallMessageUid.toString(),
|
mContext, it.hallMessageUid.toString(),
|
||||||
bean.hallRecordId.toString()
|
it.hallRecordId.toString()
|
||||||
)
|
)
|
||||||
return@let
|
return@let
|
||||||
}
|
}
|
||||||
dialogManager.showProgressDialog(context)
|
dialogManager.showOkCancelWithTitleDialog(ResUtil.getString(R.string.join_organization_tips),
|
||||||
HallModel.get().applyJoinHall(it.hallId)
|
it.hallName ?: "",
|
||||||
.compose(RxHelper.bindFragment(this))
|
ResUtil.getString(R.string.join_organization_ok),
|
||||||
.subscribe(object : BeanObserver<String?>() {
|
ResUtil.getString(R.string.join_organization_no),
|
||||||
override fun onErrorMsg(error: String) {
|
object : DialogManager.OkCancelDialogListener {
|
||||||
dialogManager.dismissDialog()
|
override fun onCancel() {}
|
||||||
toast(error)
|
override fun onOk() {
|
||||||
}
|
applyJoin(it, position)
|
||||||
|
|
||||||
override fun onSuccess(s: String) {
|
|
||||||
dialogManager.dismissDialog()
|
|
||||||
it.hallBtnStatus = 2
|
|
||||||
associationRoomAdapter?.notifyItemChanged(position)
|
|
||||||
toast(getString(R.string.apply_success_wait_to_join_room))
|
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
@@ -167,6 +162,25 @@ class AssociationRoomFragment : BaseViewBindingFragment<FragmentAssociationRoomB
|
|||||||
associationViewModel.getHallList()
|
associationViewModel.getHallList()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private fun applyJoin(item: HallListInfo, position: Int) {
|
||||||
|
dialogManager.showProgressDialog(context)
|
||||||
|
HallModel.get().applyJoinHall(item.hallId)
|
||||||
|
.compose(RxHelper.bindFragment(this))
|
||||||
|
.subscribe(object : BeanObserver<String?>() {
|
||||||
|
override fun onErrorMsg(error: String) {
|
||||||
|
dialogManager.dismissDialog()
|
||||||
|
toast(error)
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun onSuccess(s: String) {
|
||||||
|
dialogManager.dismissDialog()
|
||||||
|
item.hallBtnStatus = 2
|
||||||
|
associationRoomAdapter?.notifyItemChanged(position)
|
||||||
|
toast(getString(R.string.apply_success_wait_to_join_room))
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
private fun hideSoftInput() {
|
private fun hideSoftInput() {
|
||||||
val imm = context?.getSystemService(Context.INPUT_METHOD_SERVICE) as InputMethodManager
|
val imm = context?.getSystemService(Context.INPUT_METHOD_SERVICE) as InputMethodManager
|
||||||
imm.hideSoftInputFromWindow(
|
imm.hideSoftInputFromWindow(
|
||||||
|
@@ -27,4 +27,7 @@
|
|||||||
<string name="lu_hteam_has_mute_num">已禁言人數 : %d人</string>
|
<string name="lu_hteam_has_mute_num">已禁言人數 : %d人</string>
|
||||||
<string name="lu_hteam_manager_num">群管理人數 : %d人</string>
|
<string name="lu_hteam_manager_num">群管理人數 : %d人</string>
|
||||||
|
|
||||||
|
<string name="join_organization_tips">確認加入公會</string>
|
||||||
|
<string name="join_organization_ok">是</string>
|
||||||
|
<string name="join_organization_no">否</string>
|
||||||
</resources>
|
</resources>
|
@@ -7,4 +7,5 @@
|
|||||||
<color name="color_FF9C7E">#FF9C7E</color>
|
<color name="color_FF9C7E">#FF9C7E</color>
|
||||||
<color name="color_FE6974">#FE6974</color>
|
<color name="color_FE6974">#FE6974</color>
|
||||||
<color name="color_45C21A">#45C21A</color>
|
<color name="color_45C21A">#45C21A</color>
|
||||||
|
<color name="color_262629">#262629</color>
|
||||||
</resources>
|
</resources>
|
@@ -103,11 +103,9 @@ public class GoldBoxHelper {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public static boolean isShowFairy() {
|
public static boolean isShowFairy() {
|
||||||
UserInfo userInfo = UserModel.get().getCacheLoginUserInfo();
|
|
||||||
FairyOpenInfo fairyOpenInfo = InitialModel.get().getFairyOpenInfo();
|
FairyOpenInfo fairyOpenInfo = InitialModel.get().getFairyOpenInfo();
|
||||||
if (fairyOpenInfo == null || userInfo == null) return false;
|
if (fairyOpenInfo == null) return false;
|
||||||
|
return fairyOpenInfo.isOpen();
|
||||||
return fairyOpenInfo.isOpen() && userInfo.getUserLevelVo().getExperLevelSeq() >= fairyOpenInfo.getLevelLimit();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@@ -61,6 +61,7 @@ public class BannerInfo implements Parcelable, Serializable {
|
|||||||
private boolean isRadish;
|
private boolean isRadish;
|
||||||
private boolean isFairy;
|
private boolean isFairy;
|
||||||
|
|
||||||
|
private String bannerUrl;
|
||||||
public BannerInfo(){
|
public BannerInfo(){
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -71,6 +72,7 @@ public class BannerInfo implements Parcelable, Serializable {
|
|||||||
bannerPic = in.readString();
|
bannerPic = in.readString();
|
||||||
skipType = in.readInt();
|
skipType = in.readInt();
|
||||||
skipUri = in.readString();
|
skipUri = in.readString();
|
||||||
|
bannerUrl = in.readString();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -80,6 +82,7 @@ public class BannerInfo implements Parcelable, Serializable {
|
|||||||
dest.writeString(bannerPic);
|
dest.writeString(bannerPic);
|
||||||
dest.writeInt(skipType);
|
dest.writeInt(skipType);
|
||||||
dest.writeString(skipUri);
|
dest.writeString(skipUri);
|
||||||
|
dest.writeString(bannerUrl);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@@ -219,20 +219,9 @@ public class AuthModel extends BaseModel implements IAuthModel {
|
|||||||
if (currentAccountInfo == null || TextUtils.isEmpty(currentAccountInfo.getAccess_token())) {
|
if (currentAccountInfo == null || TextUtils.isEmpty(currentAccountInfo.getAccess_token())) {
|
||||||
return Single.error(new Throwable(""));//没有账号信息
|
return Single.error(new Throwable(""));//没有账号信息
|
||||||
}
|
}
|
||||||
return requestTicket().flatMap(ticketResult -> {
|
return imLogin(currentAccountInfo)
|
||||||
if (!ticketResult.isSuccess()) {
|
|
||||||
return Single.error(new Throwable(ticketResult.getMessage()));
|
|
||||||
}
|
|
||||||
ticketInfo = ticketResult.getData();
|
|
||||||
DemoCache.saveTicketInfo(ticketInfo);
|
|
||||||
return Single.just(ResUtil.getString(R.string.xchat_android_core_auth_authmodel_01));
|
|
||||||
})
|
|
||||||
.subscribeOn(Schedulers.io())
|
.subscribeOn(Schedulers.io())
|
||||||
.observeOn(AndroidSchedulers.mainThread())
|
.observeOn(AndroidSchedulers.mainThread())
|
||||||
.flatMap((Function<String, SingleSource<String>>) s -> {
|
|
||||||
Log.i("IMLogin", "apply");
|
|
||||||
return imLogin(currentAccountInfo);
|
|
||||||
})
|
|
||||||
.doOnSuccess(s -> {
|
.doOnSuccess(s -> {
|
||||||
EventBus.getDefault().post(new LoginEvent());
|
EventBus.getDefault().post(new LoginEvent());
|
||||||
});
|
});
|
||||||
@@ -781,7 +770,7 @@ public class AuthModel extends BaseModel implements IAuthModel {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
private void cleanLogInfo() {
|
public void cleanLogInfo() {
|
||||||
reset();//这里先重置状态,后调用IM登出,因为这里观察了IM的在线状态
|
reset();//这里先重置状态,后调用IM登出,因为这里观察了IM的在线状态
|
||||||
NIMClient.getService(AuthService.class).logout();
|
NIMClient.getService(AuthService.class).logout();
|
||||||
EventBus.getDefault().post(new LogoutEvent());
|
EventBus.getDefault().post(new LogoutEvent());
|
||||||
|
@@ -78,4 +78,5 @@ public interface IInitialModel extends IModel {
|
|||||||
@Nullable
|
@Nullable
|
||||||
FairyOpenInfo getFairyOpenInfo();
|
FairyOpenInfo getFairyOpenInfo();
|
||||||
|
|
||||||
|
void regionCheck();
|
||||||
}
|
}
|
||||||
|
@@ -1,5 +1,6 @@
|
|||||||
package com.yizhuan.xchat_android_core.initial;
|
package com.yizhuan.xchat_android_core.initial;
|
||||||
|
|
||||||
|
|
||||||
import android.annotation.SuppressLint;
|
import android.annotation.SuppressLint;
|
||||||
import android.content.BroadcastReceiver;
|
import android.content.BroadcastReceiver;
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
@@ -14,6 +15,8 @@ import androidx.lifecycle.MutableLiveData;
|
|||||||
|
|
||||||
import com.bumptech.glide.request.FutureTarget;
|
import com.bumptech.glide.request.FutureTarget;
|
||||||
import com.bumptech.glide.request.target.Target;
|
import com.bumptech.glide.request.target.Target;
|
||||||
|
import com.chuhai.utils.LanguageUtils;
|
||||||
|
import com.chuhai.utils.TelephonyUtils;
|
||||||
import com.netease.nim.uikit.support.glide.GlideApp;
|
import com.netease.nim.uikit.support.glide.GlideApp;
|
||||||
import com.yizhuan.xchat_android_core.R;
|
import com.yizhuan.xchat_android_core.R;
|
||||||
import com.yizhuan.xchat_android_core.DemoCache;
|
import com.yizhuan.xchat_android_core.DemoCache;
|
||||||
@@ -30,6 +33,8 @@ import com.yizhuan.xchat_android_core.manager.AvRoomDataManager;
|
|||||||
import com.yizhuan.xchat_android_core.noble.NobleDataManager;
|
import com.yizhuan.xchat_android_core.noble.NobleDataManager;
|
||||||
import com.yizhuan.xchat_android_core.public_chat_hall.manager.PublicChatHallDataManager;
|
import com.yizhuan.xchat_android_core.public_chat_hall.manager.PublicChatHallDataManager;
|
||||||
import com.yizhuan.xchat_android_core.room.face.DynamicFaceModel;
|
import com.yizhuan.xchat_android_core.room.face.DynamicFaceModel;
|
||||||
|
import com.yizhuan.xchat_android_core.user.UserModel;
|
||||||
|
import com.yizhuan.xchat_android_core.user.bean.UserInfo;
|
||||||
import com.yizhuan.xchat_android_core.user.event.LoadLoginUserInfoEvent;
|
import com.yizhuan.xchat_android_core.user.event.LoadLoginUserInfoEvent;
|
||||||
import com.yizhuan.xchat_android_core.utils.CurrentTimeUtils;
|
import com.yizhuan.xchat_android_core.utils.CurrentTimeUtils;
|
||||||
import com.yizhuan.xchat_android_core.utils.SharedPreferenceUtils;
|
import com.yizhuan.xchat_android_core.utils.SharedPreferenceUtils;
|
||||||
@@ -49,11 +54,14 @@ import java.io.File;
|
|||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.concurrent.TimeUnit;
|
||||||
|
|
||||||
|
import io.reactivex.Observable;
|
||||||
import io.reactivex.Single;
|
import io.reactivex.Single;
|
||||||
import io.reactivex.SingleOnSubscribe;
|
import io.reactivex.SingleOnSubscribe;
|
||||||
import io.reactivex.SingleSource;
|
import io.reactivex.SingleSource;
|
||||||
import io.reactivex.android.schedulers.AndroidSchedulers;
|
import io.reactivex.android.schedulers.AndroidSchedulers;
|
||||||
|
import io.reactivex.disposables.Disposable;
|
||||||
import io.reactivex.functions.Action;
|
import io.reactivex.functions.Action;
|
||||||
import io.reactivex.functions.Consumer;
|
import io.reactivex.functions.Consumer;
|
||||||
import io.reactivex.functions.Function;
|
import io.reactivex.functions.Function;
|
||||||
@@ -131,6 +139,8 @@ public class InitialModel extends BaseModel implements IInitialModel {
|
|||||||
@Nullable
|
@Nullable
|
||||||
private InitInfo cacheInitInfo;
|
private InitInfo cacheInitInfo;
|
||||||
|
|
||||||
|
private Disposable regionCheckTimer;
|
||||||
|
|
||||||
private InitialModel() {
|
private InitialModel() {
|
||||||
api = RxNet.create(Api.class);
|
api = RxNet.create(Api.class);
|
||||||
loadMainTabInfoList();
|
loadMainTabInfoList();
|
||||||
@@ -514,6 +524,38 @@ public class InitialModel extends BaseModel implements IInitialModel {
|
|||||||
.observeOn(AndroidSchedulers.mainThread());
|
.observeOn(AndroidSchedulers.mainThread());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 地区检测
|
||||||
|
*/
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void regionCheck() {
|
||||||
|
UserInfo userInfo = UserModel.get().getCacheLoginUserInfo();
|
||||||
|
if (userInfo == null) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (TextUtils.isEmpty(userInfo.getNick()) || TextUtils.isEmpty(userInfo.getAvatar())) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
String operatorCode;
|
||||||
|
if (TelephonyUtils.INSTANCE.isChinaOperator()) {
|
||||||
|
operatorCode = "460";
|
||||||
|
} else {
|
||||||
|
operatorCode = TelephonyUtils.INSTANCE.getOperatorFirstSim();
|
||||||
|
}
|
||||||
|
api.regionCheck(LanguageUtils.INSTANCE.getSystemLanguage().toLanguageTag(), operatorCode)
|
||||||
|
.compose(RxHelper.handleSchedulers())
|
||||||
|
.doOnSuccess(longServiceResult -> {
|
||||||
|
if (regionCheckTimer != null && !regionCheckTimer.isDisposed()) {
|
||||||
|
regionCheckTimer.dispose();
|
||||||
|
}
|
||||||
|
if (longServiceResult.isSuccess() && longServiceResult.getData() != null && longServiceResult.getData() > 0) {
|
||||||
|
regionCheckTimer = Observable.timer(Math.max(longServiceResult.getData(), 30 * 1000), TimeUnit.MILLISECONDS).subscribe(aLong -> {
|
||||||
|
regionCheck();
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}).subscribe();
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public int getTeenagerMode() {
|
public int getTeenagerMode() {
|
||||||
@@ -591,5 +633,16 @@ public class InitialModel extends BaseModel implements IInitialModel {
|
|||||||
@GET("act/seize-treasure/status")
|
@GET("act/seize-treasure/status")
|
||||||
Single<ServiceResult<FairyOpenInfo>> getFairyOpenInfo();
|
Single<ServiceResult<FairyOpenInfo>> getFairyOpenInfo();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 地区检测
|
||||||
|
*
|
||||||
|
* @param lang 语言
|
||||||
|
* @param mcc 运营商码
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
@POST("/ipRegion/check")
|
||||||
|
@FormUrlEncoded
|
||||||
|
Single<ServiceResult<Long>> regionCheck(@Field("lang") String lang, @Field("mcc") String mcc);
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -5,6 +5,7 @@ import android.text.TextUtils;
|
|||||||
|
|
||||||
import androidx.annotation.NonNull;
|
import androidx.annotation.NonNull;
|
||||||
|
|
||||||
|
import com.chuhai.utils.TelephonyUtils;
|
||||||
import com.yizhuan.xchat_android_core.auth.AuthModel;
|
import com.yizhuan.xchat_android_core.auth.AuthModel;
|
||||||
import com.yizhuan.xchat_android_core.utils.APIEncryptUtil;
|
import com.yizhuan.xchat_android_core.utils.APIEncryptUtil;
|
||||||
import com.yizhuan.xchat_android_core.utils.OaidUtil;
|
import com.yizhuan.xchat_android_core.utils.OaidUtil;
|
||||||
@@ -34,6 +35,12 @@ public class ParamsInterceptor implements Interceptor {
|
|||||||
|
|
||||||
private Map<String, String> mHttpParams;
|
private Map<String, String> mHttpParams;
|
||||||
|
|
||||||
|
// 运营商码
|
||||||
|
private String operatorCode;
|
||||||
|
|
||||||
|
// 运营商码的获取时间
|
||||||
|
private long operatorCodeTime;
|
||||||
|
|
||||||
public ParamsInterceptor(Map<String, String> params) {
|
public ParamsInterceptor(Map<String, String> params) {
|
||||||
this.mHttpParams = params;
|
this.mHttpParams = params;
|
||||||
}
|
}
|
||||||
@@ -124,9 +131,8 @@ public class ParamsInterceptor implements Interceptor {
|
|||||||
// Log.e("ParamsInterceptor", " url: " + oldRequest.url()+ " final params Map : " + paramsMap.toString());
|
// Log.e("ParamsInterceptor", " url: " + oldRequest.url()+ " final params Map : " + paramsMap.toString());
|
||||||
// Log.e("ParamsInterceptor", "timestamp:"+timestamp + " url: " + oldRequest.url()+ " sign : " + signStr);
|
// Log.e("ParamsInterceptor", "timestamp:"+timestamp + " url: " + oldRequest.url()+ " sign : " + signStr);
|
||||||
|
|
||||||
|
|
||||||
Headers headers = oldRequest.headers().newBuilder()
|
Headers headers = oldRequest.headers().newBuilder()
|
||||||
.add("pub_ticket", ticket)
|
.add("pub_ticket", ticket == null ? "" : ticket)
|
||||||
.add("pub_uid", uid == 0 ? "" : String.valueOf(uid))
|
.add("pub_uid", uid == 0 ? "" : String.valueOf(uid))
|
||||||
.build();
|
.build();
|
||||||
HttpUrl.Builder builder = oldRequest.url().newBuilder()
|
HttpUrl.Builder builder = oldRequest.url().newBuilder()
|
||||||
@@ -137,6 +143,7 @@ public class ParamsInterceptor implements Interceptor {
|
|||||||
}
|
}
|
||||||
builder.addQueryParameter("pub_timestamp", timestamp);
|
builder.addQueryParameter("pub_timestamp", timestamp);
|
||||||
builder.addQueryParameter("pub_sign", signStr);
|
builder.addQueryParameter("pub_sign", signStr);
|
||||||
|
addHeaderWithOperator(builder);
|
||||||
Request newRequest = oldRequest.newBuilder()
|
Request newRequest = oldRequest.newBuilder()
|
||||||
.method(oldRequest.method(), oldRequest.body())
|
.method(oldRequest.method(), oldRequest.body())
|
||||||
.headers(headers)
|
.headers(headers)
|
||||||
@@ -146,5 +153,19 @@ public class ParamsInterceptor implements Interceptor {
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void addHeaderWithOperator(HttpUrl.Builder builder) {
|
||||||
|
if ((System.currentTimeMillis() - operatorCodeTime) > (1000 * 60 * 10)) {
|
||||||
|
loadOperatorCode();
|
||||||
|
}
|
||||||
|
builder.addQueryParameter("mcc", operatorCode);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void loadOperatorCode() {
|
||||||
|
if (TelephonyUtils.INSTANCE.isChinaOperator()) {
|
||||||
|
operatorCode = "460";
|
||||||
|
} else {
|
||||||
|
operatorCode = TelephonyUtils.INSTANCE.getOperatorFirstSim();
|
||||||
|
}
|
||||||
|
operatorCodeTime = System.currentTimeMillis();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@@ -63,13 +63,14 @@ public final class RxNetManager {
|
|||||||
|
|
||||||
if (RxNetLog.DEBUG) {
|
if (RxNetLog.DEBUG) {
|
||||||
//正式环境千万不要加这玩意,为了方便日志查看,拦截器里面加了synchronized关键字,接口请求是串行的
|
//正式环境千万不要加这玩意,为了方便日志查看,拦截器里面加了synchronized关键字,接口请求是串行的
|
||||||
HttpLoggingInterceptor loggingInterceptor = new HttpLoggingInterceptor(new HttpLoggingInterceptor.Logger() {
|
// HttpLoggingInterceptor loggingInterceptor = new HttpLoggingInterceptor(new HttpLoggingInterceptor.Logger() {
|
||||||
@Override
|
// @Override
|
||||||
public void log(String message) {
|
// public void log(String message) {
|
||||||
RxNetLog.d("OKHttp-------%s", message);
|
// RxNetLog.d("OKHttp-------%s", message);
|
||||||
}
|
// }
|
||||||
});
|
// });
|
||||||
loggingInterceptor.setLevel(HttpLoggingInterceptor.Level.BODY);
|
okhttp3.logging.HttpLoggingInterceptor loggingInterceptor = new okhttp3.logging.HttpLoggingInterceptor();
|
||||||
|
loggingInterceptor.setLevel(okhttp3.logging.HttpLoggingInterceptor.Level.BODY);
|
||||||
mBuilder.addInterceptor(loggingInterceptor);
|
mBuilder.addInterceptor(loggingInterceptor);
|
||||||
|
|
||||||
mBuilder.addNetworkInterceptor(new StethoInterceptor());
|
mBuilder.addNetworkInterceptor(new StethoInterceptor());
|
||||||
|
@@ -0,0 +1,19 @@
|
|||||||
|
package com.chuhai.utils
|
||||||
|
|
||||||
|
import android.os.Build
|
||||||
|
import android.os.LocaleList
|
||||||
|
import java.util.Locale
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Created by Max on 2023/11/17 16:12
|
||||||
|
* Desc:
|
||||||
|
**/
|
||||||
|
object LanguageUtils {
|
||||||
|
fun getSystemLanguage(): Locale {
|
||||||
|
return if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
|
||||||
|
LocaleList.getDefault()[0]
|
||||||
|
} else {
|
||||||
|
Locale.getDefault()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
133
library/src/module_utils/java/com/chuhai/utils/TelephonyUtils.kt
Normal file
133
library/src/module_utils/java/com/chuhai/utils/TelephonyUtils.kt
Normal file
@@ -0,0 +1,133 @@
|
|||||||
|
package com.chuhai.utils
|
||||||
|
|
||||||
|
import android.content.Context
|
||||||
|
import android.telephony.TelephonyManager
|
||||||
|
import com.chuhai.utils.log.ILog
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Created by Max on 2023/11/14 10:17
|
||||||
|
* Desc:TelephonyManager 相关工具
|
||||||
|
**/
|
||||||
|
object TelephonyUtils : ILog {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 是否为中国运营商(任意卡属于中国就为true)
|
||||||
|
*/
|
||||||
|
fun isChinaOperator(): Boolean {
|
||||||
|
val tm =
|
||||||
|
AppUtils.getApp().getSystemService(Context.TELEPHONY_SERVICE) as? TelephonyManager
|
||||||
|
?: return false
|
||||||
|
if (tm.simState == TelephonyManager.SIM_STATE_READY) {
|
||||||
|
if (!tm.simOperator.isNullOrEmpty() && tm.simOperator.startsWith("460")) {
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
if (isChainOperator(tm.simOperatorName)) {
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!tm.networkOperator.isNullOrEmpty() && tm.networkOperator.startsWith("460")) {
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
if (isChainOperator(tm.networkOperatorName)) {
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取运营商(优先SIM)
|
||||||
|
*/
|
||||||
|
fun getOperatorFirstSim(): String? {
|
||||||
|
val operator = getSimOperator()
|
||||||
|
return if (operator.isNullOrEmpty()) {
|
||||||
|
getNetWorkOperator()
|
||||||
|
} else {
|
||||||
|
operator
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取SIM运营商名称
|
||||||
|
*/
|
||||||
|
fun getSimOperator(): String? {
|
||||||
|
val tm =
|
||||||
|
AppUtils.getApp().getSystemService(Context.TELEPHONY_SERVICE) as? TelephonyManager
|
||||||
|
?: return null
|
||||||
|
if (tm.simState != TelephonyManager.SIM_STATE_READY) {
|
||||||
|
logD("SIM状态不对:${tm.simState}")
|
||||||
|
return null
|
||||||
|
}
|
||||||
|
val simOperator = tm.simOperator
|
||||||
|
logD("getSimOperator()获取的MCC+MNC为:$simOperator")
|
||||||
|
logD("getOperatorName()方法获取的运营商名称为:${tm.simOperatorName} ")
|
||||||
|
logD("通过getSimOperator()人为判断的运营商名称是: ${getOperatorName(simOperator)}")
|
||||||
|
return simOperator
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取网络运营商
|
||||||
|
*/
|
||||||
|
fun getNetWorkOperator(): String? {
|
||||||
|
val tm = AppUtils.getApp().getSystemService(Context.TELEPHONY_SERVICE) as? TelephonyManager
|
||||||
|
?: return null
|
||||||
|
//用于判断拨号那张卡的运营商
|
||||||
|
val networkOperator = tm.networkOperator
|
||||||
|
logD("getNetWorkOperator() 获取的MCC+MNC为:$networkOperator")
|
||||||
|
logD("getNetWorkOperator() phoneType:${tm.phoneType}")
|
||||||
|
logD("getNetworkOperatorName()方法获取的网络类型名称是: ${tm.networkOperatorName}")
|
||||||
|
logD("通过getNetWorkOperator()人为判断的运营商名称是: ${getOperatorName(networkOperator)}")
|
||||||
|
return tm.networkOperator
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 是否中国运营商
|
||||||
|
*/
|
||||||
|
private fun isChainOperator(operatorName: String?): Boolean {
|
||||||
|
if (operatorName == null) return false
|
||||||
|
if (operatorName == "CUCC"
|
||||||
|
|| operatorName == "CMCC"
|
||||||
|
|| operatorName == "CTCC"
|
||||||
|
|| operatorName == "CTT"
|
||||||
|
|| operatorName.contains("中国")
|
||||||
|
|| operatorName.contains("中國")
|
||||||
|
) {
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 运营商类型
|
||||||
|
*/
|
||||||
|
private fun getOperatorName(simOperator: String?): String? {
|
||||||
|
if (simOperator == null) {
|
||||||
|
return null
|
||||||
|
}
|
||||||
|
return when (simOperator) {
|
||||||
|
"46001", "46006", "46009" -> {
|
||||||
|
// 联通
|
||||||
|
"CUCC"
|
||||||
|
}
|
||||||
|
|
||||||
|
"46000", "46002", "46004", "46007" -> {
|
||||||
|
// 移动
|
||||||
|
"CMCC"
|
||||||
|
}
|
||||||
|
|
||||||
|
"46003", "46005", "46011" -> {
|
||||||
|
// 电信
|
||||||
|
"CTCC"
|
||||||
|
}
|
||||||
|
|
||||||
|
"46020" -> {
|
||||||
|
// 铁通
|
||||||
|
"CTT"
|
||||||
|
}
|
||||||
|
|
||||||
|
else -> {
|
||||||
|
"OHTER"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
Reference in New Issue
Block a user