0% found this document useful (0 votes)
16 views26 pages

FP BP Belom Fix

Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
16 views26 pages

FP BP Belom Fix

Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 26

LAPORAN

PEMROGRAMAN WEB LANJUT


S1-SISTEM INFORMASI

“UJIAN AKHIR SEMESTER (UAS)”

Disusun Oleh :

Nama Kelompok
Kelompok 9

David Yusuf De Waskito 21.12.1974


Roy Wenang Robbani 21.12.1936
Nama dan NIM Anggota Muhammad Hilmy Abdillah 21.12.1981
Kelompok Kiki Mutkinati 21.12.1950
Khoiriyah 21.12.1921
Reinaldi Endrico 21.12.1970
Dosen Pengampu Agung Nugroho, M.Kom

Nama Koordinator Asisten

Kelas 21S1SI02

S1 – SISTEM INFORMASI
FAKULTAS ILMU KOMPUTER
UNIVERSITAS AMIKOM YOGYAKARTA
2022/2023
ABSTRAK
Aplikasi manajemen tugas android adalah aplikasi yang membantu pengguna untuk mengatur
dan mengelola tugas yang harus mereka kerjakan. Fitur-fitur yang mungkin termasuk dalam
aplikasi ini meliputi pembuatan daftar tugas, pemberian kategori/prioritas, dan pengingat.
Aplikasi ini dapat membantu pengguna untuk meningkatkan efisiensi dan efektivitas dalam
menyelesaikan tugas-tugas mereka.

a) Menu home
Isi dari activity main adalah tampilan home.

Activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<com.google.android.material.appbar.MaterialToolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="#284544"
app:title="Manajemen Tugas"
app:titleTextColor="@android:color/white" />

<androidx.recyclerview.widget.RecyclerView
android:layout_below="@+id/toolbar"
android:id="@+id/todoRv"
tools:itemCount="3"
android:padding="8dp"
tools:listitem="@layout/item_todo"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>

<com.google.android.material.floatingactionbutton.FloatingActionButton
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentEnd="true"
android:layout_alignParentBottom="true"
android:layout_marginStart="32dp"
android:layout_marginTop="32dp"
android:layout_marginEnd="178dp"
android:layout_marginBottom="32dp"
android:onClick="openNewTask"
android:src="@drawable/ic_add_white_24dp"
app:backgroundTint="#4FD1B7" />

</RelativeLayout>

MainActivity.kt
Berikut adalah class dari menu home.

package com.example.todoapp

import android.content.Intent
import android.graphics.*
import android.os.Bundle
import android.view.Menu
import android.view.MenuItem
import android.view.View
import androidx.appcompat.app.AppCompatActivity
import androidx.appcompat.widget.SearchView
import androidx.lifecycle.Observer
import androidx.recyclerview.widget.ItemTouchHelper
import androidx.recyclerview.widget.LinearLayoutManager
import androidx.recyclerview.widget.RecyclerView
import kotlinx.android.synthetic.main.activity_main.*
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.GlobalScope
import kotlinx.coroutines.launch

