diff --git a/.idea/caches/build_file_checksums.ser b/.idea/caches/build_file_checksums.ser index 74a7bb1..010c3e1 100644 Binary files a/.idea/caches/build_file_checksums.ser and b/.idea/caches/build_file_checksums.ser differ diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index b5c41ae..d1b92eb 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -41,7 +41,8 @@ - + + \ No newline at end of file diff --git a/app/src/main/java/monnethic/mobile/database/Transaction.java b/app/src/main/java/monnethic/mobile/database/Transaction.java index 614e124..82cec14 100644 --- a/app/src/main/java/monnethic/mobile/database/Transaction.java +++ b/app/src/main/java/monnethic/mobile/database/Transaction.java @@ -10,6 +10,10 @@ public class Transaction { private String transactionUnit; //Constructors + public Transaction(){ + + } + public Transaction(String transactionFrom, String transactionTo, String transactionHash, Double transactionAmount, String transactionUnit) { this.transactionFrom = transactionFrom; this.transactionTo = transactionTo; diff --git a/app/src/main/java/monnethic/mobile/history/HistoryActivity.java b/app/src/main/java/monnethic/mobile/history/HistoryActivity.java new file mode 100644 index 0000000..f6fd364 --- /dev/null +++ b/app/src/main/java/monnethic/mobile/history/HistoryActivity.java @@ -0,0 +1,202 @@ +package monnethic.mobile.history; + +import android.app.DatePickerDialog; +import android.content.Intent; +import android.os.AsyncTask; +import android.support.v7.app.AppCompatActivity; +import android.os.Bundle; +import android.view.View; +import android.widget.AdapterView; +import android.widget.ArrayAdapter; +import android.widget.Button; +import android.widget.CompoundButton; +import android.widget.DatePicker; +import android.widget.EditText; +import android.widget.ListView; +import android.widget.Spinner; +import android.widget.Switch; +import android.widget.Toast; +import com.example.monnthic.monnethicmobile.R; +import java.text.SimpleDateFormat; +import java.util.ArrayList; +import java.util.Calendar; +import java.util.List; +import java.util.Locale; +import monnethic.mobile.database.Transaction; +import monnethic.mobile.restApi.Config; +import monnethic.mobile.restApi.TransactionApiHandler; +import monnethic.mobile.transaction.TransactionAdapter; + +public class HistoryActivity extends AppCompatActivity { + private String wallet_hash; + private String user_hash; + private String user_password; + private String session_id; + + final Calendar calendar1 = Calendar.getInstance(); + final Calendar calendar2 = Calendar.getInstance(); + private Button btnSearchTransactions; + private EditText inputSize; + private EditText fromDate; + private EditText toDate; + private Spinner spinner; + private Switch aSwitch; + private ListView listView; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_history); + + getIntentValue(); + initView(); + } + + private void getIntentValue(){ + Intent intent = getIntent(); + user_hash = intent.getStringExtra("USER_HASH"); + user_password = intent.getStringExtra("USER_PWD"); + session_id = intent.getStringExtra("SESSION_ID"); + wallet_hash = intent.getStringExtra("WALLET_HASH"); + } + + private void initView(){ + dateInit(); + buttonInit(); + switchInit(); + spinnerInit(); + listViewHandler(); + inputSize = findViewById(R.id.inputSize); + } + + public void dateInit(){ + DatePickerDialog.OnDateSetListener fromDatePicker = new DatePickerDialog.OnDateSetListener() { + @Override + public void onDateSet(DatePicker datePicker, int year, int monthOfYear, int dayOfMonth) { + calendar1.set(Calendar.YEAR, year); + calendar1.set(Calendar.MONTH, monthOfYear); + calendar1.set(Calendar.DAY_OF_MONTH, dayOfMonth); + updateLabel(0); + } + }; + fromDate = findViewById(R.id.fromDate); + fromDate.setEnabled(false); + fromDate.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + new DatePickerDialog(HistoryActivity.this, fromDatePicker, calendar1.get(Calendar.YEAR), + calendar1.get(Calendar.MONTH), calendar1.get(Calendar.DAY_OF_MONTH)).show(); + //Toast.makeText(HistoryActivity.this,"Clicked fromDate",Toast.LENGTH_SHORT).show(); + } + }); + + DatePickerDialog.OnDateSetListener toDatePicker = new DatePickerDialog.OnDateSetListener() { + @Override + public void onDateSet(DatePicker datePicker, int year, int monthOfYear, int dayOfMonth) { + calendar2.set(Calendar.YEAR, year); + calendar2.set(Calendar.MONTH, monthOfYear); + calendar2.set(Calendar.DAY_OF_MONTH, dayOfMonth); + updateLabel(1); + } + }; + toDate = findViewById(R.id.toDate); + toDate.setEnabled(false); + toDate.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + new DatePickerDialog(HistoryActivity.this, toDatePicker, calendar2.get(Calendar.YEAR), + calendar2.get(Calendar.MONTH), calendar2.get(Calendar.DAY_OF_MONTH)).show(); + } + }); + } + + public void updateLabel(int idDate){ + String myFormat = "dd-MM-yyyy"; + SimpleDateFormat sdf = new SimpleDateFormat(myFormat, Locale.FRANCE); + if(idDate==0){ + fromDate.setText(sdf.format(calendar1.getTime())); + }else { + toDate.setText(sdf.format(calendar2.getTime())); + } + } + + public void buttonInit(){ + btnSearchTransactions = findViewById(R.id.buttonSearchTransaction); + btnSearchTransactions.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + Toast.makeText(HistoryActivity.this,"Spinner :"+String.valueOf(spinner.getSelectedItem()),Toast.LENGTH_SHORT).show(); + } + }); + + } + + public void switchInit(){ + aSwitch = findViewById(R.id.switchDate); + aSwitch.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { + @Override + public void onCheckedChanged(CompoundButton compoundButton, boolean b) { + if(aSwitch.isChecked()){ + fromDate.setEnabled(true); + toDate.setEnabled(true); + }else{ + fromDate.setEnabled(false); + toDate.setEnabled(false); + } + } + }); + + } + + public void spinnerInit(){ + spinner = findViewById(R.id.spinner); + + List listOptions = new ArrayList<>(); + listOptions.add("All"); + listOptions.add("Received"); + listOptions.add("Sent"); + ArrayAdapter adapterOptions = new ArrayAdapter<>(this,android.R.layout.simple_spinner_dropdown_item,listOptions); + adapterOptions.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); + spinner.setAdapter(adapterOptions); + } + + public void listViewHandler(){ + listView = findViewById(R.id.listViewTransactions); + ArrayList transactions = new ArrayList<>(); + try{ + transactions = new getTransactionTask().execute(Config.TRANSACTION_LATEST,wallet_hash).get(); + }catch (Exception e){ + e.printStackTrace(); + } + + TransactionAdapter adapter = new TransactionAdapter(this,transactions,wallet_hash); + listView.setAdapter(adapter); + + listView.setOnItemClickListener(new AdapterView.OnItemClickListener() { + @Override + public void onItemClick(AdapterView adapterView, View view, int i, long l) { + Transaction t = (Transaction) listView.getItemAtPosition(i); + Toast.makeText(HistoryActivity.this,"TxID: "+t.getTransactionHash(),Toast.LENGTH_SHORT).show(); + } + }); + + } + + private class getTransactionTask extends AsyncTask,ArrayList> { + + @Override + protected ArrayList doInBackground(String... strings) { + ArrayList transactionsList = new ArrayList<>(); + try{ + TransactionApiHandler transactionApiHandler = new TransactionApiHandler(); + transactionsList = transactionApiHandler.getTransactions(strings[0],strings[1]); + }catch (Exception e){ + e.printStackTrace(); + } + return transactionsList; + } + } + + + +} diff --git a/app/src/main/java/monnethic/mobile/restApi/Config.java b/app/src/main/java/monnethic/mobile/restApi/Config.java index c699697..0b24fc8 100644 --- a/app/src/main/java/monnethic/mobile/restApi/Config.java +++ b/app/src/main/java/monnethic/mobile/restApi/Config.java @@ -25,7 +25,7 @@ public class Config { //TRANSACTION static public String TRANSACTION_SEND = BASE_URL_TRANSACTION+"send"; static public String TRANSACTION_GET = BASE_URL_TRANSACTION+"get"; - static public String TRANSACTION_LATEST = BASE_URL_TRANSACTION+"getLatest"; + static public String TRANSACTION_LATEST = BASE_URL_TRANSACTION+"/get/latest"; static public String TRANSACTION_ALL = BASE_URL_TRANSACTION+"getAll"; static public String TRANSACTION_SENT = BASE_URL_TRANSACTION+"sent"; static public String TRANSACTION_RECEIVED = BASE_URL_TRANSACTION+"received"; diff --git a/app/src/main/java/monnethic/mobile/restApi/HttpCallHandler.java b/app/src/main/java/monnethic/mobile/restApi/HttpCallHandler.java index 86e53df..3aca8bb 100644 --- a/app/src/main/java/monnethic/mobile/restApi/HttpCallHandler.java +++ b/app/src/main/java/monnethic/mobile/restApi/HttpCallHandler.java @@ -41,6 +41,8 @@ public class HttpCallHandler { } + + public String postHttp(URL url, Map params) throws Exception { String returnValue=null; HttpURLConnection urlConnection = null; diff --git a/app/src/main/java/monnethic/mobile/restApi/TransactionApiHandler.java b/app/src/main/java/monnethic/mobile/restApi/TransactionApiHandler.java index 5228e89..30f9481 100644 --- a/app/src/main/java/monnethic/mobile/restApi/TransactionApiHandler.java +++ b/app/src/main/java/monnethic/mobile/restApi/TransactionApiHandler.java @@ -1,9 +1,13 @@ package monnethic.mobile.restApi; +import org.json.JSONArray; import org.json.JSONObject; import java.net.URL; +import java.util.ArrayList; import java.util.HashMap; import java.util.Map; + +import monnethic.mobile.database.Transaction; import monnethic.mobile.transaction.SendingTransaction; public class TransactionApiHandler { @@ -27,4 +31,35 @@ public class TransactionApiHandler { } return ""; } + + public ArrayList getTransactions(String url, String wallet_hash){ + ArrayList transactionsList = new ArrayList<>(); + HttpCallHandler httpCallHandler = new HttpCallHandler(); + try{ + url = url+"?wallet_hash="+wallet_hash; + + + + String response = httpCallHandler.getHttp(new URL(url)); + JSONArray jsonArray = new JSONArray(response); + + for(int i=0; i { + private String wallet_hash; + + public TransactionAdapter(Context context, ArrayList transactions, String wallet_hash){ + super(context,0,transactions); + this.wallet_hash = wallet_hash; + } + + @Override + public View getView(int position, View convertView, ViewGroup parent){ + Transaction transaction = getItem(position); + + if(convertView == null){ + convertView = LayoutInflater.from(getContext()).inflate(R.layout.transaction_view_template, parent, false); + } + + TextView txID = convertView.findViewById(R.id.displayTxId); + TextView date = convertView.findViewById(R.id.displayTxDate); + TextView type = convertView.findViewById(R.id.displayTxType); + TextView amount = convertView.findViewById(R.id.displayTxAmount); + + + ViewGroup.LayoutParams params = convertView.getLayoutParams(); + params.height = 250; + convertView.setLayoutParams(params); + + String myFormat = "dd-MM-yyyy HH:mm:ss"; + SimpleDateFormat sdf = new SimpleDateFormat(myFormat, Locale.FRANCE); + Date dateTransaction = new Date(transaction.getTransactionDate()); + + String typeOfTransaction; + if(transaction.getTransactionFrom().equals(wallet_hash)){ + typeOfTransaction="Sent"; + }else{ + typeOfTransaction="Received"; + } + + txID.setText(transaction.getTransactionHash()); + date.setText(sdf.format(dateTransaction)); + type.setText(typeOfTransaction); + amount.setText(String.valueOf(transaction.getTransactionAmount())); + + return convertView; + } + +} diff --git a/app/src/main/java/monnethic/mobile/user/UserAccountActivity.java b/app/src/main/java/monnethic/mobile/user/UserAccountActivity.java index c43af66..10e0b4a 100644 --- a/app/src/main/java/monnethic/mobile/user/UserAccountActivity.java +++ b/app/src/main/java/monnethic/mobile/user/UserAccountActivity.java @@ -10,6 +10,7 @@ import android.widget.TextView; import android.widget.Toast; import com.example.monnthic.monnethicmobile.R; +import monnethic.mobile.history.HistoryActivity; import monnethic.mobile.restApi.SessionApiHandler; import monnethic.mobile.restApi.WalletApiHandler; import monnethic.mobile.transaction.MakePayementActivity; @@ -32,6 +33,7 @@ public class UserAccountActivity extends AppCompatActivity { Button buttonReceive = findViewById(R.id.buttonReceive); Button buttonSettings = findViewById(R.id.buttonSettings); Button buttonRefresh = findViewById(R.id.buttonRefreshBalance); + Button buttonHistory = findViewById(R.id.goToHistory); Intent intent = getIntent(); user_hash = intent.getStringExtra("USER_HASH"); @@ -69,6 +71,12 @@ public class UserAccountActivity extends AppCompatActivity { new GetUserBalanceTask().execute(wallet_hash); } }); + buttonHistory.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + history(); + } + }); String[] params = {wallet_hash}; new GetUserBalanceTask().execute(params); @@ -94,6 +102,15 @@ public class UserAccountActivity extends AppCompatActivity { Toast.makeText(this, "Coming soon", Toast.LENGTH_SHORT).show(); } + public void history(){ + Intent historyIntent = new Intent(UserAccountActivity.this, HistoryActivity.class); + historyIntent.putExtra("USER_HASH",user_hash); + historyIntent.putExtra("USER_PWD",user_password); + historyIntent.putExtra("WALLET_HASH",wallet_hash); + historyIntent.putExtra("SESSION_ID",session_id); + UserAccountActivity.this.startActivity(historyIntent); + } + public class GetUserBalanceTask extends AsyncTask { @Override diff --git a/app/src/main/res/layout/activity_history.xml b/app/src/main/res/layout/activity_history.xml new file mode 100644 index 0000000..d022e70 --- /dev/null +++ b/app/src/main/res/layout/activity_history.xml @@ -0,0 +1,99 @@ + + + + + + + + + + + + + + + + + + + +