Add main application class to be refactored
This commit is contained in:
parent
156f0c6060
commit
bd5bbc9347
1 changed files with 689 additions and 0 deletions
689
app/src/main/java/carbon/crypto/com/carbon/Application.java
Normal file
689
app/src/main/java/carbon/crypto/com/carbon/Application.java
Normal file
|
@ -0,0 +1,689 @@
|
||||||
|
package carbon.crypto.com.carbon;
|
||||||
|
|
||||||
|
import android.app.Activity;
|
||||||
|
import android.content.Context;
|
||||||
|
import android.net.ConnectivityManager;
|
||||||
|
import android.net.NetworkInfo;
|
||||||
|
import android.os.Bundle;
|
||||||
|
import android.os.Handler;
|
||||||
|
import android.os.Looper;
|
||||||
|
import android.support.annotation.NonNull;
|
||||||
|
import android.support.multidex.MultiDex;
|
||||||
|
import android.util.Log;
|
||||||
|
import android.widget.Toast;
|
||||||
|
|
||||||
|
import org.json.JSONArray;
|
||||||
|
import org.json.JSONException;
|
||||||
|
import org.json.JSONObject;
|
||||||
|
|
||||||
|
import java.net.URI;
|
||||||
|
import java.net.URISyntaxException;
|
||||||
|
import java.text.ParseException;
|
||||||
|
import java.text.SimpleDateFormat;
|
||||||
|
import java.util.Calendar;
|
||||||
|
import java.util.Date;
|
||||||
|
import java.util.Locale;
|
||||||
|
import java.util.concurrent.TimeUnit;
|
||||||
|
|
||||||
|
import butterknife.ButterKnife;
|
||||||
|
import de.bitshares_munich.autobahn.WebSocketConnection;
|
||||||
|
import de.bitshares_munich.autobahn.WebSocketException;
|
||||||
|
import de.bitshares_munich.interfaces.AssetDelegate;
|
||||||
|
import de.bitshares_munich.interfaces.IAccount;
|
||||||
|
import de.bitshares_munich.interfaces.IAccountID;
|
||||||
|
import de.bitshares_munich.interfaces.IAccountObject;
|
||||||
|
import de.bitshares_munich.interfaces.IAssetObject;
|
||||||
|
import de.bitshares_munich.interfaces.IBalancesDelegate;
|
||||||
|
import de.bitshares_munich.interfaces.IExchangeRate;
|
||||||
|
import de.bitshares_munich.interfaces.IRelativeHistory;
|
||||||
|
import de.bitshares_munich.interfaces.ITransactionObject;
|
||||||
|
import de.bitshares_munich.smartcoinswallet.Constants;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Created by qasim on 5/9/16.
|
||||||
|
*/
|
||||||
|
public class Application extends android.app.Application implements de.bitshares_munich.autobahn.WebSocket.WebSocketConnectionObserver,
|
||||||
|
android.app.Application.ActivityLifecycleCallbacks {
|
||||||
|
public static Context context;
|
||||||
|
public static String blockHead = "";
|
||||||
|
public static int refBlockNum;
|
||||||
|
public static long refBlockPrefix;
|
||||||
|
public static long blockTime;
|
||||||
|
public static String urlsSocketConnection[] =
|
||||||
|
{
|
||||||
|
"wss://bitshares.openledger.info/ws", // Openledger node
|
||||||
|
"wss://eu.openledger.info/ws", // Openledger EU node
|
||||||
|
"ws://128.0.69.157:8090", // Henry node
|
||||||
|
"ws://128.0.69.157:8091", // Henry node
|
||||||
|
"wss://de.blockpay.ch/node" // German node
|
||||||
|
};
|
||||||
|
public static String faucetUrl = "http://128.0.69.157:5000";
|
||||||
|
public static String monitorAccountId;
|
||||||
|
public static int nodeIndex = 0;
|
||||||
|
public static Boolean isReady = false;
|
||||||
|
static IAccount iAccount;
|
||||||
|
static IExchangeRate iExchangeRate;
|
||||||
|
static IBalancesDelegate iBalancesDelegate_transactionActivity;
|
||||||
|
static IBalancesDelegate iBalancesDelegate_ereceiptActivity;
|
||||||
|
static IBalancesDelegate iBalancesDelegate_assetsActivity;
|
||||||
|
static AssetDelegate iAssetDelegate;
|
||||||
|
static IAccountID iAccountID;
|
||||||
|
static ITransactionObject iTransactionObject;
|
||||||
|
static IAccountObject iAccountObject;
|
||||||
|
static IAssetObject iAssetObject;
|
||||||
|
static IRelativeHistory iRelativeHistory;
|
||||||
|
static String connectedSocket;
|
||||||
|
private static String TAG = "Application";
|
||||||
|
private static Activity currentActivity;
|
||||||
|
private static Handler warningHandler = new Handler();
|
||||||
|
private static boolean mIsConnected = false;
|
||||||
|
private static WebSocketConnection mConnection;
|
||||||
|
private static URI mServerURI;
|
||||||
|
/**
|
||||||
|
* Constant used to specify how long will the app wait for another activity to go through its starting life
|
||||||
|
* cycle events before create the lock pin screen.
|
||||||
|
* <p>
|
||||||
|
* This is used as a means to detect whether or not the user has left the app.
|
||||||
|
*/
|
||||||
|
private final int LOCK_DELAY = 10000;
|
||||||
|
Handler connectionHandler = new Handler();
|
||||||
|
/* Attribute used to indicate that funds must be updated (primarilly used at SendScreen and BalanceFragments */
|
||||||
|
private boolean mUpdateFunds = false;
|
||||||
|
/* Internal attribute used to keep track of the application state */
|
||||||
|
private boolean mAppLock = true;
|
||||||
|
/**
|
||||||
|
* Handler instance used to schedule tasks back to the main thread
|
||||||
|
*/
|
||||||
|
private Handler mHandler;
|
||||||
|
/**
|
||||||
|
* Runnable that will set to lock the app with the PIN.
|
||||||
|
*/
|
||||||
|
private Runnable lockApp = new Runnable() {
|
||||||
|
@Override
|
||||||
|
public void run() {
|
||||||
|
mAppLock = true;
|
||||||
|
Log.i(TAG, "App Locked");
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
public static Activity getCurrentActivity() {
|
||||||
|
return Application.currentActivity;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void setCurrentActivity(Activity _activity) {
|
||||||
|
Application.currentActivity = _activity;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void registerCallback(IAccount callbackClass) {
|
||||||
|
iAccount = callbackClass;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void registerCallbackIAccountID(IAccountID callbackClass) {
|
||||||
|
iAccountID = callbackClass;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void registerExchangeRateCallback(IExchangeRate callbackClass) {
|
||||||
|
iExchangeRate = callbackClass;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void registerBalancesDelegateTransaction(IBalancesDelegate callbackClass) {
|
||||||
|
iBalancesDelegate_transactionActivity = callbackClass;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void registerBalancesDelegateEReceipt(IBalancesDelegate callbackClass) {
|
||||||
|
iBalancesDelegate_ereceiptActivity = callbackClass;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void registerBalancesDelegateAssets(IBalancesDelegate callbackClass) {
|
||||||
|
iBalancesDelegate_assetsActivity = callbackClass;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void registerAssetDelegate(AssetDelegate callbackClass) {
|
||||||
|
iAssetDelegate = callbackClass;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void registerTransactionObject(ITransactionObject callbackClass) {
|
||||||
|
iTransactionObject = callbackClass;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void registerAccountObjectCallback(IAccountObject callbackClass) {
|
||||||
|
iAccountObject = callbackClass;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void registerAssetObjectCallback(IAssetObject callbackClass) {
|
||||||
|
iAssetObject = callbackClass;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void registerRelativeHistoryCallback(IRelativeHistory callbackClass) {
|
||||||
|
iRelativeHistory = callbackClass;
|
||||||
|
}
|
||||||
|
|
||||||
|
private static void showWarningMessage(final String myEx) {
|
||||||
|
if (getCurrentActivity() != null) {
|
||||||
|
Log.d("exception websocket", "inside again");
|
||||||
|
getCurrentActivity().runOnUiThread(new Runnable() {
|
||||||
|
public void run() {
|
||||||
|
Toast.makeText(context, "Your system does not supports new SSL ciphering. Error : " + myEx, Toast.LENGTH_LONG).show();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void stringTextRecievedWs(String s) {
|
||||||
|
try {
|
||||||
|
JSONObject jsonObject = new JSONObject(s);
|
||||||
|
|
||||||
|
if (jsonObject.has("id")) {
|
||||||
|
int id = jsonObject.getInt("id");
|
||||||
|
Log.d(TAG, "Got response. id: " + id);
|
||||||
|
if (id == 1) {
|
||||||
|
if (s.contains("true")) {
|
||||||
|
Application.send(context.getString(R.string.database_indentifier));
|
||||||
|
} else {
|
||||||
|
Application.send(context.getString(R.string.login_api));
|
||||||
|
}
|
||||||
|
} else if (id == 2) {
|
||||||
|
Helper.storeIntSharePref(context, context.getString(R.string.sharePref_database), jsonObject.getInt("result"));
|
||||||
|
Application.send(context.getString(R.string.network_broadcast_identifier));
|
||||||
|
} else if (id == 3) {
|
||||||
|
Helper.storeIntSharePref(context, context.getString(R.string.sharePref_network_broadcast), jsonObject.getInt("result"));
|
||||||
|
Application.send(context.getString(R.string.history_identifier));
|
||||||
|
} else if (id == 4) {
|
||||||
|
Helper.storeIntSharePref(context, context.getString(R.string.sharePref_history), jsonObject.getInt("result"));
|
||||||
|
Application.send(context.getString(R.string.subscribe_callback));
|
||||||
|
isReady = true;
|
||||||
|
} else if (id == 6) {
|
||||||
|
if (iAccount != null) {
|
||||||
|
iAccount.checkAccount(jsonObject);
|
||||||
|
}
|
||||||
|
} else if (id == 100 || id == 200) {
|
||||||
|
JSONArray jsonArray = (JSONArray) jsonObject.get("result");
|
||||||
|
JSONObject obj = new JSONObject();
|
||||||
|
if (jsonArray.length() != 0) {
|
||||||
|
obj = (JSONObject) jsonArray.get(1);
|
||||||
|
}
|
||||||
|
iExchangeRate.callback_exchange_rate(obj, id);
|
||||||
|
} else if (id == 8) {
|
||||||
|
if (iBalancesDelegate_transactionActivity != null) {
|
||||||
|
iBalancesDelegate_transactionActivity.OnUpdate(s, id);
|
||||||
|
}
|
||||||
|
} else if (id == 20) {
|
||||||
|
if (iBalancesDelegate_transactionActivity != null) {
|
||||||
|
iBalancesDelegate_transactionActivity.OnUpdate(s, id);
|
||||||
|
}
|
||||||
|
} else if (id == 21) {
|
||||||
|
if (iBalancesDelegate_transactionActivity != null) {
|
||||||
|
iBalancesDelegate_transactionActivity.OnUpdate(s, id);
|
||||||
|
}
|
||||||
|
} else if (id == 22) {
|
||||||
|
if (iBalancesDelegate_transactionActivity != null) {
|
||||||
|
iBalancesDelegate_transactionActivity.OnUpdate(s, id);
|
||||||
|
}
|
||||||
|
} else if (id == 23) {
|
||||||
|
if (iBalancesDelegate_transactionActivity != null) {
|
||||||
|
iBalancesDelegate_transactionActivity.OnUpdate(s, id);
|
||||||
|
}
|
||||||
|
} else if (id == 12) {
|
||||||
|
if (iTransactionObject != null) {
|
||||||
|
iTransactionObject.checkTransactionObject(jsonObject);
|
||||||
|
}
|
||||||
|
} else if (id == 13) {
|
||||||
|
if (iAccountObject != null) {
|
||||||
|
iAccountObject.accountObjectCallback(jsonObject);
|
||||||
|
}
|
||||||
|
} else if (id == 14) {
|
||||||
|
if (iAssetObject != null) {
|
||||||
|
iAssetObject.assetObjectCallback(jsonObject);
|
||||||
|
}
|
||||||
|
} else if (id == 9) {
|
||||||
|
if (iBalancesDelegate_transactionActivity != null) {
|
||||||
|
iBalancesDelegate_transactionActivity.OnUpdate(s, id);
|
||||||
|
}
|
||||||
|
} else if (id == 10) {
|
||||||
|
if (iBalancesDelegate_transactionActivity != null) {
|
||||||
|
iBalancesDelegate_transactionActivity.OnUpdate(s, id);
|
||||||
|
}
|
||||||
|
} else if (id == 11) {
|
||||||
|
if (iBalancesDelegate_transactionActivity != null) {
|
||||||
|
iBalancesDelegate_transactionActivity.OnUpdate(s, id);
|
||||||
|
}
|
||||||
|
} else if (id == 99) {
|
||||||
|
if (iBalancesDelegate_assetsActivity != null) {
|
||||||
|
iBalancesDelegate_assetsActivity.OnUpdate(s, id);
|
||||||
|
}
|
||||||
|
} else if (id == 999) {
|
||||||
|
if (iBalancesDelegate_assetsActivity != null) {
|
||||||
|
iBalancesDelegate_assetsActivity.OnUpdate(s, id);
|
||||||
|
}
|
||||||
|
} else if (id == 15) {
|
||||||
|
if (iAssetDelegate != null) {
|
||||||
|
iAssetDelegate.getLifetime(s, id);
|
||||||
|
}
|
||||||
|
} else if (id == 151) {
|
||||||
|
if (iAccountID != null) {
|
||||||
|
iAccountID.accountId(s);
|
||||||
|
}
|
||||||
|
} else if (id == 160 || id == 161) {
|
||||||
|
if (iRelativeHistory != null) {
|
||||||
|
iRelativeHistory.relativeHistoryCallback(jsonObject);
|
||||||
|
}
|
||||||
|
} else if (id == 17) {
|
||||||
|
} else if (id == 18) {
|
||||||
|
if (iBalancesDelegate_ereceiptActivity != null) {
|
||||||
|
iBalancesDelegate_ereceiptActivity.OnUpdate(s, id);
|
||||||
|
}
|
||||||
|
} else if (id == 19) {
|
||||||
|
if (iBalancesDelegate_ereceiptActivity != null) {
|
||||||
|
iBalancesDelegate_ereceiptActivity.OnUpdate(s, id);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else if (jsonObject.has("method")) {
|
||||||
|
if (jsonObject.getString("method").equals("notice")) {
|
||||||
|
if (jsonObject.has("params")) {
|
||||||
|
int id = jsonObject.getJSONArray("params").getInt(0);
|
||||||
|
JSONArray values = jsonObject.getJSONArray("params").getJSONArray(1);
|
||||||
|
|
||||||
|
if (id == 7) {
|
||||||
|
headBlockNumber(values.toString());
|
||||||
|
|
||||||
|
if (monitorAccountId != null && !monitorAccountId.isEmpty() && values.toString().contains(monitorAccountId)) {
|
||||||
|
if (iAssetDelegate != null) {
|
||||||
|
iAssetDelegate.loadAll();
|
||||||
|
}
|
||||||
|
Log.d("Notice Update", values.toString());
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
Log.d("other notice", values.toString());
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
} catch (JSONException e) {
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private static void sendInitialSocket(final Context context) {
|
||||||
|
|
||||||
|
if (Application.mIsConnected) {
|
||||||
|
Application.send(context.getString(R.string.login_api));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private static String headBlockNumber(String json) {
|
||||||
|
final String BLOCK_REFERENCE_ID = "head_block_id";
|
||||||
|
final String HEAD_BLOCK_NUMBER = "head_block_number";
|
||||||
|
final String TIME = "time";
|
||||||
|
try {
|
||||||
|
JSONArray array = new JSONArray(json);
|
||||||
|
String rawBlockId = "";
|
||||||
|
String blockNumber = "";
|
||||||
|
if (array.length() == 1) {
|
||||||
|
JSONArray subArray = array.getJSONArray(0);
|
||||||
|
for (int i = 0; i < subArray.length(); i++) {
|
||||||
|
if (subArray.get(i) instanceof JSONObject) {
|
||||||
|
JSONObject element = (JSONObject) subArray.get(i);
|
||||||
|
if (element.has(BLOCK_REFERENCE_ID)) {
|
||||||
|
rawBlockId = element.getString(BLOCK_REFERENCE_ID);
|
||||||
|
}
|
||||||
|
if (element.has(HEAD_BLOCK_NUMBER)) {
|
||||||
|
blockNumber = element.getString(HEAD_BLOCK_NUMBER);
|
||||||
|
}
|
||||||
|
if (element.has(TIME)) {
|
||||||
|
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss");
|
||||||
|
try {
|
||||||
|
Date date = simpleDateFormat.parse(element.getString(TIME));
|
||||||
|
blockTime = date.getTime() / 1000;
|
||||||
|
} catch (ParseException e) {
|
||||||
|
Log.e(TAG, "ParseException while trying to parse time. time string: " + element.getString(TIME));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
String element = (String) subArray.get(i);
|
||||||
|
Log.d(TAG, "Could not cast string: " + element);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (rawBlockId.equals("")) {
|
||||||
|
return blockHead;
|
||||||
|
}
|
||||||
|
// Setting block number
|
||||||
|
blockHead = "block# " + blockNumber;
|
||||||
|
|
||||||
|
// Setting reference block number (lower 16 bits of block number)
|
||||||
|
refBlockNum = Integer.valueOf(blockNumber) & 0xffff;
|
||||||
|
|
||||||
|
// Setting block prefix
|
||||||
|
String hashData = rawBlockId.substring(8, 16);
|
||||||
|
StringBuilder builder = new StringBuilder();
|
||||||
|
for (int i = 0; i < 8; i = i + 2) {
|
||||||
|
builder.append(hashData.substring(6 - i, 8 - i));
|
||||||
|
}
|
||||||
|
refBlockPrefix = Long.parseLong(builder.toString(), 16);
|
||||||
|
}
|
||||||
|
} catch (JSONException e) {
|
||||||
|
Log.e(TAG, "JSONException at headBlockNumber");
|
||||||
|
}
|
||||||
|
return blockHead;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//WebSocketConnection
|
||||||
|
|
||||||
|
public static void send(String message) {
|
||||||
|
if (mIsConnected) {
|
||||||
|
mConnection.sendTextMessage(message);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void disconnect() {
|
||||||
|
Log.i("internetBlockpay", "Disconnect");
|
||||||
|
if (mConnection != null) {
|
||||||
|
mConnection.disconnect();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@NonNull
|
||||||
|
public static Boolean isConnected() {
|
||||||
|
return mConnection != null && (mConnection.isConnected());
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void timeStamp() {
|
||||||
|
|
||||||
|
Helper.storeBoolianSharePref(context, "account_can_create", false);
|
||||||
|
setTimeStamp();
|
||||||
|
|
||||||
|
new Handler().postDelayed(new Runnable() {
|
||||||
|
@Override
|
||||||
|
public void run() {
|
||||||
|
|
||||||
|
Helper.storeBoolianSharePref(context, "account_can_create", true);
|
||||||
|
|
||||||
|
}
|
||||||
|
}, 10 * 60000);
|
||||||
|
}
|
||||||
|
|
||||||
|
@NonNull
|
||||||
|
public static Boolean accountCanCreate() {
|
||||||
|
return Helper.fetchBoolianSharePref(context, "account_can_create");
|
||||||
|
}
|
||||||
|
|
||||||
|
static void setTimeStamp() {
|
||||||
|
Calendar c = Calendar.getInstance();
|
||||||
|
long time = c.getTimeInMillis();
|
||||||
|
Helper.storeLongSharePref(context, "account_create_timestamp", time);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void getTimeStamp() {
|
||||||
|
try {
|
||||||
|
Calendar c = Calendar.getInstance();
|
||||||
|
long currentTime = c.getTimeInMillis();
|
||||||
|
;
|
||||||
|
long oldTime = Helper.fetchLongSharePref(context, "account_create_timestamp");
|
||||||
|
long diff = currentTime - oldTime;
|
||||||
|
if (diff < TimeUnit.MINUTES.toMillis(10)) {
|
||||||
|
new Handler().postDelayed(new Runnable() {
|
||||||
|
@Override
|
||||||
|
public void run() {
|
||||||
|
Helper.storeBoolianSharePref(context, "account_can_create", true);
|
||||||
|
}
|
||||||
|
}, TimeUnit.MINUTES.toMillis(10) - diff);
|
||||||
|
} else {
|
||||||
|
Helper.storeBoolianSharePref(context, "account_can_create", true);
|
||||||
|
}
|
||||||
|
} catch (Exception e) {
|
||||||
|
Helper.storeBoolianSharePref(context, "account_can_create", true);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Return the state of the application(If locked or not).
|
||||||
|
*/
|
||||||
|
public Boolean getLock() {
|
||||||
|
return mAppLock;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Set the state of the application(If locked or not).
|
||||||
|
*/
|
||||||
|
public void setLock(Boolean value) {
|
||||||
|
mAppLock = value;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onCreate() {
|
||||||
|
super.onCreate();
|
||||||
|
MultiDex.install(this);
|
||||||
|
ButterKnife.setDebug(true);
|
||||||
|
context = getApplicationContext();
|
||||||
|
blockHead = "";
|
||||||
|
|
||||||
|
mHandler = new Handler();
|
||||||
|
/*
|
||||||
|
* Registering this class as a listener to all activitie's callback cycle events, in order to
|
||||||
|
* better estimate when the user has left the app and it is safe to lock the app or not
|
||||||
|
*/
|
||||||
|
registerActivityLifecycleCallbacks(this);
|
||||||
|
|
||||||
|
|
||||||
|
//SETUP LOCALE AND DEFAULT PREFERENCES
|
||||||
|
|
||||||
|
//Setup Country
|
||||||
|
String country = Helper.fetchStringSharePref(getApplicationContext(), getString(R.string.pref_country), "");
|
||||||
|
//If not at preferences yet it will setup device country or constant default
|
||||||
|
//(It is expected that this "if" will be executed only one time, at first start up)
|
||||||
|
if (country.equals("")) {
|
||||||
|
Log.w(TAG, "Could not resolve country information, trying with the telephony manager");
|
||||||
|
//If the locale mechanism fails to give us a country, we try
|
||||||
|
//to get it from the TelephonyManager.
|
||||||
|
country = Helper.getDeviceCountry(getApplicationContext());
|
||||||
|
//If device don't respond with any country set it to the default (app constant)
|
||||||
|
if (country == null || country.equals("")) {
|
||||||
|
Log.w(TAG, "Could not resolve country information again, falling back to the default");
|
||||||
|
country = Constants.DEFAULT_COUNTRY_CODE;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Helper.setCountry(getApplicationContext(), country);
|
||||||
|
|
||||||
|
//Setup Language
|
||||||
|
String language = Helper.fetchStringSharePref(getApplicationContext(), getString(R.string.pref_language));
|
||||||
|
//If app language preferences aren't set, set default as device/os language (telephony language)
|
||||||
|
//(It is expected that this "if" will be executed only one time, at first start up)
|
||||||
|
if (language.equals("")) {
|
||||||
|
language = Locale.getDefault().getLanguage();
|
||||||
|
//Just checking if we still don't have a language setup in the locale, in which
|
||||||
|
//case we fallback to english as the default (the app constant .
|
||||||
|
if (language.equals("")) {
|
||||||
|
Log.w(TAG, "Could not resolve language information, falling back to english");
|
||||||
|
language = Constants.DEFAULT_LANGUAGE_CODE;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Helper.setLanguage(getApplicationContext(), language);
|
||||||
|
|
||||||
|
|
||||||
|
//Check automatically close app behavior (after 3 min) is set and if not, put true by default
|
||||||
|
Boolean closeAppPref = Helper.checkSharedPref(getApplicationContext(), "close_bitshare");
|
||||||
|
if (!closeAppPref) {
|
||||||
|
Helper.storeBoolianSharePref(getApplicationContext(), "close_bitshare", true);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
init();
|
||||||
|
accountCreateInit();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void init() {
|
||||||
|
new Handler(Looper.getMainLooper()).postDelayed(new Runnable() {
|
||||||
|
@Override
|
||||||
|
public void run() {
|
||||||
|
if (mConnection == null) {
|
||||||
|
mConnection = new WebSocketConnection();
|
||||||
|
checkConnection();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}, 1000);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
private void webSocketConnection() {
|
||||||
|
isReady = false;
|
||||||
|
new Handler(Looper.getMainLooper()).postDelayed(new Runnable() {
|
||||||
|
@Override
|
||||||
|
public void run() {
|
||||||
|
nodeIndex = nodeIndex % urlsSocketConnection.length;
|
||||||
|
|
||||||
|
Log.i(TAG, "preparing to connect to:" + urlsSocketConnection[nodeIndex]);
|
||||||
|
|
||||||
|
connect(urlsSocketConnection[nodeIndex]);
|
||||||
|
nodeIndex++;
|
||||||
|
|
||||||
|
}
|
||||||
|
}, 500);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onOpen() {
|
||||||
|
Log.i("internetBlockpay", "open internet");
|
||||||
|
mIsConnected = true;
|
||||||
|
// Toast.makeText(context, getResources().getString(R.string.connected_to)+ ": "+connectedSocket,Toast.LENGTH_SHORT).show();
|
||||||
|
sendInitialSocket(context);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void checkConnection() {
|
||||||
|
connectionHandler.removeCallbacksAndMessages(null);
|
||||||
|
connectionHandler.postDelayed(new Runnable() {
|
||||||
|
@Override
|
||||||
|
public void run() {
|
||||||
|
|
||||||
|
if (checkInternetConnection()) {
|
||||||
|
{
|
||||||
|
webSocketConnection();
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
connectionHandler.postDelayed(this, 500);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}, 500);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onClose(WebSocketCloseNotification code, String reason) {
|
||||||
|
Log.i("internetBlockpay", "close internet");
|
||||||
|
mIsConnected = false;
|
||||||
|
checkConnection();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onTextMessage(String payload) {
|
||||||
|
stringTextRecievedWs(payload);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onRawTextMessage(byte[] payload) {
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onBinaryMessage(byte[] payload) {
|
||||||
|
}
|
||||||
|
|
||||||
|
private void connect(String node) {
|
||||||
|
Log.i("internetBlockpay", "connecting to internet");
|
||||||
|
Log.i("Connect", "connect(String node) called");
|
||||||
|
try {
|
||||||
|
if (!mIsConnected) {
|
||||||
|
Log.i("Connect", "Inside when not mIsConnected");
|
||||||
|
mServerURI = new URI(node);
|
||||||
|
connectedSocket = node;
|
||||||
|
mConnection.connect(mServerURI, this);
|
||||||
|
}
|
||||||
|
} catch (URISyntaxException e) {
|
||||||
|
String message = e.getLocalizedMessage();
|
||||||
|
Log.i("Connect", "Inside catch block when not mIsConnected, got exception, msg is:" + message);
|
||||||
|
checkConnection();
|
||||||
|
} catch (WebSocketException e) {
|
||||||
|
String message = e.getLocalizedMessage();
|
||||||
|
Log.i("Connect", "Inside catch block when not mIsConnected, got exception, msg is:" + message);
|
||||||
|
if (!mIsConnected) {
|
||||||
|
checkConnection();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Boolean checkInternetConnection() {
|
||||||
|
ConnectivityManager cm =
|
||||||
|
(ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
|
||||||
|
|
||||||
|
NetworkInfo activeNetwork = cm.getActiveNetworkInfo();
|
||||||
|
return activeNetwork != null &&
|
||||||
|
activeNetwork.isConnectedOrConnecting();
|
||||||
|
}
|
||||||
|
|
||||||
|
void accountCreateInit() {
|
||||||
|
if (Helper.containKeySharePref(context, "account_can_create")) {
|
||||||
|
if (!accountCanCreate()) {
|
||||||
|
getTimeStamp();
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
Helper.storeBoolianSharePref(context, "account_can_create", true);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Get attribute used to indicate if UI should update the funds or not after an update (Send funds primarily)
|
||||||
|
*
|
||||||
|
* @return The boolean value of update UI state
|
||||||
|
*/
|
||||||
|
public boolean getUpdateFunds() {
|
||||||
|
return this.mUpdateFunds;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Set attribute used to indicate if UI should update the funds or not after an update (Send funds primarily)
|
||||||
|
*
|
||||||
|
* @param update The boolean value of update UI state
|
||||||
|
*/
|
||||||
|
public void setUpdateFunds(boolean update) {
|
||||||
|
this.mUpdateFunds = update;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onActivityCreated(Activity activity, Bundle savedInstanceState) {
|
||||||
|
mHandler.removeCallbacks(this.lockApp);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onActivityStarted(Activity activity) {
|
||||||
|
mHandler.removeCallbacks(this.lockApp);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onActivityResumed(Activity activity) {
|
||||||
|
mHandler.removeCallbacks(this.lockApp);
|
||||||
|
Application.setCurrentActivity(activity);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onActivityPaused(Activity activity) {
|
||||||
|
//Call the handler only if app is not already locked
|
||||||
|
if (!mAppLock) {
|
||||||
|
mHandler.postDelayed(this.lockApp, LOCK_DELAY);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onActivityStopped(Activity activity) {
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onActivitySaveInstanceState(Activity activity, Bundle outState) {
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onActivityDestroyed(Activity activity) {
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in a new issue