diff --git a/app/src/main/java/com/example/bdkipoc/TransactionActivity.java b/app/src/main/java/com/example/bdkipoc/TransactionActivity.java
index e623979..5d0e01b 100644
--- a/app/src/main/java/com/example/bdkipoc/TransactionActivity.java
+++ b/app/src/main/java/com/example/bdkipoc/TransactionActivity.java
@@ -45,6 +45,7 @@ import java.util.Date;
import java.util.Locale;
import java.util.Calendar;
import java.util.Collections;
+import java.util.TimeZone;
import android.app.DatePickerDialog;
import android.widget.DatePicker;
@@ -445,13 +446,13 @@ public class TransactionActivity extends AppCompatActivity implements Transactio
filteredList.clear();
if (query.isEmpty()) {
- // ✅ NO SEARCH: Show current API page data (already sorted)
+ // ✅ NO SEARCH: Show current API page data (maintain sorting from API)
filteredList.addAll(transactionList);
totalRecords = totalRecords; // Use API total
totalPages = (int) Math.ceil((double) totalRecords / itemsPerPage);
- // ✅ VERIFY FILTERED LIST ORDER
- Log.d("TransactionActivity", "📋 FILTERED LIST ORDER (no search):");
+ // ✅ PASTIKAN TIDAK PERLU SORT LAGI karena sudah sorted dari API response
+ Log.d("TransactionActivity", "📋 FILTERED LIST ORDER (no search - maintaining API order):");
for (int i = 0; i < Math.min(5, filteredList.size()); i++) {
Transaction tx = filteredList.get(i);
Log.d("TransactionActivity", " " + (i+1) + ". " + tx.createdAt + " - " + tx.referenceId);
@@ -465,7 +466,7 @@ public class TransactionActivity extends AppCompatActivity implements Transactio
}
}
- // ✅ SORT SEARCH RESULTS by date
+ // ✅ SORT SEARCH RESULTS by date (maintaining newest first)
Collections.sort(filteredList, (t1, t2) -> {
try {
Date date1 = parseCreatedAtDate(t1.createdAt);
@@ -687,7 +688,7 @@ public class TransactionActivity extends AppCompatActivity implements Transactio
if (error) {
Toast.makeText(TransactionActivity.this, "Failed to fetch transactions", Toast.LENGTH_SHORT).show();
- updatePaginationDisplay(); // Show current state even on error
+ updatePaginationDisplay();
return;
}
@@ -696,33 +697,33 @@ public class TransactionActivity extends AppCompatActivity implements Transactio
totalRecords = apiTotal;
totalPages = (int) Math.ceil((double) totalRecords / itemsPerPage);
- // ✅ UPDATE TRANSACTION LIST
- transactionList.clear();
- transactionList.addAll(transactions);
-
- // ✅ CRITICAL: FORCE SORT AGAIN after adding to main list
- Collections.sort(filteredList, (t1, t2) -> {
+ // ✅ PERBAIKAN SORTING: Sort transactions SEBELUM menambahkan ke list
+ Collections.sort(transactions, (t1, t2) -> {
try {
Date date1 = parseCreatedAtDate(t1.createdAt);
Date date2 = parseCreatedAtDate(t2.createdAt);
if (date1 != null && date2 != null) {
int comparison = date2.compareTo(date1); // Newest first
- Log.d("TransactionActivity", "🔄 Final sort: " + t1.createdAt + " vs " + t2.createdAt + " = " + comparison);
+ Log.d("TransactionActivity", "🔄 Sorting: " + t2.createdAt + " vs " + t1.createdAt + " = " + comparison);
return comparison;
}
} catch (Exception e) {
Log.w("TransactionActivity", "Date comparison error: " + e.getMessage());
}
- return Integer.compare(t2.id, t1.id); // Fallback by ID
+ return Integer.compare(t2.id, t1.id); // Fallback by ID (higher ID = newer)
});
+ // ✅ UPDATE TRANSACTION LIST dengan data yang sudah tersortir
+ transactionList.clear();
+ transactionList.addAll(transactions);
+
Log.d("TransactionActivity", "📋 Page " + currentPage + " loaded and sorted: " +
transactions.size() + " transactions. Total: " + totalRecords + "/" + totalPages + " pages");
- // ✅ LOG FINAL ORDER VERIFICATION
- Log.d("TransactionActivity", "📋 FINAL DISPLAY ORDER:");
- for (int i = 0; i < Math.min(10, transactionList.size()); i++) {
+ // ✅ VERIFIKASI SORTING ORDER
+ Log.d("TransactionActivity", "📋 SORTED ORDER VERIFICATION:");
+ for (int i = 0; i < Math.min(5, transactionList.size()); i++) {
Transaction tx = transactionList.get(i);
Log.d("TransactionActivity", " " + (i+1) + ". " + tx.createdAt + " - " + tx.referenceId);
}
@@ -745,19 +746,23 @@ public class TransactionActivity extends AppCompatActivity implements Transactio
return null;
}
- // List of possible date formats from API
+ // List of possible date formats from API (urutan dari yang paling spesifik)
String[] possibleFormats = {
- "yyyy-MM-dd'T'HH:mm:ss.SSS'Z'", // ISO format with milliseconds
- "yyyy-MM-dd'T'HH:mm:ss'Z'", // ISO format without milliseconds
- "yyyy-MM-dd HH:mm:ss.SSS", // Standard format with milliseconds
- "yyyy-MM-dd HH:mm:ss", // Standard format
- "yyyy-MM-dd'T'HH:mm:ss.SSSSSS'Z'" // ISO format with microseconds
+ "yyyy-MM-dd'T'HH:mm:ss.SSSSSS'Z'", // ISO format with microseconds (6 digits)
+ "yyyy-MM-dd'T'HH:mm:ss.SSS'Z'", // ISO format with milliseconds (3 digits)
+ "yyyy-MM-dd'T'HH:mm:ss'Z'", // ISO format without milliseconds
+ "yyyy-MM-dd HH:mm:ss.SSSSSS", // Standard format with microseconds
+ "yyyy-MM-dd HH:mm:ss.SSS", // Standard format with milliseconds
+ "yyyy-MM-dd HH:mm:ss" // Standard format
};
for (String format : possibleFormats) {
try {
SimpleDateFormat sdf = new SimpleDateFormat(format, Locale.getDefault());
- return sdf.parse(rawDate);
+ sdf.setTimeZone(TimeZone.getTimeZone("UTC")); // Handle timezone properly
+ Date parsed = sdf.parse(rawDate);
+ Log.d("TransactionActivity", "✅ Date parsed successfully: " + rawDate + " -> " + parsed + " using format: " + format);
+ return parsed;
} catch (Exception e) {
// Continue to next format
}
@@ -773,9 +778,11 @@ public class TransactionActivity extends AppCompatActivity implements Transactio
}
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.getDefault());
- return sdf.parse(cleanedDate);
+ Date parsed = sdf.parse(cleanedDate);
+ Log.d("TransactionActivity", "✅ Date parsed with fallback: " + rawDate + " -> " + parsed);
+ return parsed;
} catch (Exception e) {
- Log.w("TransactionActivity", "❌ Could not parse date: " + rawDate);
+ Log.w("TransactionActivity", "❌ Could not parse date: " + rawDate + " - Error: " + e.getMessage());
return null;
}
}
diff --git a/app/src/main/res/layout/activity_transaction.xml b/app/src/main/res/layout/activity_transaction.xml
index b1c3e30..71f0364 100644
--- a/app/src/main/res/layout/activity_transaction.xml
+++ b/app/src/main/res/layout/activity_transaction.xml
@@ -87,6 +87,7 @@
+
+
+ android:background="#ffffff"
+ android:clipToPadding="false"
+ android:paddingBottom="8dp" />
-
+
+ android:elevation="4dp"
+ android:visibility="gone"
+ android:layout_marginTop="2dp">
+ android:scaleType="centerInside"
+ android:background="?android:attr/selectableItemBackgroundBorderless" />
+ android:scaleType="centerInside"
+ android:background="?android:attr/selectableItemBackgroundBorderless" />
+ android:layout_marginRight="8dp"
+ android:minHeight="48dp" />
+ android:scaleType="centerInside"
+ android:background="?android:attr/selectableItemBackgroundBorderless" />
+ android:scaleType="centerInside"
+ android:background="?android:attr/selectableItemBackgroundBorderless" />