Compare commits
2 Commits
feature-is
...
feature-is
| Author | SHA1 | Date | |
|---|---|---|---|
| 888332ed82 | |||
| 2bcf8bf330 |
@ -0,0 +1,97 @@
|
||||
package com.gh.common.dialog
|
||||
|
||||
import android.app.Dialog
|
||||
import android.content.DialogInterface
|
||||
import android.os.Bundle
|
||||
import android.view.*
|
||||
|
||||
import androidx.fragment.app.FragmentActivity
|
||||
import androidx.fragment.app.FragmentTransaction
|
||||
import com.gh.base.fragment.BaseDialogFragment
|
||||
|
||||
import com.gh.gamecenter.R
|
||||
|
||||
import com.gh.gamecenter.databinding.DialogSyncCertificationBinding
|
||||
|
||||
|
||||
class SyncCertificationDialogFragment : BaseDialogFragment() {
|
||||
|
||||
private var mCallBack: ((isSuccess: Boolean) -> Unit)? = null
|
||||
private val mBinding by lazy { DialogSyncCertificationBinding.inflate(layoutInflater) }
|
||||
|
||||
override fun onCreateView(
|
||||
inflater: LayoutInflater,
|
||||
container: ViewGroup?,
|
||||
savedInstanceState: Bundle?
|
||||
): View {
|
||||
return mBinding.root
|
||||
}
|
||||
|
||||
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
||||
super.onViewCreated(view, savedInstanceState)
|
||||
|
||||
initUI()
|
||||
}
|
||||
|
||||
private fun initUI() {
|
||||
mBinding.contentTv.text = getString(R.string.dialog_sync_certification_content)
|
||||
mBinding.refuseTv.setOnClickListener {
|
||||
dismissAllowingStateLoss()
|
||||
}
|
||||
mBinding.agreeTv.setOnClickListener {
|
||||
mCallBack?.invoke(true)
|
||||
dismissAllowingStateLoss()
|
||||
}
|
||||
}
|
||||
|
||||
override fun onCreateDialog(savedInstanceState: Bundle?): Dialog {
|
||||
val createDialog = super.onCreateDialog(savedInstanceState)
|
||||
createDialog.setCanceledOnTouchOutside(false)
|
||||
createDialog.setOnKeyListener(object : DialogInterface.OnKeyListener {
|
||||
override fun onKey(dialog: DialogInterface?, keyCode: Int, event: KeyEvent?): Boolean {
|
||||
if (keyCode == KeyEvent.KEYCODE_BACK) {
|
||||
return true
|
||||
}
|
||||
return false
|
||||
}
|
||||
})
|
||||
|
||||
val window = createDialog.window
|
||||
window?.setGravity(Gravity.CENTER)
|
||||
return createDialog
|
||||
}
|
||||
//
|
||||
// override fun onStart() {
|
||||
// super.onStart()
|
||||
// val width = requireContext().resources.displayMetrics.widthPixels - 60F.dip2px()
|
||||
// val height = ViewGroup.LayoutParams.WRAP_CONTENT
|
||||
// dialog?.window?.setLayout(width, height)
|
||||
// }
|
||||
|
||||
companion object {
|
||||
|
||||
@JvmStatic
|
||||
fun show(activity: FragmentActivity, callBack: ((isSuccess: Boolean) -> Unit)?) {
|
||||
var certificationDialogFragment =
|
||||
activity.supportFragmentManager.findFragmentByTag(SyncCertificationDialogFragment::class.java.simpleName) as? SyncCertificationDialogFragment
|
||||
if (certificationDialogFragment != null) {
|
||||
certificationDialogFragment.mCallBack = callBack
|
||||
val transaction: FragmentTransaction =
|
||||
activity.supportFragmentManager.beginTransaction()
|
||||
transaction.show(certificationDialogFragment)
|
||||
transaction.commit()
|
||||
} else {
|
||||
certificationDialogFragment = SyncCertificationDialogFragment().apply {
|
||||
mCallBack = callBack
|
||||
}
|
||||
}
|
||||
|
||||
certificationDialogFragment.show(
|
||||
activity.supportFragmentManager,
|
||||
SyncCertificationDialogFragment::class.java.simpleName
|
||||
)
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
@ -205,6 +205,7 @@ public class DataUtils {
|
||||
.getCertification()
|
||||
.subscribeOn(Schedulers.io())
|
||||
.subscribe(new BiResponse<UserInfoEntity>() {
|
||||
@RequiresApi(api = Build.VERSION_CODES.O)
|
||||
@Override
|
||||
public void onSuccess(UserInfoEntity data) {
|
||||
SPUtils.setString(Constants.SP_DEVICE_CERTIFICATION_PREFIX + gid, GsonUtils.toJson(data));
|
||||
|
||||
@ -0,0 +1,11 @@
|
||||
package com.gh.gamecenter.entity
|
||||
|
||||
import android.os.Parcelable
|
||||
|
||||
import kotlinx.parcelize.Parcelize
|
||||
|
||||
@Parcelize
|
||||
data class CertificationDialogEntity(
|
||||
|
||||
var realName: String = "",
|
||||
var idCard: String = "") : Parcelable
|
||||
@ -33,8 +33,12 @@ data class SettingsEntity(
|
||||
var gameDomeSwitch: String = "",//试玩显示开关,on打开
|
||||
@SerializedName("permission_popup_switch")
|
||||
var permissionPopupSwitch: String = "off",//权限引导弹窗开关,on/off
|
||||
@SerializedName("certification_sync_switch")
|
||||
var certificationSyncSwitch: String = "off",//实名信息同步开关:on/off,默认:off
|
||||
@SerializedName("permission_popup_applied_versions")
|
||||
var permissionPopupAppliedVersions: PermissionPopupAppliedVersions = PermissionPopupAppliedVersions()
|
||||
|
||||
|
||||
) {
|
||||
|
||||
fun setCommunityEntrance(communityEntrance: String) {
|
||||
|
||||
@ -4,14 +4,15 @@ import android.graphics.Bitmap;
|
||||
import android.graphics.PorterDuff;
|
||||
import android.graphics.drawable.Animatable;
|
||||
import android.net.Uri;
|
||||
|
||||
import android.os.Bundle;
|
||||
import android.text.TextUtils;
|
||||
import android.view.View;
|
||||
import android.widget.CheckedTextView;
|
||||
import android.widget.ImageView;
|
||||
|
||||
import androidx.annotation.ColorRes;
|
||||
import androidx.annotation.Nullable;
|
||||
|
||||
import androidx.core.content.ContextCompat;
|
||||
import androidx.fragment.app.Fragment;
|
||||
import androidx.lifecycle.ViewModelProviders;
|
||||
@ -27,13 +28,13 @@ import com.facebook.imagepipeline.image.ImageInfo;
|
||||
import com.gh.base.OnDoubleTapListener;
|
||||
import com.gh.base.fragment.BaseFragment_ViewPager_Checkable;
|
||||
import com.gh.common.constant.Config;
|
||||
import com.gh.common.constant.Constants;
|
||||
|
||||
import com.gh.common.dialog.PrivacyPolicyDialogFragment;
|
||||
import com.gh.common.dialog.SyncCertificationDialogFragment;
|
||||
import com.gh.common.syncpage.SyncPageRepository;
|
||||
import com.gh.common.tracker.TrackerLogger;
|
||||
import com.gh.common.util.BiCallback;
|
||||
import com.gh.common.util.DataUtils;
|
||||
import com.gh.common.util.DialogUtils;
|
||||
import com.gh.common.util.DisplayUtils;
|
||||
import com.gh.common.util.EntranceUtils;
|
||||
import com.gh.common.util.ExtensionsKt;
|
||||
@ -43,11 +44,9 @@ import com.gh.common.util.ImageUtils;
|
||||
import com.gh.common.util.IntegralLogHelper;
|
||||
import com.gh.common.util.LogUtils;
|
||||
import com.gh.common.util.NightModeUtils;
|
||||
import com.gh.common.util.SPUtils;
|
||||
import com.gh.common.view.ReserveDialog;
|
||||
import com.gh.gamecenter.R;
|
||||
import com.gh.gamecenter.databinding.FragmentMainBinding;
|
||||
import com.gh.gamecenter.entity.PrivacyPolicyEntity;
|
||||
import com.gh.gamecenter.entity.SettingsEntity;
|
||||
import com.gh.gamecenter.entity.SubjectRecommendEntity;
|
||||
import com.gh.gamecenter.entity.WelcomeDialogEntity;
|
||||
@ -59,6 +58,7 @@ import com.gh.gamecenter.game.GameFragment;
|
||||
import com.gh.gamecenter.message.MessageUnreadRepository;
|
||||
import com.gh.gamecenter.message.MessageUnreadViewModel;
|
||||
import com.gh.gamecenter.personal.PersonalFragment;
|
||||
import com.gh.gamecenter.user.UserRepository;
|
||||
import com.gh.gamecenter.video.detail.HomeVideoFragment;
|
||||
import com.halo.assistant.HaloApp;
|
||||
import com.lightgame.listeners.OnBackPressedListener;
|
||||
@ -185,14 +185,25 @@ public class MainWrapperFragment extends BaseFragment_ViewPager_Checkable implem
|
||||
if (reserveData != null && !reserveData.isEmpty()) {
|
||||
ReserveDialog reserveDialog = ReserveDialog.getInstance(reserveData);
|
||||
reserveDialog.setOnDismissListener(() -> {
|
||||
mViewModel.showSyncCertificationDialog();
|
||||
MessageUnreadRepository.INSTANCE.loadMessageUnreadData();
|
||||
return null;
|
||||
});
|
||||
reserveDialog.show(getChildFragmentManager(), "reserveDialog");
|
||||
} else {
|
||||
mViewModel.showSyncCertificationDialog();
|
||||
MessageUnreadRepository.INSTANCE.loadMessageUnreadData();
|
||||
}
|
||||
});
|
||||
mViewModel.getSyncCertificationDialog().observe(this,certificationDialogEntity -> {
|
||||
if (certificationDialogEntity != null){
|
||||
SyncCertificationDialogFragment.show(requireActivity(), isSuccess -> {
|
||||
//发送同步实名认证请求
|
||||
UserRepository.getInstance().syncCertificate(certificationDialogEntity.getRealName(), certificationDialogEntity.getIdCard());
|
||||
return null;
|
||||
});
|
||||
}
|
||||
});
|
||||
ViewModelProviders.of(this)
|
||||
.get(MessageUnreadViewModel.class)
|
||||
.getUnreadMessageTotalLiveData().observe(this, isShow -> ExtensionsKt.goneIf(mBinding.mainIvMessageHint, !isShow));
|
||||
@ -224,6 +235,7 @@ public class MainWrapperFragment extends BaseFragment_ViewPager_Checkable implem
|
||||
|
||||
WelcomeDialogFragment welcomeDialog = WelcomeDialogFragment.getInstance(welcomeDialogEntity);
|
||||
welcomeDialog.setOnDismissListener(() -> {
|
||||
|
||||
mViewModel.requestReserveDialog();
|
||||
return null;
|
||||
});
|
||||
|
||||
@ -2,19 +2,21 @@ package com.gh.gamecenter.fragment
|
||||
|
||||
import android.annotation.SuppressLint
|
||||
import android.app.Application
|
||||
import android.net.Uri
|
||||
import android.preference.PreferenceManager
|
||||
import android.text.TextUtils
|
||||
import android.util.Base64
|
||||
import androidx.lifecycle.AndroidViewModel
|
||||
import androidx.lifecycle.MutableLiveData
|
||||
import com.gh.common.constant.Config
|
||||
import com.gh.common.constant.Constants
|
||||
import com.gh.common.runOnIoThread
|
||||
import com.gh.common.util.CheckLoginUtils
|
||||
import com.gh.common.util.HomeBottomBarHelper
|
||||
import com.gh.common.util.PackageUtils
|
||||
import com.gh.common.util.SPUtils
|
||||
import com.gh.gamecenter.BuildConfig
|
||||
import com.gh.gamecenter.entity.DialogEntity
|
||||
import com.gh.gamecenter.entity.SimpleGameEntity
|
||||
import com.gh.gamecenter.entity.SubjectRecommendEntity
|
||||
import com.gh.gamecenter.entity.WelcomeDialogEntity
|
||||
import com.gh.gamecenter.entity.*
|
||||
import com.gh.gamecenter.manager.UserManager
|
||||
import com.gh.gamecenter.retrofit.BiResponse
|
||||
import com.gh.gamecenter.retrofit.RetrofitManager
|
||||
@ -29,10 +31,11 @@ class MainWrapperViewModel(application: Application) : AndroidViewModel(applicat
|
||||
|
||||
val navBar = MutableLiveData<SubjectRecommendEntity?>()
|
||||
|
||||
// 弹窗优先级: 隐私政策弹窗->启动弹窗->预约弹窗->消息弹窗
|
||||
// 弹窗优先级: 隐私政策弹窗->启动弹窗->预约弹窗->同步认证弹窗
|
||||
val openingDialog = MutableLiveData<WelcomeDialogEntity?>()
|
||||
val reserveDialog = MutableLiveData<List<SimpleGameEntity>?>()
|
||||
val privacyPolicyDialog = MutableLiveData<DialogEntity.PrivacyPolicyEntity?>()
|
||||
val syncCertificationDialog = MutableLiveData<CertificationDialogEntity?>()
|
||||
|
||||
init {
|
||||
getHomeNavBar()
|
||||
@ -100,7 +103,8 @@ class MainWrapperViewModel(application: Application) : AndroidViewModel(applicat
|
||||
// 全新安装忽略隐私弹窗
|
||||
if (privacyPolicyDialogEntity != null) {
|
||||
val id = privacyPolicyDialogEntity.id
|
||||
val lastAcceptedId = SPUtils.getString(Constants.SP_LAST_ACCEPTED_PRIVACY_DIALOG_ID, "")
|
||||
val lastAcceptedId =
|
||||
SPUtils.getString(Constants.SP_LAST_ACCEPTED_PRIVACY_DIALOG_ID, "")
|
||||
if (HaloApp.getInstance().isBrandNewInstall) {
|
||||
SPUtils.setString(Constants.SP_LAST_ACCEPTED_PRIVACY_DIALOG_ID, id)
|
||||
privacyPolicyDialog.postValue(null)
|
||||
@ -138,9 +142,49 @@ class MainWrapperViewModel(application: Application) : AndroidViewModel(applicat
|
||||
reserveDialog.postValue(null)
|
||||
}
|
||||
})
|
||||
} else {
|
||||
showSyncCertificationDialog()
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@SuppressLint("NewApi")
|
||||
fun showSyncCertificationDialog() {
|
||||
val uri = Uri.parse("content://com.gh.gamecenter.provider/sync_certification")
|
||||
runOnIoThread {
|
||||
val settings = Config.getSettings()
|
||||
//查询是否已经在光环进行实名认证
|
||||
val certificationStr = SPUtils.getString(Constants.SP_DEVICE_CERTIFICATION_PREFIX + HaloApp.getInstance().gid)
|
||||
//后台配置中 开启了同步实名且光环没有进行实名认证才执行
|
||||
if ((settings?.certificationSyncSwitch ?: "off") == "on" && TextUtils.isEmpty(certificationStr)) {
|
||||
var realName = ""
|
||||
var idCard = ""
|
||||
val cursor = HaloApp.getInstance().contentResolver.query(uri, null, null, null)
|
||||
if (cursor != null && cursor.count > 0) {
|
||||
cursor.moveToFirst()
|
||||
do {
|
||||
realName = cursor.getString(1)
|
||||
idCard = cursor.getString(2)
|
||||
} while (cursor.moveToNext())
|
||||
cursor.close()
|
||||
}
|
||||
if (!TextUtils.isEmpty(realName) && !TextUtils.isEmpty(idCard)) {
|
||||
//base64解密存储的数据
|
||||
val finalRealName = String(Base64.decode(realName, Base64.DEFAULT))
|
||||
val finalIdCard = String(Base64.decode(idCard, Base64.DEFAULT))
|
||||
val certificationDialogEntity = CertificationDialogEntity()
|
||||
certificationDialogEntity.realName = finalRealName
|
||||
certificationDialogEntity.idCard = finalIdCard
|
||||
syncCertificationDialog.postValue(certificationDialogEntity)
|
||||
//删除contentprovider数据库中的数据
|
||||
HaloApp.getInstance().contentResolver.delete(uri, null, null)
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* 特殊渠道隐藏视频 tab
|
||||
*/
|
||||
|
||||
@ -8,15 +8,7 @@ import android.database.Cursor
|
||||
import android.database.sqlite.SQLiteDatabase
|
||||
import android.database.sqlite.SQLiteOpenHelper
|
||||
import android.net.Uri
|
||||
import android.text.TextUtils
|
||||
import android.util.Base64
|
||||
import com.gh.common.constant.Constants
|
||||
import com.gh.common.util.GsonUtils
|
||||
import com.gh.common.util.SPUtils
|
||||
import com.gh.gamecenter.BuildConfig
|
||||
import com.gh.gamecenter.entity.UserInfoEntity
|
||||
import com.gh.gamecenter.user.UserRepository
|
||||
import com.halo.assistant.HaloApp
|
||||
import com.lightgame.utils.Utils
|
||||
|
||||
class GhContentProvider : ContentProvider() {
|
||||
@ -65,7 +57,8 @@ class GhContentProvider : ContentProvider() {
|
||||
selectionArgs: Array<out String>?,
|
||||
sortOrder: String?
|
||||
): Cursor? {
|
||||
when(mUriMatcher.match(uri)){
|
||||
val match = mUriMatcher.match(uri);
|
||||
when(match){
|
||||
1 -> return mSqLiteDatabase?.query(
|
||||
CERTIFICATION_TABLE_NAME,
|
||||
null,
|
||||
@ -110,34 +103,23 @@ class GhContentProvider : ContentProvider() {
|
||||
Utils.log("CertificationContentProvider", "insert success:" + uri.authority + ", status => " + values?.toString())
|
||||
return nameUri
|
||||
}
|
||||
} else if (mUriMatcher.match(uri) == 2) {
|
||||
val certificationStr =
|
||||
SPUtils.getString(Constants.SP_DEVICE_CERTIFICATION_PREFIX + HaloApp.getInstance().gid)
|
||||
val isCertification = if (TextUtils.isEmpty(certificationStr)) {
|
||||
false
|
||||
} else {
|
||||
val userInfo: UserInfoEntity =
|
||||
GsonUtils.fromJson(certificationStr, UserInfoEntity::class.java)
|
||||
if (userInfo != null) {
|
||||
!TextUtils.isEmpty(userInfo.idCard?.id)
|
||||
} else {
|
||||
false
|
||||
}
|
||||
|
||||
}
|
||||
if (!isCertification) {//如果未实名的话 就直接将写入的信息进行实名信息绑定
|
||||
val realName = values?.getAsString(KEY_REAL_NAME)
|
||||
val idCard = values?.getAsString(KEY_ID_CARD)
|
||||
if (!TextUtils.isEmpty(realName) && !TextUtils.isEmpty(idCard)) {
|
||||
//base64解密存储的数据
|
||||
val finalRealName = String(Base64.decode(realName, Base64.DEFAULT))
|
||||
val finalIdCard = String(Base64.decode(idCard, Base64.DEFAULT))
|
||||
// Utils.log("解密后的数据:$finalRealName ------ $finalIdCard")
|
||||
//发送同步实名认证请求
|
||||
UserRepository.getInstance().syncCertificate(finalRealName, finalIdCard)
|
||||
return ContentUris.withAppendedId(uri, 1)
|
||||
}
|
||||
}
|
||||
else if (mUriMatcher.match(uri) == 2) {
|
||||
|
||||
// 固定主键(只保留一条数据即可)
|
||||
values?.put(KEY_PRIMARY_KEY, 1)
|
||||
// 如果已存在则直接替换
|
||||
val rowId: Long? = mSqLiteDatabase?.insertWithOnConflict(
|
||||
SYNC_CERTIFICATION_TABLE_NAME,
|
||||
null,
|
||||
values,
|
||||
SQLiteDatabase.CONFLICT_REPLACE
|
||||
)
|
||||
if (rowId != null && rowId > 0) {
|
||||
val nameUri = ContentUris.withAppendedId(uri, rowId)
|
||||
context.contentResolver.notifyChange(nameUri, null)
|
||||
Utils.log("SyncCertificationContentProvider", "insert success:" + uri.authority + ", status => " + values?.toString())
|
||||
return nameUri
|
||||
}
|
||||
}
|
||||
return null
|
||||
|
||||
65
app/src/main/res/layout/dialog_sync_certification.xml
Normal file
65
app/src/main/res/layout/dialog_sync_certification.xml
Normal file
@ -0,0 +1,65 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:tools="http://schemas.android.com/tools"
|
||||
android:orientation="vertical"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:gravity="center">
|
||||
|
||||
<LinearLayout
|
||||
android:layout_width="@dimen/default_dialog_width"
|
||||
android:layout_height="wrap_content"
|
||||
android:background="@drawable/background_shape_white_radius_5"
|
||||
android:orientation="vertical"
|
||||
android:padding="24dp">
|
||||
|
||||
<TextView
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:drawablePadding="4dp"
|
||||
android:text="实名提示"
|
||||
android:textColor="@color/text_title"
|
||||
android:textSize="16sp"
|
||||
android:textStyle="bold" />
|
||||
|
||||
<TextView
|
||||
android:id="@+id/contentTv"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginTop="11dp"
|
||||
android:lineSpacingExtra="4dp"
|
||||
android:textColor="@color/text_subtitleDesc"
|
||||
android:textSize="14sp"
|
||||
tools:text="@string/dialog_sync_certification_content" />
|
||||
|
||||
<LinearLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginTop="16dp">
|
||||
|
||||
<TextView
|
||||
android:id="@+id/refuseTv"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="40dp"
|
||||
android:layout_weight="1"
|
||||
android:background="@drawable/button_round_f5f5f5"
|
||||
android:gravity="center"
|
||||
android:text="拒绝"
|
||||
android:textColor="@color/text_title"
|
||||
android:textSize="14sp" />
|
||||
|
||||
<TextView
|
||||
android:id="@+id/agreeTv"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="40dp"
|
||||
android:layout_marginLeft="24dp"
|
||||
android:layout_weight="1"
|
||||
android:background="@drawable/button_blue_oval"
|
||||
android:gravity="center"
|
||||
android:text="同意"
|
||||
android:textColor="@color/white"
|
||||
android:textSize="14sp" />
|
||||
</LinearLayout>
|
||||
</LinearLayout>
|
||||
|
||||
</RelativeLayout>
|
||||
Reference in New Issue
Block a user