lmw
2023-04-17 51f657872f152a115fb055ad8860093a5cdbc12d
隐私权限相关
16个文件已修改
5个文件已删除
4个文件已添加
269 ■■■■■ 已修改文件
amaplib/libs/arm64-v8a/libAMapSDK_NAVI_v7_4_0.so 补丁 | 查看 | 原始文档 | blame | 历史
amaplib/libs/arm64-v8a/libmsc.so 补丁 | 查看 | 原始文档 | blame | 历史
amaplib/libs/arm64-v8a/libneonuijni.so 补丁 | 查看 | 原始文档 | blame | 历史
app/build.gradle 10 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/com/fuban/user/dialog/UserRuleDialog.kt 27 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/com/fuban/user/ui/MainActivity.kt 31 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/com/fuban/user/ui/SplashActivity.kt 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/com/fuban/user/ui/TransparentStatusBarActivity.kt 140 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/com/fuban/user/ui/login/onekey/OneKeyLoginUtil.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/com/fuban/user/ui/trip/MapTripFragment.kt 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/com/fuban/user/utils/Const.kt 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/com/fuban/user/utils/InnerJsInterface.java 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/res/layout/drawer_mine.xml 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/res/mipmap-hdpi/ic_launcher.png 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/res/mipmap-xhdpi/ic_launcher.png 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/res/mipmap-xxhdpi/ic_launcher.png 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/res/mipmap-xxhdpi/icon_logo.png 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/res/mipmap-xxxhdpi/ic_launcher.png 补丁 | 查看 | 原始文档 | blame | 历史
umeng_sdk/libs/armeabi-v7a/libweibosdkcore.so 补丁 | 查看 | 原始文档 | blame | 历史
umeng_sdk/libs/armeabi/libweibosdkcore.so 补丁 | 查看 | 原始文档 | blame | 历史
umeng_sdk/libs/umeng-uverify-2.2.0.aar 补丁 | 查看 | 原始文档 | blame | 历史
umeng_sdk/libs/weiboSDKCore.jar 补丁 | 查看 | 原始文档 | blame | 历史
xldutils-kotlin/src/main/AndroidManifest.xml 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xldutils-kotlin/src/main/java/cn/sinata/xldutils/Util.kt 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xldutils-kotlin/src/main/java/cn/sinata/xldutils/activity/WebViewActivity.kt 4 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
amaplib/libs/arm64-v8a/libAMapSDK_NAVI_v7_4_0.so
Binary files differ
amaplib/libs/arm64-v8a/libmsc.so
Binary files differ
amaplib/libs/arm64-v8a/libneonuijni.so
Binary files differ
app/build.gradle
@@ -10,8 +10,8 @@
        applicationId "com.fuban.user"
        minSdkVersion 21
        targetSdkVersion 29
        versionCode 1
        versionName "1.0"
        versionCode 4
        versionName "3.0.1"
        testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
    }
@@ -30,9 +30,9 @@
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
            signingConfig signingConfigs.release
            ndk {
                abiFilters "armeabi-v7a" // 保留这种架构的CPU
            }
//            ndk {
//                abiFilters "armeabi-v7a" // 保留这种架构的CPU
//            }
            applicationVariants.all { variant ->
                // 更新至Android Studio 3.3 gradle 4.10.1
                variant.outputs.all {
app/src/main/java/com/fuban/user/dialog/UserRuleDialog.kt
@@ -7,11 +7,14 @@
import android.view.View
import android.view.ViewGroup
import android.webkit.WebChromeClient
import android.webkit.WebSettings
import android.webkit.WebView
import androidx.fragment.app.DialogFragment
import cn.sinata.xldutils.utils.SPUtils
import cn.sinata.xldutils.utils.screenWidth
import com.fuban.user.R
import com.fuban.user.utils.Const
import com.fuban.user.utils.InnerJsInterface
import kotlinx.android.synthetic.main.dialog_user_rule.*
import org.jetbrains.anko.wrapContent
@@ -43,20 +46,37 @@
        super.onViewCreated(view, savedInstanceState)
        val settings = sc_content.settings
        settings.javaScriptEnabled = true
        settings.cacheMode = WebSettings.LOAD_CACHE_ELSE_NETWORK
        settings.javaScriptCanOpenWindowsAutomatically = true
        settings.builtInZoomControls = true
        settings.useWideViewPort = false //将图片调整到适合webview的大小
        settings.setSupportZoom(false) //支持缩放
        settings.supportMultipleWindows() //多窗口
        settings.loadWithOverviewMode = true // 页面支持缩放:
        settings.useWideViewPort = true //设置此属性,可任意比例缩放
        settings.defaultTextEncodingName = "utf-8"
        settings.domStorageEnabled = true
        settings.cacheMode = WebSettings.LOAD_CACHE_ELSE_NETWORK //关闭webview中缓存
        settings.allowFileAccess = true //设置可以访问文件
        settings.setNeedInitialFocus(true) //当webview调用requestFocus时为webview设置节点
        settings.javaScriptCanOpenWindowsAutomatically = true //支持通过JS打开新窗口
        settings.loadsImagesAutomatically = true //支持自动加载图片
        sc_content.isScrollContainer = false
        sc_content.isScrollbarFadingEnabled = false
        sc_content.scrollBarStyle = View.SCROLLBARS_OUTSIDE_OVERLAY
        sc_content.webChromeClient = object : WebChromeClient() {}
        sc_content.loadData(privacy,"text/html; charset=utf-8", "utf-8")
        val sHead =
            "<html><head><meta name=\"viewport\" content=\"width=device-width, " + "initial-scale=1.0, minimum-scale=0.5, maximum-scale=2.0, user-scalable=yes\" />" + "<style>img{max-width:100% !important;height:auto !important;}</style>" + "<style>body{max-width:100% !important;}</style>" + "</head><body>"
        sc_content.loadDataWithBaseURL(null, sHead + privacy, "text/html", "utf-8", null)
        tv_cancel.setOnClickListener {
            dismiss()
        }
        rg_title.setOnCheckedChangeListener { _, i ->
            if (i == R.id.rb_privacy)
                sc_content.loadData(privacy,"text/html; charset=utf-8", "utf-8")
                sc_content.loadDataWithBaseURL(null, sHead + privacy, "text/html", "utf-8", null)
            else
                sc_content.loadData(user,"text/html; charset=utf-8", "utf-8")
                sc_content.loadDataWithBaseURL(null, sHead + user, "text/html", "utf-8", null)
        }
        tv_ok.setOnClickListener {
            SPUtils.instance().put(Const.User.IS_AGREE,true).apply()
@@ -70,6 +90,7 @@
    }
    interface OnDismiss{
        fun onDismiss()
    }
app/src/main/java/com/fuban/user/ui/MainActivity.kt
@@ -140,7 +140,12 @@
            startActivity<ServiceActivity>()
        }
        iv_scan.setOnClickListener {
            if (checkLogin())
            if (checkLogin()) {
                if (!RxPermissions(this).isGranted(Manifest.permission.CAMERA) //没有权限且明确拒绝就不再申请权限
                    && SPUtils.instance().getBoolean(Const.User.IS_REFUSE_PERMISSION_CAMERA)
                ) {
                    myToast("请在应用权限页面开启相机权限")
                } else {
                RxPermissions(this).request(Manifest.permission.CAMERA).subscribe {
                    if (it)
                        startActivity<ScanActivity>(
@@ -148,10 +153,15 @@
                            "startLon" to startLon,
                            "startName" to startName
                        )
                    else
                        else{
                        myToast("请在应用权限页面开启相机权限")
                            SPUtils.instance().put(Const.User.IS_REFUSE_PERMISSION_CAMERA,true).apply()
                }
        }
                }
            }
        }
    }
