11package com.devgary.contentviewdemo
22
33import android.os.Bundle
4- import android.view.Menu
5- import android.view.MenuItem
6- import android.view.View
7- import android.widget.Toast
84import androidx.appcompat.app.AppCompatActivity
9- import androidx.lifecycle.lifecycleScope
10- import com.devgary.testcore.SampleContent
11- import com.devgary.contentlinkapi.handlers.gfycat.GfycatContentLinkHandler
12- import com.devgary.contentlinkapi.handlers.imgur.ImgurContentLinkHandler
13- import com.devgary.contentlinkapi.handlers.streamable.StreamableContentLinkHandler
14- import com.devgary.contentlinkapi.content.BaseContentLinkHandler
15- import com.devgary.contentlinkapi.content.CompositeContentLinkHandler
16- import com.devgary.contentlinkapi.content.ContentLinkHandler
175import com.devgary.contentviewdemo.databinding.ActivityDemoBinding
18- import com.devgary.contentviewdemo.util.cancel
19- import kotlinx.coroutines.CoroutineExceptionHandler
20- import kotlinx.coroutines.Job
21- import kotlinx.coroutines.launch
226
237class DemoActivity : AppCompatActivity () {
248 private lateinit var binding: ActivityDemoBinding
25-
26- private val contentLinkHandler: CompositeContentLinkHandler by lazy {
27- object : BaseContentLinkHandler () {
28- override fun provideContentHandlers (): List <ContentLinkHandler > {
29- return listOf (
30- GfycatContentLinkHandler (
31- clientId = BuildConfig .GFYCAT_CLIENT_ID ,
32- clientSecret = BuildConfig .GFYCAT_CLIENT_SECRET
33- ),
34- ImgurContentLinkHandler (
35- authorizationHeader = BuildConfig .IMGUR_AUTHORIZATION_HEADER ,
36- mashapeKey = BuildConfig .IMGUR_MASHAPE_KEY
37- ),
38- StreamableContentLinkHandler (),
39- DemoFallthroughContentLinkHandler ()
40- )
41- }
42- }
43- }
44-
45- var getContentJob: Job ? = null
46- private val coroutineExceptionHandler = CoroutineExceptionHandler { _, throwable ->
47- Toast .makeText(
48- /* context = */ this ,
49- /* text = */ " Error: ${throwable.message} " ,
50- /* duration = */ Toast .LENGTH_LONG
51- ).show()
52- }
53-
9+
5410 override fun onCreate (savedInstanceState : Bundle ? ) {
5511 super .onCreate(savedInstanceState)
5612 binding = ActivityDemoBinding .inflate(layoutInflater)
5713 setContentView(binding.root)
5814 setSupportActionBar(binding.toolbar)
59-
60- showContent(SampleContent .IMAGE_CONTENT )
61- }
62-
63- override fun onCreateOptionsMenu (menu : Menu ): Boolean {
64- menuInflater.inflate(R .menu.menu_demo, menu)
65- return true
66- }
67-
68- override fun onOptionsItemSelected (item : MenuItem ): Boolean {
69- when (item.itemId) {
70- R .id.menu_image -> SampleContent .IMAGE_CONTENT
71- R .id.menu_image_no_ext -> SampleContent .IMAGE_CONTENT_NO_EXTENSION
72- R .id.menu_gif -> SampleContent .GIF_CONTENT
73- R .id.menu_video -> SampleContent .MP4_VIDEO_CONTENT
74- R .id.menu_streamable -> SampleContent .STREAMABLE .BASIC_URL
75- R .id.menu_streamable_parse_webpage -> SampleContent .STREAMABLE .HLS_URL
76- R .id.menu_gfycat_video -> SampleContent .GFYCAT_URL
77- R .id.menu_imgur_album -> SampleContent .IMGUR_ALBUM_GALLERY_URL
78- R .id.menu_clear_memory -> {
79- contentLinkHandler.clearMemory()
80- return true
81- }
82- else -> return super .onOptionsItemSelected(item)
83- }.let { url ->
84- showContent(url)
85- return true
86- }
87- }
88-
89- private fun showContent (url : String ) {
90- getContentJob.cancel()
91- binding.contentview.setViewVisibility(View .GONE )
92- getContentJob = lifecycleScope.launch(coroutineExceptionHandler) {
93- contentLinkHandler.getContent(url)?.let { content ->
94- binding.contentview.showContent(content)
95- }
96- }
9715 }
9816}
0 commit comments