Skip to content

Instantly share code, notes, and snippets.

@amoozeshbebin
Created November 23, 2023 15:44
Show Gist options
  • Save amoozeshbebin/b6d78ee0ae66717a374b8acbcbc74a1d to your computer and use it in GitHub Desktop.
Save amoozeshbebin/b6d78ee0ae66717a374b8acbcbc74a1d to your computer and use it in GitHub Desktop.
UserManagementdb
MainActivity.kt:
package com.iliyadev.usermanagement
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.widget.ArrayAdapter
import android.widget.Button
import android.widget.EditText
import android.widget.ListView
import android.widget.Toast
import android.widget.Toast.LENGTH_LONG
import android.widget.Toast.LENGTH_SHORT
import com.iliyadev.usermanagement.db.DBContract
import com.iliyadev.usermanagement.db.helper.UserDBHelper
import com.iliyadev.usermanagement.models.User
class MainActivity : AppCompatActivity() {
private lateinit var username: EditText
private lateinit var firstname: EditText
private lateinit var lastname: EditText
private lateinit var btnAdd: Button
private lateinit var btnDelete: Button
private lateinit var listView: ListView
private lateinit var userdbHelper: UserDBHelper
private lateinit var adapter: ArrayAdapter<String>
private var listItem = ArrayList<String>()
private var selectedUserIndex: Int = -1
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
init()
}
private fun init() {
bindViews()
userdbHelper = UserDBHelper(this)
refreshList()
adapter = ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, listItem)
listView.adapter = adapter
btnAdd.setOnClickListener {
if (username.text.isEmpty()) {
Toast.makeText(this, "Please Enter Your UserName", Toast.LENGTH_SHORT).show()
return@setOnClickListener
}
if (firstname.text.isEmpty()) {
Toast.makeText(this, "Please Enter Your firstName", Toast.LENGTH_SHORT).show()
return@setOnClickListener
}
if (lastname.text.isEmpty()) {
Toast.makeText(this, "Please Enter Your lastName", Toast.LENGTH_SHORT).show()
return@setOnClickListener
}
val user = User(username.text.toString(), firstname.text.toString(), lastname.text.toString())
val result = userdbHelper.insertUser(user)
if (result) {
Toast.makeText(this, "New User Added Successfully", Toast.LENGTH_SHORT).show()
username.text.clear()
firstname.text.clear()
lastname.text.clear()
refreshList()
adapter.notifyDataSetChanged()
}
}
listView.setOnItemClickListener { _, view, position, _ ->
// Clear previous selection
clearSelection()
// Set the selected position and update the UI
selectedUserIndex = position
view.setBackgroundColor(resources.getColor(android.R.color.darker_gray))
}
btnDelete.setOnClickListener {
if (selectedUserIndex != -1) {
val selectedUser = adapter.getItem(selectedUserIndex)
val userName = selectedUser!!.substringAfterLast("(").substringBefore(")")
val result = userdbHelper.deleteUser(userName)
if (result) {
Toast.makeText(this, "User deleted successfully", Toast.LENGTH_SHORT).show()
clearSelection()
refreshList()
adapter.notifyDataSetChanged()
} else {
Toast.makeText(this, "Failed to delete user", Toast.LENGTH_SHORT).show()
}
} else {
Toast.makeText(this, "Please select a user to delete", Toast.LENGTH_SHORT).show()
}
}
}
private fun clearSelection() {
if (selectedUserIndex != -1) {
val selectedView = listView.getChildAt(selectedUserIndex)
selectedView?.setBackgroundColor(0)
selectedUserIndex = -1
}
}
private fun refreshList() {
listItem.clear()
val users = userdbHelper.getAllUsers()
for (user in users) {
listItem.add("${user.firstName} ${user.lastName} (${user.userName})")
}
}
private fun bindViews() {
username = findViewById(R.id.edittext_username)
firstname = findViewById(R.id.edittext_firstname)
lastname = findViewById(R.id.edittext_lastname)
btnAdd = findViewById(R.id.button_adduser)
btnDelete = findViewById(R.id.button_deleteuser)
listView = findViewById(R.id.listView)
}
}
User.kt:
package com.iliyadev.usermanagement.models
data class User(val userName: String, val firstName: String, val lastName: String)
DBContract object:
package com.iliyadev.usermanagement.db
import android.provider.BaseColumns
object DBContract {
class UserEntity : BaseColumns {
companion object {
var TABLE_NAME = "users"
var COLUMN_USERNAME = "username"
var COLUMN_FIRSTNAME = "firstname"
var COLUMN_LASTNAME = "lastname"
}
}
}
UserDBHelper class
package com.iliyadev.usermanagement.db.helper
import android.annotation.SuppressLint
import android.content.ContentValues
import android.content.Context
import android.database.Cursor
import android.database.sqlite.SQLiteDatabase
import android.database.sqlite.SQLiteOpenHelper
import android.widget.Toast
import com.iliyadev.usermanagement.db.DBContract
import com.iliyadev.usermanagement.models.User
import java.lang.Exception
class UserDBHelper(contex: Context) :
SQLiteOpenHelper(contex, DATABASE_NAME, null, DATABASE_VERSION) {
override fun onCreate(db: SQLiteDatabase?) {
db?.execSQL(SQL_CREATE_QUERY)
}
override fun onUpgrade(db: SQLiteDatabase?, oldVersion: Int, newVersion: Int) {
db?.execSQL(SQL_DELETE_QUERY)
onCreate(db)
}
fun insertUser(user: User): Boolean {
try {
val db = writableDatabase
val values = ContentValues()
values.put(DBContract.UserEntity.COLUMN_USERNAME, user.userName)
values.put(DBContract.UserEntity.COLUMN_FIRSTNAME, user.firstName)
values.put(DBContract.UserEntity.COLUMN_LASTNAME, user.lastName)
db.insert(DBContract.UserEntity.TABLE_NAME, null, values)
return true
} catch (e: Exception) {
return false
}
}
@SuppressLint("Recycle", "Range")
fun getAllUsers(): ArrayList<User> {
var users = ArrayList<User>()
var db = readableDatabase
var cursor: Cursor? = null
try {
cursor = db.rawQuery("SELECT * FROM ${DBContract.UserEntity.TABLE_NAME}", null)
} catch (e: Exception) {
db.execSQL(SQL_CREATE_QUERY)
return ArrayList()
}
var username: String
var firstName: String
var lastName: String
if (cursor.moveToFirst()) {
while (!cursor.isAfterLast) {
username =
cursor.getString(cursor.getColumnIndex(DBContract.UserEntity.COLUMN_USERNAME))
firstName =
cursor.getString(cursor.getColumnIndex(DBContract.UserEntity.COLUMN_FIRSTNAME))
lastName =
cursor.getString(cursor.getColumnIndex(DBContract.UserEntity.COLUMN_LASTNAME))
users.add(User(username, firstName, lastName))
cursor.moveToNext()
}
}
return users
}
companion object {
const val DATABASE_VERSION = 1
const val DATABASE_NAME = "UserManagement.db"
private var SQL_CREATE_QUERY = "CREATE TABLE ${DBContract.UserEntity.TABLE_NAME} " +
"(${DBContract.UserEntity.COLUMN_USERNAME} TEXT PRIMARY KEY," +
"${DBContract.UserEntity.COLUMN_FIRSTNAME} TEXT," +
"${DBContract.UserEntity.COLUMN_LASTNAME} TEXT )"
private var SQL_DELETE_QUERY = "DROP TABLE IF EXISTS ${DBContract.UserEntity.TABLE_NAME}"
}
fun deleteUser(userName: String): Boolean {
val db = writableDatabase
val selection = "${DBContract.UserEntity.COLUMN_USERNAME} = ?"
val selectionArgs = arrayOf(userName)
val deletedRows = db.delete(DBContract.UserEntity.TABLE_NAME, selection, selectionArgs)
db.close()
return deletedRows > 0
}
}
activity_main.xml:
<?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"
android:padding="20dp"
tools:context=".MainActivity">
<TextView
android:id="@+id/textView2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:fontFamily="@font/advent_pro_bold"
android:text="@string/user_management"
android:textSize="30sp"
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.023" />
<EditText
android:id="@+id/edittext_username"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:ems="10"
android:hint="@string/username"
android:importantForAutofill="no"
android:inputType="text"
android:minHeight="48dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.507"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/textView2"
app:layout_constraintVertical_bias="0.056"
tools:ignore="LabelFor,VisualLintTextFieldSize" />
<EditText
android:id="@+id/edittext_firstname"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:ems="10"
android:hint="@string/firstname"
android:importantForAutofill="no"
android:inputType="text"
android:minHeight="48dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.6"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/textView2"
app:layout_constraintVertical_bias="0.176"
tools:ignore="LabelFor,VisualLintTextFieldSize" />
<EditText
android:id="@+id/edittext_lastname"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:ems="10"
android:hint="@string/lastname"
android:importantForAutofill="no"
android:inputType="text"
android:minHeight="48dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/textView2"
app:layout_constraintVertical_bias="0.302"
tools:ignore="LabelFor,VisualLintTextFieldSize" />
<Button
android:id="@+id/button_adduser"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Add User"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toStartOf="parent" />
<Button
android:id="@+id/button_deleteuser"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Delete User"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent" />
<ListView
android:id="@+id/listView"
android:layout_width="363dp"
android:layout_height="296dp"
android:layout_marginTop="28dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/edittext_lastname"
app:layout_constraintVertical_bias="0.009" />
</androidx.constraintlayout.widget.ConstraintLayout>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment