diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 21cf1dd..a184d96 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -1,6 +1,6 @@ + xmlns:tools="http://schemas.android.com/tools" > - + tools:targetApi="31" > + android:name=".module.wecome.WecomeActivity" + android:exported="true" > - + + diff --git a/app/src/main/java/com/uls/service/module/home/MainActivity.kt b/app/src/main/java/com/uls/service/module/home/MainActivity.kt index fb91baf..c296310 100644 --- a/app/src/main/java/com/uls/service/module/home/MainActivity.kt +++ b/app/src/main/java/com/uls/service/module/home/MainActivity.kt @@ -19,18 +19,5 @@ class MainActivity : AppCompatActivity() { binding = ActivityMainBinding.inflate(layoutInflater) setContentView(binding.root) - - val navView: BottomNavigationView = binding.navView - - val navController = findNavController(R.id.nav_host_fragment_activity_main) - // Passing each menu ID as a set of Ids because each - // menu should be considered as top level destinations. - val appBarConfiguration = AppBarConfiguration( - setOf( - R.id.navigation_home, R.id.navigation_dashboard, R.id.navigation_notifications - ) - ) - setupActionBarWithNavController(navController, appBarConfiguration) - navView.setupWithNavController(navController) } } \ No newline at end of file diff --git a/app/src/main/java/com/uls/service/module/home/view/HomeItemView.kt b/app/src/main/java/com/uls/service/module/home/view/HomeItemView.kt new file mode 100644 index 0000000..cd31a4f --- /dev/null +++ b/app/src/main/java/com/uls/service/module/home/view/HomeItemView.kt @@ -0,0 +1,28 @@ +package com.uls.service.module.home.view + +import android.content.Context +import android.graphics.Color +import android.graphics.drawable.GradientDrawable +import android.util.AttributeSet +import android.view.LayoutInflater +import android.widget.LinearLayout +import com.uls.service.databinding.HomeItemViewBinding +import com.util.extension.dp +import com.util.extension.roundCorner + +/** +Created by yanzs on 2023/11/14 + */ +class HomeItemView @JvmOverloads constructor( + context: Context, attrs: AttributeSet? = null +) : LinearLayout(context, attrs) { + private var binding = HomeItemViewBinding.inflate(LayoutInflater.from(context), this, true) + + init { + roundCorner(30.dp) + background = GradientDrawable( + GradientDrawable.Orientation.LEFT_RIGHT, + intArrayOf(Color.parseColor("#ff36C1C8"), Color.parseColor("#ff37D1D9")) + ) + } +} \ No newline at end of file diff --git a/app/src/main/java/com/uls/service/module/wecome/WecomeActivity.kt b/app/src/main/java/com/uls/service/module/wecome/WecomeActivity.kt new file mode 100644 index 0000000..818ba21 --- /dev/null +++ b/app/src/main/java/com/uls/service/module/wecome/WecomeActivity.kt @@ -0,0 +1,25 @@ +package com.uls.service.module.wecome + +import android.annotation.SuppressLint +import android.content.Intent +import androidx.appcompat.app.AppCompatActivity +import android.os.Bundle +import com.uls.service.R +import com.uls.service.module.home.MainActivity +import io.reactivex.rxjava3.android.schedulers.AndroidSchedulers +import io.reactivex.rxjava3.core.Flowable +import java.util.concurrent.TimeUnit + +class WecomeActivity : AppCompatActivity() { + @SuppressLint("CheckResult") + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + setContentView(R.layout.activity_wecome) + Flowable.timer(300,TimeUnit.MILLISECONDS) + .observeOn(AndroidSchedulers.mainThread()) + .subscribe { + finish() + startActivity(Intent(this,MainActivity::class.java)) + } + } +} \ No newline at end of file diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml index 06ea6ca..c8acf67 100644 --- a/app/src/main/res/layout/activity_main.xml +++ b/app/src/main/res/layout/activity_main.xml @@ -1,33 +1,24 @@ - - - - - + + android:orientation="horizontal" + > - \ No newline at end of file + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_wecome.xml b/app/src/main/res/layout/activity_wecome.xml new file mode 100644 index 0000000..b456a0d --- /dev/null +++ b/app/src/main/res/layout/activity_wecome.xml @@ -0,0 +1,33 @@ + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/home_item_view.xml b/app/src/main/res/layout/home_item_view.xml new file mode 100644 index 0000000..6f9bd2d --- /dev/null +++ b/app/src/main/res/layout/home_item_view.xml @@ -0,0 +1,37 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/mipmap-xxxhdpi/wecom_logo.png b/app/src/main/res/mipmap-xxxhdpi/wecom_logo.png new file mode 100644 index 0000000..58cb1a4 Binary files /dev/null and b/app/src/main/res/mipmap-xxxhdpi/wecom_logo.png differ diff --git a/app/src/main/res/mipmap-xxxhdpi/wecom_logo_subtitle.png b/app/src/main/res/mipmap-xxxhdpi/wecom_logo_subtitle.png new file mode 100644 index 0000000..c1bfe30 Binary files /dev/null and b/app/src/main/res/mipmap-xxxhdpi/wecom_logo_subtitle.png differ diff --git a/app/src/main/res/mipmap-xxxhdpi/wecom_logo_title.png b/app/src/main/res/mipmap-xxxhdpi/wecom_logo_title.png new file mode 100644 index 0000000..5b74699 Binary files /dev/null and b/app/src/main/res/mipmap-xxxhdpi/wecom_logo_title.png differ diff --git a/app/src/main/res/values/themes.xml b/app/src/main/res/values/themes.xml index 5738d6e..7616a35 100644 --- a/app/src/main/res/values/themes.xml +++ b/app/src/main/res/values/themes.xml @@ -12,5 +12,6 @@ ?attr/colorPrimaryVariant + landscape \ No newline at end of file diff --git a/uikit/build.gradle b/uikit/build.gradle index 0eec18a..1bafbf9 100644 --- a/uikit/build.gradle +++ b/uikit/build.gradle @@ -32,7 +32,7 @@ android { dependencies { - api project(":uikit") + api project(":util") api androidxLibs.bundles.androidx api googleLibs.material diff --git a/util/build.gradle b/util/build.gradle index ddb808d..d543ffb 100644 --- a/util/build.gradle +++ b/util/build.gradle @@ -39,5 +39,6 @@ dependencies { api 'com.squareup.retrofit2:adapter-rxjava3:2.9.0' api 'com.squareup.retrofit2:converter-gson:2.9.0' api 'com.squareup.okhttp3:okhttp:4.2.2' + api 'com.ljx.rxlife3:rxlife-rxjava:3.0.0' } \ No newline at end of file diff --git a/util/src/main/java/com/util/extension/Conversions.kt b/util/src/main/java/com/util/extension/Conversions.kt new file mode 100644 index 0000000..b6015e2 --- /dev/null +++ b/util/src/main/java/com/util/extension/Conversions.kt @@ -0,0 +1,29 @@ +package com.util.extension + +import android.content.res.Resources + + +// see https://github.com/nitrico/kema/blob/master/kema/src/main/java/com/github/nitrico/kema/Conversions.kt + +// dp to pixels +val Int.dp: Int get() = (this * Resources.getSystem().displayMetrics.density + 0.5f).toInt() + +// float dp to pixels +val Float.dp: Float get() = (this * Resources.getSystem().displayMetrics.density + 0.5f) + +val Int.sp: Int get() = (this * Resources.getSystem().displayMetrics.scaledDensity + 0.5f).toInt() + +val Float.sp: Float get() = (this * Resources.getSystem().displayMetrics.scaledDensity + 0.5f) + + +// integer to float +val Int.f: Float get() = toFloat() + +// integer to double +val Int.d: Double get() = toDouble() + +// float to integer +val Float.i: Int get() = toInt() + +// double to integer +val Double.i: Int get() = toInt() \ No newline at end of file diff --git a/util/src/main/java/com/util/extension/ViewExt.kt b/util/src/main/java/com/util/extension/ViewExt.kt new file mode 100644 index 0000000..a7e2d8a --- /dev/null +++ b/util/src/main/java/com/util/extension/ViewExt.kt @@ -0,0 +1,155 @@ +package com.util.extension + + +import android.graphics.Outline +import android.os.Handler +import android.os.Looper +import android.text.Editable +import android.text.TextWatcher +import android.view.View +import android.view.ViewOutlineProvider +import android.widget.EditText +import android.widget.TextView +import kotlin.math.abs + + +fun View.visible() { + visibility = View.VISIBLE +} + +fun View.invisible() { + visibility = View.INVISIBLE +} + +fun View.gone() { + visibility = View.GONE +} + +fun View.setVisible(isVisible: Boolean) { + visibility = if (isVisible) { + View.VISIBLE + } else { + View.GONE + } +} + +/** + * 设置防抖动的点击事件 + * + * @param intervalInMillis 防抖动阈值,默认800ms + */ +fun View.setOnThrottledClickListener( + intervalInMillis: Long = 800L, + action: (View) -> Unit +) { + setOnClickListener( + object : View.OnClickListener { + private var lastClickedTimeInMillis: Long = 0 + + override fun onClick(v: View) { + if (abs(System.currentTimeMillis() - lastClickedTimeInMillis) >= intervalInMillis) { + lastClickedTimeInMillis = System.currentTimeMillis() + action.invoke(v) + } + } + } + ) +} + +/** + * 用于让类继承,在onClick方法中统一用view.id区分 + */ +fun View.setOnThrottledClickListener( + onThrottledClickListener: OnThrottledClickListener, + intervalInMillis: Long = 800L +) { + setOnClickListener( + object : View.OnClickListener { + private var lastClickedTimeInMillis: Long = 0 + + override fun onClick(v: View) { + if (abs(System.currentTimeMillis() - lastClickedTimeInMillis) >= intervalInMillis) { + onThrottledClickListener.onClick(v) + lastClickedTimeInMillis = System.currentTimeMillis() + } + } + + } + ) +} + +fun TextView.setOnDebouncedAfterTextChanged( + intervalInMillis: Long = 200L, + onAfterChanged: (text: Editable?) -> Unit +) { + this.addTextChangedListener(object : TextWatcher { + val handler = Handler(Looper.getMainLooper()) + var runnable: Runnable? = null + override fun beforeTextChanged(s: CharSequence?, start: Int, count: Int, after: Int) { + + } + + override fun onTextChanged(s: CharSequence?, start: Int, before: Int, count: Int) { + runnable?.let { + handler.removeCallbacks(it) + } + } + + override fun afterTextChanged(s: Editable?) { + runnable = Runnable { + onAfterChanged(s) + }.also { + handler.postDelayed(it, intervalInMillis) + } + + } + + }) +} + +var EditText.trimText: String? + set(value) { + this.setText(value)//设置的数据不处理 + } + get() { + return this.text.toString().trim() + } + +interface OnThrottledClickListener { + fun onClick(v: View) +} + + +fun View.roundCorner( + round: Int +) { + outlineProvider = object : ViewOutlineProvider() { + override fun getOutline(view: View, outline: Outline) { + outline.setRoundRect(0, 0, view.width, view.height, round.toFloat()) + } + } + clipToOutline = true +} + +fun View.roundTopCorner( + round: Int +) { + outlineProvider = object : ViewOutlineProvider() { + override fun getOutline(view: View, outline: Outline) { + outline.setRoundRect(0, 0, view.width, view.height + round, round.toFloat()) + } + } + clipToOutline = true +} +fun View.roundBottomCorner( + radius: Int +) { + outlineProvider = object : ViewOutlineProvider() { + override fun getOutline(view: View, outline: Outline) { + outline.setRoundRect(0, -radius, view.width, view.height, radius.toFloat()) + } + } + clipToOutline = true +} + +