Created
November 23, 2023 15:44
-
-
Save amoozeshbebin/b6d78ee0ae66717a374b8acbcbc74a1d to your computer and use it in GitHub Desktop.
UserManagementdb
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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