Skip to content

Commit 67c3eb3

Browse files
fix
1 parent a4d1b9e commit 67c3eb3

4 files changed

Lines changed: 135 additions & 31 deletions

File tree

‎app/src/foss/java/com/wirelessalien/android/moviedb/activity/ImportActivity.kt‎

Lines changed: 46 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,13 @@ import android.content.Context
2323
import android.content.Intent
2424
import android.net.Uri
2525
import android.os.Bundle
26+
27+
import androidx.lifecycle.lifecycleScope
28+
import com.google.android.material.dialog.MaterialAlertDialogBuilder
29+
import com.wirelessalien.android.moviedb.databinding.DialogProgressIndicatorBinding
30+
import com.wirelessalien.android.moviedb.helper.ConfigHelper
31+
import com.wirelessalien.android.moviedb.tmdb.GetTmdbDetailsSaved
32+
import kotlinx.coroutines.Job
2633
import android.provider.OpenableColumns
2734
import android.view.MenuItem
2835
import android.widget.Button
@@ -200,14 +207,7 @@ class ImportActivity : AppCompatActivity(), AdapterDataChangedListener {
200207

201208
withContext(Dispatchers.Main) {
202209
progressIndicator.visibility = View.GONE
203-
Snackbar.make(findViewById(android.R.id.content), getString(R.string.database_import_successful), Snackbar.LENGTH_INDEFINITE)
204-
.setAction(getString(R.string.ok)) {
205-
finishAffinity()
206-
val intent = Intent(this@ImportActivity, MainActivity::class.java)
207-
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
208-
startActivity(intent)
209-
}
210-
.show()
210+
fetchEpisodeDataAfterImport()
211211
}
212212
} else {
213213
withContext(Dispatchers.Main) {
@@ -266,6 +266,43 @@ class ImportActivity : AppCompatActivity(), AdapterDataChangedListener {
266266
}
267267

268268
override fun onAdapterDataChangedListener() {
269-
// Do nothing
269+
fetchEpisodeDataAfterImport()
270+
}
271+
272+
private fun fetchEpisodeDataAfterImport() {
273+
val tmdbApiKey = ConfigHelper.getConfigValue(this, "api_key")
274+
val binding = DialogProgressIndicatorBinding.inflate(layoutInflater)
275+
276+
val tmdbDialog = MaterialAlertDialogBuilder(this)
277+
.setTitle(getString(R.string.fetching_episode_data))
278+
.setView(binding.root)
279+
.setCancelable(false)
280+
.setPositiveButton(getString(R.string.ok)) { dialog, _ ->
281+
finishAffinity()
282+
val intent = Intent(this@ImportActivity, MainActivity::class.java)
283+
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
284+
startActivity(intent)
285+
dialog.dismiss()
286+
}
287+
.show()
288+
289+
// Disable positive button initially
290+
val positiveButton = tmdbDialog.getButton(androidx.appcompat.app.AlertDialog.BUTTON_POSITIVE)
291+
positiveButton.isEnabled = false
292+
293+
lifecycleScope.launch {
294+
val getTmdbDetails = GetTmdbDetailsSaved(this@ImportActivity, tmdbApiKey ?: "")
295+
getTmdbDetails.fetchAndSaveTmdbDetails { showTitle, progress ->
296+
lifecycleScope.launch(Dispatchers.Main) {
297+
binding.progressText.text = getString(R.string.fetching_show_data, showTitle)
298+
binding.progressIndicator.progress = progress
299+
}
300+
}
301+
withContext(Dispatchers.Main) {
302+
binding.progressText.text = getString(R.string.database_import_successful)
303+
binding.progressIndicator.visibility = View.GONE
304+
positiveButton.isEnabled = true
305+
}
306+
}
270307
}
271308
}

‎app/src/full/java/com/wirelessalien/android/moviedb/activity/ImportActivity.kt‎

Lines changed: 47 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,13 @@ import android.content.Intent
2424
import android.content.IntentSender
2525
import android.net.Uri
2626
import android.os.Bundle
27+
28+
import androidx.lifecycle.lifecycleScope
29+
import com.google.android.material.dialog.MaterialAlertDialogBuilder
30+
import com.wirelessalien.android.moviedb.databinding.DialogProgressIndicatorBinding
31+
import com.wirelessalien.android.moviedb.helper.ConfigHelper
32+
import com.wirelessalien.android.moviedb.tmdb.GetTmdbDetailsSaved
33+
import kotlinx.coroutines.Job
2734
import android.provider.OpenableColumns
2835
import android.util.Log
2936
import android.view.MenuItem
@@ -228,14 +235,7 @@ class ImportActivity : AppCompatActivity(), AdapterDataChangedListener {
228235

229236
withContext(Dispatchers.Main) {
230237
binding.progressIndicator.visibility = View.GONE
231-
Snackbar.make(findViewById(android.R.id.content), getString(R.string.database_import_successful), Snackbar.LENGTH_INDEFINITE)
232-
.setAction(getString(R.string.ok)) {
233-
finishAffinity()
234-
val intent = Intent(this@ImportActivity, MainActivity::class.java)
235-
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
236-
startActivity(intent)
237-
}
238-
.show()
238+
fetchEpisodeDataAfterImport()
239239
}
240240
} else {
241241
withContext(Dispatchers.Main) {
@@ -353,14 +353,7 @@ class ImportActivity : AppCompatActivity(), AdapterDataChangedListener {
353353

354354
withContext(Dispatchers.Main) {
355355
binding.progressIndicator.visibility = View.GONE
356-
Snackbar.make(findViewById(android.R.id.content), getString(R.string.database_import_successful), Snackbar.LENGTH_INDEFINITE)
357-
.setAction(getString(R.string.ok)) {
358-
finishAffinity()
359-
val intent = Intent(this@ImportActivity, MainActivity::class.java)
360-
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
361-
startActivity(intent)
362-
}
363-
.show()
356+
fetchEpisodeDataAfterImport()
364357
}
365358
} else {
366359
withContext(Dispatchers.Main) {
@@ -419,6 +412,43 @@ class ImportActivity : AppCompatActivity(), AdapterDataChangedListener {
419412
}
420413

421414
override fun onAdapterDataChangedListener() {
422-
// Do nothing
415+
fetchEpisodeDataAfterImport()
416+
}
417+
418+
private fun fetchEpisodeDataAfterImport() {
419+
val tmdbApiKey = ConfigHelper.getConfigValue(this, "api_key")
420+
val binding = DialogProgressIndicatorBinding.inflate(layoutInflater)
421+
422+
val tmdbDialog = MaterialAlertDialogBuilder(this)
423+
.setTitle(getString(R.string.fetching_episode_data))
424+
.setView(binding.root)
425+
.setCancelable(false)
426+
.setPositiveButton(getString(R.string.ok)) { dialog, _ ->
427+
finishAffinity()
428+
val intent = Intent(this@ImportActivity, MainActivity::class.java)
429+
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
430+
startActivity(intent)
431+
dialog.dismiss()
432+
}
433+
.show()
434+
435+
// Disable positive button initially
436+
val positiveButton = tmdbDialog.getButton(androidx.appcompat.app.AlertDialog.BUTTON_POSITIVE)
437+
positiveButton.isEnabled = false
438+
439+
lifecycleScope.launch {
440+
val getTmdbDetails = GetTmdbDetailsSaved(this@ImportActivity, tmdbApiKey ?: "")
441+
getTmdbDetails.fetchAndSaveTmdbDetails { showTitle, progress ->
442+
lifecycleScope.launch(Dispatchers.Main) {
443+
binding.progressText.text = getString(R.string.fetching_show_data, showTitle)
444+
binding.progressIndicator.progress = progress
445+
}
446+
}
447+
withContext(Dispatchers.Main) {
448+
binding.progressText.text = getString(R.string.database_import_successful)
449+
binding.progressIndicator.visibility = View.GONE
450+
positiveButton.isEnabled = true
451+
}
452+
}
423453
}
424454
}

‎app/src/main/java/com/wirelessalien/android/moviedb/activity/YearWrappedActivity.kt‎

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -334,6 +334,15 @@ class YearWrappedActivity : AppCompatActivity() {
334334
val logoXOffset = (totalWidth - appLogoSize) / 2f
335335
appLogoDrawable.setBounds(0, 0, appLogoSize, appLogoSize)
336336
canvas.translate(logoXOffset, currentY)
337+
val path = android.graphics.Path().apply {
338+
addRoundRect(
339+
android.graphics.RectF(0f, 0f, appLogoSize.toFloat(), appLogoSize.toFloat()),
340+
16f,
341+
16f,
342+
android.graphics.Path.Direction.CW
343+
)
344+
}
345+
canvas.clipPath(path)
337346
appLogoDrawable.draw(canvas)
338347
canvas.restore()
339348
currentY += appLogoSize + paddingBetween / 2f

‎app/src/main/java/com/wirelessalien/android/moviedb/helper/MovieDatabaseHelper.kt‎

Lines changed: 33 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,8 @@ import android.view.LayoutInflater
3232
import android.widget.ArrayAdapter
3333
import android.widget.RadioGroup
3434
import android.widget.Toast
35+
import android.view.View
36+
import com.wirelessalien.android.moviedb.databinding.DialogProgressIndicatorBinding
3537
import androidx.core.view.isVisible
3638
import androidx.documentfile.provider.DocumentFile
3739
import com.google.android.material.chip.Chip
@@ -576,7 +578,7 @@ class MovieDatabaseHelper (context: Context?) : SQLiteOpenHelper(context, databa
576578
// Only show database and csv
577579
val name = pathname.name
578580
name.endsWith(".db") || name.endsWith(".csv")
579-
}
581+
} ?: emptyArray()
580582
val fileAdapter = ArrayAdapter<String>(context, android.R.layout.select_dialog_singlechoice)
581583
for (file in files) {
582584
fileAdapter.add(file.name)
@@ -593,6 +595,16 @@ class MovieDatabaseHelper (context: Context?) : SQLiteOpenHelper(context, databa
593595
if (exportDBPath == null) {
594596
Toast.makeText(context, context.resources.getString(R.string.file_not_found_exception), Toast.LENGTH_SHORT).show()
595597
} else if (fileAdapter.getItem(which)!!.endsWith(".db")) {
598+
599+
val binding = DialogProgressIndicatorBinding.inflate(LayoutInflater.from(context))
600+
binding.progressText.text = context.getString(R.string.importing)
601+
binding.progressIndicator.isIndeterminate = true
602+
603+
val progressDialog = MaterialAlertDialogBuilder(context)
604+
.setView(binding.root)
605+
.setCancelable(false)
606+
.show()
607+
596608
CoroutineScope(Dispatchers.IO).launch {
597609
try {
598610
// Import the file selected in the dialog.
@@ -605,35 +617,51 @@ class MovieDatabaseHelper (context: Context?) : SQLiteOpenHelper(context, databa
605617
src.close()
606618
dst.close()
607619
withContext(Dispatchers.Main) {
608-
Toast.makeText(context, R.string.database_import_successful, Toast.LENGTH_SHORT).show()
620+
progressDialog.dismiss()
621+
// Delegate to listener to handle success properly in activity
622+
listener.onAdapterDataChangedListener()
609623
}
610624
} catch (e: Exception) {
611625
e.printStackTrace()
626+
withContext(Dispatchers.Main) {
627+
progressDialog.dismiss()
628+
}
612629
}
613630
}
614631
} else if (fileAdapter.getItem(which)!!.endsWith(".csv")) {
632+
633+
val binding = DialogProgressIndicatorBinding.inflate(LayoutInflater.from(context))
634+
binding.progressText.text = context.getString(R.string.importing_csv_data)
635+
binding.progressIndicator.isIndeterminate = true
636+
637+
val progressDialog = MaterialAlertDialogBuilder(context)
638+
.setView(binding.root)
639+
.setCancelable(false)
640+
.show()
641+
615642
CoroutineScope(Dispatchers.IO).launch {
616643
try {
617644
val csvFile = File(path, fileAdapter.getItem(which)!!)
618645
val database = context.openOrCreateDatabase(databaseFileName, Context.MODE_PRIVATE, null)
619646
importCSVToDatabase(database, csvFile)
620647
withContext(Dispatchers.Main) {
621-
Toast.makeText(context, R.string.database_import_successful, Toast.LENGTH_SHORT).show()
648+
progressDialog.dismiss()
649+
// Delegate to listener to handle success properly in activity
650+
listener.onAdapterDataChangedListener()
622651
}
623652
} catch (e: Exception) {
624653
e.printStackTrace()
625654
withContext(Dispatchers.Main) {
655+
progressDialog.dismiss()
626656
Toast.makeText(context, R.string.database_not_imported, Toast.LENGTH_SHORT).show()
627657
}
628658
}
629-
listener.onAdapterDataChangedListener()
630659
}
631660
}
632661
} catch (npe: NullPointerException) {
633662
npe.printStackTrace()
634663
Toast.makeText(context, context.resources.getString(R.string.file_not_found_exception), Toast.LENGTH_SHORT).show()
635664
}
636-
listener.onAdapterDataChangedListener()
637665
}
638666
fileDialog.show()
639667
}

0 commit comments

Comments
 (0)