Skip to content

Commit

Permalink
Optimize code
Browse files Browse the repository at this point in the history
  • Loading branch information
DylanCaiCoding committed Oct 14, 2021
1 parent 954eb92 commit fdaab6e
Show file tree
Hide file tree
Showing 12 changed files with 73 additions and 77 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -37,8 +37,7 @@ inline fun TabLayout.setupWithViewPager(
) {
setupWithViewPager(viewPager, autoRefresh)
for (i in 0 until tabCount) {
val tab = getTabAt(i)
if (tab != null) {
getTabAt(i)?.let { tab ->
tabConfigurationStrategy(tab, i)
}
}
Expand All @@ -59,10 +58,10 @@ inline fun TabLayout.Tab.setCustomView(@LayoutRes layoutId: Int, block: View.()
block(customView!!)
}

inline fun TabLayout.addTab(@StringRes resId: Int, block: TabLayout.Tab.() -> Unit = {}) =
inline fun TabLayout.addTab(@StringRes resId: Int, crossinline block: TabLayout.Tab.() -> Unit = {}) =
addTab(context.getString(resId), block)

inline fun TabLayout.addTab(text: String? = null, block: TabLayout.Tab.() -> Unit = {}) =
inline fun TabLayout.addTab(text: String? = null, crossinline block: TabLayout.Tab.() -> Unit = {}) =
addTab(newTab().apply { this.text = text }.apply(block))

inline fun TabLayout.doOnTabSelected(crossinline block: (TabLayout.Tab) -> Unit) =
Expand Down
25 changes: 25 additions & 0 deletions longan/src/androidTest/java/com/dylanc/longan/StringTest.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
package com.dylanc.longan

import org.junit.Assert
import org.junit.Test

/**
* @author Dylan Cai
*/
class StringTest {

@Test
fun isPhone() {
Assert.assertTrue("13888888888".isPhone())
}

@Test
fun isEmail() {
Assert.assertTrue("dylancai@qq.com".isEmail())
}

@Test
fun isIDCard18() {
Assert.assertTrue("440881199901014554".isIDCard18())
}
}
12 changes: 6 additions & 6 deletions longan/src/main/java/com/dylanc/longan/Activity.kt
Original file line number Diff line number Diff line change
Expand Up @@ -91,13 +91,13 @@ fun finishAllActivitiesExceptNewest(): Boolean =
}
}

inline fun ComponentActivity.pressBackTwiceToExit(toastText: String, delayMillis: Long = 2000) =
pressBackTwiceToExit(delayMillis) { toast(toastText) }
inline fun ComponentActivity.pressBackTwiceToExitApp(toastText: String, delayMillis: Long = 2000) =
pressBackTwiceToExitApp(delayMillis) { toast(toastText) }

inline fun ComponentActivity.pressBackTwiceToExit(@StringRes toastText: Int, delayMillis: Long = 2000) =
pressBackTwiceToExit(delayMillis) { toast(toastText) }
inline fun ComponentActivity.pressBackTwiceToExitApp(@StringRes toastText: Int, delayMillis: Long = 2000) =
pressBackTwiceToExitApp(delayMillis) { toast(toastText) }

