Added hamburger menu helperfunction

This commit is contained in:
Alex
2026-04-08 01:50:18 -06:00
parent 57ac8ad2ce
commit 627ce7a987
12 changed files with 55 additions and 215 deletions

View File

@@ -2,8 +2,6 @@ package com.example.petstoremobile.fragments.listfragments;
import android.graphics.Color; import android.graphics.Color;
import android.os.Bundle; import android.os.Bundle;
import android.text.Editable;
import android.text.TextWatcher;
import android.util.Log; import android.util.Log;
import android.view.LayoutInflater; import android.view.LayoutInflater;
import android.view.View; import android.view.View;
@@ -22,7 +20,6 @@ import com.example.petstoremobile.adapters.AdoptionAdapter;
import com.example.petstoremobile.databinding.FragmentAdoptionBinding; import com.example.petstoremobile.databinding.FragmentAdoptionBinding;
import com.example.petstoremobile.dtos.AdoptionDTO; import com.example.petstoremobile.dtos.AdoptionDTO;
import com.example.petstoremobile.dtos.StoreDTO; import com.example.petstoremobile.dtos.StoreDTO;
import com.example.petstoremobile.fragments.ListFragment;
import com.example.petstoremobile.utils.BulkDeleteHandler; import com.example.petstoremobile.utils.BulkDeleteHandler;
import com.example.petstoremobile.utils.Resource; import com.example.petstoremobile.utils.Resource;
import com.example.petstoremobile.utils.SpinnerUtils; import com.example.petstoremobile.utils.SpinnerUtils;
@@ -87,15 +84,7 @@ public class AdoptionFragment extends Fragment implements AdoptionAdapter.OnAdop
binding.fabAddAdoption.setOnClickListener(v -> openDetail(-1)); binding.fabAddAdoption.setOnClickListener(v -> openDetail(-1));
binding.btnHamburgerAdoption.setOnClickListener(v -> { UIUtils.setupHamburgerMenu(binding.btnHamburgerAdoption, this);
Fragment parent = getParentFragment();
if (parent != null) {
Fragment grandParent = parent.getParentFragment();
if (grandParent instanceof ListFragment) {
((ListFragment) grandParent).openDrawer();
}
}
});
binding.btnToggleCalendarModeAdoption.setOnClickListener(v -> toggleCalendarMode()); binding.btnToggleCalendarModeAdoption.setOnClickListener(v -> toggleCalendarMode());
@@ -219,13 +208,7 @@ public class AdoptionFragment extends Fragment implements AdoptionAdapter.OnAdop
* Sets up the search bar for filtering * Sets up the search bar for filtering
*/ */
private void setupSearch() { private void setupSearch() {
binding.etSearchAdoption.addTextChangedListener(new TextWatcher() { UIUtils.attachSearch(binding.etSearchAdoption, this::loadAdoptions);
@Override public void beforeTextChanged(CharSequence s, int start, int count, int after) {}
@Override public void onTextChanged(CharSequence s, int start, int before, int count) {
loadAdoptions();
}
@Override public void afterTextChanged(Editable s) {}
});
} }
/** /**

View File

@@ -10,8 +10,6 @@ import androidx.lifecycle.ViewModelProvider;
import androidx.navigation.fragment.NavHostFragment; import androidx.navigation.fragment.NavHostFragment;
import androidx.recyclerview.widget.LinearLayoutManager; import androidx.recyclerview.widget.LinearLayoutManager;
import android.text.Editable;
import android.text.TextWatcher;
import android.util.Log; import android.util.Log;
import android.view.LayoutInflater; import android.view.LayoutInflater;
import android.view.View; import android.view.View;
@@ -23,7 +21,6 @@ import com.example.petstoremobile.adapters.AppointmentAdapter;
import com.example.petstoremobile.databinding.FragmentAppointmentBinding; import com.example.petstoremobile.databinding.FragmentAppointmentBinding;
import com.example.petstoremobile.dtos.AppointmentDTO; import com.example.petstoremobile.dtos.AppointmentDTO;
import com.example.petstoremobile.dtos.StoreDTO; import com.example.petstoremobile.dtos.StoreDTO;
import com.example.petstoremobile.fragments.ListFragment;
import com.example.petstoremobile.utils.BulkDeleteHandler; import com.example.petstoremobile.utils.BulkDeleteHandler;
import com.example.petstoremobile.utils.Resource; import com.example.petstoremobile.utils.Resource;
import com.example.petstoremobile.utils.SpinnerUtils; import com.example.petstoremobile.utils.SpinnerUtils;
@@ -95,15 +92,7 @@ public class AppointmentFragment extends Fragment implements AppointmentAdapter.
binding.fabAddAppointment.setOnClickListener(v -> openAppointmentDetails(-1)); binding.fabAddAppointment.setOnClickListener(v -> openAppointmentDetails(-1));
binding.btnHamburger.setOnClickListener(v -> { UIUtils.setupHamburgerMenu(binding.btnHamburger, this);
Fragment parent = getParentFragment();
if (parent != null) {
Fragment grandParent = parent.getParentFragment();
if (grandParent instanceof ListFragment) {
((ListFragment) grandParent).openDrawer();
}
}
});
binding.btnToggleCalendarMode.setOnClickListener(v -> toggleCalendarMode()); binding.btnToggleCalendarMode.setOnClickListener(v -> toggleCalendarMode());
@@ -244,13 +233,7 @@ public class AppointmentFragment extends Fragment implements AppointmentAdapter.
* Configures the search bar for filtering. * Configures the search bar for filtering.
*/ */
private void setupSearch() { private void setupSearch() {
binding.etSearchAppointment.addTextChangedListener(new TextWatcher() { UIUtils.attachSearch(binding.etSearchAppointment, this::loadAppointmentData);
@Override public void beforeTextChanged(CharSequence s, int start, int count, int after) {}
@Override public void onTextChanged(CharSequence s, int start, int before, int count) {
loadAppointmentData();
}
@Override public void afterTextChanged(Editable s) {}
});
} }
/** /**

View File

@@ -1,8 +1,6 @@
package com.example.petstoremobile.fragments.listfragments; package com.example.petstoremobile.fragments.listfragments;
import android.os.Bundle; import android.os.Bundle;
import android.text.Editable;
import android.text.TextWatcher;
import android.util.Log; import android.util.Log;
import android.view.LayoutInflater; import android.view.LayoutInflater;
import android.view.View; import android.view.View;
@@ -22,7 +20,6 @@ import com.example.petstoremobile.adapters.InventoryAdapter;
import com.example.petstoremobile.databinding.FragmentInventoryBinding; import com.example.petstoremobile.databinding.FragmentInventoryBinding;
import com.example.petstoremobile.dtos.InventoryDTO; import com.example.petstoremobile.dtos.InventoryDTO;
import com.example.petstoremobile.dtos.StoreDTO; import com.example.petstoremobile.dtos.StoreDTO;
import com.example.petstoremobile.fragments.ListFragment;
import com.example.petstoremobile.utils.BulkDeleteHandler; import com.example.petstoremobile.utils.BulkDeleteHandler;
import com.example.petstoremobile.utils.UIUtils; import com.example.petstoremobile.utils.UIUtils;
import com.example.petstoremobile.viewmodels.InventoryViewModel; import com.example.petstoremobile.viewmodels.InventoryViewModel;
@@ -80,15 +77,7 @@ public class InventoryFragment extends Fragment implements InventoryAdapter.OnIn
binding.fabAddInventory.setOnClickListener(v -> openDetail(null)); binding.fabAddInventory.setOnClickListener(v -> openDetail(null));
binding.btnHamburger.setOnClickListener(v -> { UIUtils.setupHamburgerMenu(binding.btnHamburger, this);
Fragment parent = getParentFragment();
if (parent != null) {
Fragment grandParent = parent.getParentFragment();
if (grandParent instanceof ListFragment) {
((ListFragment) grandParent).openDrawer();
}
}
});
return binding.getRoot(); return binding.getRoot();
} }
@@ -123,13 +112,7 @@ public class InventoryFragment extends Fragment implements InventoryAdapter.OnIn
* Sets up the search bar for filtering. * Sets up the search bar for filtering.
*/ */
private void setupSearch() { private void setupSearch() {
binding.etSearchInventory.addTextChangedListener(new TextWatcher() { UIUtils.attachSearch(binding.etSearchInventory, () -> loadInventory(true));
@Override public void beforeTextChanged(CharSequence s, int start, int count, int after) {}
@Override public void onTextChanged(CharSequence s, int start, int before, int count) {
loadInventory(true);
}
@Override public void afterTextChanged(Editable s) {}
});
} }
/** /**

View File

@@ -9,8 +9,6 @@ import androidx.lifecycle.ViewModelProvider;
import androidx.navigation.fragment.NavHostFragment; import androidx.navigation.fragment.NavHostFragment;
import androidx.recyclerview.widget.LinearLayoutManager; import androidx.recyclerview.widget.LinearLayoutManager;
import android.text.Editable;
import android.text.TextWatcher;
import android.util.Log; import android.util.Log;
import android.view.LayoutInflater; import android.view.LayoutInflater;
import android.view.View; import android.view.View;
@@ -23,7 +21,6 @@ import com.example.petstoremobile.api.auth.TokenManager;
import com.example.petstoremobile.databinding.FragmentPetBinding; import com.example.petstoremobile.databinding.FragmentPetBinding;
import com.example.petstoremobile.dtos.PetDTO; import com.example.petstoremobile.dtos.PetDTO;
import com.example.petstoremobile.dtos.StoreDTO; import com.example.petstoremobile.dtos.StoreDTO;
import com.example.petstoremobile.fragments.ListFragment;
import com.example.petstoremobile.utils.BulkDeleteHandler; import com.example.petstoremobile.utils.BulkDeleteHandler;
import com.example.petstoremobile.utils.Resource; import com.example.petstoremobile.utils.Resource;
import com.example.petstoremobile.utils.SpinnerUtils; import com.example.petstoremobile.utils.SpinnerUtils;
@@ -81,15 +78,7 @@ public class PetFragment extends Fragment implements PetAdapter.OnPetClickListen
binding.fabAddPet.setOnClickListener(v -> openPetDetails()); binding.fabAddPet.setOnClickListener(v -> openPetDetails());
binding.btnHamburger.setOnClickListener(v -> { UIUtils.setupHamburgerMenu(binding.btnHamburger, this);
Fragment parent = getParentFragment();
if (parent != null) {
Fragment grandParent = parent.getParentFragment();
if (grandParent instanceof ListFragment) {
((ListFragment) grandParent).openDrawer();
}
}
});
return binding.getRoot(); return binding.getRoot();
} }
@@ -135,13 +124,7 @@ public class PetFragment extends Fragment implements PetAdapter.OnPetClickListen
* Configures the search bar. * Configures the search bar.
*/ */
private void setupSearch() { private void setupSearch() {
binding.etSearchPet.addTextChangedListener(new TextWatcher() { UIUtils.attachSearch(binding.etSearchPet, this::loadPetData);
@Override public void beforeTextChanged(CharSequence s, int start, int count, int after) {}
@Override public void onTextChanged(CharSequence s, int start, int before, int count) {
loadPetData();
}
@Override public void afterTextChanged(Editable s) {}
});
} }
/** /**

View File

@@ -9,8 +9,6 @@ import androidx.lifecycle.ViewModelProvider;
import androidx.navigation.fragment.NavHostFragment; import androidx.navigation.fragment.NavHostFragment;
import androidx.recyclerview.widget.LinearLayoutManager; import androidx.recyclerview.widget.LinearLayoutManager;
import android.text.Editable;
import android.text.TextWatcher;
import android.util.Log; import android.util.Log;
import android.view.LayoutInflater; import android.view.LayoutInflater;
import android.view.View; import android.view.View;
@@ -22,7 +20,6 @@ import com.example.petstoremobile.adapters.ProductAdapter;
import com.example.petstoremobile.databinding.FragmentProductBinding; import com.example.petstoremobile.databinding.FragmentProductBinding;
import com.example.petstoremobile.dtos.CategoryDTO; import com.example.petstoremobile.dtos.CategoryDTO;
import com.example.petstoremobile.dtos.ProductDTO; import com.example.petstoremobile.dtos.ProductDTO;
import com.example.petstoremobile.fragments.ListFragment;
import com.example.petstoremobile.utils.Resource; import com.example.petstoremobile.utils.Resource;
import com.example.petstoremobile.utils.SpinnerUtils; import com.example.petstoremobile.utils.SpinnerUtils;
import com.example.petstoremobile.utils.UIUtils; import com.example.petstoremobile.utils.UIUtils;
@@ -72,15 +69,7 @@ public class ProductFragment extends Fragment implements ProductAdapter.OnProduc
binding.fabAddProduct.setOnClickListener(v -> openProductDetails(-1)); binding.fabAddProduct.setOnClickListener(v -> openProductDetails(-1));
binding.btnHamburgerProduct.setOnClickListener(v -> { UIUtils.setupHamburgerMenu(binding.btnHamburgerProduct, this);
Fragment parent = getParentFragment();
if (parent != null) {
Fragment grandParent = parent.getParentFragment();
if (grandParent instanceof ListFragment) {
((ListFragment) grandParent).openDrawer();
}
}
});
return binding.getRoot(); return binding.getRoot();
} }
@@ -113,13 +102,7 @@ public class ProductFragment extends Fragment implements ProductAdapter.OnProduc
* Configures the search bar for triggering data load from backend. * Configures the search bar for triggering data load from backend.
*/ */
private void setupSearch() { private void setupSearch() {
binding.etSearchProduct.addTextChangedListener(new TextWatcher() { UIUtils.attachSearch(binding.etSearchProduct, this::loadProductData);
@Override public void beforeTextChanged(CharSequence s, int start, int count, int after) {}
@Override public void onTextChanged(CharSequence s, int start, int before, int count) {
loadProductData();
}
@Override public void afterTextChanged(Editable s) {}
});
} }
/** /**

View File

@@ -1,8 +1,6 @@
package com.example.petstoremobile.fragments.listfragments; package com.example.petstoremobile.fragments.listfragments;
import android.os.Bundle; import android.os.Bundle;
import android.text.Editable;
import android.text.TextWatcher;
import android.util.Log; import android.util.Log;
import android.view.LayoutInflater; import android.view.LayoutInflater;
import android.view.View; import android.view.View;
@@ -22,7 +20,6 @@ import com.example.petstoremobile.databinding.FragmentProductSupplierBinding;
import com.example.petstoremobile.dtos.ProductDTO; import com.example.petstoremobile.dtos.ProductDTO;
import com.example.petstoremobile.dtos.ProductSupplierDTO; import com.example.petstoremobile.dtos.ProductSupplierDTO;
import com.example.petstoremobile.dtos.SupplierDTO; import com.example.petstoremobile.dtos.SupplierDTO;
import com.example.petstoremobile.fragments.ListFragment;
import com.example.petstoremobile.utils.BulkDeleteHandler; import com.example.petstoremobile.utils.BulkDeleteHandler;
import com.example.petstoremobile.utils.Resource; import com.example.petstoremobile.utils.Resource;
import com.example.petstoremobile.utils.SpinnerUtils; import com.example.petstoremobile.utils.SpinnerUtils;
@@ -80,15 +77,7 @@ public class ProductSupplierFragment extends Fragment
binding.fabAddPS.setOnClickListener(v -> openDetail(-1)); binding.fabAddPS.setOnClickListener(v -> openDetail(-1));
binding.btnHamburgerPS.setOnClickListener(v -> { UIUtils.setupHamburgerMenu(binding.btnHamburgerPS, this);
Fragment parent = getParentFragment();
if (parent != null) {
Fragment grandParent = parent.getParentFragment();
if (grandParent instanceof ListFragment) {
((ListFragment) grandParent).openDrawer();
}
}
});
return binding.getRoot(); return binding.getRoot();
} }
@@ -143,13 +132,7 @@ public class ProductSupplierFragment extends Fragment
* Configures the search bar for filtering. * Configures the search bar for filtering.
*/ */
private void setupSearch() { private void setupSearch() {
binding.etSearchPS.addTextChangedListener(new TextWatcher() { UIUtils.attachSearch(binding.etSearchPS, this::loadData);
@Override public void beforeTextChanged(CharSequence s, int start, int count, int after) {}
@Override public void onTextChanged(CharSequence s, int start, int before, int count) {
loadData();
}
@Override public void afterTextChanged(Editable s) {}
});
} }
/** /**

View File

@@ -1,8 +1,6 @@
package com.example.petstoremobile.fragments.listfragments; package com.example.petstoremobile.fragments.listfragments;
import android.os.Bundle; import android.os.Bundle;
import android.text.Editable;
import android.text.TextWatcher;
import android.util.Log; import android.util.Log;
import android.view.LayoutInflater; import android.view.LayoutInflater;
import android.view.View; import android.view.View;
@@ -21,7 +19,6 @@ import com.example.petstoremobile.adapters.PurchaseOrderAdapter;
import com.example.petstoremobile.databinding.FragmentPurchaseOrderBinding; import com.example.petstoremobile.databinding.FragmentPurchaseOrderBinding;
import com.example.petstoremobile.dtos.PurchaseOrderDTO; import com.example.petstoremobile.dtos.PurchaseOrderDTO;
import com.example.petstoremobile.dtos.StoreDTO; import com.example.petstoremobile.dtos.StoreDTO;
import com.example.petstoremobile.fragments.ListFragment;
import com.example.petstoremobile.utils.Resource; import com.example.petstoremobile.utils.Resource;
import com.example.petstoremobile.utils.SpinnerUtils; import com.example.petstoremobile.utils.SpinnerUtils;
import com.example.petstoremobile.utils.UIUtils; import com.example.petstoremobile.utils.UIUtils;
@@ -68,15 +65,7 @@ public class PurchaseOrderFragment extends Fragment
setupSwipeRefresh(); setupSwipeRefresh();
setupFilterToggle(); setupFilterToggle();
binding.btnHamburgerPO.setOnClickListener(v -> { UIUtils.setupHamburgerMenu(binding.btnHamburgerPO, this);
Fragment parent = getParentFragment();
if (parent != null) {
Fragment grandParent = parent.getParentFragment();
if (grandParent instanceof ListFragment) {
((ListFragment) grandParent).openDrawer();
}
}
});
return binding.getRoot(); return binding.getRoot();
} }
@@ -108,13 +97,7 @@ public class PurchaseOrderFragment extends Fragment
* Configures the search bar for filtering. * Configures the search bar for filtering.
*/ */
private void setupSearch() { private void setupSearch() {
binding.etSearchPO.addTextChangedListener(new TextWatcher() { UIUtils.attachSearch(binding.etSearchPO, this::loadData);
@Override public void beforeTextChanged(CharSequence s, int start, int count, int after) {}
@Override public void onTextChanged(CharSequence s, int start, int before, int count) {
loadData();
}
@Override public void afterTextChanged(Editable s) {}
});
} }
/** /**

View File

@@ -8,8 +8,6 @@ import androidx.lifecycle.ViewModelProvider;
import androidx.navigation.fragment.NavHostFragment; import androidx.navigation.fragment.NavHostFragment;
import androidx.recyclerview.widget.LinearLayoutManager; import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView; import androidx.recyclerview.widget.RecyclerView;
import android.text.Editable;
import android.text.TextWatcher;
import android.util.Log; import android.util.Log;
import android.view.LayoutInflater; import android.view.LayoutInflater;
import android.view.View; import android.view.View;
@@ -21,7 +19,6 @@ import com.example.petstoremobile.adapters.SaleAdapter;
import com.example.petstoremobile.databinding.FragmentSaleBinding; import com.example.petstoremobile.databinding.FragmentSaleBinding;
import com.example.petstoremobile.dtos.SaleDTO; import com.example.petstoremobile.dtos.SaleDTO;
import com.example.petstoremobile.dtos.StoreDTO; import com.example.petstoremobile.dtos.StoreDTO;
import com.example.petstoremobile.fragments.ListFragment;
import com.example.petstoremobile.utils.Resource; import com.example.petstoremobile.utils.Resource;
import com.example.petstoremobile.utils.SpinnerUtils; import com.example.petstoremobile.utils.SpinnerUtils;
import com.example.petstoremobile.utils.UIUtils; import com.example.petstoremobile.utils.UIUtils;
@@ -72,15 +69,7 @@ public class SaleFragment extends Fragment implements SaleAdapter.OnSaleClickLis
setupFilterToggle(); setupFilterToggle();
loadSales(true); loadSales(true);
binding.btnHamburger.setOnClickListener(v -> { UIUtils.setupHamburgerMenu(binding.btnHamburger, this);
Fragment parent = getParentFragment();
if (parent != null) {
Fragment grandParent = parent.getParentFragment();
if (grandParent instanceof ListFragment) {
((ListFragment) grandParent).openDrawer();
}
}
});
binding.fabAddSale.setOnClickListener(v -> binding.fabAddSale.setOnClickListener(v ->
NavHostFragment.findNavController(this).navigate(R.id.nav_sale_detail)); NavHostFragment.findNavController(this).navigate(R.id.nav_sale_detail));
@@ -149,14 +138,7 @@ public class SaleFragment extends Fragment implements SaleAdapter.OnSaleClickLis
} }
private void setupSearch() { private void setupSearch() {
binding.etSearchSale.addTextChangedListener(new TextWatcher() { UIUtils.attachSearch(binding.etSearchSale, () -> loadSales(true));
@Override public void beforeTextChanged(CharSequence s, int start, int count, int after) {}
@Override public void afterTextChanged(Editable s) {}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
loadSales(true);
}
});
} }
private void setupSwipeRefresh() { private void setupSwipeRefresh() {

View File

@@ -1,8 +1,6 @@
package com.example.petstoremobile.fragments.listfragments; package com.example.petstoremobile.fragments.listfragments;
import android.os.Bundle; import android.os.Bundle;
import android.text.Editable;
import android.text.TextWatcher;
import android.util.Log; import android.util.Log;
import android.view.LayoutInflater; import android.view.LayoutInflater;
import android.view.View; import android.view.View;
@@ -21,9 +19,7 @@ import com.example.petstoremobile.R;
import com.example.petstoremobile.adapters.ServiceAdapter; import com.example.petstoremobile.adapters.ServiceAdapter;
import com.example.petstoremobile.databinding.FragmentServiceBinding; import com.example.petstoremobile.databinding.FragmentServiceBinding;
import com.example.petstoremobile.dtos.ServiceDTO; import com.example.petstoremobile.dtos.ServiceDTO;
import com.example.petstoremobile.fragments.ListFragment;
import com.example.petstoremobile.utils.BulkDeleteHandler; import com.example.petstoremobile.utils.BulkDeleteHandler;
import com.example.petstoremobile.utils.Resource;
import com.example.petstoremobile.utils.UIUtils; import com.example.petstoremobile.utils.UIUtils;
import com.example.petstoremobile.viewmodels.ServiceViewModel; import com.example.petstoremobile.viewmodels.ServiceViewModel;
@@ -78,15 +74,7 @@ public class ServiceFragment extends Fragment implements ServiceAdapter.OnServic
binding.fabAddService.setOnClickListener(v -> openDetail(null)); binding.fabAddService.setOnClickListener(v -> openDetail(null));
binding.btnHamburger.setOnClickListener(v -> { UIUtils.setupHamburgerMenu(binding.btnHamburger, this);
Fragment parent = getParentFragment();
if (parent != null) {
Fragment grandParent = parent.getParentFragment();
if (grandParent instanceof ListFragment) {
((ListFragment) grandParent).openDrawer();
}
}
});
return binding.getRoot(); return binding.getRoot();
} }
@@ -121,13 +109,7 @@ public class ServiceFragment extends Fragment implements ServiceAdapter.OnServic
* Sets up the search bar for filtering. * Sets up the search bar for filtering.
*/ */
private void setupSearch() { private void setupSearch() {
binding.etSearchService.addTextChangedListener(new TextWatcher() { UIUtils.attachSearch(binding.etSearchService, () -> loadServices(true));
@Override public void beforeTextChanged(CharSequence s, int start, int count, int after) {}
@Override public void onTextChanged(CharSequence s, int start, int before, int count) {
loadServices(true);
}
@Override public void afterTextChanged(Editable s) {}
});
} }
/** /**

View File

@@ -1,7 +1,6 @@
package com.example.petstoremobile.fragments.listfragments; package com.example.petstoremobile.fragments.listfragments;
import android.os.Bundle; import android.os.Bundle;
import android.text.*;
import android.util.Log; import android.util.Log;
import android.view.*; import android.view.*;
import android.widget.*; import android.widget.*;
@@ -17,7 +16,6 @@ import com.example.petstoremobile.adapters.EmployeeAdapter;
import com.example.petstoremobile.api.RetrofitClient; import com.example.petstoremobile.api.RetrofitClient;
import com.example.petstoremobile.dtos.EmployeeDTO; import com.example.petstoremobile.dtos.EmployeeDTO;
import com.example.petstoremobile.dtos.PageResponse; import com.example.petstoremobile.dtos.PageResponse;
import com.example.petstoremobile.fragments.ListFragment;
import com.example.petstoremobile.utils.UIUtils; import com.example.petstoremobile.utils.UIUtils;
import com.google.android.material.floatingactionbutton.FloatingActionButton; import com.google.android.material.floatingactionbutton.FloatingActionButton;
import java.util.*; import java.util.*;
@@ -48,7 +46,7 @@ public class StaffFragment extends Fragment implements EmployeeAdapter.OnEmploye
fab.setOnClickListener(v -> openDetail(-1)); fab.setOnClickListener(v -> openDetail(-1));
ImageButton hamburger = view.findViewById(R.id.btnHamburgerStaff); ImageButton hamburger = view.findViewById(R.id.btnHamburgerStaff);
hamburger.setOnClickListener(v -> openDrawer()); UIUtils.setupHamburgerMenu(hamburger, this);
ImageButton btnToggleFilter = view.findViewById(R.id.btnToggleFilterStaff); ImageButton btnToggleFilter = view.findViewById(R.id.btnToggleFilterStaff);
UIUtils.setupFilterToggle(btnToggleFilter, layoutFilter, etSearch); UIUtils.setupFilterToggle(btnToggleFilter, layoutFilter, etSearch);
@@ -56,16 +54,6 @@ public class StaffFragment extends Fragment implements EmployeeAdapter.OnEmploye
return view; return view;
} }
private void openDrawer() {
Fragment parent = getParentFragment();
if (parent != null) {
Fragment grandParent = parent.getParentFragment();
if (grandParent instanceof ListFragment) {
((ListFragment) grandParent).openDrawer();
}
}
}
private void setupRecyclerView(View view) { private void setupRecyclerView(View view) {
RecyclerView rv = view.findViewById(R.id.recyclerViewStaff); RecyclerView rv = view.findViewById(R.id.recyclerViewStaff);
adapter = new EmployeeAdapter(filteredList, this); adapter = new EmployeeAdapter(filteredList, this);
@@ -75,13 +63,7 @@ public class StaffFragment extends Fragment implements EmployeeAdapter.OnEmploye
private void setupSearch(View view) { private void setupSearch(View view) {
etSearch = view.findViewById(R.id.etSearchStaff); etSearch = view.findViewById(R.id.etSearchStaff);
etSearch.addTextChangedListener(new TextWatcher() { UIUtils.attachSearch(etSearch, () -> filter(etSearch.getText().toString()));
public void beforeTextChanged(CharSequence s, int a, int b, int c) {}
public void afterTextChanged(Editable s) {}
public void onTextChanged(CharSequence s, int a, int b, int c) {
filter(s.toString());
}
});
} }
private void setupSwipeRefresh(View view) { private void setupSwipeRefresh(View view) {

View File

@@ -9,8 +9,6 @@ import androidx.lifecycle.ViewModelProvider;
import androidx.navigation.fragment.NavHostFragment; import androidx.navigation.fragment.NavHostFragment;
import androidx.recyclerview.widget.LinearLayoutManager; import androidx.recyclerview.widget.LinearLayoutManager;
import android.text.Editable;
import android.text.TextWatcher;
import android.util.Log; import android.util.Log;
import android.view.LayoutInflater; import android.view.LayoutInflater;
import android.view.View; import android.view.View;
@@ -21,7 +19,6 @@ import com.example.petstoremobile.R;
import com.example.petstoremobile.adapters.SupplierAdapter; import com.example.petstoremobile.adapters.SupplierAdapter;
import com.example.petstoremobile.databinding.FragmentSupplierBinding; import com.example.petstoremobile.databinding.FragmentSupplierBinding;
import com.example.petstoremobile.dtos.SupplierDTO; import com.example.petstoremobile.dtos.SupplierDTO;
import com.example.petstoremobile.fragments.ListFragment;
import com.example.petstoremobile.utils.BulkDeleteHandler; import com.example.petstoremobile.utils.BulkDeleteHandler;
import com.example.petstoremobile.utils.Resource; import com.example.petstoremobile.utils.Resource;
import com.example.petstoremobile.utils.UIUtils; import com.example.petstoremobile.utils.UIUtils;
@@ -68,16 +65,7 @@ public class SupplierFragment extends Fragment implements SupplierAdapter.OnSupp
//Add button to opens the add dialog //Add button to opens the add dialog
binding.fabAddSupplier.setOnClickListener(v -> openSupplierDetails(-1)); binding.fabAddSupplier.setOnClickListener(v -> openSupplierDetails(-1));
//Make the hamburger button open the drawer from listFragment UIUtils.setupHamburgerMenu(binding.btnHamburger, this);
binding.btnHamburger.setOnClickListener(v -> {
Fragment parent = getParentFragment();
if (parent != null) {
Fragment grandParent = parent.getParentFragment();
if (grandParent instanceof ListFragment) {
((ListFragment) grandParent).openDrawer();
}
}
});
return binding.getRoot(); return binding.getRoot();
} }
@@ -112,13 +100,7 @@ public class SupplierFragment extends Fragment implements SupplierAdapter.OnSupp
* Configures the search bar for filtering. * Configures the search bar for filtering.
*/ */
private void setupSearch() { private void setupSearch() {
binding.etSearchSupplier.addTextChangedListener(new TextWatcher() { UIUtils.attachSearch(binding.etSearchSupplier, this::loadSupplierData);
@Override public void beforeTextChanged(CharSequence s, int start, int count, int after) {}
@Override public void onTextChanged(CharSequence s, int start, int before, int count) {
loadSupplierData();
}
@Override public void afterTextChanged(Editable s) {}
});
} }
/** /**

View File

@@ -1,20 +1,23 @@
package com.example.petstoremobile.utils; package com.example.petstoremobile.utils;
import android.telephony.PhoneNumberFormattingTextWatcher; import android.telephony.PhoneNumberFormattingTextWatcher;
import android.text.Editable;
import android.text.InputFilter; import android.text.InputFilter;
import android.text.TextWatcher;
import android.view.View; import android.view.View;
import android.widget.EditText; import android.widget.EditText;
import android.widget.ImageButton; import android.widget.ImageButton;
import android.widget.Spinner; import android.widget.Spinner;
import com.example.petstoremobile.R; import androidx.fragment.app.Fragment;
import com.example.petstoremobile.fragments.ListFragment;
/** /**
* Utility class for shared UI component logic and formatting. * Utility class for shared UI component logic and formatting.
*/ */
public class UIUtils { public class UIUtils {
/** /**
* Formats an EditText for to phone format * Formats an EditText to phone format.
*/ */
public static void formatPhoneInput(EditText editText) { public static void formatPhoneInput(EditText editText) {
editText.addTextChangedListener(new PhoneNumberFormattingTextWatcher("CA")); editText.addTextChangedListener(new PhoneNumberFormattingTextWatcher("CA"));
@@ -42,4 +45,32 @@ public class UIUtils {
} }
}); });
} }
/**
* Simplifies setting up the hamburger menu to open the navigation drawer.
*/
public static void setupHamburgerMenu(ImageButton btnHamburger, Fragment fragment) {
btnHamburger.setOnClickListener(v -> {
Fragment parent = fragment.getParentFragment();
if (parent != null) {
Fragment grandParent = parent.getParentFragment();
if (grandParent instanceof ListFragment) {
((ListFragment) grandParent).openDrawer();
}
}
});
}
/**
* Attaches a simplified TextWatcher to an EditText for search functionality.
*/
public static void attachSearch(EditText etSearch, Runnable onQueryChanged) {
etSearch.addTextChangedListener(new TextWatcher() {
@Override public void beforeTextChanged(CharSequence s, int start, int count, int after) {}
@Override public void onTextChanged(CharSequence s, int start, int before, int count) {
onQueryChanged.run();
}
@Override public void afterTextChanged(Editable s) {}
});
}
} }