class MainActivity : AppCompatActivity() {


val list = arrayListOf<TodoModel>()
var adapter = TodoAdapter(list)

val db by lazy {
AppDatabase.getDatabase(this)
}

override fun onCreate(savedInstanceState: Bundle?) {


super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
setSupportActionBar(toolbar)
todoRv.apply {
layoutManager = LinearLayoutManager(this@MainActivity)
adapter = [email protected]
}

initSwipe()

db.todoDao().getTask().observe(this, Observer { it ->


if (!it.isNullOrEmpty()) {
list.clear()
list.addAll(it)
adapter.notifyDataSetChanged()
}else{
list.clear()
adapter.notifyDataSetChanged()
}
})

fun initSwipe() {
val simpleItemTouchCallback = object :
ItemTouchHelper.SimpleCallback(
0,
ItemTouchHelper.LEFT or ItemTouchHelper.RIGHT
) {
override fun onMove(
recyclerView: RecyclerView,
viewHolder: RecyclerView.ViewHolder,
target: RecyclerView.ViewHolder
): Boolean = false

override fun onSwiped(viewHolder: RecyclerView.ViewHolder,


direction: Int) {
val position = viewHolder.adapterPosition

if (direction == ItemTouchHelper.LEFT) {
GlobalScope.launch(Dispatchers.IO) {

db.todoDao().deleteTask(adapter.getItemId(position))
}
} else if (direction == ItemTouchHelper.RIGHT) {
GlobalScope.launch(Dispatchers.IO) {

db.todoDao().finishTask(adapter.getItemId(position))
// todoRv.apply {
// layoutManager =
LinearLayoutManager(this@MainActivity)
// adapter = [email protected]
// }

// setContentView(R.layout.activity_history)
// setSupportActionBar(toolbar)
// todoRv.apply {
// layoutManager =
LinearLayoutManager(this@MainActivity)
// adapter = [email protected]
// }
}
}
}

override fun onChildDraw(


canvas: Canvas,
recyclerView: RecyclerView,
viewHolder: RecyclerView.ViewHolder,
dX: Float,
dY: Float,
actionState: Int,
isCurrentlyActive: Boolean
) {
if (actionState == ItemTouchHelper.ACTION_STATE_SWIPE) {
val itemView = viewHolder.itemView

val paint = Paint()


val icon: Bitmap

if (dX > 0) {

icon = BitmapFactory.decodeResource(resources,
R.mipmap.ic_check_white_png)

paint.color = Color.parseColor("#388E3C")

canvas.drawRect(
itemView.left.toFloat(),
itemView.top.toFloat(),
itemView.left.toFloat() + dX,
itemView.bottom.toFloat(), paint
)

canvas.drawBitmap(
icon,
itemView.left.toFloat(),
itemView.top.toFloat() +
(itemView.bottom.toFloat() - itemView.top.toFloat() -
icon.height.toFloat()) / 2,
paint
)

} else {
icon = BitmapFactory.decodeResource(resources,
R.mipmap.ic_delete_white_png)

paint.color = Color.parseColor("#D32F2F")

canvas.drawRect(
itemView.right.toFloat() + dX,
itemView.top.toFloat(),
itemView.right.toFloat(),
itemView.bottom.toFloat(), paint
)

canvas.drawBitmap(
icon,
itemView.right.toFloat() - icon.width,
itemView.top.toFloat() +
(itemView.bottom.toFloat() - itemView.top.toFloat() -
icon.height.toFloat()) / 2,
paint
)
}
viewHolder.itemView.translationX = dX

} else {
super.onChildDraw(
canvas,
recyclerView,
viewHolder,
dX,
dY,
actionState,
isCurrentlyActive
)
}
}

val itemTouchHelper = ItemTouchHelper(simpleItemTouchCallback)


itemTouchHelper.attachToRecyclerView(todoRv)
}

override fun onCreateOptionsMenu(menu: Menu): Boolean {


menuInflater.inflate(R.menu.main_menu, menu)
val item = menu.findItem(R.id.search)
val searchView = item.actionView as SearchView
item.setOnActionExpandListener(object
:MenuItem.OnActionExpandListener{
override fun onMenuItemActionExpand(item: MenuItem?): Boolean {
displayTodo()
return true
}

override fun onMenuItemActionCollapse(item: MenuItem?): Boolean


{
displayTodo()
return true
}

})
searchView.setOnQueryTextListener(object :
SearchView.OnQueryTextListener{
override fun onQueryTextSubmit(query: String?): Boolean {
return false
}
override fun onQueryTextChange(newText: String?): Boolean {
if(!newText.isNullOrEmpty()){
displayTodo(newText)
}
return true
}

})

return super.onCreateOptionsMenu(menu)
}

fun displayTodo(newText: String = "") {


db.todoDao().getTask().observe(this, Observer {
if(it.isNotEmpty()){
list.clear()
list.addAll(
it.filter { todo ->
todo.title.contains(newText,true)
}
)
adapter.notifyDataSetChanged()
}
})
}

override fun onOptionsItemSelected(item: MenuItem): Boolean {


when (item.itemId) {
R.id.about -> {
startActivity(Intent(this, AboutActivity::class.java))
}
}
return super.onOptionsItemSelected(item)
}

fun openNewTask(view: View) {


startActivity(Intent(this, TaskActivity::class.java))
}
}

b) Menu about
di main_activity ada menu search dan menu about
main_menu.xml

<?xml version="1.0" encoding="utf-8"?>


<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">

<item android:id="@+id/about"
android:title="About App"
app:showAsAction="never"/>

<item
android:id="@+id/search"
android:enabled="true"
android:title="Search"
android:iconTint="@color/red"
android:visible="true"
app:actionViewClass="androidx.appcompat.widget.SearchView"
app:showAsAction="ifRoom|collapseActionView" />

</menu>
Activity_about.xml
Di menu about untuk menampilkan nama dan nim anggota kelompok.
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".AboutActivity">

<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="402dp"
android:layout_height="679dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.444"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/toolbar"
app:layout_constraintVertical_bias="1.0">

<TextView
android:id="@+id/textView11"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="36dp"
android:text="Khoiriyah 21.12.1921"
app:layout_constraintBottom_toTopOf="@+id/btn_kembali"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.501"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/textView2"
app:layout_constraintVertical_bias="0.279" />

<TextView
android:id="@+id/textView10"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="36dp"
android:text="Muhamad Hilmy Abdillah 21.12.1981"
app:layout_constraintBottom_toTopOf="@+id/btn_kembali"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.505"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/textView2"
app:layout_constraintVertical_bias="0.538" />

<TextView
android:id="@+id/textView9"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="36dp"
android:text="Kiki Mutkinati 21.12.1950"
app:layout_constraintBottom_toTopOf="@+id/btn_kembali"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.505"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/textView2"
app:layout_constraintVertical_bias="0.404" />

<Button
android:id="@+id/btn_kembali"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Kembali"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_bias="0.8"
android:onClick="openMainActivity"
/>

<TextView
android:id="@+id/textView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:scaleX="2"
android:scaleY="2"
android:text="@string/app_name"
app:layout_constraintBottom_toTopOf="@+id/btn_kembali"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_bias="0.093" />

<TextView
android:id="@+id/textView2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="30dp"
android:text="Disusun oleh"
app:layout_constraintBottom_toTopOf="@+id/btn_kembali"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/textView"
app:layout_constraintVertical_bias="0.0" />

<TextView
android:id="@+id/textView3"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="36dp"
android:text="David Yusuf De Waskito 21.12.1974"
app:layout_constraintBottom_toTopOf="@+id/btn_kembali"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/textView2"
app:layout_constraintVertical_bias="0.0" />

<TextView
android:id="@+id/textView4"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="36dp"
android:text="Roy Wenang Robbani 21.12.1936"
app:layout_constraintBottom_toTopOf="@+id/btn_kembali"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.502"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/textView2"
app:layout_constraintVertical_bias="0.136" />

<TextView
android:id="@+id/textView5"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="36dp"
android:text="Reinaldi Endrico 21.12.1970"
app:layout_constraintBottom_toTopOf="@+id/btn_kembali"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.505"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/textView2"
app:layout_constraintVertical_bias="0.675" />

</androidx.constraintlayout.widget.ConstraintLayout>

<com.google.android.material.appbar.MaterialToolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="#284544"
app:layout_constraintTop_toTopOf="parent"
app:title="About"
app:titleTextColor="@android:color/white" />

</androidx.constraintlayout.widget.ConstraintLayout>

<?xml version="1.0" encoding="utf-8"?>


<androidx.constraintlayout.widget.ConstraintLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".AboutActivity">

<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="402dp"
android:layout_height="679dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.444"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/toolbar"
app:layout_constraintVertical_bias="1.0">

<TextView
android:id="@+id/textView11"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="36dp"
android:text="Khoiriyah 21.12.1921"
app:layout_constraintBottom_toTopOf="@+id/btn_kembali"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.501"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/textView2"
app:layout_constraintVertical_bias="0.279" />

<TextView
android:id="@+id/textView10"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="36dp"
android:text="Muhamad Hilmy Abdillah 21.12.1981"
app:layout_constraintBottom_toTopOf="@+id/btn_kembali"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.505"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/textView2"
app:layout_constraintVertical_bias="0.538" />

<TextView
android:id="@+id/textView9"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="36dp"
android:text="Kiki Mutkinati 21.12.1950"
app:layout_constraintBottom_toTopOf="@+id/btn_kembali"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.505"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/textView2"
app:layout_constraintVertical_bias="0.404" />

<Button
android:id="@+id/btn_kembali"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Kembali"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_bias="0.8"
android:onClick="openMainActivity"
/>

<TextView
android:id="@+id/textView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:scaleX="2"
android:scaleY="2"
android:text="@string/app_name"
app:layout_constraintBottom_toTopOf="@+id/btn_kembali"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_bias="0.093" />

<TextView
android:id="@+id/textView2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="30dp"
android:text="Disusun oleh"
app:layout_constraintBottom_toTopOf="@+id/btn_kembali"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/textView"
app:layout_constraintVertical_bias="0.0" />

<TextView
android:id="@+id/textView3"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="36dp"
android:text="David Yusuf De Waskito 21.12.1974"
app:layout_constraintBottom_toTopOf="@+id/btn_kembali"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/textView2"
app:layout_constraintVertical_bias="0.0" />

<TextView
android:id="@+id/textView4"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="36dp"
android:text="Roy Wenang Robbani 21.12.1936"
app:layout_constraintBottom_toTopOf="@+id/btn_kembali"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.502"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/textView2"
app:layout_constraintVertical_bias="0.136" />

<TextView
android:id="@+id/textView5"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="36dp"
android:text="Reinaldi Endrico 21.12.1970"
app:layout_constraintBottom_toTopOf="@+id/btn_kembali"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.505"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/textView2"
app:layout_constraintVertical_bias="0.675" />

</androidx.constraintlayout.widget.ConstraintLayout>

<com.google.android.material.appbar.MaterialToolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="#284544"
app:layout_constraintTop_toTopOf="parent"
app:title="About"
app:titleTextColor="@android:color/white" />

</androidx.constraintlayout.widget.ConstraintLayout>

AboutActivity.kt
Berikut adalah class dari menu About

package com.example.todoapp

import android.content.Intent
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.view.View

class AboutActivity : AppCompatActivity() {

override fun onCreate(savedInstanceState: Bundle?) {


super.onCreate(savedInstanceState)
setContentView(R.layout.activity_about)
}
fun openMainActivity(view: View) {
startActivity(Intent(this, MainActivity::class.java))
}
}

c) AppDatabase

