Commit 0e19e34e authored by Wahyu Wibowo's avatar Wahyu Wibowo

add fitur filter transaksi by status

parent 3a23705a
...@@ -8,6 +8,8 @@ import androidx.recyclerview.widget.LinearLayoutManager; ...@@ -8,6 +8,8 @@ import androidx.recyclerview.widget.LinearLayoutManager;
import android.content.Intent; import android.content.Intent;
import android.os.Bundle; import android.os.Bundle;
import android.view.View;
import android.widget.PopupMenu;
import com.example.yourcashiertest.R; import com.example.yourcashiertest.R;
import com.example.yourcashiertest.adapters.OrderAdapter; import com.example.yourcashiertest.adapters.OrderAdapter;
...@@ -29,9 +31,29 @@ public class OrderActivity extends AppCompatActivity { ...@@ -29,9 +31,29 @@ public class OrderActivity extends AppCompatActivity {
super.onCreate(savedInstanceState); super.onCreate(savedInstanceState);
binding = DataBindingUtil.setContentView(this, R.layout.activity_order); binding = DataBindingUtil.setContentView(this, R.layout.activity_order);
adapter = new OrderAdapter();
viewModel = new ViewModelProvider(this).get(TransaksiViewModel.class); viewModel = new ViewModelProvider(this).get(TransaksiViewModel.class);
binding.btnFilter.setOnClickListener(view -> {
PopupMenu popupMenu = new PopupMenu(getApplicationContext(), binding.btnFilter);
popupMenu.inflate(R.menu.menu_filter_transaction);
popupMenu.setOnMenuItemClickListener(menuItem -> {
switch (menuItem.getItemId()){
case R.id.all:
viewModel.filter("");
break;
case R.id.pending:
viewModel.filter("Pending");
break;
case R.id.success:
viewModel.filter("Success");
break;
}
return false;
});
popupMenu.show();
});
adapter = new OrderAdapter();
binding.rvListOrder.setLayoutManager(new LinearLayoutManager(this)); binding.rvListOrder.setLayoutManager(new LinearLayoutManager(this));
binding.rvListOrder.setAdapter(adapter); binding.rvListOrder.setAdapter(adapter);
viewModel.getList().observe(this, transaksi -> adapter.setTransaksiList(transaksi)); viewModel.getList().observe(this, transaksi -> adapter.setTransaksiList(transaksi));
......
...@@ -21,6 +21,9 @@ public interface TransaksiDao { ...@@ -21,6 +21,9 @@ public interface TransaksiDao {
@Query("SELECT * FROM Transaksi ORDER BY orderId ASC") @Query("SELECT * FROM Transaksi ORDER BY orderId ASC")
LiveData<List<Transaksi>> getAll(); LiveData<List<Transaksi>> getAll();
@Query("SELECT * FROM Transaksi WHERE status LIKE :query ORDER BY orderId ASC")
LiveData<List<Transaksi>> getFilteredTransaksi(String query);
@Insert(onConflict = OnConflictStrategy.IGNORE) @Insert(onConflict = OnConflictStrategy.IGNORE)
void insertTransaksi(Transaksi transaksi); void insertTransaksi(Transaksi transaksi);
......
...@@ -36,4 +36,8 @@ public class TransaksiRepository { ...@@ -36,4 +36,8 @@ public class TransaksiRepository {
public void delete(Transaksi transaksi){ public void delete(Transaksi transaksi){
LocalDatabase.databaseWriteExecutor.execute(() -> dao.deleteTransaksi(transaksi)); LocalDatabase.databaseWriteExecutor.execute(() -> dao.deleteTransaksi(transaksi));
} }
public LiveData<List<Transaksi>> filterTransaksi(String s){
return dao.getFilteredTransaksi(s);
}
} }
...@@ -2,10 +2,13 @@ package com.example.yourcashiertest.viewmodels; ...@@ -2,10 +2,13 @@ package com.example.yourcashiertest.viewmodels;
import android.app.Application; import android.app.Application;
import android.text.TextUtils;
import androidx.annotation.NonNull; import androidx.annotation.NonNull;
import androidx.lifecycle.AndroidViewModel; import androidx.lifecycle.AndroidViewModel;
import androidx.lifecycle.LiveData; import androidx.lifecycle.LiveData;
import androidx.lifecycle.MutableLiveData;
import androidx.lifecycle.Transformations;
import com.example.yourcashiertest.entities.Transaksi; import com.example.yourcashiertest.entities.Transaksi;
import com.example.yourcashiertest.repositories.TransaksiRepository; import com.example.yourcashiertest.repositories.TransaksiRepository;
...@@ -14,12 +17,13 @@ import java.util.List; ...@@ -14,12 +17,13 @@ import java.util.List;
public class TransaksiViewModel extends AndroidViewModel { public class TransaksiViewModel extends AndroidViewModel {
private LiveData<List<Transaksi>> list; private LiveData<List<Transaksi>> list;
private MutableLiveData<String> query = new MutableLiveData<>("%");
private TransaksiRepository repository; private TransaksiRepository repository;
public TransaksiViewModel(@NonNull Application application) { public TransaksiViewModel(@NonNull Application application) {
super(application); super(application);
repository = new TransaksiRepository(application); repository = new TransaksiRepository(application);
list = repository.getAllTransaksi(); list = Transformations.switchMap(query, s -> repository.filterTransaksi(s));
} }
public LiveData<List<Transaksi>> getList() { public LiveData<List<Transaksi>> getList() {
...@@ -38,4 +42,9 @@ public class TransaksiViewModel extends AndroidViewModel { ...@@ -38,4 +42,9 @@ public class TransaksiViewModel extends AndroidViewModel {
public void deleteTransaksi(Transaksi transaksi){ public void deleteTransaksi(Transaksi transaksi){
repository.delete(transaksi); repository.delete(transaksi);
} }
public void filter(String s) {
String query = TextUtils.isEmpty(s) ? "%" : "%" + s + "%";
this.query.postValue(query);
}
} }
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="18"
android:viewportHeight="18">
<path
android:fillColor="#FF000000"
android:pathData="M0,14L0,16L6,16L6,14L0,14ZM0,2L0,4L10,4L10,2L0,2ZM10,18L10,16L18,16L18,14L10,14L10,12L8,12L8,18L10,18ZM4,6L4,8L0,8L0,10L4,10L4,12L6,12L6,6L4,6ZM18,10L18,8L8,8L8,10L18,10ZM12,6L14,6L14,4L18,4L18,2L14,2L14,0L12,0L12,6Z"
android:strokeWidth="1"
android:strokeColor="#00000000" />
</vector>
...@@ -21,50 +21,63 @@ ...@@ -21,50 +21,63 @@
android:layout_marginBottom="4dp" android:layout_marginBottom="4dp"
android:text="TRANSACTION LIST" android:text="TRANSACTION LIST"
android:textAppearance="@style/payment" android:textAppearance="@style/payment"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.0" app:layout_constraintHorizontal_bias="0.0"
app:layout_constraintStart_toStartOf="parent" app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_bias="0.105" /> app:layout_constraintVertical_bias="0.105" />
<com.google.android.material.button.MaterialButton <ImageButton
android:id="@+id/btnPending" android:id="@+id/btnFilter"
android:layout_width="0dp" android:layout_width="25dp"
android:layout_height="wrap_content" android:layout_height="25dp"
android:layout_marginEnd="5dp" android:layout_marginEnd="10dp"
android:text="PENDING" android:background="@drawable/shr_filter"
android:textSize="10dp" app:layout_constraintBottom_toBottomOf="@+id/tvListOrder"
android:backgroundTint="@color/colorPending"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toStartOf="@+id/btnSuccess"
app:layout_constraintTop_toBottomOf="@id/tvListOrder"
app:layout_constraintBottom_toTopOf="@id/rvListOrder"
tools:layout_editor_absoluteX="16dp"
tools:layout_editor_absoluteY="654dp" />
<com.google.android.material.button.MaterialButton
android:id="@+id/btnSuccess"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginStart="5dp"
android:text="SUCCESS"
android:textSize="10dp"
app:layout_constraintStart_toEndOf="@+id/btnPending"
app:layout_constraintBottom_toTopOf="@id/rvListOrder"
app:layout_constraintEnd_toEndOf="parent" app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toBottomOf="@id/tvListOrder" app:layout_constraintHorizontal_bias="1.0"
app:layout_constraintVertical_bias="0.0" /> app:layout_constraintStart_toEndOf="@+id/tvListOrder"
app:layout_constraintTop_toTopOf="@+id/tvListOrder" />
<!-- <com.google.android.material.button.MaterialButton-->
<!-- android:id="@+id/btnPending"-->
<!-- android:layout_width="0dp"-->
<!-- android:layout_height="wrap_content"-->
<!-- android:layout_marginEnd="5dp"-->
<!-- android:text="PENDING"-->
<!-- android:textSize="10dp"-->
<!-- android:backgroundTint="@color/colorPending"-->
<!-- app:layout_constraintStart_toStartOf="parent"-->
<!-- app:layout_constraintEnd_toStartOf="@+id/btnSuccess"-->
<!-- app:layout_constraintTop_toBottomOf="@id/tvListOrder"-->
<!-- app:layout_constraintBottom_toTopOf="@id/rvListOrder"-->
<!-- tools:layout_editor_absoluteX="16dp"-->
<!-- tools:layout_editor_absoluteY="654dp" />-->
<!-- <com.google.android.material.button.MaterialButton-->
<!-- android:id="@+id/btnSuccess"-->
<!-- android:layout_width="0dp"-->
<!-- android:layout_height="wrap_content"-->
<!-- android:layout_marginStart="5dp"-->
<!-- android:text="SUCCESS"-->
<!-- android:textSize="10dp"-->
<!-- app:layout_constraintStart_toEndOf="@+id/btnPending"-->
<!-- app:layout_constraintBottom_toTopOf="@id/rvListOrder"-->
<!-- app:layout_constraintEnd_toEndOf="parent"-->
<!-- app:layout_constraintTop_toBottomOf="@id/tvListOrder"-->
<!-- app:layout_constraintVertical_bias="0.0" />-->
<androidx.recyclerview.widget.RecyclerView <androidx.recyclerview.widget.RecyclerView
android:id="@+id/rvListOrder" android:id="@+id/rvListOrder"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="0dp" android:layout_height="0dp"
android:padding="@dimen/space_small" android:padding="@dimen/space_small"
android:layout_marginTop="10dp"
app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager" app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager"
app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent" app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent" app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/btnPending" app:layout_constraintTop_toBottomOf="@id/tvListOrder"
tools:listitem="@layout/item_order" /> tools:listitem="@layout/item_order" />
</androidx.constraintlayout.widget.ConstraintLayout> </androidx.constraintlayout.widget.ConstraintLayout>
</layout> </layout>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:id="@+id/all"
android:title="All"/>
<item
android:id="@+id/pending"
android:title="Pending"/>
<item
android:id="@+id/success"
android:title="Success"/>
</menu>
\ No newline at end of file
...@@ -66,7 +66,7 @@ ...@@ -66,7 +66,7 @@
<style name="payment"> <style name="payment">
<item name="android:textSize"> <item name="android:textSize">
27sp 25sp
</item> </item>
<item name="android:textColor"> <item name="android:textColor">
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment