diff --git a/app/src/main/java/cy/agorise/crystalwallet/models/CryptoNetBalance.java b/app/src/main/java/cy/agorise/crystalwallet/models/CryptoNetBalance.java index 7610555..9e4cb02 100644 --- a/app/src/main/java/cy/agorise/crystalwallet/models/CryptoNetBalance.java +++ b/app/src/main/java/cy/agorise/crystalwallet/models/CryptoNetBalance.java @@ -16,9 +16,9 @@ import cy.agorise.crystalwallet.enums.CryptoNet; import static android.arch.persistence.room.ColumnInfo.INTEGER; /** - * Represents a generic CryptoNet Account Balance - * * Created by Henry Varona on 6/9/2017. + * + * Represents a generic Account Balance from a specific CryptoNet */ @Entity @@ -31,7 +31,7 @@ public class CryptoNetBalance { private long mAccountId; /** - * The cryptonet of the account + * The crypto net of the account */ @ColumnInfo(name = "crypto_net") private CryptoNet mCryptoNet; diff --git a/app/src/main/java/cy/agorise/crystalwallet/service/CrystalWalletService.java b/app/src/main/java/cy/agorise/crystalwallet/service/CrystalWalletService.java index 453506c..ab048f6 100644 --- a/app/src/main/java/cy/agorise/crystalwallet/service/CrystalWalletService.java +++ b/app/src/main/java/cy/agorise/crystalwallet/service/CrystalWalletService.java @@ -109,7 +109,7 @@ public class CrystalWalletService extends LifecycleService { while (keepLoadingEquivalences) { try { GrapheneApiGenerator.getEquivalentValue(preferredCurrencyBitshareAsset, bitsharesAssets, service); - Thread.sleep(60000); + Thread.sleep(/*60000*/500); } catch (InterruptedException e) { Thread.currentThread().interrupt(); } diff --git a/app/src/main/java/cy/agorise/crystalwallet/views/CryptoCoinBalanceListAdapter.java b/app/src/main/java/cy/agorise/crystalwallet/views/CryptoCoinBalanceListAdapter.java index 538f72a..7554a5d 100644 --- a/app/src/main/java/cy/agorise/crystalwallet/views/CryptoCoinBalanceListAdapter.java +++ b/app/src/main/java/cy/agorise/crystalwallet/views/CryptoCoinBalanceListAdapter.java @@ -11,6 +11,8 @@ import cy.agorise.crystalwallet.models.CryptoCoinBalance; /** * Created by Henry Varona on 11/9/2017. + * + * An adapter to show the elements of a list of crypto coin balances */ public class CryptoCoinBalanceListAdapter extends ListAdapter { diff --git a/app/src/main/java/cy/agorise/crystalwallet/views/CryptoCoinBalanceListView.java b/app/src/main/java/cy/agorise/crystalwallet/views/CryptoCoinBalanceListView.java index a8aff6c..0c3e5ed 100644 --- a/app/src/main/java/cy/agorise/crystalwallet/views/CryptoCoinBalanceListView.java +++ b/app/src/main/java/cy/agorise/crystalwallet/views/CryptoCoinBalanceListView.java @@ -16,54 +16,81 @@ import cy.agorise.crystalwallet.viewmodels.CryptoCoinBalanceListViewModel; /** * Created by Henry Varona on 10/9/2017. + * + * A list view of crypto coin balances of a crypto net account */ public class CryptoCoinBalanceListView extends RelativeLayout { LayoutInflater mInflater; + /* + * The root view of this view + */ View rootView; + /* + * The list view that holds every crypto coin balance item + */ RecyclerView listView; + /* + * The adapter for the previous list view + */ CryptoCoinBalanceListAdapter listAdapter; - CryptoCoinBalanceListViewModel cryptoCoinBalanceListViewModel; - - private int visibleThreshold = 5; - private boolean loading = true; + /* + * One of three constructors needed to be inflated from a layout + */ public CryptoCoinBalanceListView(Context context){ super(context); this.mInflater = LayoutInflater.from(context); init(); } + /* + * One of three constructors needed to be inflated from a layout + */ public CryptoCoinBalanceListView(Context context, AttributeSet attrs) { super(context, attrs); this.mInflater = LayoutInflater.from(context); init(); } + /* + * One of three constructors needed to be inflated from a layout + */ public CryptoCoinBalanceListView(Context context, AttributeSet attrs, int defStyle){ super(context, attrs, defStyle); this.mInflater = LayoutInflater.from(context); init(); } + /* + * Initializes this view + */ public void init(){ rootView = mInflater.inflate(R.layout.crypto_coin_balance_list, this, true); this.listView = (RecyclerView) rootView.findViewById(R.id.cryptoCoinBalanceListView); final LinearLayoutManager linearLayoutManager = new LinearLayoutManager(this.getContext()); this.listView.setLayoutManager(linearLayoutManager); + //Prevents the UI from an infinite scrolling of balances this.listView.setNestedScrollingEnabled(false); } + /* + * Sets the data for the list of balances. + * + * @param data the list of crypto coin balances that will be show to the user + */ public void setData(List data){ + //initializes the list adapter if (this.listAdapter == null) { this.listAdapter = new CryptoCoinBalanceListAdapter(); this.listView.setAdapter(this.listAdapter); } + //sets the data of the list adapter if (data != null) { this.listAdapter.setList(data); } diff --git a/app/src/main/java/cy/agorise/crystalwallet/views/CryptoCoinBalanceViewHolder.java b/app/src/main/java/cy/agorise/crystalwallet/views/CryptoCoinBalanceViewHolder.java index 2b1373b..abdc438 100644 --- a/app/src/main/java/cy/agorise/crystalwallet/views/CryptoCoinBalanceViewHolder.java +++ b/app/src/main/java/cy/agorise/crystalwallet/views/CryptoCoinBalanceViewHolder.java @@ -19,16 +19,29 @@ import cy.agorise.crystalwallet.models.GeneralSetting; /** * Created by Henry Varona on 17/9/2017. + * + * Represents an element view from a Crypto Coin Balance List */ public class CryptoCoinBalanceViewHolder extends RecyclerView.ViewHolder { + /* + * the view holding the crypto coin name + */ private TextView cryptoCoinName; + /* + * the view holding the crypto coin balance amount + */ private TextView cryptoCoinBalance; + /* + * the view holding the crypto coin balance equivalent value + */ private TextView cryptoCoinBalanceEquivalence; + private Context context; public CryptoCoinBalanceViewHolder(View itemView) { super(itemView); + //TODO: use ButterKnife to load this cryptoCoinName = (TextView) itemView.findViewById(R.id.tvCryptoCoinName); cryptoCoinBalance = (TextView) itemView.findViewById(R.id.tvCryptoCoinBalanceAmount); cryptoCoinBalanceEquivalence = (TextView) itemView.findViewById(R.id.tvCryptoCoinBalanceEquivalence); @@ -36,35 +49,46 @@ public class CryptoCoinBalanceViewHolder extends RecyclerView.ViewHolder { } + /* + * Clears the information in this element view + */ public void clear(){ cryptoCoinName.setText("loading..."); cryptoCoinBalance.setText(""); cryptoCoinBalanceEquivalence.setText(""); } + /* + * Binds this view with the data of an element of the list + */ public void bindTo(final CryptoCoinBalance balance/*, final OnTransactionClickListener listener*/) { if (balance == null){ - cryptoCoinName.setText("loading..."); - cryptoCoinBalance.setText(""); - cryptoCoinBalanceEquivalence.setText(""); + this.clear(); } else { + //Retrieves the preferred currency selected by the user LiveData preferedCurrencySetting = CrystalDatabase.getAppDatabase(this.context).generalSettingDao().getByName(GeneralSetting.SETTING_NAME_PREFERED_CURRENCY); + //Retrieves the currency of this balance final CryptoCurrency currencyFrom = CrystalDatabase.getAppDatabase(context).cryptoCurrencyDao().getById(balance.getCryptoCurrencyId()); + //Sets the name and amount of the balance in the view cryptoCoinName.setText(currencyFrom.getName()); cryptoCoinBalance.setText("" + balance.getBalance()); + //Observes the preferred currency of the user. If the user changes it, this will change the equivalent value preferedCurrencySetting.observe((LifecycleOwner) this.context, new Observer() { @Override public void onChanged(@Nullable GeneralSetting generalSetting) { if (generalSetting != null) { + //Gets the currency object of the preferred currency CryptoCurrency currencyTo = CrystalDatabase.getAppDatabase(context).cryptoCurrencyDao().getByName(generalSetting.getValue()); + //Retrieves the equivalent value of this balance using the "From" currency and the "To" currency LiveData currencyEquivalenceLiveData = CrystalDatabase.getAppDatabase(context) .cryptoCurrencyEquivalenceDao().getByFromTo( currencyFrom.getId(), currencyTo.getId() ); + //Observes the equivalent value. If the equivalent value changes, this will keep the value showed correct currencyEquivalenceLiveData.observe((LifecycleOwner) context, new Observer() { @Override public void onChanged(@Nullable CryptoCurrencyEquivalence cryptoCurrencyEquivalence) { diff --git a/app/src/main/java/cy/agorise/crystalwallet/views/CryptoCurrencyAdapter.java b/app/src/main/java/cy/agorise/crystalwallet/views/CryptoCurrencyAdapter.java index cf5b4f3..1ddd5d9 100644 --- a/app/src/main/java/cy/agorise/crystalwallet/views/CryptoCurrencyAdapter.java +++ b/app/src/main/java/cy/agorise/crystalwallet/views/CryptoCurrencyAdapter.java @@ -14,6 +14,8 @@ import cy.agorise.crystalwallet.models.CryptoCurrency; /** * Created by Henry Varona on 25/10/2017. + * + * The adapter to show a list of crypto currencies in a spinner. */ public class CryptoCurrencyAdapter extends ArrayAdapter { @@ -29,6 +31,9 @@ public class CryptoCurrencyAdapter extends ArrayAdapter { return getView(position, convertView, parent); } + /* + * Creates the view for every element of the spinner + */ @Override public View getView(int position, View convertView, ViewGroup parent) { LayoutInflater inflater = (LayoutInflater)this.getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE); diff --git a/app/src/main/java/cy/agorise/crystalwallet/views/CryptoNetBalanceListAdapter.java b/app/src/main/java/cy/agorise/crystalwallet/views/CryptoNetBalanceListAdapter.java index 458402b..8469213 100644 --- a/app/src/main/java/cy/agorise/crystalwallet/views/CryptoNetBalanceListAdapter.java +++ b/app/src/main/java/cy/agorise/crystalwallet/views/CryptoNetBalanceListAdapter.java @@ -13,10 +13,15 @@ import cy.agorise.crystalwallet.viewmodels.CryptoCoinBalanceListViewModel; /** * Created by Henry Varona on 11/9/2017. + * + * An adapter to show the elements of a list of crypto net balances */ public class CryptoNetBalanceListAdapter extends ListAdapter { + /* + * A LifecycleOwner fragment that will be used to call the ViewModelProviders + */ Fragment fragment; public CryptoNetBalanceListAdapter(Fragment fragment) { @@ -28,7 +33,6 @@ public class CryptoNetBalanceListAdapter extends ListAdapter data, Fragment fragment){ + //initializes the list adapter if (this.listAdapter == null) { this.listAdapter = new CryptoNetBalanceListAdapter(fragment); this.listView.setAdapter(this.listAdapter); } + //sets the data of the list adapter if (data != null) { this.listAdapter.setList(data); } diff --git a/app/src/main/java/cy/agorise/crystalwallet/views/CryptoNetBalanceViewHolder.java b/app/src/main/java/cy/agorise/crystalwallet/views/CryptoNetBalanceViewHolder.java index 13836a1..ac16d1c 100644 --- a/app/src/main/java/cy/agorise/crystalwallet/views/CryptoNetBalanceViewHolder.java +++ b/app/src/main/java/cy/agorise/crystalwallet/views/CryptoNetBalanceViewHolder.java @@ -30,35 +30,57 @@ import cy.agorise.crystalwallet.viewmodels.CryptoCoinBalanceListViewModel; /** * Created by Henry Varona on 17/9/2017. + * + * Represents an element view from a Crypto Net Balance List */ public class CryptoNetBalanceViewHolder extends RecyclerView.ViewHolder { - //@BindView(R.id.ivCryptoNetIcon) + /* + * the view holding the icon of the crypto net + */ ImageView cryptoNetIcon; - //@BindView(R.id.tvCryptoNetName) + /* + * the view holding the name of the crypto net + */ TextView cryptoNetName; - //@BindView(R.id.cryptoCoinBalancesListView) + /* + * The list view of the crypto coins balances of this crypto net balance + */ CryptoCoinBalanceListView cryptoCoinBalanceListView; + /* + * The button for sending transactions from this crypto net balance account + */ @BindView(R.id.btnSendFromThisAccount) Button btnSendFromThisAccount; Context context; + /* + * the id of the account of this crypto net balance. It will be loaded + * when the element is bounded. + */ long cryptoNetAccountId; + /* + * A LifecycleOwner fragment. It will be used to call the ViewModelProviders + */ private Fragment fragment; public CryptoNetBalanceViewHolder(View itemView, Fragment fragment) { super(itemView); + //-1 represents a crypto net account not loaded yet this.cryptoNetAccountId = -1; + //TODO: use ButterKnife to load the views cryptoNetIcon = (ImageView) itemView.findViewById(R.id.ivCryptoNetIcon); cryptoNetName = (TextView) itemView.findViewById(R.id.tvCryptoNetName); cryptoCoinBalanceListView = (CryptoCoinBalanceListView) itemView.findViewById(R.id.cryptoCoinBalancesListView); btnSendFromThisAccount = (Button) itemView.findViewById(R.id.btnSendFromThisAccount); + + //Setting the send button btnSendFromThisAccount.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { @@ -73,15 +95,16 @@ public class CryptoNetBalanceViewHolder extends RecyclerView.ViewHolder { cryptoNetName.setText("loading..."); } - //@OnClick(R.id.btnSendFromThisAccount) + /* + * dispatch the user to the send activity using this account + */ public void sendFromThisAccount(){ + //if the crypto net account was loaded if (this.cryptoNetAccountId >= 0) { - //Intent intent = new Intent(this.context, SendTransactionActivity.class); - //this.context.startActivity(intent); - Intent startActivity = new Intent(); startActivity.setClass(context, SendTransactionActivity.class); startActivity.setAction(SendTransactionActivity.class.getName()); + //Pass the account id as an extra parameter to the send activity startActivity.putExtra("CRYPTO_NET_ACCOUNT_ID", this.cryptoNetAccountId); startActivity.setFlags( Intent.FLAG_ACTIVITY_NEW_TASK @@ -90,6 +113,9 @@ public class CryptoNetBalanceViewHolder extends RecyclerView.ViewHolder { } } + /* + * Binds this view with the data of an element of the list + */ public void bindTo(final CryptoNetBalance balance) { if (balance == null){ cryptoNetName.setText("loading..."); @@ -97,12 +123,14 @@ public class CryptoNetBalanceViewHolder extends RecyclerView.ViewHolder { this.cryptoNetAccountId = balance.getAccountId(); cryptoNetName.setText(balance.getCryptoNet().getLabel()); + //Loads the crypto coin balance list of this account using a ViewModel and retrieving a LiveData List CryptoCoinBalanceListViewModel cryptoCoinBalanceListViewModel = ViewModelProviders.of(this.fragment).get(CryptoCoinBalanceListViewModel.class); cryptoCoinBalanceListViewModel.init(balance.getAccountId()); LiveData> cryptoCoinBalanceData = cryptoCoinBalanceListViewModel.getCryptoCoinBalanceList(); cryptoCoinBalanceListView.setData(null); + //Observes the livedata, so any of its changes on the database will be reloaded here cryptoCoinBalanceData.observe((LifecycleOwner)this.itemView.getContext(), new Observer>() { @Override public void onChanged(List cryptoCoinBalances) { diff --git a/app/src/main/java/cy/agorise/crystalwallet/views/TransactionListAdapter.java b/app/src/main/java/cy/agorise/crystalwallet/views/TransactionListAdapter.java index 15e1403..6eee357 100644 --- a/app/src/main/java/cy/agorise/crystalwallet/views/TransactionListAdapter.java +++ b/app/src/main/java/cy/agorise/crystalwallet/views/TransactionListAdapter.java @@ -21,6 +21,11 @@ import cy.agorise.crystalwallet.models.CryptoCoinTransaction; /** * Created by Henry Varona on 11/9/2017. + * + * An adapter to show the elements of a list of crypto net account transactions. + * + * Extends from a paged list, so not all transactions will be loaded immediately, but only a segment + * that will be extended with the scroll of the user */ public class TransactionListAdapter extends PagedListAdapter { diff --git a/app/src/main/java/cy/agorise/crystalwallet/views/TransactionListView.java b/app/src/main/java/cy/agorise/crystalwallet/views/TransactionListView.java index 1e7f0b1..8574d95 100644 --- a/app/src/main/java/cy/agorise/crystalwallet/views/TransactionListView.java +++ b/app/src/main/java/cy/agorise/crystalwallet/views/TransactionListView.java @@ -15,45 +15,75 @@ import cy.agorise.crystalwallet.viewmodels.TransactionListViewModel; /** * Created by Henry Varona on 10/9/2017. + * + * A list view showing many crypto net account transactions elements */ public class TransactionListView extends RelativeLayout { LayoutInflater mInflater; + /* + * The root view of this view + */ View rootView; + /* + * The list view that holds every transaction item + */ RecyclerView listView; + /* + * The adapter for the previous list view + */ TransactionListAdapter listAdapter; TransactionListViewModel transactionListViewModel; + /* + * how much transactions will remain to show before the list loads more + */ private int visibleThreshold = 5; + /* + * if true, the transaction list will be loading new data + */ private boolean loading = true; + /* + * One of three constructors needed to be inflated from a layout + */ public TransactionListView(Context context){ super(context); this.mInflater = LayoutInflater.from(context); init(); } + /* + * One of three constructors needed to be inflated from a layout + */ public TransactionListView(Context context, AttributeSet attrs) { super(context, attrs); this.mInflater = LayoutInflater.from(context); init(); } + /* + * One of three constructors needed to be inflated from a layout + */ public TransactionListView(Context context, AttributeSet attrs, int defStyle){ super(context, attrs, defStyle); this.mInflater = LayoutInflater.from(context); init(); } + /* + * Initializes this view + */ public void init(){ rootView = mInflater.inflate(R.layout.transaction_list, this, true); this.listView = rootView.findViewById(R.id.transactionListView); final LinearLayoutManager linearLayoutManager = new LinearLayoutManager(this.getContext()); this.listView.setLayoutManager(linearLayoutManager); + //Prevents the list to start again when scrolling to the end this.listView.setNestedScrollingEnabled(false); @@ -74,12 +104,19 @@ public class TransactionListView extends RelativeLayout { //} + /* + * Sets the elements data of this view + * + * @param data the transactions that will be showed to the user + */ public void setData(PagedList data){ + //Initializes the adapter of the transaction list if (this.listAdapter == null) { this.listAdapter = new TransactionListAdapter(); this.listView.setAdapter(this.listAdapter); } + //Sets the data of the transaction list if (data != null) { this.listAdapter.setList(data); } diff --git a/app/src/main/java/cy/agorise/crystalwallet/views/TransactionViewHolder.java b/app/src/main/java/cy/agorise/crystalwallet/views/TransactionViewHolder.java index b10c454..dfccc6c 100644 --- a/app/src/main/java/cy/agorise/crystalwallet/views/TransactionViewHolder.java +++ b/app/src/main/java/cy/agorise/crystalwallet/views/TransactionViewHolder.java @@ -9,28 +9,46 @@ import cy.agorise.crystalwallet.models.CryptoCoinTransaction; /** * Created by Henry Varona on 17/9/2017. + * + * Represents a transaction view in the crypto net account transaction list */ public class TransactionViewHolder extends RecyclerView.ViewHolder { + /* + * The view holding the transaction "from" + */ private TextView transactionFrom; + /* + * The view holding the transaction "to" + */ private TextView transactionTo; + /* + * The view holding the transaction amount + */ private TextView transactionAmount; public TransactionViewHolder(View itemView) { super(itemView); + //TODO: use ButterKnife to load this transactionFrom = (TextView) itemView.findViewById(R.id.fromText); transactionTo = (TextView) itemView.findViewById(R.id.toText); transactionAmount = (TextView) itemView.findViewById(R.id.amountText); } + /* + * Clears all info in this element view + */ public void clear(){ transactionFrom.setText("loading..."); transactionTo.setText(""); transactionAmount.setText(""); } + /* + * Binds a transaction object with this element view + */ public void bindTo(final CryptoCoinTransaction transaction/*, final OnTransactionClickListener listener*/) { if (transaction == null){ transactionFrom.setText("loading..."); @@ -40,6 +58,7 @@ public class TransactionViewHolder extends RecyclerView.ViewHolder { transactionFrom.setText(transaction.getFrom()); transactionTo.setText(transaction.getTo()); transactionAmount.setText("" + transaction.getAmount()); + //This will load the transaction receipt when the user clicks this view /*itemView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) {