package com.example.todoapp

import android.content.Context
import androidx.room.Database
import androidx.room.Room
import androidx.room.RoomDatabase
@Database(entities = [TodoModel::class], version = 1)
abstract class AppDatabase : RoomDatabase() {
abstract fun todoDao(): TodoDao

companion object {
// Singleton prevents multiple instances of database opening at the
// same time.
@Volatile
private var INSTANCE: AppDatabase? = null

fun getDatabase(context: Context): AppDatabase {


val tempInstance = INSTANCE
if (tempInstance != null) {
return tempInstance
}
synchronized(this) {
val instance = Room.databaseBuilder(
context.applicationContext,
AppDatabase::class.java,
DB_NAME
).build()
INSTANCE = instance
return instance
}
}
}
}

d) Menu create
Ini adalah menu untuk menambah data.
Activity_task.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context=".TaskActivity">

<com.google.android.material.appbar.AppBarLayout
android:id="@+id/appBarLayout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:theme="@style/AppTheme.AppBarOverlay">

<androidx.appcompat.widget.Toolbar
android:id="@+id/toolbarAddTask"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#284544"
app:popupTheme="@style/AppTheme.PopupOverlay"
app:title="Tugas Baru" />

</com.google.android.material.appbar.AppBarLayout>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="16dp"
android:layout_marginTop="16dp"
android:layout_marginBottom="4dp"
android:text="Nama Tugas"
android:textColor="@color/colorAccent"
android:textSize="16sp" />