inline fun ComponentActivity.pressBackTwiceToExit(delayMillis: Long = 2000, crossinline onFirstBackPressed: () -> Unit) {
inline fun ComponentActivity.pressBackTwiceToExitApp(delayMillis: Long = 2000, crossinline onFirstBackPressed: () -> Unit) {
onBackPressedDispatcher.addCallback(this, object : OnBackPressedCallback(true) {
private var lastBackTime: Long = 0

Expand All @@ -113,7 +113,7 @@ inline fun ComponentActivity.pressBackTwiceToExit(delayMillis: Long = 2000, cros
})
}

inline fun ComponentActivity.pressBackToNotExit() {
inline fun ComponentActivity.pressBackToNotExitApp() {
onBackPressedDispatcher.addCallback(this, object : OnBackPressedCallback(true) {
override fun handleOnBackPressed() {
moveTaskToBack(false)
Expand Down
1 change: 0 additions & 1 deletion longan/src/main/java/com/dylanc/longan/ContentResolver.kt
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,6 @@ import android.content.ContentValues
import android.database.Cursor
import android.net.Uri
import android.os.Build
import android.provider.MediaStore
import androidx.annotation.RequiresApi
import androidx.annotation.RequiresPermission

Expand Down
36 changes: 0 additions & 36 deletions longan/src/main/java/com/dylanc/longan/Json.kt

This file was deleted.

10 changes: 6 additions & 4 deletions longan/src/main/java/com/dylanc/longan/MultiLanguage.kt
Original file line number Diff line number Diff line change
Expand Up @@ -76,10 +76,6 @@ private object LanguageManager {
private const val KEY_COUNTRY = "longan_country"
private val sharedPreferences: SharedPreferences =
application.getSharedPreferences("${packageName}_preferences", Context.MODE_PRIVATE)
private val language: String?
get() = sharedPreferences.getString(KEY_LANGUAGE, null)
private val country: String?
get() = sharedPreferences.getString(KEY_COUNTRY, null)

var appLanguage: Locale
get() = language?.let { Locale(it, country.orEmpty()) } ?: systemLanguage
Expand All @@ -96,4 +92,10 @@ private object LanguageManager {
remove(KEY_COUNTRY)
}
}

private val language: String?
get() = sharedPreferences.getString(KEY_LANGUAGE, null)

private val country: String?
get() = sharedPreferences.getString(KEY_COUNTRY, null)
}
31 changes: 15 additions & 16 deletions longan/src/main/java/com/dylanc/longan/Network.kt
Original file line number Diff line number Diff line change
Expand Up @@ -34,16 +34,16 @@ import androidx.lifecycle.LiveData
* @author Dylan Cai
*/

@Suppress("DEPRECATION")
@get:RequiresPermission(ACCESS_NETWORK_STATE)
inline val isNetworkAvailable: Boolean
get() {
val connectivityManager = application.getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager
val connectivityManager = application.getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager
return if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
connectivityManager.getNetworkCapabilities(connectivityManager.activeNetwork)?.run {
hasCapability(NET_CAPABILITY_INTERNET) && hasCapability(NET_CAPABILITY_VALIDATED)
}
} else {
@Suppress("DEPRECATION")
connectivityManager.activeNetworkInfo?.isConnectedOrConnecting
} ?: false
}
Expand Down Expand Up @@ -76,25 +76,24 @@ class NetworkAvailableLiveData @RequiresPermission(ACCESS_NETWORK_STATE) constru
.build()
}

private val networkCallback by lazy {
object : ConnectivityManager.NetworkCallback() {
override fun onAvailable(network: Network) {
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.M) {
postValue(true)
}
private val networkCallback = object : ConnectivityManager.NetworkCallback() {
override fun onAvailable(network: Network) {
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.M) {
postValue(true)
}
}

override fun onCapabilitiesChanged(network: Network, networkCapabilities: NetworkCapabilities) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
networkCapabilities.run {
postValue(hasCapability(NET_CAPABILITY_INTERNET) && hasCapability(NET_CAPABILITY_VALIDATED))
}
override fun onCapabilitiesChanged(network: Network, networkCapabilities: NetworkCapabilities) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
networkCapabilities.run {
postValue(hasCapability(NET_CAPABILITY_INTERNET) && hasCapability(NET_CAPABILITY_VALIDATED))
}
}
}

override fun onLost(network: Network) {
postValue(false)
}
override fun onLost(network: Network) {
postValue(false)
}
}

}
2 changes: 1 addition & 1 deletion longan/src/main/java/com/dylanc/longan/PdfDocument.kt
Original file line number Diff line number Diff line change
Expand Up @@ -57,7 +57,7 @@ fun List<Bitmap>.toPdfDoc(pageWidth: Int, pageHeight: Int): PdfDocument =
}
}

