diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 3becad3..1a4a510 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -20,6 +20,7 @@
+
\ No newline at end of file
diff --git a/app/src/main/java/luyao/util/ktx/ui/ExtActivity.kt b/app/src/main/java/luyao/util/ktx/ui/ExtActivity.kt
index cf4115f..b06cc32 100644
--- a/app/src/main/java/luyao/util/ktx/ui/ExtActivity.kt
+++ b/app/src/main/java/luyao/util/ktx/ui/ExtActivity.kt
@@ -1,11 +1,12 @@
package luyao.util.ktx.ui
-import androidx.fragment.app.Fragment
-import androidx.fragment.app.FragmentPagerAdapter
+import androidx.recyclerview.widget.LinearLayoutManager
import kotlinx.android.synthetic.main.activity_ext.*
+import kotlinx.android.synthetic.main.title_layout.*
import luyao.ktx.R
+import luyao.util.ktx.adapter.CommonAdapter
import luyao.util.ktx.base.BaseActivity
-import luyao.util.ktx.ui.fragment.ContextExtFragment
+import luyao.util.ktx.ext.itemPadding
/**
* Created by luyao
@@ -13,19 +14,18 @@ import luyao.util.ktx.ui.fragment.ContextExtFragment
*/
class ExtActivity : BaseActivity() {
- private val titleList = arrayOf("Context", "String")
- private val fragmentList = arrayListOf()
-
- private val contextExtFragment = ContextExtFragment()
- private val stringExtFragment = ContextExtFragment()
+ private val dataList = ArrayList()
+ private val commonAdapter by lazy { CommonAdapter() }
+ init {
+ dataList.run {
+ add("ToastExt")
+ add("AppExt")
+ }
+ }
override fun getLayoutResId() = R.layout.activity_ext
- init {
- fragmentList.add(contextExtFragment)
- fragmentList.add(stringExtFragment)
- }
override fun initView() {
mToolbar.run {
@@ -33,21 +33,27 @@ class ExtActivity : BaseActivity() {
setNavigationIcon(R.drawable.arrow_back)
}
- initViewPager()
+ initRecycleView()
}
override fun initData() {
+ commonAdapter.setNewData(dataList)
}
- private fun initViewPager() {
- extViewPager.adapter =
- object : FragmentPagerAdapter(supportFragmentManager, BEHAVIOR_RESUME_ONLY_CURRENT_FRAGMENT) {
- override fun getItem(position: Int) = fragmentList[position]
+ private fun initRecycleView() {
+ commonAdapter.setOnItemClickListener { _, _, position ->
+ handleClick(position)
+ }
+ extRecycleView.run {
+ itemPadding(5,5,10,10)
+ layoutManager = LinearLayoutManager(this@ExtActivity)
+ adapter = commonAdapter
+ }
+ }
- override fun getCount() = fragmentList.size
-
- override fun getPageTitle(position: Int) = titleList[position]
- }
- extTabLayout.setupWithViewPager(extViewPager)
+ private fun handleClick(position: Int) {
+ when (position) {
+ 0 -> startActivity(ToastExtActivity::class.java)
+ }
}
}
\ No newline at end of file
diff --git a/app/src/main/java/luyao/util/ktx/ui/ToastExtActivity.kt b/app/src/main/java/luyao/util/ktx/ui/ToastExtActivity.kt
new file mode 100644
index 0000000..3a4f6e0
--- /dev/null
+++ b/app/src/main/java/luyao/util/ktx/ui/ToastExtActivity.kt
@@ -0,0 +1,27 @@
+package luyao.util.ktx.ui
+
+import kotlinx.android.synthetic.main.activity_toast_ext.*
+import kotlinx.android.synthetic.main.title_layout.*
+import luyao.ktx.R
+import luyao.util.ktx.base.BaseActivity
+import luyao.util.ktx.ext.longToast
+import luyao.util.ktx.ext.toast
+
+/**
+ * Created by luyao
+ * on 2019/6/14 14:36
+ */
+class ToastExtActivity : BaseActivity() {
+
+ override fun getLayoutResId() = R.layout.activity_toast_ext
+
+ override fun initView() {
+ mToolbar.title = "ToastExt"
+ }
+
+ override fun initData() {
+ toastBt.setOnClickListener { toast("I am groot.") }
+ longToastBt.setOnClickListener { longToast(R.string.groot) }
+
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/res/drawable-v21/ripple.xml b/app/src/main/res/drawable-v21/ripple.xml
new file mode 100644
index 0000000..0427a4a
--- /dev/null
+++ b/app/src/main/res/drawable-v21/ripple.xml
@@ -0,0 +1,6 @@
+
+ -
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/activity_ext.xml b/app/src/main/res/layout/activity_ext.xml
index bdda80b..9952eda 100644
--- a/app/src/main/res/layout/activity_ext.xml
+++ b/app/src/main/res/layout/activity_ext.xml
@@ -1,36 +1,17 @@
-
+
-
+
-
-
-
-
-
-
-
+ android:paddingTop="20dp">
-
+
+
+
diff --git a/app/src/main/res/layout/activity_toast_ext.xml b/app/src/main/res/layout/activity_toast_ext.xml
new file mode 100644
index 0000000..3aca35f
--- /dev/null
+++ b/app/src/main/res/layout/activity_toast_ext.xml
@@ -0,0 +1,19 @@
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/item_common.xml b/app/src/main/res/layout/item_common.xml
index 37b14df..23dd1d1 100644
--- a/app/src/main/res/layout/item_common.xml
+++ b/app/src/main/res/layout/item_common.xml
@@ -1,20 +1,17 @@
-
+
+ android:gravity="center_vertical"
+ android:background="@drawable/ripple"/>
-
-
\ No newline at end of file
+
\ No newline at end of file
diff --git a/app/src/main/res/values/colors.xml b/app/src/main/res/values/colors.xml
index 5600611..bd0ba71 100644
--- a/app/src/main/res/values/colors.xml
+++ b/app/src/main/res/values/colors.xml
@@ -4,4 +4,6 @@
#00574B
#D81B60
#e0e0e0
+ #000000
+ #ffffff
diff --git a/app/src/main/res/values/mainStyles.xml b/app/src/main/res/values/mainStyles.xml
new file mode 100644
index 0000000..9ba5657
--- /dev/null
+++ b/app/src/main/res/values/mainStyles.xml
@@ -0,0 +1,17 @@
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index 3011f05..938e7b9 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -1,3 +1,4 @@
AndroidUtilCodeKTX
+ I am groot.
diff --git a/library/build.gradle b/library/build.gradle
index 8cb7d03..0234b8f 100644
--- a/library/build.gradle
+++ b/library/build.gradle
@@ -38,6 +38,7 @@ dependencies {
api "org.jetbrains.kotlinx:kotlinx-coroutines-android:1.1.1"
api "androidx.lifecycle:lifecycle-viewmodel-ktx:2.2.0-alpha01"
api 'androidx.lifecycle:lifecycle-extensions:2.2.0-alpha01'
+ implementation 'androidx.recyclerview:recyclerview:1.1.0-alpha06'
}
diff --git a/library/src/main/java/luyao/util/ktx/ext/AppExt.kt b/library/src/main/java/luyao/util/ktx/ext/AppExt.kt
index 70957b5..0b7aa3b 100644
--- a/library/src/main/java/luyao/util/ktx/ext/AppExt.kt
+++ b/library/src/main/java/luyao/util/ktx/ext/AppExt.kt
@@ -10,9 +10,8 @@ import java.io.File
* on 2019/6/12 10:53
*/
-/**
- * get [AppInfo] by apk file path
- */
+fun Context.getVersionName(): String = packageManager.getPackageInfo(packageName, 0).versionName
+
fun Context.getAppInfo(apkPath: String): AppInfo {
val packageInfo = packageManager.getPackageInfo(apkPath,PackageManager.GET_META_DATA)
packageInfo.applicationInfo.sourceDir=apkPath
@@ -26,9 +25,6 @@ fun Context.getAppInfo(apkPath: String): AppInfo {
return AppInfo(apkPath,packageName,versionName,versionCode,appName,icon)
}
-/**
- * get [AppInfo] list by apk folder path
- */
fun Context.getAppInfos(apkFolderPath:String):List{
val appInfoList = ArrayList()
for (file in File(apkFolderPath).listFiles())
diff --git a/library/src/main/java/luyao/util/ktx/ext/CommonExt.kt b/library/src/main/java/luyao/util/ktx/ext/CommonExt.kt
new file mode 100644
index 0000000..731c49b
--- /dev/null
+++ b/library/src/main/java/luyao/util/ktx/ext/CommonExt.kt
@@ -0,0 +1,29 @@
+package luyao.util.ktx.ext
+
+import android.content.Context
+import android.view.View
+
+/**
+ * Created by luyao
+ * on 2019/6/14 14:23
+ */
+
+fun Context.dp2px(dp: Float): Int {
+ val scale = resources.displayMetrics.density
+ return (dp * scale + 0.5f).toInt()
+}
+
+fun Context.px2dp(px: Float): Int {
+ val scale = resources.displayMetrics.density
+ return (px / scale + 0.5f).toInt()
+}
+
+fun View.dp2px(dp: Float): Int {
+ val scale = resources.displayMetrics.density
+ return (dp * scale + 0.5f).toInt()
+}
+
+fun View.px2dp(px: Float): Int {
+ val scale = resources.displayMetrics.density
+ return (px / scale + 0.5f).toInt()
+}
\ No newline at end of file
diff --git a/library/src/main/java/luyao/util/ktx/ext/HashExt.kt b/library/src/main/java/luyao/util/ktx/ext/HashExt.kt
new file mode 100644
index 0000000..b932b66
--- /dev/null
+++ b/library/src/main/java/luyao/util/ktx/ext/HashExt.kt
@@ -0,0 +1,27 @@
+package luyao.util.ktx.ext
+
+import java.security.MessageDigest
+
+/**
+ * Created by luyao
+ * on 2019/6/14 15:28
+ */
+@kotlin.internal.LowPriorityInOverloadResolution
+fun ByteArray.md5(): ByteArray = hash(this, Hash.MD5)
+fun ByteArray.md5() : String = hash(this,Hash.MD5).toHexString()
+fun ByteArray.sha1(): ByteArray = hash(this, Hash.SHA1)
+fun ByteArray.sha256(): ByteArray = hash(this, Hash.SHA256)
+
+
+
+
+enum class Hash(algorithm: String) {
+ MD5("md5"),
+ SHA1("sha1"),
+ SHA256("sha256")
+}
+
+fun hash(data: ByteArray, algorithm: Hash): ByteArray {
+ val messageDigest = MessageDigest.getInstance(algorithm.name)
+ return messageDigest.digest(data)
+}
diff --git a/library/src/main/java/luyao/util/ktx/ext/RecycleViewExt.kt b/library/src/main/java/luyao/util/ktx/ext/RecycleViewExt.kt
new file mode 100644
index 0000000..5df0d9b
--- /dev/null
+++ b/library/src/main/java/luyao/util/ktx/ext/RecycleViewExt.kt
@@ -0,0 +1,29 @@
+package luyao.util.ktx.ext
+
+import android.graphics.Rect
+import android.view.View
+import androidx.recyclerview.widget.RecyclerView
+
+/**
+ * Created by luyao
+ * on 2019/6/14 14:07
+ */
+fun RecyclerView.itemPadding(top: Int, bottom: Int, left: Int = 0, right: Int = 0) {
+ addItemDecoration(PaddingItemDecoration(top, bottom, left, right))
+}
+
+class PaddingItemDecoration(top: Int, bottom: Int, left: Int, right: Int) : RecyclerView.ItemDecoration() {
+
+ private val mTop = top
+ private val mBottom = bottom
+ private val mLeft = left
+ private val mRight = right
+
+ override fun getItemOffsets(outRect: Rect, view: View, parent: RecyclerView, state: RecyclerView.State) {
+ super.getItemOffsets(outRect, view, parent, state)
+ outRect.bottom = view.dp2px(mBottom.toFloat())
+ outRect.top = view.dp2px(mTop.toFloat())
+ outRect.left = view.dp2px(mLeft.toFloat())
+ outRect.right = view.dp2px(mRight.toFloat())
+ }
+}
diff --git a/library/src/main/java/luyao/util/ktx/ext/ToastExt.kt b/library/src/main/java/luyao/util/ktx/ext/ToastExt.kt
index 37d3562..c5b86f9 100644
--- a/library/src/main/java/luyao/util/ktx/ext/ToastExt.kt
+++ b/library/src/main/java/luyao/util/ktx/ext/ToastExt.kt
@@ -44,5 +44,4 @@ fun Any.longToast(context: Context, @StringRes id: Int) {
context.longToast(id)
}
-fun Context.getVersionName(): String = packageManager.getPackageInfo(packageName, 0).versionName
diff --git a/library/src/main/java/luyao/util/ktx/ext/TransformExt.kt b/library/src/main/java/luyao/util/ktx/ext/TransformExt.kt
new file mode 100644
index 0000000..ab3a1d4
--- /dev/null
+++ b/library/src/main/java/luyao/util/ktx/ext/TransformExt.kt
@@ -0,0 +1,19 @@
+package luyao.util.ktx.ext
+
+import kotlin.experimental.and
+
+/**
+ * Created by luyao
+ * on 2019/6/14 15:43
+ */
+
+fun ByteArray.toHexString(): String {
+ val builder = StringBuilder()
+ for (b in this) {
+ var hex = Integer.toHexString((b and 0xFF.toByte()).toInt())
+ if (hex.length == 1) hex = "0$hex"
+ builder.append(hex.toUpperCase())
+ }
+ return builder.toString()
+
+}
\ No newline at end of file