<com.google.android.material.textfield.TextInputLayout
android:id="@+id/titleInpLay"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginStart="16dp"
android:layout_marginEnd="16dp"
android:layout_marginBottom="16dp"
app:boxStrokeColor="@color/colorAccent"
app:hintTextColor="@color/colorAccent">

<com.google.android.material.textfield.TextInputEditText
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="Masukkan Nama Tugas"
android:inputType="textCapWords"
android:paddingStart="8dp"
android:paddingEnd="8dp"
android:textSize="18sp" />
</com.google.android.material.textfield.TextInputLayout>

<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="16dp"
android:layout_marginBottom="4dp"
android:text="Apa yang Perlu diselesaikan ? "
android:textColor="@color/colorAccent"
android:textSize="16sp" />

<com.google.android.material.textfield.TextInputLayout
android:id="@+id/taskInpLay"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginStart="16dp"
android:layout_marginEnd="16dp"
android:layout_marginBottom="16dp"
app:boxStrokeColor="@color/colorAccent"
app:hintTextColor="@color/colorAccent">

<com.google.android.material.textfield.TextInputEditText
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="start"
android:hint="Masukkan Tugasmu"
android:lines="3"
android:paddingStart="8dp"
android:paddingEnd="8dp"
android:textSize="18sp" />
</com.google.android.material.textfield.TextInputLayout>

