diff --git a/.idea/assetWizardSettings.xml b/.idea/assetWizardSettings.xml index ae12ad6..0e83d31 100644 --- a/.idea/assetWizardSettings.xml +++ b/.idea/assetWizardSettings.xml @@ -3,6 +3,11 @@ diff --git a/.idea/caches/build_file_checksums.ser b/.idea/caches/build_file_checksums.ser index b761e37..9c090e5 100644 Binary files a/.idea/caches/build_file_checksums.ser and b/.idea/caches/build_file_checksums.ser differ diff --git a/app/build.gradle b/app/build.gradle index 4c54bf0..f848c74 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -12,6 +12,10 @@ android { vectorDrawables.useSupportLibrary = true } + aaptOptions { + additionalParameters "--no-version-vectors" + } + dataBinding { enabled = true } @@ -34,12 +38,12 @@ android { dependencies { implementation fileTree(include: ['*.jar'], dir: 'libs') implementation 'com.android.support:appcompat-v7:27.1.1' + implementation 'com.android.support:support-v4:27.1.1' implementation 'com.android.support:design:27.1.1' implementation 'com.android.support:cardview-v7:27.1.1' implementation 'com.mcxiaoke.volley:library:1.0.19' implementation 'com.diogobernardino:williamchart:2.5.0' implementation 'com.android.support.constraint:constraint-layout:1.1.2' - implementation 'com.android.support:support-v4:27.1.1' implementation 'com.android.support:palette-v7:27.1.1' implementation 'com.daimajia.swipelayout:library:1.2.0@aar' implementation 'com.fasterxml.jackson.core:jackson-databind:2.8.5' @@ -61,5 +65,5 @@ dependencies { androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2' implementation files('../libs/binance-api.jar') - implementation files('../libs/commons-codec-1.11.jar'); + implementation files('../libs/commons-codec-1.11.jar') } diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 1b4bdb1..4620055 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -43,7 +43,7 @@ + android:theme="@style/InputActivityTheme"> @@ -56,6 +56,12 @@ android:name="android.support.PARENT_ACTIVITY" android:value="com.herbron.moodl.Activities.HomeActivity" /> + + \ No newline at end of file diff --git a/app/src/main/java/com/herbron/moodl/Activities/AddExchangeActivity.java b/app/src/main/java/com/herbron/moodl/Activities/AddExchangeActivity.java new file mode 100644 index 0000000..5dca0ed --- /dev/null +++ b/app/src/main/java/com/herbron/moodl/Activities/AddExchangeActivity.java @@ -0,0 +1,173 @@ +package com.herbron.moodl.Activities; + +import android.content.Intent; +import android.support.design.widget.TextInputEditText; +import android.support.design.widget.TextInputLayout; +import android.support.v7.app.AppCompatActivity; +import android.os.Bundle; +import android.support.v7.widget.AppCompatButton; +import android.support.v7.widget.Toolbar; +import android.view.LayoutInflater; +import android.view.View; +import android.widget.AdapterView; +import android.widget.ArrayAdapter; +import android.widget.ImageButton; +import android.widget.LinearLayout; +import android.widget.Spinner; + +import com.herbron.moodl.DataManagers.DatabaseManager; +import com.herbron.moodl.DataManagers.ExchangeManager.Exchange; +import com.herbron.moodl.R; + +public class AddExchangeActivity extends AppCompatActivity { + + private LinearLayout setupExchangeLayout; + private Spinner exchangeSpinner; + private DatabaseManager databaseManager; + + private TextInputEditText accountLabelEditText; + private TextInputEditText accountDescriptionEditText; + private TextInputEditText publicKeyEditText; + private TextInputEditText secretKeyEditText; + private AppCompatButton saveExchangeButton; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_add_exchange); + getApplicationContext().setTheme(R.style.InputActivityTheme); + + Toolbar toolbar = findViewById(R.id.toolbar); + setSupportActionBar(toolbar); + + databaseManager = new DatabaseManager(getBaseContext()); + + exchangeSpinner = findViewById(R.id.exchange_spinner); + + ArrayAdapter adapter = ArrayAdapter.createFromResource(this, + R.array.supported_exchanges, R.layout.exchange_spinner_item); + + adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); + + setupExchangeLayout = findViewById(R.id.exchange_setup_layout); + + exchangeSpinner.setAdapter(adapter); + + Intent callingIntent = getIntent(); + + if(callingIntent.getBooleanExtra("isEdit", false)) + { + startExchangeEditionForId(callingIntent.getIntExtra("exchangeId", -1)); + } + else + { + exchangeSpinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { + @Override + public void onItemSelected(AdapterView parent, View view, int position, long id) { + loadLayoutFor(position); + } + + @Override + public void onNothingSelected(AdapterView parent) { + + } + }); + } + + setupBackButton(); + } + + private void loadLayoutFor(int exchangeType) + { + setupExchangeLayout.removeAllViews(); + + switch (exchangeType) + { + case DatabaseManager.BINANCE_TYPE: + setupExchangeLayout = (LinearLayout) LayoutInflater.from(getApplicationContext()).inflate(R.layout.binance_exchange_setup_layout, setupExchangeLayout, true); + + bindSetupViews(); + break; + case DatabaseManager.HITBTC_TYPE: + setupExchangeLayout = (LinearLayout) LayoutInflater.from(getApplicationContext()).inflate(R.layout.hitbtc_exchange_setup_layout, setupExchangeLayout, true); + + bindSetupViews(); + break; + } + } + + private void startExchangeEditionForId(int exchangeId) + { + Exchange exchangeInfos = databaseManager.getExchangeFromId(exchangeId); + + loadLayoutFor(exchangeInfos.getType()); + + exchangeSpinner.setEnabled(false); + + accountLabelEditText.setText(exchangeInfos.getName()); + accountDescriptionEditText.setText(exchangeInfos.getDescription()); + publicKeyEditText.setText(exchangeInfos.getPublicKey()); + secretKeyEditText.setText(exchangeInfos.getPrivateKey()); + + saveExchangeButton.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + if(isEditTextFilled(accountLabelEditText) && isEditTextFilled(publicKeyEditText) && isEditTextFilled(secretKeyEditText)) + { + databaseManager.deleteExchangeAccountFromId(exchangeInfos.getId()); + databaseManager.addExchange(accountLabelEditText.getText().toString(), exchangeSpinner.getSelectedItemPosition() + , accountDescriptionEditText.getText().toString(), publicKeyEditText.getText().toString() + , secretKeyEditText.getText().toString()); + finish(); + } + } + }); + } + + private void bindSetupViews() + { + accountLabelEditText = findViewById(R.id.account_label_editText); + accountDescriptionEditText = findViewById(R.id.account_description_editText); + publicKeyEditText = findViewById(R.id.publicKey_editText); + secretKeyEditText = findViewById(R.id.secretKey_editText); + + saveExchangeButton = findViewById(R.id.saveExchangeButton); + + saveExchangeButton.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + if(isEditTextFilled(accountLabelEditText) && isEditTextFilled(publicKeyEditText) && isEditTextFilled(secretKeyEditText)) + { + databaseManager.addExchange(accountLabelEditText.getText().toString(), exchangeSpinner.getSelectedItemPosition() + , accountDescriptionEditText.getText().toString(), publicKeyEditText.getText().toString() + , secretKeyEditText.getText().toString()); + + finish(); + } + } + }); + } + + private boolean isEditTextFilled(TextInputEditText editText) + { + if(editText.getText().toString().equals("") || editText.getText().toString().equals(" ")) + { + editText.setError(getResources().getString(R.string.must_be_filled)); + + return false; + } + + return true; + } + + private void setupBackButton() + { + ImageButton backButton = findViewById(R.id.back_button); + backButton.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + finish(); + } + }); + } +} diff --git a/app/src/main/java/com/herbron/moodl/Activities/DetailsActivityFragments/Transactions.java b/app/src/main/java/com/herbron/moodl/Activities/DetailsActivityFragments/Transactions.java index 4ab12ad..7798cf2 100644 --- a/app/src/main/java/com/herbron/moodl/Activities/DetailsActivityFragments/Transactions.java +++ b/app/src/main/java/com/herbron/moodl/Activities/DetailsActivityFragments/Transactions.java @@ -54,7 +54,7 @@ public class Transactions extends Fragment { currency = getActivity().getIntent().getParcelableExtra("currency"); databaseManager = new DatabaseManager(getContext()); - binanceManager = new BinanceManager(preferencesManager.getBinancePublicKey(), preferencesManager.getBinancePrivateKey()); + //binanceManager = new BinanceManager(preferencesManager.getBinancePublicKey(), preferencesManager.getBinancePrivateKey()); tradeLayout = view.findViewById(R.id.listTrades); transactionLayout = view.findViewById(R.id.listTransactions); @@ -63,8 +63,8 @@ public class Transactions extends Fragment { TransactionUpdater transactionUpdater = new TransactionUpdater(); transactionUpdater.execute(); - TradeUpdater updater = new TradeUpdater(); - updater.execute(); + /*TradeUpdater updater = new TradeUpdater(); + updater.execute();*/ return view; } diff --git a/app/src/main/java/com/herbron/moodl/Activities/ExchangeListActivity.java b/app/src/main/java/com/herbron/moodl/Activities/ExchangeListActivity.java index 053a6f6..df06da0 100644 --- a/app/src/main/java/com/herbron/moodl/Activities/ExchangeListActivity.java +++ b/app/src/main/java/com/herbron/moodl/Activities/ExchangeListActivity.java @@ -1,5 +1,6 @@ package com.herbron.moodl.Activities; +import android.content.Intent; import android.os.Bundle; import android.support.design.widget.FloatingActionButton; import android.support.design.widget.Snackbar; @@ -24,6 +25,7 @@ public class ExchangeListActivity extends AppCompatActivity { private DatabaseManager databaseManager; private ListView exchangeListView; + private ExchangeListAdapter exchangeListAdapter; @Override protected void onCreate(Bundle savedInstanceState) { @@ -37,11 +39,7 @@ public class ExchangeListActivity extends AppCompatActivity { databaseManager = new DatabaseManager(this); - ArrayList exchangeList = new ArrayList<>(); - exchangeList.add(new Exchange(0, "Main account", BINANCE_TYPE, "Account with main balance & trading bot", "0000", "0000")); - exchangeList.add(new Exchange(1, "Hit account", HITBTC_TYPE, "BCN account and HIT", "0001", "0001")); - - ExchangeListAdapter exchangeListAdapter = new ExchangeListAdapter(getApplicationContext(), exchangeList); + exchangeListAdapter = new ExchangeListAdapter(getApplicationContext(), databaseManager.getExchanges()); exchangeListView = findViewById(R.id.exchange_listView); exchangeListView.setAdapter(exchangeListAdapter); @@ -50,12 +48,21 @@ public class ExchangeListActivity extends AppCompatActivity { fab.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(); + Intent intent = new Intent(ExchangeListActivity.this, AddExchangeActivity.class); + startActivity(intent); } }); } + @Override + protected void onResume() { + super.onResume(); + + exchangeListAdapter.clear(); + exchangeListAdapter.addAll(databaseManager.getExchanges()); + exchangeListAdapter.notifyDataSetChanged(); + } + @Override public boolean onOptionsItemSelected(MenuItem item) { int id = item.getItemId(); diff --git a/app/src/main/java/com/herbron/moodl/Activities/HomeActivityFragments/Summary.java b/app/src/main/java/com/herbron/moodl/Activities/HomeActivityFragments/Summary.java index 29ec6be..98b08f9 100644 --- a/app/src/main/java/com/herbron/moodl/Activities/HomeActivityFragments/Summary.java +++ b/app/src/main/java/com/herbron/moodl/Activities/HomeActivityFragments/Summary.java @@ -585,7 +585,12 @@ public class Summary extends Fragment implements BalanceSwitchManagerInterface, @Override public void onBalanceError(String error) { - generateSnackBarError(error); + getActivity().runOnUiThread(new Runnable() { + @Override + public void run() { + generateSnackBarError(error); + } + }); } private void generateSnackBarError(String error) diff --git a/app/src/main/java/com/herbron/moodl/Activities/SettingsActivity.java b/app/src/main/java/com/herbron/moodl/Activities/SettingsActivity.java index da88323..84c2a64 100644 --- a/app/src/main/java/com/herbron/moodl/Activities/SettingsActivity.java +++ b/app/src/main/java/com/herbron/moodl/Activities/SettingsActivity.java @@ -10,6 +10,8 @@ import android.content.Intent; import android.content.SharedPreferences; import android.content.pm.PackageManager; import android.content.res.Configuration; +import android.content.res.Resources; +import android.graphics.drawable.Drawable; import android.hardware.fingerprint.FingerprintManager; import android.os.Build; import android.os.Bundle; @@ -179,6 +181,10 @@ public class SettingsActivity extends AppCompatPreferenceActivity { // Show the Up button in the action bar. actionBar.setDisplayHomeAsUpEnabled(true); } + + Drawable gradientDrawable = getResources().getDrawable(R.drawable.gradient_background); + + actionBar.setBackgroundDrawable(gradientDrawable); } /** diff --git a/app/src/main/java/com/herbron/moodl/DataManagers/BalanceManager.java b/app/src/main/java/com/herbron/moodl/DataManagers/BalanceManager.java index 2d5018d..7e1cf05 100644 --- a/app/src/main/java/com/herbron/moodl/DataManagers/BalanceManager.java +++ b/app/src/main/java/com/herbron/moodl/DataManagers/BalanceManager.java @@ -26,14 +26,6 @@ import java.util.List; public class BalanceManager { - private String publicHitKey; - private String publicBinanceKey; - private String publicPoloniex; - private String privateHitKey; - private String privateBinanceKey; - private String privatePoloniex; - final private String hitBalanceUrl = "https://api.hitbtc.com/api/2/trading/balance"; - final private String detailUrl = "https://www.cryptocompare.com/api/data/coinlist/"; private RequestQueue requestQueue; private List binanceBalance; private List hitBalance; @@ -103,6 +95,8 @@ public class BalanceManager { binanceManagers.clear(); binanceManagers = databaseManager.getBinanceAccounts(); + + Log.d("moodl", "Number of binance accounts " + binanceManagers.size()); } public List getTotalBalance() @@ -113,6 +107,8 @@ public class BalanceManager { public void updateTotalBalance() { boolean isUpdated = false; + + updateExchangeKeys(); balanceCounter = 0; @@ -124,6 +120,7 @@ public class BalanceManager { for(int i = 0; i < binanceManagers.size(); i++) { + final int index = i; binanceManagers.get(i).updateBalance(new BinanceManager.BinanceCallBack() { @Override public void onSuccess() { @@ -132,6 +129,7 @@ public class BalanceManager { @Override public void onError(String error) { + databaseManager.disableExchangeAccount(binanceManagers.get(index).getId()); dataNotifierInterface.onBalanceError(error); } }); @@ -298,6 +296,8 @@ public class BalanceManager { currencyName = jsonObject.getString("CoinName"); } catch (JSONException e) { e.printStackTrace(); + } catch (NullPointerException e) { + currencyName = symbol; } return currencyName; @@ -312,6 +312,8 @@ public class BalanceManager { id = jsonObject.getInt("Id"); } catch (JSONException e) { e.printStackTrace(); + } catch (NullPointerException e) { + id = -1; } return id; diff --git a/app/src/main/java/com/herbron/moodl/DataManagers/DatabaseManager.java b/app/src/main/java/com/herbron/moodl/DataManagers/DatabaseManager.java index a66fddc..5fbbf2a 100644 --- a/app/src/main/java/com/herbron/moodl/DataManagers/DatabaseManager.java +++ b/app/src/main/java/com/herbron/moodl/DataManagers/DatabaseManager.java @@ -10,6 +10,7 @@ import android.util.Log; import com.herbron.moodl.DataManagers.CurrencyData.Currency; import com.herbron.moodl.DataManagers.CurrencyData.Transaction; import com.herbron.moodl.DataManagers.ExchangeManager.BinanceManager; +import com.herbron.moodl.DataManagers.ExchangeManager.Exchange; import com.herbron.moodl.DataManagers.ExchangeManager.HitBtcManager; import org.json.JSONArray; @@ -28,7 +29,7 @@ import java.util.List; public class DatabaseManager extends SQLiteOpenHelper{ - private static final int DATABASE_VERSION = 8; + private static final int DATABASE_VERSION = 10; private static final String DATABASE_NAME = "Currencies.db"; @@ -51,14 +52,15 @@ public class DatabaseManager extends SQLiteOpenHelper{ private static final String KEY_EXCHANGE_DESCRIPTION = "description"; private static final String KEY_EXCHANGE_PUBLIC_KEY = "publicKey"; private static final String KEY_EXCHANGE_SECRET_KEY = "secretKey"; + private static final String KEY_EXCHANGE_IS_ENABLED = "enabled"; private static final String KEY_WATCHLIST_ID = "idWatchlist"; private static final String KEY_WATCHLIST_SYMBOL = "symbol"; private static final String KEY_WATCHLIST_NAME = "name"; private static final String KEY_WATCHLIST_POSITION = "position"; - private static final int BINANCE_TYPE = 0; - private static final int HITBTC_TYPE = 1; + public static final int BINANCE_TYPE = 0; + public static final int HITBTC_TYPE = 1; public DatabaseManager(Context context) { @@ -81,11 +83,12 @@ public class DatabaseManager extends SQLiteOpenHelper{ db.execSQL("CREATE TABLE IF NOT EXISTS " + TABLE_EXCHANGE_KEYS + "(" + KEY_EXCHANGE_ID + " INTEGER PRIMARY KEY," - + KEY_EXCHANGE_TYPE + " INTEGER," + KEY_EXCHANGE_NAME + " TEXT," + + KEY_EXCHANGE_TYPE + " INTEGER," + KEY_EXCHANGE_DESCRIPTION + " TEXT," + KEY_EXCHANGE_PUBLIC_KEY + " TEXT," - + KEY_EXCHANGE_SECRET_KEY + " TEXT" + + KEY_EXCHANGE_SECRET_KEY + " TEXT," + + KEY_EXCHANGE_IS_ENABLED + " INTEGER" + ");"); db.execSQL("CREATE TABLE IF NOT EXISTS " + TABLE_WATCHLIST + "(" @@ -109,6 +112,12 @@ public class DatabaseManager extends SQLiteOpenHelper{ case 7: db.execSQL("ALTER TABLE " + TABLE_EXCHANGE_KEYS + " ADD " + KEY_EXCHANGE_TYPE + " INTEGER"); + case 8: + db.execSQL("DROP TABLE " + TABLE_EXCHANGE_KEYS); + onCreate(db); + case 9: + db.execSQL("ALTER TABLE " + TABLE_EXCHANGE_KEYS + + " ADD " + KEY_EXCHANGE_IS_ENABLED + " INTEGER"); } } @@ -151,7 +160,6 @@ public class DatabaseManager extends SQLiteOpenHelper{ cv.put(KEY_WATCHLIST_POSITION, position); db.update(TABLE_WATCHLIST, cv, KEY_WATCHLIST_SYMBOL + "='" + symbol + "'", null); - } private int getWatchlistRowCount(SQLiteDatabase db) @@ -164,6 +172,14 @@ public class DatabaseManager extends SQLiteOpenHelper{ return result.getInt(0); } + public void deleteExchangeAccountFromId(int id) + { + SQLiteDatabase db = this.getWritableDatabase(); + + db.delete(TABLE_EXCHANGE_KEYS, KEY_EXCHANGE_ID + " = " + id, null); + db.close(); + } + public void deleteCurrencyFromWatchlist(String symbol) { SQLiteDatabase db = this.getWritableDatabase(); @@ -172,6 +188,70 @@ public class DatabaseManager extends SQLiteOpenHelper{ db.close(); } + public void disableExchangeAccount(int id) + { + SQLiteDatabase db = this.getWritableDatabase(); + ContentValues cv = new ContentValues(); + + cv.put(KEY_EXCHANGE_IS_ENABLED, 0); + + db.update(TABLE_EXCHANGE_KEYS, cv, KEY_EXCHANGE_ID + "='" + id + "'", null); + } + + public Exchange getExchangeFromId(int exchangeId) + { + String selectQuerry = "SELECT * FROM " + TABLE_EXCHANGE_KEYS + " WHERE " + KEY_EXCHANGE_ID + " = " + exchangeId; + SQLiteDatabase db = this.getWritableDatabase(); + Cursor result = db.rawQuery(selectQuerry, null); + + Exchange selectedExchange = null; + + if(result.moveToFirst()) + { + selectedExchange = new Exchange(result.getInt(0), result.getString(1) + , result.getInt(2), result.getString(3) + , result.getString(4), result.getString(5) + , (result.getInt(6) == 1)); + } + + return selectedExchange; + } + + public ArrayList getExchanges() + { + String selectQuerry = "SELECT * FROM " + TABLE_EXCHANGE_KEYS; + SQLiteDatabase db = this.getWritableDatabase(); + Cursor result = db.rawQuery(selectQuerry, null); + + ArrayList exchanges = new ArrayList<>(); + + while(result.moveToNext()) + { + exchanges.add(new Exchange(result.getInt(0), result.getString(1) + , result.getInt(2), result.getString(3) + , result.getString(4), result.getString(5) + , (result.getInt(6) == 1))); + } + + return exchanges; + } + + public void addExchange(String name, int type, String description, String publicKey, String privateKey) + { + SQLiteDatabase db = this.getWritableDatabase(); + ContentValues values = new ContentValues(); + + values.put(KEY_EXCHANGE_NAME, name); + values.put(KEY_EXCHANGE_TYPE, type); + values.put(KEY_EXCHANGE_DESCRIPTION, description); + values.put(KEY_EXCHANGE_PUBLIC_KEY, publicKey); + values.put(KEY_EXCHANGE_SECRET_KEY, privateKey); + values.put(KEY_EXCHANGE_IS_ENABLED, 1); + + db.insert(TABLE_EXCHANGE_KEYS, null, values); + db.close(); + } + public JSONArray getDatabaseBackup(Context context, String table, boolean encryptData) { String selectQuerry = "SELECT * FROM " + table; @@ -346,7 +426,7 @@ public class DatabaseManager extends SQLiteOpenHelper{ public List getHitBtcAccounts(Context context) { - String searchQuerry = "SELECT * FROM " + TABLE_EXCHANGE_KEYS + " WHERE " + KEY_EXCHANGE_TYPE + "='" + HITBTC_TYPE + "'"; + String searchQuerry = "SELECT * FROM " + TABLE_EXCHANGE_KEYS + " WHERE " + KEY_EXCHANGE_TYPE + "='" + HITBTC_TYPE + "' AND " + KEY_EXCHANGE_IS_ENABLED + " = '1'"; SQLiteDatabase db = this.getWritableDatabase(); Cursor resultList = db.rawQuery(searchQuerry, null); @@ -354,7 +434,11 @@ public class DatabaseManager extends SQLiteOpenHelper{ while(resultList.moveToNext()) { - accountList.add(new HitBtcManager(context, resultList.getString(4), resultList.getString(5))); + Exchange exchange = new Exchange(resultList.getInt(0), resultList.getString(1) + , resultList.getInt(2), resultList.getString(3) + , resultList.getString(4), resultList.getString(5) + , (resultList.getInt(6) == 1)); + accountList.add(new HitBtcManager(context, exchange)); } resultList.close(); @@ -365,7 +449,7 @@ public class DatabaseManager extends SQLiteOpenHelper{ public List getBinanceAccounts() { - String searchQuerry = "SELECT * FROM " + TABLE_EXCHANGE_KEYS + " WHERE " + KEY_EXCHANGE_TYPE + "='" + BINANCE_TYPE + "'"; + String searchQuerry = "SELECT * FROM " + TABLE_EXCHANGE_KEYS + " WHERE " + KEY_EXCHANGE_TYPE + "='" + BINANCE_TYPE + "' AND " + KEY_EXCHANGE_IS_ENABLED + " = '1'"; SQLiteDatabase db = this.getWritableDatabase(); Cursor resultList = db.rawQuery(searchQuerry, null); @@ -373,7 +457,11 @@ public class DatabaseManager extends SQLiteOpenHelper{ while(resultList.moveToNext()) { - accountList.add(new BinanceManager(resultList.getString(4), resultList.getString(5))); + Exchange exchange = new Exchange(resultList.getInt(0), resultList.getString(1) + , resultList.getInt(2), resultList.getString(3) + , resultList.getString(4), resultList.getString(5) + , (resultList.getInt(6) == 1)); + accountList.add(new BinanceManager(exchange)); } resultList.close(); diff --git a/app/src/main/java/com/herbron/moodl/DataManagers/ExchangeManager/BinanceManager.java b/app/src/main/java/com/herbron/moodl/DataManagers/ExchangeManager/BinanceManager.java index 3007b2d..3b9a747 100644 --- a/app/src/main/java/com/herbron/moodl/DataManagers/ExchangeManager/BinanceManager.java +++ b/app/src/main/java/com/herbron/moodl/DataManagers/ExchangeManager/BinanceManager.java @@ -17,19 +17,15 @@ import java.util.List; * Created by Guitoune on 26/02/2018. */ -public class BinanceManager { - - private String publicKey; - private String privateKey; +public class BinanceManager extends Exchange { private List balance; private ArrayList trades; - private List pairSymbolList; + private static List pairSymbolList; - public BinanceManager(String publicKey, String privateKey) + public BinanceManager(Exchange exchange) { - this.publicKey = publicKey; - this.privateKey = privateKey; + super(exchange.id, exchange.name, exchange.type, exchange.description, exchange.publicKey, exchange.privateKey, exchange.isEnabled); createPairSymbolList(); } diff --git a/app/src/main/java/com/herbron/moodl/DataManagers/ExchangeManager/Exchange.java b/app/src/main/java/com/herbron/moodl/DataManagers/ExchangeManager/Exchange.java index 173a316..338c244 100644 --- a/app/src/main/java/com/herbron/moodl/DataManagers/ExchangeManager/Exchange.java +++ b/app/src/main/java/com/herbron/moodl/DataManagers/ExchangeManager/Exchange.java @@ -8,8 +8,9 @@ public class Exchange { protected String description; protected String publicKey; protected String privateKey; + protected boolean isEnabled; - public Exchange(int id, String name, int type, String description, String publicKey, String privateKey) + public Exchange(int id, String name, int type, String description, String publicKey, String privateKey, boolean isEnabled) { this.id = id; this.name = name; @@ -17,6 +18,27 @@ public class Exchange { this.description = description; this.publicKey = publicKey; this.privateKey = privateKey; + this.isEnabled = isEnabled; + } + + public boolean isEnabled() + { + return isEnabled; + } + + public String getPublicKey() + { + return publicKey; + } + + public String getPrivateKey() + { + return privateKey; + } + + public int getType() + { + return type; } public String getName() @@ -28,4 +50,9 @@ public class Exchange { { return description; } + + public int getId() + { + return id; + } } diff --git a/app/src/main/java/com/herbron/moodl/DataManagers/ExchangeManager/HitBtcManager.java b/app/src/main/java/com/herbron/moodl/DataManagers/ExchangeManager/HitBtcManager.java index b096c7e..9f89cd1 100644 --- a/app/src/main/java/com/herbron/moodl/DataManagers/ExchangeManager/HitBtcManager.java +++ b/app/src/main/java/com/herbron/moodl/DataManagers/ExchangeManager/HitBtcManager.java @@ -26,10 +26,8 @@ import java.util.Map; * Created by Guitoune on 26/02/2018. */ -public class HitBtcManager { +public class HitBtcManager extends Exchange { - private String publicKey; - private String privateKey; final private String hitBalanceUrl = "https://api.hitbtc.com/api/2/account/balance"; final private String hitTradingBalanceUrl = "https://api.hitbtc.com/api/2/trading/balance"; final private String tradeHistoryUrl = "https://api.hitbtc.com/api/2/history/trades?"; @@ -41,13 +39,12 @@ public class HitBtcManager { private List balance; private android.content.Context context; - public HitBtcManager(android.content.Context context, String publicKey, String privateKey) + public HitBtcManager(android.content.Context context, Exchange exchange) { + super(exchange.id, exchange.name, exchange.type, exchange.description, exchange.publicKey, exchange.privateKey, exchange.isEnabled); + this.context = context; requestQueue = Volley.newRequestQueue(context); - - this.publicKey = publicKey; - this.privateKey = privateKey; } private void createPairSymbolList() diff --git a/app/src/main/java/com/herbron/moodl/LayoutManagers/CurrencyListAdapter.java b/app/src/main/java/com/herbron/moodl/LayoutManagers/CurrencyListAdapter.java index 8c2a134..cf18847 100644 --- a/app/src/main/java/com/herbron/moodl/LayoutManagers/CurrencyListAdapter.java +++ b/app/src/main/java/com/herbron/moodl/LayoutManagers/CurrencyListAdapter.java @@ -68,7 +68,7 @@ public class CurrencyListAdapter extends BaseAdapter implements Filterable { } if (position % 2 == 0) - convertView.setBackgroundColor(context.getResources().getColor(R.color.listBackground2)); + convertView.setBackgroundColor(context.getResources().getColor(R.color.white)); else convertView.setBackgroundColor(context.getResources().getColor(R.color.listBackground)); diff --git a/app/src/main/java/com/herbron/moodl/LayoutManagers/ExchangeListAdapter.java b/app/src/main/java/com/herbron/moodl/LayoutManagers/ExchangeListAdapter.java index 5c7bfe3..75759c5 100644 --- a/app/src/main/java/com/herbron/moodl/LayoutManagers/ExchangeListAdapter.java +++ b/app/src/main/java/com/herbron/moodl/LayoutManagers/ExchangeListAdapter.java @@ -1,6 +1,7 @@ package com.herbron.moodl.LayoutManagers; import android.content.Context; +import android.content.Intent; import android.support.annotation.NonNull; import android.support.annotation.Nullable; import android.view.LayoutInflater; @@ -12,9 +13,13 @@ import android.widget.Filter; import android.widget.Filterable; import android.widget.TextView; +import com.herbron.moodl.Activities.AddExchangeActivity; +import com.herbron.moodl.Activities.ExchangeListActivity; import com.herbron.moodl.DataManagers.CurrencyData.Currency; import com.herbron.moodl.DataManagers.CurrencyData.Trade; +import com.herbron.moodl.DataManagers.DatabaseManager; import com.herbron.moodl.DataManagers.ExchangeManager.Exchange; +import com.herbron.moodl.MoodlBox; import com.herbron.moodl.R; import java.util.ArrayList; @@ -28,6 +33,7 @@ public class ExchangeListAdapter extends ArrayAdapter { public ExchangeListAdapter(Context context, ArrayList exchanges) { super(context, android.R.layout.simple_list_item_1, exchanges); + this.context = context; } @@ -41,12 +47,38 @@ public class ExchangeListAdapter extends ArrayAdapter { convertView = LayoutInflater.from(getContext()).inflate(R.layout.exchange_cell, parent, false); } + final View finalConvertView = convertView; + TextView exchangeNameTextView = convertView.findViewById(R.id.exchange_name); TextView exchangeDescriptionTextView = convertView.findViewById(R.id.exchange_description); exchangeNameTextView.setText(exchange.getName()); exchangeDescriptionTextView.setText(exchange.getDescription()); + if(!exchange.isEnabled()) + { + convertView.findViewById(R.id.exchange_account_off_imageView).setVisibility(View.VISIBLE); + } + + convertView.findViewById(R.id.editExchangeInfosLayout).setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + Intent editExchangeAccountIntent = new Intent(context, AddExchangeActivity.class); + editExchangeAccountIntent.putExtra("isEdit", true); + editExchangeAccountIntent.putExtra("exchangeId", exchange.getId()); + context.startActivity(editExchangeAccountIntent); + } + }); + + convertView.findViewById(R.id.deleteExchangeInfosLayout).setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + DatabaseManager databaseManager = new DatabaseManager(getContext()); + databaseManager.deleteExchangeAccountFromId(exchange.getId()); + MoodlBox.collapseH(finalConvertView); + } + }); + return convertView; } diff --git a/app/src/main/res/drawable/ic_add_white_24dp.xml b/app/src/main/res/drawable/ic_add_white_24dp.xml new file mode 100644 index 0000000..e3979cd --- /dev/null +++ b/app/src/main/res/drawable/ic_add_white_24dp.xml @@ -0,0 +1,5 @@ + + + diff --git a/app/src/main/res/drawable/ic_arrow_drop_down_white_24dp.xml b/app/src/main/res/drawable/ic_arrow_drop_down_white_24dp.xml new file mode 100644 index 0000000..65e1e42 --- /dev/null +++ b/app/src/main/res/drawable/ic_arrow_drop_down_white_24dp.xml @@ -0,0 +1,5 @@ + + + diff --git a/app/src/main/res/drawable/ic_money_off_24dp.xml b/app/src/main/res/drawable/ic_money_off_24dp.xml new file mode 100644 index 0000000..ebcd2f4 --- /dev/null +++ b/app/src/main/res/drawable/ic_money_off_24dp.xml @@ -0,0 +1,5 @@ + + + diff --git a/app/src/main/res/drawable/spinner_background.xml b/app/src/main/res/drawable/spinner_background.xml new file mode 100644 index 0000000..66a69c8 --- /dev/null +++ b/app/src/main/res/drawable/spinner_background.xml @@ -0,0 +1,21 @@ + + + + + + + + + + + + diff --git a/app/src/main/res/layout/activity_add_exchange.xml b/app/src/main/res/layout/activity_add_exchange.xml new file mode 100644 index 0000000..b0e956c --- /dev/null +++ b/app/src/main/res/layout/activity_add_exchange.xml @@ -0,0 +1,74 @@ + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/binance_exchange_setup_layout.xml b/app/src/main/res/layout/binance_exchange_setup_layout.xml new file mode 100644 index 0000000..262b89d --- /dev/null +++ b/app/src/main/res/layout/binance_exchange_setup_layout.xml @@ -0,0 +1,93 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/cardview_currency.xml b/app/src/main/res/layout/cardview_currency.xml index 6ff7032..0990113 100644 --- a/app/src/main/res/layout/cardview_currency.xml +++ b/app/src/main/res/layout/cardview_currency.xml @@ -40,7 +40,7 @@ android:layout_gravity="center_vertical" android:gravity="start" android:textColor="@color/mainTextViewColor" - android:textSize="@dimen/cardViewMainText" /> + android:textSize="@dimen/cardViewTitle" /> + android:textSize="@dimen/cardViewCaption" /> + android:textSize="@dimen/cardViewTitle" /> @@ -73,7 +73,7 @@ android:layout_height="wrap_content" android:gravity="start" android:textColor="@color/secondaryTextViewColor" - android:textSize="@dimen/cardViewMainText" + android:textSize="@dimen/cardViewTitle" android:visibility="gone"/> + android:textSize="@dimen/cardViewTitle" /> + android:textSize="@dimen/cardViewCaption" /> @@ -112,13 +112,13 @@ android:id="@+id/currencyFluctuationPercentageTextView" android:layout_width="wrap_content" android:layout_height="wrap_content" - android:textSize="@dimen/cardViewMainText" /> + android:textSize="@dimen/cardViewTitle" /> + android:textSize="@dimen/cardViewCaption" /> @@ -143,7 +143,7 @@ android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/day_history" - android:textSize="@dimen/cardViewSecondaryText" /> + android:textSize="@dimen/cardViewCaption" /> + android:textSize="@dimen/cardViewTitle" /> + android:textSize="@dimen/cardViewCaption" /> @@ -86,7 +86,7 @@ android:layout_height="wrap_content" android:gravity="start" android:textColor="@color/secondaryTextViewColor" - android:textSize="@dimen/cardViewMainText" + android:textSize="@dimen/cardViewTitle" android:layout_weight="0.5"/> + android:textSize="@dimen/cardViewTitle" /> + android:textSize="@dimen/cardViewCaption" /> @@ -154,7 +154,7 @@ android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/day_history" - android:textSize="@dimen/cardViewSecondaryText" /> + android:textSize="@dimen/cardViewCaption" /> - - - - - - + android:layout_height="50dp" + android:id="@+id/swipeLayout"> + + + - + + + + + + + + + + + + + + + android:orientation="horizontal"> - + - + - + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/exchange_spinner_item.xml b/app/src/main/res/layout/exchange_spinner_item.xml new file mode 100644 index 0000000..fe90b78 --- /dev/null +++ b/app/src/main/res/layout/exchange_spinner_item.xml @@ -0,0 +1,9 @@ + + \ No newline at end of file diff --git a/app/src/main/res/layout/hitbtc_exchange_setup_layout.xml b/app/src/main/res/layout/hitbtc_exchange_setup_layout.xml new file mode 100644 index 0000000..262b89d --- /dev/null +++ b/app/src/main/res/layout/hitbtc_exchange_setup_layout.xml @@ -0,0 +1,93 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/values-fr/strings.xml b/app/src/main/res/values-fr/strings.xml index 38951af..51f5703 100644 --- a/app/src/main/res/values-fr/strings.xml +++ b/app/src/main/res/values-fr/strings.xml @@ -139,4 +139,5 @@ Supprimer les entrées manuelles actuelles Supprimer la liste suivie actuelle Supprimer les clefs API actuelles + Choose an exchange \ No newline at end of file diff --git a/app/src/main/res/values/arrays.xml b/app/src/main/res/values/arrays.xml new file mode 100644 index 0000000..c37eb98 --- /dev/null +++ b/app/src/main/res/values/arrays.xml @@ -0,0 +1,7 @@ + + + + Binance + HitBTC + + \ No newline at end of file diff --git a/app/src/main/res/values/colors.xml b/app/src/main/res/values/colors.xml index 3012892..0454a96 100644 --- a/app/src/main/res/values/colors.xml +++ b/app/src/main/res/values/colors.xml @@ -28,7 +28,6 @@ #FFED143D #FF00E000 #FFEEEEEE - #FFFFFFFF #66999999 #FFF44336 #FF4CAF50 @@ -41,4 +40,8 @@ #FF689afe #22689afe #FFAAAAAA + #FF898989 + #66FFFFFF + + #FFF5BC00 \ 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 61b39ec..9144acb 100644 --- a/app/src/main/res/values/dimens.xml +++ b/app/src/main/res/values/dimens.xml @@ -1,6 +1,6 @@ - 15sp - 12sp + 16sp + 12sp 150dp 172dp @@ -15,4 +15,5 @@ 8dp 15dp + 16dp diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index c479a64..2f96301 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -249,5 +249,12 @@ Wipe current entries Wipe current watchlist Wipe current API keys + ExchangeList + Choose an exchange + Account label + Public key + API Key + Secret Key + Informations diff --git a/app/src/main/res/values/styles.xml b/app/src/main/res/values/styles.xml index 592b287..12c6d3a 100644 --- a/app/src/main/res/values/styles.xml +++ b/app/src/main/res/values/styles.xml @@ -10,7 +10,7 @@ @color/decrease -