fun PdfDocument.writeTo(file: File) {
inline fun PdfDocument.writeTo(file: File) {
FileOutputStream(file).use {
writeTo(it)
}
Expand Down
2 changes: 1 addition & 1 deletion longan/src/main/java/com/dylanc/longan/Share.kt
Original file line number Diff line number Diff line change
Expand Up @@ -65,5 +65,5 @@ inline fun shareFiles(uris: List<Uri>, title: String? = null, mimeType: String?
}
}

inline fun share(mimeType: String, block: ShareCompat.IntentBuilder.() -> Unit) =
inline fun share(mimeType: String,crossinline block: ShareCompat.IntentBuilder.() -> Unit) =
ShareCompat.IntentBuilder(topActivity).apply { setType(mimeType) }.apply(block).startChooser()
9 changes: 9 additions & 0 deletions longan/src/main/java/com/dylanc/longan/String.kt
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@ package com.dylanc.longan
import android.text.format.Formatter
import android.util.Patterns
import androidx.core.util.PatternsCompat
import org.json.JSONObject
import java.util.*

/**
Expand Down Expand Up @@ -68,3 +69,11 @@ inline fun String.isIDCard15(): Boolean =

inline fun String.isIDCard18(): Boolean =
REGEX_ID_CARD_18.toRegex().matches(this)

inline fun String.isJson(): Boolean =
try {
JSONObject(this)
true
} catch (e: Exception) {
false
}
11 changes: 5 additions & 6 deletions longan/src/main/java/com/dylanc/longan/Uri.kt
Original file line number Diff line number Diff line change
Expand Up @@ -40,17 +40,17 @@ import java.io.OutputStream

lateinit var fileProviderAuthority: String

val EXTERNAL_MEDIA_IMAGES_URI: Uri
inline val EXTERNAL_MEDIA_IMAGES_URI: Uri
get() = MediaStore.Images.Media.EXTERNAL_CONTENT_URI

val EXTERNAL_MEDIA_VIDEO_URI: Uri
inline val EXTERNAL_MEDIA_VIDEO_URI: Uri
get() = MediaStore.Video.Media.EXTERNAL_CONTENT_URI

val EXTERNAL_MEDIA_AUDIO_URI: Uri
inline val EXTERNAL_MEDIA_AUDIO_URI: Uri
get() = MediaStore.Audio.Media.EXTERNAL_CONTENT_URI

@get:RequiresApi(Build.VERSION_CODES.Q)
val EXTERNAL_MEDIA_DOWNLOADS_URI: Uri
inline val EXTERNAL_MEDIA_DOWNLOADS_URI: Uri
get() = MediaStore.Downloads.EXTERNAL_CONTENT_URI

inline fun File.toUri(authority: String = fileProviderAuthority): Uri =
Expand All @@ -72,8 +72,7 @@ fun Uri.delete(launcher: ActivityResultLauncher<IntentSenderRequest>): Boolean =
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.Q) {
val projection = arrayOf(MediaStore.MediaColumns.DATA)
contentResolver.queryFirst(this, projection) { cursor ->
val file = File(cursor.getString(cursor.getColumnIndex(MediaStore.MediaColumns.DATA)))
file.delete()
File(cursor.getString(cursor.getColumnIndex(MediaStore.MediaColumns.DATA))).delete()
} ?: false
} else {
try {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ import com.dylanc.longan.design.multiChoiceSelector
import com.dylanc.longan.design.selector
import com.dylanc.longan.design.singleChoiceSelector
import com.dylanc.longan.immerseStatusBar
import com.dylanc.longan.pressBackTwiceToExit
import com.dylanc.longan.pressBackTwiceToExitApp
import com.dylanc.longan.sample.R
import com.dylanc.longan.sample.adapter.TextAdapter
import com.dylanc.longan.sample.databinding.ActivityMainBinding
Expand All @@ -33,7 +33,7 @@ class MainActivity : AppCompatActivity() {
recyclerView.adapter = adapter
adapter.submitList(items)
}
pressBackTwiceToExit("再次点击退出应用")
pressBackTwiceToExitApp("再次点击退出应用")
}

private fun onItemClick(id: Int) {
Expand Down

0 comments on commit fdaab6e

Please sign in to comment.