<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="16dp"
android:layout_marginBottom="4dp"
android:text="Atur Tanggal dan Batas Waktu"
android:textColor="@color/colorAccent"
android:textSize="16sp" />

<com.google.android.material.textfield.TextInputLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginStart="16dp"
android:layout_marginEnd="16dp"
android:layout_marginBottom="16dp"
app:boxStrokeColor="@color/colorAccent"
app:hintTextColor="@color/colorAccent">

<com.google.android.material.textfield.TextInputEditText
android:id="@+id/dateEdt"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:clickable="true"
android:cursorVisible="false"
android:drawableEnd="@drawable/ic_date_range_black_24dp"
android:drawablePadding="8dp"
android:drawableTint="@color/colorAccent"
android:focusable="false"
android:hint="Atur Disini"
android:paddingStart="8dp"
android:paddingEnd="8dp"
android:textSize="18sp" />
</com.google.android.material.textfield.TextInputLayout>

<com.google.android.material.textfield.TextInputLayout
android:id="@+id/timeInptLay"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginStart="16dp"
android:layout_marginEnd="16dp"
android:layout_marginBottom="16dp"
android:visibility="gone"
app:boxStrokeColor="@color/colorAccent"
app:hintTextColor="@color/colorAccent">

<com.google.android.material.textfield.TextInputEditText
android:id="@+id/timeEdt"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:clickable="true"
android:cursorVisible="false"
android:drawableEnd="@drawable/ic_access_time_black_24dp"
android:drawablePadding="8dp"
android:drawableTint="@color/colorAccent"
android:focusable="false"
android:hint="Set Time"
android:paddingStart="8dp"
android:paddingEnd="8dp"
android:textSize="18sp" />
</com.google.android.material.textfield.TextInputLayout>

