<lambda>null1 package com.airbnb.lottie.samples
2
3 import android.Manifest
4 import android.app.Activity
5 import android.app.AlertDialog
6 import android.content.ActivityNotFoundException
7 import android.content.Intent
8 import android.content.pm.PackageManager
9 import android.widget.ArrayAdapter
10 import android.widget.EditText
11 import android.widget.Toast
12 import com.airbnb.epoxy.EpoxyController
13 import com.airbnb.lottie.samples.model.CompositionArgs
14 import com.airbnb.lottie.samples.utils.BaseEpoxyFragment
15 import com.airbnb.lottie.samples.utils.hasPermission
16 import com.airbnb.lottie.samples.views.marquee
17 import com.google.android.material.snackbar.Snackbar
18
19 private const val RC_FILE = 1000
20 private const val RC_CAMERA_PERMISSION = 1001
21
22 class PreviewFragment : BaseEpoxyFragment() {
23
24 override fun EpoxyController.buildModels() {
25 marquee {
26 id("marquee")
27 title(R.string.preview_title)
28 }
29
30 previewItemView {
31 id("qr")
32 title(R.string.preview_qr)
33 icon(R.drawable.ic_qr_scan)
34 clickListener { _ ->
35 if (requireContext().hasPermission(Manifest.permission.CAMERA)) {
36 startActivity(QRScanActivity.intent(requireContext()))
37 } else {
38 @Suppress("DEPRECATION")
39 requestPermissions(arrayOf(Manifest.permission.CAMERA), RC_CAMERA_PERMISSION)
40 }
41 }
42 }
43
44 previewItemView {
45 id("file")
46 title(R.string.preview_file)
47 icon(R.drawable.ic_file)
48 clickListener { _ ->
49 try {
50 val intent = Intent(Intent.ACTION_GET_CONTENT).apply {
51 type = "*/*"
52 addCategory(Intent.CATEGORY_OPENABLE)
53 }
54 @Suppress("DEPRECATION")
55 startActivityForResult(Intent.createChooser(intent, "Select a JSON file"), RC_FILE)
56 } catch (ex: ActivityNotFoundException) {
57 // Potentially direct the user to the Market with a Dialog
58 Toast.makeText(context, "Please install a File Manager.", Toast.LENGTH_SHORT).show()
59 }
60 }
61 }
62
63 previewItemView {
64 id("url")
65 title(R.string.preview_url)
66 icon(R.drawable.ic_network)
67 clickListener { _ ->
68 val urlOrJsonView = EditText(context)
69 AlertDialog.Builder(context)
70 .setTitle(R.string.preview_url)
71 .setView(urlOrJsonView)
72 .setPositiveButton(R.string.preview_load) { _, _ ->
73 val args = CompositionArgs(url = urlOrJsonView.text.toString())
74 startActivity(PlayerActivity.intent(requireContext(), args))
75 }
76 .setNegativeButton(R.string.preview_cancel) { dialog, _ -> dialog.dismiss() }
77 .show()
78 }
79 }
80
81 previewItemView {
82 id("assets")
83 title(R.string.preview_assets)
84 icon(R.drawable.ic_storage)
85 clickListener { _ ->
86 val adapter = ArrayAdapter<String>(requireContext(), android.R.layout.select_dialog_item)
87 requireContext().assets.list("")?.asSequence()
88 ?.filter { it.endsWith(".json") || it.endsWith(".zip") }
89 ?.forEach { adapter.add(it) }
90 AlertDialog.Builder(context)
91 .setAdapter(adapter) { _, which ->
92 val args = CompositionArgs(asset = adapter.getItem(which))
93 startActivity(PlayerActivity.intent(requireContext(), args))
94 }
95 .show()
96 }
97 }
98 }
99
100 override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
101 if (resultCode != Activity.RESULT_OK) return
102 when (requestCode) {
103 RC_FILE -> startActivity(PlayerActivity.intent(requireContext(), CompositionArgs(fileUri = data?.data)))
104 }
105 }
106
107 override fun onRequestPermissionsResult(requestCode: Int, permissions: Array<out String>, grantResults: IntArray) {
108 when (requestCode) {
109 RC_CAMERA_PERMISSION -> {
110 if (grantResults.firstOrNull() == PackageManager.PERMISSION_GRANTED) {
111 startActivity(QRScanActivity.intent(requireContext()))
112 } else {
113 Snackbar.make(binding.root, R.string.qr_permission_denied, Snackbar.LENGTH_LONG).show()
114 }
115 }
116 }
117 }
118 }