From e7f173fde229854aa33daff35cd8d76707b89cd4 Mon Sep 17 00:00:00 2001 From: lijia Date: Mon, 18 Mar 2024 15:44:24 +0800 Subject: [PATCH] =?UTF-8?q?=E8=AF=84=E4=BB=B7=E7=AE=A1=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/src/main/AndroidManifest.xml | 5 + .../com/dahe/gldriver/adapter/RateAdapter.kt | 52 ++++ .../java/com/dahe/gldriver/base/AppConfig.kt | 1 + .../java/com/dahe/gldriver/bean/ApiBean.kt | 31 +++ .../java/com/dahe/gldriver/bean/UserBean.kt | 2 +- .../main/java/com/dahe/gldriver/net/Api.kt | 29 ++- .../gldriver/ui/account/CodeLoginActivity.kt | 17 +- .../gldriver/ui/account/SelectRoleActivity.kt | 20 +- .../com/dahe/gldriver/ui/mine/MineFragment.kt | 11 +- .../ui/mine/activity/RateManActivity.kt | 154 +++++++++++ .../gldriver/ui/mine/fragment/RateFragment.kt | 89 +++++++ .../dahe/gldriver/utils/OneKeyLoginUtils.kt | 16 +- app/src/main/res/layout/activity_rate_man.xml | 245 ++++++++++++++++++ app/src/main/res/layout/item_rate.xml | 125 +++++++++ 14 files changed, 767 insertions(+), 30 deletions(-) create mode 100644 app/src/main/java/com/dahe/gldriver/adapter/RateAdapter.kt create mode 100644 app/src/main/java/com/dahe/gldriver/bean/ApiBean.kt create mode 100644 app/src/main/java/com/dahe/gldriver/ui/mine/activity/RateManActivity.kt create mode 100644 app/src/main/java/com/dahe/gldriver/ui/mine/fragment/RateFragment.kt create mode 100644 app/src/main/res/layout/activity_rate_man.xml create mode 100644 app/src/main/res/layout/item_rate.xml diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 22c5437..04462de 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -272,6 +272,11 @@ android:configChanges="keyboardHidden|orientation|locale" android:screenOrientation="portrait" android:windowSoftInputMode="adjustPan|stateHidden" /> + () { + override fun onBindViewHolder(holder: QuickViewHolder, position: Int, item: RateBean?) { + item?.let { + holder.run { + setText(R.id.tvDate, item.createTime) + setText(R.id.tvContent, item.opinionsContent) + setText(R.id.tvComName, item.realCompanyName) + setText( + R.id.tvRate, + """交易${item.shipperPositiveReviewRate} 好评率${item.shipperTransactionVolume.toInt() * 100}%""" + ) + + val rating = getView(R.id.rating) + rating.rating = item.opinionsStarRating.toFloat() / 2 + ImageLoader.getInstance() + .loadRoundImage(context, it.avatar, 6, getView(R.id.ivHead)) + } + } + } + + override fun onCreateViewHolder( + context: Context, + parent: ViewGroup, + viewType: Int + ): QuickViewHolder { + // 返回一个 ViewHolder + return QuickViewHolder(R.layout.item_rate, parent) + } +} \ No newline at end of file diff --git a/app/src/main/java/com/dahe/gldriver/base/AppConfig.kt b/app/src/main/java/com/dahe/gldriver/base/AppConfig.kt index 54d04c9..e624213 100644 --- a/app/src/main/java/com/dahe/gldriver/base/AppConfig.kt +++ b/app/src/main/java/com/dahe/gldriver/base/AppConfig.kt @@ -17,6 +17,7 @@ object AppConfig { const val IS_FIRST_OPEN = "DA_HE_IS_FIRST_OPEN" const val WAYBILL_ID = "DA_HE_WAYBILL_ID" const val CHILDRE_ID = "DA_HE_CHILDRE_ID" + const val RATE_TYPE = "DA_HE_RATE_TYPE"//0:收到的评价 1:发表的评价 const val CODE = "DA_HE_PHONE" const val REFRSH = "DA_HE_REFRSH" const val SUCCESS_TYPE = "DA_HE_SUCCESS_TYPE" diff --git a/app/src/main/java/com/dahe/gldriver/bean/ApiBean.kt b/app/src/main/java/com/dahe/gldriver/bean/ApiBean.kt new file mode 100644 index 0000000..bb8c25a --- /dev/null +++ b/app/src/main/java/com/dahe/gldriver/bean/ApiBean.kt @@ -0,0 +1,31 @@ +package com.dahe.gldriver.bean + +/** + * @ClassName ApiBean + * @Author john + * @Date 2024/3/18 09:59 + * @Description TODO + */ +data class RateBean( + val createBy: String, + val createTime: String, + val driverId: Int, + val operatorType: String, + val opinionsContent: String, + val positiveReviewRate: String, + val totalNumberOfOrders: String, + val numberOfEvaluations1: String, + val numberOfEvaluations2: String, + val numberOfEvaluations3: String, + val opinionsId: Int, + val opinionsStarRating: Int, + val opinionsStatus: String, + val opinionsType: String, + val realCompanyName: String, + val shipperPositiveReviewRate: String, + val shipperTransactionVolume: String, + val avatar: String, + val orderId: Int, + val updateBy: String +) + diff --git a/app/src/main/java/com/dahe/gldriver/bean/UserBean.kt b/app/src/main/java/com/dahe/gldriver/bean/UserBean.kt index 1f7fc71..842e484 100644 --- a/app/src/main/java/com/dahe/gldriver/bean/UserBean.kt +++ b/app/src/main/java/com/dahe/gldriver/bean/UserBean.kt @@ -30,7 +30,7 @@ data class UserBean( var qrcodeUrl :String, var expires_in :Int, var credit :String, - var isCarCaptain :String, + var isCarCaptain :String,//是否是车队长(0=否,1=是,9=未选择) var contactName :String, var idcardName :String, var avatar :String, diff --git a/app/src/main/java/com/dahe/gldriver/net/Api.kt b/app/src/main/java/com/dahe/gldriver/net/Api.kt index 5f4f49a..e4db75c 100644 --- a/app/src/main/java/com/dahe/gldriver/net/Api.kt +++ b/app/src/main/java/com/dahe/gldriver/net/Api.kt @@ -11,6 +11,7 @@ import com.dahe.gldriver.bean.InviteRecord import com.dahe.gldriver.bean.OcrPersonBean import com.dahe.gldriver.bean.OrderDetailBean import com.dahe.gldriver.bean.OssBean +import com.dahe.gldriver.bean.RateBean import com.dahe.gldriver.bean.UpBankInfoBean import com.dahe.gldriver.bean.UpCaptain import com.dahe.gldriver.bean.UpDriverInfoBean @@ -72,8 +73,8 @@ interface Api { * @param token String * @return Observable> */ - @GET(BASE_URL+"auth/driver/oneClickLogin") - fun oneClickLogin(@Query("token") token : String) :Observable> + @GET(BASE_URL + "auth/driver/oneClickLogin") + fun oneClickLogin(@Query("token") token: String): Observable> /** @@ -175,7 +176,7 @@ interface Api { * @param upPart UpPart * @return Observable> */ - @POST(BASE_URL+"driver/driver/submitToCpcAuthentication") + @POST(BASE_URL + "driver/driver/submitToCpcAuthentication") fun submitToCpcAuthentication(@Body upPart: UpPart): Observable> /** @@ -183,7 +184,7 @@ interface Api { * @param upPart UpPart * @return Observable> */ - @GET(BASE_URL+"driver/driver/getCpcAuthenticationInfo") + @GET(BASE_URL + "driver/driver/getCpcAuthenticationInfo") fun getCpcAuthenticationInfo(): Observable> @@ -235,8 +236,8 @@ interface Api { * @param upRate UpRate * @return Observable> */ - @POST(BASE_URL+"driver/opinions/submitComments") - fun submitComments(@Body upRate: UpRate):Observable> + @POST(BASE_URL + "driver/opinions/submitComments") + fun submitComments(@Body upRate: UpRate): Observable> /** @@ -359,6 +360,22 @@ interface Api { fun getCaptainById(@Query("captainId") captainId: String): Observable> + /** + * 查询运单评价信息列表 + * opinionsType 评价类型(0=司机评价,1=货主评价) + * @return Observable> + */ + @GET(BASE_URL + "driver/opinions/list") + fun waybillRate(@Query("opinionsType") opinionsType : String): Observable>> + + /** + * 查询司机总评价信息 + * @return Observable> + */ + @GET(BASE_URL + "driver/opinions/getDriverOpinionsStatInfo") + fun driverRate(): Observable> + + companion object { // String BASE_URL = "https://tmstest.dahehuoyun.com/"; const val BASE_URL = BuildConfig.BASE_URL diff --git a/app/src/main/java/com/dahe/gldriver/ui/account/CodeLoginActivity.kt b/app/src/main/java/com/dahe/gldriver/ui/account/CodeLoginActivity.kt index 6df7dd0..1e50c4c 100644 --- a/app/src/main/java/com/dahe/gldriver/ui/account/CodeLoginActivity.kt +++ b/app/src/main/java/com/dahe/gldriver/ui/account/CodeLoginActivity.kt @@ -74,10 +74,19 @@ class CodeLoginActivity : BaseActivity(), View.OnClickListe override fun onSuccess(t: CommonResponseBean) { super.onSuccess(t) SPUtils.instance.setUserInfo(mContext, Gson().toJson(t.data)) - ActivityUtils.startActivity( - mContext, - HomeActivity::class.java - ) + if (t.data.isCarCaptain == "9") {//是否是车队长(0=否,1=是,9=未选择) + ActivityUtils.startActivity( + mContext, + SelectRoleActivity::class.java + ) + } else { + ActivityUtils.startActivity( + mContext, + HomeActivity::class.java + ) + } + + ActivityUtils.finishToActivity(LoginActivity::class.java, true) } })) diff --git a/app/src/main/java/com/dahe/gldriver/ui/account/SelectRoleActivity.kt b/app/src/main/java/com/dahe/gldriver/ui/account/SelectRoleActivity.kt index 17810db..db6210b 100644 --- a/app/src/main/java/com/dahe/gldriver/ui/account/SelectRoleActivity.kt +++ b/app/src/main/java/com/dahe/gldriver/ui/account/SelectRoleActivity.kt @@ -28,17 +28,17 @@ class SelectRoleActivity : BaseActivity() { binding.rlPerson.setOnClickListener { - ActivityUtils.startActivity(mContext, AuthPersonActivity::class.java) +// ActivityUtils.startActivity(mContext, AuthPersonActivity::class.java) -// DataManager.getInstance().setUpDriverRole("0") -// .subscribeOn(Schedulers.io()) -// .observeOn(AndroidSchedulers.mainThread()) -// .subscribe(BaseObserver(mContext, object : RxHttpCallBack(this) { -// override fun onSuccess(t: CommonResponseBean) { -// super.onSuccess(t) -// ActivityUtils.startActivity(mContext, AuthPersonActivity::class.java) -// } -// })) + DataManager.getInstance().setUpDriverRole("0") + .subscribeOn(Schedulers.io()) + .observeOn(AndroidSchedulers.mainThread()) + .subscribe(BaseObserver(mContext, object : RxHttpCallBack(this) { + override fun onSuccess(t: CommonResponseBean) { + super.onSuccess(t) + ActivityUtils.startActivity(mContext, AuthPersonActivity::class.java) + } + })) // ActivityUtils.startActivity(mContext, AuthPersonActivity::class.java) } diff --git a/app/src/main/java/com/dahe/gldriver/ui/mine/MineFragment.kt b/app/src/main/java/com/dahe/gldriver/ui/mine/MineFragment.kt index bd24bdf..e1c8e8c 100644 --- a/app/src/main/java/com/dahe/gldriver/ui/mine/MineFragment.kt +++ b/app/src/main/java/com/dahe/gldriver/ui/mine/MineFragment.kt @@ -12,6 +12,7 @@ import com.dahe.gldriver.ui.mine.activity.CarTeamActivity import com.dahe.gldriver.ui.mine.activity.CarsManActivity import com.dahe.gldriver.ui.mine.activity.DriverTeamsActivity import com.dahe.gldriver.ui.mine.activity.PersonInfoActivity +import com.dahe.gldriver.ui.mine.activity.RateManActivity import com.dahe.gldriver.ui.mine.activity.WalletActivity import com.dahe.gldriver.utils.SPUtils import com.dahe.mylibrary.base.BaseFragment @@ -136,7 +137,7 @@ class MineFragment : BaseFragment(), View.OnClickListener { } 3 -> { - ToastUtils.showToast(mContext, tools[pos].title) + ActivityUtils.startActivity(mContext,RateManActivity::class.java) } } @@ -156,11 +157,11 @@ class MineFragment : BaseFragment(), View.OnClickListener { } 2 -> { - ToastUtils.showToast(mContext, tools[pos].title) + ToastUtils.showToast(mContext, plats[pos].title) } 3 -> { - ToastUtils.showToast(mContext, tools[pos].title) + ToastUtils.showToast(mContext, plats[pos].title) } 4 -> { @@ -168,11 +169,11 @@ class MineFragment : BaseFragment(), View.OnClickListener { } 5 -> { - ToastUtils.showToast(mContext, tools[pos].title) + ToastUtils.showToast(mContext, plats[pos].title) } 6 -> { - ToastUtils.showToast(mContext, tools[pos].title) + ToastUtils.showToast(mContext, plats[pos].title) } 7 -> { diff --git a/app/src/main/java/com/dahe/gldriver/ui/mine/activity/RateManActivity.kt b/app/src/main/java/com/dahe/gldriver/ui/mine/activity/RateManActivity.kt new file mode 100644 index 0000000..a73088b --- /dev/null +++ b/app/src/main/java/com/dahe/gldriver/ui/mine/activity/RateManActivity.kt @@ -0,0 +1,154 @@ +package com.dahe.gldriver.ui.mine.activity + +import android.content.Context +import android.graphics.Color +import android.os.Bundle +import android.view.View +import androidx.fragment.app.Fragment +import androidx.viewpager2.widget.ViewPager2 +import com.dahe.gldriver.R +import com.dahe.gldriver.adapter.PagersAdapter +import com.dahe.gldriver.base.AppConfig +import com.dahe.gldriver.bean.RateBean +import com.dahe.gldriver.databinding.ActivityRateManBinding +import com.dahe.gldriver.net.BaseObserver +import com.dahe.gldriver.net.DataManager +import com.dahe.gldriver.net.RxHttpCallBack +import com.dahe.gldriver.ui.mine.fragment.CarsManFragment +import com.dahe.gldriver.ui.mine.fragment.DriversManFragment +import com.dahe.gldriver.ui.mine.fragment.RateFragment +import com.dahe.gldriver.utils.SPUtils +import com.dahe.mylibrary.base.BaseActivity +import com.dahe.mylibrary.net.CommonResponseBean +import com.dahe.mylibrary.utils.ImageLoader +import com.dahe.mylibrary.utils.PhoneFormatCheckUtils +import io.reactivex.rxjava3.android.schedulers.AndroidSchedulers +import io.reactivex.rxjava3.schedulers.Schedulers +import net.lucode.hackware.magicindicator.FragmentContainerHelper +import net.lucode.hackware.magicindicator.buildins.UIUtil +import net.lucode.hackware.magicindicator.buildins.commonnavigator.CommonNavigator +import net.lucode.hackware.magicindicator.buildins.commonnavigator.abs.CommonNavigatorAdapter +import net.lucode.hackware.magicindicator.buildins.commonnavigator.abs.IPagerIndicator +import net.lucode.hackware.magicindicator.buildins.commonnavigator.abs.IPagerTitleView +import net.lucode.hackware.magicindicator.buildins.commonnavigator.indicators.LinePagerIndicator +import net.lucode.hackware.magicindicator.buildins.commonnavigator.titles.ColorTransitionPagerTitleView + +/** + * @ClassName RateManActivity + * @Author john + * @Date 2024/3/18 08:51 + * @Description TODO + */ +class RateManActivity : BaseActivity() { + + private val mFragmentContainerHelper = FragmentContainerHelper() + var mFragments = mutableListOf() + val titles = mutableListOf( + "收到的评价", "发表的评价" + ) + + + override fun initView(savedInstanceState: Bundle?) { + setStatusBarColor(R.color.white) + setTitleBar("评价管理", true) + + mFragments.run { + add(RateFragment().apply { + arguments = Bundle().apply { + putInt(AppConfig.RATE_TYPE, 0) + } + }) + add(RateFragment().apply { + arguments = Bundle().apply { + putInt(AppConfig.RATE_TYPE, 1) + } + }) + } + + var pagerAdapter = PagersAdapter(this, mFragments) + + + mFragmentContainerHelper.handlePageSelected(0, true) + + binding.viewPager.adapter = pagerAdapter + binding.viewPager.currentItem = 0 + binding.viewPager.registerOnPageChangeCallback(object : ViewPager2.OnPageChangeCallback() { + override fun onPageSelected(position: Int) { + super.onPageSelected(position) + mFragmentContainerHelper.handlePageSelected(position, true) + } + }); + + var commonNavigator = CommonNavigator(mContext) + commonNavigator.run { + isAdjustMode = true + adapter = object : CommonNavigatorAdapter() { + override fun getCount(): Int { + return titles.size + } + + override fun getTitleView(context: Context?, index: Int): IPagerTitleView { + val colorTransitionPagerTitleView = ColorTransitionPagerTitleView(context) + colorTransitionPagerTitleView.normalColor = Color.BLACK + colorTransitionPagerTitleView.selectedColor = Color.RED + colorTransitionPagerTitleView.text = titles[index] + colorTransitionPagerTitleView.setOnClickListener { + mFragmentContainerHelper.handlePageSelected(index) + switchPages(index) + } + return colorTransitionPagerTitleView + } + + override fun getIndicator(context: Context?): IPagerIndicator { + val indicator = LinePagerIndicator(context) + indicator.mode = LinePagerIndicator.MODE_WRAP_CONTENT + indicator.yOffset = UIUtil.dip2px(context, 3.0).toFloat() + indicator.setColors(Color.RED) + return indicator + } + + } + } + + binding.magicIndicator.navigator = commonNavigator + mFragmentContainerHelper.attachMagicIndicator(binding.magicIndicator) + + } + + override fun initDate() { + val userInfo = SPUtils.instance.getUserInfo(mContext) + if (userInfo != null) { + binding.run { + tvName.text = userInfo.idcardName + ImageLoader.getInstance() + .loadCircleImage(mContext, userInfo.avatar, ivHead, R.drawable.head_defaut) + } + } + DataManager.getInstance().driverRate().subscribeOn(Schedulers.io()) + .observeOn(AndroidSchedulers.mainThread()) + .subscribe(BaseObserver(mContext, object : RxHttpCallBack() { + override fun onSuccess(t: CommonResponseBean) { + super.onSuccess(t) + t.data?.let { + binding.run { + tvRating.text = if (it.positiveReviewRate.isNullOrEmpty()) "0%" else """${(it.positiveReviewRate.toInt() * 100)}%""" + pbOne.progress = + if (it.numberOfEvaluations1.isNullOrEmpty()) 0 else (it.numberOfEvaluations1.toInt() * 100 / it.totalNumberOfOrders.toInt()) + + pbTwo.progress = + if (it.numberOfEvaluations2.isNullOrEmpty()) 0 else (it.numberOfEvaluations2.toInt() * 100 / it.totalNumberOfOrders.toInt()) + + pbThree.progress = + if (it.numberOfEvaluations3.isNullOrEmpty()) 0 else (it.numberOfEvaluations3.toInt() * 100 / it.totalNumberOfOrders.toInt()) + } + } + } + })) + + + } + + private fun switchPages(index: Int) { + binding.viewPager.currentItem = index + } +} \ No newline at end of file diff --git a/app/src/main/java/com/dahe/gldriver/ui/mine/fragment/RateFragment.kt b/app/src/main/java/com/dahe/gldriver/ui/mine/fragment/RateFragment.kt new file mode 100644 index 0000000..c1127e1 --- /dev/null +++ b/app/src/main/java/com/dahe/gldriver/ui/mine/fragment/RateFragment.kt @@ -0,0 +1,89 @@ +package com.dahe.gldriver.ui.mine.fragment + +import android.graphics.Color +import android.widget.LinearLayout +import androidx.recyclerview.widget.LinearLayoutManager +import androidx.recyclerview.widget.RecyclerView +import com.dahe.gldriver.R +import com.dahe.gldriver.adapter.DriversAdapter +import com.dahe.gldriver.adapter.RateAdapter +import com.dahe.gldriver.base.AppConfig +import com.dahe.gldriver.bean.RateBean +import com.dahe.gldriver.databinding.FragmentWaybillListBinding +import com.dahe.gldriver.net.BaseObserver +import com.dahe.gldriver.net.DataManager +import com.dahe.gldriver.net.RxHttpCallBack +import com.dahe.gldriver.ui.mine.InviteDriverActivity +import com.dahe.mylibrary.base.BaseFragment +import com.dahe.mylibrary.callback.RefreshCallBack +import com.dahe.mylibrary.net.CommonResponseBean +import com.dahe.mylibrary.recycleviewswipe.RecycleViewDivider +import com.dahe.mylibrary.utils.ActivityUtils +import com.dahe.mylibrary.utils.ConvertUtils +import io.reactivex.rxjava3.android.schedulers.AndroidSchedulers +import io.reactivex.rxjava3.schedulers.Schedulers + +/** + * @ClassName RateFragment + * @Author john + * @Date 2024/3/18 09:34 + * @Description TODO + */ +class RateFragment : BaseFragment(), RefreshCallBack { + var rateType: Int = 0 + + lateinit var adapter: RateAdapter + override fun onFragmentVisibleChange(isVisible: Boolean) { + } + + override fun onFragmentFirstVisible() { + setRefresh(binding.refresh,this) + arguments?.let { + rateType = it.getInt(AppConfig.RATE_TYPE, 0) + } + + adapter = binding.recyclerView.run { + layoutManager = LinearLayoutManager(mContext, RecyclerView.VERTICAL, false) + addItemDecoration( + RecycleViewDivider( + LinearLayout.VERTICAL, + ConvertUtils.dp2px(16.0f), + Color.TRANSPARENT + ) + ) + adapter = RateAdapter() + adapter as RateAdapter + }.apply { + isStateViewEnable = true + } + + binding.btnOk.setOnClickListener { + ActivityUtils.startActivity(mContext, InviteDriverActivity::class.java) + } + initData() + } + + private fun initData() { + DataManager.getInstance().waybillRate(rateType.toString()) + .subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()) + .subscribe(BaseObserver(mContext, object : RxHttpCallBack>() { + override fun onSuccess(t: CommonResponseBean>) { + super.onSuccess(t) + if (t.data ==null || t.data.size == 0) { + adapter.submitList(null) + adapter.setStateViewLayout(mContext, R.layout.empty_view) + } else { + adapter?.submitList(t.data) + } + setFinishRefresh( + binding.refresh, + t.total > mRefreshPage * mRefreshCount + ) + } + })) + } + + override fun getRefreshDate(stat: Int, page: Int, count: Int) { + initData() + } +} \ No newline at end of file diff --git a/app/src/main/java/com/dahe/gldriver/utils/OneKeyLoginUtils.kt b/app/src/main/java/com/dahe/gldriver/utils/OneKeyLoginUtils.kt index fadd4c0..0b480e2 100644 --- a/app/src/main/java/com/dahe/gldriver/utils/OneKeyLoginUtils.kt +++ b/app/src/main/java/com/dahe/gldriver/utils/OneKeyLoginUtils.kt @@ -64,10 +64,18 @@ class OneKeyLoginUtils private constructor() { super.onSuccess(t) mPhoneNumberAuthHelper.quitLoginPage() SPUtils.instance.setUserInfo(context, Gson().toJson(t.data)) - ActivityUtils.startActivity( - context, - HomeActivity::class.java - ) + + if (t.data.isCarCaptain == "9") {//是否是车队长(0=否,1=是,9=未选择) + ActivityUtils.startActivity( + context, + SelectRoleActivity::class.java + ) + } else { + ActivityUtils.startActivity( + context, + HomeActivity::class.java + ) + } ActivityUtils.finishToActivity(LoginActivity::class.java,true) } })) diff --git a/app/src/main/res/layout/activity_rate_man.xml b/app/src/main/res/layout/activity_rate_man.xml new file mode 100644 index 0000000..4ff4762 --- /dev/null +++ b/app/src/main/res/layout/activity_rate_man.xml @@ -0,0 +1,245 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/item_rate.xml b/app/src/main/res/layout/item_rate.xml new file mode 100644 index 0000000..93dd3b8 --- /dev/null +++ b/app/src/main/res/layout/item_rate.xml @@ -0,0 +1,125 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file