From 8454647c80ec333fcd4e78328cb8ad364f976f7e Mon Sep 17 00:00:00 2001 From: Le-Michael88 Date: Thu, 2 Jan 2020 19:29:17 -0500 Subject: [PATCH] Add transactions UI --- .DS_Store | Bin 0 -> 6148 bytes app/build.gradle | 3 + app/src/main/AndroidManifest.xml | 11 +- .../kevinlu/watstats/RecyclerViewAdapter.java | 54 ++++++++ .../kevinlu/watstats/TransactionActivity.java | 124 ++++++++++++++++++ .../com/kevinlu/watstats/models/Date.java | 20 +++ .../kevinlu/watstats/models/Transaction.java | 42 ++++++ .../main/res/drawable/two_rounded_corners.xml | 9 ++ .../main/res/layout/activity_transaction.xml | 55 ++++++++ .../main/res/layout/header_transactions.xml | 26 ++++ app/src/main/res/layout/transaction_item.xml | 45 +++++++ build.gradle | 4 + 12 files changed, 390 insertions(+), 3 deletions(-) create mode 100644 .DS_Store create mode 100644 app/src/main/java/com/kevinlu/watstats/RecyclerViewAdapter.java create mode 100644 app/src/main/java/com/kevinlu/watstats/TransactionActivity.java create mode 100644 app/src/main/java/com/kevinlu/watstats/models/Date.java create mode 100644 app/src/main/java/com/kevinlu/watstats/models/Transaction.java create mode 100644 app/src/main/res/drawable/two_rounded_corners.xml create mode 100644 app/src/main/res/layout/activity_transaction.xml create mode 100644 app/src/main/res/layout/header_transactions.xml create mode 100644 app/src/main/res/layout/transaction_item.xml diff --git a/.DS_Store b/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..f0a821b49b87204f190adcea0ce12478e7243597 GIT binary patch literal 6148 zcmeHKy-EZz5T4u}vS4$iWvs341tcD8YjY2vo-1du%PxxjK8n4SwUrNGDK>(YU?W&r z`%Px_vbtJ|=nN!ZGC!H@2b*Mw$W2d+3DKB{GBifVgC1dZuW6vpY;?TFWOh(j4QmG{ zYWwZLdmqw1HPn=gbpO{cOG{Pf`Mj*>&}0vfn;X0LS6ivI_{Q2CC97VZA&gdNLC45h zP)UbrR-&8rkM=b8#qHD1`CZK2S);0#JNU{c-3QS#@596xFb0ePW8i->fIFKdTNSk4 z7%&Emfp-S@eDG+DL9rE#M+drC0su!)N5PnD36AlKL9rEt1>z(WD4|YE3@72xd-V&7 zt)PUH)8fNv=C|U-#q3z$M|W~T(0XIQ80a!ElYBx7=A&q735V|AH#w65Qv0WXAJxR F1FvyzO?dzS literal 0 HcmV?d00001 diff --git a/app/build.gradle b/app/build.gradle index b0305ba..96a366b 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -42,4 +42,7 @@ dependencies { testImplementation 'junit:junit:4.12' androidTestImplementation 'androidx.test:runner:1.2.0' androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0' + + //Added for transaction ui + implementation 'com.github.jaychang0917:SimpleRecyclerView:1.2.0' } diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 92638f9..9a4968b 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -11,12 +11,17 @@ android:roundIcon="@mipmap/ic_launcher_round" android:supportsRtl="true" android:theme="@style/AppTheme"> - + - + + + diff --git a/app/src/main/java/com/kevinlu/watstats/RecyclerViewAdapter.java b/app/src/main/java/com/kevinlu/watstats/RecyclerViewAdapter.java new file mode 100644 index 0000000..f3db30c --- /dev/null +++ b/app/src/main/java/com/kevinlu/watstats/RecyclerViewAdapter.java @@ -0,0 +1,54 @@ +package com.kevinlu.watstats; + +import android.content.Context; +import android.view.View; +import android.view.ViewGroup; +import android.widget.ImageView; +import android.widget.TextView; + +import androidx.annotation.NonNull; + +import com.jaychang.srv.SimpleCell; +import com.jaychang.srv.SimpleViewHolder; +import com.kevinlu.watstats.models.Transaction; + +public class RecyclerViewAdapter extends SimpleCell{ + + public RecyclerViewAdapter(@NonNull Transaction item) { + super(item); + } + + protected int getLayoutRes() { + return R.layout.transaction_item; + } + + @NonNull + @Override + protected ViewHolder onCreateViewHolder(ViewGroup parent, View cellView) { + return new ViewHolder(cellView); + } + + @Override + protected void onBindViewHolder(@NonNull ViewHolder viewHolder, int i, @NonNull Context context, Object o) { + viewHolder.terminal.setText(getItem().getTerminal()); + viewHolder.date.setText(getItem().getDateTime()); + viewHolder.amount.setText(getItem().getAmount()); + viewHolder.image.setImageResource(getItem().getImage()); + } + + public class ViewHolder extends SimpleViewHolder{ + ImageView image; + TextView terminal; + TextView date; + TextView amount; + + public ViewHolder(@NonNull View itemView) { + super(itemView); + + image = itemView.findViewById(R.id.image); + terminal = itemView.findViewById(R.id.terminal); + date = itemView.findViewById(R.id.date); + amount = itemView.findViewById(R.id.amount); + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/kevinlu/watstats/TransactionActivity.java b/app/src/main/java/com/kevinlu/watstats/TransactionActivity.java new file mode 100644 index 0000000..d61f322 --- /dev/null +++ b/app/src/main/java/com/kevinlu/watstats/TransactionActivity.java @@ -0,0 +1,124 @@ +package com.kevinlu.watstats; + +import android.os.Bundle; +import android.view.LayoutInflater; +import android.view.View; +import android.widget.TextView; + +import androidx.annotation.NonNull; +import androidx.appcompat.app.AppCompatActivity; + +import com.jaychang.srv.SimpleRecyclerView; +import com.jaychang.srv.decoration.SectionHeaderProvider; +import com.jaychang.srv.decoration.SimpleSectionHeaderProvider; +import com.kevinlu.watstats.models.Date; +import com.kevinlu.watstats.models.Transaction; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; + +public class TransactionActivity extends AppCompatActivity { + + SimpleRecyclerView simpleRecyclerView; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_transaction); + + simpleRecyclerView=findViewById(R.id.account_transactions); + this.addRecyclerHeaders(); + this.bindData(); + } + + //Adds the headers to the recycler view + private void addRecyclerHeaders() + { + SectionHeaderProvider header = new SimpleSectionHeaderProvider() { + @NonNull + @Override + public View getSectionHeaderView(@NonNull Transaction transaction, int i) { + View view = LayoutInflater.from(TransactionActivity.this).inflate(R.layout.header_transactions, null, false); + TextView textView = view.findViewById(R.id.header_name); + textView.setText(transaction.getDate()); + return view; + } + + //Checks if next transaction is listed under same heading as current transaction + @Override + public boolean isSameSection(@NonNull Transaction transaction, @NonNull Transaction nextTransaction) { + return transaction.getDateID() == nextTransaction.getDateID(); + } + + //For sticky headers + @Override + public boolean isSticky() { + return true; + } + }; + simpleRecyclerView.setSectionHeader(header); + } + + //function adds each transaction to recycler view + private void bindData() + { + List transaction_list = getData(); + + //Sort transactions in order + Collections.sort(transaction_list, (transaction, nextTransaction) -> transaction.getDateID() - nextTransaction.getDateID()); + + List cells = new ArrayList<>(); + + //Iterates through list of transactions + for (Transaction transaction : transaction_list) { + RecyclerViewAdapter cell = new RecyclerViewAdapter(transaction); + cells.add(cell); + } + + simpleRecyclerView.addCells(cells); + } + + //function to get list of transactions (currently hardcoded) + private ArrayList getData() { + + //List of transaction + ArrayList transaction_list = new ArrayList<>(); + + //Get list of unique dates (for headings) and initialize here + Date today = new Date(0, "Today"); + Date yesterday = new Date(1, "Yesterday"); + Date december23 = new Date(2, "23 December"); + + //Get list of transactions and add transaction_list + Transaction t = new Transaction("Mudies", R.drawable.ic_mealplan, "-$5.30", + "12/25/2019 5:00 PM", today); + transaction_list.add(t); + + t = new Transaction("CMH", R.drawable.ic_mealplan, "-$12.30", + "12/25/2019 3:20 PM", today); + transaction_list.add(t); + + t = new Transaction("V1 Laundry", R.drawable.ic_flexdollar, "-$1.00", + "12/24/2019 10:00 PM", yesterday); + transaction_list.add(t); + + t = new Transaction("SLC", R.drawable.ic_mealplan, "-$11.50", + "12/24/2019 1:00 PM", yesterday); + transaction_list.add(t); + + t = new Transaction("WatCard", R.drawable.ic_transfer, "+$50.00", + "12/24/2019 12:00 PM", yesterday); + transaction_list.add(t); + + t = new Transaction("WStore", R.drawable.ic_flexdollar, "-$2.50", + "12/23/2019 10:00 PM", december23); + transaction_list.add(t); + + t = new Transaction("The Market", R.drawable.ic_mealplan, "-$20.20", + "12/23/2019 4:20 AM", december23); + transaction_list.add(t); + + return transaction_list; + } +} \ No newline at end of file diff --git a/app/src/main/java/com/kevinlu/watstats/models/Date.java b/app/src/main/java/com/kevinlu/watstats/models/Date.java new file mode 100644 index 0000000..9cb6323 --- /dev/null +++ b/app/src/main/java/com/kevinlu/watstats/models/Date.java @@ -0,0 +1,20 @@ +package com.kevinlu.watstats.models; + +//Class for date (category) for listing transactions under appropriate headings +public class Date { + int id; + String date; + + public Date(int id, String date) { + this.id = id; + this.date = date; + } + + public int getId() { + return id; + } + + public String getDate() { + return date; + } +} diff --git a/app/src/main/java/com/kevinlu/watstats/models/Transaction.java b/app/src/main/java/com/kevinlu/watstats/models/Transaction.java new file mode 100644 index 0000000..853af3c --- /dev/null +++ b/app/src/main/java/com/kevinlu/watstats/models/Transaction.java @@ -0,0 +1,42 @@ +package com.kevinlu.watstats.models; + +//Class for a transactions which includes this data +public class Transaction { + private String terminal; + private int image; + private String amount; + private Date dateCategory; //used with Date class for headings + private String dateTime; //The actual text of date and time to output + + public Transaction(String terminal, int image, String amount, String dateTime, Date dateCategory) { + this.terminal = terminal; + this.image = image; + this.amount = amount; + this.dateCategory = dateCategory; + this.dateTime = dateTime; + } + + public String getTerminal() { + return terminal; + } + + public int getImage() { + return image; + } + + public String getAmount() { + return amount; + } + + public String getDateTime() { + return dateTime; + } + + public int getDateID() { + return dateCategory.getId(); + } + + public String getDate() { + return dateCategory.getDate(); + } +} diff --git a/app/src/main/res/drawable/two_rounded_corners.xml b/app/src/main/res/drawable/two_rounded_corners.xml new file mode 100644 index 0000000..f8cfe66 --- /dev/null +++ b/app/src/main/res/drawable/two_rounded_corners.xml @@ -0,0 +1,9 @@ + + + + + + + + diff --git a/app/src/main/res/layout/activity_transaction.xml b/app/src/main/res/layout/activity_transaction.xml new file mode 100644 index 0000000..af87711 --- /dev/null +++ b/app/src/main/res/layout/activity_transaction.xml @@ -0,0 +1,55 @@ + + + + + + + + + + + + + + diff --git a/app/src/main/res/layout/header_transactions.xml b/app/src/main/res/layout/header_transactions.xml new file mode 100644 index 0000000..9943c0e --- /dev/null +++ b/app/src/main/res/layout/header_transactions.xml @@ -0,0 +1,26 @@ + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/transaction_item.xml b/app/src/main/res/layout/transaction_item.xml new file mode 100644 index 0000000..3964bb4 --- /dev/null +++ b/app/src/main/res/layout/transaction_item.xml @@ -0,0 +1,45 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/build.gradle b/build.gradle index 1b230dc..b6ca987 100644 --- a/build.gradle +++ b/build.gradle @@ -22,6 +22,10 @@ allprojects { repositories { google() jcenter() + + //Added for transaction ui + maven { url "https://jitpack.io" } + maven { url "https://maven.google.com" } } }