Thư viện được tạo ra để chứa các thư viện cần thiết nhất và các phần mở rộng cần thiết nhất của 1 ứng dụng
Step 1. Add the JitPack repository to your build file Add it in your root build.gradle at the end of repositories:
dependencyResolutionManagement {
repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)
repositories {
mavenCentral()
maven { url 'https://jitpack.io' }
}
}
Step 2. Add the dependency
dependencies {
implementation 'com.github.vtabk2:GsCore:1.0.9'
}
- Đọc string từ fileName
val textFromAsset = context.assets.getTextFromAsset("fileName")
- Lấy bitmap từ assets
val bitmapFromAsset = context.assets.getBitmapFromAsset("fileName")
- Kiểm tra trạng thái thay đổi kết nối mạng (khi tắt, bật mạng)
val liveDataNetworkStatus by lazy { LiveDataNetworkStatus(context) }
viewModel.liveDataNetworkStatus.observe(this) { connect ->
if (connect) {
reloadDataAfterConnect()
}
}
- Kiểm tra có bật kết nối mạng (bật wifi hoặc dùng mạng điện thoại 3G, 4G, 5G...), không kiểm tra được kết nối có mạng hay không!
val isInternetAvailable = NetworkUtils.isInternetAvailable(context)
isInternetAvailable = true -> bật mạng
isInternetAvailable = false -> tắt mạng
- Kiểm tra kết nối có mạng hay không gồm kiểm tra bật tắt mạng và kiểm tra thử xem có mạng hay không bằng cách ping thử
NetworkUtils.hasInternetAccessCheck(
doTask = {
},
doException = { networkError ->
},
context = context,
timeout = DEFAULT_TIMEOUT_MS,
maxRetries = maxRetries,
enableDebounce = enableDebounce
)
maxRetries số lần thử lại (mặc định là 1)
enableDebounce có kiểm tra liên tiếp không (tránh trường hợp gọi liên tục không có thời giữa các lần gọi)
- Hủy tất cả kiểm tra kết nối
NetworkUtils.cancelAllRequests()
Được tạo ra để quản lý việc tải dữ liệu có cấu hình thời gian chờ kết nối tải
- Đăng ký cấu hình PRDownloader (thường khởi tạo ở Application)
GsDownloadManager.instance.register(context = this)
- Cấu hình tải dữ liệu
fun download() {
val context = getApplication<Application>()
val folder = context.getExternalFilesDir("download")
folder?.let {
if (!it.exists()) {
it.mkdirs()
}
}
val file = File(folder, "apk")
if (!file.exists()) {
file.mkdirs()
}
GsDownloadManager.instance.download(
context = context,
url = "https://d-04.winudf.com/b/XAPK/Y29tLmhpZ2hzZWN1cmUucGhvdG9mcmFtZV8yMjhfYTllY2EwZTM?_fn=UGhvdG8gRnJhbWUgLSBQaG90byBDb2xsYWdlXzUuMy41X0FQS1B1cmUueGFwaw&_p=Y29tLmhpZ2hzZWN1cmUucGhvdG9mcmFtZQ%3D%3D&download_id=1359001696225752&is_hot=false&k=c5066d6130cee63cb7aad5e0f1197cb5680c4643",
dirPath = file.absolutePath,
fileName = "Photo Frame - Photo Collage_5.3.5_APKPure.xapk",
callbackProgress = { progress ->
progressLiveData.postValue(progress.toInt())
},
callbackDownload = { downloadResult ->
downloadStatusLiveData.postValue(downloadResult.downloadStatus)
},
onDownloadId = { downloadId ->
this.downloadId = downloadId
},
timeoutConnect = 15_000
)
}
- Hủy tải theo id
GsDownloadManager.instance.cancel(downloadId)
- Hủy tải tất cả
GsDownloadManager.instance.cancelAll()
Kiểm tra lifecycleScope hiện tại trạng thái resume không thì mới thực hiện chức năng (tránh trường hợp bị hủy trước khi vào gây ra crash)
launchWhenResumed {
// todo
}
Hourglass dùng để đếm ngược có tính năng tạm dừng bộ đếm thời gian.
- Khởi tạo
timerDelay = object : Hourglass(4000, 500) {
override fun onTimerTick(timeRemaining: Long) {
// nothing
}
override fun onTimerFinish() {
}
}
- Phương pháp để quản lý bộ đếm thời gian
timerDelay?.startTimer()
timerDelay?.pauseTimer()
timerDelay?.resumeTimer()
timerDelay?.stopTimer()
Thay đổi kích thước
-
widthToHeight
dựa vào chiều cao để tính chiều rộng theo -
heightToWidth
dựa vào chiều rộng để tính chiều cao theo
<com.core.gscore.view.AspectRatioLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/arlRoot"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginHorizontal="5dp"
android:layout_marginVertical="5dp"
android:background="@drawable/selector_background_item_font"
app:heightToWidth="0.25">
</com.core.gscore.view.AspectRatioLayout>
- Trong code có thể thay đổi thủ công
ratioLayout.widthToHeight = width.toFloat() / height
Tích hợp sẵn thư viện PRDownloader vào sẵn và muốn dùng thì thường dùng qua GsDownloadManager
Version 1.0.9
- Sửa lỗi
getBitmapFromAsset
không tải được ảnh
Version 1.0.8
- Cải tiến
getBitmapFromAsset
để hạn chế tràn bộ nhớ và có thể dựa vào kích thước ảnh cần lấy ra
👉 Click để xem thêm lịch sử cập nhật
Version 1.0.7
- Thêm extension
getBitmapFromAsset
,getTextFromAsset
context.assets.getTextFromAsset("fileName")
context.assets.getBitmapFromAsset("fileName")
Version 1.0.6
- Thêm extensions readTextAsset chuyên để đọc text từ fileName
context.assets.readTextAsset("fileName")
- Sửa lại GsDownloadManager để có thể trả ra downloadId
Version 1.0.5
- Thêm DownloadStatus quản lý trạng thái tải
- Đổi DownloadResult giờ sẽ chứa đường dẫn và trạng thái tải
- Sửa lại GsDownloadManager để trạng thái tải về chuẩn hơn
GsDownloadManager.instance.download(
context = context,
url = "https://d-03.winudf.com/b/XAPK/Y29tLmhpZ2hzZWN1cmUucGhvdG9mcmFtZV8yMjNfZWJkODczZjY?_fn=UGhvdG8gRnJhbWUgLSBQaG90byBDb2xsYWdlXzUuMy4wX0FQS1B1cmUueGFwaw&_p=Y29tLmhpZ2hzZWN1cmUucGhvdG9mcmFtZQ%3D%3D&download_id=1532602232310734&is_hot=false&k=4aa66749721463730e40d47c48a0876067fe1c76",
dirPath = file.absolutePath,
fileName = "Photo Frame - Photo Collage_5.3.0_APKPure.xapk",
callbackProgress = { progress ->
progressLiveData.postValue(progress.toInt())
},
callbackDownload = { downloadResult ->
downloadStatusLiveData.postValue(downloadResult.downloadStatus)
}
)
Version 1.0.4
- Thêm GsDownloadManager quản lý download có thời gian chờ
fun download() {
val context = getApplication<Application>()
val folder = context.getExternalFilesDir("download")
folder?.let {
if (!it.exists()) {
it.mkdirs()
}
}
val file = File(folder, "apk")
if (!file.exists()) {
file.mkdirs()
}
GsDownloadManager.instance.download(
context = context,
url = "https://d-03.winudf.com/b/XAPK/Y29tLmhpZ2hzZWN1cmUucGhvdG9mcmFtZV8yMjNfZWJkODczZjY?_fn=UGhvdG8gRnJhbWUgLSBQaG90byBDb2xsYWdlXzUuMy4wX0FQS1B1cmUueGFwaw&_p=Y29tLmhpZ2hzZWN1cmUucGhvdG9mcmFtZQ%3D%3D&download_id=1532602232310734&is_hot=false&k=4aa66749721463730e40d47c48a0876067fe1c76",
dirPath = file.absolutePath,
fileName = "Photo Frame - Photo Collage_5.3.0_APKPure.xapk",
callbackProgress = { progress ->
progressLiveData.postValue(progress)
},
callbackDownload = { path, downloadResult: DownloadResult ->
}
)
}
- Đẩy PRDownloader vào GsCore
Version 1.0.3
- Thêm Hourglass
- Sửa lại NetworkUtils
- Thêm check lại ở hàm hasInternetAccessCheck()
- Thêm maxRetries giới hạn số lần thử lại
- Thêm enableDebounce kích hoạt chặn gọi liên tục
- Thêm cancelAllRequests hủy tất cả(khi activity destroy)
lifecycleScope.launch(Dispatchers.IO) {
for (i in 0..100) {
Log.d("GsDownloadManager", "MainActivity_onCreate: i = $i")
NetworkUtils.hasInternetAccessCheck(
doTask = {
Log.d("GsDownloadManager", "MainActivity_onCreate: SUCCESS")
}, doException = { networkError ->
Log.d("GsDownloadManager", "MainActivity_onCreate: networkError = " + networkError.name)
}, context = this@MainActivity, maxRetries = 3
)
delay(500)
}
}