<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginEnd="16dp"
android:layout_marginLeft="16dp"
android:layout_marginRight="16dp"
android:orientation="horizontal"
android:layout_marginStart="16dp"
android:layout_marginTop="8dp">

<Spinner
android:id="@+id/spinnerCategory"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginEnd="16dp"
android:layout_weight="1"
tools:ignore="SpeakableTextPresentCheck,TouchTargetSizeCheck"
/>

</LinearLayout>

<RelativeLayout
android:layout_width="match_parent"
android:layout_height="match_parent">

<com.google.android.material.button.MaterialButton
android:id="@+id/saveBtn"
android:layout_width="100dp"
android:layout_height="60dp"
android:layout_alignParentStart="true"
android:layout_alignParentEnd="true"
android:layout_marginStart="147dp"
android:layout_marginTop="32dp"
android:layout_marginEnd="147dp"
android:text="Simpan"
app:backgroundTint="@color/colorAccent"
app:cornerRadius="25dp" />
</RelativeLayout>

</LinearLayout>
TaskAktivity.kt
Class dari menu create

package com.example.todoapp

import android.app.DatePickerDialog
import android.app.TimePickerDialog
import android.os.Bundle
import android.view.View
import android.widget.ArrayAdapter
import android.widget.DatePicker
import android.widget.TimePicker
import androidx.appcompat.app.AppCompatActivity
import androidx.room.Room
import kotlinx.android.synthetic.main.activity_task.*
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.GlobalScope
import kotlinx.coroutines.launch
import kotlinx.coroutines.withContext
import java.text.SimpleDateFormat
import java.util.*
const val DB_NAME = "todo.db"

