11package com.lazygeniouz.filecompat.example
22
33import android.annotation.SuppressLint
4+ import android.app.AlertDialog
45import android.content.Intent
56import android.os.Build.VERSION.SDK_INT
67import android.os.Bundle
78import android.os.storage.StorageManager
9+ import android.view.Menu
10+ import android.view.MenuItem
811import android.widget.Button
912import android.widget.ProgressBar
1013import android.widget.TextView
@@ -22,10 +25,40 @@ class MainActivity : AppCompatActivity(R.layout.activity_main) {
2225
2326 private lateinit var buttonDir: Button
2427 private lateinit var buttonFile: Button
28+ private lateinit var buttonProjections: Button
2529
2630 private lateinit var textView: TextView
2731 private lateinit var progress: ProgressBar
2832
33+ private var selectedFileCount = 250
34+
35+ private val testFileGenerationLauncher =
36+ registerForActivityResult(ActivityResultContracts .StartActivityForResult ()) { result ->
37+ if (result.resultCode == RESULT_OK ) {
38+ val documentUri = result.data?.data
39+ if (documentUri != null ) {
40+ textView.text = getString(R .string.creating_files)
41+
42+ lifecycleScope.launch {
43+ progress.isVisible = true
44+ buttonDir.isVisible = false
45+ buttonFile.isVisible = false
46+ buttonProjections.isVisible = false
47+
48+ val generationResult = TestFileGenerator .generateTestFiles(
49+ this @MainActivity, documentUri, selectedFileCount
50+ )
51+
52+ progress.isVisible = false
53+ buttonDir.isVisible = true
54+ buttonFile.isVisible = true
55+ buttonProjections.isVisible = true
56+ textView.text = generationResult
57+ }
58+ }
59+ }
60+ }
61+
2962 private val folderResultLauncher =
3063 registerForActivityResult(ActivityResultContracts .StartActivityForResult ()) { result ->
3164 if (result.resultCode == RESULT_OK ) {
@@ -37,6 +70,7 @@ class MainActivity : AppCompatActivity(R.layout.activity_main) {
3770 progress.isVisible = true
3871 buttonDir.isVisible = false
3972 buttonFile.isVisible = false
73+ buttonProjections.isVisible = false
4074 val performanceResult = withContext(Dispatchers .IO ) {
4175 Performance .calculateDirectoryPerformance(
4276 this @MainActivity, documentUri
@@ -46,6 +80,7 @@ class MainActivity : AppCompatActivity(R.layout.activity_main) {
4680 progress.isVisible = false
4781 buttonDir.isVisible = true
4882 buttonFile.isVisible = true
83+ buttonProjections.isVisible = true
4984 textView.text = performanceResult
5085 }
5186 }
@@ -73,11 +108,41 @@ class MainActivity : AppCompatActivity(R.layout.activity_main) {
73108 }
74109 }
75110
111+ private val projectionResultLauncher =
112+ registerForActivityResult(ActivityResultContracts .StartActivityForResult ()) { result ->
113+ if (result.resultCode == RESULT_OK ) {
114+ val documentUri = result.data?.data
115+ if (documentUri != null ) {
116+ textView.text = " "
117+
118+ lifecycleScope.launch {
119+ progress.isVisible = true
120+ buttonDir.isVisible = false
121+ buttonFile.isVisible = false
122+ buttonProjections.isVisible = false
123+
124+ val performanceResult = withContext(Dispatchers .IO ) {
125+ Performance .calculateProjectionPerformance(
126+ this @MainActivity, documentUri
127+ )
128+ }
129+
130+ progress.isVisible = false
131+ buttonDir.isVisible = true
132+ buttonFile.isVisible = true
133+ buttonProjections.isVisible = true
134+ textView.text = performanceResult
135+ }
136+ }
137+ }
138+ }
139+
76140 override fun onCreate (savedInstanceState : Bundle ? ) {
77141 super .onCreate(savedInstanceState)
78142
79143 buttonDir = findViewById(R .id.buttonDir)
80144 buttonFile = findViewById(R .id.buttonFile)
145+ buttonProjections = findViewById(R .id.buttonProjections)
81146 textView = findViewById(R .id.fileNames)
82147 progress = findViewById(R .id.progress)
83148
@@ -90,6 +155,39 @@ class MainActivity : AppCompatActivity(R.layout.activity_main) {
90155 buttonFile.setOnClickListener {
91156 fileResultLauncher.launch(getStorageIntent(true ))
92157 }
158+
159+ buttonProjections.setOnClickListener {
160+ projectionResultLauncher.launch(getStorageIntent())
161+ }
162+ }
163+
164+ override fun onCreateOptionsMenu (menu : Menu ): Boolean {
165+ menuInflater.inflate(R .menu.main_menu, menu)
166+ return true
167+ }
168+
169+ override fun onOptionsItemSelected (item : MenuItem ): Boolean {
170+ return when (item.itemId) {
171+ R .id.menu_add_test_files -> {
172+ showFileCountDialog()
173+ true
174+ }
175+
176+ else -> super .onOptionsItemSelected(item)
177+ }
178+ }
179+
180+ private fun showFileCountDialog () {
181+ val options = arrayOf(" 250 files" , " 500 files" , " 1000 files" )
182+ val counts = arrayOf(250 , 500 , 1000 )
183+
184+ AlertDialog .Builder (this )
185+ .setTitle(R .string.select_file_count)
186+ .setItems(options) { _, which ->
187+ selectedFileCount = counts[which]
188+ testFileGenerationLauncher.launch(getStorageIntent())
189+ }
190+ .show()
93191 }
94192
95193 private fun getStorageIntent (single : Boolean = false): Intent {
0 commit comments