一些优化和功能添加

This commit is contained in:
luyao 2019-08-30 16:48:48 +08:00
parent 0e8de32b72
commit 4885ee619d
15 changed files with 805 additions and 145 deletions

View File

@ -46,6 +46,9 @@ fun <reified T : Activity> Activity.startKtxActivityForResult(
Fragment.startKtxActivity()
Fragment.startKtxActivityForResult()
Context.startKtxActivity
Activity.hideKeyboard()
Activity.showKeyboard(et: EditText)
Activity.hideKeyboard(view: View)
```
### [AppExt](https://github.com/lulululbj/AndroidUtilCodeKTX/blob/master/ktx/src/main/java/luyao/util/ktx/ext/AppExt.kt)
@ -56,6 +59,7 @@ Context.versionCode: Long
Context.getAppInfo(apkPath: String): AppInfo
Context.getAppInfos(apkFolderPath: String): List<AppInfo>
Context.getAppSignature(packageName: String = this.packageName): ByteArray?
Context.isPackageInstalled(pkgName: String)
```
### [AesExt](https://github.com/lulululbj/AndroidUtilCodeKTX/blob/master/ktx/src/main/java/luyao/util/ktx/ext/AesExt.kt) [[Demo]](https://github.com/lulululbj/AndroidUtilCodeKTX/blob/master/ktx/src/test/java/luyao/util/ktx/ext/AesExtKtTest.kt)
@ -91,6 +95,19 @@ Context.screenHeight
Context.copyToClipboard(label: String, text: String)
Context.checkAccessbilityServiceEnabled(serviceName: String)
Any?.notNull(f: () -> T, t: () -> T): T
Context.isRTLLayout
```
### [Constants](/ktx/src/main/java/luyao/util/ktx/core/Constants.kt)
```kotlin
fun isOnMainThread()
```
### [DrawableExt](/ktx/src/main/java/luyao/util/ktx/ext/DrawableExt.kt)
```kotlin
Drawable.convertToBitmap()
```
### [FileExt](/ktx/src/main/java/luyao/util/ktx/ext/FileExt.kt)
@ -224,6 +241,7 @@ blockLine(@Px height: Int, addBlockAlways: Boolean = false)
SearchView.queryTextListener(listener: KtxQueryTextLister.() -> Unit)
SeekBar.onProgressBarChanged(callback: (Int, Boolean) -> Unit)
TextView.textWatcher(watcher: KtxTextWatcher.() -> Unit)
ViewPager.onPageSelected(pageChangedAction: (newPosition: Int) -> Unit)
```
### [LogExt](https://github.com/lulululbj/AndroidUtilCodeKTX/blob/master/ktx/src/main/java/luyao/util/ktx/ext/LogExt.kt)
@ -245,6 +263,12 @@ String.loge(tag: String = TAG)
<T> Activity.getSpValue(key: String, default: T, name: String = packageName): T
```
### [StringExt](/ktx/src/main/java/luyao/util/ktx/ext/StringExt.kt)
```kotlin
String.areDigitsOnly()
```
### [SystemServiceExt](https://github.com/lulululbj/AndroidUtilCodeKTX/blob/master/ktx/src/main/java/luyao/util/ktx/ext/SystemServiceExt.kt)
```kotlin
@ -301,6 +325,8 @@ ByteArray.toHexString() : 字节数组转十六进制字符串
View.visible()
View.invisible()
View.gone()
View.reverseVisiblity(needGone: Boolean = true)
View.changeVisible(visible: Boolean, needGone: Boolean = true)
var View.isVisible: Boolean
var View.isInvisible: Boolean
var View.isGone: Boolean
@ -309,7 +335,9 @@ View.postDelayed(delayInMillis: Long, crossinline action: () -> Unit): Runnable
View.toBitmap(config: Bitmap.Config = Bitmap.Config.ARGB_8888): Bitmap
RecyclerView.itemPadding(padding:Int)
RecyclerView.itemPadding(top: Int, bottom: Int, left: Int = 0, right: Int = 0)
TextView.notEmpty(f: TextView.() -> Unit, t: TextView.() -> Unit)
TextView.notEmpty(f: TextView.() -> Unit, t: TextView.() -> Unit)
View.onGlobalLayout(crossinline callback: () -> Unit)
fun View.afterMeasured(crossinline callback: View.() -> Unit)
```
### Others

View File

@ -13,7 +13,7 @@ import luyao.util.ktx.ext.toast
* Created by luyao
* on 2019/7/17 15:26
*/
class CommonExtActivity : BaseActivity() {
class CommonExtActivity : BaseActivity() {
override fun getLayoutResId() = R.layout.activity_common_ext
@ -26,9 +26,9 @@ class CommonExtActivity : BaseActivity() {
screenHeightBt.text = "screen height : $screenHeight"
copyBt.setOnClickListener {
val content = copyEt.text.toString()
if (content.isNotEmpty()){
copyToClipboard("ktx",content)
}else {
if (content.isNotEmpty()) {
copyToClipboard(content)
} else {
toast("please input some words")
}
}

View File

@ -4,6 +4,7 @@ import kotlinx.android.synthetic.main.activity_listener.*
import kotlinx.android.synthetic.main.title_layout.*
import luyao.ktx.R
import luyao.util.ktx.base.BaseActivity
import luyao.util.ktx.ext.afterMeasured
import luyao.util.ktx.ext.listener.onProgressBarChanged
import luyao.util.ktx.ext.listener.queryTextListener
import luyao.util.ktx.ext.listener.textWatcher
@ -22,6 +23,9 @@ class ListenerExtActivity : BaseActivity() {
}
override fun initData() {
listenerEt.afterMeasured {
toast("$width $height")
}
listenerEt.textWatcher {
onTextChanged { s, _, _, _ ->
toast(s.toString())

View File

@ -10,7 +10,7 @@ buildscript {
dependencies {
classpath 'com.android.tools.build:gradle:3.5.0'
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
classpath 'com.novoda:bintray-release:0.9'
classpath 'com.novoda:bintray-release:0.9.1'
// NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files
}

Binary file not shown.

View File

@ -0,0 +1,9 @@
package luyao.util.ktx.core
import android.os.Looper
/**
* Created by luyao
* on 2019/8/30 15:06
*/
fun isOnMainThread() = Looper.myLooper() == Looper.getMainLooper()

View File

@ -4,132 +4,625 @@ import android.webkit.MimeTypeMap
import java.util.*
import java.util.regex.Pattern
class MimeType {
private const val ALL_MIME_TYPES = "*/*"
val MIME_TYPES = HashMap<String, String>().apply {
put("323", "text/h323")
put("3g2", "video/3gpp2")
put("3gp", "video/3gpp")
put("3gp2", "video/3gpp2")
put("3gpp", "video/3gpp")
put("7z", "application/x-7z-compressed")
put("aa", "audio/audible")
put("aac", "audio/aac")
put("aaf", "application/octet-stream")
put("aax", "audio/vnd.audible.aax")
put("ac3", "audio/ac3")
put("aca", "application/octet-stream")
put("accda", "application/msaccess.addin")
put("accdb", "application/msaccess")
put("accdc", "application/msaccess.cab")
put("accde", "application/msaccess")
put("accdr", "application/msaccess.runtime")
put("accdt", "application/msaccess")
put("accdw", "application/msaccess.webapplication")
put("accft", "application/msaccess.ftemplate")
put("acx", "application/internet-property-stream")
put("addin", "text/xml")
put("ade", "application/msaccess")
put("adobebridge", "application/x-bridge-url")
put("adp", "application/msaccess")
put("adt", "audio/vnd.dlna.adts")
put("adts", "audio/aac")
put("afm", "application/octet-stream")
put("ai", "application/postscript")
put("aif", "audio/aiff")
put("aifc", "audio/aiff")
put("aiff", "audio/aiff")
put("air", "application/vnd.adobe.air-application-installer-package+zip")
put("amc", "application/mpeg")
put("anx", "application/annodex")
put("apk", "application/vnd.android.package-archive")
put("application", "application/x-ms-application")
put("art", "image/x-jg")
put("asa", "application/xml")
put("asax", "application/xml")
put("ascx", "application/xml")
put("asd", "application/octet-stream")
put("asf", "video/x-ms-asf")
put("ashx", "application/xml")
put("asi", "application/octet-stream")
put("asm", "text/plain")
put("asmx", "application/xml")
put("aspx", "application/xml")
put("asr", "video/x-ms-asf")
put("asx", "video/x-ms-asf")
put("atom", "application/atom+xml")
put("au", "audio/basic")
put("avi", "video/x-msvideo")
put("axa", "audio/annodex")
put("axs", "application/olescript")
put("axv", "video/annodex")
put("bas", "text/plain")
put("bcpio", "application/x-bcpio")
put("bin", "application/octet-stream")
put("bmp", "image/bmp")
put("c", "text/plain")
put("cab", "application/octet-stream")
put("caf", "audio/x-caf")
put("calx", "application/vnd.ms-office.calx")
put("cat", "application/vnd.ms-pki.seccat")
put("cc", "text/plain")
put("cd", "text/plain")
put("cdda", "audio/aiff")
put("cdf", "application/x-cdf")
put("cer", "application/x-x509-ca-cert")
put("cfg", "text/plain")
put("chm", "application/octet-stream")
put("class", "application/x-java-applet")
put("clp", "application/x-msclip")
put("cmd", "text/plain")
put("cmx", "image/x-cmx")
put("cnf", "text/plain")
put("cod", "image/cis-cod")
put("config", "application/xml")
put("contact", "text/x-ms-contact")
put("coverage", "application/xml")
put("cpio", "application/x-cpio")
put("cpp", "text/plain")
put("crd", "application/x-mscardfile")
put("crl", "application/pkix-crl")
put("crt", "application/x-x509-ca-cert")
put("cs", "text/plain")
put("csdproj", "text/plain")
put("csh", "application/x-csh")
put("csproj", "text/plain")
put("css", "text/css")
put("csv", "text/csv")
put("cur", "application/octet-stream")
put("cxx", "text/plain")
put("dat", "application/octet-stream")
put("datasource", "application/xml")
put("dbproj", "text/plain")
put("dcr", "application/x-director")
put("def", "text/plain")
put("deploy", "application/octet-stream")
put("der", "application/x-x509-ca-cert")
put("dgml", "application/xml")
put("dib", "image/bmp")
put("dif", "video/x-dv")
put("dir", "application/x-director")
put("disco", "text/xml")
put("divx", "video/divx")
put("dll", "application/x-msdownload")
put("dll.config", "text/xml")
put("dlm", "text/dlm")
put("dng", "image/x-adobe-dng")
put("doc", "application/msword")
put("docm", "application/vnd.ms-word.document.macroEnabled.12")
put("docx", "application/vnd.openxmlformats-officedocument.wordprocessingml.document")
put("dot", "application/msword")
put("dotm", "application/vnd.ms-word.template.macroEnabled.12")
put("dotx", "application/vnd.openxmlformats-officedocument.wordprocessingml.template")
put("dsp", "application/octet-stream")
put("dsw", "text/plain")
put("dtd", "text/xml")
put("dtsconfig", "text/xml")
put("dv", "video/x-dv")
put("dvi", "application/x-dvi")
put("dwf", "drawing/x-dwf")
put("dwp", "application/octet-stream")
put("dxr", "application/x-director")
put("eml", "message/rfc822")
put("emz", "application/octet-stream")
put("eot", "application/vnd.ms-fontobject")
put("eps", "application/postscript")
put("etl", "application/etl")
put("etx", "text/x-setext")
put("evy", "application/envoy")
put("exe", "application/octet-stream")
put("exe.config", "text/xml")
put("fdf", "application/vnd.fdf")
put("fif", "application/fractals")
put("filters", "application/xml")
put("fla", "application/octet-stream")
put("flac", "audio/flac")
put("flr", "x-world/x-vrml")
put("flv", "video/x-flv")
put("fsscript", "application/fsharp-script")
put("fsx", "application/fsharp-script")
put("generictest", "application/xml")
put("gif", "image/gif")
put("group", "text/x-ms-group")
put("gsm", "audio/x-gsm")
put("gtar", "application/x-gtar")
put("gz", "application/x-gzip")
put("h", "text/plain")
put("hdf", "application/x-hdf")
put("hdml", "text/x-hdml")
put("hhc", "application/x-oleobject")
put("hhk", "application/octet-stream")
put("hhp", "application/octet-stream")
put("hlp", "application/winhlp")
put("hpp", "text/plain")
put("hqx", "application/mac-binhex40")
put("hta", "application/hta")
put("htc", "text/x-component")
put("htm", "text/html")
put("html", "text/html")
put("htt", "text/webviewhtml")
put("hxa", "application/xml")
put("hxc", "application/xml")
put("hxd", "application/octet-stream")
put("hxe", "application/xml")
put("hxf", "application/xml")
put("hxh", "application/octet-stream")
put("hxi", "application/octet-stream")
put("hxk", "application/xml")
put("hxq", "application/octet-stream")
put("hxr", "application/octet-stream")
put("hxs", "application/octet-stream")
put("hxt", "text/html")
put("hxv", "application/xml")
put("hxw", "application/octet-stream")
put("hxx", "text/plain")
put("i", "text/plain")
put("ico", "image/x-icon")
put("ics", "text/calendar")
put("idl", "text/plain")
put("ief", "image/ief")
put("iii", "application/x-iphone")
put("inc", "text/plain")
put("inf", "application/octet-stream")
put("ini", "text/plain")
put("inl", "text/plain")
put("ins", "application/x-internet-signup")
put("ipa", "application/x-itunes-ipa")
put("ipg", "application/x-itunes-ipg")
put("ipproj", "text/plain")
put("ipsw", "application/x-itunes-ipsw")
put("iqy", "text/x-ms-iqy")
put("isp", "application/x-internet-signup")
put("ite", "application/x-itunes-ite")
put("itlp", "application/x-itunes-itlp")
put("itms", "application/x-itunes-itms")
put("itpc", "application/x-itunes-itpc")
put("ivf", "video/x-ivf")
put("jar", "application/java-archive")
put("java", "application/octet-stream")
put("jck", "application/liquidmotion")
put("jcz", "application/liquidmotion")
put("jfif", "image/pjpeg")
put("jnlp", "application/x-java-jnlp-file")
put("jpb", "application/octet-stream")
put("jpe", "image/jpeg")
put("jpeg", "image/jpeg")
put("jpg", "image/jpeg")
put("js", "application/javascript")
put("json", "application/json")
put("jsx", "text/jscript")
put("jsxbin", "text/plain")
put("latex", "application/x-latex")
put("library-ms", "application/windows-library+xml")
put("lit", "application/x-ms-reader")
put("loadtest", "application/xml")
put("lpk", "application/octet-stream")
put("lsf", "video/x-la-asf")
put("lst", "text/plain")
put("lsx", "video/x-la-asf")
put("lzh", "application/octet-stream")
put("m13", "application/x-msmediaview")
put("m14", "application/x-msmediaview")
put("m1v", "video/mpeg")
put("m2t", "video/vnd.dlna.mpeg-tts")
put("m2ts", "video/vnd.dlna.mpeg-tts")
put("m2v", "video/mpeg")
put("m3u", "audio/x-mpegurl")
put("m3u8", "audio/x-mpegurl")
put("m4a", "audio/m4a")
put("m4b", "audio/m4b")
put("m4p", "audio/m4p")
put("m4r", "audio/x-m4r")
put("m4v", "video/x-m4v")
put("mac", "image/x-macpaint")
put("mak", "text/plain")
put("man", "application/x-troff-man")
put("manifest", "application/x-ms-manifest")
put("map", "text/plain")
put("master", "application/xml")
put("mda", "application/msaccess")
put("mdb", "application/x-msaccess")
put("mde", "application/msaccess")
put("mdp", "application/octet-stream")
put("me", "application/x-troff-me")
put("mfp", "application/x-shockwave-flash")
put("mht", "message/rfc822")
put("mhtml", "message/rfc822")
put("mid", "audio/mid")
put("midi", "audio/mid")
put("mix", "application/octet-stream")
put("mk", "text/plain")
put("mkv", "video/x-matroska")
put("mmf", "application/x-smaf")
put("mno", "text/xml")
put("mny", "application/x-msmoney")
put("mod", "video/mpeg")
put("mov", "video/quicktime")
put("movie", "video/x-sgi-movie")
put("mp2", "video/mpeg")
put("mp2v", "video/mpeg")
put("mp3", "audio/mpeg")
put("mp4", "video/mp4")
put("mp4v", "video/mp4")
put("mpa", "video/mpeg")
put("mpe", "video/mpeg")
put("mpeg", "video/mpeg")
put("mpf", "application/vnd.ms-mediapackage")
put("mpg", "video/mpeg")
put("mpp", "application/vnd.ms-project")
put("mpv2", "video/mpeg")
put("mqv", "video/quicktime")
put("ms", "application/x-troff-ms")
put("msi", "application/octet-stream")
put("mso", "application/octet-stream")
put("mts", "video/vnd.dlna.mpeg-tts")
put("mtx", "application/xml")
put("mvb", "application/x-msmediaview")
put("mvc", "application/x-miva-compiled")
put("mxp", "application/x-mmxp")
put("nc", "application/x-netcdf")
put("nsc", "video/x-ms-asf")
put("nws", "message/rfc822")
put("ocx", "application/octet-stream")
put("oda", "application/oda")
put("odb", "application/vnd.oasis.opendocument.database")
put("odc", "application/vnd.oasis.opendocument.chart")
put("odf", "application/vnd.oasis.opendocument.formula")
put("odg", "application/vnd.oasis.opendocument.graphics")
put("odh", "text/plain")
put("odi", "application/vnd.oasis.opendocument.image")
put("odl", "text/plain")
put("odm", "application/vnd.oasis.opendocument.text-master")
put("odp", "application/vnd.oasis.opendocument.presentation")
put("ods", "application/vnd.oasis.opendocument.spreadsheet")
put("odt", "application/vnd.oasis.opendocument.text")
put("oga", "audio/ogg")
put("ogg", "audio/ogg")
put("ogv", "video/ogg")
put("ogx", "application/ogg")
put("one", "application/onenote")
put("onea", "application/onenote")
put("onepkg", "application/onenote")
put("onetmp", "application/onenote")
put("onetoc", "application/onenote")
put("onetoc2", "application/onenote")
put("opus", "audio/ogg")
put("orderedtest", "application/xml")
put("osdx", "application/opensearchdescription+xml")
put("otf", "application/font-sfnt")
put("otg", "application/vnd.oasis.opendocument.graphics-template")
put("oth", "application/vnd.oasis.opendocument.text-web")
put("otp", "application/vnd.oasis.opendocument.presentation-template")
put("ots", "application/vnd.oasis.opendocument.spreadsheet-template")
put("ott", "application/vnd.oasis.opendocument.text-template")
put("oxt", "application/vnd.openofficeorg.extension")
put("p10", "application/pkcs10")
put("p12", "application/x-pkcs12")
put("p7b", "application/x-pkcs7-certificates")
put("p7c", "application/pkcs7-mime")
put("p7m", "application/pkcs7-mime")
put("p7r", "application/x-pkcs7-certreqresp")
put("p7s", "application/pkcs7-signature")
put("pbm", "image/x-portable-bitmap")
put("pcast", "application/x-podcast")
put("pct", "image/pict")
put("pcx", "application/octet-stream")
put("pcz", "application/octet-stream")
put("pdf", "application/pdf")
put("pfb", "application/octet-stream")
put("pfm", "application/octet-stream")
put("pfx", "application/x-pkcs12")
put("pgm", "image/x-portable-graymap")
put("php", "text/plain")
put("pic", "image/pict")
put("pict", "image/pict")
put("pkgdef", "text/plain")
put("pkgundef", "text/plain")
put("pko", "application/vnd.ms-pki.pko")
put("pls", "audio/scpls")
put("pma", "application/x-perfmon")
put("pmc", "application/x-perfmon")
put("pml", "application/x-perfmon")
put("pmr", "application/x-perfmon")
put("pmw", "application/x-perfmon")
put("png", "image/png")
put("pnm", "image/x-portable-anymap")
put("pnt", "image/x-macpaint")
put("pntg", "image/x-macpaint")
put("pnz", "image/png")
put("pot", "application/vnd.ms-powerpoint")
put("potm", "application/vnd.ms-powerpoint.template.macroEnabled.12")
put("potx", "application/vnd.openxmlformats-officedocument.presentationml.template")
put("ppa", "application/vnd.ms-powerpoint")
put("ppam", "application/vnd.ms-powerpoint.addin.macroEnabled.12")
put("ppm", "image/x-portable-pixmap")
put("pps", "application/vnd.ms-powerpoint")
put("ppsm", "application/vnd.ms-powerpoint.slideshow.macroEnabled.12")
put("ppsx", "application/vnd.openxmlformats-officedocument.presentationml.slideshow")
put("ppt", "application/vnd.ms-powerpoint")
put("pptm", "application/vnd.ms-powerpoint.presentation.macroEnabled.12")
put("pptx", "application/vnd.openxmlformats-officedocument.presentationml.presentation")
put("prf", "application/pics-rules")
put("prm", "application/octet-stream")
put("prx", "application/octet-stream")
put("ps", "application/postscript")
put("psc1", "application/PowerShell")
put("psd", "application/octet-stream")
put("psess", "application/xml")
put("psm", "application/octet-stream")
put("psp", "application/octet-stream")
put("pub", "application/x-mspublisher")
put("pwz", "application/vnd.ms-powerpoint")
put("py", "text/plain")
put("qht", "text/x-html-insertion")
put("qhtm", "text/x-html-insertion")
put("qt", "video/quicktime")
put("qti", "image/x-quicktime")
put("qtif", "image/x-quicktime")
put("qtl", "application/x-quicktimeplayer")
put("qxd", "application/octet-stream")
put("ra", "audio/x-pn-realaudio")
put("ram", "audio/x-pn-realaudio")
put("rar", "application/x-rar-compressed")
put("ras", "image/x-cmu-raster")
put("rat", "application/rat-file")
put("rb", "text/plain")
put("rc", "text/plain")
put("rc2", "text/plain")
put("rct", "text/plain")
put("rdlc", "application/xml")
put("reg", "text/plain")
put("resx", "application/xml")
put("rf", "image/vnd.rn-realflash")
put("rgb", "image/x-rgb")
put("rgs", "text/plain")
put("rm", "application/vnd.rn-realmedia")
put("rmi", "audio/mid")
put("rmp", "application/vnd.rn-rn_music_package")
put("roff", "application/x-troff")
put("rpm", "audio/x-pn-realaudio-plugin")
put("rqy", "text/x-ms-rqy")
put("rtf", "application/rtf")
put("rtx", "text/richtext")
put("ruleset", "application/xml")
put("s", "text/plain")
put("safariextz", "application/x-safari-safariextz")
put("scd", "application/x-msschedule")
put("scr", "text/plain")
put("sct", "text/scriptlet")
put("sd2", "audio/x-sd2")
put("sdp", "application/sdp")
put("sea", "application/octet-stream")
put("searchConnector-ms", "application/windows-search-connector+xml")
put("setpay", "application/set-payment-initiation")
put("setreg", "application/set-registration-initiation")
put("settings", "application/xml")
put("sgimb", "application/x-sgimb")
put("sgml", "text/sgml")
put("sh", "application/x-sh")
put("shar", "application/x-shar")
put("shtml", "text/html")
put("sit", "application/x-stuffit")
put("sitemap", "application/xml")
put("skin", "application/xml")
put("sldm", "application/vnd.ms-powerpoint.slide.macroEnabled.12")
put("sldx", "application/vnd.openxmlformats-officedocument.presentationml.slide")
put("slk", "application/vnd.ms-excel")
put("sln", "text/plain")
put("slupkg-ms", "application/x-ms-license")
put("smd", "audio/x-smd")
put("smi", "application/octet-stream")
put("smx", "audio/x-smd")
put("smz", "audio/x-smd")
put("snd", "audio/basic")
put("snippet", "application/xml")
put("snp", "application/octet-stream")
put("sol", "text/plain")
put("sor", "text/plain")
put("spc", "application/x-pkcs7-certificates")
put("spl", "application/futuresplash")
put("spx", "audio/ogg")
put("src", "application/x-wais-source")
put("srf", "text/plain")
put("ssisdeploymentmanifest", "text/xml")
put("ssm", "application/streamingmedia")
put("sst", "application/vnd.ms-pki.certstore")
put("stl", "application/vnd.ms-pki.stl")
put("sv4cpio", "application/x-sv4cpio")
put("sv4crc", "application/x-sv4crc")
put("svc", "application/xml")
put("svg", "image/svg+xml")
put("swf", "application/x-shockwave-flash")
put("t", "application/x-troff")
put("tar", "application/x-tar")
put("tcl", "application/x-tcl")
put("testrunconfig", "application/xml")
put("testsettings", "application/xml")
put("tex", "application/x-tex")
put("texi", "application/x-texinfo")
put("texinfo", "application/x-texinfo")
put("tgz", "application/x-compressed")
put("thmx", "application/vnd.ms-officetheme")
put("thn", "application/octet-stream")
put("tif", "image/tiff")
put("tiff", "image/tiff")
put("tlh", "text/plain")
put("tli", "text/plain")
put("toc", "application/octet-stream")
put("tr", "application/x-troff")
put("trm", "application/x-msterminal")
put("trx", "application/xml")
put("ts", "video/vnd.dlna.mpeg-tts")
put("tsv", "text/tab-separated-values")
put("ttf", "application/font-sfnt")
put("tts", "video/vnd.dlna.mpeg-tts")
put("txt", "text/plain")
put("u32", "application/octet-stream")
put("uls", "text/iuls")
put("user", "text/plain")
put("ustar", "application/x-ustar")
put("vb", "text/plain")
put("vbdproj", "text/plain")
put("vbk", "video/mpeg")
put("vbproj", "text/plain")
put("vbs", "text/vbscript")
put("vcf", "text/x-vcard")
put("vcproj", "application/xml")
put("vcs", "text/plain")
put("vcxproj", "application/xml")
put("vddproj", "text/plain")
put("vdp", "text/plain")
put("vdproj", "text/plain")
put("vdx", "application/vnd.ms-visio.viewer")
put("vml", "text/xml")
put("vscontent", "application/xml")
put("vsct", "text/xml")
put("vsd", "application/vnd.visio")
put("vsi", "application/ms-vsi")
put("vsix", "application/vsix")
put("vsixlangpack", "text/xml")
put("vsixmanifest", "text/xml")
put("vsmdi", "application/xml")
put("vspscc", "text/plain")
put("vss", "application/vnd.visio")
put("vsscc", "text/plain")
put("vssettings", "text/xml")
put("vssscc", "text/plain")
put("vst", "application/vnd.visio")
put("vstemplate", "text/xml")
put("vsto", "application/x-ms-vsto")
put("vsw", "application/vnd.visio")
put("vsx", "application/vnd.visio")
put("vtx", "application/vnd.visio")
put("wav", "audio/wav")
put("wave", "audio/wav")
put("wax", "audio/x-ms-wax")
put("wbk", "application/msword")
put("wbmp", "image/vnd.wap.wbmp")
put("wcm", "application/vnd.ms-works")
put("wdb", "application/vnd.ms-works")
put("wdp", "image/vnd.ms-photo")
put("webarchive", "application/x-safari-webarchive")
put("webm", "video/webm")
put("webp", "image/webp")
put("webtest", "application/xml")
put("wiq", "application/xml")
put("wiz", "application/msword")
put("wks", "application/vnd.ms-works")
put("wlmp", "application/wlmoviemaker")
put("wlpginstall", "application/x-wlpg-detect")
put("wlpginstall3", "application/x-wlpg3-detect")
put("wm", "video/x-ms-wm")
put("wma", "audio/x-ms-wma")
put("wmd", "application/x-ms-wmd")
put("wmf", "application/x-msmetafile")
put("wml", "text/vnd.wap.wml")
put("wmlc", "application/vnd.wap.wmlc")
put("wmls", "text/vnd.wap.wmlscript")
put("wmlsc", "application/vnd.wap.wmlscriptc")
put("wmp", "video/x-ms-wmp")
put("wmv", "video/x-ms-wmv")
put("wmx", "video/x-ms-wmx")
put("wmz", "application/x-ms-wmz")
put("woff", "application/font-woff")
put("wpl", "application/vnd.ms-wpl")
put("wps", "application/vnd.ms-works")
put("wri", "application/x-mswrite")
put("wrl", "x-world/x-vrml")
put("wrz", "x-world/x-vrml")
put("wsc", "text/scriptlet")
put("wsdl", "text/xml")
put("wvx", "video/x-ms-wvx")
put("x", "application/directx")
put("xaf", "x-world/x-vrml")
put("xaml", "application/xaml+xml")
put("xap", "application/x-silverlight-app")
put("xbap", "application/x-ms-xbap")
put("xbm", "image/x-xbitmap")
put("xdr", "text/plain")
put("xht", "application/xhtml+xml")
put("xhtml", "application/xhtml+xml")
put("xla", "application/vnd.ms-excel")
put("xlam", "application/vnd.ms-excel.addin.macroEnabled.12")
put("xlc", "application/vnd.ms-excel")
put("xld", "application/vnd.ms-excel")
put("xlk", "application/vnd.ms-excel")
put("xll", "application/vnd.ms-excel")
put("xlm", "application/vnd.ms-excel")
put("xls", "application/vnd.ms-excel")
put("xlsb", "application/vnd.ms-excel.sheet.binary.macroEnabled.12")
put("xlsm", "application/vnd.ms-excel.sheet.macroEnabled.12")
put("xlsx", "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet")
put("xlt", "application/vnd.ms-excel")
put("xltm", "application/vnd.ms-excel.template.macroEnabled.12")
put("xltx", "application/vnd.openxmlformats-officedocument.spreadsheetml.template")
put("xlw", "application/vnd.ms-excel")
put("xml", "text/xml")
put("xmta", "application/xml")
put("xof", "x-world/x-vrml")
put("xoml", "text/plain")
put("xpm", "image/x-xpixmap")
put("xps", "application/vnd.ms-xpsdocument")
put("xrm-ms", "text/xml")
put("xsc", "application/xml")
put("xsd", "text/xml")
put("xsf", "text/xml")
put("xsl", "text/xml")
put("xslt", "text/xml")
put("xsn", "application/octet-stream")
put("xss", "application/xml")
put("xspf", "application/xspf+xml")
put("xtp", "application/octet-stream")
put("xwd", "image/x-xwindowdump")
put("z", "application/x-compress")
put("zip", "application/zip")
}
companion object {
private const val ALL_MIME_TYPES = "*/*"
private val MIME_TYPES = HashMap<String, String>(1 + (66 / 0.75).toInt())
fun getMimeType(extension: String, isDirectory: Boolean): String {
if (isDirectory) {
return ""
}
var type: String? = ALL_MIME_TYPES
// mapping extension to system mime types
if (extension.isNotEmpty()) {
val extensionLowerCase = extension.toLowerCase(Locale
.getDefault())
val mime = MimeTypeMap.getSingleton()
type = mime.getMimeTypeFromExtension(extensionLowerCase)
if (type == null) {
type = MIME_TYPES[extensionLowerCase]
}
}
if (type == null) type = ALL_MIME_TYPES
return type
}
fun mimeTypeMatch(mime: String, input: String): Boolean {
return Pattern.matches(mime.replace("*", ".*"), input)
}
/**
* Helper method for [.getMimeType]
* to calculate the last '.' extension of files
* @param path the path of file
* @return extension extracted from name in lowercase
*/
fun getExtension(path: String): String {
return if (path.contains("."))
path.substring(path.lastIndexOf(".") + 1).toLowerCase()
else
""
}
}
init {
/*
* ================= MIME TYPES ====================
*/
MIME_TYPES["asm"] = "text/x-asm"
MIME_TYPES["json"] = "application/json"
MIME_TYPES["js"] = "application/javascript"
MIME_TYPES["def"] = "text/plain"
MIME_TYPES["in"] = "text/plain"
MIME_TYPES["rc"] = "text/plain"
MIME_TYPES["list"] = "text/plain"
MIME_TYPES["log"] = "text/plain"
MIME_TYPES["pl"] = "text/plain"
MIME_TYPES["prop"] = "text/plain"
MIME_TYPES["properties"] = "text/plain"
MIME_TYPES["rc"] = "text/plain"
MIME_TYPES["ini"] = "text/plain"
MIME_TYPES["md"] = "text/markdown"
MIME_TYPES["epub"] = "application/epub+zip"
MIME_TYPES["ibooks"] = "application/x-ibooks+zip"
MIME_TYPES["ifb"] = "text/calendar"
MIME_TYPES["eml"] = "message/rfc822"
MIME_TYPES["msg"] = "application/vnd.ms-outlook"
MIME_TYPES["ace"] = "application/x-ace-compressed"
MIME_TYPES["bz"] = "application/x-bzip"
MIME_TYPES["bz2"] = "application/x-bzip2"
MIME_TYPES["cab"] = "application/vnd.ms-cab-compressed"
MIME_TYPES["gz"] = "application/x-gzip"
MIME_TYPES["lrf"] = "application/octet-stream"
MIME_TYPES["jar"] = "application/java-archive"
MIME_TYPES["xz"] = "application/x-xz"
MIME_TYPES["Z"] = "application/x-compress"
MIME_TYPES["bat"] = "application/x-msdownload"
MIME_TYPES["ksh"] = "text/plain"
MIME_TYPES["sh"] = "application/x-sh"
MIME_TYPES["db"] = "application/octet-stream"
MIME_TYPES["db3"] = "application/octet-stream"
MIME_TYPES["otf"] = "application/x-font-otf"
MIME_TYPES["ttf"] = "application/x-font-ttf"
MIME_TYPES["psf"] = "application/x-font-linux-psf"
MIME_TYPES["cgm"] = "image/cgm"
MIME_TYPES["btif"] = "image/prs.btif"
MIME_TYPES["dwg"] = "image/vnd.dwg"
MIME_TYPES["dxf"] = "image/vnd.dxf"
MIME_TYPES["fbs"] = "image/vnd.fastbidsheet"
MIME_TYPES["fpx"] = "image/vnd.fpx"
MIME_TYPES["fst"] = "image/vnd.fst"
MIME_TYPES["mdi"] = "image/vnd.ms-mdi"
MIME_TYPES["npx"] = "image/vnd.net-fpx"
MIME_TYPES["xif"] = "image/vnd.xiff"
MIME_TYPES["pct"] = "image/x-pict"
MIME_TYPES["pic"] = "image/x-pict"
MIME_TYPES["adp"] = "audio/adpcm"
MIME_TYPES["au"] = "audio/basic"
MIME_TYPES["snd"] = "audio/basic"
MIME_TYPES["m2a"] = "audio/mpeg"
MIME_TYPES["m3a"] = "audio/mpeg"
MIME_TYPES["oga"] = "audio/ogg"
MIME_TYPES["spx"] = "audio/ogg"
MIME_TYPES["aac"] = "audio/x-aac"
MIME_TYPES["mka"] = "audio/x-matroska"
MIME_TYPES["jpgv"] = "video/jpeg"
MIME_TYPES["jpgm"] = "video/jpm"
MIME_TYPES["jpm"] = "video/jpm"
MIME_TYPES["mj2"] = "video/mj2"
MIME_TYPES["mjp2"] = "video/mj2"
MIME_TYPES["mpa"] = "video/mpeg"
MIME_TYPES["ogv"] = "video/ogg"
MIME_TYPES["flv"] = "video/x-flv"
MIME_TYPES["mkv"] = "video/x-matroska"
fun getMimeType(extension: String, isDirectory: Boolean): String {
if (isDirectory) {
return ""
}
var type: String? = ALL_MIME_TYPES
}
if (extension.isNotEmpty()) {
val extensionLowerCase = extension.toLowerCase(Locale
.getDefault())
val mime = MimeTypeMap.getSingleton()
type = mime.getMimeTypeFromExtension(extensionLowerCase)
if (type == null) {
type = MIME_TYPES[extensionLowerCase]
}
}
if (type == null) type = ALL_MIME_TYPES
return type
}

View File

@ -5,6 +5,10 @@ import android.content.Context
import android.content.Intent
import android.os.Bundle
import android.os.Parcelable
import android.view.View
import android.view.WindowManager
import android.view.inputmethod.InputMethodManager
import android.widget.EditText
import androidx.fragment.app.Fragment
import java.io.Serializable
@ -123,3 +127,18 @@ inline fun <reified T : Context> Context.getIntent(
}
}
fun Activity.hideKeyboard() {
inputMethodManager?.hideSoftInputFromWindow((currentFocus ?: View(this)).windowToken, 0)
window!!.setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN)
currentFocus?.clearFocus()
}
fun Activity.showKeyboard(et: EditText) {
et.requestFocus()
inputMethodManager?.showSoftInput(et, InputMethodManager.SHOW_IMPLICIT)
}
fun Activity.hideKeyboard(view: View) {
inputMethodManager?.hideSoftInputFromWindow(view.windowToken, 0)
}

View File

@ -47,4 +47,13 @@ fun Context.getAppSignature(packageName: String = this.packageName): ByteArray?
return signatures[0].toByteArray()
}
fun Context.isPackageInstalled(pkgName: String): Boolean {
return try {
packageManager.getPackageInfo(pkgName, 0)
true
} catch (e: Exception) {
false
}
}

View File

@ -12,6 +12,16 @@ import android.view.View
* on 2019/6/14 14:23
*/
val Context.isRTLLayout: Boolean get() = resources.configuration.layoutDirection == View.LAYOUT_DIRECTION_RTL
val Context.screenWidth
get() = resources.displayMetrics.widthPixels
val Context.screenHeight
get() = resources.displayMetrics.heightPixels
fun fromM() = fromSpecificVersion(Build.VERSION_CODES.M)
fun beforeM() = beforeSpecificVersion(Build.VERSION_CODES.M)
fun fromN() = fromSpecificVersion(Build.VERSION_CODES.N)
@ -47,14 +57,7 @@ fun View.px2dp(px: Int): Int {
return (px / scale + 0.5f).toInt()
}
val Context.screenWidth
get() = resources.displayMetrics.widthPixels
val Context.screenHeight
get() = resources.displayMetrics.heightPixels
fun Context.copyToClipboard(label: String, text: String) {
fun Context.copyToClipboard(text: String,label: String = "KTX") {
val clipData = ClipData.newPlainText(label, text)
clipboardManager?.primaryClip = clipData
}

View File

@ -0,0 +1,29 @@
package luyao.util.ktx.ext
import android.graphics.Bitmap
import android.graphics.Canvas
import android.graphics.drawable.BitmapDrawable
import android.graphics.drawable.Drawable
/**
* Created by luyao
* on 2019/8/30 15:27
*/
fun Drawable.convertToBitmap(): Bitmap {
val bitmap = if (intrinsicWidth <= 0 || intrinsicHeight <= 0) {
Bitmap.createBitmap(1, 1, Bitmap.Config.ARGB_8888)
} else {
Bitmap.createBitmap(intrinsicWidth, intrinsicHeight, Bitmap.Config.ARGB_8888)
}
if (this is BitmapDrawable) {
if (this.bitmap != null) {
return this.bitmap
}
}
val canvas = Canvas(bitmap!!)
setBounds(0, 0, canvas.width, canvas.height)
draw(canvas)
return bitmap
}

View File

@ -1,7 +1,7 @@
package luyao.util.ktx.ext
import luyao.util.ktx.core.func.*
import luyao.util.ktx.core.util.MimeType
import luyao.util.ktx.core.util.getMimeType
import java.io.File
import java.nio.charset.Charset
@ -20,7 +20,7 @@ val File.formatSize: String
get() = getFormatFileSize(totalSize)
val File.mimeType: String
get() = MimeType.getMimeType(extension, isDirectory)
get() = getMimeType(extension, isDirectory)
fun File.listFiles(isRecursive: Boolean = false, filter: ((file: File) -> Boolean)? = null): Array<out File> {
val fileList = if (!isRecursive) listFiles() else getAllSubFile(this)

View File

@ -7,4 +7,6 @@ package luyao.util.ktx.ext
fun <T> String?.notNull(f: () -> T, t: () -> T): T {
return if (this != null) f() else t()
}
}
fun String.areDigitsOnly() = matches(Regex("[0-9]+"))

View File

@ -4,18 +4,42 @@ import android.graphics.Bitmap
import android.graphics.Canvas
import android.graphics.Color
import android.graphics.drawable.BitmapDrawable
import android.os.Build
import android.view.View
import android.view.ViewTreeObserver
import android.widget.ImageView
import androidx.annotation.Px
import androidx.annotation.RequiresApi
/**
* Created by luyao
* on 2019/7/9 9:45
*/
fun View.visible() = run { visibility = View.VISIBLE }
fun View.visible() {
visibility = View.VISIBLE
}
fun View.invisible() = run { visibility = View.INVISIBLE }
fun View.gone() = run { visibility = View.GONE }
fun View.invisible() {
visibility = View.INVISIBLE
}
fun View.gone() {
visibility = View.GONE
}
fun View.reverseVisiblity(needGone: Boolean = true) {
if (isVisible) {
if (needGone) gone() else invisible()
} else visible()
}
fun View.changeVisible(visible: Boolean, needGone: Boolean = true) {
when {
visible -> visible()
needGone -> gone()
else -> invisible()
}
}
var View.isVisible: Boolean
get() = visibility == View.VISIBLE
@ -71,4 +95,26 @@ fun createBitmapSafely(width: Int, height: Int, config: Bitmap.Config, retryCoun
return null
}
}
inline fun View.onGlobalLayout(crossinline callback: () -> Unit) = with(viewTreeObserver) {
addOnGlobalLayoutListener(object : ViewTreeObserver.OnGlobalLayoutListener {
@RequiresApi(Build.VERSION_CODES.JELLY_BEAN)
override fun onGlobalLayout() {
removeOnGlobalLayoutListener(this)
callback()
}
})
}
inline fun View.afterMeasured(crossinline callback: View.() -> Unit) {
viewTreeObserver.addOnGlobalLayoutListener(object : ViewTreeObserver.OnGlobalLayoutListener {
@RequiresApi(Build.VERSION_CODES.JELLY_BEAN)
override fun onGlobalLayout() {
if (measuredWidth > 0 && measuredHeight > 0) {
viewTreeObserver.removeOnGlobalLayoutListener(this)
callback()
}
}
})
}

View File

@ -0,0 +1,18 @@
package luyao.util.ktx.ext.listener
import androidx.viewpager.widget.ViewPager
/**
* Created by luyao
* on 2019/8/30 16:31
*/
fun ViewPager.onPageSelected(pageChangedAction: (newPosition: Int) -> Unit) =
addOnPageChangeListener(object : ViewPager.OnPageChangeListener {
override fun onPageScrollStateChanged(state: Int) {}
override fun onPageScrolled(position: Int, positionOffset: Float, positionOffsetPixels: Int) {}
override fun onPageSelected(position: Int) {
pageChangedAction(position)
}
})