From 3d631dbadf98f3f77c6e955cb36219217ef73ab5 Mon Sep 17 00:00:00 2001 From: 唐浩 <15928265276@163.com> Date: 星期二, 09 九月 2025 12:56:48 +0800 Subject: [PATCH] change by tanghao --- app/src/main/java/com/ziang/driver/utils/AudioRecoderUtils.java | 364 ++++----- app/src/main/java/com/ziang/driver/ui/main/GetOrderFragment.kt | 50 + ChipsLayoutManager/build.gradle | 86 +- app/src/main/java/com/ziang/driver/ui/adapter/OrderHallAdapter.kt | 30 app/src/main/java/com/ziang/driver/ui/adapter/MainSmallAdapter.kt | 101 ++ app/src/main/java/com/ziang/driver/base/BaseEvent.java | 16 app/src/main/res/layout/fragment_base_recycler.xml | 6 app/src/main/java/com/ziang/driver/ui/mine/MineActivity.kt | 7 app/src/main/java/com/ziang/driver/bean/OrderGradData.java | 20 app/src/main/res/layout/activity_order_call.xml | 2 app/src/main/java/com/ziang/driver/netUtls/NetKit.kt | 72 + app/src/main/res/layout/include_order_top_cargo.xml | 2 app/src/main/res/layout/item_small_order.xml | 219 +++++ app/src/main/res/layout/activity_order_over_city.xml | 2 build.gradle | 22 app/src/main/res/layout/activity_main.xml | 698 ++++++++++-------- app/src/main/java/com/ziang/driver/netUtls/HttpManager.java | 15 app/src/main/java/com/ziang/driver/base/Const.java | 1 app/src/main/java/com/ziang/driver/ui/main/VoiceOrderFragment.kt | 71 + app/src/main/java/com/ziang/driver/ui/main/MainActivity.kt | 217 ++++- app/build.gradle | 4 app/src/main/res/layout/include_order_top.xml | 2 app/src/main/res/layout/activity_select_start_point.xml | 2 app/src/main/res/layout/item_hall.xml | 2 app/src/main/java/com/ziang/driver/base/MyBaseFragment.java | 6 app/src/main/java/com/ziang/driver/bean/OrderBean.java | 19 app/src/main/res/layout/item_main_list.xml | 2 app/src/main/java/com/ziang/driver/bean/AgreeBean.java | 4 app/src/main/java/com/ziang/driver/ui/main/MainSmallFragment.kt | 61 + app/src/main/java/com/ziang/driver/ui/main/CallOrderActivity.kt | 5 app/src/main/res/layout/item_trip_item.xml | 2 app/src/main/res/layout/fragment_main_small.xml | 14 app/src/main/java/com/ziang/driver/base/BaseViewHolder.java | 3 app/src/main/java/com/ziang/driver/base/MyApplication.kt | 49 app/src/main/java/com/ziang/driver/base/MyBaseActivity.java | 5 app/src/main/java/com/ziang/driver/base/gaode/gpsnav/util/TTSController.java | 4 app/proguard-rules.pro | 5 app/src/main/java/com/ziang/driver/base/BaseRecyclerFragment.kt | 4 38 files changed, 1,500 insertions(+), 694 deletions(-) diff --git a/ChipsLayoutManager/build.gradle b/ChipsLayoutManager/build.gradle index 762f7e5..d2b9b1e 100644 --- a/ChipsLayoutManager/build.gradle +++ b/ChipsLayoutManager/build.gradle @@ -1,5 +1,5 @@ plugins { - id "com.jfrog.bintray" version "1.7.3" +// id "com.jfrog.bintray" version "1.7.3" id "com.github.dcendents.android-maven" version "1.5" } @@ -149,45 +149,45 @@ } } -Properties properties = new Properties() -properties.load(project.rootProject.file('local.properties').newDataInputStream()) - -bintray { - user = properties.getProperty("bintray.user") - key = properties.getProperty("bintray.apikey") - - configurations = ['archives'] //When uploading configuration files - - dryRun = false //[Default: false] Whether to run this as dry-run, without deploying - publish = true //[Default: false] Whether version should be auto published after an upload - override = true //[Default: false] Whether to override version artifacts already published - - //Package configuration. The plugin will use the repo and name properties to check if the package already exists. In that case, there's no need to configure the other package properties (like userOrg, desc, etc). - pkg { - repo = bintrayRepo - name = bintrayName - desc = libraryDescription - websiteUrl = siteUrl - issueTrackerUrl = 'https://github.com/BelooS/ChipsLayoutManager/issues' - vcsUrl = gitUrl - licenses = allLicenses - publish = true - publicDownloadNumbers = true - - githubRepo = 'BelooS/ChipsLayoutManager' - githubReleaseNotesFile = 'README.md' - - //Optional version descriptor - version { - name = libraryVersion //Bintray logical version name - desc = '' //Optional - Version-specific description' - vcsTag = libraryVersion - - gpg { - sign = true //Determines whether to GPG sign the files. The default is false - passphrase = properties.getProperty("bintray.gpg.password") - //Optional. The passphrase for GPG signing' - } - } - } -} \ No newline at end of file +//Properties properties = new Properties() +//properties.load(project.rootProject.file('local.properties').newDataInputStream()) +// +//bintray { +// user = properties.getProperty("bintray.user") +// key = properties.getProperty("bintray.apikey") +// +// configurations = ['archives'] //When uploading configuration files +// +// dryRun = false //[Default: false] Whether to run this as dry-run, without deploying +// publish = true //[Default: false] Whether version should be auto published after an upload +// override = true //[Default: false] Whether to override version artifacts already published +// +// //Package configuration. The plugin will use the repo and name properties to check if the package already exists. In that case, there's no need to configure the other package properties (like userOrg, desc, etc). +// pkg { +// repo = bintrayRepo +// name = bintrayName +// desc = libraryDescription +// websiteUrl = siteUrl +// issueTrackerUrl = 'https://github.com/BelooS/ChipsLayoutManager/issues' +// vcsUrl = gitUrl +// licenses = allLicenses +// publish = true +// publicDownloadNumbers = true +// +// githubRepo = 'BelooS/ChipsLayoutManager' +// githubReleaseNotesFile = 'README.md' +// +// //Optional version descriptor +// version { +// name = libraryVersion //Bintray logical version name +// desc = '' //Optional - Version-specific description' +// vcsTag = libraryVersion +// +// gpg { +// sign = true //Determines whether to GPG sign the files. The default is false +// passphrase = properties.getProperty("bintray.gpg.password") +// //Optional. The passphrase for GPG signing' +// } +// } +// } +//} \ No newline at end of file diff --git a/app/build.gradle b/app/build.gradle index 0cfdb8f..47005a7 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -24,8 +24,8 @@ applicationId "com.ziang.driver" minSdkVersion 26 targetSdkVersion 30 - versionCode 24 - versionName "2.9" + versionCode 27 + versionName "3.2" multiDexEnabled true testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" } diff --git a/app/proguard-rules.pro b/app/proguard-rules.pro index 7da9cd0..5b15771 100644 --- a/app/proguard-rules.pro +++ b/app/proguard-rules.pro @@ -132,4 +132,7 @@ -keep class cn.jiguang.** { *; } -dontwarn com.google.** -keep class com.google.gson.** {*;} --keep class com.google.protobuf.** {*;} \ No newline at end of file +-keep class com.google.protobuf.** {*;} + +-dontwarn com.tencent.bugly.** +-keep public class com.tencent.bugly.**{*;} \ No newline at end of file diff --git a/app/src/main/java/com/ziang/driver/base/BaseEvent.java b/app/src/main/java/com/ziang/driver/base/BaseEvent.java index 278f7cc..b0612f6 100644 --- a/app/src/main/java/com/ziang/driver/base/BaseEvent.java +++ b/app/src/main/java/com/ziang/driver/base/BaseEvent.java @@ -55,6 +55,9 @@ public static final int APP_BACKGROUND = 10033; // App置于后台 public static final int APP_LOG= 10099; // 日志 + public static final int ORDER_GRAB_EVENT= 10100; // 订单被抢,关闭强单页 + public static final int GET_SMALL_ORDER= 10101; // 获取到推送的小程序订单显示在前台 + private String msg; private int code; @@ -111,6 +114,19 @@ this.typeTwo = typeTwo; } + public BaseEvent(int code, int type, int typeTwo,String msg) { + this.code = code; + this.type = type; + this.typeTwo = typeTwo; + this.msg = msg; + } + + public BaseEvent(int code, int type, String msg) { + this.code = code; + this.type = type; + this.msg = msg; + } + public BaseEvent(int code, String msg, String msgTwo, String msgthree) { this.msg = msg; this.code = code; diff --git a/app/src/main/java/com/ziang/driver/base/BaseRecyclerFragment.kt b/app/src/main/java/com/ziang/driver/base/BaseRecyclerFragment.kt index fb2994e..81b0962 100644 --- a/app/src/main/java/com/ziang/driver/base/BaseRecyclerFragment.kt +++ b/app/src/main/java/com/ziang/driver/base/BaseRecyclerFragment.kt @@ -24,6 +24,7 @@ * Desc: 列表fragment */ abstract class BaseRecyclerFragment<Item>(var adapter: BaseRvAdapter<Item>) : MyBaseFragment() { + var showQuan = true protected var page = 1 protected var pageSize = 20 protected var isShowNothingLayout = true @@ -191,12 +192,11 @@ } - fun callRefresh() { val map = mapObject() map?.set("size",10) map?.set("pageNum",page) - callNet(pathUrl()!!,map!!,{ + callNet(showQuan,pathUrl()!!,map!!,{ if (it == null || it.isEmpty()) { return@callNet } diff --git a/app/src/main/java/com/ziang/driver/base/BaseViewHolder.java b/app/src/main/java/com/ziang/driver/base/BaseViewHolder.java index ce8db1f..a3f2f12 100644 --- a/app/src/main/java/com/ziang/driver/base/BaseViewHolder.java +++ b/app/src/main/java/com/ziang/driver/base/BaseViewHolder.java @@ -1,5 +1,6 @@ package com.ziang.driver.base; +import android.os.CountDownTimer; import android.view.View; import androidx.annotation.NonNull; @@ -12,8 +13,10 @@ */ public class BaseViewHolder extends RecyclerView.ViewHolder { + public CountDownTimer mDownTimer = null; public BaseViewHolder(@NonNull View itemView) { + super(itemView); } } diff --git a/app/src/main/java/com/ziang/driver/base/Const.java b/app/src/main/java/com/ziang/driver/base/Const.java index 8749d18..0464a32 100644 --- a/app/src/main/java/com/ziang/driver/base/Const.java +++ b/app/src/main/java/com/ziang/driver/base/Const.java @@ -58,6 +58,7 @@ public final static String REASSIGN = "REASSIGN"; public final static String OFFLINE = "OFFLINE"; public final static String EXPIRE_WORK = "EXPIRE_WORK"; + public final static String ORDER_GRAB = "ORDER_GRAB"; } public static String REFUSE_LOCATION = "REFUSE_LOCATION"; diff --git a/app/src/main/java/com/ziang/driver/base/MyApplication.kt b/app/src/main/java/com/ziang/driver/base/MyApplication.kt index 38084d6..89a2b7e 100644 --- a/app/src/main/java/com/ziang/driver/base/MyApplication.kt +++ b/app/src/main/java/com/ziang/driver/base/MyApplication.kt @@ -10,29 +10,30 @@ import cn.sinata.xldutils.BaseApplication import cn.sinata.xldutils.utils.sysErr import com.amap.api.location.AMapLocation +import com.google.gson.Gson +import com.google.gson.reflect.TypeToken +import com.tencent.bugly.crashreport.CrashReport +import com.umeng.commonsdk.UMConfigure +import com.umeng.socialize.PlatformConfig +import com.xuexiang.xui.XUI import com.ziang.driver.base.gaode.gpsnav.util.TTSController import com.ziang.driver.bean.CarLocationBean import com.ziang.driver.bean.OrderResData import com.ziang.driver.bean.OrderSimpleData import com.ziang.driver.bean.websocket.HeartBean import com.ziang.driver.netUtls.Api -import com.ziang.driver.netUtls.getUserId -import com.ziang.driver.ui.pub.LoginActivity -import com.ziang.driver.utils.Cache.CacheKey -import com.ziang.driver.utils.Cache.CacheUtil -import com.ziang.driver.utils.LogUtils -import com.google.gson.Gson -import com.tencent.bugly.crashreport.CrashReport -import com.umeng.commonsdk.UMConfigure -import com.umeng.socialize.PlatformConfig -import com.xuexiang.xui.XUI import com.ziang.driver.netUtls.callNet import com.ziang.driver.netUtls.getMapByAny +import com.ziang.driver.netUtls.getUserId import com.ziang.driver.ui.main.GetOrderFragment import com.ziang.driver.ui.main.VoiceOrderFragment +import com.ziang.driver.ui.pub.LoginActivity +import com.ziang.driver.utils.Cache.CacheUtil +import com.ziang.driver.utils.LogUtils import org.greenrobot.eventbus.EventBus import org.jetbrains.anko.toast import org.json.JSONObject +import java.lang.reflect.Type import java.security.SecureRandom import java.security.cert.X509Certificate import java.util.* @@ -63,7 +64,7 @@ XUI.init(this) registerActivityLifecycleCallbacks(this) initSocket() - CrashReport.initCrashReport(this, "3685c4860a", true) + CrashReport.initCrashReport(this, "06c8612c1a", true) } fun initPersionDate(){ @@ -116,6 +117,10 @@ Const.SOCKET_METHOD.EXPIRE_WORK -> { EventBus.getDefault().post(BaseEvent(BaseEvent.CHANGE_CAR_SUCCESS)) } + Const.SOCKET_METHOD.ORDER_GRAB -> { + var dataBean = Gson().fromJson(data,OrderSimpleData::class.java) + EventBus.getDefault().post(BaseEvent(BaseEvent.ORDER_GRAB_EVENT,dataBean.orderId.toString())) + } Const.SOCKET_METHOD.ORDER_STATUS -> { val orderSimpleData = Gson().fromJson( @@ -135,6 +140,7 @@ when (orderSimpleData.orderType) { 1,2 -> { if (!orderSimpleData.audioLinkUrl.isNullOrEmpty()){ + Log.e("走正常声音单","订单id为"+orderSimpleData.orderId) EventBus.getDefault().post(BaseEvent(BaseEvent.APP_LOG,"当前无订单弹窗,显示此订单:id-${orderSimpleData.orderId},语音路径:${orderSimpleData.audioLinkUrl}")) voiceOrder = orderSimpleData (act as MyBaseActivity).showOrder( @@ -145,19 +151,22 @@ orderSimpleData.audioLinkUrl ) } else{ + //小程序订单 var map = getMapByAny() map["orderId"] = orderSimpleData.orderId.toString() map["orderType"] = orderSimpleData.orderType.toString() map["lat"] = getLocation().latitude map["lon"] = getLocation().longitude callNet(this, Api.queryPushOrder, map) { - (act as MyBaseActivity).showOrderWithData( - orderSimpleData.orderId.toString(), - orderSimpleData.orderType.toString(), - orderSimpleData.time, - 1, - it - ) + EventBus.getDefault().post(BaseEvent(BaseEvent.GET_SMALL_ORDER + ,orderSimpleData.orderType,orderSimpleData.time,it)) +// (act as MyBaseActivity).showOrderWithData( +// orderSimpleData.orderId.toString(), +// orderSimpleData.orderType.toString(), +// orderSimpleData.time, +// 1, +// it +// ) } } } @@ -267,6 +276,10 @@ fun orderInfo(data: OrderSimpleData?) } + public fun getFirstActivity():Activity{ + return activities[0]!! + } + companion object { private const val TAG = "MyApplication" diff --git a/app/src/main/java/com/ziang/driver/base/MyBaseActivity.java b/app/src/main/java/com/ziang/driver/base/MyBaseActivity.java index c7e3187..6f42d9a 100644 --- a/app/src/main/java/com/ziang/driver/base/MyBaseActivity.java +++ b/app/src/main/java/com/ziang/driver/base/MyBaseActivity.java @@ -1,6 +1,7 @@ package com.ziang.driver.base; import android.annotation.SuppressLint; +import android.app.Activity; import android.content.Context; import android.content.Intent; import android.content.res.Configuration; @@ -158,6 +159,10 @@ intent.putExtra("orderType", orderType); intent.putExtra("time", time); intent.putExtra("type", type); + Activity act = MyApplication.Companion.getInstance().getFirstActivity(); + if (act instanceof VoiceOrderFragment){ + return; + } startActivity(intent); } diff --git a/app/src/main/java/com/ziang/driver/base/MyBaseFragment.java b/app/src/main/java/com/ziang/driver/base/MyBaseFragment.java index 8305a5b..df2c567 100644 --- a/app/src/main/java/com/ziang/driver/base/MyBaseFragment.java +++ b/app/src/main/java/com/ziang/driver/base/MyBaseFragment.java @@ -86,10 +86,10 @@ @Override public void showDialog() { // super.showDialog(); - if (easyPopup == null){ - easyPopup = DialogUtil.INSTANCE.getPopupwindow(getActivity(), R.layout.progress_dialog_main); + if (easyPopup == null && isAdded() && isVisible()){ + easyPopup = DialogUtil.INSTANCE.getPopupwindow(requireActivity(), R.layout.progress_dialog_main); } - if (easyPopup.isShowing()){ + if (easyPopup == null || easyPopup.isShowing()){ return; } FragmentActivity activity = getActivity(); diff --git a/app/src/main/java/com/ziang/driver/base/gaode/gpsnav/util/TTSController.java b/app/src/main/java/com/ziang/driver/base/gaode/gpsnav/util/TTSController.java index 895c7cc..03d5e74 100644 --- a/app/src/main/java/com/ziang/driver/base/gaode/gpsnav/util/TTSController.java +++ b/app/src/main/java/com/ziang/driver/base/gaode/gpsnav/util/TTSController.java @@ -67,6 +67,10 @@ public void setVideoText(String s){ try { +// if (tts.isPlaying()){ +// +// } +// setVideoTextInNavi(s); tts.playText(s); }catch (Exception e){ diff --git a/app/src/main/java/com/ziang/driver/bean/AgreeBean.java b/app/src/main/java/com/ziang/driver/bean/AgreeBean.java index 4fc679d..6f7645c 100644 --- a/app/src/main/java/com/ziang/driver/bean/AgreeBean.java +++ b/app/src/main/java/com/ziang/driver/bean/AgreeBean.java @@ -1,5 +1,8 @@ package com.ziang.driver.bean; +import android.os.Handler; +import android.os.Message; + public class AgreeBean { /** @@ -14,6 +17,7 @@ + public int getCode() { return code; } diff --git a/app/src/main/java/com/ziang/driver/bean/OrderBean.java b/app/src/main/java/com/ziang/driver/bean/OrderBean.java index ab6cfec..126b4cf 100644 --- a/app/src/main/java/com/ziang/driver/bean/OrderBean.java +++ b/app/src/main/java/com/ziang/driver/bean/OrderBean.java @@ -12,6 +12,25 @@ private DataBean data; private String msg; + private Long time = 0L; //收到订单时长 + private Long overTime = 0L; //倒计时时长 + + public Long getOverTime() { + return overTime; + } + + public void setOverTime(Long overTime) { + this.overTime = overTime; + } + + public Long getTime() { + return time; + } + + public void setTime(Long time) { + this.time = time; + } + public Integer getCode() { return code; } diff --git a/app/src/main/java/com/ziang/driver/bean/OrderGradData.java b/app/src/main/java/com/ziang/driver/bean/OrderGradData.java new file mode 100644 index 0000000..e68eb68 --- /dev/null +++ b/app/src/main/java/com/ziang/driver/bean/OrderGradData.java @@ -0,0 +1,20 @@ +package com.ziang.driver.bean; + +import com.google.gson.annotations.SerializedName; + +import java.util.Map; + +public class OrderGradData { + public Map<String,String> orderId; + public int orderType; + @SerializedName("state") + public int time; + +// { +// "code": 200, +// "msg": "SUCCESS", +// "method": "ORDER_STATUS", +// "data": { +// "orderId": 21414, #订单id +// } +} diff --git a/app/src/main/java/com/ziang/driver/netUtls/HttpManager.java b/app/src/main/java/com/ziang/driver/netUtls/HttpManager.java index 71823ee..5e80b8b 100644 --- a/app/src/main/java/com/ziang/driver/netUtls/HttpManager.java +++ b/app/src/main/java/com/ziang/driver/netUtls/HttpManager.java @@ -102,7 +102,7 @@ initHeader(); // 监听请求条件 OkHttpClient.Builder builder = new OkHttpClient.Builder(); - builder.connectTimeout(20, TimeUnit.SECONDS); + builder.connectTimeout(30, TimeUnit.SECONDS); // builder.addInterceptor(new Interceptor() { // @Override // public Response intercept(Chain chain) throws IOException { @@ -119,22 +119,17 @@ }); httpLoggingInterceptor.setLevel(HttpLoggingInterceptor.Level.BODY); builder.addInterceptor(httpLoggingInterceptor); - builder.addInterceptor(new Interceptor() { - @Override - public Response intercept(Chain chain) throws IOException { - Request request = chain.request(); - Response proceed = chain.proceed(request); - return proceed; - } + builder.addInterceptor(chain -> { + Request request = chain.request(); + Response proceed = chain.proceed(request); + return proceed; }); Retrofit.Builder builder1 = new Retrofit.Builder() .client(builder.build()) // 配置监听请求 .addConverterFactory(GsonConverterFactory.create()) // 请求结果转换(当前为GSON) .addCallAdapterFactory(RxJava2CallAdapterFactory.create()); // 请求接受工具(当前为RxJava2) -// builder1.baseUrl(BASE_URL + action.substring(0, action.lastIndexOf("/") + 1)); builder1.baseUrl(Api.BASE_URL); - return builder1.build(); } diff --git a/app/src/main/java/com/ziang/driver/netUtls/NetKit.kt b/app/src/main/java/com/ziang/driver/netUtls/NetKit.kt index 073b2a7..d801262 100644 --- a/app/src/main/java/com/ziang/driver/netUtls/NetKit.kt +++ b/app/src/main/java/com/ziang/driver/netUtls/NetKit.kt @@ -47,6 +47,10 @@ clickAction(responseString) } + override fun onError(e: Throwable) { + super.onError(e) + } + }) } @@ -71,9 +75,9 @@ fun getAppId(): String { var appid = CacheKey.getKeyStr("appid") - if (appid.isEmpty()){ + if (appid.isEmpty()) { return "" - } else{ + } else { return appid } } @@ -122,6 +126,35 @@ override fun onError(code: Int, msg: String?, resposeString: String?) { super.onError(code, msg, resposeString) + clickActionError(msg) + } + }) + +} + +fun MyBaseActivity.callNetAndError( + b: Boolean, + api: String, + map: HashMap<String?, Any?>, + clickAction: (responseString: String?) -> Unit, + clickActionError: (errorString: String?) -> Unit +) { + if (b) + this.showDialog() + if (api.startsWith("api")) { + map["appid"] = getAppId() + var sign = DES.getSign(map) + map["sign"] = sign + } + HttpManager.getInstance().post(api, map, object : MyObserver(this) { + override fun success(responseString: String?) { + if (b) + dismissDialog() + clickAction(responseString) + } + + override fun onError(code: Int, msg: String?, resposeString: String?) { +// super.onError(code, msg, resposeString) clickActionError(msg) } }) @@ -207,6 +240,39 @@ } + +fun MyBaseFragment.callNet( + b: Boolean, + api: String, + map: HashMap<String?, Any?>, + clickAction: (responseString: String?) -> Unit, + clickActionError: (errorString: String?) -> Unit +) { + if (b) { + this.showDialog() + } + if (api.startsWith("api")) { + map["appid"] = getAppId() + var sign = DES.getSign(map) + map["sign"] = sign + } + HttpManager.getInstance().post(api, map, object : MyObserver(this) { + override fun success(responseString: String?) { + if (b) { + dismissDialog() + } + clickAction(responseString) + } + + override fun onError(code: Int, msg: String?, resposeString: String?) { + super.onError(code, msg, resposeString) + + clickActionError(msg) + } + }) + +} + fun callNet( context: Context, api: String, @@ -251,7 +317,7 @@ } -fun timeOver(timeDown:Long,click: (mill: Int) -> Unit): CountDownTimer { +fun timeOver(timeDown: Long, click: (mill: Int) -> Unit): CountDownTimer { val timer by lazy { object : CountDownTimer(timeDown, 1000) { override fun onFinish() { diff --git a/app/src/main/java/com/ziang/driver/ui/adapter/MainSmallAdapter.kt b/app/src/main/java/com/ziang/driver/ui/adapter/MainSmallAdapter.kt new file mode 100644 index 0000000..64951c9 --- /dev/null +++ b/app/src/main/java/com/ziang/driver/ui/adapter/MainSmallAdapter.kt @@ -0,0 +1,101 @@ +package com.ziang.driver.ui.adapter + +import android.os.CountDownTimer +import android.view.View +import cn.sinata.xldutils.utils.Toast +import cn.sinata.xldutils.utils.clickDelay +import com.amap.api.maps.model.LatLng +import com.ziang.driver.R +import com.ziang.driver.base.BaseRvAdapter +import com.ziang.driver.base.BaseViewHolder +import com.ziang.driver.base.MyApplication +import com.ziang.driver.base.gaode.AMapKit +import com.ziang.driver.bean.OrderBean +import com.ziang.driver.netUtls.Api +import com.ziang.driver.netUtls.callNet +import com.ziang.driver.netUtls.getMapByAny +import com.ziang.driver.netUtls.timeOver +import com.ziang.driver.ui.main.TripActivity +import kotlinx.android.synthetic.main.item_get_order.tv_sure +import kotlinx.android.synthetic.main.item_small_order.view.tv_car_type +import kotlinx.android.synthetic.main.item_small_order.view.tv_close +import kotlinx.android.synthetic.main.item_small_order.view.tv_end +import kotlinx.android.synthetic.main.item_small_order.view.tv_reassign +import kotlinx.android.synthetic.main.item_small_order.view.tv_start +import kotlinx.android.synthetic.main.item_small_order.view.tv_sure +import kotlinx.android.synthetic.main.item_small_order.view.tv_time +import kotlinx.android.synthetic.main.item_small_order.view.tv_title +import org.jetbrains.anko.startActivity + +class MainSmallAdapter:BaseRvAdapter<OrderBean>() { + + var orderType = 0 + override fun getLayoutResId(viewType: Int): Int { + return R.layout.item_small_order + } + + override fun onBindItem(holder: BaseViewHolder?, view: View?, item: OrderBean?) { + item?.let { data -> + holder?.let { + it.mDownTimer?.cancel() + it.itemView.tv_car_type.text = "小程序订单" + it.itemView.tv_reassign.text = data.data.type + it.itemView.tv_time.text = data.data.travelTime + it.itemView.tv_start.text = data.data.startAddress + it.itemView.tv_end.text = data.data.endAddress + AMapKit.initRouteLine( + context, + LatLng(MyApplication.getLocation().latitude, MyApplication.getLocation().longitude), + LatLng(data.data.startLat, data.data.startLon), + object : (MutableList<LatLng>, Float, Long) -> Unit { + override fun invoke( + latLngs: MutableList<LatLng>, + lineTance: Float, + lineTime: Long + ) { + it.itemView.tv_title.text = "距您约" + AMapKit.getTance(lineTance) + } + }) + + it.itemView.tv_close.clickDelay { + getData().remove(data) + notifyDataSetChanged() + } + it.itemView.tv_sure.clickDelay { + var map = getMapByAny() + map["orderId"] = data.data.orderId.toString() + map["orderType"] = orderType.toString() + callNet(context, Api.grabOrder, map) { + Toast.create(context).show("抢单成功") +// context.startActivity<TripActivity>("orderId" to data.data.orderId.toString() +// , "orderType" to orderType.toString()) + getData().remove(data) + notifyDataSetChanged() + } + + } + holder.mDownTimer = timeOvers((data.overTime.toLong() * 1000L),holder) { + if (it == 0) { + getData().remove(data) + notifyDataSetChanged() + } else { + data.overTime = (data.overTime.toLong()-1) + holder.itemView.tv_sure.text = "抢单" + it.toString() + "S" + } + } + } + } + } + + override fun onViewRecycled(holder: BaseViewHolder) { + holder.mDownTimer?.cancel() + super.onViewRecycled(holder) + } + + private fun timeOvers(timeDown: Long, holder: BaseViewHolder, click: (mill: Int) -> Unit): CountDownTimer { + return object : CountDownTimer(timeDown, 1000) { + override fun onFinish() = click(0) + override fun onTick(millisUntilFinished: Long) = click((millisUntilFinished / 1000).toInt()) + }.apply { start() } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/ziang/driver/ui/adapter/OrderHallAdapter.kt b/app/src/main/java/com/ziang/driver/ui/adapter/OrderHallAdapter.kt index ef28bf4..c2fa79f 100644 --- a/app/src/main/java/com/ziang/driver/ui/adapter/OrderHallAdapter.kt +++ b/app/src/main/java/com/ziang/driver/ui/adapter/OrderHallAdapter.kt @@ -27,7 +27,6 @@ return R.layout.item_hall } - private val audioRecoderUtils by lazy { AudioRecoderUtils() } override fun onBindItem(holder: BaseViewHolder?, view: View?, item: OrderHall) { holder?.let { @@ -49,19 +48,20 @@ ) it.itemView.tv_play.visible() it.itemView.tv_play.setOnClickListener { - val intent = Intent(context, VoiceOrderFragment::class.java) - intent.putExtra("audio", item.audioLinkUrl) - intent.putExtra("orderId", item.id) - intent.putExtra("orderType", item.type.toString()) - intent.putExtra("time", item.audioTime.toInt()+3) - intent.putExtra("type", 1) - intent.putExtra("needPlayRing", false) - intent.putExtra("fromList", true) - context.startActivity(intent) + AudioRecoderUtils.getInstance().startplayMusic(context, item.audioLinkUrl) +// val intent = Intent(context, VoiceOrderFragment::class.java) +// intent.putExtra("audio", item.audioLinkUrl) +// intent.putExtra("orderId", item.id) +// intent.putExtra("orderType", item.type.toString()) +// intent.putExtra("time", item.audioTime.toInt()+3) +// intent.putExtra("type", 1) +// intent.putExtra("needPlayRing", false) +// intent.putExtra("fromList", true) +// context.startActivity(intent) } } it.itemView.tv_action.setOnClickListener { - getOrder(item.id, item.type, context, !item.audioLinkUrl.isNullOrEmpty()) + getOrder(item,item.id, item.type, context, !item.audioLinkUrl.isNullOrEmpty()) } val l = TimeUtils.parseTimeMillisecond(item.endTime) - System.currentTimeMillis() it.itemView.tv_timer.text = if (l>0) "%02d:%02d".format( @@ -71,7 +71,7 @@ } } - private fun getOrder(orderId: String, orderType: Int, context: Context, isCall: Boolean) { + private fun getOrder( item: OrderHall,orderId: String, orderType: Int, context: Context, isCall: Boolean) { var map = getMapByAny() map["orderId"] = orderId map["orderType"] = orderType @@ -82,7 +82,7 @@ "orderId" to orderId, "orderType" to orderType.toString() ) - audioRecoderUtils.stopPlayMusic() + AudioRecoderUtils.getInstance().stopPlayMusic() }else{ when (orderType) { 2 -> { @@ -105,7 +105,9 @@ } } } - (context as OrderHallActivity).finish() + data.remove(item) + notifyDataSetChanged() +// (context as OrderHallActivity).finish() } } diff --git a/app/src/main/java/com/ziang/driver/ui/main/CallOrderActivity.kt b/app/src/main/java/com/ziang/driver/ui/main/CallOrderActivity.kt index bd06d7f..140ea56 100644 --- a/app/src/main/java/com/ziang/driver/ui/main/CallOrderActivity.kt +++ b/app/src/main/java/com/ziang/driver/ui/main/CallOrderActivity.kt @@ -29,7 +29,6 @@ lateinit var orderBean: OrderBean - private val audioRecoderUtils by lazy { AudioRecoderUtils() } override fun setContentView() { setContentView(R.layout.activity_order_call) @@ -96,7 +95,7 @@ override fun onDestroy() { super.onDestroy() handler?.removeCallbacksAndMessages(null) - audioRecoderUtils.stopPlayMusic() + AudioRecoderUtils.getInstance().stopPlayMusic() } @@ -108,7 +107,7 @@ override fun setOnclick() { tv_play.setOnClickListener { - audioRecoderUtils.startplayMusic(this,orderBean.data.audioLinkUrl) + AudioRecoderUtils.getInstance().startplayMusic(this,orderBean.data.audioLinkUrl) } } } \ No newline at end of file diff --git a/app/src/main/java/com/ziang/driver/ui/main/GetOrderFragment.kt b/app/src/main/java/com/ziang/driver/ui/main/GetOrderFragment.kt index 0b20f36..0c62b50 100644 --- a/app/src/main/java/com/ziang/driver/ui/main/GetOrderFragment.kt +++ b/app/src/main/java/com/ziang/driver/ui/main/GetOrderFragment.kt @@ -5,18 +5,45 @@ import android.os.PersistableBundle import android.view.View import cn.sinata.xldutils.activitys.DialogActivity -import cn.sinata.xldutils.utils.* +import cn.sinata.xldutils.utils.Toast +import cn.sinata.xldutils.utils.clickDelay +import cn.sinata.xldutils.utils.doubleTwo +import cn.sinata.xldutils.utils.gone +import cn.sinata.xldutils.utils.sysErr +import cn.sinata.xldutils.utils.visible import com.amap.api.maps.AMap import com.amap.api.maps.model.LatLng +import com.google.gson.Gson import com.ziang.driver.R +import com.ziang.driver.base.BaseEvent import com.ziang.driver.base.MyApplication import com.ziang.driver.base.gaode.AMapKit import com.ziang.driver.bean.OrderBean -import com.ziang.driver.netUtls.* +import com.ziang.driver.netUtls.Api +import com.ziang.driver.netUtls.callNet +import com.ziang.driver.netUtls.createView +import com.ziang.driver.netUtls.getMapByAny +import com.ziang.driver.netUtls.timeOver import com.ziang.driver.ui.UiUtil -import com.google.gson.Gson -import kotlinx.android.synthetic.main.item_get_order.* -import kotlinx.android.synthetic.main.item_map_market.view.* +import kotlinx.android.synthetic.main.item_get_order.map_view +import kotlinx.android.synthetic.main.item_get_order.tv_car_type +import kotlinx.android.synthetic.main.item_get_order.tv_cargo_money +import kotlinx.android.synthetic.main.item_get_order.tv_cargo_num +import kotlinx.android.synthetic.main.item_get_order.tv_close +import kotlinx.android.synthetic.main.item_get_order.tv_end +import kotlinx.android.synthetic.main.item_get_order.tv_money +import kotlinx.android.synthetic.main.item_get_order.tv_name +import kotlinx.android.synthetic.main.item_get_order.tv_reassign +import kotlinx.android.synthetic.main.item_get_order.tv_remark +import kotlinx.android.synthetic.main.item_get_order.tv_start +import kotlinx.android.synthetic.main.item_get_order.tv_sure +import kotlinx.android.synthetic.main.item_get_order.tv_tance +import kotlinx.android.synthetic.main.item_get_order.tv_time +import kotlinx.android.synthetic.main.item_get_order.tv_title +import kotlinx.android.synthetic.main.item_map_market.view.iv_img +import org.greenrobot.eventbus.EventBus +import org.greenrobot.eventbus.Subscribe +import org.greenrobot.eventbus.ThreadMode import org.jetbrains.anko.startActivity class GetOrderFragment : DialogActivity() { @@ -101,6 +128,7 @@ override fun onCreate(savedInstanceState: Bundle?, persistentState: PersistableBundle?) { super.onCreate(savedInstanceState, persistentState) + EventBus.getDefault().register(this) map_view.onCreate(savedInstanceState) } @@ -108,6 +136,7 @@ super.onDestroy() time.cancel() MyApplication.getTTsManager().stopSpeaking() + EventBus.getDefault().unregister(this) map_view.onDestroy() } @@ -241,4 +270,15 @@ } } + @Subscribe(threadMode = ThreadMode.MAIN) + open fun onEventMainThread(event: BaseEvent) { + when (event.code) { + BaseEvent.ORDER_GRAB_EVENT -> { + if (orderId == event.msg) + finish() + } + } + } + + } \ No newline at end of file diff --git a/app/src/main/java/com/ziang/driver/ui/main/MainActivity.kt b/app/src/main/java/com/ziang/driver/ui/main/MainActivity.kt index 61bda89..2681803 100644 --- a/app/src/main/java/com/ziang/driver/ui/main/MainActivity.kt +++ b/app/src/main/java/com/ziang/driver/ui/main/MainActivity.kt @@ -8,10 +8,12 @@ import android.net.Uri import android.os.Handler import android.os.Looper +import android.os.Message import android.provider.Settings import android.view.Gravity import android.widget.Toast import androidx.core.app.ActivityCompat +import androidx.recyclerview.widget.LinearLayoutManager import cn.sinata.rxnetty.NettyClient import cn.sinata.xldutils.utils.* import com.amap.api.location.AMapLocation @@ -44,7 +46,9 @@ import com.umeng.socialize.PlatformConfig import com.ziang.driver.bean.* import com.ziang.driver.netUtls.* +import com.ziang.driver.ui.adapter.OrderHallAdapter import com.ziang.driver.ui.mine.RechargeActivity +import com.ziang.driver.utils.DES import kotlinx.android.synthetic.main.activity_main.* import kotlinx.android.synthetic.main.app_title.* import kotlinx.android.synthetic.main.dialog_sure_and_del.view.* @@ -59,51 +63,70 @@ val mainFragment by lazy { MainFragment() } - + val smallFragment by lazy { + MainSmallFragment() + } + val hallAdapter by lazy { + OrderHallAdapter() + } + var queryNum = 0 +// val evalFrag = OrderHallFragment() var homeDataBean: HomeDataBean? = null override fun setContentView() { setContentView(R.layout.activity_main) } + private val EasyFloatTag = "BACKGROUND" private var floater: EasyFloat.Builder? = null //浮窗 - private var paused:Boolean = false + private var paused: Boolean = false + + private var timeHandler = Handler(Looper.getMainLooper()) //用于检测小程序订单时间 + override fun initView() { - MapsInitializer.updatePrivacyShow(this,true,true) - MapsInitializer.updatePrivacyAgree(this,true) + MapsInitializer.updatePrivacyShow(this, true, true) + MapsInitializer.updatePrivacyAgree(this, true) // var packageName = "com.android.providers.downloads"; // var intent = Intent(android.provider.Settings.ACTION_APPLICATION_DETAILS_SETTINGS); // intent.setData(Uri.parse("package:" + packageName)); // startActivity(intent); +// addFragment(evalFrag, R.id.fl_container_t) + recycler_view_hall.layoutManager = LinearLayoutManager(this) + recycler_view_hall.adapter = hallAdapter + upDateSmall() MyApplication.getInstance()?.initPersionDate() setTitleText("子昂出行司机") - if (CacheKey.getKeyStr(Const.REFUSE_LOCATION).isNotEmpty()&&!RxPermissions(this).isGranted( + if (CacheKey.getKeyStr(Const.REFUSE_LOCATION) + .isNotEmpty() && !RxPermissions(this).isGranted( Manifest.permission.ACCESS_FINE_LOCATION - )){ + ) + ) { toast("没有定位权限,您将无法收到新订单推送") - }else{ - if (!RxPermissions(this).isGranted(Manifest.permission.ACCESS_FINE_LOCATION)){ + } else { + if (!RxPermissions(this).isGranted(Manifest.permission.ACCESS_FINE_LOCATION)) { DialogUtil.getDelAndSureDialog( this, "去授权", "否", "《子昂出行司机》需要获取您的当前位置信息,用于查询当前城市是否开通服务,我们会将您的位置实时上传至后端为您匹配和推送附近订单。如果拒绝定位权限,您将无法正常接单。", { - }){ + }) { val subscribe = - RxPermissions(this).request(Manifest.permission.ACCESS_FINE_LOCATION).subscribe { - if (!it){ - toast("没有定位权限,您将无法收到新订单推送") - CacheKey.putKeyStr(Const.REFUSE_LOCATION, "1") + RxPermissions(this).request(Manifest.permission.ACCESS_FINE_LOCATION) + .subscribe { + if (!it) { + toast("没有定位权限,您将无法收到新订单推送") + CacheKey.putKeyStr(Const.REFUSE_LOCATION, "1") + } } - } } } } tv_Left.setDrawableLeft(R.mipmap.icon_nav_user) iv_right_title.setImageResource(R.mipmap.icon_nav_news) - addFragment(mainFragment, R.id.rl_container) + addFragment(smallFragment, R.id.rl_container) +// addFragment(mainFragment, R.id.rl_container) AMapKit.initLocation(this, this) MyApplication.isLogin = true beOnDuty(false) @@ -112,18 +135,53 @@ callVersion() checkGps() MyApplication.addOrderView(qeeOrderView) + + } + + private fun callHall() { + var map = getMapByAny() + map.set("size",100) + map.set("pageNum",1) + callNetAndError(false,Api.queryHallOrderList,map,{ + var data = gson.fromJson<OrderHallBean>(it,OrderHallBean::class.java) + hallAdapter.data.clear() + hallAdapter.data.addAll(data.data.list) + hallAdapter.notifyDataSetChanged() + tv_order_big_all.text = "接单大厅("+hallAdapter.data.size+")" + }){ + + } + } + + + + /*** + * 一秒检测一次小程序订单时间 + */ + private fun upDateSmall() { + timeHandler.postDelayed({ + queryNum++ + var size = smallFragment.mainSmallAdapter.data.size + tv_order_small.text = "小程序订单($size)" + upDateSmall() + if (queryNum%10 == 0){ + callHall() + } + }, 1000) } var qeeOrderView = object : MyApplication.OrderStatueView { override fun orderInfo(data: OrderSimpleData?) { data?.let { - when(it.orderType){ - 1,2,3 -> { + when (it.orderType) { + 1, 2, 3 -> { if (it.status == 10 || it.status == 12) { Handler(Looper.getMainLooper()).post { - mainFragment?.refresh() - MyApplication.getTTsManager().setVideoText("有用户订单被取消或改派") + if (mainFragment?.isAdded && mainFragment?.isVisible){ + mainFragment?.refresh() + MyApplication.getTTsManager().setVideoText("有用户订单被取消或改派") + } } } } @@ -134,10 +192,15 @@ } private fun checkGps() { - if (!AMapKit.isLocServiceEnable(this)){ - DialogUtil.getDelAndSureDialog(this,"查看定位","退出","您暂未开启手机定位GPS,是否前往开启?",{ - onBackPressed() - }){ + if (!AMapKit.isLocServiceEnable(this)) { + DialogUtil.getDelAndSureDialog( + this, + "查看定位", + "退出", + "您暂未开启手机定位GPS,是否前往开启?", + { + onBackPressed() + }) { val intent = Intent() intent.action = Settings.ACTION_LOCATION_SOURCE_SETTINGS; intent.flags = Intent.FLAG_ACTIVITY_NEW_TASK; @@ -156,7 +219,7 @@ } private fun showFloater() { - if (floater == null){ + if (floater == null) { floater = EasyFloat.with(applicationContext) .setLayout(R.layout.layout_floter, OnInvokeView { it.setOnClickListener { @@ -195,7 +258,7 @@ download(data.data.url) ToastUtils.showShortToast(this, "后台开始下载,请等待") }) - }else{ + } else { // toast("已经是最新版本") } } else { @@ -208,17 +271,17 @@ var map = getMapByAny() map["pageNum"] = 1 map["size"] = 1 - callNet(false,Api.queryHallOrderList, map) { + callNet(false, Api.queryHallOrderList, map) { val fromJson = gson.fromJson(it, OrderHallBean::class.java) - tv_count.text = (fromJson?.data?.orderCount?:0).toString() + tv_count.text = (fromJson?.data?.orderCount ?: 0).toString() if (!paused) tv_count.postDelayed({ callOrderCount() - },2000) + }, 2000) } } - private fun download(url:String){ + private fun download(url: String) { val p = RxPermissions(this).request(Manifest.permission.WRITE_EXTERNAL_STORAGE).subscribe { if (it) DownloadUtil(this).downloadAPK(url, "子昂出行司机") @@ -230,8 +293,11 @@ override fun onResume() { super.onResume() paused = false - callOrderCount() - mainFragment?.refresh() +// callOrderCount() +// mainFragment.showQuan = false + if (mainFragment != null && mainFragment.isAdded && mainFragment.isVisible){ + mainFragment?.refresh() + } } override fun onPause() { @@ -239,13 +305,20 @@ paused = true } - fun beOnDuty(b:Boolean){ - if (b){ + fun beOnDuty(b: Boolean) { + if (b) { avv_anim.visible() tv_up_avv.visible() - }else{ + } else { avv_anim.gone() tv_up_avv.gone() + } + } + + override fun onDestroy() { + super.onDestroy() + if (timeHandler != null) { + timeHandler.removeCallbacksAndMessages(0) } } @@ -262,15 +335,20 @@ tv_car_num.text = data.data.licensePlate tv_lien_name.text = data.data.brand.toString() tv_car.text = if (data.data.work == 1) "下班" else "出车" - if (data.data.work == 1){ + if (data.data.work == 1) { MyApplication.getTTsManager().setVideoText("您正在上班中") beOnDuty(true) if (!Settings.canDrawOverlays(this) && CacheKey.getKeyStr("isRefusedFloat") .isNullOrEmpty() ) { //没有浮窗权限并且没有拒绝过 - DialogUtil.getDelAndSureDialog(this, "去开启", "取消", "为了增加后台推单的稳定性,我们需要开启悬浮窗口权限", { - CacheKey.putKeyStr("isRefusedFloat", "1") - }) { + DialogUtil.getDelAndSureDialog( + this, + "去开启", + "取消", + "为了增加后台推单的稳定性,我们需要开启悬浮窗口权限", + { + CacheKey.putKeyStr("isRefusedFloat", "1") + }) { var intent = Intent( Settings.ACTION_MANAGE_OVERLAY_PERMISSION, Uri.parse("package:" + packageName) @@ -278,7 +356,7 @@ startActivityForResult(intent, 1234) } } - }else{ + } else { MyApplication.getTTsManager().setVideoText("您已下班") beOnDuty(false) } @@ -289,7 +367,7 @@ } } - fun callNum(){ + fun callNum() { var map = getMapByAny() callNet(Api.queryHomeData, map) { var data = gson.fromJson<HomeDataBean>(it, HomeDataBean::class.java) @@ -312,6 +390,8 @@ tv_server_ing.setOnClickListener { tv_server_ing.textColor(this, R.color.main_yellow) tv_wait_server.textColor(this, R.color.main_gray) + tv_order_small.textColor(this, R.color.main_gray) + addFragment(mainFragment, R.id.rl_container) mainFragment.state = 1 mainFragment.autoRefresh() } @@ -319,8 +399,19 @@ tv_wait_server.setOnClickListener { tv_server_ing.textColor(this, R.color.main_gray) tv_wait_server.textColor(this, R.color.main_yellow) + tv_order_small.textColor(this, R.color.main_gray) + addFragment(mainFragment, R.id.rl_container) mainFragment.state = 2 mainFragment.autoRefresh() + } + + tv_order_small.clickDelay { + tv_server_ing.textColor(this, R.color.main_gray) + tv_wait_server.textColor(this, R.color.main_gray) + tv_order_small.textColor(this, R.color.main_yellow) + addFragment(smallFragment, R.id.rl_container) + smallFragment.mainSmallAdapter.notifyDataSetChanged() + } tv_Left.clickDelay { @@ -349,29 +440,29 @@ MyApplication.getTTsManager().setVideoText("您已下班") } } else { - callNet(Api.queryMyBusiness, getMapByAny()){ + callNet(Api.queryMyBusiness, getMapByAny()) { var bean = gson.fromJson(it, SelectServerModeBean::class.java).data - if (bean.isEmpty()){ + if (bean.isEmpty()) { toast("请选择接单业务") return@callNet } - if (bean.size > 1){ + if (bean.size > 1) { startActivity<SelectServerModeActivity>() - }else{ - var map= getMapByAny() + } else { + var map = getMapByAny() map["type"] = bean[0].id - callNetNoToast(Api.work,map,{ + callNetNoToast(Api.work, map, { toast("上班成功") beOnDuty(true) EventBus.getDefault().post(BaseEvent(BaseEvent.START_CAR)) - }){ - if (it?.contains("余额") == true){ - val dialog = DialogUtil.getOnlySureDialog(this,it){ + }) { + if (it?.contains("余额") == true) { + val dialog = DialogUtil.getOnlySureDialog(this, it) { startActivity<RechargeActivity>() } val view = DialogUtil.getView(dialog) view.tv_sure_base.text = "去充值" - }else{ + } else { showToast(it) } } @@ -405,7 +496,6 @@ } - private var mBackAppTime: Long = 0 @@ -425,26 +515,47 @@ beOnDuty(true) initCall() } + BaseEvent.CHANGE_CAR_SUCCESS -> { initCall() } + BaseEvent.CALL_NUM_MAIN -> { callNum() } + BaseEvent.REFREASH_MAIN -> { mainFragment?.refresh() } + BaseEvent.APP_BACKGROUND -> { - if (getUserId() != -1 &&homeDataBean?.data?.work == 1 && Settings.canDrawOverlays(this) ) { + if (getUserId() != -1 && homeDataBean?.data?.work == 1 && Settings.canDrawOverlays( + this + ) + ) { showFloater() EasyFloat.show(EasyFloatTag) } } + BaseEvent.APP_FOREGROUND -> { EasyFloat.hide(EasyFloatTag) } + BaseEvent.APP_LOG -> { // tv_log.text = "${TimeUtils.getCurrentTimeMillisecond(System.currentTimeMillis())} ${event.msg}\n"+tv_log.text + } + + BaseEvent.GET_SMALL_ORDER -> { + //小程序订单来了 + var dataStr = event.msg + val data = Gson().fromJson<OrderBean>(dataStr, OrderBean::class.java) + data.time = System.currentTimeMillis() + data.overTime = event.typeTwo.toLong() + smallFragment.setOrdertypeA(event.type) + smallFragment.setDate(data) + var size = smallFragment.mainSmallAdapter.data.size + tv_order_small.text = "小程序订单($size)" } } } @@ -452,7 +563,7 @@ override fun onLocationChanged(p0: AMapLocation?) { if (p0?.errorCode == 0) { MyApplication.aMapLocation = p0 - CacheKey.putKeyStr("location",Gson().toJson(p0)) + CacheKey.putKeyStr("location", Gson().toJson(p0)) } } } \ No newline at end of file diff --git a/app/src/main/java/com/ziang/driver/ui/main/MainSmallFragment.kt b/app/src/main/java/com/ziang/driver/ui/main/MainSmallFragment.kt new file mode 100644 index 0000000..ddc4702 --- /dev/null +++ b/app/src/main/java/com/ziang/driver/ui/main/MainSmallFragment.kt @@ -0,0 +1,61 @@ +package com.ziang.driver.ui.main + +import android.os.Bundle +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import androidx.recyclerview.widget.LinearLayoutManager +import cn.sinata.xldutils.fragment.BaseFragment +import com.ziang.driver.R +import com.ziang.driver.bean.OrderBean +import com.ziang.driver.ui.adapter.MainSmallAdapter +import kotlinx.android.synthetic.main.fragment_main_small.recycler_view_main_small + + +class MainSmallFragment:BaseFragment() { + + val mainSmallAdapter: MainSmallAdapter by lazy { + MainSmallAdapter() + } + + + fun setOrdertypeA(orderType:Int){ + mainSmallAdapter.orderType = orderType + } + + override fun getContentViewLayoutID(): Int { + return R.layout.fragment_main_small + } + + override fun onFirstVisibleToUser() { + + + } + + override fun onCreateView( + inflater: LayoutInflater, + container: ViewGroup?, + savedInstanceState: Bundle? + ): View? { + return inflater.inflate(R.layout.fragment_main_small,container,false) + } + + override fun onViewCreated(view: View, savedInstanceState: Bundle?) { + super.onViewCreated(view, savedInstanceState) + recycler_view_main_small.layoutManager = LinearLayoutManager(requireContext()) + recycler_view_main_small.adapter = mainSmallAdapter + } + + fun setDate(orderBean: OrderBean){ + mainSmallAdapter.data.add(orderBean) + mainSmallAdapter.notifyItemInserted(mainSmallAdapter.data.lastIndex) + } + + override fun onVisibleToUser() { + } + + override fun onInvisibleToUser() { + } + + +} \ No newline at end of file diff --git a/app/src/main/java/com/ziang/driver/ui/main/VoiceOrderFragment.kt b/app/src/main/java/com/ziang/driver/ui/main/VoiceOrderFragment.kt index 52ab3aa..7666d14 100644 --- a/app/src/main/java/com/ziang/driver/ui/main/VoiceOrderFragment.kt +++ b/app/src/main/java/com/ziang/driver/ui/main/VoiceOrderFragment.kt @@ -12,6 +12,8 @@ import com.ziang.driver.utils.AudioRecoderUtils import kotlinx.android.synthetic.main.dialog_voice_order.* import org.greenrobot.eventbus.EventBus +import org.greenrobot.eventbus.Subscribe +import org.greenrobot.eventbus.ThreadMode import org.jetbrains.anko.longToast import org.jetbrains.anko.startActivity @@ -37,50 +39,68 @@ } val fromList by lazy { - intent?.getBooleanExtra("fromList",false)?:false + intent?.getBooleanExtra("fromList", false) ?: false } val needPlayRing by lazy { - intent?.getBooleanExtra("needPlayRing",true)?:true + intent?.getBooleanExtra("needPlayRing", true) ?: true } - lateinit var time: CountDownTimer - private val audioRecoderUtils by lazy { AudioRecoderUtils() } override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) + EventBus.getDefault().register(this) var strBtn = "抢单" if (type == 2) { strBtn = "确定" } time = timeOver((timeDown!!.toLong() * 1000L)) { if (it == 0) { - audioRecoderUtils.stopPlayMusic() finish() } else { tv_sure.text = strBtn + it.toString() + "S" } } tv_close.clickDelay { - audioRecoderUtils.stopPlayMusic() finish() } tv_sure.clickDelay { showGetOrder() } - if (needPlayRing) - AudioRecoderUtils().startplayMusic(this,Const.voiceOrder) - iv_voice.postDelayed({ - audioRecoderUtils.startplayMusic(this,if (fromList) audio else MyApplication.voiceOrder?.audioLinkUrl) - EventBus.getDefault().post(BaseEvent(BaseEvent.APP_LOG,"实际播放路径:${if (fromList) audio else MyApplication.voiceOrder?.audioLinkUrl}")) - },2000) - iv_voice.clickDelay { - audioRecoderUtils.startplayMusic(this,if (fromList) audio else MyApplication.voiceOrder?.audioLinkUrl) + if (needPlayRing){ + AudioRecoderUtils.getInstance().startplayMusic(this, Const.voiceOrder) + if (fromList){ + AudioRecoderUtils.getInstance().startplayMusic(this, audio) + }else{ + AudioRecoderUtils.getInstance().startplayMusic(this, MyApplication.voiceOrder?.audioLinkUrl) + } } - EventBus.getDefault().post(BaseEvent(BaseEvent.APP_LOG,"弹窗订单id:$orderId ,声音路径:$audio")) + + iv_voice.postDelayed({ + if (!isFinishing){ +// AudioRecoderUtils.getInstance().startplayMusic( +// this, +// if (fromList) audio else MyApplication.voiceOrder?.audioLinkUrl +// ) + } + EventBus.getDefault().post( + BaseEvent( + BaseEvent.APP_LOG, + "实际播放路径:${if (fromList) audio else MyApplication.voiceOrder?.audioLinkUrl}" + ) + ) + }, 500) + iv_voice.clickDelay { + AudioRecoderUtils.getInstance().startplayMusic( + this, + if (fromList) audio else MyApplication.voiceOrder?.audioLinkUrl + ) + } + EventBus.getDefault() + .post(BaseEvent(BaseEvent.APP_LOG, "弹窗订单id:$orderId ,声音路径:$audio")) } override fun initView() { @@ -93,6 +113,8 @@ override fun onDestroy() { super.onDestroy() + EventBus.getDefault().unregister(this) +// AudioRecoderUtils.getInstance().stopPlayMusic() time.cancel() } @@ -107,12 +129,25 @@ map["orderType"] = orderType callNet(this, Api.grabOrder, map) { Toast.create(this).show("抢单成功") - EventBus.getDefault().post(BaseEvent(BaseEvent.APP_LOG,"抢单成功的id:$id")) + EventBus.getDefault().post(BaseEvent(BaseEvent.APP_LOG, "抢单成功的id:$id")) startActivity<CallOrderActivity>( "orderId" to id, - "orderType" to orderType) - audioRecoderUtils.stopPlayMusic() + "orderType" to orderType + ) + finish() } } + + @Subscribe(threadMode = ThreadMode.MAIN) + open fun onEventMainThread(event: BaseEvent) { + when (event.code) { + BaseEvent.ORDER_GRAB_EVENT -> { + if (orderId == event.msg) + finish() + } + } + } + + } \ No newline at end of file diff --git a/app/src/main/java/com/ziang/driver/ui/mine/MineActivity.kt b/app/src/main/java/com/ziang/driver/ui/mine/MineActivity.kt index 54438a6..4863290 100644 --- a/app/src/main/java/com/ziang/driver/ui/mine/MineActivity.kt +++ b/app/src/main/java/com/ziang/driver/ui/mine/MineActivity.kt @@ -28,6 +28,8 @@ import com.umeng.socialize.bean.SHARE_MEDIA import com.umeng.socialize.media.UMImage import com.umeng.socialize.media.UMWeb +import com.ziang.driver.base.Const +import com.ziang.driver.utils.AudioRecoderUtils import kotlinx.android.synthetic.main.activity_mine.* import kotlinx.android.synthetic.main.pop_share.view.* import org.jetbrains.anko.startActivity @@ -72,8 +74,13 @@ } } + + override fun setOnclick() { tv_left_title_mine.clickDelay { +// AudioRecoderUtils.getInstance().startplayMusic(this, Const.voiceOrder) +// AudioRecoderUtils.getInstance().startplayMusic(this,Const.voiceOrder) +// MyApplication.getTTsManager().setVideoText("您正在上班中") onBackPressed() } ll_mine_money.setOnClickListener { diff --git a/app/src/main/java/com/ziang/driver/utils/AudioRecoderUtils.java b/app/src/main/java/com/ziang/driver/utils/AudioRecoderUtils.java index 3ab7b4e..677dc2e 100644 --- a/app/src/main/java/com/ziang/driver/utils/AudioRecoderUtils.java +++ b/app/src/main/java/com/ziang/driver/utils/AudioRecoderUtils.java @@ -10,10 +10,49 @@ import java.io.File; import java.io.IOException; +import java.util.LinkedList; +import java.util.Queue; import cn.sinata.xldutils.utils.TimeUtils; public class AudioRecoderUtils { + // --- 单例实例 --- + private static AudioRecoderUtils instance; // 静态变量,持有唯一实例 + + // 私有化构造函数,防止外部直接创建新实例 + private AudioRecoderUtils() { + // 默认保存路径为/sdcard/record/下 + this(Environment.getExternalStorageDirectory() + "/record/"); + } + + // 私有化带 filePath 的构造函数 + private AudioRecoderUtils(String filePath) { + File path = new File(filePath); + if (!path.exists()) + path.mkdirs(); + this.FolderPath = filePath; + } + + // --- 获取单例的公共静态方法 --- + // 使用 synchronized 确保线程安全,防止多线程环境下创建多个实例 + public static synchronized AudioRecoderUtils getInstance() { + if (instance == null) { + instance = new AudioRecoderUtils(); + } + return instance; + } + + // 如果需要指定文件路径,可以提供另一个获取实例的方法 + public static synchronized AudioRecoderUtils getInstance(String filePath) { + if (instance == null) { + instance = new AudioRecoderUtils(filePath); + } + // 如果实例已存在但路径不同,这里通常不修改路径。 + // 若要支持动态路径,需要更复杂的逻辑,或者在外部处理路径逻辑。 + return instance; + } + // --- 单例修改结束 --- + //文件路径 private String filePath; @@ -27,130 +66,13 @@ private OnAudioStatusUpdateListener audioStatusUpdateListener; private MediaPlayer mMediaPlayer; - /** - * 文件存储默认sdcard/record - */ - public AudioRecoderUtils() { - //默认保存路径为/sdcard/record/下 - this(Environment.getExternalStorageDirectory() + "/record/"); - } - - public AudioRecoderUtils(String filePath) { - - File path = new File(filePath); - if (!path.exists()) - path.mkdirs(); - - this.FolderPath = filePath; - } + // --- 新增:播放队列和状态变量 --- + private Queue<String> playQueue = new LinkedList<>(); // 存储待播放的音频文件路径 + private boolean isPlayingQueue = false; // 标记是否正在播放队列中的音频 + // --- 新增结束 --- private long startTime; private long endTime; - - - /** - * 开始录音 使用amr格式 - * 录音文件 - * - * @return - */ - public void startRecord() { - // 开始录音 - /* ①Initial:实例化MediaRecorder对象 */ - if (mMediaRecorder == null) - mMediaRecorder = new MediaRecorder(); - try { - /* ②setAudioSource/setVedioSource */ - mMediaRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);// 设置麦克风 - /* ②设置音频文件的编码:AAC/AMR_NB/AMR_MB/Default 声音的(波形)的采样 */ - mMediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.AAC_ADTS); - /* - * ②设置输出文件的格式:THREE_GPP/MPEG-4/RAW_AMR/Default THREE_GPP(3gp格式 - * ,H263视频/ARM音频编码)、MPEG-4、RAW_AMR(只支持音频且音频编码要求为AMR_NB) - */ - mMediaRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AAC); - - filePath = FolderPath + TimeUtils.getCurrentTime() + ".caf"; - /* ③准备 */ - mMediaRecorder.setOutputFile(filePath); - mMediaRecorder.setMaxDuration(MAX_LENGTH); - mMediaRecorder.prepare(); - /* ④开始 */ - mMediaRecorder.start(); - // AudioRecord audioRecord. - /* 获取开始时间* */ - startTime = System.currentTimeMillis(); - updateMicStatus(); - Log.e("fan", "startTime" + startTime); - } catch (IllegalStateException e) { - Log.i(TAG, "call startAmr(File mRecAudioFile) failed!" + e.getMessage()); - } catch (IOException e) { - Log.i(TAG, "call startAmr(File mRecAudioFile) failed!" + e.getMessage()); - } - } - - /** - * 停止录音 - */ - public long stopRecord() { - if (mMediaRecorder == null) - return 0L; - endTime = System.currentTimeMillis(); - - //有一些网友反应在5.0以上在调用stop的时候会报错,翻阅了一下谷歌文档发现上面确实写的有可能会报错的情况,捕获异常清理一下就行了,感谢大家反馈! - try { - mMediaRecorder.stop(); - mMediaRecorder.reset(); - mMediaRecorder.release(); - mMediaRecorder = null; - - audioStatusUpdateListener.onStop(filePath); - filePath = ""; - - } catch (RuntimeException e) { - if (mMediaRecorder != null) { - mMediaRecorder.reset(); - mMediaRecorder.release(); - mMediaRecorder = null; - } - File file = new File(filePath); - if (file.exists()) - file.delete(); - - filePath = ""; - - } - return endTime - startTime; - } - - public String getFilePath() { - return filePath; - } - - /** - * 取消录音 - */ - public void cancelRecord() { - - try { - - mMediaRecorder.stop(); - mMediaRecorder.reset(); - mMediaRecorder.release(); - mMediaRecorder = null; - - } catch (RuntimeException e) { - mMediaRecorder.reset(); - mMediaRecorder.release(); - mMediaRecorder = null; - } - File file = new File(filePath); - if (file.exists()) - file.delete(); - - filePath = ""; - - } private final Handler mHandler = new Handler(); private Runnable mUpdateMicStatusTimer = new Runnable() { @@ -163,9 +85,7 @@ private int BASE = 1; private int SPACE = 100;// 间隔取样时间 - public void setOnAudioStatusUpdateListener(OnAudioStatusUpdateListener audioStatusUpdateListener) { - this.audioStatusUpdateListener = audioStatusUpdateListener; - } + /** * 更新麦克状态 @@ -206,80 +126,150 @@ public void onFinishPlay(); } - //开始播放录音 + public void startplayMusic(Context context, String filePath) { - if (mMediaPlayer != null) { - stopPlayMusic(); - } - mMediaPlayer = new MediaPlayer(); - try { - Log.e("mmp", "path:" + filePath); - mMediaPlayer.setDataSource(context, Uri.parse(filePath)); - mMediaPlayer.prepareAsync(); - mMediaPlayer.setOnPreparedListener(new MediaPlayer.OnPreparedListener() { - @Override - public void onPrepared(MediaPlayer mp) { - // 装载完毕回调 - mMediaPlayer.start(); - if (audioStatusUpdateListener != null) - audioStatusUpdateListener.onStartPlay(); - } - }); - mMediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() { - @Override - public void onCompletion(MediaPlayer mp) { - if (audioStatusUpdateListener != null) - audioStatusUpdateListener.onFinishPlay(); - stopPlayMusic(); -// BaseEvent baseEvent = new BaseEvent(BaseEvent.SEND_AODIO_PLAY_OVER); -// baseEvent.setMsg(filePath); -// EventBus.getDefault().post(baseEvent); - } - }); + // 将新的音频路径添加到播放队列 + playQueue.offer(filePath); // 将文件路径添加到队列尾部 + Log.e("AudioRecoderUtils", "Added to queue: " + filePath + ", Queue size: " + playQueue.size()); - } catch (Exception e) { - e.printStackTrace(); + // 如果当前没有在播放,则开始播放队列中的第一个 + if (!isPlayingQueue) { + playNextInQueue(context); } } - //结束录音播放 - public void stopPlayMusic() { - if (mMediaPlayer == null) - return; - try { - mMediaPlayer.stop(); - mMediaPlayer.release(); - if (audioStatusUpdateListener != null) + // --- 新增:播放队列中的下一个音频 --- + private void playNextInQueue(Context context) { + if (playQueue.isEmpty()) { + isPlayingQueue = false; + Log.d(TAG, "playNextInQueue: Play queue finished."); + if (audioStatusUpdateListener != null) { audioStatusUpdateListener.onFinishPlay(); + } + return; + } + + String currentFilePath = playQueue.poll(); + Log.d(TAG, "playNextInQueue: Now attempting to play from queue: " + currentFilePath); + + // 确保每次播放前,旧的 MediaPlayer 都已经被彻底释放 + // 这行虽然在前面已经有,但此处是核心逻辑,再次强调其重要性 + if (mMediaPlayer != null) { + stopPlayMusic(); // 确保旧的播放器已完全释放 + } + + mMediaPlayer = new MediaPlayer(); + isPlayingQueue = true; // 标记正在播放队列中的音频 + + try { + mMediaPlayer.setDataSource(context, Uri.parse(currentFilePath)); + Log.d(TAG, "playNextInQueue: Set data source for: " + currentFilePath + ", preparing async."); + mMediaPlayer.prepareAsync(); + + mMediaPlayer.setOnPreparedListener(mp -> { + Log.d(TAG, "onPrepared: MediaPlayer prepared for " + currentFilePath + ", starting playback."); + mp.start(); // 这里使用 mp,它是 MediaPlayer 实例本身 + if (audioStatusUpdateListener != null) + audioStatusUpdateListener.onStartPlay(); + }); + + mMediaPlayer.setOnCompletionListener(mp -> { + Log.d(TAG, "onCompletion: Playback finished for " + currentFilePath + ", moving to next."); + // 注意:onFinishPlay() 应该在整个队列播放完毕时才触发,而不是单个文件 + stopPlayMusic(); // 播放完成后释放当前播放器 + playNextInQueue(context); // 递归调用,播放队列中的下一个 + }); + + mMediaPlayer.setOnErrorListener((mp, what, extra) -> { + Log.e(TAG, "onError: MediaPlayer error occurred: what=" + what + ", extra=" + extra + " for " + currentFilePath); + // 错误发生时,也要通知UI(如果需要),并尝试播放下一个 + if (audioStatusUpdateListener != null) + audioStatusUpdateListener.onFinishPlay(); // 通知当前文件播放失败 + stopPlayMusic(); // 释放当前播放器 + playNextInQueue(context); // 继续播放队列中的下一个 + return true; // 表示已处理错误 + }); + + } catch (IOException e) { + // IOException 通常是文件不存在、无法读取或URL无效 + Log.e(TAG, "IOException during MediaPlayer setup for " + currentFilePath, e); + // 捕获异常后,也要尝试播放下一个 + if (audioStatusUpdateListener != null) + audioStatusUpdateListener.onFinishPlay(); // 通知播放失败 + stopPlayMusic(); // 释放当前播放器 + playNextInQueue(context); // 继续播放队列中的下一个 + } catch (IllegalArgumentException e) { + // IllegalArgumentException 可能是URI格式不正确等 + Log.e(TAG, "IllegalArgumentException during MediaPlayer setup for " + currentFilePath, e); + if (audioStatusUpdateListener != null) + audioStatusUpdateListener.onFinishPlay(); // 通知播放失败 + stopPlayMusic(); + playNextInQueue(context); + } catch (SecurityException e) { + // SecurityException 可能是权限问题 + Log.e(TAG, "SecurityException during MediaPlayer setup for " + currentFilePath, e); + if (audioStatusUpdateListener != null) + audioStatusUpdateListener.onFinishPlay(); // 通知播放失败 + stopPlayMusic(); + playNextInQueue(context); } catch (IllegalStateException e) { + // IllegalStateException 可能是 MediaPlayer 状态不正确 + Log.e(TAG, "IllegalStateException during MediaPlayer setup for " + currentFilePath, e); + if (audioStatusUpdateListener != null) + audioStatusUpdateListener.onFinishPlay(); // 通知播放失败 + stopPlayMusic(); + playNextInQueue(context); + } catch (Exception e) { // 最后捕获所有其他未知异常 + Log.e(TAG, "Generic Exception during MediaPlayer setup for " + currentFilePath, e); e.printStackTrace(); + if (audioStatusUpdateListener != null) + audioStatusUpdateListener.onFinishPlay(); // 通知播放失败 + stopPlayMusic(); + playNextInQueue(context); + } + } + // --- 新增结束 --- + + + public void stopPlayMusic() { +// playQueue.clear(); + isPlayingQueue = false; + if (mMediaPlayer == null) { + Log.d(TAG, "stopPlayMusic: MediaPlayer is null, nothing to stop."); + return; + } + try { + // 检查 MediaPlayer 是否处于可停止的状态 + // 如果正在准备或处于错误状态,直接 release 可能更安全 + if (mMediaPlayer.isPlaying()) { + mMediaPlayer.stop(); // 停止当前播放 + Log.d(TAG, "stopPlayMusic: Stopped active MediaPlayer."); + } + mMediaPlayer.release(); // 释放资源 + mMediaPlayer = null; // 置为 null,防止内存泄漏和引用旧对象 + Log.d(TAG, "stopPlayMusic: MediaPlayer released and set to null."); + } catch (IllegalStateException e) { + // 捕获 MediaPlayer 状态异常,例如在 prepareAsync() 期间调用 stop() + Log.e(TAG, "stopPlayMusic: IllegalStateException during stop/release.", e); + // 即使异常,也要尝试释放并置null,防止后续问题 + if (mMediaPlayer != null) { + mMediaPlayer.release(); + mMediaPlayer = null; + } + } catch (Exception e) { + // 捕获其他未知异常 + Log.e(TAG, "stopPlayMusic: General Exception during stop/release.", e); + if (mMediaPlayer != null) { + mMediaPlayer.release(); + mMediaPlayer = null; + } } } - /** - * 获取文件长度 - * - * @param context - * @param filePath - * @return - */ - public int getMusicTime(Context context, String filePath) { - if (mMediaPlayer != null) { - stopPlayMusic(); - } - mMediaPlayer = new MediaPlayer(); - try { - mMediaPlayer.setDataSource(context, Uri.parse(filePath)); - mMediaPlayer.prepare(); - int duration = mMediaPlayer.getDuration(); - if (0 != duration) { - mMediaPlayer.release(); - return duration / 1000; - } - } catch (IOException e) { - e.printStackTrace(); - } - return 0; + // 新增设置监听器的方法 + public void setOnAudioStatusUpdateListener(OnAudioStatusUpdateListener audioStatusUpdateListener) { + this.audioStatusUpdateListener = audioStatusUpdateListener; } + } \ No newline at end of file diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml index 3805c97..18742d1 100644 --- a/app/src/main/res/layout/activity_main.xml +++ b/app/src/main/res/layout/activity_main.xml @@ -1,300 +1,402 @@ <?xml version="1.0" encoding="utf-8"?> -<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" +<RelativeLayout + xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" - android:layout_width="match_parent" android:layout_height="match_parent" - android:orientation="vertical" + android:layout_width="match_parent" tools:context=".ui.pub.StartActivity"> - <RelativeLayout - android:id="@+id/log" - android:visibility="gone" - android:layout_width="match_parent" - android:layout_height="100dp"> - <ScrollView - android:layout_width="match_parent" - android:background="@color/gray" - android:layout_height="100dp"> - <TextView - android:layout_width="match_parent" - android:layout_height="wrap_content" - android:textSize="10sp" - android:textColor="@color/end_red" - android:id="@+id/tv_log"/> - </ScrollView> - <TextView - android:layout_width="wrap_content" - android:layout_height="wrap_content" - android:id="@+id/copy" - android:text="复制" - android:padding="5dp" - android:layout_alignParentBottom="true" - android:layout_alignParentEnd="true" - android:textSize="14sp" - android:textColor="@color/textColor"/> - <TextView - android:layout_width="wrap_content" - android:layout_height="wrap_content" - android:id="@+id/cls" - android:text="清屏" - android:padding="5dp" - android:layout_alignParentBottom="true" - android:layout_toStartOf="@id/copy" - android:layout_marginEnd="5dp" - android:textSize="14sp" - android:textColor="@color/textColor"/> - </RelativeLayout> - - - <RelativeLayout - android:layout_width="match_parent" - android:layout_height="wrap_content" - android:background="@drawable/main_gradient"> - - <ImageView - android:id="@+id/iv_main_icon" - android:layout_width="wrap_content" - android:layout_height="wrap_content" - android:layout_marginStart="7dp" - android:layout_marginTop="13dp" - android:src="@mipmap/car" /> - - <TextView - android:id="@+id/tv_car_num" - android:layout_width="wrap_content" - android:layout_height="wrap_content" - android:layout_marginStart="3dp" - android:layout_marginTop="21dp" - android:layout_toRightOf="@+id/iv_main_icon" - android:text="川E 12345" - android:textColor="#ffffffff" - android:textSize="13sp" /> - - <TextView - android:id="@+id/tv_lien_name" - android:layout_width="105dp" - android:layout_height="18dp" - android:layout_below="@+id/tv_car_num" - android:layout_marginStart="3dp" - android:layout_marginTop="5dp" - android:layout_toRightOf="@+id/iv_main_icon" - android:text="广汽传媒传祺GS4 . 白色" - android:textColor="#ffffffff" - android:textSize="13sp" /> - - <TextView - android:id="@+id/tv_time" - android:layout_width="63dp" - android:layout_height="18dp" - android:layout_alignParentEnd="true" - android:layout_marginTop="21dp" - android:layout_marginEnd="11dp" - android:text="8月32日 星期三" - android:textColor="#ffffffff" - android:textSize="13sp" /> - - <LinearLayout - android:id="@+id/ll_info" - android:layout_width="match_parent" - android:layout_height="60dp" - android:layout_below="@+id/iv_main_icon" - android:orientation="horizontal"> - - <LinearLayout - android:id="@+id/ll_tests" - android:layout_width="0dp" - android:layout_height="match_parent" - android:layout_weight="1" - android:gravity="center" - android:orientation="vertical"> - - <TextView - android:id="@+id/tv_order_num" - android:layout_width="wrap_content" - android:layout_height="wrap_content" - android:text="11" - android:textColor="@color/white" - android:textSize="18sp" /> - - <TextView - android:layout_width="wrap_content" - android:layout_height="wrap_content" - android:text="今日接单" - android:textColor="@color/white" - android:textSize="12sp" /> - - - </LinearLayout> - - - <LinearLayout - android:layout_width="0dp" - android:layout_height="match_parent" - android:layout_weight="1" - android:gravity="center" - android:orientation="vertical"> - - <TextView - android:id="@+id/tv_month_order" - android:layout_width="wrap_content" - android:layout_height="wrap_content" - android:text="234" - android:textColor="@color/white" - android:textSize="18sp" /> - - <TextView - android:layout_width="wrap_content" - android:layout_height="wrap_content" - android:text="本月接单" - android:textColor="@color/white" - android:textSize="12sp" /> - - - </LinearLayout> - - - <LinearLayout - android:layout_width="0dp" - android:layout_height="match_parent" - android:layout_weight="1" - android:gravity="center" - android:orientation="vertical"> - - <TextView - android:id="@+id/tv_grade" - android:layout_width="wrap_content" - android:layout_height="wrap_content" - android:text="4.5" - android:textColor="@color/white" - android:textSize="18sp" /> - - <TextView - android:layout_width="wrap_content" - android:layout_height="wrap_content" - android:text="我的评分" - android:textColor="@color/white" - android:textSize="12sp" /> - - - </LinearLayout> - - <LinearLayout - android:id="@+id/ll_task" - android:layout_width="0dp" - android:layout_height="match_parent" - android:layout_weight="1" - android:gravity="center" - android:orientation="vertical" - android:visibility="gone"> - - <TextView - android:id="@+id/tv_task" - android:layout_width="wrap_content" - android:layout_height="wrap_content" - android:text="2" - android:textColor="@color/white" - android:textSize="18sp" /> - - <TextView - android:layout_width="wrap_content" - android:layout_height="wrap_content" - android:text="我的任务" - android:textColor="@color/white" - android:textSize="12sp" /> - - - </LinearLayout> - - - </LinearLayout> - - <LinearLayout - android:id="@+id/ll_order" - android:layout_width="match_parent" - android:layout_height="50dp" - android:background="@drawable/bg_white_25" - android:orientation="horizontal" - android:layout_below="@id/ll_info" - android:layout_marginBottom="14dp" - android:layout_marginHorizontal="14dp" - > - <TextView - android:layout_width="0dp" - android:layout_weight="1" - android:layout_height="wrap_content" - android:id="@+id/tv_1" - android:text="接单大厅" - android:textColor="@color/main_yellow_qia" - android:layout_gravity="center_vertical" - android:drawableStart="@mipmap/ic_order" - android:drawablePadding="10dp" - android:layout_marginStart="30dp" - android:textStyle="bold" - android:textSize="14sp"/> - <TextView - android:layout_width="20dp" - android:layout_height="20dp" - android:id="@+id/tv_count" - android:layout_gravity="center_vertical|end" - android:text="0" - android:background="@drawable/red_circle_bg" - android:textSize="12sp" - android:layout_marginEnd="15dp" - android:textColor="@color/white" - android:gravity="center"/> - <ImageView - android:layout_width="wrap_content" - android:layout_height="wrap_content" - android:layout_gravity="center_vertical" - android:src="@mipmap/more_black" - android:layout_marginEnd="30dp"/> - </LinearLayout> - </RelativeLayout> <LinearLayout android:layout_width="match_parent" - android:layout_height="40dp" - android:background="@color/white" - android:orientation="horizontal"> + android:layout_height="match_parent" + android:orientation="vertical"> - <TextView - android:id="@+id/tv_server_ing" - android:layout_width="0dp" - android:layout_height="match_parent" - android:layout_weight="1" - android:gravity="center" - android:text="服务中" - android:textColor="@color/main_yellow" - android:textSize="14sp" - android:textStyle="bold" /> + <RelativeLayout + android:id="@+id/log" + android:layout_width="match_parent" + android:layout_height="100dp" + android:visibility="gone"> - <TextView - android:id="@+id/tv_wait_server" - android:layout_width="0dp" - android:layout_height="match_parent" - android:layout_weight="1" - android:gravity="center" - android:text="待服务" - android:textColor="@color/main_gray" - android:textSize="14sp" - android:textStyle="bold" /> + <ScrollView + android:layout_width="match_parent" + android:layout_height="100dp" + android:background="@color/gray"> - </LinearLayout> + <TextView + android:id="@+id/tv_log" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:textColor="@color/end_red" + android:textSize="10sp" /> + </ScrollView> - <include layout="@layout/include_line" /> + <TextView + android:id="@+id/copy" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_alignParentEnd="true" + android:layout_alignParentBottom="true" + android:padding="5dp" + android:text="复制" + android:textColor="@color/textColor" + android:textSize="14sp" /> - <RelativeLayout - android:layout_width="match_parent" - android:layout_height="match_parent"> + <TextView + android:id="@+id/cls" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_alignParentBottom="true" + android:layout_marginEnd="5dp" + android:layout_toStartOf="@id/copy" + android:padding="5dp" + android:text="清屏" + android:textColor="@color/textColor" + android:textSize="14sp" /> + </RelativeLayout> <RelativeLayout - android:id="@+id/rl_container" android:layout_width="match_parent" - android:layout_height="match_parent" - android:layout_marginBottom="61dp" - android:background="#F3F4F5" /> + android:layout_height="wrap_content" + android:background="@drawable/main_gradient"> + + <ImageView + android:id="@+id/iv_main_icon" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_marginStart="7dp" + android:layout_marginTop="13dp" + android:src="@mipmap/car" /> + + <TextView + android:id="@+id/tv_car_num" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_marginStart="3dp" + android:layout_marginTop="21dp" + android:layout_toRightOf="@+id/iv_main_icon" + android:text="射洪出租车" + android:textColor="#ffffffff" + android:textSize="13sp" /> + + <TextView + android:id="@+id/tv_lien_name" + android:layout_width="105dp" + android:layout_height="18dp" + android:layout_below="@+id/tv_car_num" + android:layout_marginStart="3dp" + android:layout_marginTop="5dp" + android:layout_toRightOf="@+id/iv_main_icon" + android:text="" + android:textColor="#ffffffff" + android:textSize="13sp" /> + + <TextView + android:id="@+id/tv_time" + android:layout_width="63dp" + android:layout_height="18dp" + android:layout_alignParentEnd="true" + android:layout_marginTop="21dp" + android:layout_marginEnd="11dp" + android:text="8月32日 星期三" + android:textColor="#ffffffff" + android:textSize="13sp" /> + + <LinearLayout + android:id="@+id/ll_info" + android:layout_width="match_parent" + android:layout_height="60dp" + android:layout_below="@+id/iv_main_icon" + android:orientation="horizontal"> + + <LinearLayout + android:id="@+id/ll_tests" + android:layout_width="0dp" + android:layout_height="match_parent" + android:layout_weight="1" + android:gravity="center" + android:orientation="vertical"> + + <TextView + android:id="@+id/tv_order_num" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:text="11" + android:textColor="@color/white" + android:textSize="18sp" /> + + <TextView + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:text="今日接单" + android:textColor="@color/white" + android:textSize="12sp" /> + + + </LinearLayout> + + + <LinearLayout + android:layout_width="0dp" + android:layout_height="match_parent" + android:layout_weight="1" + android:gravity="center" + android:orientation="vertical"> + + <TextView + android:id="@+id/tv_month_order" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:text="234" + android:textColor="@color/white" + android:textSize="18sp" /> + + <TextView + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:text="本月接单" + android:textColor="@color/white" + android:textSize="12sp" /> + + + </LinearLayout> + + + <LinearLayout + android:layout_width="0dp" + android:layout_height="match_parent" + android:layout_weight="1" + android:gravity="center" + android:orientation="vertical"> + + <TextView + android:id="@+id/tv_grade" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:text="4.5" + android:textColor="@color/white" + android:textSize="18sp" /> + + <TextView + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:text="我的评分" + android:textColor="@color/white" + android:textSize="12sp" /> + + + </LinearLayout> + + <LinearLayout + android:id="@+id/ll_task" + android:layout_width="0dp" + android:layout_height="match_parent" + android:layout_weight="1" + android:gravity="center" + android:orientation="vertical" + android:visibility="gone"> + + <TextView + android:id="@+id/tv_task" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:text="2" + android:textColor="@color/white" + android:textSize="18sp" /> + + <TextView + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:text="我的任务" + android:textColor="@color/white" + android:textSize="12sp" /> + + + </LinearLayout> + + + </LinearLayout> + + <LinearLayout + android:id="@+id/ll_order" + android:layout_width="match_parent" + android:layout_height="50dp" + android:layout_below="@id/ll_info" + android:layout_marginHorizontal="14dp" + android:layout_marginBottom="14dp" + android:background="@drawable/bg_white_25" + android:orientation="horizontal" + android:visibility="gone"> + + <TextView + android:id="@+id/tv_1" + android:layout_width="0dp" + android:layout_height="wrap_content" + android:layout_gravity="center_vertical" + android:layout_marginStart="30dp" + android:layout_weight="1" + android:drawableStart="@mipmap/ic_order" + android:drawablePadding="10dp" + android:text="接单大厅" + android:textColor="@color/main_yellow_qia" + android:textSize="14sp" + android:textStyle="bold" /> + + <TextView + android:id="@+id/tv_count" + android:layout_width="20dp" + android:layout_height="20dp" + android:layout_gravity="center_vertical|end" + android:layout_marginEnd="15dp" + android:background="@drawable/red_circle_bg" + android:gravity="center" + android:text="0" + android:textColor="@color/white" + android:textSize="12sp" /> + + <ImageView + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_gravity="center_vertical" + android:layout_marginEnd="30dp" + android:src="@mipmap/more_black" /> + </LinearLayout> + </RelativeLayout> + + <androidx.core.widget.NestedScrollView + android:layout_width="match_parent" + android:layout_height="0dp" + android:clipToPadding="false" + android:paddingBottom="300dp" + android:layout_weight="1"> + + <LinearLayout + android:layout_width="match_parent" + android:layout_height="match_parent" + android:orientation="vertical"> + + <TextView + android:id="@+id/tv_order_big_all" + android:layout_width="match_parent" + android:layout_height="37dp" + android:background="@color/write" + android:gravity="center_vertical" + android:paddingStart="14dp" + android:text="接单大厅" + android:textColor="#ff333333" + android:textSize="14sp" /> + + <include layout="@layout/include_line_14" /> + + + <androidx.recyclerview.widget.RecyclerView + android:id="@+id/recycler_view_hall" + android:layout_width="match_parent" + android:layout_height="wrap_content" /> + + <RelativeLayout + android:layout_width="match_parent" + android:layout_height="match_parent"> + + <LinearLayout + android:id="@+id/ll_tab" + android:layout_width="match_parent" + android:layout_height="40dp" + android:background="@color/white" + android:orientation="horizontal"> + + <TextView + android:id="@+id/tv_order_small" + android:layout_width="0dp" + android:layout_height="match_parent" + android:layout_weight="1" + android:gravity="center" + android:text="小程序订单" + android:textColor="@color/main_yellow" + android:textSize="14sp" + android:textStyle="bold" /> + + <TextView + android:id="@+id/tv_server_ing" + android:layout_width="0dp" + android:layout_height="match_parent" + android:layout_weight="1" + android:gravity="center" + android:text="服务中" + android:textColor="@color/main_gray" + android:textSize="14sp" + android:textStyle="bold" /> + + <TextView + android:id="@+id/tv_wait_server" + android:layout_width="0dp" + android:layout_height="match_parent" + android:layout_weight="1" + android:gravity="center" + android:text="待服务" + android:textColor="@color/main_gray" + android:textSize="14sp" + android:textStyle="bold" /> + + </LinearLayout> + + <View + android:id="@+id/view_line_tab" + android:layout_width="match_parent" + android:layout_height="1px" + android:layout_below="@+id/ll_tab" + android:alpha="0.3" + android:background="#979797" /> + + + <RelativeLayout + android:id="@+id/rl_container" + android:layout_width="match_parent" + android:layout_height="match_parent" + android:minHeight="350dp" + android:layout_below="@+id/view_line_tab" + android:layout_marginBottom="61dp" /> + + </RelativeLayout> + + + </LinearLayout> + + </androidx.core.widget.NestedScrollView> + + </LinearLayout> + + <RelativeLayout + android:layout_alignParentBottom="true" + android:layout_width="match_parent" + android:layout_height="163dp"> + + <com.wang.avi.AVLoadingIndicatorView + android:id="@+id/avv_anim" + style="@style/AVLoadingIndicatorView.Small" + android:layout_width="100dp" + android:layout_height="100dp" + android:layout_alignParentBottom="true" + android:layout_centerHorizontal="true" + android:layout_marginBottom="63dp" + app:indicatorColor="@color/main_yellow" + app:indicatorName="BallScaleMultipleIndicator" /> + + + <TextView + android:id="@+id/tv_up_avv" + android:layout_width="100dp" + android:layout_height="100dp" + android:layout_alignParentBottom="true" + android:layout_centerHorizontal="true" + android:layout_marginBottom="63dp" + android:gravity="center" + android:text="听单中" + android:textColor="#ffffffff" + android:textSize="14sp" + android:textStyle="bold" /> <View android:id="@+id/view_line" @@ -333,11 +435,11 @@ android:layout_width="0dp" android:layout_height="38dp" android:layout_centerInParent="true" + android:layout_marginStart="12dp" + android:layout_marginEnd="12dp" android:layout_weight="1" android:background="@drawable/car_get_start" android:gravity="center" - android:layout_marginStart="12dp" - android:layout_marginEnd="12dp" android:text="出车" android:textColor="#ffffffff" android:textSize="14sp" @@ -349,49 +451,21 @@ android:layout_height="38dp" android:layout_alignParentEnd="true" android:layout_centerVertical="true" + android:layout_marginStart="12dp" + android:layout_marginEnd="12dp" android:layout_weight="1" android:background="@drawable/bg_main_gray" android:gravity="center" android:paddingStart="12dp" - android:layout_marginStart="12dp" - android:layout_marginEnd="12dp" android:paddingEnd="12dp" android:text="历史订单" android:textColor="#ff333333" android:textSize="14sp" android:textStyle="bold" /> - </LinearLayout> - - <com.wang.avi.AVLoadingIndicatorView - android:id="@+id/avv_anim" - style="@style/AVLoadingIndicatorView.Small" - android:layout_width="100dp" - android:layout_height="100dp" - android:layout_alignParentBottom="true" - android:layout_centerHorizontal="true" - android:layout_marginBottom="63dp" - app:indicatorColor="@color/main_yellow" - app:indicatorName="BallScaleMultipleIndicator" /> - - - <TextView - android:id="@+id/tv_up_avv" - android:layout_width="100dp" - android:layout_height="100dp" - android:layout_alignParentBottom="true" - android:layout_centerHorizontal="true" - android:layout_marginBottom="63dp" - android:gravity="center" - android:text="听单中" - android:textColor="#ffffffff" - android:textSize="14sp" - android:textStyle="bold" /> - </RelativeLayout> - -</LinearLayout> +</RelativeLayout> diff --git a/app/src/main/res/layout/activity_order_call.xml b/app/src/main/res/layout/activity_order_call.xml index fa1f51f..7770f9d 100644 --- a/app/src/main/res/layout/activity_order_call.xml +++ b/app/src/main/res/layout/activity_order_call.xml @@ -49,7 +49,7 @@ android:layout_marginBottom="11dp" android:drawableStart="@drawable/bg_point_main_color_end" android:drawablePadding="5dp" - android:text="柳州市政府" + android:text="射洪出租" android:textColor="#ff27282d" android:textSize="14sp" android:textStyle="bold" /> diff --git a/app/src/main/res/layout/activity_order_over_city.xml b/app/src/main/res/layout/activity_order_over_city.xml index 621fb2a..3418aed 100644 --- a/app/src/main/res/layout/activity_order_over_city.xml +++ b/app/src/main/res/layout/activity_order_over_city.xml @@ -38,7 +38,7 @@ android:layout_marginBottom="11dp" android:drawableStart="@drawable/bg_point_main_color" android:drawablePadding="5dp" - android:text="柳州市政府" + android:text="政府" android:textColor="#ff27282d" android:textSize="14sp" android:textStyle="bold" /> diff --git a/app/src/main/res/layout/activity_select_start_point.xml b/app/src/main/res/layout/activity_select_start_point.xml index 6333521..eb3859e 100644 --- a/app/src/main/res/layout/activity_select_start_point.xml +++ b/app/src/main/res/layout/activity_select_start_point.xml @@ -16,7 +16,7 @@ android:id="@+id/tv_city_name" android:layout_width="wrap_content" android:layout_height="match_parent" - android:text="柳州市" + android:text="" android:gravity="center" android:paddingStart="14dp" android:paddingEnd="30dp" diff --git a/app/src/main/res/layout/fragment_base_recycler.xml b/app/src/main/res/layout/fragment_base_recycler.xml index 10ba9f5..b673bd1 100644 --- a/app/src/main/res/layout/fragment_base_recycler.xml +++ b/app/src/main/res/layout/fragment_base_recycler.xml @@ -29,7 +29,7 @@ <com.scwang.smartrefresh.layout.header.ClassicsHeader android:layout_width="match_parent" - android:layout_height="wrap_content" + android:layout_height="80dp" android:gravity="center" /> <FrameLayout @@ -41,6 +41,7 @@ <androidx.core.widget.NestedScrollView android:id="@+id/nsv_base_scoll" android:layout_width="match_parent" + android:minHeight="500dp" android:layout_height="match_parent"> <LinearLayout @@ -50,6 +51,7 @@ <FrameLayout + android:id="@+id/fl_h_top" android:layout_width="match_parent" android:layout_height="wrap_content" /> @@ -87,7 +89,7 @@ <com.scwang.smartrefresh.layout.footer.ClassicsFooter android:layout_width="match_parent" - android:layout_height="wrap_content" + android:layout_height="80dp" android:gravity="center" app:srlTextNothing="没有更多了" app:srlTextSizeTitle="12sp" /> diff --git a/app/src/main/res/layout/fragment_main_small.xml b/app/src/main/res/layout/fragment_main_small.xml new file mode 100644 index 0000000..63a3e37 --- /dev/null +++ b/app/src/main/res/layout/fragment_main_small.xml @@ -0,0 +1,14 @@ +<?xml version="1.0" encoding="utf-8"?> +<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" + android:layout_width="match_parent" + android:layout_height="match_parent" + xmlns:app="http://schemas.android.com/apk/res-auto"> + + + <androidx.recyclerview.widget.RecyclerView + app:layout_constraintTop_toTopOf="parent" + android:id="@+id/recycler_view_main_small" + android:layout_width="match_parent" + android:layout_height="match_parent"/> + +</androidx.constraintlayout.widget.ConstraintLayout> \ No newline at end of file diff --git a/app/src/main/res/layout/include_order_top.xml b/app/src/main/res/layout/include_order_top.xml index 3c9cf92..a1a1088 100644 --- a/app/src/main/res/layout/include_order_top.xml +++ b/app/src/main/res/layout/include_order_top.xml @@ -73,7 +73,7 @@ android:layout_marginBottom="11dp" android:drawableStart="@drawable/bg_point_main_color_end" android:drawablePadding="5dp" - android:text="柳州市政府" + android:text="射洪出租" android:textColor="#ff27282d" android:textSize="14sp" android:textStyle="bold" /> diff --git a/app/src/main/res/layout/include_order_top_cargo.xml b/app/src/main/res/layout/include_order_top_cargo.xml index 986126d..4d86b14 100644 --- a/app/src/main/res/layout/include_order_top_cargo.xml +++ b/app/src/main/res/layout/include_order_top_cargo.xml @@ -73,7 +73,7 @@ android:layout_marginBottom="11dp" android:drawableStart="@drawable/bg_point_main_color" android:drawablePadding="5dp" - android:text="柳州市政府" + android:text="射洪出租" android:textColor="#ff27282d" android:textSize="14sp" android:textStyle="bold" /> diff --git a/app/src/main/res/layout/item_hall.xml b/app/src/main/res/layout/item_hall.xml index 873023a..87eb2c2 100644 --- a/app/src/main/res/layout/item_hall.xml +++ b/app/src/main/res/layout/item_hall.xml @@ -93,7 +93,7 @@ android:layout_marginStart="13dp" android:drawableStart="@drawable/bg_point_main_color_end" android:drawablePadding="6dp" - android:text="柳州市政府" + android:text="射洪出租" android:textStyle="bold" android:textColor="#ff27282d" android:textSize="14sp" diff --git a/app/src/main/res/layout/item_main_list.xml b/app/src/main/res/layout/item_main_list.xml index a78dcfb..89d3404 100644 --- a/app/src/main/res/layout/item_main_list.xml +++ b/app/src/main/res/layout/item_main_list.xml @@ -85,7 +85,7 @@ android:layout_marginStart="13dp" android:drawableStart="@drawable/bg_point_main_color_end" android:drawablePadding="6dp" - android:text="柳州市政府" + android:text="射洪出租" android:textStyle="bold" android:textColor="#ff27282d" android:textSize="14sp" diff --git a/app/src/main/res/layout/item_small_order.xml b/app/src/main/res/layout/item_small_order.xml new file mode 100644 index 0000000..bc6ddc3 --- /dev/null +++ b/app/src/main/res/layout/item_small_order.xml @@ -0,0 +1,219 @@ +<?xml version="1.0" encoding="utf-8"?> +<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:app="http://schemas.android.com/apk/res-auto" + android:layout_width="match_parent" + android:layout_marginTop="10dp" + android:layout_height="wrap_content"> + + <LinearLayout + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:layout_centerInParent="true" + android:orientation="vertical" + app:layout_constraintTop_toTopOf="parent"> + + <RelativeLayout + android:layout_width="match_parent" + android:layout_height="64dp" + android:background="@drawable/car_get_top"> + + <TextView + android:id="@+id/tv_title" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_centerHorizontal="true" + android:layout_marginTop="11dp" + android:text="距您约公里" + android:textColor="#ffffffff" + android:textSize="18sp" /> + + <TextView + android:id="@+id/tv_car_type" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_below="@+id/tv_title" + android:layout_alignStart="@+id/tv_title" + android:layout_marginTop="3dp" + android:text="订单" + android:textColor="#ffffffff" + android:textSize="13sp" /> + + <TextView + android:id="@+id/tv_reassign" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_below="@+id/tv_title" + android:layout_marginStart="7dp" + android:layout_marginTop="2dp" + android:layout_toRightOf="@+id/tv_car_type" + android:background="@drawable/bg_white_round_2" + android:paddingStart="10dp" + android:paddingTop="2dp" + android:paddingEnd="10dp" + android:paddingBottom="2dp" + android:text="" + android:textColor="#fffd943a" + android:textSize="11sp" /> + + </RelativeLayout> + + <LinearLayout + android:id="@+id/ll_order_top" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:background="@color/white" + android:orientation="vertical" + android:paddingStart="33dp" + android:paddingTop="15dp" + android:paddingBottom="11dp"> + + <TextView + android:id="@+id/tv_time" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_marginTop="6dp" + android:layout_marginBottom="6dp" + android:drawableStart="@mipmap/icon_time_gray" + android:drawablePadding="5dp" + android:textColor="#666666" + android:textSize="16sp" + android:textStyle="bold" /> + + <TextView + android:id="@+id/tv_start" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_marginTop="6dp" + android:layout_marginBottom="6dp" + android:drawableStart="@drawable/bg_point_main_color_end" + android:drawablePadding="5dp" + android:text="" + android:textColor="#ff27282d" + android:textSize="16sp" + android:textStyle="bold" /> + + <TextView + android:id="@+id/tv_end" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_marginTop="6dp" + android:layout_marginBottom="6dp" + android:drawableStart="@drawable/bg_point_main_color" + android:drawablePadding="5dp" + android:text="" + android:textColor="#ff27282d" + android:textSize="16sp" + android:textStyle="bold" /> + + <TextView + android:id="@+id/tv_money" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_marginTop="6dp" + android:layout_marginBottom="6dp" + android:drawableStart="@mipmap/hongbao" + android:drawablePadding="5dp" + android:text="" + android:textColor="#ff27282d" + android:textSize="16sp" + android:textStyle="bold" + android:visibility="gone" /> + + <TextView + android:id="@+id/tv_remark" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:visibility="gone" + android:layout_marginTop="3dp" + android:layout_marginBottom="6dp" + android:drawableStart="@mipmap/old_man" + android:drawablePadding="5dp" + android:text="" + android:textColor="#ff27282d" + android:textSize="16sp" + android:textStyle="bold" /> + + <TextView + android:id="@+id/tv_name" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_marginTop="3dp" + android:layout_marginBottom="6dp" + android:drawableStart="@mipmap/icon_people_gray" + android:drawablePadding="5dp" + android:text="" + android:textColor="#ff27282d" + android:textSize="16sp" + android:textStyle="bold" + android:visibility="gone" /> + + <TextView + android:id="@+id/tv_cargo_num" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_marginTop="3dp" + android:layout_marginBottom="6dp" + android:drawableStart="@mipmap/icon_item" + android:drawablePadding="5dp" + android:text="" + android:textColor="#ff27282d" + android:textSize="16sp" + android:textStyle="bold" + android:visibility="gone" /> + + <TextView + android:id="@+id/tv_cargo_money" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_marginTop="3dp" + android:layout_marginBottom="6dp" + android:drawableStart="@mipmap/icon_rocket" + android:drawablePadding="5dp" + android:text="" + android:textColor="#ff27282d" + android:textSize="16sp" + android:textStyle="bold" + android:visibility="gone" /> + + </LinearLayout> + + <LinearLayout + android:layout_width="match_parent" + android:layout_height="match_parent" + android:layout_marginTop="17dp" + android:orientation="horizontal"> + + <include layout="@layout/include_weight_width"/> + + <TextView + android:id="@+id/tv_close" + android:layout_width="120dp" + android:layout_height="wrap_content" + android:background="@drawable/car_get_close" + android:gravity="center" + android:paddingTop="8dp" + android:paddingBottom="8dp" + android:text="关闭" + android:textColor="@color/main_yellow" + android:textSize="16sp" /> + <include layout="@layout/include_weight_width"/> + + + <TextView + android:id="@+id/tv_sure" + android:layout_width="120dp" + android:layout_height="wrap_content" + android:background="@drawable/car_get_start" + android:gravity="center" + android:paddingTop="8dp" + android:paddingBottom="8dp" + android:text="抢单" + android:textColor="@color/white" + android:textSize="16sp" /> + <include layout="@layout/include_weight_width"/> + + </LinearLayout> + + </LinearLayout> + +</androidx.constraintlayout.widget.ConstraintLayout> \ No newline at end of file diff --git a/app/src/main/res/layout/item_trip_item.xml b/app/src/main/res/layout/item_trip_item.xml index d85ede3..c7b6678 100644 --- a/app/src/main/res/layout/item_trip_item.xml +++ b/app/src/main/res/layout/item_trip_item.xml @@ -82,7 +82,7 @@ android:layout_height="wrap_content" android:drawableStart="@drawable/bg_point_main_color" android:drawablePadding="3dp" - tools:text="柳州市政府" + tools:text="射洪出租" android:textColor="#ff27282d" android:textSize="12sp" android:textStyle="bold" /> diff --git a/build.gradle b/build.gradle index b9c7c05..2a61309 100644 --- a/build.gradle +++ b/build.gradle @@ -3,12 +3,13 @@ buildscript { ext.kotlin_version = '1.3.61' repositories { - maven { url 'https://jitpack.io' } - google() - jcenter() maven { url "http://maven.aliyun.com/nexus/content/groups/public/" } maven { url 'https://maven.aliyun.com/repository/google/' } - maven { url 'https://maven.aliyun.com/repository/jcenter/' } +// maven { url 'https://maven.aliyun.com/repository/jcenter/' } + google() +// jcenter() + mavenCentral() + maven { url 'https://jitpack.io' } } dependencies { @@ -21,15 +22,16 @@ allprojects { repositories { - maven { url 'https://jitpack.io' } - google() - jcenter() + maven { url "http://maven.aliyun.com/nexus/content/groups/public/" } maven { url 'https://maven.aliyun.com/repository/google/' } - maven { url 'https://maven.aliyun.com/repository/jcenter/' } - maven { url 'https://jitpack.io' } - maven { url 'https://dl.bintray.com/umsdk/release' } +// maven { url 'https://maven.aliyun.com/repository/jcenter/' } + google() +// jcenter() mavenCentral() + maven { url 'https://dl.bintray.com/umsdk/release' } + maven { url 'https://jitpack.io' } + flatDir { dirs 'libs' } -- Gitblit v1.7.1