amaplib/libs/arm64-v8a/libAMapSDK_NAVI_v7_4_0.soBinary files differ
amaplib/libs/arm64-v8a/libmsc.soBinary files differ
amaplib/libs/arm64-v8a/libneonuijni.soBinary 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,18 +140,28 @@ startActivity<ServiceActivity>() } iv_scan.setOnClickListener { if (checkLogin()) RxPermissions(this).request(Manifest.permission.CAMERA).subscribe { if (it) startActivity<ScanActivity>( "startLat" to startLat, "startLon" to startLon, "startName" to startName ) else myToast("请在应用权限页面开启相机权限") 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>( "startLat" to startLat, "startLon" to startLon, "startName" to startName ) else{ myToast("请在应用权限页面开启相机权限") SPUtils.instance().put(Const.User.IS_REFUSE_PERMISSION_CAMERA,true).apply() } } } } } } @@ -177,16 +187,21 @@ isOpen = intent.getBooleanExtra("isOpen", false) lat = intent.getDoubleExtra("lat", 0.0) lon = intent.getDoubleExtra("lon", 0.0) if (!isOpen){ if (!isOpen) { initLocation { initLocationS { b, fucS -> cl_title.visible() initTwoView(b, fucS, FBApplication.lat, FBApplication.lon) } } }else{ } 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,16 +250,24 @@ } private fun initLocation(function: () -> Unit) { val disposable = RxPermissions(this@MainActivity).request(Manifest.permission.ACCESS_FINE_LOCATION) .subscribe { if (it) { function() } else { 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) onBindHelper(disposable) } } private fun showAlert() { 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() initMap() getRxPermission { initMap() initLocation() } initTab() @@ -381,17 +378,23 @@ } fun getRxPermission(function: () -> Unit) { val disposable = RxPermissions(activity!!).request(Manifest.permission.ACCESS_FINE_LOCATION) .subscribe { if (it) { function() } else { function() myToast("没有定位权限") 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() } } } onBindHelper(disposable) 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.pngapp/src/main/res/mipmap-xhdpi/ic_launcher.pngapp/src/main/res/mipmap-xxhdpi/ic_launcher.pngapp/src/main/res/mipmap-xxhdpi/icon_logo.pngapp/src/main/res/mipmap-xxxhdpi/ic_launcher.pngumeng_sdk/libs/armeabi-v7a/libweibosdkcore.soBinary files differ
umeng_sdk/libs/armeabi/libweibosdkcore.soBinary files differ
umeng_sdk/libs/umeng-uverify-2.2.0.aarBinary files differ
umeng_sdk/libs/weiboSDKCore.jarBinary 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("没有拨号权限") } } val p = phone ?: "" val intent = Intent(Intent.ACTION_DIAL) intent.data = Uri.parse("tel:" + p) this.startActivity(intent) } 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) }