@@ -186,7 +196,12 @@
            }
        }else{
            cl_title.visible()
            initTwoView(isOpen, func?: arrayListOf(), FBApplication.lat, FBApplication.lon)
            initTwoView(
                isOpen,
                func ?: arrayListOf(),
                if (lat != 0.0) lat else FBApplication.lat,
                if (lon != 0.0) lon else FBApplication.lon
            )
        }
    }
@@ -235,17 +250,25 @@
    }
    private fun initLocation(function: () -> Unit) {
        if (!RxPermissions(this).isGranted(Manifest.permission.ACCESS_FINE_LOCATION) //没有权限且明确拒绝就不再申请权限
            && SPUtils.instance().getBoolean(Const.User.IS_REFUSE_PERMISSION_LOCATION)
        ) {
            initTwoView(false, arrayListOf(), 0.0, 0.0)
        } else {
        val disposable =
            RxPermissions(this@MainActivity).request(Manifest.permission.ACCESS_FINE_LOCATION)
                .subscribe {
                    if (it) {
                        function()
                    } else {
                            SPUtils.instance().put(Const.User.IS_REFUSE_PERMISSION_LOCATION, true)
                                .apply()
                            initTwoView(false, arrayListOf(), 0.0, 0.0)
                    }
                }
        onBindHelper(disposable)
    }
    }
    private fun showAlert() {
        val tipDialog = AlertDialog()
app/src/main/java/com/fuban/user/ui/SplashActivity.kt
@@ -81,7 +81,6 @@
    private fun initApplication() {
        app.initUm()
    }
    private fun requestLocation() {
app/src/main/java/com/fuban/user/ui/TransparentStatusBarActivity.kt
@@ -1,39 +1,19 @@
package com.fuban.user.ui
import android.graphics.Color
import android.os.Bundle
import android.os.Environment
import android.util.Log
import android.view.View
import cn.sinata.xldutils.R
import cn.sinata.xldutils.activity.TitleActivity
import cn.sinata.xldutils.utils.SPUtils
import cn.sinata.xldutils.utils.myToast
import cn.sinata.xldutils.utils.optInt
import cn.sinata.xldutils.utils.optString
import cn.sinata.xldutils.view.TitleBar
import com.github.zackratos.ultimatebar.UltimateBar
import com.fuban.user.network.HttpManager
import com.fuban.user.network.request
import com.fuban.user.ui.login.BindPhoneActivity
import com.fuban.user.ui.login.LoginActivity
import com.fuban.user.utils.Const
import com.umeng.umverify.UMResultCode
import com.umeng.umverify.UMVerifyHelper
import com.umeng.umverify.listener.UMTokenResultListener
import com.umeng.umverify.model.UMTokenRet
import com.umeng.umverify.view.UMAbstractPnsViewDelegate
import com.umeng.umverify.view.UMAuthRegisterXmlConfig
import com.umeng.umverify.view.UMAuthUIConfig
import org.jetbrains.anko.backgroundColorResource
import org.jetbrains.anko.find
import org.jetbrains.anko.startActivity
import java.io.File
abstract class TransparentStatusBarActivity :
    TitleActivity() {
    private var mTokenResultListener: UMTokenResultListener? = null
    private var mPhoneNumberAuthHelper: UMVerifyHelper? = null
abstract class TransparentStatusBarActivity : TitleActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
@@ -58,7 +38,7 @@
    fun checkLogin(isLogin:Boolean = true):Boolean{
        return if (SPUtils.instance().getInt(Const.User.USER_ID) == -1){
            if (isLogin)
                gotoLogin()
                startActivity<LoginActivity>()
            false
        } else true
    }
@@ -79,120 +59,4 @@
        } else path
    }
    private fun sdkInit() {
        mTokenResultListener = object : UMTokenResultListener {
            override fun onTokenSuccess(s: String) {
                dismissDialog()
                var tokenRet: UMTokenRet? = null
                try {
                    tokenRet = UMTokenRet.fromJson(s)
                    if (UMResultCode.CODE_START_AUTHPAGE_SUCCESS == tokenRet.code) {
                        Log.e(Const.Tag, "唤起授权页成功:$s")
                    }
                    if (UMResultCode.CODE_GET_TOKEN_SUCCESS == tokenRet.code) {
                        Log.e(Const.Tag, "获取token成功:$s")
                        getResultWithToken(tokenRet.token)
//                        mUIConfig.release()
                    }
                } catch (e: Exception) {
                    e.printStackTrace()
                }
            }
            override fun onTokenFailed(s: String) {
                Log.e(Const.Tag, "获取token失败:$s")
                dismissDialog()
                var tokenRet: UMTokenRet? = null
                mPhoneNumberAuthHelper?.quitLoginPage()
                try {
                    tokenRet = UMTokenRet.fromJson(s)
                    if (UMResultCode.CODE_ERROR_USER_CANCEL == tokenRet?.getCode()) {
                        myToast("取消登录")
                    } else {
                        startActivity<LoginActivity>()
                    }
                } catch (e: Exception) {
                    e.printStackTrace()
                }
//                mUIConfig.release()
            }
        }
        mPhoneNumberAuthHelper = UMVerifyHelper.getInstance(this, mTokenResultListener)
        mPhoneNumberAuthHelper?.removeAuthRegisterXmlConfig()
        mPhoneNumberAuthHelper?.removeAuthRegisterViewConfig()
        mPhoneNumberAuthHelper?.setAuthSDKInfo(Const.LOGIN_KEY)
        val builder = object : UMAuthRegisterXmlConfig.Builder(){}
        builder.setLayout(com.fuban.user.R.layout.activity_one_key_login,object :UMAbstractPnsViewDelegate(){
            override fun onViewCreated(v: View) {
                v.find<TitleBar>(R.id.titleBar).apply {
                    titleView.text = "登录"
                    leftClick {
                        myToast("取消登录")
                        mPhoneNumberAuthHelper?.quitLoginPage()
                    }
                }
            }
        })
        mPhoneNumberAuthHelper?.addAuthRegisterXmlConfig(builder.build())
        mPhoneNumberAuthHelper?.setAuthUIConfig(
            UMAuthUIConfig.Builder()
                .setNavHidden(true)
                .setLogoHidden(true)
                .setPrivacyState(false)
                .setLightColor(true)
                .setStatusBarColor(Color.TRANSPARENT)
                .setStatusBarUIFlag(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN)
                .setWebNavTextSize(20)
                .setNumberSize(20)
                .setNumberColor(Color.BLACK)
                .setAuthPageActIn("in_activity", "out_activity")
                .setAuthPageActOut("in_activity", "out_activity")
                .setVendorPrivacyPrefix("《")
                .setVendorPrivacySuffix("》")
                .setPageBackgroundPath("page_background_color")
                .setLogoImgPath("mytel_app_launcher")
                .setLogBtnBackgroundPath("bg_dark_4dp")
                .create()
        )
    }
    override fun gotoLogin(){
        sdkInit()
        oneKeyLogin()
    }
    private fun oneKeyLogin() {
        mPhoneNumberAuthHelper =
            UMVerifyHelper.getInstance(applicationContext, mTokenResultListener)
//        mUIConfig.configAuthPage()
        getLoginToken(5000)
    }
    fun getResultWithToken(token: String?) {
        HttpManager.oneClickLogin(token?:"").request(this,false, {_,data->
            data?.let {
                SPUtils.instance().put(Const.User.APP_ID,it.optString("appid"))
                    .put(Const.User.TOKEN,it.optString("token"))
                    .put(Const.User.USER_ID,it.optInt("id"))
                    .apply()
                mPhoneNumberAuthHelper!!.quitLoginPage()
                if (this is MainActivity){
                    refreshInfo()
                }
            }
        }){_,_->
            mPhoneNumberAuthHelper!!.hideLoginLoading()
            myToast("登录失败,请选择其他登录方式")
        }
    }
    /**
     * 拉起授权页
     * @param timeout 超时时间
     */
    fun getLoginToken(timeout: Int) {
        mPhoneNumberAuthHelper!!.getLoginToken(this, timeout)
        showDialog("正在唤起授权页")
    }
}
app/src/main/java/com/fuban/user/ui/login/onekey/OneKeyLoginUtil.java
File was deleted
app/src/main/java/com/fuban/user/ui/trip/MapTripFragment.kt
@@ -19,10 +19,7 @@
import cn.sinata.xldutils.gone
import cn.sinata.xldutils.ioScheduler
import cn.sinata.xldutils.rxutils.ResultException
import cn.sinata.xldutils.utils.SpanBuilder
import cn.sinata.xldutils.utils.myToast
import cn.sinata.xldutils.utils.optInt
import cn.sinata.xldutils.utils.toTime
import cn.sinata.xldutils.utils.*
import cn.sinata.xldutils.visible
import com.amap.api.location.AMapLocationClient
import com.amap.api.location.AMapLocationClientOption
@@ -112,8 +109,8 @@
        mMapView.onCreate(savedInstanceState)
        getNotice()
        getBottomAds()
        getRxPermission {
            initMap()
        getRxPermission {
            initLocation()
        }
        initTab()
@@ -381,17 +378,23 @@
    }
    fun getRxPermission(function: () -> Unit) {
        if (!RxPermissions(requireActivity()).isGranted(Manifest.permission.ACCESS_FINE_LOCATION) //没有权限且明确拒绝就不再申请权限
            && SPUtils.instance().getBoolean(Const.User.IS_REFUSE_PERMISSION_LOCATION)){
            function()
//            myToast("没有定位权限")
        }else{
        val disposable =
            RxPermissions(activity!!).request(Manifest.permission.ACCESS_FINE_LOCATION)
                .subscribe {
                    if (it) {
                        function()
                    } else {
                            SPUtils.instance().put(Const.User.IS_REFUSE_PERMISSION_LOCATION,true).apply()
                        function()
                        myToast("没有定位权限")
                    }
                }
        onBindHelper(disposable)
        }
    }
    private var locCount = 0L //定位次数
