Skip to content

Commit

Permalink
Migrated to ViewBinding
Browse files Browse the repository at this point in the history
  • Loading branch information
anggrayudi committed Dec 22, 2022
1 parent d9a8811 commit 2193126
Show file tree
Hide file tree
Showing 11 changed files with 153 additions and 137 deletions.
2 changes: 1 addition & 1 deletion .github/ISSUE_TEMPLATE/bug_report.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ assignees: ''

---

Library version: 0.x.x
Library version: 1.x.x
OS version: [Android 10]
Device model: [Samsung S20]

Expand Down
5 changes: 4 additions & 1 deletion sample/build.gradle
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
apply plugin: 'com.android.application'
apply plugin: 'kotlin-android'
apply plugin: 'kotlin-android-extensions'

def properties = new Properties()
properties.load(rootProject.file('local.properties').newDataInputStream())
Expand Down Expand Up @@ -53,6 +52,10 @@ android {
abortOnError false
}

buildFeatures {
viewBinding = true
}

flavorDimensions "libSource"
productFlavors {
local {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,17 +1,15 @@
package com.anggrayudi.storage.sample.activity

import android.os.Bundle
import android.view.View
import android.widget.TextView
import android.widget.Toast
import androidx.documentfile.provider.DocumentFile
import com.anggrayudi.storage.callback.ZipCompressionCallback
import com.anggrayudi.storage.file.MimeType
import com.anggrayudi.storage.file.compressToZip
import com.anggrayudi.storage.file.fullName
import com.anggrayudi.storage.file.getAbsolutePath
import com.anggrayudi.storage.sample.R
import kotlinx.android.synthetic.main.activity_file_compression.*
import kotlinx.android.synthetic.main.view_file_picked.view.*
import com.anggrayudi.storage.sample.databinding.ActivityFileCompressionBinding
import kotlinx.coroutines.launch
import timber.log.Timber

Expand All @@ -21,71 +19,75 @@ import timber.log.Timber
*/
class FileCompressionActivity : BaseActivity() {

private lateinit var binding: ActivityFileCompressionBinding

override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_file_compression)
binding = ActivityFileCompressionBinding.inflate(layoutInflater)
setContentView(binding.root)

setupSimpleStorage()
btnStartCompress.setOnClickListener { startCompress() }
binding.btnStartCompress.setOnClickListener { startCompress() }
}

private fun setupSimpleStorage() {
storageHelper.onFileCreated = { _, file ->
layoutCompressFiles_destZipFile.updateFileSelectionView(file)
binding.layoutCompressFilesDestZipFile.tvFilePath.updateFileSelectionView(file)
}
layoutCompressFiles_destZipFile.btnBrowse.setOnClickListener {
binding.layoutCompressFilesDestZipFile.btnBrowse.setOnClickListener {
storageHelper.createFile(MimeType.ZIP, "Test compress")
}

storageHelper.onFileSelected = { requestCode, files ->
when (requestCode) {
REQUEST_CODE_PICK_MEDIA_1 -> layoutCompressFiles_srcMedia1.updateFileSelectionView(files)
REQUEST_CODE_PICK_MEDIA_2 -> layoutCompressFiles_srcMedia2.updateFileSelectionView(files)
REQUEST_CODE_PICK_MEDIA_1 -> binding.layoutCompressFilesSrcMedia1.tvFilePath.updateFileSelectionView(files)
REQUEST_CODE_PICK_MEDIA_2 -> binding.layoutCompressFilesSrcMedia2.tvFilePath.updateFileSelectionView(files)
}
}
layoutCompressFiles_srcMedia1.btnBrowse.setOnClickListener {
binding.layoutCompressFilesSrcMedia1.btnBrowse.setOnClickListener {
storageHelper.openFilePicker(REQUEST_CODE_PICK_MEDIA_1, true)
}
layoutCompressFiles_srcMedia2.btnBrowse.setOnClickListener {
binding.layoutCompressFilesSrcMedia2.btnBrowse.setOnClickListener {
storageHelper.openFilePicker(REQUEST_CODE_PICK_MEDIA_2, true)
}

storageHelper.onFolderSelected = { requestCode, folder ->
when (requestCode) {
REQUEST_CODE_PICK_FOLDER_1 -> layoutCompressFiles_srcFolder1.updateFileSelectionView(folder)
REQUEST_CODE_PICK_FOLDER_2 -> layoutCompressFiles_srcFolder2.updateFileSelectionView(folder)
REQUEST_CODE_PICK_FOLDER_1 -> binding.layoutCompressFilesSrcFolder1.tvFilePath.updateFileSelectionView(folder)
REQUEST_CODE_PICK_FOLDER_2 -> binding.layoutCompressFilesSrcFolder2.tvFilePath.updateFileSelectionView(folder)
}
}
layoutCompressFiles_srcFolder1.btnBrowse.setOnClickListener {
binding.layoutCompressFilesSrcFolder1.btnBrowse.setOnClickListener {
storageHelper.openFolderPicker(REQUEST_CODE_PICK_FOLDER_1)
}
layoutCompressFiles_srcFolder2.btnBrowse.setOnClickListener {
binding.layoutCompressFilesSrcFolder2.btnBrowse.setOnClickListener {
storageHelper.openFolderPicker(REQUEST_CODE_PICK_FOLDER_2)
}
}

private fun View.updateFileSelectionView(files: List<DocumentFile>) {
private fun TextView.updateFileSelectionView(files: List<DocumentFile>) {
tag = files
tvFilePath.text = files.joinToString(", ") { it.fullName }
text = files.joinToString(", ") { it.fullName }
}

private fun View.updateFileSelectionView(file: DocumentFile) {
private fun TextView.updateFileSelectionView(file: DocumentFile) {
tag = file
tvFilePath.text = file.getAbsolutePath(context)
text = file.getAbsolutePath(context)
}

@Suppress("UNCHECKED_CAST")
private fun startCompress() {
val targetZip = layoutCompressFiles_destZipFile.tag as? DocumentFile
val targetZip = binding.layoutCompressFilesDestZipFile.tvFilePath.tag as? DocumentFile
if (targetZip == null) {
Toast.makeText(this, "Please select destination ZIP file", Toast.LENGTH_SHORT).show()
return
}

val files = mutableListOf<DocumentFile>()
(layoutCompressFiles_srcMedia1.tag as? List<DocumentFile>)?.let { files.addAll(it) }
(layoutCompressFiles_srcMedia2.tag as? List<DocumentFile>)?.let { files.addAll(it) }
(layoutCompressFiles_srcFolder1.tag as? DocumentFile)?.let { files.add(it) }
(layoutCompressFiles_srcFolder2.tag as? DocumentFile)?.let { files.add(it) }
(binding.layoutCompressFilesSrcMedia1.tvFilePath.tag as? List<DocumentFile>)?.let { files.addAll(it) }
(binding.layoutCompressFilesSrcMedia2.tvFilePath.tag as? List<DocumentFile>)?.let { files.addAll(it) }
(binding.layoutCompressFilesSrcFolder1.tvFilePath.tag as? DocumentFile)?.let { files.add(it) }
(binding.layoutCompressFilesSrcFolder2.tvFilePath.tag as? DocumentFile)?.let { files.add(it) }

ioScope.launch {
files.compressToZip(applicationContext, targetZip, callback = object : ZipCompressionCallback<DocumentFile>(uiScope) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,9 +12,7 @@ import com.anggrayudi.storage.file.MimeType
import com.anggrayudi.storage.file.decompressZip
import com.anggrayudi.storage.file.fullName
import com.anggrayudi.storage.file.getAbsolutePath
import com.anggrayudi.storage.sample.R
import kotlinx.android.synthetic.main.activity_file_decompression.*
import kotlinx.android.synthetic.main.view_file_picked.view.*
import com.anggrayudi.storage.sample.databinding.ActivityFileDecompressionBinding
import kotlinx.coroutines.launch

/**
Expand All @@ -23,43 +21,47 @@ import kotlinx.coroutines.launch
*/
class FileDecompressionActivity : BaseActivity() {

private lateinit var binding: ActivityFileDecompressionBinding

override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_file_decompression)
binding = ActivityFileDecompressionBinding.inflate(layoutInflater)
setContentView(binding.root)

setupSimpleStorage()
btnStartDecompress.setOnClickListener { startDecompress() }
binding.btnStartDecompress.setOnClickListener { startDecompress() }
}

private fun setupSimpleStorage() {
storageHelper.onFileSelected = { _, files ->
val file = files.first()
layoutDecompressFile_srcZip.run {
binding.layoutDecompressFileSrcZip.tvFilePath.run {
tag = file
tvFilePath.text = file.fullName
text = file.fullName
}
}
layoutDecompressFile_srcZip.btnBrowse.setOnClickListener {
binding.layoutDecompressFileSrcZip.btnBrowse.setOnClickListener {
storageHelper.openFilePicker(filterMimeTypes = arrayOf(MimeType.ZIP))
}

storageHelper.onFolderSelected = { _, folder ->
layoutDecompressFile_destFolder.run {
binding.layoutDecompressFileDestFolder.tvFilePath.run {
tag = folder
tvFilePath.text = folder.getAbsolutePath(context)
text = folder.getAbsolutePath(context)
}
}
layoutDecompressFile_destFolder.btnBrowse.setOnClickListener {
binding.layoutDecompressFileDestFolder.btnBrowse.setOnClickListener {
storageHelper.openFolderPicker()
}
}

private fun startDecompress() {
val zipFile = layoutDecompressFile_srcZip.tag as? DocumentFile
val zipFile = binding.layoutDecompressFileSrcZip.tvFilePath.tag as? DocumentFile
if (zipFile == null) {
Toast.makeText(this, "Please select source ZIP file", Toast.LENGTH_SHORT).show()
return
}
val targetFolder = layoutDecompressFile_destFolder.tag as? DocumentFile
val targetFolder = binding.layoutDecompressFileDestFolder.tvFilePath.tag as? DocumentFile
if (targetFolder == null) {
Toast.makeText(this, "Please select destination folder", Toast.LENGTH_SHORT).show()
return
Expand Down
Loading

0 comments on commit 2193126

Please sign in to comment.