class TaskActivity : AppCompatActivity(), View.OnClickListener {

lateinit var myCalendar: Calendar

lateinit var dateSetListener: DatePickerDialog.OnDateSetListener


lateinit var timeSetListener: TimePickerDialog.OnTimeSetListener

var finalDate = 0L
var finalTime = 0L

private val labels = arrayListOf("Praktikum", "Teori")

val db by lazy {
AppDatabase.getDatabase(this)
}

override fun onCreate(savedInstanceState: Bundle?) {


super.onCreate(savedInstanceState)
setContentView(R.layout.activity_task)

dateEdt.setOnClickListener(this)
timeEdt.setOnClickListener(this)
saveBtn.setOnClickListener(this)

setUpSpinner()
}

private fun setUpSpinner() {


val adapter =
ArrayAdapter<String>(this,
android.R.layout.simple_spinner_dropdown_item, labels)

labels.sort()

spinnerCategory.adapter = adapter
}

override fun onClick(v: View) {


when (v.id) {
R.id.dateEdt -> {
setListener()
}
R.id.timeEdt -> {
setTimeListener()
}
R.id.saveBtn -> {
saveTodo()
}
}

private fun saveTodo() {


val category = spinnerCategory.selectedItem.toString()
val title = titleInpLay.editText?.text.toString()
val description = taskInpLay.editText?.text.toString()

GlobalScope.launch(Dispatchers.Main) {
val id = withContext(Dispatchers.IO) {
return@withContext db.todoDao().insertTask(
TodoModel(
title,
description,
category,
finalDate,
finalTime
)
)
}
finish()
}

private fun setTimeListener() {


myCalendar = Calendar.getInstance()

timeSetListener =
TimePickerDialog.OnTimeSetListener() { _: TimePicker,
hourOfDay: Int, min: Int ->
myCalendar.set(Calendar.HOUR_OF_DAY, hourOfDay)
myCalendar.set(Calendar.MINUTE, min)
updateTime()
}

val timePickerDialog = TimePickerDialog(


this, timeSetListener, myCalendar.get(Calendar.HOUR_OF_DAY),
myCalendar.get(Calendar.MINUTE), false
)
timePickerDialog.show()
}

private fun updateTime() {


//Mon, 5 Jan 2020
val myformat = "h:mm a"
val sdf = SimpleDateFormat(myformat)
finalTime = myCalendar.time.time
timeEdt.setText(sdf.format(myCalendar.time))

private fun setListener() {


myCalendar = Calendar.getInstance()

dateSetListener =
DatePickerDialog.OnDateSetListener { _: DatePicker, year: Int,
month: Int, dayOfMonth: Int ->
myCalendar.set(Calendar.YEAR, year)
myCalendar.set(Calendar.MONTH, month)
myCalendar.set(Calendar.DAY_OF_MONTH, dayOfMonth)
updateDate()

val datePickerDialog = DatePickerDialog(


this, dateSetListener, myCalendar.get(Calendar.YEAR),
myCalendar.get(Calendar.MONTH),
myCalendar.get(Calendar.DAY_OF_MONTH)
)
datePickerDialog.datePicker.minDate = System.currentTimeMillis()
datePickerDialog.show()
}

private fun updateDate() {


//Mon, 5 Jan 2020
val myformat = "EEE, d MMM yyyy"
val sdf = SimpleDateFormat(myformat)
finalDate = myCalendar.time.time
dateEdt.setText(sdf.format(myCalendar.time))

timeInptLay.visibility = View.VISIBLE

e) Menu Read
Menu ini untuk melihat data
Item_todo.xml

<?xml version="1.0" encoding="utf-8"?>


<com.google.android.material.card.MaterialCardView
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:padding="10dp"
xmlns:tools="http://schemas.android.com/tools"
android:layout_marginBottom="10dp"
android:elevation="10dp"
app:cardCornerRadius="10dp">

<View
android:id="@+id/viewColorTag"
android:layout_width="match_parent"
android:layout_height="match_parent" />

<RelativeLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="5dp"
android:layout_marginStart="5dp"
android:background="@android:color/white"
android:paddingBottom="5dp">
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginEnd="5dp"
android:background="?android:attr/selectableItemBackground"
android:clickable="true"
android:padding="5dp">

<TextView
android:id="@+id/txtShowTitle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentStart="true"
android:layout_marginEnd="5dp"
android:layout_toStartOf="@+id/txtShowCategory"
android:ellipsize="end"
android:maxLines="1"
tools:text="Nama Tugas"
android:textColor="#303030"
android:textSize="20sp"
android:textStyle="bold" />

<TextView
android:id="@+id/txtShowTask"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentStart="true"
android:layout_below="@+id/txtShowTitle"
android:layout_marginTop="4dp"
android:ellipsize="end"
android:maxLines="1"
tools:text="Tugas yang ingin diselesaikan"
android:textColor="@android:color/black"
android:textSize="16sp" />

<TextView
android:id="@+id/txtShowCategory"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentEnd="true"
android:ellipsize="end"
android:maxLines="1"
android:maxWidth="80dp"
tools:text="Kategori"
android:textColor="@color/litherGray"
android:textSize="12sp" />

<TextView
android:id="@+id/textDate"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentStart="true"
android:layout_below="@+id/txtShowTask"
android:layout_marginTop="15dp"
android:text="Tanggal"
android:textColor="@color/litherGray"
android:textSize="12sp"
android:visibility="visible" />

<TextView
android:id="@+id/txtShowDate"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentStart="true"
android:layout_below="@+id/textDate"
tools:text="22-12-2022"
android:textColor="@android:color/black"
android:visibility="visible" />

<TextView
android:id="@+id/textTime"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentEnd="true"
android:layout_below="@+id/txtShowTask"
android:layout_marginTop="15dp"
android:text="Waktu"
android:textColor="@color/litherGray"
android:textSize="12sp"
android:visibility="visible" />

<TextView
android:id="@+id/txtShowTime"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentEnd="true"
android:layout_below="@+id/textTime"
tools:text="22:12 AM"
android:textColor="@android:color/black"
android:visibility="visible" />

</RelativeLayout>

</RelativeLayout>

</com.google.android.material.card.MaterialCardView>

You might also like