diff --git a/app/src/main/java/com/daominh/quickmem/AddFlashCardActivity.kt b/app/src/main/java/com/daominh/quickmem/AddFlashCardActivity.kt index 1e2cb8d..33d45ad 100644 --- a/app/src/main/java/com/daominh/quickmem/AddFlashCardActivity.kt +++ b/app/src/main/java/com/daominh/quickmem/AddFlashCardActivity.kt @@ -66,5 +66,10 @@ class AddFlashCardActivity : AppCompatActivity() { return super.onOptionsItemSelected(item) } + override fun onResume() { + super.onResume() + setupRecyclerView() + } + } \ No newline at end of file diff --git a/app/src/main/java/com/daominh/quickmem/adapter/group/ClassSelectAdapter.kt b/app/src/main/java/com/daominh/quickmem/adapter/group/ClassSelectAdapter.kt new file mode 100644 index 0000000..d6e9428 --- /dev/null +++ b/app/src/main/java/com/daominh/quickmem/adapter/group/ClassSelectAdapter.kt @@ -0,0 +1,68 @@ +package com.daominh.quickmem.adapter.group + +import android.view.LayoutInflater +import android.view.ViewGroup +import android.widget.Toast +import androidx.appcompat.content.res.AppCompatResources +import androidx.recyclerview.widget.RecyclerView +import com.daominh.quickmem.adapter.folder.FolderSelectAdapter +import com.daominh.quickmem.data.dao.FolderDAO +import com.daominh.quickmem.data.dao.GroupDAO +import com.daominh.quickmem.data.model.Folder +import com.daominh.quickmem.data.model.Group +import com.daominh.quickmem.databinding.ItemSelectClassBinding + +class ClassSelectAdapter( + private val classList: ArrayList, + private val flashCardId: String +) : RecyclerView.Adapter() { + class ClassSelectViewHolder( + val binding: ItemSelectClassBinding + ) : RecyclerView.ViewHolder(binding.root) { + + } + + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ClassSelectViewHolder { + val layoutInflater = LayoutInflater.from(parent.context) + val binding = ItemSelectClassBinding.inflate(layoutInflater, parent, false) + return ClassSelectViewHolder(binding) + } + + override fun onBindViewHolder(holder: ClassSelectViewHolder, position: Int) { + val group = classList[position] + val groupDAO = GroupDAO(holder.itemView.context) + holder.binding.classNameTv.text = group.name + updateBackground(holder, group, groupDAO) + + holder.binding.cardView.setOnClickListener { + if (groupDAO.isFlashCardInClass(group.id, flashCardId)) { + groupDAO.removeFlashCardFromClass(group.id, flashCardId) + } else { + groupDAO.addFlashCardToClass(group.id, flashCardId) + } + updateBackground(holder, group, groupDAO) + } + + + } + + override fun getItemCount(): Int { + return classList.size + } + + private fun updateBackground(holder: ClassSelectViewHolder, group: Group, groupDAO: GroupDAO) { + if (groupDAO.isFlashCardInClass(group.id, flashCardId)) { + holder.binding.cardView.background = + AppCompatResources.getDrawable( + holder.itemView.context, + com.daominh.quickmem.R.drawable.background_select + ) + } else { + holder.binding.cardView.background = + AppCompatResources.getDrawable( + holder.itemView.context, + com.daominh.quickmem.R.drawable.background_unselect + ) + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/daominh/quickmem/data/dao/GroupDAO.java b/app/src/main/java/com/daominh/quickmem/data/dao/GroupDAO.java index 83576d6..3489845 100644 --- a/app/src/main/java/com/daominh/quickmem/data/dao/GroupDAO.java +++ b/app/src/main/java/com/daominh/quickmem/data/dao/GroupDAO.java @@ -131,7 +131,9 @@ public int getNumberFlashCardInClass(String id) { public ArrayList getAllClasses() { ArrayList classes = new ArrayList<>(); sqLiteDatabase = qmDatabaseHelper.getWritableDatabase(); - Cursor cursor = sqLiteDatabase.query(QMDatabaseHelper.TABLE_CLASSES, null, null, null, null, null, null); + Cursor cursor = sqLiteDatabase.query( + QMDatabaseHelper.TABLE_CLASSES, null, null, null, null, null, null + ); if (cursor.moveToFirst()) { do { Group group = new Group(); @@ -171,6 +173,45 @@ public long addFlashCardToClass(String class_id, String flashcard_id) { return result; } + //remove flashcard from class + public long removeFlashCardFromClass(String class_id, String flashcard_id) { + sqLiteDatabase = qmDatabaseHelper.getWritableDatabase(); + + long result = 0; + + //delete + try { + result = sqLiteDatabase.delete( + QMDatabaseHelper.TABLE_CLASSES_FLASHCARDS, + "class_id = ? AND flashcard_id = ?", + new String[]{class_id, flashcard_id} + ); + } finally { + sqLiteDatabase.close(); + } + return result; + } + + //check if flashcard is in class + public boolean isFlashCardInClass(String class_id, String flashcard_id) { + sqLiteDatabase = qmDatabaseHelper.getWritableDatabase(); + + boolean result = false; + + String query = "SELECT * FROM " + + QMDatabaseHelper.TABLE_CLASSES_FLASHCARDS + + " WHERE " + QMDatabaseHelper.TABLE_CLASSES_FLASHCARDS + ".class_id = ? AND " + + QMDatabaseHelper.TABLE_CLASSES_FLASHCARDS + ".flashcard_id = ?"; + Cursor cursor = sqLiteDatabase.rawQuery(query, new String[]{class_id, flashcard_id}); + if (cursor.moveToFirst()) { + result = true; + } + cursor.close(); + sqLiteDatabase.close(); + return result; + } + + //get classes by id public Group getClassById(String id) { Group group = new Group(); diff --git a/app/src/main/java/com/daominh/quickmem/ui/activities/group/AddToClassActivity.kt b/app/src/main/java/com/daominh/quickmem/ui/activities/group/AddToClassActivity.kt index 4e0404f..64f1237 100644 --- a/app/src/main/java/com/daominh/quickmem/ui/activities/group/AddToClassActivity.kt +++ b/app/src/main/java/com/daominh/quickmem/ui/activities/group/AddToClassActivity.kt @@ -1,12 +1,81 @@ package com.daominh.quickmem.ui.activities.group +import android.content.Intent import androidx.appcompat.app.AppCompatActivity import android.os.Bundle +import android.view.Menu +import android.view.MenuItem +import android.widget.Toast +import androidx.recyclerview.widget.LinearLayoutManager import com.daominh.quickmem.R +import com.daominh.quickmem.adapter.group.ClassSelectAdapter +import com.daominh.quickmem.data.dao.GroupDAO +import com.daominh.quickmem.databinding.ActivityAddToClassBinding +import com.daominh.quickmem.preferen.UserSharePreferences +import com.daominh.quickmem.ui.activities.create.CreateClassActivity class AddToClassActivity : AppCompatActivity() { + private val binding by lazy { + ActivityAddToClassBinding.inflate(layoutInflater) + } + private val classDAO by lazy { + GroupDAO(this) + } + override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) - setContentView(R.layout.activity_add_to_class) + setContentView(binding.root) + + setupToolbar() + setupNewClassIntent() + setupRecyclerView() + } + + private fun setupToolbar() { + setSupportActionBar(binding.toolbar) + binding.toolbar.setNavigationOnClickListener { + onBackPressedDispatcher.onBackPressed() + } + } + + private fun setupNewClassIntent() { + binding.createNewClassTv.setOnClickListener{ + Intent(this, CreateClassActivity::class.java).also { + startActivity(it) + } + } + } + + private fun setupRecyclerView() { + val userSharePreferences = UserSharePreferences(this) + val classList = classDAO.getClassesOwnedByUser(userSharePreferences.id) + val adapter = ClassSelectAdapter(classList, intent.getStringExtra("flashcard_id")!!) + val linearLayoutManager = LinearLayoutManager(this, LinearLayoutManager.VERTICAL, false) + binding.classRv.layoutManager = linearLayoutManager + binding.classRv.adapter = adapter + adapter.notifyDataSetChanged() + } + + override fun onCreateOptionsMenu(menu: Menu?): Boolean { + menuInflater.inflate(R.menu.menu_tick, menu) + return true } + + override fun onOptionsItemSelected(item: MenuItem): Boolean { + return when (item.itemId) { + R.id.done -> { + onBackPressedDispatcher.onBackPressed() + Toast.makeText(this, "Done", Toast.LENGTH_SHORT).show() + true + } + + else -> super.onOptionsItemSelected(item) + } + } + + override fun onResume() { + super.onResume() + setupRecyclerView() + } + } \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_home.xml b/app/src/main/res/layout/fragment_home.xml index 435c456..eca174d 100644 --- a/app/src/main/res/layout/fragment_home.xml +++ b/app/src/main/res/layout/fragment_home.xml @@ -227,6 +227,7 @@ android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginTop="15dp" + android:visibility="gone" android:background="@drawable/background_cardnew" android:paddingVertical="@dimen/_15ssp" android:paddingStart="18dp" diff --git a/app/src/main/res/layout/item_class.xml b/app/src/main/res/layout/item_class.xml index 68a3c5b..8e22046 100644 --- a/app/src/main/res/layout/item_class.xml +++ b/app/src/main/res/layout/item_class.xml @@ -14,7 +14,7 @@ android:layout_width="match_parent" android:layout_height="wrap_content" android:background="@color/white_gray" - android:paddingBottom="@dimen/_5dp"> + android:padding="@dimen/_10dp"> @@ -27,7 +28,7 @@ android:textSize="@dimen/_20ssp" android:textStyle="bold" app:layout_constraintStart_toStartOf="parent" - app:layout_constraintTop_toTopOf="parent" /> + app:layout_constraintTop_toTopOf="parent"/> + app:layout_constraintTop_toTopOf="parent"/> + app:layout_constraintTop_toBottomOf="@id/class_name_tv"/> + app:layout_constraintTop_toTopOf="@id/set_iv"/> + app:layout_constraintTop_toBottomOf="@id/set_iv"/> + app:layout_constraintTop_toTopOf="@id/user_iv"/> diff --git a/app/src/main/res/layout/item_folder_copy.xml b/app/src/main/res/layout/item_folder_copy.xml index c06ba64..61028d1 100644 --- a/app/src/main/res/layout/item_folder_copy.xml +++ b/app/src/main/res/layout/item_folder_copy.xml @@ -6,6 +6,7 @@ app:cardPreventCornerOverlap="false" app:cardUseCompatPadding="true" android:layout_gravity="center|top" + android:layout_marginBottom="@dimen/_10dp" android:background="@color/white_gray" android:elevation="@dimen/_8ssp" app:cardCornerRadius="@dimen/_10dp"> diff --git a/app/src/main/res/layout/item_select_class.xml b/app/src/main/res/layout/item_select_class.xml new file mode 100644 index 0000000..f62d040 --- /dev/null +++ b/app/src/main/res/layout/item_select_class.xml @@ -0,0 +1,45 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/item_set_copy.xml b/app/src/main/res/layout/item_set_copy.xml index f8bd6cb..560160d 100644 --- a/app/src/main/res/layout/item_set_copy.xml +++ b/app/src/main/res/layout/item_set_copy.xml @@ -1,87 +1,85 @@ + xmlns:app="http://schemas.android.com/apk/res-auto" + android:id="@+id/set_cv" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:background="@color/white_gray" + android:elevation="@dimen/_8ssp" + app:cardCornerRadius="@dimen/_10dp" + android:layout_marginBottom="@dimen/_10dp" + app:cardPreventCornerOverlap="false" + app:cardUseCompatPadding="true"> + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:background="@color/white_gray"> + android:id="@+id/set_name_tv" + android:layout_width="0dp" + android:layout_height="wrap_content" + android:layout_marginHorizontal="16dp" + android:layout_marginTop="16dp" + android:layout_marginBottom="16dp" + android:ellipsize="end" + android:maxLines="2" + android:text="@string/set_name" + android:textColor="@color/dark_gray" + android:textSize="@dimen/_20sp" + android:textStyle="bold" + app:layout_constraintEnd_toEndOf="parent" + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintTop_toTopOf="parent"/> + android:id="@+id/term_count_tv" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_marginVertical="@dimen/_8ssp" + android:text="@string/_1_term" + android:textColor="@color/gray" + android:textStyle="bold" + app:layout_constraintStart_toStartOf="@id/set_name_tv" + app:layout_constraintTop_toBottomOf="@id/set_name_tv"/> + android:id="@+id/created_date_tv" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_marginHorizontal="@dimen/_10dp" + android:layout_marginVertical="@dimen/_8ssp" + android:text="@string/_12_07_2023" + android:textColor="@color/gray" + android:textStyle="bold" + app:layout_constraintStart_toEndOf="@id/term_count_tv" + app:layout_constraintTop_toBottomOf="@id/set_name_tv"/> + android:id="@+id/avatar_iv" + android:layout_width="@dimen/_30ssp" + android:layout_height="@dimen/_30ssp" + android:layout_marginTop="@dimen/_10dp" + android:layout_marginBottom="@dimen/_8ssp" + android:background="@color/white_gray" + android:contentDescription="@string/avatar" + android:src="@mipmap/ic_avatar_test" + app:layout_constraintBottom_toBottomOf="parent" + app:layout_constraintStart_toStartOf="@id/set_name_tv" + app:layout_constraintTop_toBottomOf="@id/term_count_tv"/> + android:id="@+id/user_name_tv" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_marginHorizontal="@dimen/_8ssp" + android:text="@string/user_name" + android:textColor="@color/celestial_blue" + android:textStyle="bold" + app:layout_constraintBottom_toBottomOf="@id/avatar_iv" + app:layout_constraintStart_toEndOf="@id/avatar_iv" + app:layout_constraintTop_toTopOf="@id/avatar_iv"/>