From 3c9f2eaf152be0d0b3aeb62c097dcacdc3f8a130 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=92=D0=B0=D1=88=D0=B5=20=D0=98=D0=BC=D1=8F?= Date: Wed, 24 Sep 2025 15:48:24 +0400 Subject: [PATCH] lab6 --- app/build.gradle.kts | 7 ++ app/src/main/AndroidManifest.xml | 3 - .../com/example/myapplication/AppDatabase.kt | 25 +++++++ .../com/example/myapplication/MainActivity.kt | 73 +++++++++---------- .../java/com/example/myapplication/Note.kt | 10 +++ .../com/example/myapplication/NoteAdapter.kt | 29 ++++++++ .../java/com/example/myapplication/NoteDao.kt | 15 ++++ app/src/main/res/layout/activity_main.xml | 18 +++-- 8 files changed, 132 insertions(+), 48 deletions(-) create mode 100644 app/src/main/java/com/example/myapplication/AppDatabase.kt create mode 100644 app/src/main/java/com/example/myapplication/Note.kt create mode 100644 app/src/main/java/com/example/myapplication/NoteAdapter.kt create mode 100644 app/src/main/java/com/example/myapplication/NoteDao.kt diff --git a/app/build.gradle.kts b/app/build.gradle.kts index d4f9084..06c487e 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -1,6 +1,7 @@ plugins { alias(libs.plugins.android.application) alias(libs.plugins.kotlin.android) + id("org.jetbrains.kotlin.kapt") } android { @@ -45,4 +46,10 @@ dependencies { testImplementation(libs.junit) androidTestImplementation(libs.androidx.junit) androidTestImplementation(libs.androidx.espresso.core) + + // Room + val room_version = "2.8.0" + implementation("androidx.room:room-runtime:$room_version") + kapt("androidx.room:room-compiler:$room_version") + implementation("androidx.room:room-ktx:$room_version") } \ No newline at end of file diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 6af3e15..e2d8658 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -2,9 +2,6 @@ - - - - if (bitmap != null) { - imageView.setImageBitmap(bitmap) - } else { - Toast.makeText(this, "Фото не получено", Toast.LENGTH_SHORT).show() - } - } - - // Запрос разрешения на камеру - private val requestCameraPermission = registerForActivityResult( - ActivityResultContracts.RequestPermission() - ) { granted -> - if (granted) { - takePicturePreview.launch(null) - } else { - Toast.makeText(this, "Разрешение на камеру не выдано", Toast.LENGTH_SHORT).show() - } - } + private lateinit var db: AppDatabase override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) - btnCamera = findViewById(R.id.btnCamera) - imageView = findViewById(R.id.imageView) + etInput = findViewById(R.id.etInput) + btnAdd = findViewById(R.id.btnAdd) + recyclerView = findViewById(R.id.recyclerView) - btnCamera.setOnClickListener { - if (ContextCompat.checkSelfPermission(this, Manifest.permission.CAMERA) - == PackageManager.PERMISSION_GRANTED - ) { - takePicturePreview.launch(null) - } else { - requestCameraPermission.launch(Manifest.permission.CAMERA) + adapter = NoteAdapter(emptyList()) + recyclerView.layoutManager = LinearLayoutManager(this) + recyclerView.adapter = adapter + + db = AppDatabase.getDatabase(this) + + // Добавляем заметку + btnAdd.setOnClickListener { + val text = etInput.text.toString() + if (text.isNotEmpty()) { + lifecycleScope.launch { + db.noteDao().insert(NoteEntity(text = text)) + } + etInput.text.clear() + } + } + + // Подписываемся на изменения + lifecycleScope.launch { + db.noteDao().getAll().collect { notes -> + adapter.update(notes) } } } diff --git a/app/src/main/java/com/example/myapplication/Note.kt b/app/src/main/java/com/example/myapplication/Note.kt new file mode 100644 index 0000000..b9a0f9f --- /dev/null +++ b/app/src/main/java/com/example/myapplication/Note.kt @@ -0,0 +1,10 @@ +package com.example.myapplication + +import androidx.room.Entity +import androidx.room.PrimaryKey + +@Entity(tableName = "notes") +data class NoteEntity( + @PrimaryKey(autoGenerate = true) val id: Int = 0, + val text: String +) \ No newline at end of file diff --git a/app/src/main/java/com/example/myapplication/NoteAdapter.kt b/app/src/main/java/com/example/myapplication/NoteAdapter.kt new file mode 100644 index 0000000..5100377 --- /dev/null +++ b/app/src/main/java/com/example/myapplication/NoteAdapter.kt @@ -0,0 +1,29 @@ +package com.example.myapplication + +import android.view.LayoutInflater +import android.view.ViewGroup +import android.widget.TextView +import androidx.recyclerview.widget.RecyclerView + +class NoteAdapter(private var notes: List) : + RecyclerView.Adapter() { + + class NoteViewHolder(val textView: TextView) : RecyclerView.ViewHolder(textView) + + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): NoteViewHolder { + val textView = LayoutInflater.from(parent.context) + .inflate(android.R.layout.simple_list_item_1, parent, false) as TextView + return NoteViewHolder(textView) + } + + override fun onBindViewHolder(holder: NoteViewHolder, position: Int) { + holder.textView.text = notes[position].text + } + + override fun getItemCount() = notes.size + + fun update(newNotes: List) { + notes = newNotes + notifyDataSetChanged() + } +} \ No newline at end of file diff --git a/app/src/main/java/com/example/myapplication/NoteDao.kt b/app/src/main/java/com/example/myapplication/NoteDao.kt new file mode 100644 index 0000000..bbf57df --- /dev/null +++ b/app/src/main/java/com/example/myapplication/NoteDao.kt @@ -0,0 +1,15 @@ +package com.example.myapplication + +import androidx.room.Dao +import androidx.room.Insert +import androidx.room.Query +import kotlinx.coroutines.flow.Flow + +@Dao +interface NoteDao { + @Insert + suspend fun insert(note: NoteEntity) + + @Query("SELECT * FROM notes") + fun getAll(): Flow> +} \ 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 6ed2757..68dfe12 100644 --- a/app/src/main/res/layout/activity_main.xml +++ b/app/src/main/res/layout/activity_main.xml @@ -4,17 +4,23 @@ android:orientation="vertical" android:padding="16dp"> + +