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 @@