diff --git a/app/src/main/java/cy/agorise/crystalwallet/activities/IntroActivity.java b/app/src/main/java/cy/agorise/crystalwallet/activities/IntroActivity.java index 89a46a6..68ae134 100644 --- a/app/src/main/java/cy/agorise/crystalwallet/activities/IntroActivity.java +++ b/app/src/main/java/cy/agorise/crystalwallet/activities/IntroActivity.java @@ -55,7 +55,7 @@ public class IntroActivity extends AppCompatActivity { /*CrystalDatabase db = CrystalDatabase.getAppDatabase(getApplicationContext()); List seeds = RandomSeedGenerator.generateSeeds(2); for(int i=0;i accounts = RandomCryptoNetAccountGenerator.generateAccounts(5,seeds); diff --git a/app/src/main/java/cy/agorise/crystalwallet/dao/CryptoCoinBalanceDao.java b/app/src/main/java/cy/agorise/crystalwallet/dao/CryptoCoinBalanceDao.java index 4a1da53..f66f58a 100644 --- a/app/src/main/java/cy/agorise/crystalwallet/dao/CryptoCoinBalanceDao.java +++ b/app/src/main/java/cy/agorise/crystalwallet/dao/CryptoCoinBalanceDao.java @@ -22,8 +22,11 @@ public interface CryptoCoinBalanceDao { @Query("SELECT * FROM crypto_coin_balance") List getAll(); - @Query("SELECT * FROM crypto_net_account WHERE account_id = :acountId") - LiveData> getAllFromAccount(long accountId); + @Query("SELECT id as account_id, account_number FROM crypto_net_account") + LiveData> getAllBalances(); + + @Query("SELECT * FROM crypto_coin_balance WHERE account_id = :accountId") + LiveData> getBalancesFromAccount(long accountId); @Insert(onConflict = OnConflictStrategy.REPLACE) public long[] insertCryptoCoinBalance(CryptoCoinBalance... balances); diff --git a/app/src/main/java/cy/agorise/crystalwallet/dao/CryptoNetAccountDao.java b/app/src/main/java/cy/agorise/crystalwallet/dao/CryptoNetAccountDao.java index 2368408..a480fb7 100644 --- a/app/src/main/java/cy/agorise/crystalwallet/dao/CryptoNetAccountDao.java +++ b/app/src/main/java/cy/agorise/crystalwallet/dao/CryptoNetAccountDao.java @@ -23,14 +23,7 @@ public interface CryptoNetAccountDao { @Query("SELECT * FROM crypto_net_account") List getAll(); - @Query("SELECT * FROM crypto_net_account") - LiveData> getAllBalances(); - - @Query("SELECT 'Bitshares' as coin, 1 as balance FROM crypto_net_account WHERE id = :accountId") - LiveData> getBalancesFromAccount(long accountId); - - @Insert(onConflict = OnConflictStrategy.REPLACE) - public long[] insertCryptoNetAccount(CryptoNetAccount... accounts); + public long[] insertCryptoNetAccount(CryptoNetAccount... accounts); } diff --git a/app/src/main/java/cy/agorise/crystalwallet/dao/CrystalDatabase.java b/app/src/main/java/cy/agorise/crystalwallet/dao/CrystalDatabase.java index bb4d7d2..07c8304 100644 --- a/app/src/main/java/cy/agorise/crystalwallet/dao/CrystalDatabase.java +++ b/app/src/main/java/cy/agorise/crystalwallet/dao/CrystalDatabase.java @@ -10,6 +10,7 @@ import android.content.Context; import cy.agorise.crystalwallet.dao.converters.Converters; import cy.agorise.crystalwallet.models.AccountSeed; +import cy.agorise.crystalwallet.models.CryptoCoinBalance; import cy.agorise.crystalwallet.models.CryptoCoinTransaction; import cy.agorise.crystalwallet.models.CryptoCurrency; import cy.agorise.crystalwallet.models.CryptoNetAccount; @@ -19,7 +20,7 @@ import cy.agorise.crystalwallet.models.CryptoNetAccount; * Created by Henry Varona on 4/9/2017. */ -@Database(entities = {AccountSeed.class, CryptoNetAccount.class, CryptoCoinTransaction.class, CryptoCurrency.class}, version = 2) +@Database(entities = {AccountSeed.class, CryptoNetAccount.class, CryptoCoinTransaction.class, CryptoCurrency.class, CryptoCoinBalance.class}, version = 2) @TypeConverters({Converters.class}) public abstract class CrystalDatabase extends RoomDatabase { @@ -28,6 +29,7 @@ public abstract class CrystalDatabase extends RoomDatabase { public abstract AccountSeedDao accountSeedDao(); public abstract CryptoNetAccountDao cryptoNetAccountDao(); public abstract TransactionDao transactionDao(); + public abstract CryptoCoinBalanceDao cryptoCoinBalanceDao(); public static CrystalDatabase getAppDatabase(Context context) { if (instance == null) { diff --git a/app/src/main/java/cy/agorise/crystalwallet/dao/converters/Converters.java b/app/src/main/java/cy/agorise/crystalwallet/dao/converters/Converters.java index 9fa6cb4..f027c4d 100644 --- a/app/src/main/java/cy/agorise/crystalwallet/dao/converters/Converters.java +++ b/app/src/main/java/cy/agorise/crystalwallet/dao/converters/Converters.java @@ -103,4 +103,18 @@ public class Converters { return SeedType.valueOf(value); } } + + @TypeConverter + public int cryptoNetToAccountNumber(CryptoNet value) { + if (value == null) { + return -1; + } else { + return value.getBip44Index(); + } + } + + @TypeConverter + public CryptoNet accountNumberToCryptoNet(int value) { + return CryptoNet.fromBip44Index(value); + } } diff --git a/app/src/main/java/cy/agorise/crystalwallet/enums/CryptoNet.java b/app/src/main/java/cy/agorise/crystalwallet/enums/CryptoNet.java index d3d81ed..6ee7fef 100644 --- a/app/src/main/java/cy/agorise/crystalwallet/enums/CryptoNet.java +++ b/app/src/main/java/cy/agorise/crystalwallet/enums/CryptoNet.java @@ -1,6 +1,8 @@ package cy.agorise.crystalwallet.enums; import java.io.Serializable; +import java.util.HashMap; +import java.util.Map; /** * CryptoNet Enumeration, a Crypto Net is define as the net where a CryptoCoin works, iniside the @@ -9,16 +11,25 @@ import java.io.Serializable; * Created by Henry Varona on 12/9/2017. */ public enum CryptoNet implements Serializable { - BITCOIN("BITCOIN",6), BITCOIN_TEST("BITCOIN(TEST)",6), LITECOIN("LITECOIN",6), DASH("DASH",6), DOGECOIN("DOGECOIN",6), BITSHARES("BITSHARES",1), STEEM("STEEN",1); + UNKNOWN("UNKNOWN",6,-1), BITCOIN("BITCOIN",6,1), BITCOIN_TEST("BITCOIN(TEST)",6,2), LITECOIN("LITECOIN",6,3), DASH("DASH",6,5), DOGECOIN("DOGECOIN",6,4), BITSHARES("BITSHARES",1,6), STEEM("STEEM",1,7); protected String label; protected int confirmationsNeeded; + protected int bip44Index; - CryptoNet(String label,int confirmationsNeeded){ + private static Map bip44Map = new HashMap(); + static { + for (CryptoNet cryptoNetEnum : CryptoNet.values()) { + bip44Map.put(cryptoNetEnum.bip44Index, cryptoNetEnum); + } + } + + CryptoNet(String label,int confirmationsNeeded, int bip44Index){ this.label = label; this.confirmationsNeeded = confirmationsNeeded; + this.bip44Index = bip44Index; } public String getLabel(){ @@ -28,4 +39,16 @@ public enum CryptoNet implements Serializable { public int getConfirmationsNeeded(){ return this.confirmationsNeeded; } + + public int getBip44Index(){ + return this.bip44Index; + } + + public static CryptoNet fromBip44Index(int index){ + if (bip44Map.containsKey(index)) { + return bip44Map.get(index); + } else { + return CryptoNet.UNKNOWN; + } + } } diff --git a/app/src/main/java/cy/agorise/crystalwallet/fragments/BalanceFragment.java b/app/src/main/java/cy/agorise/crystalwallet/fragments/BalanceFragment.java index ed553d5..998cbd8 100644 --- a/app/src/main/java/cy/agorise/crystalwallet/fragments/BalanceFragment.java +++ b/app/src/main/java/cy/agorise/crystalwallet/fragments/BalanceFragment.java @@ -1,5 +1,8 @@ package cy.agorise.crystalwallet.fragments; +import android.arch.lifecycle.LiveData; +import android.arch.lifecycle.Observer; +import android.arch.lifecycle.ViewModelProviders; import android.content.Context; import android.net.Uri; import android.os.Bundle; @@ -8,9 +11,22 @@ import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; +import java.util.List; + +import butterknife.BindView; +import butterknife.ButterKnife; import cy.agorise.crystalwallet.R; +import cy.agorise.crystalwallet.models.CryptoNetBalance; +import cy.agorise.crystalwallet.viewmodels.CryptoCoinBalanceListViewModel; +import cy.agorise.crystalwallet.viewmodels.CryptoNetBalanceListViewModel; +import cy.agorise.crystalwallet.views.CryptoNetBalanceListView; public class BalanceFragment extends Fragment { + CryptoNetBalanceListViewModel cryptoNetBalanceListViewModel; + + @BindView(R.id.vCryptoNetBalanceListView) + CryptoNetBalanceListView vCryptoNetBalanceListView; + public BalanceFragment() { // Required empty public constructor } @@ -31,6 +47,20 @@ public class BalanceFragment extends Fragment { public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { // Inflate the layout for this fragment - return inflater.inflate(R.layout.fragment_balance, container, false); + View view = inflater.inflate(R.layout.fragment_balance, container, false); + ButterKnife.bind(this, view); + + cryptoNetBalanceListViewModel = ViewModelProviders.of(this).get(CryptoNetBalanceListViewModel.class); + LiveData> cryptoNetBalanceData = cryptoNetBalanceListViewModel.getCryptoNetBalanceList(); + vCryptoNetBalanceListView.setData(null); + + cryptoNetBalanceData.observe(this, new Observer>() { + @Override + public void onChanged(List cryptoNetBalances) { + vCryptoNetBalanceListView.setData(cryptoNetBalances); + } + }); + + return view; } } diff --git a/app/src/main/java/cy/agorise/crystalwallet/models/CryptoCoinBalance.java b/app/src/main/java/cy/agorise/crystalwallet/models/CryptoCoinBalance.java index c7e842a..92583ea 100644 --- a/app/src/main/java/cy/agorise/crystalwallet/models/CryptoCoinBalance.java +++ b/app/src/main/java/cy/agorise/crystalwallet/models/CryptoCoinBalance.java @@ -24,6 +24,13 @@ import cy.agorise.crystalwallet.enums.CryptoCoin; childColumns = "account_id")) public class CryptoCoinBalance { + /** + * The id on the database + */ + @PrimaryKey(autoGenerate = true) + @ColumnInfo(name = "id") + private long mId; + @ColumnInfo(name="account_id") private long mAccountId; @@ -33,6 +40,14 @@ public class CryptoCoinBalance { @ColumnInfo(name = "balance") private int mBalance; + public long getId() { + return mId; + } + + public void setId(long id) { + this.mId = id; + } + public long getAccountId() { return mAccountId; } 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 af05fc5..7f35c7a 100644 --- a/app/src/main/java/cy/agorise/crystalwallet/models/CryptoNetBalance.java +++ b/app/src/main/java/cy/agorise/crystalwallet/models/CryptoNetBalance.java @@ -4,98 +4,59 @@ package cy.agorise.crystalwallet.models; import android.arch.persistence.room.ColumnInfo; import android.arch.persistence.room.Entity; import android.arch.persistence.room.ForeignKey; +import android.arch.persistence.room.Ignore; import android.arch.persistence.room.Index; import android.arch.persistence.room.PrimaryKey; import android.support.annotation.NonNull; import android.support.v7.recyclerview.extensions.DiffCallback; import cy.agorise.crystalwallet.enums.CryptoCoin; +import cy.agorise.crystalwallet.enums.CryptoNet; + +import static android.arch.persistence.room.ColumnInfo.INTEGER; /** - * Represents a geneeric CryptoNet Account Balance + * Represents a generic CryptoNet Account Balance * * Created by Henry Varona on 6/9/2017. */ -@Entity(tableName = "crypto_net_account", - indices = {@Index("id"),@Index("seed_id")}, - foreignKeys = @ForeignKey(entity = AccountSeed.class, - parentColumns = "id", - childColumns = "seed_id")) +@Entity public class CryptoNetBalance { /** - * The id on the database + * The id of the account of this balance */ - @PrimaryKey(autoGenerate = true) - @ColumnInfo(name = "id") - private long mId; + @ColumnInfo(name = "account_id") + private long mAccountId; /** - * The id of the seed used by this account + * The cryptonet of the account */ - @ColumnInfo(name = "seed_id") - private long mSeedId; + @ColumnInfo(name = "account_number", typeAffinity = INTEGER) + private CryptoNet mCryptoNet; - /** - * The account number on the bip44 or slip44 - */ - @ColumnInfo(name = "account_number") - private int mAccountNumber; - - /** - * The account index on this wallet - */ - @ColumnInfo(name = "account_index") - private int mAccountIndex; - - private CryptoCoin mCryptoCoin; - - public long getId() { - return mId; + public long getAccountId() { + return mAccountId; } - public void setId(long id) { - this.mId = id; + public CryptoNet getCryptoNet() { + return mCryptoNet; } - public long getSeedId() { - return mSeedId; + public void setAccountId(long accountId) { + this.mAccountId = accountId; } - public void setSeedId(long seedId) { - this.mSeedId = seedId; - } - - public int getAccountNumber() { - return mAccountNumber; - } - - public void setAccountNumber(int accountNumber) { - this.mAccountNumber = accountNumber; - } - - public int getAccountIndex() { - return mAccountIndex; - } - - public void setAccountIndex(int accountIndex) { - this.mAccountIndex = accountIndex; - } - - public CryptoCoin getCryptoCoin() { - return mCryptoCoin; - } - - public void setCryptoCoin(CryptoCoin cryptoCoin) { - this.mCryptoCoin = cryptoCoin; + public void setCryptoNet(CryptoNet cryptoNet) { + this.mCryptoNet = cryptoNet; } public static final DiffCallback DIFF_CALLBACK = new DiffCallback() { @Override public boolean areItemsTheSame( @NonNull CryptoNetBalance oldBalance, @NonNull CryptoNetBalance newBalance) { - return oldBalance.getId() == newBalance.getId(); + return oldBalance.getAccountId() == newBalance.getAccountId(); } @Override public boolean areContentsTheSame( @@ -110,11 +71,7 @@ public class CryptoNetBalance { if (o == null || getClass() != o.getClass()) return false; CryptoNetBalance that = (CryptoNetBalance) o; - - if (mId != that.mId) return false; - if (mSeedId != that.mSeedId) return false; - if (mAccountNumber != that.mAccountNumber) return false; - return mAccountIndex == that.mAccountIndex; + return mAccountId == that.mAccountId; } } diff --git a/app/src/main/java/cy/agorise/crystalwallet/randomdatagenerators/RandomCryptoNetAccountGenerator.java b/app/src/main/java/cy/agorise/crystalwallet/randomdatagenerators/RandomCryptoNetAccountGenerator.java index b26f029..3ecd528 100644 --- a/app/src/main/java/cy/agorise/crystalwallet/randomdatagenerators/RandomCryptoNetAccountGenerator.java +++ b/app/src/main/java/cy/agorise/crystalwallet/randomdatagenerators/RandomCryptoNetAccountGenerator.java @@ -1,9 +1,11 @@ package cy.agorise.crystalwallet.randomdatagenerators; +import java.lang.reflect.Array; import java.util.ArrayList; import java.util.List; import java.util.Random; +import cy.agorise.crystalwallet.enums.CryptoNet; import cy.agorise.crystalwallet.models.AccountSeed; import cy.agorise.crystalwallet.models.CryptoNetAccount; @@ -17,12 +19,19 @@ public class RandomCryptoNetAccountGenerator { ArrayList result = new ArrayList(); Random randomGenerator = new Random(); CryptoNetAccount randomAccount; + ArrayList cryptoNetList = new ArrayList(); + + for (CryptoNet cryptoNet : CryptoNet.values()){ + if (!cryptoNet.name().equals("UNKNOWN")) { + cryptoNetList.add(cryptoNet); + } + } for (int i=0;i> getCryptoCoinBalanceList(){ diff --git a/app/src/main/java/cy/agorise/crystalwallet/viewmodels/CryptoNetBalanceListViewModel.java b/app/src/main/java/cy/agorise/crystalwallet/viewmodels/CryptoNetBalanceListViewModel.java index a2f7785..6469f72 100644 --- a/app/src/main/java/cy/agorise/crystalwallet/viewmodels/CryptoNetBalanceListViewModel.java +++ b/app/src/main/java/cy/agorise/crystalwallet/viewmodels/CryptoNetBalanceListViewModel.java @@ -22,7 +22,7 @@ public class CryptoNetBalanceListViewModel extends AndroidViewModel { public CryptoNetBalanceListViewModel(Application application) { super(application); this.db = CrystalDatabase.getAppDatabase(application.getApplicationContext()); - this.cryptoNetBalanceList = this.db.cryptoNetAccountDao().getAllBalances(); + this.cryptoNetBalanceList = this.db.cryptoCoinBalanceDao().getAllBalances(); } public LiveData> getCryptoNetBalanceList(){ 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 a30f68a..3d173a1 100644 --- a/app/src/main/java/cy/agorise/crystalwallet/views/CryptoCoinBalanceListView.java +++ b/app/src/main/java/cy/agorise/crystalwallet/views/CryptoCoinBalanceListView.java @@ -51,11 +51,11 @@ public class CryptoCoinBalanceListView extends RelativeLayout { public void init(){ rootView = mInflater.inflate(R.layout.crypto_coin_balance_list, this, true); - this.listView = rootView.findViewById(R.id.cryptoCoinBalanceListView); + /*this.listView = rootView.findViewById(R.id.cryptoCoinBalanceListView); final LinearLayoutManager linearLayoutManager = new LinearLayoutManager(this.getContext()); this.listView.setLayoutManager(linearLayoutManager); - this.listView.setNestedScrollingEnabled(false); + this.listView.setNestedScrollingEnabled(false);*/ } public void setData(List 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 9b99f94..b62965d 100644 --- a/app/src/main/java/cy/agorise/crystalwallet/views/CryptoNetBalanceViewHolder.java +++ b/app/src/main/java/cy/agorise/crystalwallet/views/CryptoNetBalanceViewHolder.java @@ -16,14 +16,14 @@ import cy.agorise.crystalwallet.models.CryptoNetBalance; public class CryptoNetBalanceViewHolder extends RecyclerView.ViewHolder { private ImageView cryptoNetIcon; private TextView cryptoNetName; - private CryptoNetBalanceListView cryptoNetBalanceListView; + private CryptoCoinBalanceListView cryptoCoinBalanceListView; public CryptoNetBalanceViewHolder(View itemView) { super(itemView); cryptoNetIcon = (ImageView) itemView.findViewById(R.id.ivCryptoNetIcon); cryptoNetName = (TextView) itemView.findViewById(R.id.tvCryptoNetName); - cryptoNetBalanceListView = (CryptoNetBalanceListView) itemView.findViewById(R.id.cryptoCoinBalanceListView); + cryptoCoinBalanceListView = (CryptoCoinBalanceListView) itemView.findViewById(R.id.cryptoCoinBalanceListView); } @@ -35,7 +35,7 @@ public class CryptoNetBalanceViewHolder extends RecyclerView.ViewHolder { if (balance == null){ cryptoNetName.setText("loading..."); } else { - cryptoNetName.setText(balance.getCryptoCoin().getLabel()); + cryptoNetName.setText(balance.getCryptoNet().getLabel()); } } } diff --git a/app/src/main/res/layout/fragment_balance.xml b/app/src/main/res/layout/fragment_balance.xml index b0a37b0..c04016d 100644 --- a/app/src/main/res/layout/fragment_balance.xml +++ b/app/src/main/res/layout/fragment_balance.xml @@ -6,6 +6,7 @@ + android:layout_height="wrap_content" + android:id="@+id/vCryptoNetBalanceListView" />