@@ -400,7 +403,7 @@
        val myLocationStyle = MyLocationStyle()
        myLocationStyle.strokeColor(resources.getColor(R.color.colorBrown))
        myLocationStyle.radiusFillColor(resources.getColor(R.color.colorTransBrown))
        myLocationStyle.interval(3000)
        myLocationStyle.interval(10000)
        myLocationStyle.anchor(0.5f, 0.5f)
        myLocationStyle.myLocationType(MyLocationStyle.LOCATION_TYPE_LOCATION_ROTATE_NO_CENTER)//
        myLocationStyle.myLocationIcon(BitmapDescriptorFactory.fromResource(R.mipmap.icon_coordinate))
@@ -419,6 +422,7 @@
            FBApplication.address = it.address
            FBApplication.cityCode = it.extras.getString("adcode") ?: ""
            if (locCount < 1) {
                Log.e(Const.Tag, "首页:lat:" + mainActivity.lat + ",lon:" + mainActivity.lon)
                if (mainActivity.lat != 0.0)
                    aMap.animateCamera(
                        CameraUpdateFactory.newLatLngZoom(
app/src/main/java/com/fuban/user/utils/Const.kt
@@ -28,7 +28,8 @@
        const val USER_NAME = "userName"
        const val USER_PWD = "pwd"
        const val USER_SEX = "userSex"
        const val IS_AGREE_PERMISSION = "isAgreePermission"
        const val IS_REFUSE_PERMISSION_LOCATION = "isRefusePermissionLocation"
        const val IS_REFUSE_PERMISSION_CAMERA = "isRefusePermissionCamera"
    }
app/src/main/java/com/fuban/user/utils/InnerJsInterface.java
New file
@@ -0,0 +1,21 @@
package com.fuban.user.utils;
import android.util.Log;
import android.webkit.JavascriptInterface;
public class InnerJsInterface {
    @JavascriptInterface
    public void h5Toast(String data) {
    }
    @JavascriptInterface
    @SuppressWarnings("unused")
    public void processHTML(String html) {
        // 在这里处理html源码
        Log.i("Fuban", "processHTML: sdf" + html);
        String sHead = "<html><head><meta name=\"viewport\" content=\"width=device-width, " +"initial-scale=1.0, minimum-scale=0.5, maximum-scale=2.0, user-scalable=yes\" />" +"<style>img{max-width:100% !important;height:auto !important;}</style>"+ "<style>body{max-width:100% !important;}</style>" + "</head><body>";
        html = sHead + html;
    }
}
app/src/main/res/layout/drawer_mine.xml
@@ -118,7 +118,6 @@
                android:layout_height="wrap_content"
                android:drawableStart="@mipmap/icon_me_invoice"
                android:layout_marginStart="11dp"
                android:visibility="gone"
                style="@style/style_form_text_mine"
                android:text="开发票" />
app/src/main/res/mipmap-hdpi/ic_launcher.png

app/src/main/res/mipmap-xhdpi/ic_launcher.png

app/src/main/res/mipmap-xxhdpi/ic_launcher.png

app/src/main/res/mipmap-xxhdpi/icon_logo.png

app/src/main/res/mipmap-xxxhdpi/ic_launcher.png

umeng_sdk/libs/armeabi-v7a/libweibosdkcore.so
Binary files differ
umeng_sdk/libs/armeabi/libweibosdkcore.so
Binary files differ
umeng_sdk/libs/umeng-uverify-2.2.0.aar
Binary files differ
umeng_sdk/libs/weiboSDKCore.jar
Binary files differ
xldutils-kotlin/src/main/AndroidManifest.xml
@@ -6,7 +6,6 @@
    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.READ_PHONE_STATE" />
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.CALL_PHONE" />
    <application>
        <activity
xldutils-kotlin/src/main/java/cn/sinata/xldutils/Util.kt
@@ -40,17 +40,10 @@
fun <T> Observable<T>.defaultScheduler(): Observable<T> = this.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread())
fun Activity.callPhone(phone:String?){
//    val isAllow = permission(Manifest.permission.CALL_PHONE,"拨号权限",15)
    RxPermissions(this).request(Manifest.permission.CALL_PHONE).subscribe {
        if (it) {
            val p = phone ?: ""
            val intent = Intent(Intent.ACTION_DIAL)
            intent.data = Uri.parse("tel:" + p)
            this.startActivity(intent)
        } else {
            toast("没有拨号权限")
        }
    }
}
fun Fragment.callPhone(phone:String?){
xldutils-kotlin/src/main/java/cn/sinata/xldutils/activity/WebViewActivity.kt
@@ -65,7 +65,9 @@
        val type = intent.getIntExtra("type", 1)
        val url = intent.getStringExtra("url")
        if (type == 1) {
            webView.loadData(url, "text/html; charset=utf-8", "utf-8")
            val sHead =
                "<html><head><meta name=\"viewport\" content=\"width=device-width, " + "initial-scale=1.0, minimum-scale=0.5, maximum-scale=2.0, user-scalable=yes\" />" + "<style>img{max-width:100% !important;height:auto !important;}</style>" + "<style>body{max-width:100% !important;}</style>" + "</head><body>"
            webView.loadDataWithBaseURL(null, sHead + url, "text/html", "utf-8", null)
        } else {
            webView.loadUrl(url)
        }