From 5fdaa0b2139215be40cae292e54524759234b809 Mon Sep 17 00:00:00 2001 From: lijia Date: Mon, 28 Oct 2024 17:27:21 +0800 Subject: [PATCH] =?UTF-8?q?=E5=8A=A8=E6=80=81=E8=8E=B7=E5=8F=96=E6=9D=83?= =?UTF-8?q?=E9=99=90=E6=B7=BB=E5=8A=A0=E9=A1=B6=E9=83=A8=E6=96=87=E5=AD=97?= =?UTF-8?q?=E8=AF=B4=E6=98=8E?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../cuspop/MyRequestCallback.kt | 11 ++ .../cuspop/TopMsgPopup.kt | 32 +++++ .../ui/home/HomeFragment.java | 29 +++- .../util/PermissionUtils.kt | 136 ++++++++++++++++++ app/src/main/res/drawable/bg_round2.xml | 5 + app/src/main/res/layout/popup_qq_msg.xml | 17 +++ 6 files changed, 225 insertions(+), 5 deletions(-) create mode 100644 app/src/main/java/com/arpa/hndahesudintocctmsdriver/cuspop/MyRequestCallback.kt create mode 100644 app/src/main/java/com/arpa/hndahesudintocctmsdriver/cuspop/TopMsgPopup.kt create mode 100644 app/src/main/java/com/arpa/hndahesudintocctmsdriver/util/PermissionUtils.kt create mode 100644 app/src/main/res/drawable/bg_round2.xml create mode 100644 app/src/main/res/layout/popup_qq_msg.xml diff --git a/app/src/main/java/com/arpa/hndahesudintocctmsdriver/cuspop/MyRequestCallback.kt b/app/src/main/java/com/arpa/hndahesudintocctmsdriver/cuspop/MyRequestCallback.kt new file mode 100644 index 0000000..6e5407f --- /dev/null +++ b/app/src/main/java/com/arpa/hndahesudintocctmsdriver/cuspop/MyRequestCallback.kt @@ -0,0 +1,11 @@ +package com.arpa.hndahesudintocctmsdriver.cuspop + +/** + * @ClassName MyRequestCallback + * @Author john + * @Date 2024/10/28 17:19 + * @Description TODO + */ +interface MyRequestCallback{ + fun onResult(allGranted: Boolean, grantedList: List, deniedList: List) +} \ No newline at end of file diff --git a/app/src/main/java/com/arpa/hndahesudintocctmsdriver/cuspop/TopMsgPopup.kt b/app/src/main/java/com/arpa/hndahesudintocctmsdriver/cuspop/TopMsgPopup.kt new file mode 100644 index 0000000..9e43498 --- /dev/null +++ b/app/src/main/java/com/arpa/hndahesudintocctmsdriver/cuspop/TopMsgPopup.kt @@ -0,0 +1,32 @@ +package com.arpa.hndahesudintocctmsdriver.cuspop + +import android.content.Context +import com.arpa.hndahesudintocctmsdriver.R +import com.lxj.xpopup.core.PositionPopupView +import com.lxj.xpopup.enums.DragOrientation +import kotlinx.android.synthetic.main.popup_qq_msg.view.tvMessage + +/** + * Description: 自定义自由定位Position弹窗 + * Create by dance, at 2019/6/14 + */ +class TopMsgPopup(context: Context, message: String) : PositionPopupView(context) { + + private var message: String + + init { + this.message = message + } + override fun getImplLayoutId(): Int { + return R.layout.popup_qq_msg + } + + override fun getDragOrientation(): DragOrientation { + return DragOrientation.DragToLeft + } + + override fun onCreate() { + super.onCreate() + tvMessage.text = message + } +} diff --git a/app/src/main/java/com/arpa/hndahesudintocctmsdriver/ui/home/HomeFragment.java b/app/src/main/java/com/arpa/hndahesudintocctmsdriver/ui/home/HomeFragment.java index 44cd218..469e774 100644 --- a/app/src/main/java/com/arpa/hndahesudintocctmsdriver/ui/home/HomeFragment.java +++ b/app/src/main/java/com/arpa/hndahesudintocctmsdriver/ui/home/HomeFragment.java @@ -58,6 +58,7 @@ import com.arpa.hndahesudintocctmsdriver.ui.news.NewActivity; import com.arpa.hndahesudintocctmsdriver.ui.wallet.UpBankActivity; import com.arpa.hndahesudintocctmsdriver.util.MessageUtils; import com.arpa.hndahesudintocctmsdriver.util.OneDayShowUtils; +import com.arpa.hndahesudintocctmsdriver.util.PermissionUtils; import com.arpa.hndahesudintocctmsdriver.util.SPUtils; import com.arpa.hndahesudintocctmsdriver.util.string.StringUtil; import com.bumptech.glide.Glide; @@ -110,6 +111,7 @@ import org.greenrobot.eventbus.EventBus; import org.greenrobot.eventbus.Subscribe; import java.util.ArrayList; +import java.util.Collections; import java.util.List; import pub.devrel.easypermissions.EasyPermissions; @@ -564,18 +566,35 @@ public class HomeFragment extends BaseFragment { v1.setOnClickListener(v2 -> { switch (position) { case 0: - //startActivity(new Intent(con, OrderListActivity.class)); - PermissionX.init(getActivity()) - .permissions(Manifest.permission.ACCESS_FINE_LOCATION) - .request((allGranted, grantedList, deniedList) -> { + PermissionUtils.Companion.getInstance().showPermissionMessage(getActivity(), "用于向您推荐可能感兴趣的住宿、饮食、加油站、汽车维修等", + new String[]{Manifest.permission.ACCESS_FINE_LOCATION}, + (allGranted, grantedList, deniedList) -> { if (allGranted) { Intent in = new Intent(con, BusinessActivity.class); in.putExtra("type", "餐饮"); startActivity(in); } else { - Toast.makeText(act.getBaseContext(), "请先开启定位权限", Toast.LENGTH_LONG).show(); + new MessageUtils().showSimCenPop(con, "缺少定位权限,将无法为您提供服务,去开启!", "取消", "确认", () -> { + Intent intent = new Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS); + Uri uri = Uri.fromParts("package", getPackageName(), null); + intent.setData(uri); + startActivity(intent); + }); +// Toast.makeText(act.getBaseContext(), "请先开启定位权限", Toast.LENGTH_LONG).show(); } }); + //startActivity(new Intent(con, OrderListActivity.class)); +// PermissionX.init(getActivity()) +// .permissions(Manifest.permission.ACCESS_FINE_LOCATION) +// .request((allGranted, grantedList, deniedList) -> { +// if (allGranted) { +// Intent in = new Intent(con, BusinessActivity.class); +// in.putExtra("type", "餐饮"); +// startActivity(in); +// } else { +// Toast.makeText(act.getBaseContext(), "请先开启定位权限", Toast.LENGTH_LONG).show(); +// } +// }); //Toast.makeText(con,"定位开启失败,请检查配置项",Toast.LENGTH_LONG).show(); break; case 1: diff --git a/app/src/main/java/com/arpa/hndahesudintocctmsdriver/util/PermissionUtils.kt b/app/src/main/java/com/arpa/hndahesudintocctmsdriver/util/PermissionUtils.kt new file mode 100644 index 0000000..85d7788 --- /dev/null +++ b/app/src/main/java/com/arpa/hndahesudintocctmsdriver/util/PermissionUtils.kt @@ -0,0 +1,136 @@ +package com.arpa.hndahesudintocctmsdriver.util + +import android.app.Activity +import android.content.Context +import androidx.annotation.NonNull +import androidx.appcompat.app.AppCompatActivity +import androidx.fragment.app.FragmentActivity +import com.arpa.hndahesudintocctmsdriver.cuspop.MessagePop +import com.arpa.hndahesudintocctmsdriver.cuspop.MyRequestCallback +import com.arpa.hndahesudintocctmsdriver.cuspop.TopMsgPopup +import com.arpa.hndahesudintocctmsdriver.cuspop.SimCenterPop +import com.lxj.xpopup.XPopup +import com.lxj.xpopup.core.BasePopupView +import com.permissionx.guolindev.PermissionX +import com.permissionx.guolindev.callback.RequestCallback + +/** + * @ClassName MessageUtils + * @Author 用户 + * @Date 2023/8/15 09:51 + * @Description TODO + */ +class PermissionUtils { + + companion object { + fun getInstance() = InstanceHelper.sSingle + } + + object InstanceHelper { + val sSingle = PermissionUtils() + } + + + /** + * 显示权限申请 + * @param activity AppCompatActivity + * @param message String + * @param permission List + * @param callback RequestCallback + * @return BasePopupView? + */ + fun showPermissionMessage(activity: FragmentActivity, message: String,vararg permission:String,callback: MyRequestCallback){ + val show = XPopup.Builder(activity) + .hasShadowBg(false) + .hasBlurBg(false) + .isTouchThrough(true) + .isCenterHorizontal(true) + .offsetY(140) + .asCustom( + TopMsgPopup( + activity, + message + ) + ) + .show() + + PermissionX.init(activity) + .permissions(listOf(*permission)) + .request { allGranted, grantedList, deniedList -> + show.dismiss() + if (callback!=null){ + callback.onResult(allGranted,grantedList,deniedList) + } + } + } + fun showCenMessage(ctx: Context, message: String, message2: String) { + XPopup.Builder(ctx) // + .hasNavigationBar(false) + .isDestroyOnDismiss(true) //对于只使用一次的弹窗对象,推荐设置这个 + .asCustom(MessagePop(ctx, message, message2).setOnMyItemClickListener(object : + MessagePop.OnMyItemClickListener { + override fun onItemClick(startTime: String, endTime: String) { + } + })) + .show() + } + + fun showSimCenPop( + ctx: Context, + message: String, + onMyItemClickListener: SimCenterPop.OnMyItemClickListener + ) { + +// XPopup.Builder(ctx) // +// .hasNavigationBar(false) +// .isDestroyOnDismiss(true) //对于只使用一次的弹窗对象,推荐设置这个 +// .asCustom(SimCenterPop(ctx,message).setOnMyItemClickListener(object : SimCenterPop.OnMyItemClickListener{ +// override fun onItemClick() { +// val intent = Intent(ctx, CertificatesActivity::class.java) +// intent.putExtra("index", type) +// ctx.startActivity(intent) +// } +// })) +// .show() + + XPopup.Builder(ctx) // + .hasNavigationBar(false) + .isDestroyOnDismiss(true) //对于只使用一次的弹窗对象,推荐设置这个 + .asCustom(SimCenterPop(ctx, message).setOnMyItemClickListener(onMyItemClickListener)) + .show() + + } + + fun showSimCenPop( + ctx: Context, + message: String, + left: String, + right: String, + onMyItemClickListener: SimCenterPop.OnMyItemClickListener + ) { + +// XPopup.Builder(ctx) // +// .hasNavigationBar(false) +// .isDestroyOnDismiss(true) //对于只使用一次的弹窗对象,推荐设置这个 +// .asCustom(SimCenterPop(ctx,message).setOnMyItemClickListener(object : SimCenterPop.OnMyItemClickListener{ +// override fun onItemClick() { +// val intent = Intent(ctx, CertificatesActivity::class.java) +// intent.putExtra("index", type) +// ctx.startActivity(intent) +// } +// })) +// .show() + + XPopup.Builder(ctx) // + .hasNavigationBar(false) + .isDestroyOnDismiss(true) //对于只使用一次的弹窗对象,推荐设置这个 + .asCustom( + SimCenterPop(ctx, message, left, right).setOnMyItemClickListener( + onMyItemClickListener + ) + ) + .show() + + } + +} \ No newline at end of file diff --git a/app/src/main/res/drawable/bg_round2.xml b/app/src/main/res/drawable/bg_round2.xml new file mode 100644 index 0000000..d930abc --- /dev/null +++ b/app/src/main/res/drawable/bg_round2.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/popup_qq_msg.xml b/app/src/main/res/layout/popup_qq_msg.xml new file mode 100644 index 0000000..be8ffd3 --- /dev/null +++ b/app/src/main/res/layout/popup_qq_msg.xml @@ -0,0 +1,17 @@ + + + + \ No newline at end of file