blob: 47961ca2646c1473bdeccc96f2aea861e2835a56 [file] [log] [blame]
package com.airbnb.lottie.samples
import android.Manifest
import android.app.Activity
import android.app.AlertDialog
import android.content.ActivityNotFoundException
import android.content.Intent
import android.content.pm.PackageManager
import com.google.android.material.snackbar.Snackbar
import android.widget.ArrayAdapter
import android.widget.EditText
import android.widget.Toast
import androidx.core.app.ActivityCompat.requestPermissions
import androidx.core.app.ActivityCompat.startActivityForResult
import androidx.core.content.ContextCompat.startActivity
import com.airbnb.epoxy.EpoxyController
import com.airbnb.lottie.samples.R.id.coordinatorLayout
import com.airbnb.lottie.samples.model.CompositionArgs
import com.airbnb.lottie.samples.views.marquee
import kotlinx.android.synthetic.main.fragment_player.*
private const val RC_FILE = 1000
private const val RC_CAMERA_PERMISSION = 1001
class PreviewFragment : BaseEpoxyFragment() {
override fun EpoxyController.buildModels() {
marquee {
id("marquee")
title(R.string.preview_title)
}
previewItemView {
id("qr")
title(R.string.preview_qr)
icon(R.drawable.ic_qr_scan)
clickListener { _ ->
if (requireContext().hasPermission(Manifest.permission.CAMERA)) {
startActivity(QRScanActivity.intent(requireContext()))
} else {
requestPermissions(arrayOf(Manifest.permission.CAMERA), RC_CAMERA_PERMISSION)
}
}
}
previewItemView {
id("file")
title(R.string.preview_file)
icon(R.drawable.ic_file)
clickListener { _ ->
try {
val intent = Intent(Intent.ACTION_GET_CONTENT).apply {
type = "*/*"
addCategory(Intent.CATEGORY_OPENABLE)
}
startActivityForResult(Intent.createChooser(intent, "Select a JSON file"), RC_FILE)
} catch (ex: ActivityNotFoundException) {
// Potentially direct the user to the Market with a Dialog
Toast.makeText(context, "Please install a File Manager.", Toast.LENGTH_SHORT).show()
}
}
}
previewItemView {
id("url")
title(R.string.preview_url)
icon(R.drawable.ic_network)
clickListener { _ ->
val urlOrJsonView = EditText(context)
AlertDialog.Builder(context)
.setTitle(R.string.preview_url)
.setView(urlOrJsonView)
.setPositiveButton(R.string.preview_load) { _, _ ->
val args = CompositionArgs(url = urlOrJsonView.text.toString())
startActivity(PlayerActivity.intent(requireContext(), args))
}
.setNegativeButton(R.string.preview_cancel) { dialog, _ -> dialog.dismiss() }
.show()
}
}
previewItemView {
id("assets")
title(R.string.preview_assets)
icon(R.drawable.ic_storage)
clickListener { _ ->
val adapter = ArrayAdapter<String>(requireContext(), android.R.layout.select_dialog_item)
requireContext().assets.list("")?.asSequence()
?.filter { it.endsWith(".json") || it.endsWith(".zip") }
?.forEach { adapter.add(it) }
AlertDialog.Builder(context)
.setAdapter(adapter) { _, which ->
val args = CompositionArgs(asset = adapter.getItem(which))
startActivity(PlayerActivity.intent(requireContext(), args))
}
.show()
}
}
}
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
if (resultCode != Activity.RESULT_OK) return
when (requestCode) {
RC_FILE-> startActivity(PlayerActivity.intent(requireContext(), CompositionArgs(fileUri = data?.data)))
}
}
override fun onRequestPermissionsResult(requestCode: Int, permissions: Array<out String>, grantResults: IntArray) {
when (requestCode) {
RC_CAMERA_PERMISSION -> {
if (grantResults.firstOrNull() == PackageManager.PERMISSION_GRANTED) {
startActivity(QRScanActivity.intent(requireContext()))
} else {
Snackbar.make(coordinatorLayout, R.string.qr_permission_denied, Snackbar.LENGTH_LONG).show()
}
}
}
}
}