| 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 android.support.design.widget.Snackbar |
| import android.widget.ArrayAdapter |
| import android.widget.EditText |
| import android.widget.Toast |
| import com.airbnb.epoxy.EpoxyController |
| 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() |
| } |
| } |
| } |
| } |
| } |