Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
S
ShenghuoquanBusiness
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
bp
ShenghuoquanBusiness
Commits
b1cf49ea
Commit
b1cf49ea
authored
Jul 01, 2021
by
shiyl
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
新建商品业务组件
parent
87fe1f26
Changes
73
Hide whitespace changes
Inline
Side-by-side
Showing
73 changed files
with
2165 additions
and
546 deletions
+2165
-546
build.gradle
CommonLib/Common/build.gradle
+8
-8
openDefault-10.10.0.aar
CommonLib/Common/libs/openDefault-10.10.0.aar
+0
-0
ParcelizeMap.kt
...ib/Common/src/main/java/com/yidian/common/ParcelizeMap.kt
+2
-2
XRouterPathConstants.kt
...n/src/main/java/com/yidian/common/XRouterPathConstants.kt
+3
-1
YdBaseApplication.kt
...mmon/src/main/java/com/yidian/common/YdBaseApplication.kt
+5
-0
BaseActivity.kt
...mmon/src/main/java/com/yidian/common/base/BaseActivity.kt
+59
-60
BaseMvvmActivity.kt
.../src/main/java/com/yidian/common/mvvm/BaseMvvmActivity.kt
+96
-0
BaseMvvmFragment.kt
.../src/main/java/com/yidian/common/mvvm/BaseMvvmFragment.kt
+62
-0
BaseViewComponent.kt
...src/main/java/com/yidian/common/mvvm/BaseViewComponent.kt
+66
-0
BaseViewModel.kt
...mon/src/main/java/com/yidian/common/mvvm/BaseViewModel.kt
+71
-0
ErrorInfo.kt
.../Common/src/main/java/com/yidian/common/mvvm/ErrorInfo.kt
+9
-0
BindingAdapter.kt
...ain/java/com/yidian/common/mvvm/binding/BindingAdapter.kt
+137
-0
ViewThrottleBindingAdapter.kt
.../yidian/common/mvvm/binding/ViewThrottleBindingAdapter.kt
+47
-0
Delegate.kt
...src/main/java/com/yidian/common/mvvm/delegate/Delegate.kt
+55
-0
SystemSettingUtils.kt
...c/main/java/com/yidian/common/utils/SystemSettingUtils.kt
+15
-0
ToastUtils.java
...mon/src/main/java/com/yidian/common/utils/ToastUtils.java
+332
-0
DialogBuilder.java
...src/main/java/com/yidian/common/widget/DialogBuilder.java
+254
-0
LoadingDialog.kt
...n/src/main/java/com/yidian/common/widget/LoadingDialog.kt
+90
-0
icon_next_arrow.webp
.../Common/src/main/res/drawable-xxhdpi/icon_next_arrow.webp
+0
-0
icon_search.webp
...nLib/Common/src/main/res/drawable-xxhdpi/icon_search.webp
+0
-0
bg_dialog.xml
CommonLib/Common/src/main/res/drawable/bg_dialog.xml
+9
-0
h_line.xml
CommonLib/Common/src/main/res/drawable/h_line.xml
+7
-0
v_line.xml
CommonLib/Common/src/main/res/drawable/v_line.xml
+7
-0
dialog_common.xml
CommonLib/Common/src/main/res/layout/dialog_common.xml
+90
-0
dialog_loading.xml
CommonLib/Common/src/main/res/layout/dialog_loading.xml
+33
-0
empty_view.xml
CommonLib/Common/src/main/res/layout/empty_view.xml
+18
-0
layout_common_toolbar.xml
...nLib/Common/src/main/res/layout/layout_common_toolbar.xml
+32
-25
test_databinding.xml
CommonLib/Common/src/main/res/layout/test_databinding.xml
+26
-0
colors.xml
CommonLib/Common/src/main/res/values/colors.xml
+5
-0
build.gradle
Components/commodity/build.gradle
+4
-6
AndroidManifest.xml
Components/commodity/src/main/AndroidManifest.xml
+3
-0
ClassMapUtil.kt
...ava/com/yidian/shenghuoquan/commodity/app/ClassMapUtil.kt
+16
-0
CommodityApplication.kt
...yidian/shenghuoquan/commodity/app/CommodityApplication.kt
+44
-0
CategoryListDto.kt
.../com/yidian/shenghuoquan/commodity/dto/CategoryListDto.kt
+26
-0
CouponDataSource.kt
...om/yidian/shenghuoquan/commodity/http/CouponDataSource.kt
+37
-0
CouponService.kt
...a/com/yidian/shenghuoquan/commodity/http/CouponService.kt
+26
-0
ICategoryListCallback.kt
...ghuoquan/commodity/http/callback/ICategoryListCallback.kt
+7
-0
ChooseCategoryActivity.kt
...henghuoquan/commodity/ui/coupon/ChooseCategoryActivity.kt
+80
-0
ChooseCategoryViewModel.kt
...enghuoquan/commodity/ui/coupon/ChooseCategoryViewModel.kt
+64
-0
CategoryListAdapter.kt
...uoquan/commodity/ui/coupon/adapter/CategoryListAdapter.kt
+14
-0
CategorySubListAdapter.kt
...uan/commodity/ui/coupon/adapter/CategorySubListAdapter.kt
+14
-0
AndroidManifest.xml
Components/commodity/src/main/manifest/AndroidManifest.xml
+12
-0
shape_gray_bg.xml
Components/commodity/src/main/res/drawable/shape_gray_bg.xml
+9
-0
commodity_activity_choose_category.xml
...rc/main/res/layout/commodity_activity_choose_category.xml
+98
-0
commodity_layout_category_list_item.xml
...c/main/res/layout/commodity_layout_category_list_item.xml
+21
-0
colors.xml
Components/commodity/src/main/res/values/colors.xml
+5
-0
strings.xml
Components/commodity/src/main/res/values/strings.xml
+5
-0
build.gradle
Components/newscontent/build.gradle
+5
-7
AndroidManifest.xml
Components/newscontent/src/main/AndroidManifest.xml
+0
-4
BottomSelectAdapter.kt
...n/shenghuoquan/newscontent/adapter/BottomSelectAdapter.kt
+4
-3
CommenViewPagerAdapter.kt
...henghuoquan/newscontent/adapter/CommenViewPagerAdapter.kt
+0
-54
FeedbackDetailAdapter.kt
...shenghuoquan/newscontent/adapter/FeedbackDetailAdapter.kt
+33
-31
LifeAccountIdentityAdapter.kt
...huoquan/newscontent/adapter/LifeAccountIdentityAdapter.kt
+9
-8
ShareAdapter.kt
...m/yidian/shenghuoquan/newscontent/adapter/ShareAdapter.kt
+6
-5
UpdateVersionDesAdapter.kt
...enghuoquan/newscontent/adapter/UpdateVersionDesAdapter.kt
+25
-25
NewsContentApplication.kt
...an/shenghuoquan/newscontent/app/NewsContentApplication.kt
+0
-17
ImageItemBean.kt
...com/yidian/shenghuoquan/newscontent/bean/ImageItemBean.kt
+2
-2
AccountListDto.kt
...shenghuoquan/newscontent/personnel/bean/AccountListDto.kt
+1
-1
FlashActivity.kt
...a/com/yidian/shenghuoquan/newscontent/ui/FlashActivity.kt
+17
-9
GalleryActivity.kt
...com/yidian/shenghuoquan/newscontent/ui/GalleryActivity.kt
+0
-81
LoginLifeCircleActivity.kt
...an/shenghuoquan/newscontent/ui/LoginLifeCircleActivity.kt
+6
-0
SelectAddressActivity.kt
...dian/shenghuoquan/newscontent/ui/SelectAddressActivity.kt
+0
-1
activity_gallery.xml
...ents/newscontent/src/main/res/layout/activity_gallery.xml
+0
-44
activity_login.xml
...onents/newscontent/src/main/res/layout/activity_login.xml
+9
-0
activity_search_channel.xml
...wscontent/src/main/res/layout/activity_search_channel.xml
+0
-15
search_view.xml
Components/newscontent/src/main/res/layout/search_view.xml
+0
-123
icon_search.png
...ts/newscontent/src/main/res/mipmap-xxhdpi/icon_search.png
+0
-0
build.gradle
Components/userinfo/build.gradle
+0
-4
build.gradle
app/build.gradle
+8
-1
proguard-rules.pro
app/proguard-rules.pro
+2
-0
AndroidManifest.xml
app/src/main/AndroidManifest.xml
+7
-8
config.gradle
config/config.gradle
+7
-0
build.gradle
idcard_quality/build.gradle
+1
-1
No files found.
CommonLib/Common/build.gradle
View file @
b1cf49ea
plugins
{
id
'com.android.library'
id
'kotlin-android'
id
'kotlin-android-extensions'
id
'kotlin-kapt'
id
'kotlin-parcelize'
}
android
{
...
...
@@ -57,11 +57,9 @@ android {
kotlinOptions
{
jvmTarget
=
'1.8'
}
androidExtensions
{
experimental
=
true
}
viewBinding
{
enabled
=
true
buildFeatures
{
viewBinding
true
dataBinding
true
}
kapt
{
generateStubs
=
true
...
...
@@ -74,8 +72,11 @@ android {
}
dependencies
{
// 注意高德地图jar引入需要使用compile,implementation不生效
compile
fileTree
(
include:
'*.jar'
,
dir:
'libs'
)
implementation
"org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version"
// kotlin实现MVVM框架之使用DataBinding之unresolved reference: BR解决办法
kapt
"com.android.databinding:compiler:4.0.1"
implementation
rootProject
.
ext
.
dependencies
.
publicImplementation
testImplementation
rootProject
.
ext
.
dependencies
.
testImplementation
androidTestImplementation
rootProject
.
ext
.
dependencies
.
androidTestImplementation
...
...
@@ -83,7 +84,6 @@ dependencies {
api
deps
.
xarc
.
xbrid
api
"com.yidian.xarc:xevent:0.0.3"
api
"com.yidian.xpage:xpagenative:0.0.1"
implementation
(
name:
'openDefault-10.10.0'
,
ext:
'aar'
)
//https://github.com/CymChad/BaseRecyclerViewAdapterHelper
api
"com.github.CymChad:BaseRecyclerViewAdapterHelper:3.0.4"
...
...
@@ -92,5 +92,5 @@ dependencies {
}
implementation
'com.github.bumptech.glide:glide:4.11.0'
annotationProcessor
'com.github.bumptech.glide:compiler:4.11.0'
kapt
'com.github.bumptech.glide:compiler:4.11.0'
}
\ No newline at end of file
CommonLib/Common/libs/openDefault-10.10.0.aar
deleted
100644 → 0
View file @
87fe1f26
File deleted
CommonLib/Common/src/main/java/com/yidian/common/ParcelizeMap.kt
View file @
b1cf49ea
package
com.yidian.common
import
android.os.Parcelable
import
kotlinx.
android.parcel
.Parcelize
import
kotlinx.
parcelize
.Parcelize
@Parcelize
class
ParcelizeMap
(
var
map
:
Map
<
String
,
String
?>?):
Parcelable
\ No newline at end of file
class
ParcelizeMap
(
var
map
:
Map
<
String
,
String
?>?):
Parcelable
CommonLib/Common/src/main/java/com/yidian/common/XRouterPathConstants.kt
View file @
b1cf49ea
...
...
@@ -9,7 +9,6 @@ class XRouterPathConstants {
const
val
NEWS_MAIN
=
"/MainActivity"
const
val
NEWS_CONTENT
=
"/news"
const
val
GALLERY
=
"/imageGallery"
const
val
PROTOCOL
=
"/protocol"
const
val
SUPPORT
=
"/productSupport"
...
...
@@ -79,5 +78,8 @@ class XRouterPathConstants {
// 钱包 —— 常见问题
const
val
COMMON_PROBLEM
=
"/wallet/CommonProblemActivity"
// 商品 —— 优惠券选择类目
const
val
chooseCategoryActivity
=
"/commodity/ChooseCategoryActivity"
}
}
CommonLib/Common/src/main/java/com/yidian/common/YdBaseApplication.kt
View file @
b1cf49ea
...
...
@@ -6,6 +6,7 @@ import com.scwang.smart.refresh.footer.ClassicsFooter
import
com.scwang.smart.refresh.header.ClassicsHeader
import
com.scwang.smart.refresh.layout.SmartRefreshLayout
import
com.scwang.smart.refresh.layout.constant.SpinnerStyle
import
timber.log.Timber
open
class
YdBaseApplication
:
Application
()
{
companion
object
{
...
...
@@ -15,6 +16,10 @@ open class YdBaseApplication : Application() {
override
fun
onCreate
()
{
super
.
onCreate
()
// 先初始化日志防止调用时报初始化异常
if
(
BuildConfig
.
DEBUG
)
{
Timber
.
plant
(
Timber
.
DebugTree
())
}
initSmartRefreshLayout
()
}
...
...
CommonLib/Common/src/main/java/com/yidian/common/base/BaseActivity.kt
View file @
b1cf49ea
...
...
@@ -10,75 +10,74 @@ import com.yidian.nightmode.preference.NightModeConfig
import
com.yidian.xpage.XPageViewProtocol
abstract
class
BaseActivity
<
VB
:
ViewBinding
>
:
NightAppCompatActivity
(),
XPageViewProtocol
{
protected
lateinit
var
viewBind
:
VB
override
fun
onCreate
(
savedInstanceState
:
Bundle
?)
{
super
.
onCreate
(
savedInstanceState
)
viewBind
=
createViewBinding
()
extraViewBinding
()
setContentView
(
viewBind
.
root
)
init
(
savedInstanceState
)
abstract
class
BaseActivity
<
VB
:
ViewBinding
>
:
NightAppCompatActivity
(),
XPageViewProtocol
{
protected
lateinit
var
viewBind
:
VB
override
fun
onCreate
(
savedInstanceState
:
Bundle
?)
{
super
.
onCreate
(
savedInstanceState
)
viewBind
=
createViewBinding
()
extraViewBinding
()
setContentView
(
viewBind
.
root
)
init
(
savedInstanceState
)
}
/**
* 如果有多个viewBinding需要初始化时
*/
open
fun
extraViewBinding
()
{
}
override
fun
updateCover
(
isNight
:
Boolean
)
{}
override
fun
getCurrentTheme
(
isNight
:
Boolean
):
Int
{
return
if
(
isNight
)
R
.
style
.
subway_theme_night
else
R
.
style
.
subway_theme_day
}
override
fun
setContentView
(
view
:
View
)
{
SystemBarUtils
.
setStatusBarTransparent
(
this
.
window
)
if
(
allowChangeStatusBarTextColor
())
{
setStatusBarTextColor
(
NightModeConfig
.
getInstance
().
nightMode
)
}
super
.
setContentView
(
view
)
}
/**
* 如果有多个viewBinding需要初始化时
*/
open
fun
extraViewBinding
()
{
}
private
fun
allowChangeStatusBarTextColor
():
Boolean
{
return
SystemBarUtils
.
supportTranslucentStatusBar
()
&&
SystemBarUtils
.
supportChangeStatusBarTextColor
()
}
override
fun
updateCover
(
isNight
:
Boolean
)
{}
abstract
fun
createViewBinding
():
VB
override
fun
getCurrentTheme
(
isNight
:
Boolean
):
Int
{
return
if
(
isNight
)
R
.
style
.
subway_theme_night
else
R
.
style
.
subway_theme_day
override
fun
onNightModeChanged
(
isNight
:
Boolean
)
{
super
.
onNightModeChanged
(
isNight
)
if
(
allowChangeStatusBarTextColor
())
{
setStatusBarTextColor
(
isNight
)
}
override
fun
setContentView
(
view
:
View
){
SystemBarUtils
.
setStatusBarTransparent
(
this
.
window
)
if
(
allowChangeStatusBarTextColor
()
)
{
setStatusBarTextColor
(
NightModeConfig
.
getInstance
().
nightMode
)
}
super
.
setContentView
(
view
)
}
open
fun
setStatusBarTextColor
(
isNight
:
Boolean
)
{
if
(
isNight
)
{
if
(
this
.
useWhiteStatusBarTextColorInNightMode
())
{
SystemBarUtils
.
setStatusBarTextColorWhite
(
this
)
}
else
{
SystemBarUtils
.
setStatusBarTextColorBlack
(
this
)
}
}
else
if
(
this
.
useBlackStatusBarTextColorInDayMode
())
{
SystemBarUtils
.
setStatusBarTextColorBlack
(
this
)
}
else
{
SystemBarUtils
.
setStatusBarTextColorWhite
(
this
)
}
}
private
fun
useBlackStatusBarTextColorInDayMode
():
Boolean
{
return
true
}
private
fun
allowChangeStatusBarTextColor
():
Boolean
{
return
SystemBarUtils
.
supportTranslucentStatusBar
()
&&
SystemBarUtils
.
supportChangeStatusBarTextColor
()
}
abstract
fun
createViewBinding
():
VB
override
fun
onNightModeChanged
(
isNight
:
Boolean
)
{
super
.
onNightModeChanged
(
isNight
)
if
(
allowChangeStatusBarTextColor
())
{
setStatusBarTextColor
(
isNight
)
}
}
open
fun
setStatusBarTextColor
(
isNight
:
Boolean
)
{
if
(
isNight
)
{
if
(
this
.
useWhiteStatusBarTextColorInNightMode
())
{
SystemBarUtils
.
setStatusBarTextColorWhite
(
this
)
}
else
{
SystemBarUtils
.
setStatusBarTextColorBlack
(
this
)
}
}
else
if
(
this
.
useBlackStatusBarTextColorInDayMode
())
{
SystemBarUtils
.
setStatusBarTextColorBlack
(
this
)
}
else
{
SystemBarUtils
.
setStatusBarTextColorWhite
(
this
)
}
}
private
fun
useBlackStatusBarTextColorInDayMode
():
Boolean
{
return
true
}
private
fun
useWhiteStatusBarTextColorInNightMode
():
Boolean
{
return
true
}
private
fun
useWhiteStatusBarTextColorInNightMode
():
Boolean
{
return
true
}
protected
open
fun
init
(
savedInstanceState
:
Bundle
?)
{}
protected
open
fun
init
(
savedInstanceState
:
Bundle
?)
{}
}
CommonLib/Common/src/main/java/com/yidian/common/mvvm/BaseMvvmActivity.kt
0 → 100644
View file @
b1cf49ea
package
com.yidian.common.mvvm
import
android.os.Bundle
import
android.view.View
import
androidx.appcompat.app.AppCompatActivity
import
androidx.databinding.ViewDataBinding
import
com.yidian.common.mvvm.delegate.viewBindings
import
com.yidian.common.widget.LoadingDialog
import
com.yidian.news.ui.SystemBarUtils
import
com.yidian.nightmode.preference.NightModeConfig
abstract
class
BaseMvvmActivity
<
V
:
ViewDataBinding
,
VM
:
BaseViewModel
>
:
AppCompatActivity
(),
BaseViewComponent
<
VM
>
{
override
val
loadingDialog
:
LoadingDialog
by
lazy
{
LoadingDialog
(
this
,
false
)
}
/**
* 模版方法:创建型模式,定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。
* 实际作用:将 layoutId 延迟到子类中实现
*
* @return layout Id
*/
protected
abstract
val
layoutId
:
Int
/**
* 模版方法:创建型模式,定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。
* 实际作用:将 vm 延迟到子类中实现
*
* @return vm ViewModel
*/
protected
abstract
val
vm
:
VM
/**
* 初始化视图,为具体实现类提供统一的函数签名
*/
protected
abstract
fun
initView
()
/**
* 严格 MVVM
* - 仅基类可见 binding 对象,向下透明;
* - 避免在子 Activity 中通过 binding 直接操作 View。
*/
protected
val
binding
:
V
by
lazy
{
viewBindings
(
layoutId
,
vm
)
}
// 向下提供 rootView
protected
val
rootView
:
View
by
lazy
{
binding
.
root
}
/**
* 生命周期函数
*/
override
fun
onCreate
(
savedInstanceState
:
Bundle
?)
{
super
.
onCreate
(
savedInstanceState
)
this
.
binding
.
executePendingBindings
()
this
.
initStatusBar
()
this
.
initView
()
vm
.
subscribeUiEvent
(
this
)
}
private
fun
initStatusBar
()
{
SystemBarUtils
.
setStatusBarTransparent
(
this
.
window
)
if
(
allowChangeStatusBarTextColor
())
{
setStatusBarTextColor
(
NightModeConfig
.
getInstance
().
nightMode
)
}
}
open
fun
setStatusBarTextColor
(
isNight
:
Boolean
)
{
if
(
isNight
)
{
if
(
this
.
useWhiteStatusBarTextColorInNightMode
())
{
SystemBarUtils
.
setStatusBarTextColorWhite
(
this
)
}
else
{
SystemBarUtils
.
setStatusBarTextColorBlack
(
this
)
}
}
else
if
(
this
.
useBlackStatusBarTextColorInDayMode
())
{
SystemBarUtils
.
setStatusBarTextColorBlack
(
this
)
}
else
{
SystemBarUtils
.
setStatusBarTextColorWhite
(
this
)
}
}
private
fun
useBlackStatusBarTextColorInDayMode
():
Boolean
{
return
true
}
private
fun
useWhiteStatusBarTextColorInNightMode
():
Boolean
{
return
true
}
private
fun
allowChangeStatusBarTextColor
():
Boolean
{
return
SystemBarUtils
.
supportTranslucentStatusBar
()
&&
SystemBarUtils
.
supportChangeStatusBarTextColor
()
}
}
CommonLib/Common/src/main/java/com/yidian/common/mvvm/BaseMvvmFragment.kt
0 → 100644
View file @
b1cf49ea
package
com.yidian.common.mvvm
import
android.os.Bundle
import
android.view.LayoutInflater
import
android.view.View
import
android.view.ViewGroup
import
androidx.annotation.LayoutRes
import
androidx.databinding.ViewDataBinding
import
androidx.fragment.app.Fragment
import
com.yidian.common.mvvm.delegate.viewBindings
import
com.yidian.common.widget.LoadingDialog
abstract
class
BaseMvvmFragment
<
V
:
ViewDataBinding
,
VM
:
BaseViewModel
>(
@LayoutRes
private
val
layoutId
:
Int
)
:
Fragment
(),
BaseViewComponent
<
VM
>
{
override
val
loadingDialog
:
LoadingDialog
by
lazy
{
LoadingDialog
(
requireActivity
())
}
/**
* 模版方法模式
*/
protected
abstract
fun
initView
()
/**
* 模版方法模式
*/
// VM 的类型通过范性限定,因此直接使用 val 的形式
protected
abstract
val
vm
:
VM
/**
* 模版方法模式
*/
// V 的类型通过范性限定,因此直接使用 val 的形式
protected
val
binding
:
V
by
lazy
{
viewBindings
(
layoutId
,
vm
)
}
override
fun
onCreate
(
savedInstanceState
:
Bundle
?)
{
super
.
onCreate
(
savedInstanceState
)
}
override
fun
onDestroy
()
{
super
.
onDestroy
()
}
/**
* Fragment 的 data-binding 发生在 [onCreateView] 函数内部,在此函数返回之前,尽量不要使用 vm 即 binding 对象
*/
override
fun
onCreateView
(
inflater
:
LayoutInflater
,
container
:
ViewGroup
?,
savedInstanceState
:
Bundle
?):
View
?
{
// setupDataBinding(inflater, container)
return
binding
.
root
}
override
fun
onViewCreated
(
view
:
View
,
savedInstanceState
:
Bundle
?)
{
super
.
onViewCreated
(
view
,
savedInstanceState
)
vm
.
subscribeUiEvent
(
viewLifecycleOwner
)
initView
()
}
}
CommonLib/Common/src/main/java/com/yidian/common/mvvm/BaseViewComponent.kt
0 → 100644
View file @
b1cf49ea
package
com.yidian.common.mvvm
import
android.view.View
import
androidx.lifecycle.LifecycleOwner
import
com.yidian.common.constant.ResultCode
import
com.yidian.common.utils.ToastUtils
import
com.yidian.common.widget.LoadingDialog
import
kotlinx.coroutines.ExperimentalCoroutinesApi
import
kotlinx.coroutines.FlowPreview
import
kotlinx.coroutines.channels.awaitClose
import
kotlinx.coroutines.flow.callbackFlow
import
kotlinx.coroutines.flow.debounce
interface
BaseViewComponent
<
VM
:
BaseViewModel
>
{
val
loadingDialog
:
LoadingDialog
fun
showLoading
()
{
loadingDialog
.
showDialog
(
"努力加载中..."
)
}
fun
hideLoading
()
{
loadingDialog
.
hideDialog
()
}
private
fun
VM
.
subscribeErrorEvent
(
lifecycleOwner
:
LifecycleOwner
)
{
errorEvent
.
observe
(
lifecycleOwner
)
{
when
(
it
.
code
)
{
ResultCode
.
INVALID
->
{
// 特定code分别处理
}
else
->
{
if
(
it
.
message
.
isNotBlank
())
{
ToastUtils
.
showShortSafe
(
it
.
message
)
}
}
}
}
}
private
fun
VM
.
subscribeLoadingEvent
(
lifecycleOwner
:
LifecycleOwner
)
{
loadingEvent
.
observe
(
lifecycleOwner
,
{
if
(
it
)
{
showLoading
()
}
else
{
hideLoading
()
}
})
}
fun
VM
.
subscribeUiEvent
(
lifecycleOwner
:
LifecycleOwner
)
{
subscribeLoadingEvent
(
lifecycleOwner
)
subscribeErrorEvent
(
lifecycleOwner
)
}
}
@FlowPreview
@ExperimentalCoroutinesApi
fun
View
.
clickAsFlow
()
=
callbackFlow
{
setOnClickListener
{
offer
(
Unit
)
}
awaitClose
{
setOnClickListener
(
null
)
}
}.
debounce
(
300
)
CommonLib/Common/src/main/java/com/yidian/common/mvvm/BaseViewModel.kt
0 → 100644
View file @
b1cf49ea
package
com.yidian.common.mvvm
import
androidx.annotation.IdRes
import
androidx.lifecycle.LiveData
import
androidx.lifecycle.MutableLiveData
import
androidx.lifecycle.ViewModel
abstract
class
BaseViewModel
:
ViewModel
()
{
/**
* 页面回退 Event
*/
private
val
_goBackEvent
=
MutableLiveData
<
Unit
>()
val
goBackEvent
:
LiveData
<
Unit
>
=
_goBackEvent
fun
postBackEvent
()
{
_goBackEvent
.
value
=
Unit
}
/**
* 页面前进 Event
*/
private
val
_goNextEvent
=
MutableLiveData
<
Any
?>()
val
goNextEvent
:
LiveData
<
Any
?>
=
_goNextEvent
/**
* 重置前进,每次页面跳转后应立即调用
*/
fun
resetNextEvent
()
{
_goNextEvent
.
value
=
null
}
/**
* 跳转到指定的导航目的地
*/
fun
postNextEvent
(
@IdRes
navId
:
Int
)
{
_goNextEvent
.
value
=
navId
}
/**
* 跳转到指定的路由
*/
fun
postNextEvent
(
routerName
:
String
)
{
_goNextEvent
.
value
=
routerName
}
/**
* 自定义跳转,可接收多个参数
*/
fun
postNextEvent
(
list
:
List
<
Any
?
>)
{
_goNextEvent
.
value
=
list
}
/**
* 错误信息 Event
*/
private
val
_errorEvent
=
MutableLiveData
<
ErrorInfo
>()
val
errorEvent
:
LiveData
<
ErrorInfo
>
=
_errorEvent
fun
postErrorEvent
(
errorInfo
:
ErrorInfo
)
{
_errorEvent
.
value
=
errorInfo
}
/**
* 加载动画 Event
*/
private
val
_loadingEvent
=
MutableLiveData
(
false
)
val
loadingEvent
:
LiveData
<
Boolean
>
=
_loadingEvent
fun
postLoadingEvent
(
isLoading
:
Boolean
=
true
)
{
_loadingEvent
.
value
=
isLoading
}
}
CommonLib/Common/src/main/java/com/yidian/common/mvvm/ErrorInfo.kt
0 → 100644
View file @
b1cf49ea
package
com.yidian.common.mvvm
/**
* 异常处理结果
*/
data class
ErrorInfo
(
val
code
:
Int
=
-
1
,
// 编号
val
message
:
String
,
// 解释
)
CommonLib/Common/src/main/java/com/yidian/common/mvvm/binding/BindingAdapter.kt
0 → 100644
View file @
b1cf49ea
package
com.yidian.common.mvvm.binding
import
android.view.View
import
android.widget.CheckBox
import
android.widget.EditText
import
android.widget.ImageView
import
androidx.databinding.BindingAdapter
import
androidx.recyclerview.widget.RecyclerView
import
com.bumptech.glide.Glide
import
com.google.android.material.tabs.TabLayout
import
com.google.android.material.textfield.TextInputLayout
import
com.yidian.common.R
import
com.yidian.common.extensions.toggleVisibility
/**
* 是否显示该 View
*/
@BindingAdapter
(
"isShow"
)
fun
bindIsShow
(
view
:
View
,
isShow
:
Boolean
)
{
view
.
toggleVisibility
(
isShow
)
}
/**
* 是否显示该 View
*/
@BindingAdapter
(
"isVisible"
)
fun
bindIsVisible
(
view
:
View
,
isVisible
:
Boolean
)
{
if
(
isVisible
)
{
view
.
visibility
=
View
.
VISIBLE
}
else
{
view
.
visibility
=
View
.
INVISIBLE
}
}
/**
* 是否显示该 View
*/
@BindingAdapter
(
"isGone"
)
fun
bindIsGone
(
view
:
View
,
isGone
:
Boolean
)
{
if
(
isGone
)
{
view
.
visibility
=
View
.
GONE
}
else
{
view
.
visibility
=
View
.
VISIBLE
}
}
/**
* 是否显示Error
*/
@BindingAdapter
(
"textInputError"
)
fun
bindIsShowError
(
textInputLayout
:
TextInputLayout
,
errorMessage
:
String
?)
{
textInputLayout
.
error
=
errorMessage
}
/**
* 借用 View 的 selected 属性,仿制按钮 enable
*/
@BindingAdapter
(
"isSelected"
)
fun
bindIsSelected
(
view
:
View
,
isSelected
:
Boolean
)
{
view
.
isSelected
=
isSelected
}
/**
* 为 [TabLayout] 的 Tabs 绑定 title
*/
@BindingAdapter
(
"tabTitles"
)
fun
bindTabLayoutTitles
(
tab
:
TabLayout
,
titles
:
List
<
String
?
>?)
{
titles
?.
forEachIndexed
{
index
,
s
->
tab
.
getTabAt
(
index
)
?.
text
=
s
}
}
@BindingAdapter
(
value
=
[
"setAdapter"
])
fun
RecyclerView
.
bindRecyclerViewAdapter
(
adapter
:
RecyclerView
.
Adapter
<*>)
{
this
.
setHasFixedSize
(
true
)
this
.
adapter
=
adapter
}
@BindingAdapter
(
"imageUrl"
)
fun
bindImageUrl
(
imageView
:
ImageView
,
imageUrl
:
String
)
{
Glide
.
with
(
imageView
.
context
).
load
(
imageUrl
).
centerCrop
().
placeholder
(
R
.
color
.
color_F6F6F6
).
into
(
imageView
)
}
@BindingAdapter
(
"imageSrc"
)
fun
setImageSrc
(
imageView
:
ImageView
,
resId
:
Int
)
{
imageView
.
setImageResource
(
resId
)
}
@BindingAdapter
(
"android:editable"
)
fun
setEditable
(
editText
:
EditText
,
boolean
:
Boolean
)
{
editText
.
isFocusable
=
boolean
editText
.
isFocusableInTouchMode
=
boolean
}
@BindingAdapter
(
"android:clickable"
)
fun
clickable
(
view
:
View
,
boolean
:
Boolean
)
{
view
.
isClickable
=
boolean
}
data class
IconState
(
val
state
:
Int
=
1
,
)
{
fun
isSelected
():
Boolean
{
return
(
state
and
SELECTED
)
==
1
}
fun
isChecked
():
Boolean
{
return
(
state
and
CHECKED
)
==
1
}
companion
object
{
private
const
val
BASELINE
:
Int
=
1
private
const
val
SELECTED
:
Int
=
BASELINE
shr
1
private
const
val
CHECKED
:
Int
=
BASELINE
shr
2
fun
newState
(
vararg
state
:
IconState
):
IconState
{
return
state
.
reduce
{
a
,
b
->
return
IconState
(
a
.
state
or
b
.
state
)
}
}
}
}
@BindingAdapter
(
"iconState"
)
fun
View
.
bindIconState
(
state
:
IconState
)
{
this
.
isSelected
=
state
.
isSelected
()
}
@BindingAdapter
(
"iconState"
)
fun
CheckBox
.
bindIconState
(
state
:
IconState
)
{
this
.
isSelected
=
state
.
isSelected
()
this
.
isChecked
=
state
.
isChecked
()
}
CommonLib/Common/src/main/java/com/yidian/common/mvvm/binding/ViewThrottleBindingAdapter.kt
0 → 100644
View file @
b1cf49ea
package
com.yidian.common.mvvm.binding
import
android.view.View
import
androidx.databinding.BindingAdapter
import
timber.log.Timber
/**
* 捕获所有android:onClickListener方式的点击事件,添加防抖
*/
@BindingAdapter
(
"android:onClickListener"
)
fun
setViewOnClickListener
(
view
:
View
,
callback
:
View
.
OnClickListener
)
{
view
.
setOnClickListener
(
ThrottleOnClickListener
(
callback
))
}
/**
* 捕获所有android:onClickListener方式的点击事件,添加防抖
*/
@BindingAdapter
(
"android:onClick"
)
fun
setViewOnClick
(
view
:
View
,
callback
:
View
.
OnClickListener
)
{
view
.
setOnClickListener
(
ThrottleOnClickListener
(
callback
))
}
/**
* 原始OnClickListener的包装
*/
class
ThrottleOnClickListener
(
private
val
callback
:
View
.
OnClickListener
)
:
View
.
OnClickListener
{
// 上次点击时间
private
var
mLastTime
=
0L
override
fun
onClick
(
v
:
View
?)
{
val
currentTime
=
System
.
currentTimeMillis
()
if
(
currentTime
-
mLastTime
>=
CLICK_THRESHOLD
)
{
mLastTime
=
currentTime
// 调用点击方法
callback
.
onClick
(
v
)
}
else
{
// 过滤多余的点击
Timber
.
e
(
"[ThrottleOnClickListener] [onClick] throttle"
)
}
}
companion
object
{
// 点击过滤时间间隔
private
const
val
CLICK_THRESHOLD
=
500
}
}
CommonLib/Common/src/main/java/com/yidian/common/mvvm/delegate/Delegate.kt
0 → 100644
View file @
b1cf49ea
package
com.yidian.common.mvvm.delegate
import
android.view.LayoutInflater
import
android.view.View
import
androidx.annotation.LayoutRes
import
androidx.appcompat.app.AppCompatActivity
import
androidx.databinding.DataBindingUtil
import
androidx.databinding.ViewDataBinding
import
androidx.lifecycle.Lifecycle
import
androidx.lifecycle.LifecycleObserver
import
androidx.lifecycle.OnLifecycleEvent
import
com.yidian.common.BR
import
com.yidian.common.mvvm.BaseMvvmActivity
import
com.yidian.common.mvvm.BaseMvvmFragment
import
com.yidian.common.mvvm.BaseViewModel
import
kotlin.properties.ReadOnlyProperty
import
kotlin.reflect.KProperty
class
ActivityDataBindingDelegate
<
in
activity
:
AppCompatActivity
,
out
T
:
ViewDataBinding
>(
@LayoutRes
private
val
layoutRes
:
Int
,
)
:
ReadOnlyProperty
<
activity
,
T
>
{
override
fun
getValue
(
thisRef
:
activity
,
property
:
KProperty
<
*
>):
T
{
val
contentView
:
View
=
thisRef
.
layoutInflater
.
inflate
(
layoutRes
,
null
)
val
dataBinding
:
T
=
DataBindingUtil
.
bind
<
T
>(
contentView
)
!!
thisRef
.
lifecycle
.
addObserver
(
object
:
LifecycleObserver
{
@OnLifecycleEvent
(
Lifecycle
.
Event
.
ON_CREATE
)
fun
onCreate
()
{
dataBinding
.
lifecycleOwner
=
thisRef
thisRef
.
setContentView
(
layoutRes
)
}
})
return
dataBinding
}
}
fun
<
V
:
ViewDataBinding
,
VM
:
BaseViewModel
>
BaseMvvmActivity
<
V
,
VM
>.
viewBindings
(
@LayoutRes
layoutRes
:
Int
,
vm
:
VM
?):
V
{
val
dataBinding
=
DataBindingUtil
.
setContentView
<
V
>(
this
,
layoutRes
)
dataBinding
.
lifecycleOwner
=
this
vm
?.
let
{
dataBinding
.
setVariable
(
BR
.
vm
,
vm
)
}
return
dataBinding
}
fun
<
V
:
ViewDataBinding
,
VM
:
BaseViewModel
>
BaseMvvmFragment
<
V
,
VM
>.
viewBindings
(
@LayoutRes
layoutRes
:
Int
,
vm
:
VM
?):
V
{
val
inflater
:
LayoutInflater
=
this
.
layoutInflater
val
dataBinding
=
DataBindingUtil
.
inflate
<
V
>(
inflater
,
layoutRes
,
null
,
false
)
dataBinding
.
lifecycleOwner
=
this
.
viewLifecycleOwner
vm
?.
let
{
dataBinding
.
setVariable
(
BR
.
vm
,
vm
)
}
return
dataBinding
}
CommonLib/Common/src/main/java/com/yidian/common/utils/SystemSettingUtils.kt
View file @
b1cf49ea
package
com.yidian.common.utils
import
android.app.Activity
import
android.content.Context
import
android.content.Intent
import
android.net.Uri
import
android.provider.Settings
...
...
@@ -60,4 +61,18 @@ object SystemSettingUtils {
e
.
printStackTrace
()
}
}
/**
* 打开应用设置详情页,进行权限管理
*/
fun
openAppSettingDetail
(
context
:
Context
)
{
val
intent
=
Intent
()
intent
.
action
=
Settings
.
ACTION_APPLICATION_DETAILS_SETTINGS
intent
.
addCategory
(
Intent
.
CATEGORY_DEFAULT
)
intent
.
data
=
Uri
.
parse
(
"package:"
+
context
.
packageName
)
intent
.
addFlags
(
Intent
.
FLAG_ACTIVITY_NEW_TASK
)
intent
.
addFlags
(
Intent
.
FLAG_ACTIVITY_NO_HISTORY
)
intent
.
addFlags
(
Intent
.
FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS
)
context
.
startActivity
(
intent
)
}
}
CommonLib/Common/src/main/java/com/yidian/common/utils/ToastUtils.java
0 → 100644
View file @
b1cf49ea
package
com
.
yidian
.
common
.
utils
;
import
android.os.Handler
;
import
android.os.Looper
;
import
android.text.TextUtils
;
import
android.view.Gravity
;
import
android.widget.Toast
;
import
androidx.annotation.StringRes
;
import
com.yidian.common.YdBaseApplication
;
/**
* 吐司相关工具类
*/
public
final
class
ToastUtils
{
private
static
Toast
sToast
;
private
static
int
gravity
=
Gravity
.
CENTER_HORIZONTAL
|
Gravity
.
BOTTOM
;
private
static
int
xOffset
=
0
;
private
static
int
yOffset
=
(
int
)
(
64
*
YdBaseApplication
.
context
.
getResources
().
getDisplayMetrics
().
density
+
0.5
);
private
static
final
Handler
sHandler
=
new
Handler
(
Looper
.
getMainLooper
());
private
ToastUtils
()
{
throw
new
UnsupportedOperationException
(
"u can't instantiate me..."
);
}
/**
* 设置吐司位置
*
* @param gravity 位置
* @param xOffset x偏移
* @param yOffset y偏移
*/
public
static
void
setGravity
(
int
gravity
,
int
xOffset
,
int
yOffset
)
{
ToastUtils
.
gravity
=
gravity
;
ToastUtils
.
xOffset
=
xOffset
;
ToastUtils
.
yOffset
=
yOffset
;
}
/**
* 安全地显示短时吐司
*
* @param text 文本
*/
public
static
void
showShortSafe
(
final
CharSequence
text
)
{
try
{
sHandler
.
post
(
new
Runnable
()
{
@Override
public
void
run
()
{
show
(
text
,
Toast
.
LENGTH_SHORT
);
}
});
}
catch
(
Throwable
e
)
{
e
.
printStackTrace
();
}
}
/**
* 安全地显示短时吐司
*
* @param resId 资源Id
*/
public
static
void
showShortSafe
(
final
@StringRes
int
resId
)
{
try
{
sHandler
.
post
(
new
Runnable
()
{
@Override
public
void
run
()
{
show
(
resId
,
Toast
.
LENGTH_SHORT
);
}
});
}
catch
(
Throwable
e
)
{
e
.
printStackTrace
();
}
}
/**
* 安全地显示短时吐司
*
* @param resId 资源Id
* @param args 参数
*/
public
static
void
showShortSafe
(
final
@StringRes
int
resId
,
final
Object
...
args
)
{
try
{
sHandler
.
post
(
new
Runnable
()
{
@Override
public
void
run
()
{
show
(
resId
,
Toast
.
LENGTH_SHORT
,
args
);
}
});
}
catch
(
Throwable
e
)
{
e
.
printStackTrace
();
}
}
/**
* 安全地显示短时吐司
*
* @param format 格式
* @param args 参数
*/
public
static
void
showShortSafe
(
final
String
format
,
final
Object
...
args
)
{
try
{
sHandler
.
post
(
new
Runnable
()
{
@Override
public
void
run
()
{
show
(
format
,
Toast
.
LENGTH_SHORT
,
args
);
}
});
}
catch
(
Throwable
e
)
{
e
.
printStackTrace
();
}
}
/**
* 安全地显示长时吐司
*
* @param text 文本
*/
public
static
void
showLongSafe
(
final
CharSequence
text
)
{
try
{
sHandler
.
post
(
new
Runnable
()
{
@Override
public
void
run
()
{
show
(
text
,
Toast
.
LENGTH_LONG
);
}
});
}
catch
(
Throwable
e
)
{
e
.
printStackTrace
();
}
}
/**
* 安全地显示长时吐司
*
* @param resId 资源Id
*/
public
static
void
showLongSafe
(
final
@StringRes
int
resId
)
{
try
{
sHandler
.
post
(
new
Runnable
()
{
@Override
public
void
run
()
{
show
(
resId
,
Toast
.
LENGTH_LONG
);
}
});
}
catch
(
Throwable
e
)
{
e
.
printStackTrace
();
}
}
/**
* 安全地显示长时吐司
*
* @param resId 资源Id
* @param args 参数
*/
public
static
void
showLongSafe
(
final
@StringRes
int
resId
,
final
Object
...
args
)
{
try
{
sHandler
.
post
(
new
Runnable
()
{
@Override
public
void
run
()
{
show
(
resId
,
Toast
.
LENGTH_LONG
,
args
);
}
});
}
catch
(
Throwable
e
)
{
e
.
printStackTrace
();
}
}
/**
* 安全地显示长时吐司
*
* @param format 格式
* @param args 参数
*/
public
static
void
showLongSafe
(
final
String
format
,
final
Object
...
args
)
{
try
{
sHandler
.
post
(
new
Runnable
()
{
@Override
public
void
run
()
{
show
(
format
,
Toast
.
LENGTH_LONG
,
args
);
}
});
}
catch
(
Throwable
e
)
{
e
.
printStackTrace
();
}
}
/**
* 显示短时吐司
*
* @param text 文本
*/
public
static
void
showShort
(
CharSequence
text
)
{
if
(
TextUtils
.
isEmpty
(
text
))
return
;
show
(
text
,
Toast
.
LENGTH_SHORT
);
}
/**
* 显示短时吐司
*
* @param resId 资源Id
*/
public
static
void
showShort
(
@StringRes
int
resId
)
{
show
(
resId
,
Toast
.
LENGTH_SHORT
);
}
/**
* 显示短时吐司
*
* @param resId 资源Id
* @param args 参数
*/
public
static
void
showShort
(
@StringRes
int
resId
,
Object
...
args
)
{
show
(
resId
,
Toast
.
LENGTH_SHORT
,
args
);
}
/**
* 显示短时吐司
*
* @param format 格式
* @param args 参数
*/
public
static
void
showShort
(
String
format
,
Object
...
args
)
{
if
(
TextUtils
.
isEmpty
(
format
))
{
show
(
format
,
Toast
.
LENGTH_SHORT
);
}
else
{
show
(
format
,
Toast
.
LENGTH_SHORT
,
args
);
}
}
/**
* 显示长时吐司
*
* @param text 文本
*/
public
static
void
showLong
(
CharSequence
text
)
{
show
(
text
,
Toast
.
LENGTH_LONG
);
}
/**
* 显示长时吐司
*
* @param resId 资源Id
*/
public
static
void
showLong
(
@StringRes
int
resId
)
{
show
(
resId
,
Toast
.
LENGTH_LONG
);
}
/**
* 显示长时吐司
*
* @param resId 资源Id
* @param args 参数
*/
public
static
void
showLong
(
@StringRes
int
resId
,
Object
...
args
)
{
show
(
resId
,
Toast
.
LENGTH_LONG
,
args
);
}
/**
* 显示长时吐司
*
* @param format 格式
* @param args 参数
*/
public
static
void
showLong
(
String
format
,
Object
...
args
)
{
show
(
format
,
Toast
.
LENGTH_LONG
,
args
);
}
/**
* 显示吐司
*
* @param resId 资源Id
* @param duration 显示时长
*/
private
static
void
show
(
@StringRes
int
resId
,
int
duration
)
{
show
(
YdBaseApplication
.
context
.
getResources
().
getText
(
resId
).
toString
(),
duration
);
}
/**
* 显示吐司
*
* @param resId 资源Id
* @param duration 显示时长
* @param args 参数
*/
private
static
void
show
(
@StringRes
int
resId
,
int
duration
,
Object
...
args
)
{
show
(
String
.
format
(
YdBaseApplication
.
context
.
getResources
().
getString
(
resId
),
args
),
duration
);
}
/**
* 显示吐司
*
* @param format 格式
* @param duration 显示时长
* @param args 参数
*/
private
static
void
show
(
String
format
,
int
duration
,
Object
...
args
)
{
show
(
String
.
format
(
format
,
args
),
duration
);
}
/**
* 显示吐司
*
* @param text 文本
* @param duration 显示时长
*/
private
static
void
show
(
CharSequence
text
,
int
duration
)
{
try
{
if
(
TextUtils
.
isEmpty
(
text
))
{
return
;
}
cancel
();
sToast
=
Toast
.
makeText
(
YdBaseApplication
.
context
,
text
,
duration
);
sToast
.
setGravity
(
gravity
,
xOffset
,
yOffset
);
sToast
.
show
();
}
catch
(
Throwable
e
)
{
e
.
printStackTrace
();
}
}
/**
* 取消吐司显示
*/
public
static
void
cancel
()
{
if
(
sToast
!=
null
)
{
sToast
.
cancel
();
sToast
=
null
;
}
}
}
CommonLib/Common/src/main/java/com/yidian/common/widget/DialogBuilder.java
0 → 100644
View file @
b1cf49ea
package
com
.
yidian
.
common
.
widget
;
import
android.app.Dialog
;
import
android.content.Context
;
import
android.os.Bundle
;
import
android.view.View
;
import
android.widget.TextView
;
import
androidx.annotation.NonNull
;
import
com.yidian.common.R
;
public
class
DialogBuilder
{
private
String
navigateTxt
=
"取消"
;
private
String
positiveTxt
=
"确定"
;
private
String
titleTxt
=
""
;
private
String
msgTxt
=
""
;
private
boolean
showNavigate
=
true
;
private
boolean
showPositive
=
false
;
private
boolean
showTitle
=
false
;
private
boolean
showMsg
=
false
;
private
View
.
OnClickListener
navigateClickListener
=
null
;
private
View
.
OnClickListener
positiveClickListener
=
null
;
private
boolean
canceledOnTouchOutside
=
false
;
public
CommonDialog
build
(
Context
context
)
{
CommonDialog
dialog
=
new
CommonDialog
(
context
);
dialog
.
navigateTxt
=
navigateTxt
;
dialog
.
positiveTxt
=
positiveTxt
;
dialog
.
showNavigate
=
showNavigate
;
dialog
.
showPositive
=
showPositive
;
dialog
.
titleTxt
=
titleTxt
;
dialog
.
msgTxt
=
msgTxt
;
dialog
.
showTitle
=
showTitle
;
dialog
.
showMsg
=
showMsg
;
dialog
.
navigateClickListener
=
navigateClickListener
;
dialog
.
positiveClickListener
=
positiveClickListener
;
dialog
.
canceledOnTouchOutside
=
canceledOnTouchOutside
;
return
dialog
;
}
public
DialogBuilder
setNavigateTxt
(
String
navigateTxt
)
{
this
.
navigateTxt
=
navigateTxt
;
return
this
;
}
public
DialogBuilder
setPositiveTxt
(
String
positiveTxt
)
{
this
.
positiveTxt
=
positiveTxt
;
return
this
;
}
public
DialogBuilder
showNavigate
(
boolean
showNavigate
,
View
.
OnClickListener
clickListener
)
{
this
.
showNavigate
=
showNavigate
;
this
.
navigateClickListener
=
clickListener
;
return
this
;
}
public
DialogBuilder
showPositive
(
boolean
showPositive
,
View
.
OnClickListener
clickListener
)
{
this
.
showPositive
=
showPositive
;
this
.
positiveClickListener
=
clickListener
;
return
this
;
}
public
DialogBuilder
showNavigate
(
boolean
showNavigate
,
String
txt
,
View
.
OnClickListener
clickListener
)
{
this
.
showNavigate
=
showNavigate
;
this
.
navigateClickListener
=
clickListener
;
this
.
navigateTxt
=
txt
;
return
this
;
}
public
DialogBuilder
showNavigate
(
boolean
showNavigate
)
{
this
.
showNavigate
=
showNavigate
;
return
this
;
}
public
DialogBuilder
showPositive
(
boolean
showPositive
,
String
txt
,
View
.
OnClickListener
clickListener
)
{
this
.
showPositive
=
showPositive
;
this
.
positiveClickListener
=
clickListener
;
this
.
positiveTxt
=
txt
;
return
this
;
}
public
DialogBuilder
showTitle
(
boolean
showTitle
,
String
txt
)
{
this
.
showTitle
=
showTitle
;
this
.
titleTxt
=
txt
;
return
this
;
}
public
DialogBuilder
showMsg
(
boolean
showMsg
,
String
txt
)
{
this
.
showMsg
=
showMsg
;
this
.
msgTxt
=
txt
;
return
this
;
}
public
void
setCanceledOnTouchOutside
(
boolean
canceledOnTouchOutside
)
{
this
.
canceledOnTouchOutside
=
canceledOnTouchOutside
;
}
public
class
CommonDialog
extends
Dialog
{
private
String
navigateTxt
=
"取消"
;
private
String
positiveTxt
=
"确定"
;
private
String
titleTxt
=
"确定"
;
private
String
msgTxt
=
"确定"
;
private
boolean
showNavigate
=
true
;
private
boolean
showPositive
=
false
;
private
boolean
showTitle
=
false
;
private
boolean
showMsg
=
false
;
private
boolean
canceledOnTouchOutside
=
false
;
private
TextView
tv_title
;
private
TextView
tv_message
;
private
TextView
tv_navigate
;
private
TextView
tv_positive
;
private
View
.
OnClickListener
navigateClickListener
=
new
View
.
OnClickListener
()
{
@Override
public
void
onClick
(
View
v
)
{
dismiss
();
}
};
private
View
.
OnClickListener
positiveClickListener
=
null
;
public
CommonDialog
(
@NonNull
Context
context
)
{
this
(
context
,
R
.
style
.
base_dialog
);
}
public
CommonDialog
(
@NonNull
Context
context
,
int
themeResId
)
{
super
(
context
,
themeResId
);
}
@Override
protected
void
onCreate
(
Bundle
savedInstanceState
)
{
super
.
onCreate
(
savedInstanceState
);
setContentView
(
R
.
layout
.
dialog_common
);
//按空白处不能取消动画
setCanceledOnTouchOutside
(
canceledOnTouchOutside
);
//初始化界面控件
initView
();
//初始化界面控件的事件
initEvent
();
}
private
void
initView
()
{
tv_title
=
findViewById
(
R
.
id
.
tv_title
);
tv_message
=
findViewById
(
R
.
id
.
tv_message
);
tv_navigate
=
findViewById
(
R
.
id
.
tv_navigate
);
tv_positive
=
findViewById
(
R
.
id
.
tv_positive
);
if
(
showPositive
)
{
tv_positive
.
setVisibility
(
View
.
VISIBLE
);
tv_positive
.
setText
(
positiveTxt
);
if
(
positiveClickListener
!=
null
)
{
tv_positive
.
setOnClickListener
(
positiveClickListener
);
}
else
{
tv_positive
.
setOnClickListener
(
new
View
.
OnClickListener
()
{
@Override
public
void
onClick
(
View
v
)
{
dismiss
();
}
});
}
}
else
{
tv_positive
.
setVisibility
(
View
.
GONE
);
}
if
(
showNavigate
)
{
tv_navigate
.
setVisibility
(
View
.
VISIBLE
);
tv_navigate
.
setText
(
navigateTxt
);
if
(
navigateClickListener
!=
null
)
{
tv_navigate
.
setOnClickListener
(
navigateClickListener
);
}
else
{
tv_navigate
.
setOnClickListener
(
new
View
.
OnClickListener
()
{
@Override
public
void
onClick
(
View
v
)
{
dismiss
();
}
});
}
}
else
{
tv_navigate
.
setVisibility
(
View
.
GONE
);
}
if
(
showNavigate
||
showPositive
)
{
findViewById
(
R
.
id
.
ll_btn
).
setVisibility
(
View
.
VISIBLE
);
}
else
{
findViewById
(
R
.
id
.
ll_btn
).
setVisibility
(
View
.
GONE
);
}
showTitle
=
showTitle
&&
titleTxt
!=
null
&&
titleTxt
.
length
()
>
0
;
showMsg
=
showMsg
&&
msgTxt
!=
null
&&
msgTxt
.
length
()
>
0
;
if
(
showTitle
||
showMsg
)
{
findViewById
(
R
.
id
.
ll_content
).
setVisibility
(
View
.
VISIBLE
);
}
else
{
findViewById
(
R
.
id
.
ll_content
).
setVisibility
(
View
.
GONE
);
}
if
(
showTitle
)
{
tv_title
.
setVisibility
(
View
.
VISIBLE
);
tv_title
.
setText
(
titleTxt
);
}
else
{
tv_title
.
setVisibility
(
View
.
GONE
);
}
if
(
showMsg
)
{
tv_message
.
setVisibility
(
View
.
VISIBLE
);
tv_message
.
setText
(
msgTxt
);
}
else
{
tv_message
.
setVisibility
(
View
.
GONE
);
}
}
private
void
initEvent
()
{
}
public
void
setNavigateTxt
(
String
navigateTxt
)
{
this
.
navigateTxt
=
navigateTxt
;
}
public
void
setPositiveTxt
(
String
positiveTxt
)
{
this
.
positiveTxt
=
positiveTxt
;
}
public
void
setTitleTxt
(
String
titleTxt
)
{
this
.
titleTxt
=
titleTxt
;
}
public
void
setMsgTxt
(
String
msgTxt
)
{
this
.
msgTxt
=
msgTxt
;
}
public
void
setShowNavigate
(
boolean
showNavigate
)
{
this
.
showNavigate
=
showNavigate
;
}
public
void
setShowPositive
(
boolean
showPositive
)
{
this
.
showPositive
=
showPositive
;
}
public
void
setShowTitle
(
boolean
showTitle
)
{
this
.
showTitle
=
showTitle
;
}
public
void
setShowMsg
(
boolean
showMsg
)
{
this
.
showMsg
=
showMsg
;
}
public
void
setNavigateClickListener
(
View
.
OnClickListener
navigateClickListener
)
{
this
.
navigateClickListener
=
navigateClickListener
;
}
public
void
setPositiveClickListener
(
View
.
OnClickListener
positiveClickListener
)
{
this
.
positiveClickListener
=
positiveClickListener
;
}
}
}
CommonLib/Common/src/main/java/com/yidian/common/widget/LoadingDialog.kt
0 → 100644
View file @
b1cf49ea
package
com.yidian.common.widget
import
android.content.Context
import
android.os.Handler
import
android.view.LayoutInflater
import
android.view.View
import
android.widget.TextView
import
androidx.appcompat.app.AlertDialog
import
com.yidian.common.R
/**
* 数据加载的loading
*/
class
LoadingDialog
(
context
:
Context
)
:
AlertDialog
(
context
,
R
.
style
.
Theme_AppCompat_Dialog
)
{
constructor
(
context
:
Context
,
cancelable
:
Boolean
)
:
this
(
context
)
{
this
.
setCancelable
(
cancelable
)
}
private
val
tvMessage
:
TextView
private
var
mStartTime
:
Long
=
-
1
private
var
mPostedHide
=
false
private
var
mPostedShow
=
false
private
var
mDismissed
=
false
private
val
mHandler
:
Handler
=
Handler
()
private
val
mDelayedHide
=
Runnable
{
mPostedHide
=
false
mStartTime
=
-
1
dismiss
()
}
private
val
mDelayedShow
=
Runnable
{
mPostedShow
=
false
if
(!
mDismissed
)
{
mStartTime
=
System
.
currentTimeMillis
()
show
()
}
}
/**
* 显示loading
*/
fun
showDialog
(
message
:
String
?)
{
tvMessage
.
text
=
message
mStartTime
=
-
1
mDismissed
=
false
mHandler
.
removeCallbacks
(
mDelayedHide
)
mPostedHide
=
false
if
(!
mPostedShow
)
{
mHandler
.
postDelayed
(
mDelayedShow
,
MIN_DELAY
)
mPostedShow
=
true
}
}
/**
* 隐藏loading
*/
fun
hideDialog
()
{
mDismissed
=
true
mHandler
.
removeCallbacks
(
mDelayedShow
)
mPostedShow
=
false
val
diff
=
System
.
currentTimeMillis
()
-
mStartTime
if
(
diff
>=
MIN_SHOW_TIME
||
mStartTime
==
-
1L
)
{
dismiss
()
}
else
{
if
(!
mPostedHide
)
{
mHandler
.
postDelayed
(
mDelayedHide
,
MIN_SHOW_TIME
-
diff
)
mPostedHide
=
true
}
}
}
override
fun
onDetachedFromWindow
()
{
super
.
onDetachedFromWindow
()
mHandler
.
removeCallbacks
(
mDelayedHide
)
mHandler
.
removeCallbacks
(
mDelayedShow
)
}
companion
object
{
private
const
val
MIN_SHOW_TIME
=
500
private
const
val
MIN_DELAY
=
500L
}
init
{
val
loadView
:
View
=
LayoutInflater
.
from
(
getContext
()).
inflate
(
R
.
layout
.
dialog_loading
,
null
)
setView
(
loadView
)
tvMessage
=
loadView
.
findViewById
(
R
.
id
.
tv_message
)
}
}
CommonLib/Common/src/main/res/drawable-xxhdpi/icon_next_arrow.webp
0 → 100644
View file @
b1cf49ea
File added
CommonLib/Common/src/main/res/drawable-xxhdpi/icon_search.webp
0 → 100644
View file @
b1cf49ea
File added
CommonLib/Common/src/main/res/drawable/bg_dialog.xml
0 → 100644
View file @
b1cf49ea
<?xml version="1.0" encoding="utf-8"?>
<shape
xmlns:android=
"http://schemas.android.com/apk/res/android"
>
<solid
android:color=
"#ffffff"
/>
<stroke
android:width=
"0.8dp"
android:color=
"#ffffff"
/>
<!-- 圆角 -->
<corners
android:radius=
"6dp"
/>
</shape>
\ No newline at end of file
CommonLib/Common/src/main/res/drawable/h_line.xml
0 → 100644
View file @
b1cf49ea
<?xml version="1.0" encoding="utf-8"?>
<shape
xmlns:android=
"http://schemas.android.com/apk/res/android"
>
<size
android:height=
"1dp"
/>
<solid
android:color=
"#e3e3e3"
/>
</shape>
\ No newline at end of file
CommonLib/Common/src/main/res/drawable/v_line.xml
0 → 100644
View file @
b1cf49ea
<?xml version="1.0" encoding="utf-8"?>
<shape
xmlns:android=
"http://schemas.android.com/apk/res/android"
>
<size
android:width=
"1dp"
/>
<solid
android:color=
"#e3e3e3"
/>
</shape>
\ No newline at end of file
CommonLib/Common/src/main/res/layout/dialog_common.xml
0 → 100644
View file @
b1cf49ea
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android=
"http://schemas.android.com/apk/res/android"
xmlns:tools=
"http://schemas.android.com/tools"
android:layout_width=
"match_parent"
android:layout_height=
"wrap_content"
android:background=
"@drawable/bg_dialog"
android:divider=
"@drawable/h_line"
android:minWidth=
"260dp"
android:orientation=
"vertical"
android:showDividers=
"middle"
>
<LinearLayout
android:id=
"@+id/ll_content"
android:layout_width=
"match_parent"
android:layout_height=
"wrap_content"
android:layout_marginLeft=
"20dp"
android:layout_marginRight=
"20dp"
android:gravity=
"center"
android:orientation=
"vertical"
android:paddingTop=
"@dimen/dp16"
android:paddingBottom=
"@dimen/dp16"
>
<TextView
android:id=
"@+id/tv_title"
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
android:layout_gravity=
"center"
android:layout_marginBottom=
"16dp"
android:gravity=
"center"
android:textColor=
"#333333"
android:textSize=
"@dimen/sp18"
android:textStyle=
"bold"
android:visibility=
"visible"
tools:text=
"消息提示"
/>
<TextView
android:id=
"@+id/tv_message"
android:layout_width=
"match_parent"
android:layout_height=
"wrap_content"
android:gravity=
"center|left"
android:lineSpacingExtra=
"3dp"
android:lineSpacingMultiplier=
"1.2"
android:textColor=
"#999999"
android:textSize=
"@dimen/sp14"
android:visibility=
"gone"
tools:text=
"提示消息提示消息提示消息提示消息提示消息提示消息提示消息提示消息"
tools:visibility=
"visible"
/>
</LinearLayout>
<LinearLayout
android:id=
"@+id/ll_btn"
android:layout_width=
"match_parent"
android:layout_height=
"wrap_content"
android:layout_marginLeft=
"10dp"
android:layout_marginRight=
"10dp"
android:divider=
"@drawable/v_line"
android:orientation=
"horizontal"
android:showDividers=
"middle"
>
<TextView
android:id=
"@+id/tv_navigate"
android:layout_width=
"0dp"
android:layout_height=
"wrap_content"
android:layout_weight=
"1"
android:background=
"@null"
android:gravity=
"center"
android:paddingTop=
"16dp"
android:paddingBottom=
"16dp"
android:singleLine=
"true"
android:text=
"取消"
android:textColor=
"#666666"
android:textSize=
"@dimen/sp16"
/>
<TextView
android:id=
"@+id/tv_positive"
android:layout_width=
"0dp"
android:layout_height=
"wrap_content"
android:layout_weight=
"1"
android:background=
"@null"
android:gravity=
"center"
android:paddingTop=
"16dp"
android:paddingBottom=
"16dp"
android:singleLine=
"true"
android:text=
"确认"
android:textColor=
"#1157F4"
android:textSize=
"@dimen/sp16"
/>
</LinearLayout>
</LinearLayout>
CommonLib/Common/src/main/res/layout/dialog_loading.xml
0 → 100644
View file @
b1cf49ea
<?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=
"wrap_content"
android:layout_height=
"wrap_content"
android:layout_gravity=
"center"
android:background=
"@color/white"
android:padding=
"@dimen/dp20"
>
<ProgressBar
android:id=
"@+id/pb"
android:layout_width=
"@dimen/dp50"
android:layout_height=
"@dimen/dp50"
android:theme=
"@style/Widget.AppCompat.ProgressBar"
app:layout_constraintBottom_toBottomOf=
"parent"
app:layout_constraintEnd_toEndOf=
"parent"
app:layout_constraintStart_toStartOf=
"parent"
app:layout_constraintTop_toTopOf=
"parent"
app:layout_constraintVertical_bias=
"0.388"
/>
<TextView
android:id=
"@+id/tv_message"
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
android:layout_marginTop=
"@dimen/dp15"
android:text=
"加载中..."
android:textColor=
"#333333"
android:textSize=
"@dimen/sp16"
app:layout_constraintEnd_toEndOf=
"parent"
app:layout_constraintStart_toStartOf=
"parent"
app:layout_constraintTop_toBottomOf=
"@id/pb"
/>
</androidx.constraintlayout.widget.ConstraintLayout>
\ No newline at end of file
CommonLib/Common/src/main/res/layout/empty_view.xml
0 → 100644
View file @
b1cf49ea
<?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_height=
"match_parent"
>
<TextView
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
android:text=
"暂无数据"
android:textColor=
"@color/color_333333"
android:textSize=
"@dimen/sp16"
app:layout_constraintBottom_toBottomOf=
"parent"
app:layout_constraintEnd_toEndOf=
"parent"
app:layout_constraintStart_toStartOf=
"parent"
app:layout_constraintTop_toTopOf=
"parent"
/>
</androidx.constraintlayout.widget.ConstraintLayout>
\ No newline at end of file
CommonLib/Common/src/main/res/layout/layout_common_toolbar.xml
View file @
b1cf49ea
<?xml version="1.0" encoding="utf-8"?>
<
LinearL
ayout
xmlns:android=
"http://schemas.android.com/apk/res/android"
<
l
ayout
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=
"wrap_content"
android:background=
"@color/white"
android:gravity=
"center_vertical"
android:orientation=
"vertical"
>
xmlns:tools=
"http://schemas.android.com/tools"
>
<androidx.appcompat.widget.Toolbar
android:id=
"@+id/toolbar"
<data>
</data>
<LinearLayout
android:layout_width=
"match_parent"
android:layout_height=
"wrap_content"
android:background=
"?attr/colorPrimary"
android:fitsSystemWindows=
"true"
android:minHeight=
"50dp"
android:paddingStart=
"@dimen/dp15"
android:paddingEnd=
"@dimen/dp15"
app:layout_scrollFlags=
"scroll|enterAlways"
app:navigationIcon=
"@drawable/icon_back"
>
android:background=
"@color/white"
android:gravity=
"center_vertical"
android:orientation=
"vertical"
>
<
TextView
android:id=
"@+id/t
v_title
"
android:layout_width=
"
wrap_cont
ent"
<
androidx.appcompat.widget.Toolbar
android:id=
"@+id/t
oolbar
"
android:layout_width=
"
match_par
ent"
android:layout_height=
"wrap_content"
android:layout_gravity=
"center"
android:textColor=
"#FF333333"
android:textSize=
"18sp"
tools:text=
"标题"
/>
android:background=
"?attr/colorPrimary"
android:fitsSystemWindows=
"true"
android:minHeight=
"50dp"
android:paddingStart=
"@dimen/dp15"
android:paddingEnd=
"@dimen/dp15"
app:layout_scrollFlags=
"scroll|enterAlways"
app:navigationIcon=
"@drawable/icon_back"
>
<TextView
android:id=
"@+id/tv_title"
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
android:layout_gravity=
"center"
android:textColor=
"#FF333333"
android:textSize=
"18sp"
tools:text=
"标题"
/>
</androidx.appcompat.widget.Toolbar>
</androidx.appcompat.widget.Toolbar>
</LinearLayout>
\ No newline at end of file
</LinearLayout>
</layout>
\ No newline at end of file
CommonLib/Common/src/main/res/layout/test_databinding.xml
0 → 100644
View file @
b1cf49ea
<?xml version="1.0" encoding="utf-8"?>
<layout
xmlns:android=
"http://schemas.android.com/apk/res/android"
xmlns:app=
"http://schemas.android.com/apk/res-auto"
>
<data>
<variable
name=
"vm"
type=
"com.yidian.common.mvvm.BaseViewModel"
/>
</data>
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width=
"match_parent"
android:layout_height=
"match_parent"
>
<TextView
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
android:text=
"合作"
app:layout_constraintBottom_toBottomOf=
"parent"
app:layout_constraintEnd_toEndOf=
"parent"
app:layout_constraintStart_toStartOf=
"parent"
app:layout_constraintTop_toTopOf=
"parent"
/>
</androidx.constraintlayout.widget.ConstraintLayout>
</layout>
\ No newline at end of file
CommonLib/Common/src/main/res/values/colors.xml
View file @
b1cf49ea
...
...
@@ -33,4 +33,9 @@
<color
name=
"color_666666"
>
#666666
</color>
<color
name=
"color_999999"
>
#999999
</color>
<color
name=
"color_F26E3D"
>
#F26E3D
</color>
<color
name=
"color_C2C2C2"
>
#C2C2C2
</color>
<color
name=
"color_F5F6F7"
>
#F5F6F7
</color>
<color
name=
"color_1852F1"
>
#1852F1
</color>
<color
name=
"color_F6F6F6"
>
#f6f6f6
</color>
</resources>
Components/commodity/build.gradle
View file @
b1cf49ea
...
...
@@ -5,8 +5,8 @@ if (rootProject.ext.android.isApplication) {
apply
plugin:
'com.android.library'
}
apply
plugin:
'kotlin-android'
apply
plugin:
'kotlin-android-extensions'
apply
plugin:
'kotlin-kapt'
apply
plugin:
'kotlin-parcelize'
android
{
compileSdkVersion
build_versions
.
compileSdkVersion
...
...
@@ -51,11 +51,9 @@ android {
}
}
}
androidExtensions
{
experimental
=
true
}
viewBinding
{
enabled
=
true
buildFeatures
{
viewBinding
true
dataBinding
true
}
kapt
{
generateStubs
=
true
...
...
Components/commodity/src/main/AndroidManifest.xml
View file @
b1cf49ea
...
...
@@ -2,4 +2,7 @@
<manifest
xmlns:android=
"http://schemas.android.com/apk/res/android"
package=
"com.yidian.shenghuoquan.commodity"
>
<application>
<activity
android:name=
".ui.coupon.ChooseCategoryActivity"
/>
</application>
</manifest>
\ No newline at end of file
Components/commodity/src/main/java/com/yidian/shenghuoquan/commodity/app/ClassMapUtil.kt
0 → 100644
View file @
b1cf49ea
package
com.yidian.shenghuoquan.commodity.app
import
com.yidian.common.XRouterPathConstants
import
com.yidian.shenghuoquan.commodity.ui.coupon.ChooseCategoryActivity
/**
* 注册XPageNode工具类
*/
object
ClassMapUtil
{
val
xPageNodeMap
=
mapOf
(
XRouterPathConstants
.
Companion
.
chooseCategoryActivity
to
ChooseCategoryActivity
::
class
.
java
)
}
Components/commodity/src/main/java/com/yidian/shenghuoquan/commodity/app/CommodityApplication.kt
0 → 100644
View file @
b1cf49ea
package
com.yidian.shenghuoquan.commodity.app
import
android.content.Intent
import
com.yidian.common.XRouterPathConstants
import
com.yidian.common.YdBaseApplication
import
com.yidian.news.util.ProcessUtil
import
com.yidian.xpage.XPageManager
import
com.yidian.xpage.node.XPageHandler
import
com.yidian.xpage.node.XPageNode
import
com.yidian.xpage.node.XPageNodePageType
import
com.yidian.yac.core.core.YacModuleSpec
@YacModuleSpec
class
CommodityApplication
:
YdBaseApplication
()
{
override
fun
onCreate
()
{
super
.
onCreate
()
if
(
ProcessUtil
.
isMainProcess
(
this
))
{
registerXPage
()
initService
()
}
}
private
fun
registerXPage
()
{
ClassMapUtil
.
xPageNodeMap
.
forEach
{
val
node
=
XPageNode
(
it
.
key
,
XPageNodePageType
.
NATIVE
,
object
:
XPageHandler
{
override
fun
handler
(
params
:
Map
<
String
,
Any
?
>?)
{
val
intent
=
Intent
()
if
(
params
!=
null
)
{
intent
.
putExtra
(
XRouterPathConstants
.
ParamsKey
,
params
as
HashMap
)
}
intent
.
setClass
(
context
,
it
.
value
)
intent
.
flags
=
Intent
.
FLAG_ACTIVITY_NEW_TASK
context
.
startActivity
(
intent
)
}
})
XPageManager
.
registeredNode
(
node
)
}
}
private
fun
initService
()
{
}
}
Components/commodity/src/main/java/com/yidian/shenghuoquan/commodity/dto/CategoryListDto.kt
0 → 100644
View file @
b1cf49ea
package
com.yidian.shenghuoquan.commodity.dto
/**
* 类目列表
*/
data class
CategoryListDto
(
val
category_id
:
Int
,
// 分类id
val
name
:
String
,
// 分类名称
val
sub_list
:
List
<
SubCategory
>
// 二级分类
)
data class
SubCategory
(
val
category_id
:
Int
,
val
name
:
String
)
/**
* 当前选中的类目信息
*/
data class
SelectCategoryDto
(
val
firstCategoryId
:
Int
,
val
firstCategoryName
:
String
,
val
secondCategoryId
:
Int
,
val
secondCategoryName
:
String
)
Components/commodity/src/main/java/com/yidian/shenghuoquan/commodity/http/CouponDataSource.kt
0 → 100644
View file @
b1cf49ea
package
com.yidian.shenghuoquan.commodity.http
import
com.yidian.common.http.HttpParamsUtils
import
com.yidian.common.http.HttpResult
import
com.yidian.common.http.HttpResultSubscriber
import
com.yidian.common.http.TransformUtil
import
com.yidian.http.ServiceFactory
import
com.yidian.shenghuoquan.commodity.dto.CategoryListDto
import
com.yidian.shenghuoquan.commodity.http.callback.ICategoryListCallback
/**
* 优惠券数据源
*/
object
CouponDataSource
{
private
var
api
=
ServiceFactory
.
getInstance
().
createService
(
CouponService
::
class
.
java
)
/**
* 获取类目列表
*/
fun
getCategoryList
(
apiCallback
:
ICategoryListCallback
,
requestParams
:
HashMap
<
String
,
String
?
>)
{
val
timeStamp
=
System
.
currentTimeMillis
()
val
publicParamsMap
=
HttpParamsUtils
.
getPublicParamsMap
(
timeStamp
)
val
privateParamsMap
=
HttpParamsUtils
.
getPrivateParamsMap
(
requestParams
,
timeStamp
)
api
.
getCategoryList
(
publicParamsMap
,
privateParamsMap
)
.
compose
(
TransformUtil
.
defaultSchedulers
())
.
subscribe
(
object
:
HttpResultSubscriber
<
MutableList
<
CategoryListDto
>?>()
{
override
fun
onSuccess
(
result
:
HttpResult
<
MutableList
<
CategoryListDto
>?>?)
{
apiCallback
.
getCategoryListSuccess
(
result
?.
result
)
}
override
fun
onFailer
(
result
:
HttpResult
<
MutableList
<
CategoryListDto
>?>?)
{
}
})
}
}
Components/commodity/src/main/java/com/yidian/shenghuoquan/commodity/http/CouponService.kt
0 → 100644
View file @
b1cf49ea
package
com.yidian.shenghuoquan.commodity.http
import
com.yidian.common.http.HttpResult
import
io.reactivex.rxjava3.core.Observable
import
retrofit2.http.GET
import
retrofit2.http.QueryMap
interface
CouponService
{
private
companion
object
{
const
val
categoryList
=
"/goods/customer/get_goods_category_list"
const
val
searchCategoryList
=
"/merchant/enterprise/get_account_role_list"
}
/**
* 获取类目列表
*/
@GET
(
categoryList
)
fun
getCategoryList
(
@QueryMap
commonParams
:
Map
<
String
,
String
>,
@QueryMap
params
:
Map
<
String
,
String
?
>):
Observable
<
HttpResult
<
Any
?
>>
/**
* 搜索类目列表(可能会共用上面的接口)
*/
@GET
(
searchCategoryList
)
fun
searchCategoryList
(
@QueryMap
commonParams
:
Map
<
String
,
String
>,
@QueryMap
params
:
Map
<
String
,
String
?
>):
Observable
<
HttpResult
<
Any
?
>>
}
Components/commodity/src/main/java/com/yidian/shenghuoquan/commodity/http/callback/ICategoryListCallback.kt
0 → 100644
View file @
b1cf49ea
package
com.yidian.shenghuoquan.commodity.http.callback
import
com.yidian.shenghuoquan.commodity.dto.CategoryListDto
interface
ICategoryListCallback
{
fun
getCategoryListSuccess
(
dto
:
MutableList
<
CategoryListDto
>?)
}
Components/commodity/src/main/java/com/yidian/shenghuoquan/commodity/ui/coupon/ChooseCategoryActivity.kt
0 → 100644
View file @
b1cf49ea
package
com.yidian.shenghuoquan.commodity.ui.coupon
import
androidx.activity.viewModels
import
com.yidian.common.XRouterPathConstants
import
com.yidian.common.extensions.initTitleBar
import
com.yidian.common.mvvm.BaseMvvmActivity
import
com.yidian.common.utils.ToastUtils
import
com.yidian.shenghuoquan.commodity.R
import
com.yidian.shenghuoquan.commodity.databinding.CommodityActivityChooseCategoryBinding
import
com.yidian.shenghuoquan.commodity.dto.CategoryListDto
import
com.yidian.shenghuoquan.commodity.dto.SubCategory
import
com.yidian.shenghuoquan.commodity.ui.coupon.adapter.CategoryListAdapter
import
com.yidian.shenghuoquan.commodity.ui.coupon.adapter.CategorySubListAdapter
import
com.yidian.xpage.XPageViewProtocol
/**
* 商品选择类目
*/
class
ChooseCategoryActivity
:
BaseMvvmActivity
<
CommodityActivityChooseCategoryBinding
,
ChooseCategoryViewModel
>(),
XPageViewProtocol
{
private
lateinit
var
categoryList
:
MutableList
<
CategoryListDto
>
private
val
adapter
=
CategoryListAdapter
()
private
val
subAdapter
=
CategorySubListAdapter
()
override
val
layoutId
:
Int
=
R
.
layout
.
commodity_activity_choose_category
override
val
vm
:
ChooseCategoryViewModel
by
viewModels
()
override
fun
getXPageName
():
String
{
return
XRouterPathConstants
.
chooseCategoryActivity
}
override
fun
initView
()
{
initTitleBar
(
binding
.
include
.
toolbar
,
binding
.
include
.
tvTitle
,
"选择类目"
)
setupRecyclerView
()
subscribeUiEvent
()
vm
.
requestCategoryList
()
}
/**
* 设置列表
*/
private
fun
setupRecyclerView
()
{
binding
.
rvCategoryList
.
adapter
=
adapter
adapter
.
setEmptyView
(
R
.
layout
.
empty_view
)
subAdapter
.
setEmptyView
(
R
.
layout
.
empty_view
)
adapter
.
setOnItemClickListener
{
adapter
,
_
,
position
->
// 记录当前选中的一级分类
val
firstCategory
=
adapter
.
data
[
position
]
as
CategoryListDto
// 更新列表显示二级分类
binding
.
rvCategoryList
.
adapter
=
subAdapter
subAdapter
.
setList
(
firstCategory
.
sub_list
)
vm
.
showSelectFirstLevelName
(
firstCategory
.
name
)
}
subAdapter
.
setOnItemClickListener
{
adapter
,
_
,
position
->
// 记录选中的二级分类,并回传一级+二级
val
secondCategory
=
adapter
.
data
[
position
]
as
SubCategory
ToastUtils
.
showShortSafe
(
"选中的二级分类:${secondCategory.name}"
)
}
}
private
fun
subscribeUiEvent
()
{
vm
.
addListEvent
.
observe
(
this
,
{
it
?.
let
{
categoryList
=
it
adapter
.
setList
(
it
)
}
?:
adapter
.
setList
(
null
)
})
vm
.
showFirstLevelListEvent
.
observe
(
this
,
{
binding
.
rvCategoryList
.
adapter
=
adapter
if
(
::
categoryList
.
isInitialized
)
{
adapter
.
setList
(
categoryList
)
vm
.
showSelectFirstLevelName
()
}
})
}
}
Components/commodity/src/main/java/com/yidian/shenghuoquan/commodity/ui/coupon/ChooseCategoryViewModel.kt
0 → 100644
View file @
b1cf49ea
package
com.yidian.shenghuoquan.commodity.ui.coupon
import
androidx.lifecycle.LiveData
import
androidx.lifecycle.MutableLiveData
import
com.yidian.common.mvvm.BaseViewModel
import
com.yidian.common.utils.ToastUtils
import
com.yidian.shenghuoquan.commodity.dto.CategoryListDto
import
com.yidian.shenghuoquan.commodity.http.CouponDataSource
import
com.yidian.shenghuoquan.commodity.http.callback.ICategoryListCallback
/**
* 选择类目ViewModel
*/
class
ChooseCategoryViewModel
:
BaseViewModel
()
{
var
showSelectFirstCategory
=
MutableLiveData
(
false
)
var
selectFirstCategoryName
=
MutableLiveData
<
String
>()
/**
* 类目列表数据 Event
*/
private
val
_addListEvent
=
MutableLiveData
<
MutableList
<
CategoryListDto
>?>()
val
addListEvent
:
LiveData
<
MutableList
<
CategoryListDto
>?>
=
_addListEvent
/**
* 切换显示一级分类 Event
*/
private
val
_showFirstLevelListEvent
=
MutableLiveData
<
Unit
>()
val
showFirstLevelListEvent
:
LiveData
<
Unit
>
=
_showFirstLevelListEvent
/**
* 请求类目列表
*/
fun
requestCategoryList
()
{
val
paramsMap
=
HashMap
<
String
,
String
?>()
paramsMap
[
"category_name"
]
=
""
CouponDataSource
.
getCategoryList
(
requestCategoryListCallBack
,
paramsMap
)
}
private
val
requestCategoryListCallBack
=
object
:
ICategoryListCallback
{
override
fun
getCategoryListSuccess
(
dto
:
MutableList
<
CategoryListDto
>?)
{
// 更新列表
_addListEvent
.
value
=
dto
}
}
fun
gotoSearch
()
{
ToastUtils
.
showShortSafe
(
"类目搜索"
)
}
fun
showSelectFirstLevelName
(
name
:
String
=
""
)
{
if
(
name
.
isBlank
())
{
showSelectFirstCategory
.
value
=
false
}
else
{
showSelectFirstCategory
.
value
=
true
selectFirstCategoryName
.
value
=
name
}
}
fun
showFirstLevelList
()
{
_showFirstLevelListEvent
.
value
=
Unit
}
}
Components/commodity/src/main/java/com/yidian/shenghuoquan/commodity/ui/coupon/adapter/CategoryListAdapter.kt
0 → 100644
View file @
b1cf49ea
package
com.yidian.shenghuoquan.commodity.ui.coupon.adapter
import
android.widget.TextView
import
com.chad.library.adapter.base.BaseQuickAdapter
import
com.chad.library.adapter.base.viewholder.BaseViewHolder
import
com.yidian.shenghuoquan.commodity.R
import
com.yidian.shenghuoquan.commodity.dto.CategoryListDto
class
CategoryListAdapter
:
BaseQuickAdapter
<
CategoryListDto
,
BaseViewHolder
>(
R
.
layout
.
commodity_layout_category_list_item
)
{
override
fun
convert
(
holder
:
BaseViewHolder
,
item
:
CategoryListDto
)
{
holder
.
getView
<
TextView
>(
R
.
id
.
tv_category_name
).
text
=
item
.
name
}
}
Components/commodity/src/main/java/com/yidian/shenghuoquan/commodity/ui/coupon/adapter/CategorySubListAdapter.kt
0 → 100644
View file @
b1cf49ea
package
com.yidian.shenghuoquan.commodity.ui.coupon.adapter
import
android.widget.TextView
import
com.chad.library.adapter.base.BaseQuickAdapter
import
com.chad.library.adapter.base.viewholder.BaseViewHolder
import
com.yidian.shenghuoquan.commodity.R
import
com.yidian.shenghuoquan.commodity.dto.SubCategory
class
CategorySubListAdapter
:
BaseQuickAdapter
<
SubCategory
,
BaseViewHolder
>(
R
.
layout
.
commodity_layout_category_list_item
)
{
override
fun
convert
(
holder
:
BaseViewHolder
,
item
:
SubCategory
)
{
holder
.
getView
<
TextView
>(
R
.
id
.
tv_category_name
).
text
=
item
.
name
}
}
Components/commodity/src/main/manifest/AndroidManifest.xml
View file @
b1cf49ea
...
...
@@ -2,4 +2,16 @@
<manifest
xmlns:android=
"http://schemas.android.com/apk/res/android"
package=
"com.yidian.shenghuoquan.commodity"
>
<application>
<activity
android:name=
".ui.coupon.ChooseCategoryActivity"
>
<intent-filter>
<action
android:name=
"android.intent.action.VIEW"
/>
<action
android:name=
"android.intent.action.MAIN"
/>
<category
android:name=
"android.intent.category.LAUNCHER"
/>
</intent-filter>
</activity>
</application>
</manifest>
\ No newline at end of file
Components/commodity/src/main/res/drawable/shape_gray_bg.xml
0 → 100644
View file @
b1cf49ea
<?xml version="1.0" encoding="utf-8"?>
<shape
xmlns:android=
"http://schemas.android.com/apk/res/android"
android:shape=
"rectangle"
>
<corners
android:radius=
"20dp"
/>
<solid
android:color=
"@color/color_F5F6F7"
/>
</shape>
\ No newline at end of file
Components/commodity/src/main/res/layout/commodity_activity_choose_category.xml
0 → 100644
View file @
b1cf49ea
<?xml version="1.0" encoding="utf-8"?>
<layout
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"
>
<data>
<variable
name=
"vm"
type=
"com.yidian.shenghuoquan.commodity.ui.coupon.ChooseCategoryViewModel"
/>
</data>
<LinearLayout
android:layout_width=
"match_parent"
android:layout_height=
"match_parent"
android:background=
"@color/white"
android:orientation=
"vertical"
>
<include
android:id=
"@+id/include"
layout=
"@layout/layout_common_toolbar"
/>
<TextView
android:layout_width=
"match_parent"
android:layout_height=
"@dimen/sp40"
android:layout_marginStart=
"@dimen/dp20"
android:layout_marginTop=
"@dimen/dp10"
android:layout_marginEnd=
"@dimen/dp20"
android:layout_marginBottom=
"@dimen/dp10"
android:background=
"@drawable/shape_gray_bg"
android:drawableStart=
"@drawable/icon_search"
android:gravity=
"center_vertical"
android:onClick=
"@{() -> vm.gotoSearch()}"
android:paddingStart=
"@dimen/dp10"
android:text=
"请输入关键词搜索商品类目"
android:textColor=
"@color/color_C2C2C2"
android:textSize=
"@dimen/sp16"
/>
<LinearLayout
android:layout_width=
"match_parent"
android:layout_height=
"@dimen/dp60"
android:gravity=
"center_vertical"
android:orientation=
"horizontal"
android:paddingStart=
"@dimen/dp20"
android:paddingEnd=
"@dimen/dp20"
>
<TextView
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
android:drawableEnd=
"@drawable/icon_next_arrow"
android:drawablePadding=
"@dimen/dp10"
android:onClick=
"@{() -> vm.showFirstLevelList()}"
android:text=
"@{vm.selectFirstCategoryName}"
android:textColor=
"@color/color_333333"
android:textSize=
"@dimen/sp16"
app:isShow=
"@{vm.showSelectFirstCategory}"
/>
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width=
"wrap_content"
android:layout_height=
"match_parent"
>
<TextView
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
android:drawablePadding=
"@dimen/dp10"
android:text=
"请选择"
android:textColor=
"@color/color_1852F1"
android:textSize=
"@dimen/sp16"
app:layout_constraintBottom_toBottomOf=
"parent"
app:layout_constraintEnd_toEndOf=
"parent"
app:layout_constraintStart_toStartOf=
"parent"
app:layout_constraintTop_toTopOf=
"parent"
/>
<View
android:layout_width=
"@dimen/dp20"
android:layout_height=
"@dimen/dp2"
android:background=
"@color/color_1852F1"
app:layout_constraintBottom_toBottomOf=
"parent"
app:layout_constraintEnd_toEndOf=
"parent"
app:layout_constraintStart_toStartOf=
"parent"
/>
</androidx.constraintlayout.widget.ConstraintLayout>
</LinearLayout>
<View
style=
"@style/cut_off_line_style"
/>
<androidx.recyclerview.widget.RecyclerView
android:id=
"@+id/rv_category_list"
android:layout_width=
"match_parent"
android:layout_height=
"match_parent"
android:layoutAnimation=
"@null"
app:layoutManager=
"androidx.recyclerview.widget.LinearLayoutManager"
tools:itemCount=
"3"
tools:listitem=
"@layout/commodity_layout_category_list_item"
/>
</LinearLayout>
</layout>
\ No newline at end of file
Components/commodity/src/main/res/layout/commodity_layout_category_list_item.xml
0 → 100644
View file @
b1cf49ea
<?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"
xmlns:tools=
"http://schemas.android.com/tools"
android:layout_width=
"match_parent"
android:layout_height=
"@dimen/dp60"
android:paddingStart=
"@dimen/dp20"
android:paddingEnd=
"@dimen/dp20"
>
<TextView
android:id=
"@+id/tv_category_name"
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
android:textColor=
"@color/color_333333"
android:textSize=
"@dimen/sp16"
app:layout_constraintBottom_toBottomOf=
"parent"
app:layout_constraintStart_toStartOf=
"parent"
app:layout_constraintTop_toTopOf=
"parent"
tools:text=
"你好"
/>
</androidx.constraintlayout.widget.ConstraintLayout>
\ No newline at end of file
Components/commodity/src/main/res/values/colors.xml
0 → 100644
View file @
b1cf49ea
<?xml version="1.0" encoding="utf-8"?>
<resources>
</resources>
\ No newline at end of file
Components/commodity/src/main/res/values/strings.xml
0 → 100644
View file @
b1cf49ea
<?xml version="1.0" encoding="utf-8"?>
<resources
xmlns:tools=
"http://schemas.android.com/tools"
tools:ignore=
"MissingTranslation"
>
</resources>
\ No newline at end of file
Components/newscontent/build.gradle
View file @
b1cf49ea
...
...
@@ -5,8 +5,8 @@ if (rootProject.ext.android.isApplication){
apply
plugin:
'com.android.library'
}
apply
plugin:
'kotlin-android'
apply
plugin:
'kotlin-android-extensions'
apply
plugin:
'kotlin-kapt'
apply
plugin:
'kotlin-parcelize'
android
{
compileSdkVersion
build_versions
.
compileSdkVersion
...
...
@@ -50,11 +50,9 @@ android {
}
}
}
androidExtensions
{
experimental
=
true
}
viewBinding
{
enabled
=
true
buildFeatures
{
viewBinding
true
dataBinding
true
}
kapt
{
generateStubs
=
true
...
...
@@ -83,5 +81,5 @@ dependencies {
exclude
(
group:
'com.yidian.android'
,
module:
'NetworkImageLib'
)
}
implementation
'com.github.bumptech.glide:glide:4.11.0'
annotationProcessor
'com.github.bumptech.glide:compiler:4.11.0'
kapt
'com.github.bumptech.glide:compiler:4.11.0'
}
\ No newline at end of file
Components/newscontent/src/main/AndroidManifest.xml
View file @
b1cf49ea
...
...
@@ -64,10 +64,6 @@
android:name=
".ui.ProductSupportActivity"
android:theme=
"@style/Transparent"
/>
<activity
android:name=
".ui.GalleryActivity"
android:theme=
"@style/Transparent"
/>
<activity
android:name=
".ui.LoginLifeCircleActivity"
/>
<activity
...
...
Components/newscontent/src/main/java/com/yidian/shenghuoquan/newscontent/adapter/BottomSelectAdapter.kt
View file @
b1cf49ea
...
...
@@ -3,10 +3,11 @@ package com.yidian.shenghuoquan.newscontent.adapter
import
android.view.LayoutInflater
import
android.view.View
import
android.view.ViewGroup
import
android.widget.TextView
import
androidx.recyclerview.widget.RecyclerView
import
com.yidian.shenghuoquan.newscontent.R
import
com.yidian.shenghuoquan.newscontent.bean.BottomSelectBean
import
com.yidian.shenghuoquan.newscontent.databinding.ItemBottomSelectBinding
import
kotlinx.android.synthetic.main.item_bottom_select.view.*
/**
* author: yinjiacheng
...
...
@@ -37,7 +38,7 @@ class BottomSelectAdapter<T : BottomSelectBean> @JvmOverloads constructor(
}
override
fun
onBindViewHolder
(
holder
:
BottomSelectViewHolder
,
position
:
Int
)
{
holder
.
itemView
.
tv_content
.
text
=
mData
[
position
].
item
holder
.
itemView
.
findViewById
<
TextView
>(
R
.
id
.
tv_content
)
.
text
=
mData
[
position
].
item
holder
.
itemView
.
setOnClickListener
{
mListener
?.
onItemClick
(
it
,
position
,
mData
[
position
])
}
...
...
@@ -64,4 +65,4 @@ class BottomSelectAdapter<T : BottomSelectBean> @JvmOverloads constructor(
interface
OnItemClickListener
<
T
>
{
fun
onItemClick
(
view
:
View
,
position
:
Int
,
data
:
T
)
}
}
\ No newline at end of file
}
Components/newscontent/src/main/java/com/yidian/shenghuoquan/newscontent/adapter/CommenViewPagerAdapter.kt
deleted
100644 → 0
View file @
87fe1f26
package
com.yidian.shenghuoquan.newscontent.adapter
import
android.view.View
import
android.view.ViewGroup
import
androidx.recyclerview.widget.RecyclerView
import
com.bumptech.glide.Glide
import
com.yidian.common.cardutils.adapter.OnItemClickListener
import
com.yidian.common.utils.ViewHolderUtil.Companion.createItemView
import
com.yidian.shenghuoquan.newscontent.R
import
com.yidian.shenghuoquan.newscontent.bean.ImageItemBean
import
kotlinx.android.extensions.LayoutContainer
import
kotlinx.android.synthetic.main.view_pager_item.*
class
CommenViewPagerAdapter
:
RecyclerView
.
Adapter
<
RecyclerView
.
ViewHolder
>()
{
private
val
dataList
:
ArrayList
<
ImageItemBean
>
by
lazy
{
ArrayList
<
ImageItemBean
>()
}
private
lateinit
var
mOnItemClickListener
:
OnItemClickListener
<
ImageItemBean
>
override
fun
onCreateViewHolder
(
parent
:
ViewGroup
,
viewType
:
Int
):
RecyclerView
.
ViewHolder
{
return
ViewHolder
(
createItemView
(
parent
,
R
.
layout
.
view_pager_item
))
}
override
fun
onBindViewHolder
(
holder
:
RecyclerView
.
ViewHolder
,
position
:
Int
)
{
holder
as
ViewHolder
holder
.
setData
(
dataList
[
position
])
holder
.
photo_view
.
setOnClickListener
{
mOnItemClickListener
.
onClick
(
it
,
position
,
dataList
[
position
])
}
}
override
fun
getItemCount
():
Int
{
return
dataList
.
size
}
fun
update
(
newData
:
ArrayList
<
ImageItemBean
>){
newData
.
let
{
dataList
.
clear
()
dataList
.
addAll
(
it
)
notifyDataSetChanged
()
}
}
fun
setOnItemClickListener
(
onItemClickListener
:
OnItemClickListener
<
ImageItemBean
>)
{
mOnItemClickListener
=
onItemClickListener
}
class
ViewHolder
(
itemView
:
View
)
:
RecyclerView
.
ViewHolder
(
itemView
),
LayoutContainer
{
override
val
containerView
:
View
get
()
=
itemView
fun
setData
(
imageItemBean
:
ImageItemBean
)
{
Glide
.
with
(
itemView
.
context
).
load
(
imageItemBean
.
imageUrl
).
into
(
photo_view
)
}
}
}
Components/newscontent/src/main/java/com/yidian/shenghuoquan/newscontent/adapter/FeedbackDetailAdapter.kt
View file @
b1cf49ea
...
...
@@ -2,51 +2,53 @@ package com.yidian.shenghuoquan.newscontent.adapter
import
android.view.View
import
android.view.ViewGroup
import
android.widget.TextView
import
androidx.recyclerview.widget.RecyclerView
import
com.yidian.common.cardutils.adapter.OnItemClickListener
import
com.yidian.common.utils.ViewHolderUtil.Companion.createItemView
import
com.yidian.shenghuoquan.newscontent.R
import
kotlinx.android.extensions.LayoutContainer
import
kotlinx.android.synthetic.main.item_feedback_detail.*
class
FeedbackDetailAdapter
:
RecyclerView
.
Adapter
<
RecyclerView
.
ViewHolder
>()
{
private
val
dataList
:
ArrayList
<
String
>
by
lazy
{
ArrayList
<
String
>()
}
private
lateinit
var
mOnItemClickListener
:
OnItemClickListener
<
String
>
class
FeedbackDetailAdapter
:
RecyclerView
.
Adapter
<
RecyclerView
.
ViewHolder
>()
{
override
fun
onCreateViewHolder
(
parent
:
ViewGroup
,
viewType
:
Int
):
RecyclerView
.
ViewHolder
{
return
ViewHolder
(
createItemView
(
parent
,
R
.
layout
.
item_feedback_detail
))
}
private
val
dataList
:
ArrayList
<
String
>
by
lazy
{
ArrayList
<
String
>()
}
private
lateinit
var
mOnItemClickListener
:
OnItemClickListener
<
String
>
override
fun
onBindViewHolder
(
holder
:
RecyclerView
.
ViewHolder
,
position
:
Int
)
{
holder
as
ViewHolder
holder
.
setData
(
dataList
[
position
])
holder
.
itemView
.
setOnClickListener
{
mOnItemClickListener
.
onClick
(
it
,
position
,
dataList
[
position
])
}
}
override
fun
onCreateViewHolder
(
parent
:
ViewGroup
,
viewType
:
Int
):
RecyclerView
.
ViewHolder
{
return
ViewHolder
(
createItemView
(
parent
,
R
.
layout
.
item_feedback_detail
))
}
fun
update
(
newData
:
ArrayList
<
String
>)
{
newData
.
let
{
dataList
.
clear
(
)
dataList
.
addAll
(
i
t
)
notifyDataSetChanged
()
}
override
fun
onBindViewHolder
(
holder
:
RecyclerView
.
ViewHolder
,
position
:
Int
)
{
holder
as
ViewHolder
val
tvContent
=
holder
.
itemView
.
findViewById
<
TextView
>(
R
.
id
.
tv_content
)
holder
.
setData
(
dataList
[
position
],
tvConten
t
)
holder
.
itemView
.
setOnClickListener
{
mOnItemClickListener
.
onClick
(
it
,
position
,
dataList
[
position
])
}
}
override
fun
getItemCount
():
Int
{
return
dataList
.
size
fun
update
(
newData
:
ArrayList
<
String
>)
{
newData
.
let
{
dataList
.
clear
()
dataList
.
addAll
(
it
)
notifyDataSetChanged
()
}
}
fun
setOnItemClickListener
(
onItemClickListener
:
OnItemClickListener
<
String
>)
{
mOnItemClickListener
=
onItemClickListener
}
override
fun
getItemCount
():
Int
{
return
dataList
.
size
}
fun
setOnItemClickListener
(
onItemClickListener
:
OnItemClickListener
<
String
>)
{
mOnItemClickListener
=
onItemClickListener
}
class
ViewHolder
(
itemView
:
View
)
:
RecyclerView
.
ViewHolder
(
itemView
),
LayoutContainer
{
override
val
containerView
:
View
get
()
=
itemView
class
ViewHolder
(
itemView
:
View
)
:
RecyclerView
.
ViewHolder
(
itemView
),
LayoutContainer
{
override
val
containerView
:
View
get
()
=
itemView
fun
setData
(
content
:
String
)
{
tv_content
.
text
=
content
}
fun
setData
(
content
:
String
,
tvContent
:
TextView
)
{
tvContent
.
text
=
content
}
}
}
Components/newscontent/src/main/java/com/yidian/shenghuoquan/newscontent/adapter/LifeAccountIdentityAdapter.kt
View file @
b1cf49ea
...
...
@@ -4,12 +4,12 @@ import android.content.Context
import
android.view.LayoutInflater
import
android.view.View
import
android.view.ViewGroup
import
android.widget.TextView
import
androidx.core.content.ContextCompat
import
androidx.recyclerview.widget.RecyclerView
import
com.yidian.common.cardutils.adapter.OnItemClickListener
import
com.yidian.shenghuoquan.newscontent.R
import
com.yidian.shenghuoquan.newscontent.http.httpbean.LifeAccountItemBean
import
kotlinx.android.synthetic.main.item_life_account_identity.view.*
/**
* author: yinjiacheng
...
...
@@ -35,15 +35,16 @@ class LifeAccountIdentityAdapter(val context: Context) :
override
fun
onBindViewHolder
(
holder
:
LifeAccountIdentityViewHolder
,
position
:
Int
)
{
val
data
=
mData
[
position
]
holder
.
itemView
.
tv_life_account
.
text
=
data
.
life_account_name
holder
.
itemView
.
findViewById
<
TextView
>(
R
.
id
.
tv_life_account
).
text
=
data
.
life_account_name
val
tvLifeIdentity
=
holder
.
itemView
.
findViewById
<
TextView
>(
R
.
id
.
tv_life_identity
)
if
(
data
.
role_type
==
1
)
{
holder
.
itemView
.
tv_life_i
dentity
.
text
=
"超级管理员"
holder
.
itemView
.
tv_life_i
dentity
.
setBackgroundResource
(
R
.
drawable
.
bg_item_manager_selected_on
)
holder
.
itemView
.
tv_life_i
dentity
.
setTextColor
(
ContextCompat
.
getColor
(
context
,
R
.
color
.
color_FFFFFFFF
))
tvLifeI
dentity
.
text
=
"超级管理员"
tvLifeI
dentity
.
setBackgroundResource
(
R
.
drawable
.
bg_item_manager_selected_on
)
tvLifeI
dentity
.
setTextColor
(
ContextCompat
.
getColor
(
context
,
R
.
color
.
color_FFFFFFFF
))
}
else
{
holder
.
itemView
.
tv_life_i
dentity
.
text
=
"普通员工"
holder
.
itemView
.
tv_life_i
dentity
.
setBackgroundResource
(
R
.
drawable
.
bg_item_manager_selected_off
)
holder
.
itemView
.
tv_life_i
dentity
.
setTextColor
(
ContextCompat
.
getColor
(
context
,
R
.
color
.
color_FFEAAF35
))
tvLifeI
dentity
.
text
=
"普通员工"
tvLifeI
dentity
.
setBackgroundResource
(
R
.
drawable
.
bg_item_manager_selected_off
)
tvLifeI
dentity
.
setTextColor
(
ContextCompat
.
getColor
(
context
,
R
.
color
.
color_FFEAAF35
))
}
holder
.
itemView
.
setOnClickListener
{
...
...
Components/newscontent/src/main/java/com/yidian/shenghuoquan/newscontent/adapter/ShareAdapter.kt
View file @
b1cf49ea
...
...
@@ -2,13 +2,14 @@ package com.yidian.shenghuoquan.newscontent.adapter
import
android.view.View
import
android.view.ViewGroup
import
android.widget.ImageView
import
android.widget.TextView
import
androidx.recyclerview.widget.RecyclerView
import
com.yidian.common.cardutils.adapter.OnItemClickListener
import
com.yidian.common.utils.ViewHolderUtil.Companion.createItemView
import
com.yidian.shenghuoquan.newscontent.R
import
com.yidian.shenghuoquan.newscontent.bean.SharePlatformBean
import
kotlinx.android.extensions.LayoutContainer
import
kotlinx.android.synthetic.main.item_share_platform.*
class
ShareAdapter
:
RecyclerView
.
Adapter
<
RecyclerView
.
ViewHolder
>()
{
companion
object
{
...
...
@@ -33,7 +34,7 @@ class ShareAdapter: RecyclerView.Adapter<RecyclerView.ViewHolder>() {
override
fun
onBindViewHolder
(
holder
:
RecyclerView
.
ViewHolder
,
position
:
Int
)
{
holder
as
ViewHolder
holder
.
setData
(
dataList
[
position
])
holder
.
setData
(
dataList
[
position
]
,
holder
)
holder
.
itemView
.
setOnClickListener
{
mOnItemClickListener
.
onClick
(
it
,
position
,
dataList
[
position
])
}
...
...
@@ -59,9 +60,9 @@ class ShareAdapter: RecyclerView.Adapter<RecyclerView.ViewHolder>() {
override
val
containerView
:
View
get
()
=
itemView
fun
setData
(
sharePlatformBean
:
SharePlatformBean
)
{
iv_platform
.
setBackgroundResource
(
sharePlatformBean
.
imageId
)
tv_platform
.
text
=
sharePlatformBean
.
name
fun
setData
(
sharePlatformBean
:
SharePlatformBean
,
holder
:
ViewHolder
)
{
holder
.
itemView
.
findViewById
<
ImageView
>(
R
.
id
.
iv_platform
)
.
setBackgroundResource
(
sharePlatformBean
.
imageId
)
holder
.
itemView
.
findViewById
<
TextView
>(
R
.
id
.
tv_platform
)
.
text
=
sharePlatformBean
.
name
}
}
}
Components/newscontent/src/main/java/com/yidian/shenghuoquan/newscontent/adapter/UpdateVersionDesAdapter.kt
View file @
b1cf49ea
...
...
@@ -2,42 +2,42 @@ package com.yidian.shenghuoquan.newscontent.adapter
import
android.view.View
import
android.view.ViewGroup
import
android.widget.TextView
import
androidx.recyclerview.widget.RecyclerView
import
com.yidian.common.utils.ViewHolderUtil.Companion.createItemView
import
com.yidian.shenghuoquan.newscontent.R
import
kotlinx.android.extensions.LayoutContainer
import
kotlinx.android.synthetic.main.item_update_version_des.*
class
UpdateVersionDesAdapter
:
RecyclerView
.
Adapter
<
RecyclerView
.
ViewHolder
>()
{
private
val
dataList
:
ArrayList
<
String
>
by
lazy
{
ArrayList
<
String
>()
}
class
UpdateVersionDesAdapter
:
RecyclerView
.
Adapter
<
RecyclerView
.
ViewHolder
>()
{
private
val
dataList
:
ArrayList
<
String
>
by
lazy
{
ArrayList
<
String
>()
}
override
fun
onCreateViewHolder
(
parent
:
ViewGroup
,
viewType
:
Int
):
RecyclerView
.
ViewHolder
{
return
ViewHolder
(
createItemView
(
parent
,
R
.
layout
.
item_update_version_des
))
}
override
fun
onCreateViewHolder
(
parent
:
ViewGroup
,
viewType
:
Int
):
RecyclerView
.
ViewHolder
{
return
ViewHolder
(
createItemView
(
parent
,
R
.
layout
.
item_update_version_des
))
}
override
fun
onBindViewHolder
(
holder
:
RecyclerView
.
ViewHolder
,
position
:
Int
)
{
holder
as
ViewHolder
holder
.
setData
(
dataList
[
position
]
)
}
override
fun
onBindViewHolder
(
holder
:
RecyclerView
.
ViewHolder
,
position
:
Int
)
{
holder
as
ViewHolder
holder
.
setData
(
dataList
[
position
],
holder
)
}
override
fun
getItemCount
():
Int
{
return
dataList
.
size
}
override
fun
getItemCount
():
Int
{
return
dataList
.
size
}
fun
update
(
newData
:
ArrayList
<
String
>){
newData
.
let
{
dataList
.
clear
()
dataList
.
addAll
(
it
)
notifyDataSetChanged
()
}
fun
update
(
newData
:
ArrayList
<
String
>)
{
newData
.
let
{
dataList
.
clear
()
dataList
.
addAll
(
it
)
notifyDataSetChanged
()
}
}
class
ViewHolder
(
itemView
:
View
)
:
RecyclerView
.
ViewHolder
(
itemView
),
LayoutContainer
{
override
val
containerView
:
View
get
()
=
itemView
class
ViewHolder
(
itemView
:
View
)
:
RecyclerView
.
ViewHolder
(
itemView
),
LayoutContainer
{
override
val
containerView
:
View
get
()
=
itemView
fun
setData
(
des
:
String
)
{
tv_versionDes
.
text
=
des
}
fun
setData
(
des
:
String
,
holder
:
ViewHolder
)
{
holder
.
itemView
.
findViewById
<
TextView
>(
R
.
id
.
tv_versionDes
).
text
=
des
}
}
}
Components/newscontent/src/main/java/com/yidian/shenghuoquan/newscontent/app/NewsContentApplication.kt
View file @
b1cf49ea
...
...
@@ -4,7 +4,6 @@ import android.content.Intent
import
com.yidian.common.XRouterPathConstants
import
com.yidian.common.XRouterPathConstants.Companion.CHOOSE_CAREER
import
com.yidian.common.XRouterPathConstants.Companion.FLASH
import
com.yidian.common.XRouterPathConstants.Companion.GALLERY
import
com.yidian.common.XRouterPathConstants.Companion.ID_CARD_TEST
import
com.yidian.common.XRouterPathConstants.Companion.LIFE_ACCOUNT_AUTH
import
com.yidian.common.XRouterPathConstants.Companion.LIFE_ACCOUNT_CREATE
...
...
@@ -20,7 +19,6 @@ import com.yidian.common.XRouterPathConstants.Companion.LOGIN_LIFE_CIRCLE
import
com.yidian.common.XRouterPathConstants.Companion.MERCHANT_AUTH_INFO
import
com.yidian.common.XRouterPathConstants.Companion.MERCHANT_CENTER
import
com.yidian.common.XRouterPathConstants.Companion.MERCHANT_INFO
import
com.yidian.common.XRouterPathConstants.Companion.MY_WALLET
import
com.yidian.common.XRouterPathConstants.Companion.NEWS_CONTENT
import
com.yidian.common.XRouterPathConstants.Companion.NEWS_MAIN
import
com.yidian.common.XRouterPathConstants.Companion.PERSONAL_ADD_STAFF
...
...
@@ -33,10 +31,6 @@ import com.yidian.common.XRouterPathConstants.Companion.PROTOCOL
import
com.yidian.common.XRouterPathConstants.Companion.STORE_MANAGEMENT
import
com.yidian.common.XRouterPathConstants.Companion.SUPPORT
import
com.yidian.common.XRouterPathConstants.Companion.SYSTEM_SETTING
import
com.yidian.common.XRouterPathConstants.Companion.TRANSACTION_DETAILS
import
com.yidian.common.XRouterPathConstants.Companion.TRANSACTION_LIST
import
com.yidian.common.XRouterPathConstants.Companion.VERIFY_IDENTITY
import
com.yidian.common.XRouterPathConstants.Companion.WITHDRAW
import
com.yidian.common.YdBaseApplication
import
com.yidian.news.util.ProcessUtil
import
com.yidian.nightmode.util.NightModeUtil
...
...
@@ -275,17 +269,6 @@ class NewsContentApplication : YdBaseApplication() {
context
.
startActivity
(
intent
)
}
}),
XPageNode
(
GALLERY
,
XPageNodePageType
.
NATIVE
,
object
:
XPageHandler
{
override
fun
handler
(
params
:
Map
<
String
,
Any
?
>?)
{
val
intent
=
Intent
()
if
(
params
!=
null
)
{
intent
.
putExtra
(
XRouterPathConstants
.
ParamsKey
,
params
as
HashMap
)
}
intent
.
setClass
(
context
,
GalleryActivity
::
class
.
java
)
intent
.
flags
=
Intent
.
FLAG_ACTIVITY_NEW_TASK
context
.
startActivity
(
intent
)
}
}),
XPageNode
(
CHOOSE_CAREER
,
XPageNodePageType
.
NATIVE
,
object
:
XPageHandler
{
override
fun
handler
(
params
:
Map
<
String
,
Any
?
>?)
{
val
intent
=
Intent
()
...
...
Components/newscontent/src/main/java/com/yidian/shenghuoquan/newscontent/bean/ImageItemBean.kt
View file @
b1cf49ea
package
com.yidian.shenghuoquan.newscontent.bean
import
android.os.Parcelable
import
kotlinx.
android.parcel
.Parcelize
import
kotlinx.
parcelize
.Parcelize
@Parcelize
class
ImageItemBean
(
var
imageUrl
:
String
):
Parcelable
\ No newline at end of file
class
ImageItemBean
(
var
imageUrl
:
String
):
Parcelable
Components/newscontent/src/main/java/com/yidian/shenghuoquan/newscontent/personnel/bean/AccountListDto.kt
View file @
b1cf49ea
...
...
@@ -2,7 +2,7 @@ package com.yidian.shenghuoquan.newscontent.personnel.bean
import
android.os.Parcelable
import
com.google.gson.annotations.SerializedName
import
kotlinx.
android.parcel
.Parcelize
import
kotlinx.
parcelize
.Parcelize
/**
* 账号列表数据类
...
...
Components/newscontent/src/main/java/com/yidian/shenghuoquan/newscontent/ui/FlashActivity.kt
View file @
b1cf49ea
package
com.yidian.shenghuoquan.newscontent.ui
import
android.Manifest
import
android.Manifest.permission.ACCESS_BACKGROUND_LOCATION
import
android.content.Intent
import
android.os.Bundle
import
com.orhanobut.hawk.Hawk
...
...
@@ -10,6 +9,8 @@ import com.yidian.common.HawkConfig
import
com.yidian.common.XRouterPathConstants
import
com.yidian.common.XRouterPathConstants.Companion.FLASH
import
com.yidian.common.base.BaseActivity
import
com.yidian.common.utils.SystemSettingUtils
import
com.yidian.common.widget.DialogBuilder
import
com.yidian.shenghuoquan.newscontent.databinding.ActivityFlashBinding
import
com.yidian.shenghuoquan.newscontent.http.ApiService
import
com.yidian.shenghuoquan.newscontent.http.callback.IGetLifeAccountListCallback
...
...
@@ -17,7 +18,6 @@ import com.yidian.shenghuoquan.newscontent.http.httpbean.LifeAccountItemBean
import
com.yidian.shenghuoquan.newscontent.ui.auth.LifeAccountIdentityActivity
import
com.yidian.shenghuoquan.newscontent.ui.center.MerchantCenterActivity
import
com.yidian.shenghuoquan.newscontent.utils.StorageUtil
import
com.yidian.utils.ToastUtil
import
com.yidian.xpage.XPageManager
class
FlashActivity
:
BaseActivity
<
ActivityFlashBinding
>(),
IGetLifeAccountListCallback
{
...
...
@@ -101,23 +101,31 @@ class FlashActivity : BaseActivity<ActivityFlashBinding>(), IGetLifeAccountListC
private
fun
getPermissions
()
{
val
rxPermissions
=
RxPermissions
(
this
)
rxPermissions
.
request
(
Manifest
.
permission
.
ACCESS_BACKGROUND_LOCATION
,
Manifest
.
permission
.
ACCESS_COARSE_LOCATION
,
Manifest
.
permission
.
ACCESS_FINE_LOCATION
,
Manifest
.
permission
.
WRITE_EXTERNAL_STORAGE
,
Manifest
.
permission
.
READ_EXTERNAL_STORAGE
,
Manifest
.
permission
.
READ_PHONE_STATE
,
ACCESS_BACKGROUND_LOCATION
)
.
subscribe
{
if
(
it
)
{
launcher
()
// startActivity(Intent(this@FlashActivity, SelectAddressActivity::class.java))
}
else
{
ToastUtil
.
showToast
(
this
,
"请在设置里同意读取存储卡权限"
)
showPermissionDialog
(
"需要电话、存储、位置"
)
}
}
}
private
fun
showPermissionDialog
(
permission
:
String
)
{
var
dialog
:
DialogBuilder
.
CommonDialog
?
=
null
dialog
=
DialogBuilder
()
.
showTitle
(
true
,
permission
+
"权限,请到 “应用信息 -> 权限” 中授予!"
)
.
showPositive
(
true
)
{
SystemSettingUtils
.
openAppSettingDetail
(
this
)
dialog
?.
dismiss
()
}
.
showNavigate
(
true
)
.
build
(
this
)
dialog
?.
show
()
}
}
Components/newscontent/src/main/java/com/yidian/shenghuoquan/newscontent/ui/GalleryActivity.kt
deleted
100644 → 0
View file @
87fe1f26
package
com.yidian.shenghuoquan.newscontent.ui
import
android.annotation.SuppressLint
import
android.os.Bundle
import
android.view.View
import
androidx.viewpager2.widget.ViewPager2
import
com.yidian.common.XRouterPathConstants
import
com.yidian.common.XRouterPathConstants.Companion.GALLERY
import
com.yidian.common.base.BaseActivity
import
com.yidian.common.cardutils.adapter.OnItemClickListener
import
com.yidian.shenghuoquan.newscontent.R
import
com.yidian.shenghuoquan.newscontent.adapter.CommenViewPagerAdapter
import
com.yidian.shenghuoquan.newscontent.bean.ImageItemBean
import
com.yidian.shenghuoquan.newscontent.databinding.ActivityGalleryBinding
import
com.yidian.shenghuoquan.newscontent.ui.dialog.ShareImageDialog
class
GalleryActivity
:
BaseActivity
<
ActivityGalleryBinding
>()
{
private
val
vpAdapter
:
CommenViewPagerAdapter
=
CommenViewPagerAdapter
()
private
var
imageTotalNum
:
Int
=
0
private
lateinit
var
articleUrl
:
String
private
lateinit
var
imageUrl
:
String
private
var
shareImageDialog
:
ShareImageDialog
?
=
null
private
lateinit
var
imageList
:
ArrayList
<
ImageItemBean
>
override
fun
getXPageName
():
String
{
return
GALLERY
}
override
fun
createViewBinding
():
ActivityGalleryBinding
{
return
ActivityGalleryBinding
.
inflate
(
layoutInflater
)
}
@SuppressLint
(
"SetTextI18n"
)
override
fun
init
(
savedInstanceState
:
Bundle
?)
{
super
.
init
(
savedInstanceState
)
viewBind
.
vpImage
.
adapter
=
vpAdapter
if
(
intent
.
getSerializableExtra
(
XRouterPathConstants
.
ParamsKey
)
!=
null
){
val
paramsMap
=
intent
.
getSerializableExtra
(
XRouterPathConstants
.
ParamsKey
)
as
HashMap
<*,
*>
val
index
=
paramsMap
[
"index"
]
as
Int
imageList
=
paramsMap
[
"imageList"
]
as
ArrayList
<
ImageItemBean
>
articleUrl
=
paramsMap
[
"articleUrl"
]
as
String
imageTotalNum
=
imageList
.
size
if
(
imageTotalNum
>
0
){
imageUrl
=
imageList
[
index
].
imageUrl
vpAdapter
.
update
(
imageList
)
val
showIndex
=
index
+
1
viewBind
.
tvPage
.
text
=
"$showIndex/$imageTotalNum"
viewBind
.
vpImage
.
setCurrentItem
(
index
,
false
)
}
setClickListener
()
}
}
private
fun
setClickListener
(){
viewBind
.
vpImage
.
registerOnPageChangeCallback
(
object
:
ViewPager2
.
OnPageChangeCallback
()
{
@SuppressLint
(
"SetTextI18n"
)
override
fun
onPageSelected
(
position
:
Int
)
{
val
currentPage
=
position
+
1
viewBind
.
tvPage
.
text
=
"$currentPage/$imageTotalNum"
imageUrl
=
imageList
[
position
].
imageUrl
}
})
vpAdapter
.
setOnItemClickListener
(
object
:
OnItemClickListener
<
ImageItemBean
>
{
override
fun
onClick
(
view
:
View
?,
position
:
Int
,
item
:
ImageItemBean
?)
{
finish
()
}
})
viewBind
.
ivShare
.
setOnClickListener
{
shareImage
(
imageUrl
)
}
}
private
fun
shareImage
(
imageUrl
:
String
)
{
if
(
shareImageDialog
==
null
){
shareImageDialog
=
ShareImageDialog
(
this
,
R
.
style
.
share_dialog
)
}
shareImageDialog
!!
.
setData
(
imageUrl
)
shareImageDialog
!!
.
show
()
}
}
\ No newline at end of file
Components/newscontent/src/main/java/com/yidian/shenghuoquan/newscontent/ui/LoginLifeCircleActivity.kt
View file @
b1cf49ea
...
...
@@ -7,6 +7,7 @@ import com.yidian.common.HawkConfig
import
com.yidian.common.XRouterPathConstants
import
com.yidian.common.XRouterPathConstants.Companion.LOGIN_LIFE_CIRCLE
import
com.yidian.common.base.BaseActivity
import
com.yidian.common.extensions.clickAntiShake
import
com.yidian.common.extensions.hide
import
com.yidian.common.extensions.show
import
com.yidian.common.http.HttpResult
...
...
@@ -132,6 +133,11 @@ class LoginLifeCircleActivity : BaseActivity<ActivityLoginBinding>(), IGetLifeAc
urlMap
[
ProtocolActivity
.
ProtocolUrlKey
]
=
AppConfig
.
privacyPolicyStatement
XPageManager
.
push
(
XRouterPathConstants
.
PROTOCOL
,
urlMap
)
}
// todo 测试代码
viewBind
.
tvCategory
.
clickAntiShake
{
XPageManager
.
push
(
XRouterPathConstants
.
chooseCategoryActivity
,
null
)
}
}
private
fun
changeLoginButtonStatus
()
{
...
...
Components/newscontent/src/main/java/com/yidian/shenghuoquan/newscontent/ui/SelectAddressActivity.kt
View file @
b1cf49ea
...
...
@@ -20,7 +20,6 @@ import com.yidian.common.PoiListAdapter
import
com.yidian.common.base.BaseActivity
import
com.yidian.shenghuoquan.newscontent.R
import
com.yidian.shenghuoquan.newscontent.databinding.ActivitySelectAddressBinding
import
kotlinx.android.synthetic.main.activity_select_address.*
/**
...
...
Components/newscontent/src/main/res/layout/activity_gallery.xml
deleted
100644 → 0
View file @
87fe1f26
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:android=
"http://schemas.android.com/apk/res/android"
android:layout_width=
"match_parent"
android:layout_height=
"match_parent"
android:fitsSystemWindows=
"true"
android:background=
"@color/black"
>
<androidx.viewpager2.widget.ViewPager2
android:id=
"@+id/vp_image"
android:layout_width=
"match_parent"
android:layout_height=
"match_parent"
/>
<com.yidian.nightmode.widget.YdImageView
android:layout_width=
"match_parent"
android:layout_height=
"wrap_content"
android:background=
"@mipmap/image_cover_top"
/>
<com.yidian.nightmode.widget.YdImageView
android:layout_width=
"match_parent"
android:layout_height=
"wrap_content"
android:layout_alignParentBottom=
"true"
android:background=
"@mipmap/image_cover_bottom"
/>
<com.yidian.nightmode.widget.YdImageView
android:id=
"@+id/iv_share"
android:layout_width=
"30dp"
android:layout_height=
"30dp"
android:layout_alignParentEnd=
"true"
android:layout_marginEnd=
"15dp"
android:layout_marginTop=
"10dp"
android:src=
"@mipmap/more_white"
/>
<com.yidian.nightmode.widget.YdTextView
android:id=
"@+id/tv_page"
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
android:layout_marginStart=
"20dp"
android:layout_marginBottom=
"60dp"
android:layout_alignParentBottom=
"true"
android:textSize=
"24sp"
android:textColor=
"@color/white"
/>
</RelativeLayout>
\ No newline at end of file
Components/newscontent/src/main/res/layout/activity_login.xml
View file @
b1cf49ea
...
...
@@ -166,4 +166,13 @@
</LinearLayout>
<Button
android:id=
"@+id/tv_category"
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
android:layout_gravity=
"center"
android:text=
"选择类目"
android:textColor=
"#1852f1"
android:textSize=
"14sp"
/>
</LinearLayout>
\ No newline at end of file
Components/newscontent/src/main/res/layout/activity_search_channel.xml
deleted
100644 → 0
View file @
87fe1f26
<?xml version="1.0" encoding="utf-8"?>
<com.yidian.nightmode.widget.YdLinearLayout
xmlns:android=
"http://schemas.android.com/apk/res/android"
android:layout_width=
"match_parent"
android:layout_height=
"match_parent"
android:background=
"?attr/main_bg"
android:fitsSystemWindows=
"true"
>
<include
android:id=
"@+id/search_include"
layout=
"@layout/search_view"
android:layout_width=
"match_parent"
android:layout_height=
"wrap_content"
/>
</com.yidian.nightmode.widget.YdLinearLayout>
Components/newscontent/src/main/res/layout/search_view.xml
deleted
100644 → 0
View file @
87fe1f26
<?xml version="1.0" encoding="utf-8"?>
<com.yidian.nightmode.widget.YdLinearLayout
xmlns:android=
"http://schemas.android.com/apk/res/android"
xmlns:tools=
"http://schemas.android.com/tools"
android:layout_width=
"match_parent"
android:layout_height=
"match_parent"
android:fitsSystemWindows=
"true"
android:orientation=
"vertical"
>
<com.yidian.nightmode.widget.YdFrameLayout
android:layout_width=
"match_parent"
android:layout_height=
"wrap_content"
android:layout_marginTop=
"5dp"
>
<com.yidian.nightmode.widget.YdRelativeLayout
android:id=
"@+id/search_input_container"
android:layout_width=
"match_parent"
android:layout_height=
"40dp"
android:focusable=
"true"
android:focusableInTouchMode=
"true"
>
<com.yidian.nightmode.widget.YdTextView
android:id=
"@+id/btn_search_cancel"
android:layout_width=
"wrap_content"
android:layout_height=
"40dp"
android:layout_alignParentEnd=
"true"
android:clickable=
"true"
android:focusable=
"true"
android:gravity=
"center_vertical|right"
android:paddingLeft=
"16dp"
android:paddingRight=
"16dp"
android:text=
"@string/cancel"
android:textColor=
"@color/subTitle_dark_text"
android:textSize=
"16sp"
tools:ignore=
"RtlHardcoded"
/>
<com.yidian.nightmode.widget.YdLinearLayout
android:id=
"@+id/search_box_container"
android:layout_width=
"match_parent"
android:layout_height=
"40dp"
android:layout_centerVertical=
"true"
android:layout_marginStart=
"16dp"
android:layout_toStartOf=
"@id/btn_search_cancel"
android:background=
"@drawable/search_bg"
android:orientation=
"horizontal"
>
<com.yidian.customwidgets.edittext.CusEditText
android:id=
"@+id/edtKeyword"
android:layout_width=
"0dp"
android:layout_height=
"40dp"
android:layout_gravity=
"center_vertical"
android:layout_weight=
"1"
android:background=
"@null"
android:drawableStart=
"@mipmap/icon_search"
android:drawablePadding=
"6dp"
android:ellipsize=
"end"
android:gravity=
"center_vertical"
android:hint=
"@string/search_hint"
android:imeOptions=
"actionSearch"
android:inputType=
"text"
android:paddingStart=
"10dp"
android:singleLine=
"true"
android:textColor=
"?attr/title_text"
android:textColorHint=
"@color/search_text_gray"
android:textCursorDrawable=
"@null"
android:textSize=
"14sp"
tools:ignore=
"RtlSymmetry"
/>
<com.yidian.nightmode.widget.YdImageButton
android:id=
"@+id/search_content_clear"
android:layout_width=
"wrap_content"
android:layout_height=
"match_parent"
android:layout_gravity=
"center_vertical"
android:background=
"@null"
android:paddingStart=
"1dp"
android:paddingEnd=
"14dp"
android:scaleType=
"center"
android:src=
"@mipmap/search_close"
android:visibility=
"visible"
/>
</com.yidian.nightmode.widget.YdLinearLayout>
</com.yidian.nightmode.widget.YdRelativeLayout>
</com.yidian.nightmode.widget.YdFrameLayout>
<com.yidian.nightmode.widget.YdRecyclerView
android:id=
"@+id/hint_list"
android:layout_width=
"match_parent"
android:layout_height=
"match_parent"
android:overScrollMode=
"never"
android:scrollbars=
"none"
android:visibility=
"gone"
/>
<com.yidian.nightmode.widget.YdLinearLayout
android:id=
"@+id/search_history_view"
android:layout_width=
"match_parent"
android:layout_height=
"match_parent"
android:orientation=
"vertical"
android:visibility=
"gone"
>
<com.yidian.customwidgets.container.ExpandableRecyclerView
android:id=
"@+id/history_list"
android:layout_width=
"match_parent"
android:layout_height=
"100dp"
android:overScrollMode=
"never"
android:scrollbars=
"none"
tools:itemCount=
"5"
tools:layoutManager=
"LinearLayoutManager"
tools:listitem=
"@layout/item_view_search_history"
/>
<com.yidian.nightmode.widget.YdTextView
android:id=
"@+id/clear_history"
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
android:layout_gravity=
"center"
android:drawableStart=
"@mipmap/clear_history_icon"
android:padding=
"8dp"
android:text=
"@string/clear_search_history"
android:textColor=
"@color/subTitle_light_text"
android:textSize=
"14sp"
android:visibility=
"gone"
/>
</com.yidian.nightmode.widget.YdLinearLayout>
</com.yidian.nightmode.widget.YdLinearLayout>
Components/newscontent/src/main/res/mipmap-xxhdpi/icon_search.png
deleted
100644 → 0
View file @
87fe1f26
1.59 KB
Components/userinfo/build.gradle
View file @
b1cf49ea
...
...
@@ -5,7 +5,6 @@ if (rootProject.ext.android.isApplication){
apply
plugin:
'com.android.library'
}
apply
plugin:
'kotlin-android'
apply
plugin:
'kotlin-android-extensions'
android
{
compileSdkVersion
build_versions
.
compileSdkVersion
...
...
@@ -45,9 +44,6 @@ android {
}
}
}
androidExtensions
{
experimental
=
true
}
viewBinding
{
enabled
=
true
}
...
...
app/build.gradle
View file @
b1cf49ea
apply
plugin:
'com.android.application'
apply
plugin:
'kotlin-android'
apply
plugin:
'kotlin-android-extensions'
apply
plugin:
'yac-engine'
apply
plugin:
'kotlin-kapt'
apply
plugin:
'kotlin-parcelize'
android
{
compileSdkVersion
build_versions
.
compileSdkVersion
...
...
@@ -87,6 +87,10 @@ android {
kapt
{
generateStubs
=
true
}
buildFeatures
{
viewBinding
true
dataBinding
true
}
repositories
{
flatDir
{
dirs
'libs'
...
...
@@ -99,11 +103,14 @@ android {
dependencies
{
implementation
fileTree
(
dir:
"libs"
,
include:
[
"*.jar"
])
implementation
"org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version"
// kotlin实现MVVM框架之使用DataBinding之unresolved reference: BR解决办法
kapt
"com.android.databinding:compiler:4.0.1"
rootProject
.
ext
.
dependencies
.
other
.
each
{
implementation
project
(
it
)
}
if
(!
rootProject
.
ext
.
android
.
isApplication
)
{
implementation
project
(
":Components:newscontent"
)
implementation
project
(
":Components:commodity"
)
implementation
project
(
":Components:userinfo"
)
}
implementation
rootProject
.
ext
.
dependencies
.
publicImplementation
...
...
app/proguard-rules.pro
View file @
b1cf49ea
...
...
@@ -282,6 +282,8 @@ public static final int *;
-keep class com.yidian.common.utils.*{*;}
-keep class com.yidian.shenghuoquan.newscontent.utils.*{*;}
-keep class com.yidian.shenghuoquan.newscontent.bean.
*
*{*;}
-keep class com.yidian.shenghuoquan.
*
*.bean.
*
*{*;}
-keep class com.yidian.shenghuoquan.
*
*.dto.
*
*{*;}
-keep class com.yidian.common.cardutils.bean.*{*;}
-keep class com.yidian.framework.mobile.xdiamond.SecretUtil{*;}
-keep class com.yidian.yac.pm.appupdate.*{*;}
...
...
app/src/main/AndroidManifest.xml
View file @
b1cf49ea
...
...
@@ -18,11 +18,10 @@
<uses-permission
android:name=
"android.permission.READ_EXTERNAL_STORAGE"
/>
<uses-permission
android:name=
"android.permission.WRITE_EXTERNAL_STORAGE"
/>
<uses-permission
android:name=
"android.permission.ACCESS_BACKGROUND_LOCATION"
/>
<uses-permission
android:name=
"android.permission.ACCESS_COARSE_LOCATION"
></uses-permission>
<uses-permission
android:name=
"android.permission.ACCESS_FINE_LOCATION"
></uses-permission>
<uses-permission
android:name=
"android.permission.CHANGE_WIFI_STATE"
></uses-permission>
<uses-permission
android:name=
"android.permission.ACCESS_LOCATION_EXTRA_COMMANDS"
/>
<uses-permission
android:name=
"android.permission.ACCESS_COARSE_LOCATION"
/>
<uses-permission
android:name=
"android.permission.ACCESS_FINE_LOCATION"
/>
<uses-permission
android:name=
"android.permission.CHANGE_WIFI_STATE"
/>
<uses-permission
android:name=
"android.permission.ACCESS_LOCATION_EXTRA_COMMANDS"
/>
<!--用于访问网络,网络定位需要上网-->
<meta-data
...
...
@@ -245,7 +244,7 @@
</intent-filter>
</service>
<service
android:name=
"com.amap.api.location.APSService"
></service
>
<service
android:name=
"com.amap.api.location.APSService"
/
>
<service
android:name=
"com.umeng.message.UmengDownloadResourceService"
...
...
@@ -256,9 +255,9 @@
<!-- <provider-->
<!-- android:name="com.umeng.message.provider.MessageProvider"-->
<!-- android:authorities="${application_id}.umeng.message"-->
<!-- android:exported="false">-->
<!-- <grant-uri-permission android:pathPattern=".*" />-->
<!-- </provider>-->
<!-- android:exported="false">-->
<!-- <grant-uri-permission android:pathPattern=".*" />-->
<!-- </provider>-->
<!-- 以上为友盟推送基本配置信息 end-->
</application>
...
...
config/config.gradle
View file @
b1cf49ea
...
...
@@ -27,8 +27,15 @@ ext.dependencies = [
'androidx.appcompat:appcompat:1.2.0'
,
'com.google.android.material:material:1.2.1'
,
'androidx.constraintlayout:constraintlayout:2.0.4'
,
'androidx.fragment:fragment-ktx:1.3.0'
,
'androidx.lifecycle:lifecycle-livedata-ktx:2.3.0'
,
'androidx.lifecycle:lifecycle-extensions:2.2.0'
,
'androidx.lifecycle:lifecycle-viewmodel-ktx:2.3.0'
,
'jp.co.cyberagent.android:gpuimage:2.1.0'
,
'org.jetbrains.kotlinx:kotlinx-coroutines-android:1.3.9'
,
// 日志 https://github.com/JakeWharton/timber
'com.jakewharton.timber:timber:4.7.1'
,
// 刷新
'com.scwang.smart:refresh-layout-kernel:2.0.1'
,
'com.scwang.smart:refresh-header-classics:2.0.1'
,
...
...
idcard_quality/build.gradle
View file @
b1cf49ea
...
...
@@ -33,7 +33,7 @@ android {
dependencies
{
api
fileTree
(
include:
[
'*.jar'
],
dir:
'libs'
)
androidTest
Compile
(
'com.android.support.test.espresso:espresso-core:2.2.2'
,
{
androidTest
Implementation
(
'com.android.support.test.espresso:espresso-core:2.2.2'
,
{
exclude
group:
'com.android.support'
,
module:
'support-annotations'
})
implementation
'com.android.support:appcompat-v7:25+'
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment