diff --git a/.idea/deploymentTargetSelector.xml b/.idea/deploymentTargetSelector.xml
index b268ef3..a886fee 100644
--- a/.idea/deploymentTargetSelector.xml
+++ b/.idea/deploymentTargetSelector.xml
@@ -3,7 +3,23 @@
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/app/build.gradle.kts b/app/build.gradle.kts
index 2a4bbd8..0c9f587 100644
--- a/app/build.gradle.kts
+++ b/app/build.gradle.kts
@@ -45,4 +45,6 @@ dependencies {
testImplementation(libs.junit)
androidTestImplementation(libs.androidx.junit)
androidTestImplementation(libs.androidx.espresso.core)
+ val fragment_version = "1.8.9"
+ implementation("androidx.fragment:fragment-ktx:$fragment_version")
}
\ No newline at end of file
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 398b755..9169b70 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -1,6 +1,7 @@
+
+ android:exported="true"
+ tools:ignore="MissingClass">
@@ -22,4 +24,4 @@
-
\ No newline at end of file
+
diff --git a/app/src/main/java/com/example/android_25_2/MainActivity.kt b/app/src/main/java/com/example/android_25_2/MainActivity.kt
index aed359b..7654403 100644
--- a/app/src/main/java/com/example/android_25_2/MainActivity.kt
+++ b/app/src/main/java/com/example/android_25_2/MainActivity.kt
@@ -1,20 +1,81 @@
package com.example.android_25_2
+import android.Manifest
+import android.content.Intent
+import android.content.pm.PackageManager
+import android.net.Uri
+import android.os.Build
import android.os.Bundle
-import androidx.activity.enableEdgeToEdge
+import android.os.WorkDuration
+import android.provider.MediaStore
+import android.provider.MediaStore.Audio.Artists
+import android.provider.Settings
import androidx.appcompat.app.AppCompatActivity
+import androidx.constraintlayout.widget.ConstraintLayout
+import androidx.core.app.ActivityCompat
+import androidx.core.content.ContextCompat
import androidx.core.view.ViewCompat
import androidx.core.view.WindowInsetsCompat
+import androidx.recyclerview.widget.LinearLayoutManager
+import androidx.recyclerview.widget.RecyclerView
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
- enableEdgeToEdge()
setContentView(R.layout.activity_main)
ViewCompat.setOnApplyWindowInsetsListener(findViewById(R.id.main)) { v, insets ->
val systemBars = insets.getInsets(WindowInsetsCompat.Type.systemBars())
v.setPadding(systemBars.left, systemBars.top, systemBars.right, systemBars.bottom)
insets
}
+ permissionCheck()
+
+ val musicList = mutableListOf()
+
+ val projection = arrayOf(
+ MediaStore.Audio.Media.DISPLAY_NAME,
+ MediaStore.Audio.Media.DURATION,
+ MediaStore.Audio.Media.ARTIST
+ )
+
+ applicationContext.contentResolver.query(
+ MediaStore.Audio.Media.EXTERNAL_CONTENT_URI,
+ projection,
+ "",
+ arrayOf(),
+ ""
+ )?.use { cursor ->
+ val displayNameColumn = cursor.getColumnIndexOrThrow(MediaStore.Audio.Media.DISPLAY_NAME)
+ val durationColumn = cursor.getColumnIndexOrThrow(MediaStore.Audio.Media.DURATION)
+ val artistsColumn = cursor.getColumnIndexOrThrow(MediaStore.Audio.Media.ARTIST)
+ while (cursor.moveToNext()){
+ val displayName = cursor.getString(displayNameColumn)
+ val duration = cursor.getInt(durationColumn)
+ val artists = cursor.getString(artistsColumn)
+ }
+ }
+
+ val recyclerView = findViewById(R.id.recyclerView)
+ val musicAdapter = MusicAdapter(musicList)
+ recyclerView.layoutManager = LinearLayoutManager(this)
+ recyclerView.adapter = musicAdapter
+ }
+
+ private fun permissionCheck() {
+ val permission = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {
+ Manifest.permission.READ_MEDIA_AUDIO
+ } else {
+ Manifest.permission.READ_EXTERNAL_STORAGE
+ }
+ if (ContextCompat.checkSelfPermission(this, permission)
+ != PackageManager.PERMISSION_GRANTED) {
+ ActivityCompat.requestPermissions(
+ this, arrayOf(permission), 1000
+ )
+ if(!ActivityCompat.shouldShowRequestPermissionRationale(this, permission)) {
+ val intent = Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS).setData(Uri.parse("package:${packageName}"))
+ startActivity(intent)
+ }
+ }
}
-}
\ No newline at end of file
+}
diff --git a/app/src/main/java/com/example/android_25_2/MusicAdapter.kt b/app/src/main/java/com/example/android_25_2/MusicAdapter.kt
new file mode 100644
index 0000000..1a06d22
--- /dev/null
+++ b/app/src/main/java/com/example/android_25_2/MusicAdapter.kt
@@ -0,0 +1,31 @@
+package com.example.android_25_2
+
+import android.view.LayoutInflater
+import android.view.View
+import android.view.ViewGroup
+import android.widget.TextView
+import androidx.recyclerview.widget.RecyclerView
+import androidx.recyclerview.widget.RecyclerView.ViewHolder
+
+class MusicAdapter(private val musicList: List): RecyclerView.Adapter(){
+
+ class MusicViewHolder(view: View) : RecyclerView.ViewHolder(view){
+ val displayName: TextView = itemView.findViewById(R.id.text_display_name)
+ val artists: TextView = itemView.findViewById(R.id.text_artist)
+ val duration: TextView = itemView.findViewById(R.id.text_duration)
+ }
+
+ override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
+ val view = LayoutInflater.from(parent.context)
+ .inflate(R.layout.item, parent, false)
+
+ return MusicViewHolder(view)
+ }
+
+ override fun onBindViewHolder(holder: ViewHolder, position: Int) {
+ val music = musicList[position]
+ holder.itemView
+ }
+
+ override fun getItemCount() = musicList.size
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/example/android_25_2/MusicItem.kt b/app/src/main/java/com/example/android_25_2/MusicItem.kt
new file mode 100644
index 0000000..8bbbc62
--- /dev/null
+++ b/app/src/main/java/com/example/android_25_2/MusicItem.kt
@@ -0,0 +1,7 @@
+package com.example.android_25_2
+
+data class MusicItem (
+ val displayName: String,
+ val duration: Int,
+ val artist: String
+)
\ No newline at end of file
diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml
index 9affce0..76c632c 100644
--- a/app/src/main/res/layout/activity_main.xml
+++ b/app/src/main/res/layout/activity_main.xml
@@ -7,4 +7,27 @@
android:layout_height="match_parent"
tools:context=".MainActivity">
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/item.xml b/app/src/main/res/layout/item.xml
new file mode 100644
index 0000000..4e691c8
--- /dev/null
+++ b/app/src/main/res/layout/item.xml
@@ -0,0 +1,40 @@
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/values-night/themes.xml b/app/src/main/res/values-night/themes.xml
index a92bfca..3167c98 100644
--- a/app/src/main/res/values-night/themes.xml
+++ b/app/src/main/res/values-night/themes.xml
@@ -2,12 +2,12 @@