diff --git a/app/src/main/java/com/daominh/quickmem/AddFlashCardActivity.kt b/app/src/main/java/com/daominh/quickmem/AddFlashCardActivity.kt index 3bb602e..cad6a84 100644 --- a/app/src/main/java/com/daominh/quickmem/AddFlashCardActivity.kt +++ b/app/src/main/java/com/daominh/quickmem/AddFlashCardActivity.kt @@ -13,7 +13,6 @@ import com.daominh.quickmem.data.model.FlashCard import com.daominh.quickmem.data.model.Folder import com.daominh.quickmem.databinding.ActivityAddFlashCardBinding import com.daominh.quickmem.preferen.UserSharePreferences -import com.google.android.material.tabs.TabLayoutMediator class AddFlashCardActivity : AppCompatActivity() { private val binding by lazy { diff --git a/app/src/main/java/com/daominh/quickmem/adapter/CardAdapter.java b/app/src/main/java/com/daominh/quickmem/adapter/CardAdapter.java index b91f50f..eb65bef 100644 --- a/app/src/main/java/com/daominh/quickmem/adapter/CardAdapter.java +++ b/app/src/main/java/com/daominh/quickmem/adapter/CardAdapter.java @@ -2,12 +2,12 @@ import android.annotation.SuppressLint; import android.content.Context; -import android.speech.tts.TextToSpeech; import android.text.Editable; import android.text.TextWatcher; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; +import android.widget.EditText; import android.widget.Toast; import androidx.annotation.NonNull; import androidx.recyclerview.widget.RecyclerView; @@ -17,6 +17,7 @@ import org.jetbrains.annotations.NotNull; import java.util.ArrayList; +import java.util.function.BiConsumer; public class CardAdapter extends RecyclerView.Adapter { @@ -68,80 +69,8 @@ public void onBindViewHolder(@NonNull @NotNull CardAdapter.CardViewHolder holder } }); - holder.binding.termEt.addTextChangedListener(new TextWatcher() { - @Override - public void beforeTextChanged(CharSequence s, int start, int count, int after) { - card.setFront(s.toString()); - card.setBack(holder.binding.definitionEt.getText().toString()); - if (position < cards.size()) { - cards.set(position, card); - } else { - Toast.makeText(context, "wrong", Toast.LENGTH_SHORT).show(); - } - } - - @Override - public void onTextChanged(CharSequence s, int start, int before, int count) { - card.setFront(s.toString()); - card.setBack(holder.binding.definitionEt.getText().toString()); - - if (position < cards.size()) { - cards.set(position, card); - } else { - Toast.makeText(context, "wrong", Toast.LENGTH_SHORT).show(); - } - } - - @Override - public void afterTextChanged(Editable s) { - card.setFront(s.toString()); - card.setBack(holder.binding.definitionEt.getText().toString()); - - if (position < cards.size()) { - cards.set(position, card); - } else { - Toast.makeText(context, "wrong", Toast.LENGTH_SHORT).show(); - } - } - }); - - holder.binding.definitionEt.addTextChangedListener(new TextWatcher() { - @Override - public void beforeTextChanged(CharSequence s, int start, int count, int after) { - card.setFront(holder.binding.termEt.getText().toString()); - card.setBack(s.toString()); - - if (position < cards.size()) { - cards.set(position, card); - } else { - Toast.makeText(context, "wrong", Toast.LENGTH_SHORT).show(); - } - } - - @Override - public void onTextChanged(CharSequence s, int start, int before, int count) { - card.setFront(holder.binding.termEt.getText().toString()); - card.setBack(s.toString()); - - if (position < cards.size()) { - cards.set(position, card); - } else { - Toast.makeText(context, "wrong", Toast.LENGTH_SHORT).show(); - } - } - - @Override - public void afterTextChanged(Editable s) { - card.setFront(holder.binding.termEt.getText().toString()); - card.setBack(s.toString()); - - if (position < cards.size()) { - cards.set(position, card); - } else { - Toast.makeText(context, "wrong", Toast.LENGTH_SHORT).show(); - } - } - }); + holder.binding.termEt.addTextChangedListener(createTextWatcher(card, holder.binding.termEt, Card::setFront)); + holder.binding.definitionEt.addTextChangedListener(createTextWatcher(card, holder.binding.definitionEt, Card::setBack)); } @Override @@ -163,6 +92,34 @@ public CardViewHolder(@NonNull @NotNull View itemView) { this.binding = ItemCardAddBinding.bind(itemView); } } + private TextWatcher createTextWatcher(Card card, EditText editText, BiConsumer setter) { + return new TextWatcher() { + @Override + public void beforeTextChanged(CharSequence s, int start, int count, int after) { + updateCard(card, editText, setter); + } + + @Override + public void onTextChanged(CharSequence s, int start, int before, int count) { + updateCard(card, editText, setter); + } + + @Override + public void afterTextChanged(Editable s) { + updateCard(card, editText, setter); + } + }; + } + + private void updateCard(Card card, EditText editText, BiConsumer setter) { + setter.accept(card, editText.getText().toString()); + int position = cards.indexOf(card); + if (position != -1) { + cards.set(position, card); + } else { + Toast.makeText(context, "wrong", Toast.LENGTH_SHORT).show(); + } + } } diff --git a/app/src/main/java/com/daominh/quickmem/adapter/CardLeanAdapter.kt b/app/src/main/java/com/daominh/quickmem/adapter/CardLeanAdapter.kt index 081d2cf..a45891f 100644 --- a/app/src/main/java/com/daominh/quickmem/adapter/CardLeanAdapter.kt +++ b/app/src/main/java/com/daominh/quickmem/adapter/CardLeanAdapter.kt @@ -19,7 +19,7 @@ class CardLeanAdapter( override fun onBindViewHolder(holder: ViewHolder, position: Int) { val card = cardList[position] - holder.bind(card, position) + holder.bind(card) } override fun getItemCount(): Int { @@ -41,7 +41,7 @@ class CardLeanAdapter( inner class ViewHolder(private val binding: ItemLearnSetBinding) : RecyclerView.ViewHolder(binding.root) { - fun bind(card: Card, position: Int) { + fun bind(card: Card) { binding.backTv.text = card.front binding.frontTv.text = card.back binding.cardViewFlip.setFlipTypeFromRight() diff --git a/app/src/main/java/com/daominh/quickmem/adapter/FolderAdapter.java b/app/src/main/java/com/daominh/quickmem/adapter/FolderAdapter.java index 68b8ff1..9cef212 100644 --- a/app/src/main/java/com/daominh/quickmem/adapter/FolderAdapter.java +++ b/app/src/main/java/com/daominh/quickmem/adapter/FolderAdapter.java @@ -5,7 +5,6 @@ import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; -import android.widget.Toast; import androidx.annotation.NonNull; import androidx.recyclerview.widget.RecyclerView; import com.daominh.quickmem.data.model.Folder; @@ -50,7 +49,6 @@ public void onBindViewHolder(@NonNull @NotNull FolderAdapter.FolderViewHolder ho Intent intent = new Intent(context, ViewFolderActivity.class); intent.putExtra("id", folder.getId()); context.startActivity(intent); - Toast.makeText(context, folder.getId()+"", Toast.LENGTH_SHORT).show(); }); } diff --git a/app/src/main/java/com/daominh/quickmem/adapter/MyViewPagerAdapter.java b/app/src/main/java/com/daominh/quickmem/adapter/MyViewPagerAdapter.java index 5cb6ed2..efc288d 100644 --- a/app/src/main/java/com/daominh/quickmem/adapter/MyViewPagerAdapter.java +++ b/app/src/main/java/com/daominh/quickmem/adapter/MyViewPagerAdapter.java @@ -18,16 +18,11 @@ public MyViewPagerAdapter(@NonNull FragmentManager fm, int behavior) { @NonNull @Override public Fragment getItem(int position) { - switch (position){ - case 0: - return new StudySetsFragment(); - case 1: - return new FoldersFragment(); - case 2: - return new MyClassesFragment(); - default: - return new StudySetsFragment(); - } + return switch (position) { + case 1 -> new FoldersFragment(); + case 2 -> new MyClassesFragment(); + default -> new StudySetsFragment(); + }; } @Override @@ -38,18 +33,11 @@ public int getCount() { @Nullable @Override public CharSequence getPageTitle(int position) { - String title = ""; - switch (position){ - case 0: - title = "Study sets"; - break; - case 1: - title = "Folders"; - break; - case 2: - title = "Classes"; - break; - } - return title; + return switch (position) { + case 0 -> "Study sets"; + case 1 -> "Folders"; + case 2 -> "Classes"; + default -> ""; + }; } } \ No newline at end of file diff --git a/app/src/main/java/com/daominh/quickmem/adapter/UsersAdapter.java b/app/src/main/java/com/daominh/quickmem/adapter/UsersAdapter.java index 04220ed..3143703 100644 --- a/app/src/main/java/com/daominh/quickmem/adapter/UsersAdapter.java +++ b/app/src/main/java/com/daominh/quickmem/adapter/UsersAdapter.java @@ -1,8 +1,8 @@ package com.daominh.quickmem.adapter; +import android.annotation.SuppressLint; import android.content.Context; import android.graphics.Paint; -import android.graphics.Picture; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; @@ -21,7 +21,7 @@ public class UsersAdapter extends RecyclerView.Adapter { private final Context context; private final List users; - private UserDAO userDAO; + private final UserDAO userDAO; public UsersAdapter(Context context, List users) { this.context = context; @@ -37,6 +37,7 @@ public UsersViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewTyp return new UsersViewHolder(binding.getRoot()); } + @SuppressLint("SetTextI18n") @Override public void onBindViewHolder(@NonNull UsersViewHolder holder, int position) { User user = users.get(position); @@ -66,7 +67,7 @@ public void onBindViewHolder(@NonNull UsersViewHolder holder, int position) { holder.binding.userNameTv.setText(user.getUsername()); holder.binding.emailTv.setText("Email: " + user.getEmail()); - holder.binding.roleTv.setText("Role: " + (role == 1 ? "Giáo viên" : "Học sinh")); + holder.binding.roleTv.setText("Role: " + (role == 1 ? "Teacher" : "Student")); } else { holder.binding.getRoot().setVisibility(View.GONE); } diff --git a/app/src/main/java/com/daominh/quickmem/data/dao/FolderDAO.java b/app/src/main/java/com/daominh/quickmem/data/dao/FolderDAO.java index 5e5d5c4..67b74ac 100644 --- a/app/src/main/java/com/daominh/quickmem/data/dao/FolderDAO.java +++ b/app/src/main/java/com/daominh/quickmem/data/dao/FolderDAO.java @@ -206,4 +206,28 @@ public long deleteFolder(String folder_id) { return result; } + //update folder + public long updateFolder(Folder folder) { + sqLiteDatabase = qmDatabaseHelper.getWritableDatabase(); + + long result = 0; + + ContentValues contentValues = new ContentValues(); + + //put + contentValues.put("name", folder.getName()); + contentValues.put("description", folder.getDescription()); + contentValues.put("updated_at", folder.getUpdated_at()); + + //update + try { + result = sqLiteDatabase.update(QMDatabaseHelper.TABLE_FOLDERS, contentValues, "id = ?", new String[]{folder.getId()}); + } catch (SQLException e) { + Log.e("FolderDAO", "updateFolder: " + e); + } finally { + sqLiteDatabase.close(); + } + return result; + } + } diff --git a/app/src/main/java/com/daominh/quickmem/ui/activities/create/CreateFolderActivity.java b/app/src/main/java/com/daominh/quickmem/ui/activities/create/CreateFolderActivity.java index a6411e9..a50df2b 100644 --- a/app/src/main/java/com/daominh/quickmem/ui/activities/create/CreateFolderActivity.java +++ b/app/src/main/java/com/daominh/quickmem/ui/activities/create/CreateFolderActivity.java @@ -1,11 +1,14 @@ package com.daominh.quickmem.ui.activities.create; import android.annotation.SuppressLint; +import android.content.Intent; +import android.os.Build; import android.view.Menu; import android.view.MenuItem; import android.view.View; import android.widget.Toast; import androidx.annotation.NonNull; +import androidx.annotation.RequiresApi; import androidx.appcompat.app.AppCompatActivity; import android.os.Bundle; import com.daominh.quickmem.R; @@ -13,6 +16,7 @@ import com.daominh.quickmem.data.model.Folder; import com.daominh.quickmem.databinding.ActivityCreateFolderBinding; import com.daominh.quickmem.preferen.UserSharePreferences; +import com.daominh.quickmem.ui.activities.folder.ViewFolderActivity; import java.text.SimpleDateFormat; import java.time.LocalDate; @@ -31,7 +35,7 @@ protected void onCreate(Bundle savedInstanceState) { setSupportActionBar(binding.toolbar); - binding.toolbar.setNavigationOnClickListener(v -> onBackPressed()); + binding.toolbar.setNavigationOnClickListener(v -> getOnBackPressedDispatcher().onBackPressed()); } @@ -63,7 +67,8 @@ public boolean onOptionsItemSelected(@NonNull MenuItem item) { FolderDAO folderDAO = new FolderDAO(this); if (folderDAO.insertFolder(folder) > 0) { Toast.makeText(this, "Folder created", Toast.LENGTH_SHORT).show(); - onBackPressed(); + startActivity(new Intent(this, ViewFolderActivity.class).putExtra("id", folderId)); + finish(); } else { Toast.makeText(this, "Folder not created", Toast.LENGTH_SHORT).show(); } @@ -75,18 +80,13 @@ public boolean onOptionsItemSelected(@NonNull MenuItem item) { private String getCurrentDate() { if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.O) { - LocalDate currentDate = LocalDate.now(); - DateTimeFormatter formatter = DateTimeFormatter.ofPattern("dd/MM/yyyy"); - return currentDate.format(formatter); + return getCurrentDateNewApi(); } else { - // Handle case for Android versions less than Oreo - // Here we're using SimpleDateFormat which is available on all Android versions - @SuppressLint("SimpleDateFormat") - SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy"); - return sdf.format(new Date()); + return getCurrentDateOldApi(); } } + private String genUUID() { return java.util.UUID.randomUUID().toString(); } @@ -96,4 +96,17 @@ private String getUser_id() { return userSharePreferences.getId(); } + @RequiresApi(api = Build.VERSION_CODES.O) + private String getCurrentDateNewApi() { + LocalDate currentDate = LocalDate.now(); + DateTimeFormatter formatter = DateTimeFormatter.ofPattern("dd/MM/yyyy"); + return currentDate.format(formatter); + } + + private String getCurrentDateOldApi() { + @SuppressLint("SimpleDateFormat") + SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy"); + return sdf.format(new Date()); + } + } \ No newline at end of file diff --git a/app/src/main/java/com/daominh/quickmem/ui/activities/create/CreateSetActivity.java b/app/src/main/java/com/daominh/quickmem/ui/activities/create/CreateSetActivity.java index 704f147..2147aa4 100644 --- a/app/src/main/java/com/daominh/quickmem/ui/activities/create/CreateSetActivity.java +++ b/app/src/main/java/com/daominh/quickmem/ui/activities/create/CreateSetActivity.java @@ -6,12 +6,14 @@ import android.graphics.Color; import android.graphics.drawable.ColorDrawable; import android.graphics.drawable.Drawable; +import android.os.Build; import android.view.Menu; import android.view.MenuItem; import android.view.View; import android.widget.Toast; import androidx.annotation.NonNull; +import androidx.annotation.RequiresApi; import androidx.appcompat.app.ActionBar; import androidx.appcompat.app.AppCompatActivity; @@ -64,7 +66,7 @@ protected void onCreate(Bundle savedInstanceState) { setContentView(view); setSupportActionBar(binding.toolbar); - binding.toolbar.setNavigationOnClickListener(v -> onBackPressed()); + binding.toolbar.setNavigationOnClickListener(v -> getOnBackPressedDispatcher().onBackPressed()); if (binding.subjectEt.getText().toString().isEmpty()) { @@ -119,7 +121,7 @@ public boolean onMove(@NonNull @NotNull RecyclerView recyclerView, @NonNull @Not @Override public void onSwiped(RecyclerView.ViewHolder viewHolder, int direction) { - int position = viewHolder.getAdapterPosition(); + int position = viewHolder.getBindingAdapterPosition(); // Backup of removed item for undo purpose Card deletedItem = cards.get(position); @@ -128,7 +130,7 @@ public void onSwiped(RecyclerView.ViewHolder viewHolder, int direction) { cards.remove(position); cardAdapter.notifyItemRemoved(position); - // Showing Snack bar with Undo option + // Showing Snack bar with an Undo option Snackbar snackbar = Snackbar.make(binding.getRoot(), "Item was removed from the list.", Snackbar.LENGTH_LONG); snackbar.setAction("UNDO", view -> { @@ -222,13 +224,13 @@ private void saveChanges() { String front = card.getFront(); String back = card.getBack(); - if (front.isEmpty()) { + if (front == null || front.isEmpty()) { binding.cardsLv.requestFocus(); Toast.makeText(this, "Please enter front", Toast.LENGTH_SHORT).show(); return; } - if (back.isEmpty()) { + if (back == null || back.isEmpty()) { binding.cardsLv.requestFocus(); Toast.makeText(this, "Please enter back", Toast.LENGTH_SHORT).show(); return; @@ -288,15 +290,9 @@ private void updateToolbarTitle() { private String getCurrentDate() { if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.O) { - LocalDate currentDate = LocalDate.now(); - DateTimeFormatter formatter = DateTimeFormatter.ofPattern("dd/MM/yyyy"); - return currentDate.format(formatter); + return getCurrentDateNewApi(); } else { - // Handle a case for Android versions less than Oreo - // Here we're using SimpleDateFormat which is available on all Android versions - @SuppressLint("SimpleDateFormat") - SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy"); - return sdf.format(new Date()); + return getCurrentDateOldApi(); } } @@ -308,5 +304,16 @@ private String getUser_id() { userSharePreferences = new UserSharePreferences(this); return userSharePreferences.getId(); } + @RequiresApi(api = Build.VERSION_CODES.O) + private String getCurrentDateNewApi() { + LocalDate currentDate = LocalDate.now(); + DateTimeFormatter formatter = DateTimeFormatter.ofPattern("dd/MM/yyyy"); + return currentDate.format(formatter); + } + private String getCurrentDateOldApi() { + @SuppressLint("SimpleDateFormat") + SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy"); + return sdf.format(new Date()); + } } \ No newline at end of file diff --git a/app/src/main/java/com/daominh/quickmem/ui/activities/folder/AddToFolderActivity.kt b/app/src/main/java/com/daominh/quickmem/ui/activities/folder/AddToFolderActivity.kt index eca694b..68ee167 100644 --- a/app/src/main/java/com/daominh/quickmem/ui/activities/folder/AddToFolderActivity.kt +++ b/app/src/main/java/com/daominh/quickmem/ui/activities/folder/AddToFolderActivity.kt @@ -1,12 +1,51 @@ package com.daominh.quickmem.ui.activities.folder +import android.content.Intent import androidx.appcompat.app.AppCompatActivity import android.os.Bundle +import android.view.Menu +import android.view.MenuItem import com.daominh.quickmem.R +import com.daominh.quickmem.adapter.SetFolderViewAdapter +import com.daominh.quickmem.data.dao.FolderDAO +import com.daominh.quickmem.databinding.ActivityAddToFolderBinding +import com.daominh.quickmem.preferen.UserSharePreferences +import com.daominh.quickmem.ui.activities.create.CreateFolderActivity class AddToFolderActivity : AppCompatActivity() { + private val binding by lazy { ActivityAddToFolderBinding.inflate(layoutInflater) } + private val folderDAO by lazy { FolderDAO(this) } + private lateinit var adapter: SetFolderViewAdapter override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) - setContentView(R.layout.activity_add_to_folder) + setContentView(binding.root) + + setSupportActionBar(binding.toolbar) + supportActionBar?.setDisplayHomeAsUpEnabled(true) + binding.toolbar.setNavigationOnClickListener { + onBackPressedDispatcher.onBackPressed() + } + + val userSharePreferences = UserSharePreferences(this) + val folders = folderDAO.getAllFolderByUserId(userSharePreferences.id) + + + + binding.createNewFolderTv.setOnClickListener{ + startActivity(Intent(this, CreateFolderActivity::class.java)) + } + + } + + override fun onPrepareOptionsMenu(menu: Menu?): Boolean { + menuInflater.inflate(R.menu.menu_tick, menu) + return true + } + + override fun onOptionsItemSelected(item: MenuItem): Boolean { + if (item.itemId == R.id.done) { + val flashCardId = intent.getStringExtra("flashcard_id") + } + return super.onOptionsItemSelected(item) } } \ No newline at end of file diff --git a/app/src/main/java/com/daominh/quickmem/ui/activities/folder/ViewFolderActivity.kt b/app/src/main/java/com/daominh/quickmem/ui/activities/folder/ViewFolderActivity.kt index a026173..15d6125 100644 --- a/app/src/main/java/com/daominh/quickmem/ui/activities/folder/ViewFolderActivity.kt +++ b/app/src/main/java/com/daominh/quickmem/ui/activities/folder/ViewFolderActivity.kt @@ -1,5 +1,7 @@ package com.daominh.quickmem.ui.activities.folder +import android.annotation.SuppressLint +import android.app.AlertDialog import android.app.Dialog import android.content.Intent import androidx.appcompat.app.AppCompatActivity @@ -15,6 +17,7 @@ import com.daominh.quickmem.adapter.SetFolderViewAdapter import com.daominh.quickmem.data.dao.FolderDAO import com.daominh.quickmem.data.model.FlashCard import com.daominh.quickmem.databinding.ActivityViewFolderBinding +import com.daominh.quickmem.databinding.DialogCreateFolderBinding import com.daominh.quickmem.preferen.UserSharePreferences import com.kennyc.bottomsheet.BottomSheetListener import com.kennyc.bottomsheet.BottomSheetMenuDialogFragment @@ -77,12 +80,51 @@ class ViewFolderActivity : AppCompatActivity(), BottomSheetListener { } + @SuppressLint("SetTextI18n") override fun onSheetItemSelected(bottomSheet: BottomSheetMenuDialogFragment, item: MenuItem, `object`: Any?) { when (item.itemId) { R.id.edit_folder -> { + val builder = AlertDialog.Builder(this) + val dialogBinding = DialogCreateFolderBinding.inflate(layoutInflater) + //set data + val id = intent.getStringExtra("id") + val folder = folderDAO.getFolderById(id) + dialogBinding.folderEt.setText(folder.name) + dialogBinding.descriptionEt.setText(folder.description) + + builder.setView(dialogBinding.root) + builder.setCancelable(true) + val dialog = builder.create() + + dialogBinding.folderEt.requestFocus() + dialogBinding.cancelTv.setOnClickListener { + dialog.dismiss() + } + dialogBinding.okTv.setOnClickListener { + val name = dialogBinding.folderEt.text.toString() + val description = dialogBinding.descriptionEt.text.toString() + + if (name.isEmpty()) { + Toast.makeText(this, "Please enter folder name", Toast.LENGTH_SHORT).show() + } else { + folder.name = name + folder.description = description + if (folderDAO.updateFolder(folder) > 0L) { + Toast.makeText(this, "Update folder successfully", Toast.LENGTH_SHORT).show() + //refresh data folder + binding.folderNameTv.text = folder.name + binding.termCountTv.text = folderDAO.getAllFlashCardByFolderId(id).size.toString() + " flashcards" + dialog.dismiss() + } else { + Toast.makeText(this, "Update folder failed", Toast.LENGTH_SHORT).show() + dialog.dismiss() + onBackPressedDispatcher.onBackPressed() + } + } + } + dialog.show() } - R.id.delete_folder -> { PopupDialog.getInstance(this) @@ -95,7 +137,7 @@ class ViewFolderActivity : AppCompatActivity(), BottomSheetListener { object : OnDialogButtonClickListener() { override fun onPositiveClicked(dialog: Dialog?) { super.onPositiveClicked(dialog) - if (folderDAO.deleteFolder(intent.getStringExtra("id"))> 0L) { + if (folderDAO.deleteFolder(intent.getStringExtra("id")) > 0L) { PopupDialog.getInstance(this@ViewFolderActivity) .setStyle(Styles.SUCCESS) .setHeading(getString(R.string.success)) @@ -159,6 +201,9 @@ class ViewFolderActivity : AppCompatActivity(), BottomSheetListener { binding.setRv.layoutManager = linearLayoutManager binding.setRv.adapter = adapter adapter.notifyDataSetChanged() + + + } diff --git a/app/src/main/java/com/daominh/quickmem/ui/fragments/UsersFragment.java b/app/src/main/java/com/daominh/quickmem/ui/fragments/UsersFragment.java deleted file mode 100644 index 6fd4e3a..0000000 --- a/app/src/main/java/com/daominh/quickmem/ui/fragments/UsersFragment.java +++ /dev/null @@ -1,103 +0,0 @@ -package com.daominh.quickmem.ui.fragments; - -import android.app.AlertDialog; -import android.content.DialogInterface; -import android.content.Intent; -import android.os.Bundle; - -import androidx.annotation.NonNull; -import androidx.annotation.Nullable; -import androidx.appcompat.app.AppCompatActivity; -import androidx.fragment.app.Fragment; -import androidx.recyclerview.widget.LinearLayoutManager; -import androidx.recyclerview.widget.RecyclerView; - -import android.view.LayoutInflater; -import android.view.Menu; -import android.view.MenuInflater; -import android.view.MenuItem; -import android.view.View; -import android.view.ViewGroup; - -import com.daominh.quickmem.R; -import com.daominh.quickmem.adapter.UsersAdapter; -import com.daominh.quickmem.data.dao.UserDAO; -import com.daominh.quickmem.data.model.User; -import com.daominh.quickmem.databinding.FragmentProfileBinding; -import com.daominh.quickmem.databinding.FragmentUsersBinding; -import com.daominh.quickmem.preferen.UserSharePreferences; -import com.daominh.quickmem.ui.activities.auth.signin.SignInActivity; -import com.daominh.quickmem.ui.activities.profile.SettingsActivity; - -import java.util.ArrayList; -import java.util.List; - -public class UsersFragment extends Fragment { - private FragmentUsersBinding binding; - private UserSharePreferences userSharePreferences; - private List listUsers; - private UserDAO userDAO; - private UsersAdapter usersAdapter; - - @Override - public void onCreate(@Nullable Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - userDAO = new UserDAO(requireActivity()); - } - - @Override - public View onCreateView(LayoutInflater inflater, ViewGroup container, - Bundle savedInstanceState) { - binding = FragmentUsersBinding.inflate(inflater, container, false); - AppCompatActivity activity = (AppCompatActivity) getActivity(); - assert activity != null; - activity.setSupportActionBar(binding.toolbar); - setHasOptionsMenu(true); - return binding.getRoot(); - } - - @Override - public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) { - super.onViewCreated(view, savedInstanceState); - listUsers = new ArrayList<>(); - for (User user : userDAO.getAllUser()) { - if (user.getRole() != 0) { - listUsers.add(user); - } - } - LinearLayoutManager linearLayoutManager = new LinearLayoutManager(requireActivity(), RecyclerView.VERTICAL, false); - binding.usersRv.setLayoutManager(linearLayoutManager); - usersAdapter = new UsersAdapter(requireActivity(), listUsers); - binding.usersRv.setAdapter(usersAdapter); - usersAdapter.notifyDataSetChanged(); - } - - @Override - public void onCreateOptionsMenu(@NonNull Menu menu, @NonNull MenuInflater inflater) { - inflater.inflate(R.menu.menu_setting_admin, menu); - super.onCreateOptionsMenu(menu, inflater); - } - - @Override - public boolean onOptionsItemSelected(@NonNull MenuItem item) { - int id = item.getItemId(); - if (id == R.id.log_out) { - AlertDialog.Builder builder = new AlertDialog.Builder(requireContext()); - builder.setTitle("Đăng xuất"); - builder.setMessage("Bạn có chắc chắn muốn đăng xuất?"); - builder.setPositiveButton("Đồng ý", new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialogInterface, int i) { - userSharePreferences = new UserSharePreferences(getActivity()); - userSharePreferences.clear(); - startActivity(new Intent(getActivity(), SignInActivity.class)); - } - }); - builder.setNegativeButton("Hủy", null); - AlertDialog dialog = builder.create(); - dialog.show(); - return true; - } - return super.onOptionsItemSelected(item); - } -} \ No newline at end of file diff --git a/app/src/main/java/com/daominh/quickmem/ui/fragments/BookFragment.java b/app/src/main/java/com/daominh/quickmem/ui/fragments/home/BookFragment.java similarity index 92% rename from app/src/main/java/com/daominh/quickmem/ui/fragments/BookFragment.java rename to app/src/main/java/com/daominh/quickmem/ui/fragments/home/BookFragment.java index ff2afc3..4c8411c 100644 --- a/app/src/main/java/com/daominh/quickmem/ui/fragments/BookFragment.java +++ b/app/src/main/java/com/daominh/quickmem/ui/fragments/home/BookFragment.java @@ -1,4 +1,4 @@ -package com.daominh.quickmem.ui.fragments; +package com.daominh.quickmem.ui.fragments.home; import android.os.Bundle; import androidx.fragment.app.Fragment; diff --git a/app/src/main/java/com/daominh/quickmem/ui/fragments/CreateFragment.java b/app/src/main/java/com/daominh/quickmem/ui/fragments/home/CreateFragment.java similarity index 98% rename from app/src/main/java/com/daominh/quickmem/ui/fragments/CreateFragment.java rename to app/src/main/java/com/daominh/quickmem/ui/fragments/home/CreateFragment.java index 51cb187..3b9e5bf 100644 --- a/app/src/main/java/com/daominh/quickmem/ui/fragments/CreateFragment.java +++ b/app/src/main/java/com/daominh/quickmem/ui/fragments/home/CreateFragment.java @@ -1,4 +1,4 @@ -package com.daominh.quickmem.ui.fragments; +package com.daominh.quickmem.ui.fragments.home; import android.annotation.SuppressLint; import android.content.Intent; diff --git a/app/src/main/java/com/daominh/quickmem/ui/fragments/HomeFragment.java b/app/src/main/java/com/daominh/quickmem/ui/fragments/home/HomeFragment.java similarity index 99% rename from app/src/main/java/com/daominh/quickmem/ui/fragments/HomeFragment.java rename to app/src/main/java/com/daominh/quickmem/ui/fragments/home/HomeFragment.java index b3084f8..eca5db7 100644 --- a/app/src/main/java/com/daominh/quickmem/ui/fragments/HomeFragment.java +++ b/app/src/main/java/com/daominh/quickmem/ui/fragments/home/HomeFragment.java @@ -1,4 +1,4 @@ -package com.daominh.quickmem.ui.fragments; +package com.daominh.quickmem.ui.fragments.home; import android.content.Intent; import android.graphics.Bitmap; diff --git a/app/src/main/java/com/daominh/quickmem/ui/fragments/LibraryFragment.java b/app/src/main/java/com/daominh/quickmem/ui/fragments/home/LibraryFragment.java similarity index 98% rename from app/src/main/java/com/daominh/quickmem/ui/fragments/LibraryFragment.java rename to app/src/main/java/com/daominh/quickmem/ui/fragments/home/LibraryFragment.java index abe077a..b766163 100644 --- a/app/src/main/java/com/daominh/quickmem/ui/fragments/LibraryFragment.java +++ b/app/src/main/java/com/daominh/quickmem/ui/fragments/home/LibraryFragment.java @@ -1,4 +1,4 @@ -package com.daominh.quickmem.ui.fragments; +package com.daominh.quickmem.ui.fragments.home; import android.content.Intent; import android.os.Bundle; @@ -54,7 +54,7 @@ public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceStat mviewPager.setAdapter(myViewPagerAdapter); mtabLayout.setupWithViewPager(mviewPager); - + binding.tabLayout.addOnTabSelectedListener(new TabLayout.OnTabSelectedListener() { @Override public void onTabSelected(TabLayout.Tab tab) { diff --git a/app/src/main/java/com/daominh/quickmem/ui/fragments/ProfileFragment.java b/app/src/main/java/com/daominh/quickmem/ui/fragments/home/ProfileFragment.java similarity index 97% rename from app/src/main/java/com/daominh/quickmem/ui/fragments/ProfileFragment.java rename to app/src/main/java/com/daominh/quickmem/ui/fragments/home/ProfileFragment.java index 909620b..3dfda13 100644 --- a/app/src/main/java/com/daominh/quickmem/ui/fragments/ProfileFragment.java +++ b/app/src/main/java/com/daominh/quickmem/ui/fragments/home/ProfileFragment.java @@ -1,4 +1,4 @@ -package com.daominh.quickmem.ui.fragments; +package com.daominh.quickmem.ui.fragments.home; import android.content.Intent; import android.os.Bundle; diff --git a/app/src/main/java/com/daominh/quickmem/ui/fragments/library/StudySetsFragment.java b/app/src/main/java/com/daominh/quickmem/ui/fragments/library/StudySetsFragment.java index 8aba340..9879b36 100644 --- a/app/src/main/java/com/daominh/quickmem/ui/fragments/library/StudySetsFragment.java +++ b/app/src/main/java/com/daominh/quickmem/ui/fragments/library/StudySetsFragment.java @@ -49,15 +49,10 @@ public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceStat super.onViewCreated(view, savedInstanceState); userSharePreferences = new UserSharePreferences(requireActivity()); idUser = userSharePreferences.getId(); - binding.createSetBtn.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View view) { - startActivity(new Intent(getActivity(), CreateSetActivity.class)); - } - }); + binding.createSetBtn.setOnClickListener(view1 -> startActivity(new Intent(getActivity(), CreateSetActivity.class))); flashCards = flashCardDAO.getAllFlashCardByUserId(idUser); - if (flashCards.size() == 0) { + if (flashCards.isEmpty()) { binding.setsCl.setVisibility(View.VISIBLE); binding.setsRv.setVisibility(View.GONE); } else { @@ -78,12 +73,11 @@ public void onResume() { } private void refreshData() { - flashCards = flashCardDAO.getAllFlashCardByUserId(idUser); - setsAdapter = new SetsAdapter(requireActivity(), flashCards, true); - binding.setsRv.setAdapter(setsAdapter); + flashCards.clear(); + flashCards.addAll(flashCardDAO.getAllFlashCardByUserId(idUser)); setsAdapter.notifyDataSetChanged(); - if (flashCards.size() == 0) { + if (flashCards.isEmpty()) { binding.setsCl.setVisibility(View.VISIBLE); binding.setsRv.setVisibility(View.GONE); } else { diff --git a/app/src/main/java/com/daominh/quickmem/ui/fragments/ClassesFragment.java b/app/src/main/java/com/daominh/quickmem/ui/fragments/manager/ClassesFragment.java similarity index 88% rename from app/src/main/java/com/daominh/quickmem/ui/fragments/ClassesFragment.java rename to app/src/main/java/com/daominh/quickmem/ui/fragments/manager/ClassesFragment.java index 67da02f..c42748b 100644 --- a/app/src/main/java/com/daominh/quickmem/ui/fragments/ClassesFragment.java +++ b/app/src/main/java/com/daominh/quickmem/ui/fragments/manager/ClassesFragment.java @@ -1,4 +1,4 @@ -package com.daominh.quickmem.ui.fragments; +package com.daominh.quickmem.ui.fragments.manager; import android.app.AlertDialog; import android.content.DialogInterface; @@ -83,13 +83,10 @@ public boolean onOptionsItemSelected(@NonNull MenuItem item) { AlertDialog.Builder builder = new AlertDialog.Builder(requireContext()); builder.setTitle("Đăng xuất"); builder.setMessage("Bạn có chắc chắn muốn đăng xuất?"); - builder.setPositiveButton("Đồng ý", new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialogInterface, int i) { - userSharePreferences = new UserSharePreferences(getActivity()); - userSharePreferences.clear(); - startActivity(new Intent(getActivity(), SignInActivity.class)); - } + builder.setPositiveButton("Đồng ý", (dialogInterface, i) -> { + userSharePreferences = new UserSharePreferences(getActivity()); + userSharePreferences.clear(); + startActivity(new Intent(getActivity(), SignInActivity.class)); }); builder.setNegativeButton("Hủy", null); AlertDialog dialog = builder.create(); diff --git a/app/src/main/java/com/daominh/quickmem/ui/fragments/manager/UsersFragment.java b/app/src/main/java/com/daominh/quickmem/ui/fragments/manager/UsersFragment.java new file mode 100644 index 0000000..2c705bd --- /dev/null +++ b/app/src/main/java/com/daominh/quickmem/ui/fragments/manager/UsersFragment.java @@ -0,0 +1,99 @@ +package com.daominh.quickmem.ui.fragments.manager; + +import android.app.AlertDialog; +import android.content.Intent; +import android.os.Bundle; +import android.view.*; +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.appcompat.app.AppCompatActivity; +import androidx.appcompat.widget.SearchView; +import androidx.fragment.app.Fragment; +import androidx.recyclerview.widget.LinearLayoutManager; +import androidx.recyclerview.widget.RecyclerView; +import com.daominh.quickmem.R; +import com.daominh.quickmem.adapter.UsersAdapter; +import com.daominh.quickmem.data.dao.UserDAO; +import com.daominh.quickmem.data.model.User; +import com.daominh.quickmem.databinding.FragmentUsersBinding; +import com.daominh.quickmem.preferen.UserSharePreferences; +import com.daominh.quickmem.ui.activities.auth.signin.SignInActivity; +import org.jetbrains.annotations.NotNull; + +import java.util.List; +import java.util.stream.Collectors; + +public class UsersFragment extends Fragment { + private FragmentUsersBinding binding; + private UserDAO userDAO; + private UsersAdapter usersAdapter; + + @Override + public void onCreate(@Nullable Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + userDAO = new UserDAO(requireActivity()); + } + + @Override + public View onCreateView(@NotNull LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { + AppCompatActivity activity = (AppCompatActivity) getActivity(); + binding = FragmentUsersBinding.inflate(inflater, container, false); + activity.setSupportActionBar(binding.toolbar); + setHasOptionsMenu(true); + return binding.getRoot(); + } + + @Override + public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) { + super.onViewCreated(view, savedInstanceState); + List listUsers = userDAO.getAllUser().stream().filter(user -> user.getRole() != 0).collect(Collectors.toList()); + binding.usersRv.setLayoutManager(new LinearLayoutManager(requireActivity(), RecyclerView.VERTICAL, false)); + usersAdapter = new UsersAdapter(requireActivity(), listUsers); + binding.usersRv.setAdapter(usersAdapter); + usersAdapter.notifyDataSetChanged(); + + + } + + @Override + public void onPrepareOptionsMenu(@NonNull Menu menu) { + super.onPrepareOptionsMenu(menu); + MenuInflater inflater = requireActivity().getMenuInflater(); + inflater.inflate(R.menu.menu_setting_admin, menu); + SearchView searchView = (SearchView) menu.findItem(R.id.action_search).getActionView(); + searchView.setQueryHint("Search users"); + searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() { + @Override + public boolean onQueryTextSubmit(String query) { return false; } + @Override + public boolean onQueryTextChange(String newText) { + List listUsers = userDAO.getAllUser().stream().filter(user -> user.getRole() != 0).collect(Collectors.toList()); + List listUsersFilter = listUsers.stream().filter(user -> user.getUsername().toLowerCase().contains(newText.toLowerCase())).collect(Collectors.toList()); + usersAdapter = new UsersAdapter(requireActivity(), listUsersFilter); + binding.usersRv.setAdapter(usersAdapter); + usersAdapter.notifyDataSetChanged(); + return false; + } + }); + } + + @Override + public boolean onOptionsItemSelected(@NonNull MenuItem item) { + if (item.getItemId() == R.id.log_out) { + new AlertDialog.Builder(requireContext()) + .setTitle("Sign out") + .setMessage("Are you sure?") + .setPositiveButton("OK", (dialogInterface, i) -> { + new UserSharePreferences(getActivity()).clear(); + startActivity(new Intent(getActivity(), SignInActivity.class)); + UserSharePreferences userSharePreferences = new UserSharePreferences(requireActivity()); + userSharePreferences.clear(); + requireActivity().finish(); + }) + .setNegativeButton("Cancel", null) + .show(); + return true; + } + return super.onOptionsItemSelected(item); + } +} \ No newline at end of file diff --git a/app/src/main/res/layout/dialog_create_folder.xml b/app/src/main/res/layout/dialog_create_folder.xml index 537c2b2..b9cd929 100644 --- a/app/src/main/res/layout/dialog_create_folder.xml +++ b/app/src/main/res/layout/dialog_create_folder.xml @@ -6,12 +6,13 @@ diff --git a/app/src/main/res/layout/fragment_book.xml b/app/src/main/res/layout/fragment_book.xml index cc53586..e73ab41 100644 --- a/app/src/main/res/layout/fragment_book.xml +++ b/app/src/main/res/layout/fragment_book.xml @@ -4,7 +4,7 @@ android:layout_width="match_parent" android:layout_height="match_parent" xmlns:app="http://schemas.android.com/apk/res-auto" - tools:context=".ui.fragments.BookFragment"> + tools:context=".ui.fragments.home.BookFragment"> + tools:context=".ui.fragments.manager.ClassesFragment"> + tools:context=".ui.fragments.home.CreateFragment"> + tools:context=".ui.fragments.home.HomeFragment"> + tools:context=".ui.fragments.home.LibraryFragment"> + tools:context=".ui.fragments.home.ProfileFragment"> + tools:context=".ui.fragments.manager.ClassesFragment"> + \ No newline at end of file diff --git a/app/src/main/res/navigation/main_nav.xml b/app/src/main/res/navigation/main_nav.xml index 6788a4e..38f1957 100644 --- a/app/src/main/res/navigation/main_nav.xml +++ b/app/src/main/res/navigation/main_nav.xml @@ -7,28 +7,28 @@ diff --git a/app/src/main/res/navigation/main_nav_admin.xml b/app/src/main/res/navigation/main_nav_admin.xml index 3752ddb..a18193b 100644 --- a/app/src/main/res/navigation/main_nav_admin.xml +++ b/app/src/main/res/navigation/main_nav_admin.xml @@ -6,12 +6,12 @@ app:startDestination="@id/usersFragment"> \ No newline at end of file diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index d966572..188b9b1 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -119,4 +119,5 @@ Created Login Fail You are blocked \n Contact support for more information + Log out \ No newline at end of file