Untitled

 avatar
unknown
plain_text
a year ago
2.9 kB
5
Indexable
class VideoListFragment : Fragment() {

    private lateinit var viewModel: VideoViewModel
    private lateinit var adapter: VideoAdapter
    private lateinit var contentObserver: ContentObserver

    override fun onCreateView(
        inflater: LayoutInflater, container: ViewGroup?,
        savedInstanceState: Bundle?
    ): View? {
        return inflater.inflate(R.layout.fragment_video_list, container, false)
    }

    override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
        super.onViewCreated(view, savedInstanceState)

        viewModel = ViewModelProvider(this).get(VideoViewModel::class.java)

        val recyclerView = view.findViewById<RecyclerView>(R.id.recyclerView)
        recyclerView.layoutManager = LinearLayoutManager(context)

        adapter = VideoAdapter(emptyList())
        recyclerView.adapter = adapter

        viewModel.videos.observe(viewLifecycleOwner, Observer { videos ->
            adapter.updateVideos(videos)
        })

        val handler = Handler(Looper.getMainLooper())
        contentObserver = object : ContentObserver(handler) {
            override fun onChange(selfChange: Boolean, uri: Uri?) {
                super.onChange(selfChange, uri)
                if (uri != null) {
                    val videoId = uri.lastPathSegment ?: return
                    viewModel.removeVideo(videoId)
                }
            }
        }

        requireContext().contentResolver.registerContentObserver(
            MediaStore.Video.Media.EXTERNAL_CONTENT_URI,
            true,
            contentObserver
        )

        // Lấy danh sách video ban đầu từ Gallery
        fetchVideosFromGallery()
    }

    override fun onDestroyView() {
        super.onDestroyView()
        requireContext().contentResolver.unregisterContentObserver(contentObserver)
    }

    private fun fetchVideosFromGallery() {
        val videoList = mutableListOf<Video>()
        val projection = arrayOf(
            MediaStore.Video.Media._ID,
            MediaStore.Video.Media.DISPLAY_NAME,
            MediaStore.Video.Media.DATA
        )
        val cursor = requireContext().contentResolver.query(
            MediaStore.Video.Media.EXTERNAL_CONTENT_URI,
            projection,
            null,
            null,
            null
        )
        cursor?.use {
            val idColumn = cursor.getColumnIndexOrThrow(MediaStore.Video.Media._ID)
            val titleColumn = cursor.getColumnIndexOrThrow(MediaStore.Video.Media.DISPLAY_NAME)
            val dataColumn = cursor.getColumnIndexOrThrow(MediaStore.Video.Media.DATA)

            while (cursor.moveToNext()) {
                val id = cursor.getString(idColumn)
                val title = cursor.getString(titleColumn)
                val data = cursor.getString(dataColumn)
                videoList.add(Video(id, title, data))
            }
        }
        viewModel.updateVideos(videoList)
    }
}
Editor is loading...
Leave a Comment