Untitled
unknown
plain_text
a year ago
2.9 kB
8
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