From 575b85ebb425fd28a2c10e0a6ce35fb112ee92d4 Mon Sep 17 00:00:00 2001 From: sjaramillo10 Date: Thu, 16 Nov 2017 22:56:43 -0600 Subject: [PATCH 01/12] Added custom toolbar and tab labels to board activity --- .../2.json | 573 ++++++++++++++++++ app/src/main/AndroidManifest.xml | 3 +- .../activities/BoardActivity.java | 10 + app/src/main/res/layout/board.xml | 70 ++- app/src/main/res/values/dimens.xml | 1 + 5 files changed, 651 insertions(+), 6 deletions(-) create mode 100644 app/schemas/cy.agorise.crystalwallet.dao.CrystalDatabase/2.json diff --git a/app/schemas/cy.agorise.crystalwallet.dao.CrystalDatabase/2.json b/app/schemas/cy.agorise.crystalwallet.dao.CrystalDatabase/2.json new file mode 100644 index 0000000..dfdbc9d --- /dev/null +++ b/app/schemas/cy.agorise.crystalwallet.dao.CrystalDatabase/2.json @@ -0,0 +1,573 @@ +{ + "formatVersion": 1, + "database": { + "version": 2, + "identityHash": "6dd1ca39bdde9af2cba2b35413c4975e", + "entities": [ + { + "tableName": "account_seed", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, `name` TEXT, `master_seed` TEXT, `type` TEXT)", + "fields": [ + { + "fieldPath": "mId", + "columnName": "id", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "mName", + "columnName": "name", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "mMasterSeed", + "columnName": "master_seed", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "type", + "columnName": "type", + "affinity": "TEXT", + "notNull": false + } + ], + "primaryKey": { + "columnNames": [ + "id" + ], + "autoGenerate": true + }, + "indices": [], + "foreignKeys": [] + }, + { + "tableName": "crypto_net_account", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, `seed_id` INTEGER NOT NULL, `account_index` INTEGER NOT NULL, `crypto_net` TEXT, FOREIGN KEY(`seed_id`) REFERENCES `account_seed`(`id`) ON UPDATE NO ACTION ON DELETE NO ACTION )", + "fields": [ + { + "fieldPath": "mId", + "columnName": "id", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "mSeedId", + "columnName": "seed_id", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "mAccountIndex", + "columnName": "account_index", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "mCryptoNet", + "columnName": "crypto_net", + "affinity": "TEXT", + "notNull": false + } + ], + "primaryKey": { + "columnNames": [ + "id" + ], + "autoGenerate": true + }, + "indices": [ + { + "name": "index_crypto_net_account_id", + "unique": false, + "columnNames": [ + "id" + ], + "createSql": "CREATE INDEX `index_crypto_net_account_id` ON `${TABLE_NAME}` (`id`)" + }, + { + "name": "index_crypto_net_account_seed_id", + "unique": false, + "columnNames": [ + "seed_id" + ], + "createSql": "CREATE INDEX `index_crypto_net_account_seed_id` ON `${TABLE_NAME}` (`seed_id`)" + }, + { + "name": "index_crypto_net_account_seed_id_crypto_net_account_index", + "unique": true, + "columnNames": [ + "seed_id", + "crypto_net", + "account_index" + ], + "createSql": "CREATE UNIQUE INDEX `index_crypto_net_account_seed_id_crypto_net_account_index` ON `${TABLE_NAME}` (`seed_id`, `crypto_net`, `account_index`)" + } + ], + "foreignKeys": [ + { + "table": "account_seed", + "onDelete": "NO ACTION", + "onUpdate": "NO ACTION", + "columns": [ + "seed_id" + ], + "referencedColumns": [ + "id" + ] + } + ] + }, + { + "tableName": "crypto_coin_transaction", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, `date` INTEGER, `is_input` INTEGER NOT NULL, `account_id` INTEGER NOT NULL, `amount` INTEGER NOT NULL, `id_currency` INTEGER NOT NULL, `is_confirmed` INTEGER NOT NULL, `from` TEXT, `to` TEXT, FOREIGN KEY(`account_id`) REFERENCES `crypto_net_account`(`id`) ON UPDATE NO ACTION ON DELETE CASCADE , FOREIGN KEY(`id_currency`) REFERENCES `crypto_currency`(`id`) ON UPDATE NO ACTION ON DELETE CASCADE )", + "fields": [ + { + "fieldPath": "id", + "columnName": "id", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "date", + "columnName": "date", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "isInput", + "columnName": "is_input", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "accountId", + "columnName": "account_id", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "amount", + "columnName": "amount", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "idCurrency", + "columnName": "id_currency", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "isConfirmed", + "columnName": "is_confirmed", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "from", + "columnName": "from", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "to", + "columnName": "to", + "affinity": "TEXT", + "notNull": false + } + ], + "primaryKey": { + "columnNames": [ + "id" + ], + "autoGenerate": true + }, + "indices": [ + { + "name": "index_crypto_coin_transaction_account_id", + "unique": false, + "columnNames": [ + "account_id" + ], + "createSql": "CREATE INDEX `index_crypto_coin_transaction_account_id` ON `${TABLE_NAME}` (`account_id`)" + }, + { + "name": "index_crypto_coin_transaction_id_currency", + "unique": false, + "columnNames": [ + "id_currency" + ], + "createSql": "CREATE INDEX `index_crypto_coin_transaction_id_currency` ON `${TABLE_NAME}` (`id_currency`)" + } + ], + "foreignKeys": [ + { + "table": "crypto_net_account", + "onDelete": "CASCADE", + "onUpdate": "NO ACTION", + "columns": [ + "account_id" + ], + "referencedColumns": [ + "id" + ] + }, + { + "table": "crypto_currency", + "onDelete": "CASCADE", + "onUpdate": "NO ACTION", + "columns": [ + "id_currency" + ], + "referencedColumns": [ + "id" + ] + } + ] + }, + { + "tableName": "crypto_currency", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, `name` TEXT, `crypto_net` TEXT, `precision` INTEGER NOT NULL)", + "fields": [ + { + "fieldPath": "mId", + "columnName": "id", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "mName", + "columnName": "name", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "mCryptoNet", + "columnName": "crypto_net", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "mPrecision", + "columnName": "precision", + "affinity": "INTEGER", + "notNull": true + } + ], + "primaryKey": { + "columnNames": [ + "id" + ], + "autoGenerate": true + }, + "indices": [ + { + "name": "index_crypto_currency_crypto_net_name", + "unique": true, + "columnNames": [ + "crypto_net", + "name" + ], + "createSql": "CREATE UNIQUE INDEX `index_crypto_currency_crypto_net_name` ON `${TABLE_NAME}` (`crypto_net`, `name`)" + } + ], + "foreignKeys": [] + }, + { + "tableName": "crypto_coin_balance", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, `account_id` INTEGER NOT NULL, `crypto_currency_id` INTEGER NOT NULL, `balance` INTEGER NOT NULL, FOREIGN KEY(`account_id`) REFERENCES `crypto_net_account`(`id`) ON UPDATE NO ACTION ON DELETE NO ACTION )", + "fields": [ + { + "fieldPath": "mId", + "columnName": "id", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "mAccountId", + "columnName": "account_id", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "mCryptoCurrencyId", + "columnName": "crypto_currency_id", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "mBalance", + "columnName": "balance", + "affinity": "INTEGER", + "notNull": true + } + ], + "primaryKey": { + "columnNames": [ + "id" + ], + "autoGenerate": true + }, + "indices": [ + { + "name": "index_crypto_coin_balance_id", + "unique": false, + "columnNames": [ + "id" + ], + "createSql": "CREATE INDEX `index_crypto_coin_balance_id` ON `${TABLE_NAME}` (`id`)" + }, + { + "name": "index_crypto_coin_balance_account_id", + "unique": false, + "columnNames": [ + "account_id" + ], + "createSql": "CREATE INDEX `index_crypto_coin_balance_account_id` ON `${TABLE_NAME}` (`account_id`)" + }, + { + "name": "index_crypto_coin_balance_account_id_crypto_currency_id", + "unique": true, + "columnNames": [ + "account_id", + "crypto_currency_id" + ], + "createSql": "CREATE UNIQUE INDEX `index_crypto_coin_balance_account_id_crypto_currency_id` ON `${TABLE_NAME}` (`account_id`, `crypto_currency_id`)" + } + ], + "foreignKeys": [ + { + "table": "crypto_net_account", + "onDelete": "NO ACTION", + "onUpdate": "NO ACTION", + "columns": [ + "account_id" + ], + "referencedColumns": [ + "id" + ] + } + ] + }, + { + "tableName": "graphene_account", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`crypto_net_account_id` INTEGER NOT NULL, `account_name` TEXT, `account_id` TEXT, PRIMARY KEY(`crypto_net_account_id`), FOREIGN KEY(`crypto_net_account_id`) REFERENCES `crypto_net_account`(`id`) ON UPDATE NO ACTION ON DELETE NO ACTION )", + "fields": [ + { + "fieldPath": "cryptoNetAccountId", + "columnName": "crypto_net_account_id", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "name", + "columnName": "account_name", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "accountId", + "columnName": "account_id", + "affinity": "TEXT", + "notNull": false + } + ], + "primaryKey": { + "columnNames": [ + "crypto_net_account_id" + ], + "autoGenerate": false + }, + "indices": [], + "foreignKeys": [ + { + "table": "crypto_net_account", + "onDelete": "NO ACTION", + "onUpdate": "NO ACTION", + "columns": [ + "crypto_net_account_id" + ], + "referencedColumns": [ + "id" + ] + } + ] + }, + { + "tableName": "bitshares_asset", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`crypto_curreny_id` INTEGER NOT NULL, `bitshares_id` TEXT, `asset_type` TEXT, PRIMARY KEY(`crypto_curreny_id`), FOREIGN KEY(`crypto_curreny_id`) REFERENCES `crypto_currency`(`id`) ON UPDATE NO ACTION ON DELETE NO ACTION )", + "fields": [ + { + "fieldPath": "cryptoCurrencyId", + "columnName": "crypto_curreny_id", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "bitsharesId", + "columnName": "bitshares_id", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "assetType", + "columnName": "asset_type", + "affinity": "TEXT", + "notNull": false + } + ], + "primaryKey": { + "columnNames": [ + "crypto_curreny_id" + ], + "autoGenerate": false + }, + "indices": [], + "foreignKeys": [ + { + "table": "crypto_currency", + "onDelete": "NO ACTION", + "onUpdate": "NO ACTION", + "columns": [ + "crypto_curreny_id" + ], + "referencedColumns": [ + "id" + ] + } + ] + }, + { + "tableName": "crypto_currency_equivalence", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, `from_crypto_currency_id` INTEGER NOT NULL, `to_crypto_currency_id` INTEGER NOT NULL, `value` INTEGER NOT NULL, `last_checked` INTEGER, FOREIGN KEY(`from_crypto_currency_id`) REFERENCES `crypto_currency`(`id`) ON UPDATE NO ACTION ON DELETE CASCADE , FOREIGN KEY(`to_crypto_currency_id`) REFERENCES `crypto_currency`(`id`) ON UPDATE NO ACTION ON DELETE CASCADE )", + "fields": [ + { + "fieldPath": "id", + "columnName": "id", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "fromCurrencyId", + "columnName": "from_crypto_currency_id", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "toCurrencyId", + "columnName": "to_crypto_currency_id", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "value", + "columnName": "value", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "lastChecked", + "columnName": "last_checked", + "affinity": "INTEGER", + "notNull": false + } + ], + "primaryKey": { + "columnNames": [ + "id" + ], + "autoGenerate": true + }, + "indices": [ + { + "name": "index_crypto_currency_equivalence_from_crypto_currency_id_to_crypto_currency_id", + "unique": true, + "columnNames": [ + "from_crypto_currency_id", + "to_crypto_currency_id" + ], + "createSql": "CREATE UNIQUE INDEX `index_crypto_currency_equivalence_from_crypto_currency_id_to_crypto_currency_id` ON `${TABLE_NAME}` (`from_crypto_currency_id`, `to_crypto_currency_id`)" + }, + { + "name": "index_crypto_currency_equivalence_from_crypto_currency_id", + "unique": false, + "columnNames": [ + "from_crypto_currency_id" + ], + "createSql": "CREATE INDEX `index_crypto_currency_equivalence_from_crypto_currency_id` ON `${TABLE_NAME}` (`from_crypto_currency_id`)" + }, + { + "name": "index_crypto_currency_equivalence_to_crypto_currency_id", + "unique": false, + "columnNames": [ + "to_crypto_currency_id" + ], + "createSql": "CREATE INDEX `index_crypto_currency_equivalence_to_crypto_currency_id` ON `${TABLE_NAME}` (`to_crypto_currency_id`)" + } + ], + "foreignKeys": [ + { + "table": "crypto_currency", + "onDelete": "CASCADE", + "onUpdate": "NO ACTION", + "columns": [ + "from_crypto_currency_id" + ], + "referencedColumns": [ + "id" + ] + }, + { + "table": "crypto_currency", + "onDelete": "CASCADE", + "onUpdate": "NO ACTION", + "columns": [ + "to_crypto_currency_id" + ], + "referencedColumns": [ + "id" + ] + } + ] + }, + { + "tableName": "general_setting", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, `name` TEXT, `value` TEXT)", + "fields": [ + { + "fieldPath": "mId", + "columnName": "id", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "mName", + "columnName": "name", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "mValue", + "columnName": "value", + "affinity": "TEXT", + "notNull": false + } + ], + "primaryKey": { + "columnNames": [ + "id" + ], + "autoGenerate": true + }, + "indices": [], + "foreignKeys": [] + } + ], + "setupQueries": [ + "CREATE TABLE IF NOT EXISTS room_master_table (id INTEGER PRIMARY KEY,identity_hash TEXT)", + "INSERT OR REPLACE INTO room_master_table (id,identity_hash) VALUES(42, \"6dd1ca39bdde9af2cba2b35413c4975e\")" + ] + } +} \ No newline at end of file diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index cc25f4d..0502f12 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -19,7 +19,8 @@ - + diff --git a/app/src/main/java/cy/agorise/crystalwallet/activities/BoardActivity.java b/app/src/main/java/cy/agorise/crystalwallet/activities/BoardActivity.java index cf6ac67..4826a22 100644 --- a/app/src/main/java/cy/agorise/crystalwallet/activities/BoardActivity.java +++ b/app/src/main/java/cy/agorise/crystalwallet/activities/BoardActivity.java @@ -2,12 +2,14 @@ package cy.agorise.crystalwallet.activities; import android.content.Intent; import android.os.Bundle; +import android.support.design.widget.TabLayout; import android.support.v4.app.Fragment; import android.support.v4.app.FragmentManager; import android.support.v4.app.FragmentStatePagerAdapter; import android.support.v4.view.PagerAdapter; import android.support.v4.view.ViewPager; import android.support.v7.app.AppCompatActivity; +import android.support.v7.widget.Toolbar; import android.widget.ImageButton; import butterknife.BindView; @@ -38,8 +40,16 @@ public class BoardActivity extends AppCompatActivity { setContentView(R.layout.board); ButterKnife.bind(this); + Toolbar toolbar = findViewById(R.id.toolbar); + setSupportActionBar(toolbar); + boardAdapter = new BoardPagerAdapter(getSupportFragmentManager()); mPager.setAdapter(boardAdapter); + + TabLayout tabLayout = findViewById(R.id.tabs); + + mPager.addOnPageChangeListener(new TabLayout.TabLayoutOnPageChangeListener(tabLayout)); + tabLayout.addOnTabSelectedListener(new TabLayout.ViewPagerOnTabSelectedListener(mPager)); } @OnClick(R.id.btnGeneralSettings) diff --git a/app/src/main/res/layout/board.xml b/app/src/main/res/layout/board.xml index abb5e7b..cbdaa46 100644 --- a/app/src/main/res/layout/board.xml +++ b/app/src/main/res/layout/board.xml @@ -1,12 +1,72 @@ - + + + + + + + + + + + + + + + + + + + android:layout_height="match_parent" + app:layout_behavior="@string/appbar_scrolling_view_behavior"/> + + + + - \ No newline at end of file + \ No newline at end of file diff --git a/app/src/main/res/values/dimens.xml b/app/src/main/res/values/dimens.xml index 9cf8f0c..87a60b1 100644 --- a/app/src/main/res/values/dimens.xml +++ b/app/src/main/res/values/dimens.xml @@ -15,6 +15,7 @@ 70dp 140dp 150dp + 8dp 13sp From 2cb9afb645845709b1eb402a5378316cb6dc4514 Mon Sep 17 00:00:00 2001 From: sjaramillo10 Date: Thu, 16 Nov 2017 23:43:10 -0600 Subject: [PATCH 02/12] Added bottom buttons to balance, transactions and contacts --- .../activities/BoardActivity.java | 58 +++++++++++++++++++ app/src/main/res/layout/board.xml | 24 +++++++- 2 files changed, 79 insertions(+), 3 deletions(-) diff --git a/app/src/main/java/cy/agorise/crystalwallet/activities/BoardActivity.java b/app/src/main/java/cy/agorise/crystalwallet/activities/BoardActivity.java index 4826a22..7d04f6f 100644 --- a/app/src/main/java/cy/agorise/crystalwallet/activities/BoardActivity.java +++ b/app/src/main/java/cy/agorise/crystalwallet/activities/BoardActivity.java @@ -2,6 +2,8 @@ package cy.agorise.crystalwallet.activities; import android.content.Intent; import android.os.Bundle; +import android.support.design.widget.FloatingActionButton; +import android.support.design.widget.Snackbar; import android.support.design.widget.TabLayout; import android.support.v4.app.Fragment; import android.support.v4.app.FragmentManager; @@ -10,6 +12,7 @@ import android.support.v4.view.PagerAdapter; import android.support.v4.view.ViewPager; import android.support.v7.app.AppCompatActivity; import android.support.v7.widget.Toolbar; +import android.view.View; import android.widget.ImageButton; import butterknife.BindView; @@ -32,6 +35,15 @@ public class BoardActivity extends AppCompatActivity { @BindView(R.id.btnGeneralSettings) public ImageButton btnGeneralSettings; + @BindView(R.id.fabSend) + public FloatingActionButton fabSend; + + @BindView(R.id.fabReceive) + public FloatingActionButton fabReceive; + + @BindView(R.id.fabAddContact) + public FloatingActionButton fabAddContact; + public BoardPagerAdapter boardAdapter; @Override @@ -50,6 +62,52 @@ public class BoardActivity extends AppCompatActivity { mPager.addOnPageChangeListener(new TabLayout.TabLayoutOnPageChangeListener(tabLayout)); tabLayout.addOnTabSelectedListener(new TabLayout.ViewPagerOnTabSelectedListener(mPager)); + + /*fabSend.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG) + .setAction("Action", null).show(); + } + });*/ + + // + fabAddContact.hide(); + + mPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() { + @Override + public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { + } + + @Override + public void onPageSelected(int position) { + + switch (position) { + case 0: + fabReceive.show(); + fabSend.show(); + fabAddContact.hide(); + break; + + case 1: + fabReceive.show(); + fabSend.show(); + fabAddContact.hide(); + break; + + default: + fabReceive.hide(); + fabSend.hide(); + fabAddContact.show(); + break; + } + } + + @Override + public void onPageScrollStateChanged(int state) { + + } + }); } @OnClick(R.id.btnGeneralSettings) diff --git a/app/src/main/res/layout/board.xml b/app/src/main/res/layout/board.xml index cbdaa46..50167ac 100644 --- a/app/src/main/res/layout/board.xml +++ b/app/src/main/res/layout/board.xml @@ -59,7 +59,25 @@ app:layout_behavior="@string/appbar_scrolling_view_behavior"/> + + + + \ No newline at end of file From 05bc7bea657c51006a70cd56430f00cb8274321d Mon Sep 17 00:00:00 2001 From: sjaramillo10 Date: Fri, 17 Nov 2017 00:05:41 -0600 Subject: [PATCH 03/12] Fixed small issues and added comments --- app/src/main/AndroidManifest.xml | 2 +- .../cy/agorise/crystalwallet/activities/BoardActivity.java | 3 ++- app/src/main/res/layout/board.xml | 2 +- 3 files changed, 4 insertions(+), 3 deletions(-) diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 0502f12..a2aaba3 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -20,7 +20,7 @@ + android:theme="@style/AppTheme.NoActionBar" > diff --git a/app/src/main/java/cy/agorise/crystalwallet/activities/BoardActivity.java b/app/src/main/java/cy/agorise/crystalwallet/activities/BoardActivity.java index 7d04f6f..9f5aa39 100644 --- a/app/src/main/java/cy/agorise/crystalwallet/activities/BoardActivity.java +++ b/app/src/main/java/cy/agorise/crystalwallet/activities/BoardActivity.java @@ -71,9 +71,10 @@ public class BoardActivity extends AppCompatActivity { } });*/ - // + // Hide Add Contact fab, it won't hide until first page changed... fabAddContact.hide(); + // Hide and show respective fabs when convenient mPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() { @Override public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { diff --git a/app/src/main/res/layout/board.xml b/app/src/main/res/layout/board.xml index 50167ac..5ec2eb9 100644 --- a/app/src/main/res/layout/board.xml +++ b/app/src/main/res/layout/board.xml @@ -22,7 +22,7 @@ android:background="?attr/colorPrimary" app:layout_scrollFlags="scroll|enterAlways" app:popupTheme="@style/AppTheme.PopupOverlay" - app:title="@string/app_name"> + app:title="Client Logo"> From 3d4d764a78a64a1fb588e41d34d4b35824882ed7 Mon Sep 17 00:00:00 2001 From: sjaramillo10 Date: Tue, 21 Nov 2017 20:27:27 -0600 Subject: [PATCH 04/12] Fixed app theme --- app/src/main/AndroidManifest.xml | 2 +- .../views/CryptoNetBalanceListView.java | 2 +- app/src/main/res/drawable/receive_icon.png | Bin 0 -> 5798 bytes app/src/main/res/layout/board.xml | 4 +++- 4 files changed, 5 insertions(+), 3 deletions(-) create mode 100644 app/src/main/res/drawable/receive_icon.png diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index a2aaba3..0df4710 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -11,7 +11,7 @@ android:label="@string/app_name" android:roundIcon="@mipmap/ic_launcher_round" android:supportsRtl="true" - android:theme="@style/Theme.AppCompat"> + android:theme="@style/AppTheme"> diff --git a/app/src/main/java/cy/agorise/crystalwallet/views/CryptoNetBalanceListView.java b/app/src/main/java/cy/agorise/crystalwallet/views/CryptoNetBalanceListView.java index 1e7afa5..be10ebb 100644 --- a/app/src/main/java/cy/agorise/crystalwallet/views/CryptoNetBalanceListView.java +++ b/app/src/main/java/cy/agorise/crystalwallet/views/CryptoNetBalanceListView.java @@ -84,7 +84,7 @@ public class CryptoNetBalanceListView extends RelativeLayout { this.listView.setNestedScrollingEnabled(false); } - /* + /*main_content * Sets the data for the list of balances. * * @param data the list of crypto net balances that will be show to the user diff --git a/app/src/main/res/drawable/receive_icon.png b/app/src/main/res/drawable/receive_icon.png new file mode 100644 index 0000000000000000000000000000000000000000..eb7b0f1086f829a82b7113345ac2d3453ff8a084 GIT binary patch literal 5798 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 + app:backgroundTint="@color/white" + app:srcCompat="@drawable/receive_icon" /> Date: Thu, 16 Nov 2017 22:56:43 -0600 Subject: [PATCH 05/12] Added custom toolbar and tab labels to board activity --- .../2.json | 573 ++++++++++++++++++ app/src/main/AndroidManifest.xml | 3 +- .../activities/BoardActivity.java | 10 + app/src/main/res/layout/board.xml | 70 ++- app/src/main/res/values/dimens.xml | 1 + 5 files changed, 651 insertions(+), 6 deletions(-) create mode 100644 app/schemas/cy.agorise.crystalwallet.dao.CrystalDatabase/2.json diff --git a/app/schemas/cy.agorise.crystalwallet.dao.CrystalDatabase/2.json b/app/schemas/cy.agorise.crystalwallet.dao.CrystalDatabase/2.json new file mode 100644 index 0000000..dfdbc9d --- /dev/null +++ b/app/schemas/cy.agorise.crystalwallet.dao.CrystalDatabase/2.json @@ -0,0 +1,573 @@ +{ + "formatVersion": 1, + "database": { + "version": 2, + "identityHash": "6dd1ca39bdde9af2cba2b35413c4975e", + "entities": [ + { + "tableName": "account_seed", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, `name` TEXT, `master_seed` TEXT, `type` TEXT)", + "fields": [ + { + "fieldPath": "mId", + "columnName": "id", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "mName", + "columnName": "name", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "mMasterSeed", + "columnName": "master_seed", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "type", + "columnName": "type", + "affinity": "TEXT", + "notNull": false + } + ], + "primaryKey": { + "columnNames": [ + "id" + ], + "autoGenerate": true + }, + "indices": [], + "foreignKeys": [] + }, + { + "tableName": "crypto_net_account", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, `seed_id` INTEGER NOT NULL, `account_index` INTEGER NOT NULL, `crypto_net` TEXT, FOREIGN KEY(`seed_id`) REFERENCES `account_seed`(`id`) ON UPDATE NO ACTION ON DELETE NO ACTION )", + "fields": [ + { + "fieldPath": "mId", + "columnName": "id", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "mSeedId", + "columnName": "seed_id", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "mAccountIndex", + "columnName": "account_index", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "mCryptoNet", + "columnName": "crypto_net", + "affinity": "TEXT", + "notNull": false + } + ], + "primaryKey": { + "columnNames": [ + "id" + ], + "autoGenerate": true + }, + "indices": [ + { + "name": "index_crypto_net_account_id", + "unique": false, + "columnNames": [ + "id" + ], + "createSql": "CREATE INDEX `index_crypto_net_account_id` ON `${TABLE_NAME}` (`id`)" + }, + { + "name": "index_crypto_net_account_seed_id", + "unique": false, + "columnNames": [ + "seed_id" + ], + "createSql": "CREATE INDEX `index_crypto_net_account_seed_id` ON `${TABLE_NAME}` (`seed_id`)" + }, + { + "name": "index_crypto_net_account_seed_id_crypto_net_account_index", + "unique": true, + "columnNames": [ + "seed_id", + "crypto_net", + "account_index" + ], + "createSql": "CREATE UNIQUE INDEX `index_crypto_net_account_seed_id_crypto_net_account_index` ON `${TABLE_NAME}` (`seed_id`, `crypto_net`, `account_index`)" + } + ], + "foreignKeys": [ + { + "table": "account_seed", + "onDelete": "NO ACTION", + "onUpdate": "NO ACTION", + "columns": [ + "seed_id" + ], + "referencedColumns": [ + "id" + ] + } + ] + }, + { + "tableName": "crypto_coin_transaction", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, `date` INTEGER, `is_input` INTEGER NOT NULL, `account_id` INTEGER NOT NULL, `amount` INTEGER NOT NULL, `id_currency` INTEGER NOT NULL, `is_confirmed` INTEGER NOT NULL, `from` TEXT, `to` TEXT, FOREIGN KEY(`account_id`) REFERENCES `crypto_net_account`(`id`) ON UPDATE NO ACTION ON DELETE CASCADE , FOREIGN KEY(`id_currency`) REFERENCES `crypto_currency`(`id`) ON UPDATE NO ACTION ON DELETE CASCADE )", + "fields": [ + { + "fieldPath": "id", + "columnName": "id", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "date", + "columnName": "date", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "isInput", + "columnName": "is_input", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "accountId", + "columnName": "account_id", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "amount", + "columnName": "amount", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "idCurrency", + "columnName": "id_currency", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "isConfirmed", + "columnName": "is_confirmed", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "from", + "columnName": "from", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "to", + "columnName": "to", + "affinity": "TEXT", + "notNull": false + } + ], + "primaryKey": { + "columnNames": [ + "id" + ], + "autoGenerate": true + }, + "indices": [ + { + "name": "index_crypto_coin_transaction_account_id", + "unique": false, + "columnNames": [ + "account_id" + ], + "createSql": "CREATE INDEX `index_crypto_coin_transaction_account_id` ON `${TABLE_NAME}` (`account_id`)" + }, + { + "name": "index_crypto_coin_transaction_id_currency", + "unique": false, + "columnNames": [ + "id_currency" + ], + "createSql": "CREATE INDEX `index_crypto_coin_transaction_id_currency` ON `${TABLE_NAME}` (`id_currency`)" + } + ], + "foreignKeys": [ + { + "table": "crypto_net_account", + "onDelete": "CASCADE", + "onUpdate": "NO ACTION", + "columns": [ + "account_id" + ], + "referencedColumns": [ + "id" + ] + }, + { + "table": "crypto_currency", + "onDelete": "CASCADE", + "onUpdate": "NO ACTION", + "columns": [ + "id_currency" + ], + "referencedColumns": [ + "id" + ] + } + ] + }, + { + "tableName": "crypto_currency", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, `name` TEXT, `crypto_net` TEXT, `precision` INTEGER NOT NULL)", + "fields": [ + { + "fieldPath": "mId", + "columnName": "id", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "mName", + "columnName": "name", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "mCryptoNet", + "columnName": "crypto_net", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "mPrecision", + "columnName": "precision", + "affinity": "INTEGER", + "notNull": true + } + ], + "primaryKey": { + "columnNames": [ + "id" + ], + "autoGenerate": true + }, + "indices": [ + { + "name": "index_crypto_currency_crypto_net_name", + "unique": true, + "columnNames": [ + "crypto_net", + "name" + ], + "createSql": "CREATE UNIQUE INDEX `index_crypto_currency_crypto_net_name` ON `${TABLE_NAME}` (`crypto_net`, `name`)" + } + ], + "foreignKeys": [] + }, + { + "tableName": "crypto_coin_balance", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, `account_id` INTEGER NOT NULL, `crypto_currency_id` INTEGER NOT NULL, `balance` INTEGER NOT NULL, FOREIGN KEY(`account_id`) REFERENCES `crypto_net_account`(`id`) ON UPDATE NO ACTION ON DELETE NO ACTION )", + "fields": [ + { + "fieldPath": "mId", + "columnName": "id", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "mAccountId", + "columnName": "account_id", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "mCryptoCurrencyId", + "columnName": "crypto_currency_id", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "mBalance", + "columnName": "balance", + "affinity": "INTEGER", + "notNull": true + } + ], + "primaryKey": { + "columnNames": [ + "id" + ], + "autoGenerate": true + }, + "indices": [ + { + "name": "index_crypto_coin_balance_id", + "unique": false, + "columnNames": [ + "id" + ], + "createSql": "CREATE INDEX `index_crypto_coin_balance_id` ON `${TABLE_NAME}` (`id`)" + }, + { + "name": "index_crypto_coin_balance_account_id", + "unique": false, + "columnNames": [ + "account_id" + ], + "createSql": "CREATE INDEX `index_crypto_coin_balance_account_id` ON `${TABLE_NAME}` (`account_id`)" + }, + { + "name": "index_crypto_coin_balance_account_id_crypto_currency_id", + "unique": true, + "columnNames": [ + "account_id", + "crypto_currency_id" + ], + "createSql": "CREATE UNIQUE INDEX `index_crypto_coin_balance_account_id_crypto_currency_id` ON `${TABLE_NAME}` (`account_id`, `crypto_currency_id`)" + } + ], + "foreignKeys": [ + { + "table": "crypto_net_account", + "onDelete": "NO ACTION", + "onUpdate": "NO ACTION", + "columns": [ + "account_id" + ], + "referencedColumns": [ + "id" + ] + } + ] + }, + { + "tableName": "graphene_account", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`crypto_net_account_id` INTEGER NOT NULL, `account_name` TEXT, `account_id` TEXT, PRIMARY KEY(`crypto_net_account_id`), FOREIGN KEY(`crypto_net_account_id`) REFERENCES `crypto_net_account`(`id`) ON UPDATE NO ACTION ON DELETE NO ACTION )", + "fields": [ + { + "fieldPath": "cryptoNetAccountId", + "columnName": "crypto_net_account_id", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "name", + "columnName": "account_name", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "accountId", + "columnName": "account_id", + "affinity": "TEXT", + "notNull": false + } + ], + "primaryKey": { + "columnNames": [ + "crypto_net_account_id" + ], + "autoGenerate": false + }, + "indices": [], + "foreignKeys": [ + { + "table": "crypto_net_account", + "onDelete": "NO ACTION", + "onUpdate": "NO ACTION", + "columns": [ + "crypto_net_account_id" + ], + "referencedColumns": [ + "id" + ] + } + ] + }, + { + "tableName": "bitshares_asset", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`crypto_curreny_id` INTEGER NOT NULL, `bitshares_id` TEXT, `asset_type` TEXT, PRIMARY KEY(`crypto_curreny_id`), FOREIGN KEY(`crypto_curreny_id`) REFERENCES `crypto_currency`(`id`) ON UPDATE NO ACTION ON DELETE NO ACTION )", + "fields": [ + { + "fieldPath": "cryptoCurrencyId", + "columnName": "crypto_curreny_id", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "bitsharesId", + "columnName": "bitshares_id", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "assetType", + "columnName": "asset_type", + "affinity": "TEXT", + "notNull": false + } + ], + "primaryKey": { + "columnNames": [ + "crypto_curreny_id" + ], + "autoGenerate": false + }, + "indices": [], + "foreignKeys": [ + { + "table": "crypto_currency", + "onDelete": "NO ACTION", + "onUpdate": "NO ACTION", + "columns": [ + "crypto_curreny_id" + ], + "referencedColumns": [ + "id" + ] + } + ] + }, + { + "tableName": "crypto_currency_equivalence", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, `from_crypto_currency_id` INTEGER NOT NULL, `to_crypto_currency_id` INTEGER NOT NULL, `value` INTEGER NOT NULL, `last_checked` INTEGER, FOREIGN KEY(`from_crypto_currency_id`) REFERENCES `crypto_currency`(`id`) ON UPDATE NO ACTION ON DELETE CASCADE , FOREIGN KEY(`to_crypto_currency_id`) REFERENCES `crypto_currency`(`id`) ON UPDATE NO ACTION ON DELETE CASCADE )", + "fields": [ + { + "fieldPath": "id", + "columnName": "id", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "fromCurrencyId", + "columnName": "from_crypto_currency_id", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "toCurrencyId", + "columnName": "to_crypto_currency_id", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "value", + "columnName": "value", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "lastChecked", + "columnName": "last_checked", + "affinity": "INTEGER", + "notNull": false + } + ], + "primaryKey": { + "columnNames": [ + "id" + ], + "autoGenerate": true + }, + "indices": [ + { + "name": "index_crypto_currency_equivalence_from_crypto_currency_id_to_crypto_currency_id", + "unique": true, + "columnNames": [ + "from_crypto_currency_id", + "to_crypto_currency_id" + ], + "createSql": "CREATE UNIQUE INDEX `index_crypto_currency_equivalence_from_crypto_currency_id_to_crypto_currency_id` ON `${TABLE_NAME}` (`from_crypto_currency_id`, `to_crypto_currency_id`)" + }, + { + "name": "index_crypto_currency_equivalence_from_crypto_currency_id", + "unique": false, + "columnNames": [ + "from_crypto_currency_id" + ], + "createSql": "CREATE INDEX `index_crypto_currency_equivalence_from_crypto_currency_id` ON `${TABLE_NAME}` (`from_crypto_currency_id`)" + }, + { + "name": "index_crypto_currency_equivalence_to_crypto_currency_id", + "unique": false, + "columnNames": [ + "to_crypto_currency_id" + ], + "createSql": "CREATE INDEX `index_crypto_currency_equivalence_to_crypto_currency_id` ON `${TABLE_NAME}` (`to_crypto_currency_id`)" + } + ], + "foreignKeys": [ + { + "table": "crypto_currency", + "onDelete": "CASCADE", + "onUpdate": "NO ACTION", + "columns": [ + "from_crypto_currency_id" + ], + "referencedColumns": [ + "id" + ] + }, + { + "table": "crypto_currency", + "onDelete": "CASCADE", + "onUpdate": "NO ACTION", + "columns": [ + "to_crypto_currency_id" + ], + "referencedColumns": [ + "id" + ] + } + ] + }, + { + "tableName": "general_setting", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, `name` TEXT, `value` TEXT)", + "fields": [ + { + "fieldPath": "mId", + "columnName": "id", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "mName", + "columnName": "name", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "mValue", + "columnName": "value", + "affinity": "TEXT", + "notNull": false + } + ], + "primaryKey": { + "columnNames": [ + "id" + ], + "autoGenerate": true + }, + "indices": [], + "foreignKeys": [] + } + ], + "setupQueries": [ + "CREATE TABLE IF NOT EXISTS room_master_table (id INTEGER PRIMARY KEY,identity_hash TEXT)", + "INSERT OR REPLACE INTO room_master_table (id,identity_hash) VALUES(42, \"6dd1ca39bdde9af2cba2b35413c4975e\")" + ] + } +} \ No newline at end of file diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index fea7cf2..d09c4dc 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -19,7 +19,8 @@ - + diff --git a/app/src/main/java/cy/agorise/crystalwallet/activities/BoardActivity.java b/app/src/main/java/cy/agorise/crystalwallet/activities/BoardActivity.java index cf6ac67..4826a22 100644 --- a/app/src/main/java/cy/agorise/crystalwallet/activities/BoardActivity.java +++ b/app/src/main/java/cy/agorise/crystalwallet/activities/BoardActivity.java @@ -2,12 +2,14 @@ package cy.agorise.crystalwallet.activities; import android.content.Intent; import android.os.Bundle; +import android.support.design.widget.TabLayout; import android.support.v4.app.Fragment; import android.support.v4.app.FragmentManager; import android.support.v4.app.FragmentStatePagerAdapter; import android.support.v4.view.PagerAdapter; import android.support.v4.view.ViewPager; import android.support.v7.app.AppCompatActivity; +import android.support.v7.widget.Toolbar; import android.widget.ImageButton; import butterknife.BindView; @@ -38,8 +40,16 @@ public class BoardActivity extends AppCompatActivity { setContentView(R.layout.board); ButterKnife.bind(this); + Toolbar toolbar = findViewById(R.id.toolbar); + setSupportActionBar(toolbar); + boardAdapter = new BoardPagerAdapter(getSupportFragmentManager()); mPager.setAdapter(boardAdapter); + + TabLayout tabLayout = findViewById(R.id.tabs); + + mPager.addOnPageChangeListener(new TabLayout.TabLayoutOnPageChangeListener(tabLayout)); + tabLayout.addOnTabSelectedListener(new TabLayout.ViewPagerOnTabSelectedListener(mPager)); } @OnClick(R.id.btnGeneralSettings) diff --git a/app/src/main/res/layout/board.xml b/app/src/main/res/layout/board.xml index abb5e7b..cbdaa46 100644 --- a/app/src/main/res/layout/board.xml +++ b/app/src/main/res/layout/board.xml @@ -1,12 +1,72 @@ - + + + + + + + + + + + + + + + + + + + android:layout_height="match_parent" + app:layout_behavior="@string/appbar_scrolling_view_behavior"/> + + + + - \ No newline at end of file + \ No newline at end of file diff --git a/app/src/main/res/values/dimens.xml b/app/src/main/res/values/dimens.xml index 9cf8f0c..87a60b1 100644 --- a/app/src/main/res/values/dimens.xml +++ b/app/src/main/res/values/dimens.xml @@ -15,6 +15,7 @@ 70dp 140dp 150dp + 8dp 13sp From 992de4f3139ecf618d9720e59a1c36fbeac89c23 Mon Sep 17 00:00:00 2001 From: sjaramillo10 Date: Thu, 16 Nov 2017 23:43:10 -0600 Subject: [PATCH 06/12] Added bottom buttons to balance, transactions and contacts --- .../activities/BoardActivity.java | 58 +++++++++++++++++++ app/src/main/res/layout/board.xml | 24 +++++++- 2 files changed, 79 insertions(+), 3 deletions(-) diff --git a/app/src/main/java/cy/agorise/crystalwallet/activities/BoardActivity.java b/app/src/main/java/cy/agorise/crystalwallet/activities/BoardActivity.java index 4826a22..7d04f6f 100644 --- a/app/src/main/java/cy/agorise/crystalwallet/activities/BoardActivity.java +++ b/app/src/main/java/cy/agorise/crystalwallet/activities/BoardActivity.java @@ -2,6 +2,8 @@ package cy.agorise.crystalwallet.activities; import android.content.Intent; import android.os.Bundle; +import android.support.design.widget.FloatingActionButton; +import android.support.design.widget.Snackbar; import android.support.design.widget.TabLayout; import android.support.v4.app.Fragment; import android.support.v4.app.FragmentManager; @@ -10,6 +12,7 @@ import android.support.v4.view.PagerAdapter; import android.support.v4.view.ViewPager; import android.support.v7.app.AppCompatActivity; import android.support.v7.widget.Toolbar; +import android.view.View; import android.widget.ImageButton; import butterknife.BindView; @@ -32,6 +35,15 @@ public class BoardActivity extends AppCompatActivity { @BindView(R.id.btnGeneralSettings) public ImageButton btnGeneralSettings; + @BindView(R.id.fabSend) + public FloatingActionButton fabSend; + + @BindView(R.id.fabReceive) + public FloatingActionButton fabReceive; + + @BindView(R.id.fabAddContact) + public FloatingActionButton fabAddContact; + public BoardPagerAdapter boardAdapter; @Override @@ -50,6 +62,52 @@ public class BoardActivity extends AppCompatActivity { mPager.addOnPageChangeListener(new TabLayout.TabLayoutOnPageChangeListener(tabLayout)); tabLayout.addOnTabSelectedListener(new TabLayout.ViewPagerOnTabSelectedListener(mPager)); + + /*fabSend.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG) + .setAction("Action", null).show(); + } + });*/ + + // + fabAddContact.hide(); + + mPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() { + @Override + public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { + } + + @Override + public void onPageSelected(int position) { + + switch (position) { + case 0: + fabReceive.show(); + fabSend.show(); + fabAddContact.hide(); + break; + + case 1: + fabReceive.show(); + fabSend.show(); + fabAddContact.hide(); + break; + + default: + fabReceive.hide(); + fabSend.hide(); + fabAddContact.show(); + break; + } + } + + @Override + public void onPageScrollStateChanged(int state) { + + } + }); } @OnClick(R.id.btnGeneralSettings) diff --git a/app/src/main/res/layout/board.xml b/app/src/main/res/layout/board.xml index cbdaa46..50167ac 100644 --- a/app/src/main/res/layout/board.xml +++ b/app/src/main/res/layout/board.xml @@ -59,7 +59,25 @@ app:layout_behavior="@string/appbar_scrolling_view_behavior"/> + + + + \ No newline at end of file From a64606ccbf1e120c245ffdcdc26b2730874e01b8 Mon Sep 17 00:00:00 2001 From: sjaramillo10 Date: Fri, 17 Nov 2017 00:05:41 -0600 Subject: [PATCH 07/12] Fixed small issues and added comments --- app/src/main/AndroidManifest.xml | 2 +- .../cy/agorise/crystalwallet/activities/BoardActivity.java | 3 ++- app/src/main/res/layout/board.xml | 2 +- 3 files changed, 4 insertions(+), 3 deletions(-) diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index d09c4dc..799ee5d 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -20,7 +20,7 @@ + android:theme="@style/AppTheme.NoActionBar" > diff --git a/app/src/main/java/cy/agorise/crystalwallet/activities/BoardActivity.java b/app/src/main/java/cy/agorise/crystalwallet/activities/BoardActivity.java index 7d04f6f..9f5aa39 100644 --- a/app/src/main/java/cy/agorise/crystalwallet/activities/BoardActivity.java +++ b/app/src/main/java/cy/agorise/crystalwallet/activities/BoardActivity.java @@ -71,9 +71,10 @@ public class BoardActivity extends AppCompatActivity { } });*/ - // + // Hide Add Contact fab, it won't hide until first page changed... fabAddContact.hide(); + // Hide and show respective fabs when convenient mPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() { @Override public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { diff --git a/app/src/main/res/layout/board.xml b/app/src/main/res/layout/board.xml index 50167ac..5ec2eb9 100644 --- a/app/src/main/res/layout/board.xml +++ b/app/src/main/res/layout/board.xml @@ -22,7 +22,7 @@ android:background="?attr/colorPrimary" app:layout_scrollFlags="scroll|enterAlways" app:popupTheme="@style/AppTheme.PopupOverlay" - app:title="@string/app_name"> + app:title="Client Logo"> From 1ef802ab13d4d867c378a2d2eadf5f30fb42b238 Mon Sep 17 00:00:00 2001 From: sjaramillo10 Date: Tue, 21 Nov 2017 20:27:27 -0600 Subject: [PATCH 08/12] Fixed app theme --- app/src/main/AndroidManifest.xml | 2 +- .../views/CryptoNetBalanceListView.java | 2 +- app/src/main/res/drawable/receive_icon.png | Bin 0 -> 5798 bytes app/src/main/res/layout/board.xml | 4 +++- 4 files changed, 5 insertions(+), 3 deletions(-) create mode 100644 app/src/main/res/drawable/receive_icon.png diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 799ee5d..44de849 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -11,7 +11,7 @@ android:label="@string/app_name" android:roundIcon="@mipmap/ic_launcher_round" android:supportsRtl="true" - android:theme="@style/Theme.AppCompat"> + android:theme="@style/AppTheme"> diff --git a/app/src/main/java/cy/agorise/crystalwallet/views/CryptoNetBalanceListView.java b/app/src/main/java/cy/agorise/crystalwallet/views/CryptoNetBalanceListView.java index 1e7afa5..be10ebb 100644 --- a/app/src/main/java/cy/agorise/crystalwallet/views/CryptoNetBalanceListView.java +++ b/app/src/main/java/cy/agorise/crystalwallet/views/CryptoNetBalanceListView.java @@ -84,7 +84,7 @@ public class CryptoNetBalanceListView extends RelativeLayout { this.listView.setNestedScrollingEnabled(false); } - /* + /*main_content * Sets the data for the list of balances. * * @param data the list of crypto net balances that will be show to the user diff --git a/app/src/main/res/drawable/receive_icon.png b/app/src/main/res/drawable/receive_icon.png new file mode 100644 index 0000000000000000000000000000000000000000..eb7b0f1086f829a82b7113345ac2d3453ff8a084 GIT binary patch literal 5798 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 + app:backgroundTint="@color/white" + app:srcCompat="@drawable/receive_icon" /> Date: Thu, 16 Nov 2017 22:56:43 -0600 Subject: [PATCH 09/12] Added custom toolbar and tab labels to board activity --- .../java/cy/agorise/crystalwallet/activities/BoardActivity.java | 2 -- app/src/main/res/layout/board.xml | 2 +- 2 files changed, 1 insertion(+), 3 deletions(-) diff --git a/app/src/main/java/cy/agorise/crystalwallet/activities/BoardActivity.java b/app/src/main/java/cy/agorise/crystalwallet/activities/BoardActivity.java index 9f5aa39..2fcde53 100644 --- a/app/src/main/java/cy/agorise/crystalwallet/activities/BoardActivity.java +++ b/app/src/main/java/cy/agorise/crystalwallet/activities/BoardActivity.java @@ -3,7 +3,6 @@ package cy.agorise.crystalwallet.activities; import android.content.Intent; import android.os.Bundle; import android.support.design.widget.FloatingActionButton; -import android.support.design.widget.Snackbar; import android.support.design.widget.TabLayout; import android.support.v4.app.Fragment; import android.support.v4.app.FragmentManager; @@ -12,7 +11,6 @@ import android.support.v4.view.PagerAdapter; import android.support.v4.view.ViewPager; import android.support.v7.app.AppCompatActivity; import android.support.v7.widget.Toolbar; -import android.view.View; import android.widget.ImageButton; import butterknife.BindView; diff --git a/app/src/main/res/layout/board.xml b/app/src/main/res/layout/board.xml index 407ded4..90f8ff8 100644 --- a/app/src/main/res/layout/board.xml +++ b/app/src/main/res/layout/board.xml @@ -25,7 +25,7 @@ app:popupTheme="@style/AppTheme.PopupOverlay" app:title="Client Logo"> - + Date: Thu, 16 Nov 2017 23:43:10 -0600 Subject: [PATCH 10/12] Added bottom buttons to balance, transactions and contacts --- .../java/cy/agorise/crystalwallet/activities/BoardActivity.java | 1 + 1 file changed, 1 insertion(+) diff --git a/app/src/main/java/cy/agorise/crystalwallet/activities/BoardActivity.java b/app/src/main/java/cy/agorise/crystalwallet/activities/BoardActivity.java index 2fcde53..7db621c 100644 --- a/app/src/main/java/cy/agorise/crystalwallet/activities/BoardActivity.java +++ b/app/src/main/java/cy/agorise/crystalwallet/activities/BoardActivity.java @@ -11,6 +11,7 @@ import android.support.v4.view.PagerAdapter; import android.support.v4.view.ViewPager; import android.support.v7.app.AppCompatActivity; import android.support.v7.widget.Toolbar; +import android.view.View; import android.widget.ImageButton; import butterknife.BindView; From 3178798d9b0d1b39b389a3f59d840bb67add606b Mon Sep 17 00:00:00 2001 From: Severiano Jaramillo Date: Wed, 22 Nov 2017 20:57:32 -0600 Subject: [PATCH 11/12] build.graddle addition of google --- build.gradle | 2 ++ 1 file changed, 2 insertions(+) diff --git a/build.gradle b/build.gradle index aad8aaa..f0981d9 100644 --- a/build.gradle +++ b/build.gradle @@ -3,6 +3,7 @@ buildscript { repositories { jcenter() + google() } dependencies { classpath 'com.android.tools.build:gradle:3.0.0' @@ -23,6 +24,7 @@ allprojects { maven { url 'http://www.idescout.com/maven/repo/' } + google() } } From 6bdeab545b35674d3cb4c83925c715871f556685 Mon Sep 17 00:00:00 2001 From: Severiano Jaramillo Date: Wed, 29 Nov 2017 01:40:41 -0600 Subject: [PATCH 12/12] Added toolbar elements and fab animations to board activity --- .../activities/BoardActivity.java | 16 ++++++++--- app/src/main/res/drawable/add_contact_fab.png | Bin 0 -> 22087 bytes app/src/main/res/drawable/receive_icon.png | Bin 5798 -> 3895 bytes app/src/main/res/drawable/roundcorner.xml | 5 ++++ app/src/main/res/drawable/send_icon.png | Bin 0 -> 7287 bytes app/src/main/res/layout/board.xml | 26 ++++++++++++++---- app/src/main/res/values/colors.xml | 1 + app/src/main/res/values/styles.xml | 8 ++---- 8 files changed, 41 insertions(+), 15 deletions(-) create mode 100644 app/src/main/res/drawable/add_contact_fab.png create mode 100644 app/src/main/res/drawable/roundcorner.xml create mode 100644 app/src/main/res/drawable/send_icon.png diff --git a/app/src/main/java/cy/agorise/crystalwallet/activities/BoardActivity.java b/app/src/main/java/cy/agorise/crystalwallet/activities/BoardActivity.java index 7db621c..527c0c1 100644 --- a/app/src/main/java/cy/agorise/crystalwallet/activities/BoardActivity.java +++ b/app/src/main/java/cy/agorise/crystalwallet/activities/BoardActivity.java @@ -1,6 +1,7 @@ package cy.agorise.crystalwallet.activities; import android.content.Intent; +import android.content.res.Resources; import android.os.Bundle; import android.support.design.widget.FloatingActionButton; import android.support.design.widget.TabLayout; @@ -12,6 +13,7 @@ import android.support.v4.view.ViewPager; import android.support.v7.app.AppCompatActivity; import android.support.v7.widget.Toolbar; import android.view.View; +import android.view.animation.LinearInterpolator; import android.widget.ImageButton; import butterknife.BindView; @@ -71,7 +73,10 @@ public class BoardActivity extends AppCompatActivity { });*/ // Hide Add Contact fab, it won't hide until first page changed... - fabAddContact.hide(); + // Convert 72dp to pixels (fab is 56dp in diameter + 16dp margin) + final int fabDistanceToHide = (int) (72 * Resources.getSystem().getDisplayMetrics().density);; + fabAddContact.animate().translationY(fabDistanceToHide) + .setInterpolator(new LinearInterpolator()).start(); // Hide and show respective fabs when convenient mPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() { @@ -86,19 +91,22 @@ public class BoardActivity extends AppCompatActivity { case 0: fabReceive.show(); fabSend.show(); - fabAddContact.hide(); + fabAddContact.animate().translationY(fabDistanceToHide) + .setInterpolator(new LinearInterpolator()).start(); break; case 1: fabReceive.show(); fabSend.show(); - fabAddContact.hide(); + fabAddContact.animate().translationY(fabDistanceToHide) + .setInterpolator(new LinearInterpolator()).start(); break; default: fabReceive.hide(); fabSend.hide(); - fabAddContact.show(); + fabAddContact.animate().translationY(0) + .setInterpolator(new LinearInterpolator()).start(); break; } } diff --git a/app/src/main/res/drawable/add_contact_fab.png b/app/src/main/res/drawable/add_contact_fab.png new file mode 100644 index 0000000000000000000000000000000000000000..95b9b889aa6262ac3089430ea6807255eaf63588 GIT binary patch literal 22087 zcmXtgWmuG5*Y*WSiIS4iNGKiBCEeZK-Q6J~45fs0BaMV~qYT~MH6Y#Hd>8lgem^)4 zm|d&)T5F#JL`gyN^-H3c006v}mJ(9|0JszI=NJVE{G`r7V-^5ja#@RtD!HmiijYf- zi*mB^aB?!TF|h)GS9(UGr<&>8cJIsy9%()Y8_d! zJo2Az0>0meApVupLJfMAqxEKOt1CP@($WYS?$t4XU26Ariz!_1F27HQX`d9d4}VvPv#w@|Jd+1hAKL)@gl3U@nh zR1x|qZ~}C3i%grYs%CbKrg3y^pBdM^fmNwK!{c#gt-%qT0gSHUK^-RScZK1EGnH`i3VQ+4++J{t~)O^15#cCl?CRtbGKpk*0_NF9-LD1L)efJGZ68+%^ls}nY78z zKm`h8u%s_tT-1|=%d&mXynS?=g&rts=r^L$wsiE**y}8wJI;+&)PT#u!lytC+B*z$ zx_Pyk6?RRA{OC@Khjst1Eu1+)Tx_5~j$AIWR<{=?95F@YtMGMJ>NQ5^)z^%E^vEBrTN2@BC~_<%Ipc2R^P|6JgWO{;-n+mUQ%Nzl z25jZw{nUFMcn)$vTo_?j`0X|VPREP74y*zJG+{i_H ziGPP`eSf=wfGCQkM4W&^Eh-`fk1M>Ftx`l>@^v@IVq15c&W)%Ecr99=t!#yTi|d0- z#e!P!N2e0Y4zb!uksBrE3;v(JV>WIwrqA^qKb#Q!Fb}^db|$T2X}uH*F2oAL#Ny43 zWWmDwDZ1Vhek9-yn&Lvnt6Yp!JjChQe|ab2M@| z^GcMFl`@J1C)FqEY+hbq$xGPg4vh_O18xkwgc*@c5}Mg*qa@qa+gRt^x41|lIi^vp zF$95f#5B0o@YRIXZzp1SLJ7O0j0>u?%6O-V_aa_*xm23ivDUrx#q`DYMdXX|521p& zIn{9+>hUXt(?iu)b)0COG@Wo72wSk1F^{4!y3URVPRy?*{4fGggkrKN=y0M?%fCp8 zd@yFri5r#RmTi#r`t%O_B3uFLlpECWRZE&*j9-zMx{X>{%Hkd8``~vJ_7n%S8I((u zt>p225@r}K{MvHMA`UcJ6f3mt%Gn>ZKD?kiexpG@N$2)KPuZ&=T$4lXTurYmxk4+) zOUzm7q!`;;IUD%SZmj#eQx?{Om{GGuCGGG(IsopIlj){5wK)Cd;}8cGho;rx1o3G4^!W7YME`inIB(vC zT3Y!*PDV+q=-rpgpXlm6@{-xrqFX=Wv9;B$43ddu+e?t$dC^;Q*$7l{H15$P9F{p*vj44rQ}^}jxRt%#0_Hi_aSa3>UC z(_lwu8Rl~M*k&uj>CB~VF>d5C^v1NGO`d(p-e>L=XEm2BYbonnwy+_RLB!4Gp)kf# zJOwz(SYG?s38jQBfPI`q^pn0iiR+K`#F|7n|f3<=2#>CG839v|yq z9jlr?L5l2tX=-ng;VHuB&GXBHck_ID?vM7q-|P)Oet~SNY~(f9+`c?-OPkqlA-;g^541bJF$@rcxg~gU7Tc1WO4W?|*3F5f#s z7e<<)zN2918V}mKXE?2h0}ps4B8AT7Vhcz5$ylz zXEx%esZSW6hdzt{5uk9AGU~nj-hB3Y3vJ6Y^z&%Y=t0ia->A;SP=B%*R1CBV)Ib7b z9A(V0_Mj%CzR!t>6_l-%1C&Q%DPq#OK6$u#IJs$ghCNC}?gV-QvdBjkuDCmm_{ zd^{+>R<^Lg?vUvaCllEb*)i^@pLt91T_ep8S^*gk`Q=Rh6j-K8?5SD@o*G(a;cek` zewzZC{6f~{djXnO0feO3WM?%gtOC?Kwp#Wxwy^5K>WJ!}1L;WzdYsfRu|JxN&PD!i z?&6pmnGAx8{Wf4rT~AbvKcnH|y^_jw$z*XfYMeWjAD}(;KWjG#*7>79rkkx>S!d*y zztw-MK3bAr>Z7?=!K5S5*6lbHT>GWg+BT4`hKYgMuaU_@Uolo=EH$_4B4AH95;sD; zi;J_tu4o~Ao^F=A!TPYEM4n96iyB|{mn^-^isPn3+x3qj%^!yT^Kmuim4i8UBN~Gm zYtwrRi}fUQnoJ|iWDBIfTV0V&CHrEM_>%Tpl#Df%>mw^=f6M9+>don!E7jKS`n$_q zNJVSP`~I>xD43sV_HM4&Kbf7-C{)+fxpJs5IvVn6za2)(`x@b&?9X#Y$|=Eh88~#? z)F_=-T(i>|uokcr9FE{W6f-o$n96AW%c=CI`>E02KLaaXffGyJcBPJm^+}}gVei67 z1JkY#E;>Jj`F^X6sqweG*0)El&HIV7tGCQE^<$j+AZCwLkjSg1z9+wM-FM*Viflqa z!&UE}*Bt6!NG?v6!e&;w;1BoRot=#d(^grZqjZRX>o4XO$78$Exw9?5k&K_VBnLnKev}{w{7=L4X(z_en znDcD+x@Tj-<@@-kcYZ%nk!D!bKKnF&Xny22d;XwFSYct1)S?{dy2`j`|J0o9iNoG_ zRCPozlpL^qLvVg_SQw?46@YN{e?&fBNt;_zi^C*``}7GChZJn)iO4WJFoz5ES>DlB6c?vRYvqGJbz9O(%fThXHi7Kq9F(3Z_N@)L34geOr|T5MkYtc;nlSOZhn|kzXIzVLal!pPTYpd(PBSw4YJ7z4-hLrJq4fuf8|Er8m)rYWT-lOcK@w-3(4smY)v`;l}yz3(qgvFrupIR$8Jq^_Ug3BE+iC1I_DtK@6GKvS~8j2KXcNp zMa8wZ!m%vtuGPj5Z7h7B;E-uBFkUTP7`3(D{N7k+tFcf%Ucua&g3hX(6j)hT*L&}b z|NbNNVHgc_TnPsFesBIeM6)CzS05P*V^QW1#krU?wYs9%Fnj`p;=|V1#e*#){!yPw z+KmmlY_utqF|9$9BK{?*jkLK5d~ejSRtduVj2%|QIk>~q4ULY?&HIK+b+BepO`R0* z;2T_r4z~kyP9&(#`sa&Bt5{R2%{Yw*2^3bt zgG8O+h@nPdceV@G+-)$R;MfISiwZKu_sp%c6)8l`;$v-PMPS{*&o5T?exzzwFc%3j z`UDXbd&_Bj6KfHFBga}KxU}o^4V!Ei%bYe@u@r0;6^$tYy z$hIvu%qDY{h`UP#2@8W85OO#;tEiaNs}fiiMy_mGCJ!aPno1#WfG)5{Y7x`QJaA|1 z#FtTx*Ux8sJPV&#lsFyM)`+|NwHpOIf)c3IWU1P;T7nMaly1GFrO6Q9NXvg^RR2c# z06+4HhA9TC{S->K#3;zQz_Q)i&phKFtjzm`J%RfR2@kIIBebfAJ=(A%JcIt_Jpp)X zS?>Ts^~Y$MaOGRPw23pp_3nN9TD}!so~1T@ckZAVkYKIKB{l1U$>ey*d1P5k6@CQ9 zMYps4amXR8J(oV*S`#GVBS@+%WFoCLs#RY1}r2AO!WchgUMJ^$yhb&_5HbHu(cuh5RNs`Lz@Td3}7RT@RZwx9@g0=9Oh^m zwyV>VX?6&Q!~8l6oYc9-T_0ULnz%ip(mqZW)b1HRT^1|9E{Xqi4$4ufmoJ#wW~t&` zx5K2{ihdbD8M+wq&N7lO-}0y?Oe{yp)M@?XG;UwLB;?bEC`43vj#xc}kbNbgsL(*Z z*+U#&jH%lvLg;8ZnRA(jS(EBkv+M6gHEYhR7cXUq?-dlfRaP6${kpA*CkAPYhY_-Y z1%Hobcd=U{!O1N-(42{{cp9(SY&V<5g9p}^SWC`;FR1dvuX;E<%IVHR)2(d8cS?^| zQ(d=TC2+fG1t`}JLC;a~mi$<60w~~ww<@usw&hDr%N8^?+OjygTDDVTSIT&CzhESA z*Q8DD5K<7`Ip%hZsAM3L|21PT5ReyuJz3D7CX8-2St@UilF~VIzf0@%=eORkm@luk zha-22F^kH?G=IeRRhHL&;JPm^Ntu%`5&g6+0_lXqSZHc&g8Idv?_ zVzG$1EI~*76O8>0yOV}Nkv)Z>OKzszoZI>}`RRVs>)rO3Y%UedPHHO}%Bg3eyHc25 zbSEf<8Eh*FLX;00)pITtUa4ig7{H4}ulURg+gr;^%8^KeJYy5_xzQ|j%g-I3Ad)Pl z)tfK&j?V)jQ^cTX$%~S&SJazGeS?>F8teVmn!=*J^K{h0;GaYxlG%UOmx`-c=ifwE z?fC`%fFsv&$N6TBNHt!;Kv&jQmCI15=T3gioZ$7Pir1z*B66$%va6t)fe46%IN~># zGh^qSN_zNkJq_t|x`ge@t&)M{#v0bx1r0NNvn6s+fd}lzyVhgG1l-+%CmyyUVEdkG z$e+taAz?i7X=U1IJ&PtLtf#3*VpHA#`NqYBwC{q!hIdZl7|B#uN*XwI7@S)58S+t5 z7p+H7I!ZweJp1pfyi)9Ng?hfFdM2jf%zR#SH*^{PS2q$XF;$-1G?#%e>y}-90JCnq z%Q0bQUty$dbF)B*Ifd7(bys+lmF|Rv-R|!xRoC_%VO7K!7jQjbRo&;3yQJ*e2^%k~ zR}Txm1W(2CRUWFfsQyPW?>>hD1U>cA>k#-3fYjL(R^6bd{~;w+f*A`dqHD^s;%;iHT+Sq1us)mXNV4_6MYRIfoLCYSNRynPd-)H4jq&)9+M5T6}uVn)V+)V>9*@1BN`^38q<^ zmVnZm>j4+_=hIxGqB)cYvD5N4B{Z$4OH0-}mX%->-3A+N=_%)gCLg82NkJO#V*c1?D%c1=!7H4A<1i$7;|m-H=7fVXDAsKI{oC`|H_f%Z0!=ONe1Gh6 z1Yu*Kx-6e==z(Hk}l2UpKbeS*+a7Ai2(wVWFiu+kpzqP+pg(|b!T4(rer>$jE~VdLf) zo8_t`bVNB&TmtYaj{{?xjk^?Oqxc`|2*+H`tKTOl7o*OAb$B|cpeNtO>%c_W%j_Gi|AppcuwYqBx?G;8? z=G8pwZ6yM#cZJ6QYSMQwp?#5z8k4^#jzG9k)V9YiR#v=bjmhBexJAa2Gcn!-ub|hY zdv(y)X5ZMmAG3MU0O9ZHM4fVmT9J!eYd)tPA`oPyn28B07K+ikOAw0x@nrEgW&W(tMYIy{>8Y0-U)JbTtbD#*>9m)dZWjjaV zQ>4#QEP{qJm{2Hs?J-B(3r=}czLr@Wu^UcBbC(a4F6%BHh6gYylj+X-JS^qgPeb<{ z|GaX148gvl(v981>z?g2QP%_&N`79shxWCQj1#o>D%k?`V)YCf>}=?R@C1hiV;K`3 z;-S*>tON+f4Ua{&xk0e&P9tuYC|A)i&Y==a|7UbYzAnksQ``}Yx+NTdg5#0V<7eaA zFyi#XBCvv2j$0Js8Qg-jm>PSRt3~qbSu|S4c9^F76FH&kmJEz z(n8I(4Dd@WOP)zDh^gG(RJ6wtuxu&|6Mc6PE(e>R*xhFe)#y$!Hk19-I zJaO&X#eB95O1YNd*=EF;)JS@n>Saw58og}jLZ3%c;WwUP$`uNW(r0pVOx&Yet=$`X z5|S+1OF_njA@!n<*XI86Rf*pqv*iD6r1xr~Mq8tB>+}>h$fXvB>P~keN=K*Xll-3Z z5~nKSZ3+Oq2u^p@=QpV0v1M|{wQSAjRiqPzkclm4(2twKO#U&sz2OFgol?XzMrwEj zl0fBKmZIa7D8Z1GR`urTX_hrtwf|!*Z<;T=)xx!b*$otQ5x9#8q~7@0%hN{BuB;`B zLG#(h=^A&OiVF-rzB(U96{EPLF9T(@m?2UG5KJ_7MCx zQ|Se)m+#JoXu(Q-P3j)LeUz8w%DC#*a!Ok*ydN99P`7qcA9)W_U!wrPU&1_HJMoV~ zO)|e_)Fn~tis(=DJ>NxoE0)nbI~MTxhk(8gzfqH!sV_j=J<%wl1e=W0*!wfjG$pO; zPAO=cz%?#afq*&Vxu2#%Vk2mJMvzqOq?yn7+}&;D8fa?IvIq*F;_%^Xx0bS;*fRlJXI@N9gH`C2pZLg-+Z=s z;N5*&vCHs?%}QNvO;pWWl7&+$`5Yer3TYhm$Mg$Q#ZNa6DYj~1Ct>05Pd@+M6**zv z()*8spBJMH=kwXlWa*VIx7yJqoo?!42@Rm76Pw=p|7S{CmDIGak|`5Ci_pi_jSXQT zJ~+RyOsiZ!6gTzi)~fhatS(P&3jl(`p>Exo z!|k?ntNqBQbtUK%q{gbx`^yzrH?-1$p-e?c)ozfZ>Q!VLY9zMfQuHJD%_Z3K0$yO| z2}K02mzIz3W2j5=BvjI!ybw?yc3v=iHtO(~QP%V8CIHXufB7H_GR`Tr19OQWg!O^u zKdF?QD~_rZM*JHp2_cq~N@_SL==YkYdX)a_;0C$`TlcmE>-Y4=hId{x___xVg|9D zHyhe*P|J*V(0CSkF0pB-C|aq3fexov{x03!%RcOSJOiJQ>*8poXOkBWud*s2OfAST zAwbe3u~4MYgoV&H`SzsLs65jS1a!?xBZktKW7&=r#r!V(PVcO|dYbU~=D)#9s8m{9 z;LPuO5o?+0?;lR!B`>7(Cn{8)H#QQA8b5DH?t3HR$%~ePJ@Z_{v$>E_=;44OqmX$s z$;c@=6<4dVR%RJ*_#15M%=PngDWm0tvkpaOL$zzZ*6@}_zCDg@x7j~YtZgLyEhF5>yoDturi-6?a!`(qNQgl^NxjnUAanBnQfYj#|M3&D}}IH(2ef*{Yod;b6dDwjVlecq#@Ol4SP^Z(JtHP zWog~ssPB^jnr&((iM5k5$wkAEhbE8=xXxMWXH(U*z6|^0H0XJ1*U|v~E%sb(Ne-Qcf{^Z54X5!Fw zjXY4)xEz!`M1kz1c_%?hUQZ{HuyIqBLzMG9kijqCb2KC`=1gu@gxjP#Wce9s{(Xbe zF^*P%Qo&T=j!#kxbA;Fy4svNr{``iqVf(z~odhi&Sb1wCZ2DmpC81bBbi=NQsPH5a zPd|dgB0q-DQB9nUv+Kwzv1d4D!^{zN=5xyTid}#G z=m3<}mnuPL!g;MKzvZmA7rqePWG0Md+H2otVANgi74mIC>dy8utD6`G+JyqEYQ;O8 zeCS>RW@)UnrP+A6&a0DSmwAn?{9m;OI`zL&rXB1Hj;6WBN(_mtCx-E+p6I}kJ>c3U zQV;!T|J%Yns&y`F;YCn6Pk|ysG&gVXSM=~a3Q4GPF5O-^xIQ#7&`|N;%JkUZ3LAfF z3?S_9OECL3)$h_aytR!CU_811%W8>9;|ZsvfOnX4AR|D%H=0yx6Osx?&cMRSSz*WyCAUT69fB>qsCPmEk&NAo@t(62d^vk&}MleRP>}A zfc>B8za`2hH|^yPz0A}OL%lqz47azYx`30>DR$*sg#&3#k}MgY8AUdXk_ngQu_{7T zx2NVkKiUpBv5y6YvNrMvc6??(>}3o_9)f z3wuRveM%&#!apLBqjmlE`gbmwTJsKEAPa}Z`_hTmXRJLRgjb1$=wfLiPtSTjF6Rgv zJkl_S(EIJs>Qs+aR4c)MiTv^t`i>`L0Y`sMYDN;4*g!89tlQK=0$5F$Q#DVJSQhp* zCQP`fczYtKfb6Gu+o7>?TZ#loh*M#x0)+wr& zVqUM@dft%NcgU+yR7;W=L-i=%hxZD1wY|0pf{ETW4Pv{?i(0+$t+bUUGYnu1d;rhApal6k$bAv zU3T8ed@;7=`x9CS{=r|~ye7vHDx&Z|VG6$t-a-+GRk?rupwVX`e3G3NLl=XZcn z;HklC4BEJQ4~ll5GtrW_0@1_4RF=9V9126X&*s9!M#hlfVQ;;A12oKhgOnNX`WM0~ zvL^9N#%+NK*X^Hlo}X`9AI-o$j<(Vh~ZN zX{rY)VhNO|%9Ygt*luF&DNu?+4NT*uJgX%5!2KcfLt9ssbGX%3L=W^bz&T7Nopq%f zE*njbx09|Vo{40cgc?1Ti4P1o%3#20w;#c;Z-yc(x?RPvTTc&f!2>&A2E}CLCqaS9 zo?6aOjftgsz?z)H_3#P?;LbV^Zst9bywZmQB-`RA;IiohxHzQUzf@8mxp~}vf9LZr za_E_%S5%u%*!Tf6jod(`u1T3f=Qjl<5~{Kc!G^ao#FR^r5Jz`f4S`huUUr@Zb=a@! znvD4iJzz{8uK|&^#$Ebwt!g$Oq>_dyC4(;UNnjGct`vIqZLk)CI1Gi`&cz}Ky$khY zKVOcsFEIs^R=$jTb(mbMIv*kdH z;ybWMR>%u4Y{c3>Ox9lJ_^+lV3;ohO>^?e9|605rY-Tn*#leZu^0?DoOSY@AyGKq~ zOSWpdzX=jH_OTnZHo4jV)3*JcIi|q7q7Y}8PAD?}pGlH?YaJ1b9WeLr4^-$YTq4adZ z-Ba?Ap5@=Ez6{93M7%B+ogX3DK0{`7E}wvafos$qFaE3Ux7!qcJ`(bA$O=&&`sGbX zBKP{emv<~T;P$#e=R)XSjzY$)w>exxzV9*rmm+B;v{rR94SZFz4<10o6xa}e{%JpE z54FN7tTOF_9n=YWc3_iv*o_cZb%>1s0jnPyc2Tg9g;c}w^r(2&bb4g;W;h1NkydGk z80m-uJ4fE+BCfl22nrsvI^W38>LRYzTG$l>hGmIqa{vv4AXz+t0s>2|0 z>k5A-GEdb|Jq9UoZ>HOt%rWXWK%w@D3*J_s7$X)ukMI;p5f%vIvy=GEzRqf zUJOBWzXNp9WEQ_oJ31!;V6b#@DEoj1)VDVr3k5Jv{f~^t?GhMQxVX3Oq5z+II2aWf4Cc>F?|wA=c`w|demuR@Z z01&SOeEY7RYnbP&i`=lR?1y6ls$&A*QS)p0^9hUe6!fw1fBSc_oCio8^s1)4Hei8^=F_7cp_ZtQ*>oz?h6FO=Eq_0rrvg z4o$_U&I@J$PHn|(^iH;JjJl_wCQ^(#|edD{pH zyYV?eBHKv`2?&4}J@IFpFJ~#T31d^K-1m{YjbAp|207_Y4U`wn5S)5p(GeHbl zI6u|HIxaUJdZn&h%TdGiGIhXY?U||XrSwrL1FrC!=LB}=NnbIr`Dgtu9Yt|*sOpYx zdr=G=rp_zu{0FsmONcd)p9(f1~ho+&9+R)2KpXYo;1Itt%lnVt9p>tyI%%h+vsY%)EOUK zhmo2t1`SH`=%!%QE-k0*_Or{myf1}|Y)s!Vg>AhO1-8?xPvfixj}J>sYpnbE_O?rF zUxU9!F8cd#O4dv%0F0pFG=-seVKWL@5l)sFBdF zKJs`{3Gk62qK_IZvgAWTdo*FGoZ8jA-4a)G8~{Z@W2oxdfY1aKZJg?opmAo_efaOf zzlJV4VM&&5e*{NE2!50h^N-66NfIF8j3`}Z`93sYc2=xDeT+VrNoc{qan#V_QO>Zu zBjcN*T1^3!zom3Q8;ata!y9?>xblkdZ~6JbrXU!K0OWM;kXJ2_QsYmSE#?m75~ zJ;S5eX=e}Q$QwuobWxS|c`G~e1}J%DHZnOPGp&5@ecQfTZU$uZ=!}>yd<15+6!Wct zY<M{MTpP^G6ze=Y+s+^>?f4}QFZm=LD|H*oK0p5i?Cx@@7oP#P) z)_xzHcWKt17smTu)69*DUaNR{7jk-2#dF~~UXZLK1A#{GPe=4E3)vaP?FoSGB9aRO zpX2sD>&?H6ZcBXvJNr4(6zZFNZ(sTBoH3sF zaZZSum$vHA&jhO1KlSY|Dz2HkS;n&w=RWR^kWL#(!uly&7Ue20q3A zv?e-xh_--Iy7JNm(a|b?@D1GYSP_*`NCAQ}(jQXhr5u4DQTg4k}y>KS+IeBWgT#c~U8#G5maoh|WQ z-VvJ)*6%I-WVK=CE?-ANaZa3tUQc6NI@{y{K{lt{9+62(%Yd=SMD!B1!kBBjC|GKv zWV;HWQ-due%$Qk6D(8I#@ESs)irSgY`0q0Uu7ITs2aVJhVEqr`RetX?og6pfVuOEu z@BRp;c$lFKG|_Re8vXbdsEyeeVMg-4&QW6bC2z8!D>X?)sA<08gfRQBYU9w|P!MEb*BpGMod7vkZsQK^Q^Y<3?6BJ<$D zx0VhHv+&rXzPTkUH4l@tyj3N4F^p=jcN1NgW-F|h`K5b1sv`=wUR~((4G7IEaJ-SW zP&q@*F7IDdYLak4b?5T6qhR&l7S^(-)ezr&ZI7_-|BWv&NkVpJ@~+?S@bqBz0DaWB zrAzFIZ%&qKu_PYo5Ip3i&FGGi0y7Mwjgt#w1eo8qg^^wHtOn064+bOQKYo3l^r|#Ca z73}oh0T3F73BQr=?3ocS!IeHAzwBn8uZeG;f3c9N-UE-qlU}6{_PvOa^ZusW8^IU1 zC>)2A;)PZOIBENv`p2gf{m%Qd*SztPmxfg%uT)Vge?Y>cuwHLrdk!(ps?#GK1-UZK zq9z84ct3>VI#IDB*;K$QZq>BDZy;kBcyo2(_R!w0nM#q~7r)m1N-+nmtk1-(Ejlx$ z9l~jv%@q0OSGnv7Arj_*ebuNhg*MVT%eA}&jDIRdKxCNsqVW9nWmT88 zx6(RE$Wxs*?MWc)29j3J0E#GBU1TRY3dLn!d*y++1$q(a|;#MQ8l?24nE3JEIts+TPI1Oz>D^+8D|*sK(dBKWc5??6N%L>ElcT8HQQTl6O^aY&v|*Rya!1N6-xDavm@gaY>f zm$uXDBOU)B6xBTth|^;GZrG}HmjiruN=!7%B@E>KTkreuZ-lEf24PjPZP}p}8s$j+ zstb-BzAxp~zcT-xb4X5HeL&78UV1A!)>=I_7xzL*PA44s=LZKXY?9?p5gdbi)QLKg zcgGoxjkcamG!igwJ`#X(akbNQCnfD}qQNroC)gV+i9s0kcER91AcefGA>x0 z+T{is2EK?6e3VQ-Mlz0MKh4-!qjw%M+Cu>YjWXqXg*?e8FK*n{Q+EG4m%?3cfTWvS zmpQ2o`>KwkoIS;4k_H|?q4XBGnWVoP|EXFW!uh_^z+f>X|4-3@(MP0HS^)JQIb4F%e-?c?9wh#YSLxcyEr15TA^X^86 zk(e3pn>0X$h1giHw)g&Xq#mBd=pP5$jX=DDnuoYy)4>jz(+%O5-`yoU6^_}+u2;km z5ReAsX0~wM)Rf+hWsw?++BzA!pvVgmcE1xX-*=Wve+s&pfCD`AB_BJE?#A5Nr&l!! zFh5^cgd7^mrn_Du@Dc+?Ndd(csV?S*O&8z+6K_x$(`%Js%ZX&k7B+Wp!RLt4(MRWv zhHS2-t6QBZWgwt)`);YUy{>Ky_F%xC2ZaMJ-G(dQxjan@SL4|$lOP)5FLxiFKfl+^ zXOQyb@Rs8u1GAkOmW5-Qwr{O&h|;Ujcb(bVmRj46M(^H=KoEd^aRVO>A8o^?+p4Js zd>*ZR~SM~zUJ8gYN4uMFT>z`GI)FU|$0_FVhFXbyIKoLcn zvcq;F)>U@$pA8az%(j-*ak8R0yaEdl^mgB*DBXnzFiZt+Q=XLlF~v}!`wPa_m} z|3o7Im=c4$d3Q_)>wJPSdp#7_*9N|WSAsOllMQj&u#hxlfP9d6Za{=9eLS8tt@@Mu zn{c+TfB1a`S4yG!S6hxXpcPzN?0k|30W%im{DMC=)sM1Mvnq8-K8HDXwr-t0Sa`09 zIe?}BaMS5i-R^byZ(lv>$uk=4YlN*@+3<@&*kLfV*}gxKF96I;qyk+(%Tl3wqxfAq z%-7s24f}r<-F*YBo?^Kz9TrhQ^oxJFKrym^gB{z%U4v-&SRv`jV zqnI8#meDSo_ctj}g#?i@oqw_QsOOUYqyQ=J1Cs`t0_Abq&QS$zffIhjMUfXT1^cJD zJ+i^l$hvXGw5jMg&chCljM&4Cbg|zUa@k;tQW66n8+G#UF2JfCyCOBQb?)%I46F1Z z1pDQ^$)-rHr&gS+Y?uusu*C$KQD4817fGyPVdPL;Q%FNHef=F5$}0uCoi;Mtv*kRP z&>!kopnr}!NM6O9EY-Pr{NtQbCTH_*9g+_th1Ba%lHwzAVgSNsjVCpk=gL#)HddT! zlEG4)JEb7zdEc|8;2^fan8BDRCK3T~6Vr)k>$z1j5Ddp`QtK(q4%Y!k4TYJEI3*BQOl+H~ zZr><6H>(_zbw{7p2?k`F!d#y2l1%8FK6PNjb$lZEVF4E7ygMa0Dm%5z^(qJw>#JnT zw+CgW)WeX#zVI9<+?(D#GQ}kv7Hka7_a+8$#=Ugudr)6{+)?4CaEugYu<+W@9 z>ejkKM=Y#=T}2r-YJPfr87%0zy0p`FWR`_PmB1|=ba7;zv!{3y-Y zsA*j;<$d|3@CNyAoOwp-Tj|$ z5ZQD*Oi?gmxJ@H!fFRQTOX`&=28w>3ReWNw7nO$?wXM_M4G)A z%;J_B7Z85KYbu2;aQ_F1jV0u5P5jzFSB#5~VS+RYr2AiJE;eXD0B=|fQYD%Gd*V9kb zDmK+xA3b>p0pSE*R`%F}wrU0US18Df+#BU?#b5@sr3~g)F7TH)O>bTTU=L1)O?i0D zS?vMA!YL%=jFa=O0!kfnjZDOv0D^Y#(-VG#V~2@qGtuhWj^NidLyPD5(gq7)3SbNc zh@9o%1vo83b_p>1xdSU&4d)NBnX^)x7Z1<1v|iwk$P|=cE6) zPPOjb0|9^-P~Ff-K0FY<;sF{OBrIjx-d2MIQAAdhape^3*5-&(GeJC2E7-wa2{4K) zdfPL$_>azcc7T|NSr#1bq;6|<*xKKK{*|6duUEV3hA*)G+F_iDx^DtMo{{mBT_To=HdKrnZ>k{y%Q!md>-Da3zrZ9Jy%t|9 z5E~y3><^dQJ@*t}K4_i%x}(b7S8&X>rE-p=Ew1MuN+tx=1B_y&XCCz0OD>H6!}k1v zUJfQr|4gRlr|iMg#84f+pU7!)fkR2$w5&vupko6yXoZRcvcEOm-Pr@)pU~KN^L&+? zfZCJ^)qy8r_Hh#`-kI_Rym#iYZf@;mk0j9l_wC?$uS$DHM#hR8Q&Dh?Y%}B2&*#hp zK#ve&rjaghmpS~g?3=X{xTuk(LaL&_7n82!JI+4Y(L z-GeJfH}kJ`{x`MIe7q1LlkwTt8_nX+-_5#a5j6dGUVZQ5E7qRWusGxBIz4C(9X`IQ z11bHhX6ldjl+@0(dxf3!Dui_W<8x*NeCIz&8!1bTdx&hWfBPNVkd1l^p|tY=t28Be zRuCkH+gJ<((WDuU2=aDuv&=gg>&}wA4g-{w;PrhMwYDsL)xV&GhLM6>%l97-1x?B< zI}E^G$)Vm5ADm~h|1&H1fLz(h#KOi{&f zpf)1phR@1=<1BGCAUYU4A0RB-(!}i=zqI2mQnrlMI|Fio@=0j4peYId1|E*lxj1L+ zPS`H$(Xz@0{oEED{qizoJNT6FW+>P%Iw7@>Y`Tg*HKZuP^A<)Myn*m!6 zD8GjmY&`j~%ka^3AhPljXDf_NH!gpzo&ggRA6zJ?s%>|RKH)`Jp)GIzgCSK#r)0BPVzFBUbX>2X)Ca- z%W0$bXKX^yeWmk3Qy|hE`r;>M=i;_d{GOCqGE`Uat8BtAR?`pv!wvlj(5I$0_(*++ z-#o#tUxrug1)?1Qq1zIZu_nvU0xy#iKt5GgyxQMSyC58Lfv&bTUCstYNFkSE^DNK=8~N!7TgZ|Fnp_Gj+9T$r2fXT-4q0+8H>?A<5Gc9 zh1V?*9D9)(-dRX%yoz%L-| z*!01}AeZ+G2p3{HDQIeEk-aCVN-cSYEq1^;n~F^3&GD)Cd>1MBUz&~U{n$?+Q1Cn~ zoW{*a$2{O4Dl@64QuqH#IP*ZJ|38jTmm_5Ea?KT)BP1*&IYNaPmcsgwL;h{UW^Aw0cDa3mp%R3N#BKpJP&y9?%(?b2N=B$3o> zL73qJfG7;+G?z2Ae_534-b4FFSlolBXuNq<%t;xZbUE7)rtY#yTjGZTX*wU#(O^*7 zS`w|UIhvla?($okp;d&{Vy>>%m{mGjr@v8>M1h(;wvO6H{yk9GkB(A??| zVUWt#_hD8^i=wRj1G37m%CD=EUdNxiUOL8eK+no5Kg`-<&nW4-Ol$b2ySDyacC^H%;Ai1GIHn8v`rl`Ym0wzZ#Sf;W_g;s4 za`HSqEsBeB0imd9j#f}11%LUqNszQHXR7L&1@=eHpO17GH6Y~{V%{lXJPHCfG69PS zbFDcP}5bMgXbPut)g0Hq-Moz#h}61e%rZSh$#C=@uEkh^!cO0l@B%b$XXx^y64 z6VX~fRW?w%ZS!L-83*QkrA&t#Hn83Egf7!*B818NcI#JuJK-vAwl?>qK|muWtD64=R#fK#SH}2e~r|l zGC=)6TURO|S%Iio9^=t9B)J4!;YWO`o{&WX z0HlEW`CfI@`>AVUQuaCdt$A(M>ULk#HIk$Icg{tq53@j|jusRMCf~e@6q8QLDFy}F zQ2SK~oo}Z#;1GSoRJ;A>nD>i3Uj(tT%3Vb$FC&de_4boYY4DAY1QDzdcqWSdsop=% z`wAE|@w*m>=&zRJ{Q}G$6g-$7=-a95_ShY_VYQOHV~(DB61rx;EdhwyDeA&0=B$YH z%DaUqU|fxgpA_;|fo4o0Ac_>7DtO*Whh)t#$JpC1=KjuYLp=hZ2tNhb!))UdSH@30 zI63!$LdGrT#El#>IMP^}bH=k_5ms#U0B`PVn+XtvOy{!>H{-XNX642uTo_SOCIvfS z<1E8@eX79Oag~GcOWl7!5Lckf9Ik(uC({cGq~NRA7nYBBr!N8_<+;YfKX>^C&kI`A z0rn6A37HA4lwVsYc8%ao+|g4o_eI-A{y<-m4w9f9VmPw?mS*O>LRYOFsNxB)&&42* z`2zqCIQ*JCC1CN5(F*Ps;it3J4A2ilqZrVEW76*m(rg3H<2B*Zd0VVFcmR~)pgRfV zjRsg&WCKB|0bU{kV2Bsf2GxyA8^}0C#?Tq^S4fu`w9D`zEA3 zv}<`zCky29{6f?~s%BQxF+go_(}E3Er5X)O$-J@5RZ>diVNU%fC5_XScPm@sfLVR| z9ByL%o>LRR8JfGifxNR>0~1D%G|a96k4cstW>rI=D%zB%HIF zS&8Ibg#``QQf9Rs1}`~=CFKGi(U+NNC8A|f+zMaBHvw%M@OTwL%MmEJ-Lu&cIA+f1 z=IQpfcXgde0x}31 zmbI&2b*$^_vvxYV#*Aw2Np{!aIm4<-&MYA*sOIBl_0ir@tK$&J(F{gj0Ce8y^s%&e z^g{`wG(G8VJ20nUoXavT!b%o`wqi09*{%QnV|We_jB1^-vUqSsN7tHBZCsnjgQG#c zZxu-x5NKz&q=r$IMQU2^TYnE4lK#bRynKRTZi7C%=R>|*08{covf}yWG3R~3;bQpA zN-WqE<<>u3VpjFV1L{+D&S&)Bt_acuF9S+>rspldH8?(g=hJ@JcmKcO!6xT0pu)h4a{dlBFv&BjOZk$21J$%xrg#Fa zP&nSHgfXGyN@s@D+L5o9ti)ul14iw-x>w+5d$c=tI5Zy`a=EmlhQ##AKhIV-!UFTJ?|xn@ zqR<`MSO7Bw^~6nFam$=R!S+__4PtyjHQ|M}MD0n*Fcn?U(DE@^@f<-5651K4ugTZG zi34KV5{z}ufN#sv=hAw`0%I)CZ4on_h^ncNtL=}awnfvwa$3#nBHa&!7s6C_!UDgI zVPE)Uo}gqQI7Nj4Y-y8tvr#WF=kJDnx^9ix5Xe518p( zwgGA(qrndwrB5lEQPACg)Qk9Hbr$`I*-h~5@XhPhu{kdg1RrCS6*s>ALngx+;El=t z|BkCFoOi^Ygy7gjT76O+fL(j9i5)^5krjW2w)So4|Iqb@Cg$ohg4K_cLL zQOPHK%H_ptFJO6pY9$7ysKuDlS`#8^QMUE2&iQi3`@0wo+oOp1X>j5WHplY()B(jD z7>NM#JqkXG!!xDy5_1`qoh9%3aXqJ#i#s(!n;R+ji;fkRiTRT3V~iB4F2}Fp~i{ zL0vFA%=|LgBp$k)b@(MT5)IY+-ac-hR{Yu)&;T1-ca`zgn z=&Gqc-hmS!w*v|*%BGhX$nOULwtSDVwa0k4vXGmjLA4AQ41Ff5Lt2UJN?SF`)E^+o zHN)?1olXE2b)-&~yBZ~}z}pM%1BW4Aw5a~=4P*7XPxQSWjpCN@V0p|MO8cMUE_p8- zBqrHQD8x!w#7vr|Gz-9NaGK-vEB!MM-^$02gdAK3@1>usiN?QpqC>p4ZS>6Ms}0(} zDp7+7i)e_|UGJmY2sqe5i=XKK1X&f*&>-HxA6@4a5R_k`^%^$pBa^7DfBHcymusa? zfDx95?FL}r5G6ff5j)R+0&1gk9v3`6!JjOULfwNIHS z-g84va2uz#A1S|4cYCB$2Zd1#za$wO)aV|F!UUn_r6|s@P>=`U;&ozZ4#^5-aGg$y zxlIV1a=#KADmIJpFfshV)-4aup_~f4$g`C8AJ5yWf?I ztG%%#-_6HX>`1c&$aK)0qCEx|d_UK6{X>qv^q?4_Kd-u3>gPJU0-ub>;dEL%{6oG3Mr$E8*uwmpx$c}TtN$Ht$ib?EZacaQBc z?_$MUx-KfPfw|)=1yQWlqFk`J1_9|+InFyf7DiotT*WQ=H$h^CrmA0hn=5xzz@6f<%ogaD|j=s#g04BEDa^dEJjq&1&olHMWMZVRs^6 z?NhNhX{rdp*91(%^OCcLr}3ic)aM2DmBig|9M859@$vWZ@|)4@gY^b8on6uMaTm%p zE0O||U(I=2iLuT62fm`k0BFC}B_s6q*xWcx?uBlKhd;Y?ZTLH)SnbuAce|qAYa^dV zRtTScYai4t>O)qZg2W~R!3*Ta!yQ^doasG(YEBgR;ea-?!@r7M@^YtVjXU3V!>7+% zk-PAMOiCewN8dfGRkCzN@0qf=EQ7UGGpCQXE^xZ|*Y4QYQUiGqbKbOGPG#eXm_|D* z!ph!?wRX1wi@yL6tv+LHZpEA?~Up^gn&8UmbOIXP_Q@6mY^!cL}&pd{9eOq{t_$=Z@ zp@6Gb(3^A>5WJZB)84Bf(K%j>;Mac#tfo*!7XDQDdp3cQr~u!=DR)H>A#^Os%>($W4rj~ zpIx>e9x3%0jajJ4xmhW^e%Ix429;2%=93a1VlYR#XN!a0f4-w#o0?oBGA!)mY-Sw} z(h?l>*I#1yJO5E{etEYBY$637wHet785d4SbmHA`R&LLPk=(HPw6kZ&e!X!tsoT0+ zN^P}+x=-^2wITi{d3oCp246Y|sfEaL&&V+t9u?4`wua32lQzev2c#P^+jpUeekh?L zEN9}Fd(1$q+Vi=Wp|SV0TpbftreRYFr9$89Gca5GD})M;=F>dSR?E1n3J3x)red$?#mkUs`W zOuSTGH)3iqdF*~s2v2aHtwC!>mYE9SQGNBT0Xc>5f8N`M8QQ9t3C!#HZt}OW-udN~ mFv(p<`Mi2b_?hZypBBG^mh!y+v4iI-h^f(4!!m>a9{&%guK<|< literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable/receive_icon.png b/app/src/main/res/drawable/receive_icon.png index eb7b0f1086f829a82b7113345ac2d3453ff8a084..8ccf61197c797a18528e9b058dbd46b4a71b9f96 100644 GIT binary patch literal 3895 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 literal 5798 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 + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/send_icon.png b/app/src/main/res/drawable/send_icon.png new file mode 100644 index 0000000000000000000000000000000000000000..7e6c965fffa3c3842e6c7f9c22f63369ad76ad31 GIT binary patch literal 7287 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 literal 0 HcmV?d00001 diff --git a/app/src/main/res/layout/board.xml b/app/src/main/res/layout/board.xml index 90f8ff8..f0032e1 100644 --- a/app/src/main/res/layout/board.xml +++ b/app/src/main/res/layout/board.xml @@ -5,7 +5,6 @@ android:id="@+id/main_content" android:layout_width="match_parent" android:layout_height="match_parent" - app:theme="@style/AppTheme.NoActionBar" android:fitsSystemWindows="true"> + app:title="Client Logo" + app:titleTextColor="@color/white" > - + + + + android:layout_height="wrap_content" + android:animateLayoutChanges="true"> + app:backgroundTint="@color/white" + app:srcCompat="@drawable/send_icon" /> + app:backgroundTint="@color/colorPrimaryDark" + app:srcCompat="@drawable/add_contact_fab" /> diff --git a/app/src/main/res/values/colors.xml b/app/src/main/res/values/colors.xml index 2a7fee2..2d1a69b 100644 --- a/app/src/main/res/values/colors.xml +++ b/app/src/main/res/values/colors.xml @@ -7,6 +7,7 @@ #686767 #ffffff #f0006b + #00ffffff #147b00 diff --git a/app/src/main/res/values/styles.xml b/app/src/main/res/values/styles.xml index f7a00e7..45357aa 100644 --- a/app/src/main/res/values/styles.xml +++ b/app/src/main/res/values/styles.xml @@ -1,6 +1,5 @@ - - - -