一些优化和功能添加
This commit is contained in:
parent
0e8de32b72
commit
4885ee619d
30
README.md
30
README.md
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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")
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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())
|
||||
|
|
|
|||
|
|
@ -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.
|
|
@ -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()
|
||||
|
|
@ -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
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -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
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -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
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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
|
||||
}
|
||||
|
|
@ -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)
|
||||
|
|
|
|||
|
|
@ -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]+"))
|
||||
|
|
@ -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()
|
||||
}
|
||||
}
|
||||
})
|
||||
}
|
||||
|
|
@ -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)
|
||||
}
|
||||
})
|
||||
Loading…
Reference in New Issue