From c1bec1d0abef4e14c775d9755f60bc944919dc71 Mon Sep 17 00:00:00 2001 From: huangjian Date: Fri, 6 Aug 2021 19:13:17 +0800 Subject: [PATCH] =?UTF-8?q?=E6=96=B0=E5=A2=9E=E7=94=A8=E6=88=B7=E5=8D=8F?= =?UTF-8?q?=E8=AE=AE=E6=9B=B4=E6=96=B0=E5=BC=B9=E7=AA=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/yizhuan/erban/MainActivity.java | 21 ++++ .../home/dialog/ProtocolUpdateDialog.java | 104 ++++++++++++++++++ .../res/layout/dialog_protocol_update.xml | 81 ++++++++++++++ .../xchat_android_core/user/IUserModel.java | 2 + .../xchat_android_core/user/UserModel.java | 18 +++ .../user/bean/ProtocolInfo.kt | 9 ++ .../utils/SharedPreferenceUtils.java | 2 +- 7 files changed, 236 insertions(+), 1 deletion(-) create mode 100644 app/src/main/java/com/yizhuan/erban/home/dialog/ProtocolUpdateDialog.java create mode 100644 app/src/main/res/layout/dialog_protocol_update.xml create mode 100644 core/src/main/java/com/yizhuan/xchat_android_core/user/bean/ProtocolInfo.kt diff --git a/app/src/main/java/com/yizhuan/erban/MainActivity.java b/app/src/main/java/com/yizhuan/erban/MainActivity.java index 77abfa8b3..7a66c3893 100644 --- a/app/src/main/java/com/yizhuan/erban/MainActivity.java +++ b/app/src/main/java/com/yizhuan/erban/MainActivity.java @@ -58,6 +58,7 @@ import com.yizhuan.erban.community.im.WorldDynamicShareViewHolder; import com.yizhuan.erban.community.publish.view.PublishActivity; import com.yizhuan.erban.community.square.SquareFragment; import com.yizhuan.erban.family.view.activity.FamilyHomeActivity; +import com.yizhuan.erban.home.dialog.ProtocolUpdateDialog; import com.yizhuan.erban.flutter.RouterConstants; import com.yizhuan.erban.home.fragment.ContactsListFragment; import com.yizhuan.erban.home.fragment.GameFragment; @@ -117,6 +118,7 @@ import com.yizhuan.xchat_android_core.channel_page.model.ChannelPageModel; import com.yizhuan.xchat_android_core.community.attachment.DynamicSysAttachment; import com.yizhuan.xchat_android_core.community.event.SquareTaskEvent; import com.yizhuan.xchat_android_core.community.event.UnReadCountEvent; +import com.yizhuan.xchat_android_core.user.bean.ProtocolInfo; import com.yizhuan.xchat_android_core.community.im.WorldDynamicAttachment; import com.yizhuan.xchat_android_core.home.model.GameHomeModel; import com.yizhuan.xchat_android_core.home.model.HomeModel; @@ -192,6 +194,7 @@ import java.util.List; import io.flutter.embedding.android.FlutterFragment; import io.reactivex.SingleObserver; import io.reactivex.disposables.Disposable; +import io.reactivex.functions.Consumer; import static com.yizhuan.xchat_android_core.channel_page.model.ChannelPageModel.KEY_FLAG_VALID_CHANNEL_PAGE; @@ -848,6 +851,8 @@ public class MainActivity extends BaseMvpActivity handleChannelPageInfo(); + checkProtocolUpdate(); + // 互动消息未读数量 HomeModel.get().getUnreadCount(AuthModel.get().getCurrentUid()) .compose(bindToLifecycle()) @@ -859,6 +864,22 @@ public class MainActivity extends BaseMvpActivity } + @SuppressLint("CheckResult") + private void checkProtocolUpdate() { + UserModel.get() + .getProtocolInfo() + .compose(bindToLifecycle()) + .subscribe(protocolInfo -> { + int version = (int) SharedPreferenceUtils.get(ProtocolUpdateDialog.SP_KEY, 0); + //第一次打开APP不弹,因为闪屏页已经弹了! + if (version == 0) { + SharedPreferenceUtils.put(ProtocolUpdateDialog.SP_KEY, protocolInfo.getVer()); + } else if (version < protocolInfo.getVer()) { + new ProtocolUpdateDialog(MainActivity.this, protocolInfo).show(); + } + }); + } + //闪屏→linkedme→渠道指定房间→邀请码 @SuppressLint("CheckResult") private void handleChannelPageInfo() { diff --git a/app/src/main/java/com/yizhuan/erban/home/dialog/ProtocolUpdateDialog.java b/app/src/main/java/com/yizhuan/erban/home/dialog/ProtocolUpdateDialog.java new file mode 100644 index 000000000..73278807f --- /dev/null +++ b/app/src/main/java/com/yizhuan/erban/home/dialog/ProtocolUpdateDialog.java @@ -0,0 +1,104 @@ +package com.yizhuan.erban.home.dialog; + +import android.app.Activity; +import android.content.Context; +import android.content.Intent; +import android.graphics.Color; +import android.graphics.drawable.ColorDrawable; +import android.os.Bundle; +import android.text.SpannableString; +import android.text.Spanned; +import android.text.method.LinkMovementMethod; +import android.text.style.ForegroundColorSpan; +import android.view.Gravity; +import android.view.View; +import android.view.Window; +import android.view.WindowManager; +import android.widget.ImageView; +import android.widget.TextView; + +import androidx.annotation.NonNull; +import androidx.core.content.ContextCompat; + +import com.yizhuan.erban.R; +import com.yizhuan.erban.base.BaseSdDialog; +import com.yizhuan.erban.common.widget.OriginalDrawStatusClickSpan; +import com.yizhuan.erban.ui.patriarch.PatriarchModeActivity; +import com.yizhuan.erban.ui.webview.CommonWebViewActivity; +import com.yizhuan.erban.ui.widget.magicindicator.buildins.UIUtil; +import com.yizhuan.xchat_android_core.UriProvider; +import com.yizhuan.xchat_android_core.user.bean.ProtocolInfo; + +import butterknife.BindView; +import butterknife.ButterKnife; +import butterknife.OnClick; + +/** + * 家长模式 提醒框 + * create by lvzebiao @2019/7/27 + */ +public class ProtocolUpdateDialog extends BaseSdDialog { + + @BindView(R.id.tv_title) + TextView tvTitle; + @BindView(R.id.tv_content) + TextView tvContent; + + @NonNull + private final ProtocolInfo protocolInfo; + + public static final String SP_KEY = "ProtocolUpdate"; + + public ProtocolUpdateDialog(Context context, @NonNull ProtocolInfo protocolInfo) { + super(context); + this.protocolInfo = protocolInfo; + } + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.dialog_protocol_update); + ButterKnife.bind(this); + setCancelable(false); + setCanceledOnTouchOutside(false); + Window window = getWindow(); + if (window != null) { + window.setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT)); + WindowManager.LayoutParams windowParams = window.getAttributes(); + windowParams.width = UIUtil.dip2px(getContext(), 300); + windowParams.height = WindowManager.LayoutParams.WRAP_CONTENT; + windowParams.dimAmount = 0.5f; + windowParams.gravity = Gravity.CENTER; + window.setAttributes(windowParams); + } + + tvContent.setText(protocolInfo.getContent()); + tvTitle.setText(protocolInfo.getTitle()); + String privacyAgreementTip = protocolInfo.getLinkText(); + int privacyAgreementTipIndex = protocolInfo.getContent().indexOf(privacyAgreementTip); + SpannableString ss = new SpannableString(protocolInfo.getContent()); + ss.setSpan(new ForegroundColorSpan(ContextCompat.getColor(context, R.color.color_7154EE)), privacyAgreementTipIndex, privacyAgreementTipIndex + privacyAgreementTip.length(), Spanned.SPAN_INCLUSIVE_EXCLUSIVE); + ss.setSpan(new OriginalDrawStatusClickSpan() { + @Override + public void onClick(@NonNull View widget) { + CommonWebViewActivity.start(getContext(), protocolInfo.getLinkUrl()); + } + }, privacyAgreementTipIndex, privacyAgreementTipIndex + privacyAgreementTip.length(), Spanned.SPAN_INCLUSIVE_EXCLUSIVE); + tvContent.setText(ss); + tvContent.setMovementMethod(new LinkMovementMethod()); + } + + + @OnClick({R.id.tv_cancel, R.id.tv_confirm}) + public void onViewClicked(View view) { + switch (view.getId()) { + case R.id.tv_cancel: + dismiss(); + ((Activity) context).finish(); + break; + case R.id.tv_confirm: + dismiss(); + break; + } + } +} diff --git a/app/src/main/res/layout/dialog_protocol_update.xml b/app/src/main/res/layout/dialog_protocol_update.xml new file mode 100644 index 000000000..b8200728f --- /dev/null +++ b/app/src/main/res/layout/dialog_protocol_update.xml @@ -0,0 +1,81 @@ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/core/src/main/java/com/yizhuan/xchat_android_core/user/IUserModel.java b/core/src/main/java/com/yizhuan/xchat_android_core/user/IUserModel.java index aec0452d6..189c107e4 100644 --- a/core/src/main/java/com/yizhuan/xchat_android_core/user/IUserModel.java +++ b/core/src/main/java/com/yizhuan/xchat_android_core/user/IUserModel.java @@ -8,6 +8,7 @@ import com.yizhuan.xchat_android_core.bean.response.ServiceResult; import com.yizhuan.xchat_android_core.user.bean.GiftAchievementInfo; import com.yizhuan.xchat_android_core.user.bean.GiftWallInfo; import com.yizhuan.xchat_android_core.user.bean.NewUserInfo; +import com.yizhuan.xchat_android_core.user.bean.ProtocolInfo; import com.yizhuan.xchat_android_core.user.bean.UserDetailInfo; import com.yizhuan.xchat_android_core.user.bean.UserGameInfo; import com.yizhuan.xchat_android_core.user.bean.UserInfo; @@ -220,4 +221,5 @@ public interface IUserModel extends IModel { @Nullable String getPreFillInviteCode(); + Single getProtocolInfo(); } diff --git a/core/src/main/java/com/yizhuan/xchat_android_core/user/UserModel.java b/core/src/main/java/com/yizhuan/xchat_android_core/user/UserModel.java index 8647ce2de..a35bddeca 100644 --- a/core/src/main/java/com/yizhuan/xchat_android_core/user/UserModel.java +++ b/core/src/main/java/com/yizhuan/xchat_android_core/user/UserModel.java @@ -23,6 +23,7 @@ import com.yizhuan.xchat_android_core.noble.NobleUtil; import com.yizhuan.xchat_android_core.user.bean.GiftAchievementInfo; import com.yizhuan.xchat_android_core.user.bean.GiftWallInfo; import com.yizhuan.xchat_android_core.user.bean.NewUserInfo; +import com.yizhuan.xchat_android_core.user.bean.ProtocolInfo; import com.yizhuan.xchat_android_core.user.bean.UserDetailInfo; import com.yizhuan.xchat_android_core.user.bean.UserGameInfo; import com.yizhuan.xchat_android_core.user.bean.UserInfo; @@ -792,6 +793,14 @@ public final class UserModel extends BaseModel implements IUserModel { return preFillInviteCode; } + @Override + public Single getProtocolInfo() { + return api.getProtocolInfo() + .compose(RxHelper.handleBeanData()) + .compose(RxHelper.handleSchedulers()); + } + + private interface Api { /** * 获取某个用户的用户信息 @@ -1003,5 +1012,14 @@ public final class UserModel extends BaseModel implements IUserModel { */ @GET("user/gold/give/recent") Single>> getGiveUserList(); + + + /** + * 用户协议更新弹窗 + * + * @return + */ + @GET("/user/latestPrivacyPolicy") + Single> getProtocolInfo(); } } diff --git a/core/src/main/java/com/yizhuan/xchat_android_core/user/bean/ProtocolInfo.kt b/core/src/main/java/com/yizhuan/xchat_android_core/user/bean/ProtocolInfo.kt new file mode 100644 index 000000000..1fa72bea0 --- /dev/null +++ b/core/src/main/java/com/yizhuan/xchat_android_core/user/bean/ProtocolInfo.kt @@ -0,0 +1,9 @@ +package com.yizhuan.xchat_android_core.user.bean + +data class ProtocolInfo( + val content: String = "", + val linkText: String = "", + val linkUrl: String = "", + val title: String = "", + val ver: Int = 0 +) \ No newline at end of file diff --git a/core/src/main/java/com/yizhuan/xchat_android_core/utils/SharedPreferenceUtils.java b/core/src/main/java/com/yizhuan/xchat_android_core/utils/SharedPreferenceUtils.java index 1d3298d3f..19d230dbc 100644 --- a/core/src/main/java/com/yizhuan/xchat_android_core/utils/SharedPreferenceUtils.java +++ b/core/src/main/java/com/yizhuan/xchat_android_core/utils/SharedPreferenceUtils.java @@ -54,7 +54,7 @@ public class SharedPreferenceUtils { } else if (defaultValue instanceof Long) { return preferences.getLong(key, (Long) defaultValue); } - return null; + return defaultValue; } public static void put(String key, Object value) {