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