From 501c5f2cb99481541dfe1260391b7c4414213097 Mon Sep 17 00:00:00 2001 From: Javinator9889 Date: Tue, 6 Mar 2018 20:38:44 +0100 Subject: [PATCH] Refactored code - enhancement #5 --- .../AppUpdaterManager/CheckUpdates.java | 69 +++--- .../AppUpdaterManager/NetworkConnection.java | 6 +- .../CacheJobSchedulerService.java | 35 +-- .../BackgroundJobs/NotificationHandler.java | 50 ++-- .../bitcoinpools/BitCoinApp.java | 74 ++++-- .../bitcoinpools/CacheManaging.java | 2 + .../javinator9889/bitcoinpools/Constants.java | 7 +- .../bitcoinpools/DataLoaderScreen.java | 149 ++--------- .../FragmentViews/CardsAdapter.java | 133 ++++++---- .../FragmentViews/CustomMarkerView.java | 6 +- .../FragmentViews/DonationsActivity.java | 25 +- .../FragmentViews/Tab1PoolsChart.java | 91 +------ .../FragmentViews/Tab2BTCChart.java | 191 +++++++------- .../bitcoinpools/JSONTools/JSONTools.java | 9 +- .../javinator9889/bitcoinpools/License.java | 86 ------- .../bitcoinpools/MainActivity.java | 233 ++++++------------ .../bitcoinpools/NetTools/net.java | 14 +- .../bitcoinpools/SpinnerActivity.java | 70 ++++-- 18 files changed, 488 insertions(+), 762 deletions(-) diff --git a/app/src/main/java/javinator9889/bitcoinpools/AppUpdaterManager/CheckUpdates.java b/app/src/main/java/javinator9889/bitcoinpools/AppUpdaterManager/CheckUpdates.java index c614670..ab3280d 100644 --- a/app/src/main/java/javinator9889/bitcoinpools/AppUpdaterManager/CheckUpdates.java +++ b/app/src/main/java/javinator9889/bitcoinpools/AppUpdaterManager/CheckUpdates.java @@ -1,16 +1,10 @@ package javinator9889.bitcoinpools.AppUpdaterManager; -import android.app.DownloadManager; import android.content.ActivityNotFoundException; -import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; -import android.content.IntentFilter; import android.content.pm.PackageManager; import android.net.Uri; -import android.os.Build; -import android.os.Environment; -import android.os.StrictMode; import android.support.annotation.NonNull; import android.util.Log; @@ -21,8 +15,6 @@ import org.json.JSONArray; import org.json.JSONException; -import java.io.File; -import java.lang.reflect.Method; import java.util.concurrent.ExecutionException; import javinator9889.bitcoinpools.BitCoinApp; @@ -37,59 +29,54 @@ public class CheckUpdates { private static final String GITHUB_API_URL = "https://api.github.com/repos/"; private static String CONNECTION_URL; private static String APP_VERSION; - private static JSONArray RETRIEVED_DATA; private static String LATEST_VERSION; private static String DOWNLOAD_URL = null; private static String MORE_INFO = Constants.GOOGLE_PLAY_URL; - private static String APK_NAME; private static boolean HTML_PAGE = false; public CheckUpdates(@NonNull String GitHub_User, @NonNull String GitHub_Repo) { CONNECTION_URL = GITHUB_API_URL + GitHub_User + "/" + GitHub_Repo + "/releases"; try { - APP_VERSION = BitCoinApp.getAppContext().getPackageManager().getPackageInfo(BitCoinApp.getAppContext().getPackageName(), 0).versionName; + APP_VERSION = BitCoinApp.getAppContext().getPackageManager() + .getPackageInfo(BitCoinApp.getAppContext().getPackageName(), 0) + .versionName; } catch (PackageManager.NameNotFoundException e) { - Log.e(Constants.LOG.CTAG, Constants.LOG.NO_INFO + e.getMessage(), new PackageManager.NameNotFoundException()); + Log.e(Constants.LOG.CTAG, Constants.LOG.NO_INFO + e.getMessage(), + new PackageManager.NameNotFoundException()); } getData(); } - public void checkForUpdates(final Context dialogContext, String title, String description, String positiveText, String negativeText, String neutralText) { - if (!APP_VERSION.equals(LATEST_VERSION)) {// && (Float.parseFloat(APP_VERSION) < Float.parseFloat(LATEST_VERSION))) { - Log.d(Constants.LOG.CTAG, Constants.LOG.NEW_VERSION + APP_VERSION + " | " + LATEST_VERSION); + public void checkForUpdates(final Context dialogContext, String title, String description, + String positiveText, String negativeText, String neutralText) { + if (!APP_VERSION.equals(LATEST_VERSION)) { + Log.d(Constants.LOG.CTAG, Constants.LOG.NEW_VERSION + APP_VERSION + + " | " + LATEST_VERSION); MaterialDialog materialDialog; if (!HTML_PAGE) { Log.d(Constants.LOG.CTAG, Constants.LOG.DOW_NOTIFICATION); materialDialog = new MaterialDialog.Builder(dialogContext) .title(title) .content(description) - //.positiveText(positiveText) .negativeText(negativeText) .neutralText(positiveText) .cancelable(false) .onAny(new MaterialDialog.SingleButtonCallback() { @Override - public void onClick(@NonNull MaterialDialog dialog, @NonNull DialogAction which) { + public void onClick(@NonNull MaterialDialog dialog, + @NonNull DialogAction which) { switch (which) { - case POSITIVE: - DownloadManager.Request downloadRequest = new DownloadManager.Request(Uri.parse(DOWNLOAD_URL)); - downloadRequest.setTitle(APK_NAME); - downloadRequest.allowScanningByMediaScanner(); - downloadRequest.setNotificationVisibility(DownloadManager.Request.VISIBILITY_VISIBLE_NOTIFY_COMPLETED); - downloadRequest.setVisibleInDownloadsUi(true); - downloadRequest.setDestinationInExternalPublicDir(Environment.DIRECTORY_DOWNLOADS, APK_NAME); - final DownloadManager manager = (DownloadManager) dialogContext.getSystemService(Context.DOWNLOAD_SERVICE); - assert manager != null; - manager.enqueue(downloadRequest); - break; case NEUTRAL: try { - Uri webUri = Uri.parse("market://details?id=com.fastaccess.github"); - Intent launchBrowser = new Intent(Intent.ACTION_VIEW, webUri); + Uri webUri = Uri.parse( + "market://details?id=javinator9889.bitcoinpools"); + Intent launchBrowser = new Intent(Intent.ACTION_VIEW, + webUri); dialogContext.startActivity(launchBrowser); } catch (ActivityNotFoundException e) { Uri webUri = Uri.parse(MORE_INFO); - Intent launchBrowser = new Intent(Intent.ACTION_VIEW, webUri); + Intent launchBrowser = new Intent(Intent.ACTION_VIEW, + webUri); dialogContext.startActivity(launchBrowser); } break; @@ -134,7 +121,7 @@ private void getData() { NetworkConnection connection = new NetworkConnection(); connection.execute(CONNECTION_URL); try { - RETRIEVED_DATA = connection.get(); + JSONArray RETRIEVED_DATA = connection.get(); int jsonLength = RETRIEVED_DATA.length(); boolean noPreRelease = false; for (int i = 0; (i < jsonLength) && !noPreRelease; ++i) { @@ -142,20 +129,26 @@ private void getData() { noPreRelease = true; LATEST_VERSION = RETRIEVED_DATA.getJSONObject(i).getString("tag_name"); boolean apkFound = false; - for (int j = 0; (j < RETRIEVED_DATA.getJSONObject(i).getJSONArray("assets").length()) && !apkFound; ++j) { - if (!(RETRIEVED_DATA.getJSONObject(i).getJSONArray("assets").isNull(j) && (RETRIEVED_DATA.getJSONObject(i).getJSONArray("assets").getJSONObject(j).getString("name").contains(".apk")))) { + for (int j = 0; (j < RETRIEVED_DATA.getJSONObject(i).getJSONArray("assets") + .length()) && !apkFound; ++j) + { + if (!(RETRIEVED_DATA.getJSONObject(i).getJSONArray("assets").isNull(j) + && (RETRIEVED_DATA.getJSONObject(i).getJSONArray("assets") + .getJSONObject(j).getString("name").contains(".apk")))) + { apkFound = true; - DOWNLOAD_URL = RETRIEVED_DATA.getJSONObject(i).getJSONArray("assets").getJSONObject(0).getString("browser_download_url"); - APK_NAME = RETRIEVED_DATA.getJSONObject(i).getJSONArray("assets").getJSONObject(j).getString("name"); + DOWNLOAD_URL = RETRIEVED_DATA.getJSONObject(i) + .getJSONArray("assets").getJSONObject(0) + .getString("browser_download_url"); } } if (DOWNLOAD_URL == null) { HTML_PAGE = true; } - //MORE_INFO = RETRIEVED_DATA.getJSONObject(i).getString("html_url"); } } - } catch (InterruptedException | ExecutionException | JSONException | NullPointerException e) { + } catch (InterruptedException | ExecutionException + | JSONException | NullPointerException e) { Crashlytics.logException(e); Log.e(Constants.LOG.CTAG, Constants.LOG.NO_INFO + e.getMessage()); } diff --git a/app/src/main/java/javinator9889/bitcoinpools/AppUpdaterManager/NetworkConnection.java b/app/src/main/java/javinator9889/bitcoinpools/AppUpdaterManager/NetworkConnection.java index 6af59ef..368eaf2 100644 --- a/app/src/main/java/javinator9889/bitcoinpools/AppUpdaterManager/NetworkConnection.java +++ b/app/src/main/java/javinator9889/bitcoinpools/AppUpdaterManager/NetworkConnection.java @@ -1,6 +1,7 @@ package javinator9889.bitcoinpools.AppUpdaterManager; import android.os.AsyncTask; +import android.support.annotation.NonNull; import android.util.Log; import org.json.JSONArray; @@ -34,6 +35,7 @@ protected JSONArray doInBackground(String... url) { return null; } + @NonNull private String readAll(Reader httpsReader) throws IOException { StringBuilder response = new StringBuilder(); int valueRead; @@ -43,9 +45,11 @@ private String readAll(Reader httpsReader) throws IOException { return response.toString(); } + @NonNull private JSONArray readJSONFromURL(String url) throws IOException, JSONException { try (InputStream JSONStream = new URL(url).openStream()) { - BufferedReader br = new BufferedReader(new InputStreamReader(JSONStream, Charset.forName("UTF-8"))); + BufferedReader br = new BufferedReader( + new InputStreamReader(JSONStream, Charset.forName("UTF-8"))); String JSONText = readAll(br); return new JSONArray(JSONText); } diff --git a/app/src/main/java/javinator9889/bitcoinpools/BackgroundJobs/CacheJobSchedulerService.java b/app/src/main/java/javinator9889/bitcoinpools/BackgroundJobs/CacheJobSchedulerService.java index 33614ed..c305f43 100644 --- a/app/src/main/java/javinator9889/bitcoinpools/BackgroundJobs/CacheJobSchedulerService.java +++ b/app/src/main/java/javinator9889/bitcoinpools/BackgroundJobs/CacheJobSchedulerService.java @@ -6,20 +6,12 @@ import android.os.Message; import android.util.Log; -import org.json.JSONObject; - -import java.io.BufferedReader; -import java.io.IOException; -import java.io.InputStreamReader; -import java.net.URL; import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.HashMap; import java.util.LinkedHashMap; import java.util.Locale; -import javax.net.ssl.HttpsURLConnection; - import javinator9889.bitcoinpools.BitCoinApp; import javinator9889.bitcoinpools.CacheManaging; import javinator9889.bitcoinpools.Constants; @@ -39,12 +31,9 @@ public class CacheJobSchedulerService extends JobService { private Handler jobHandler = new Handler(new Handler.Callback() { @Override public boolean handleMessage(Message msg) { - System.out.println("Handling message"); if (!jobCancelled) { try { - System.out.println("Updating cache"); updateCache(); - System.out.println("Cache updated"); jobWorking = false; jobFinished((JobParameters) msg.obj, false); return false; @@ -78,7 +67,8 @@ public boolean onStopJob(JobParameters params) { } private void updateCache() { - String date = new SimpleDateFormat("dd-MM-yyyy HH:mm", Locale.US).format(Calendar.getInstance().getTime()); + String date = new SimpleDateFormat("dd-MM-yyyy HH:mm", Locale.US) + .format(Calendar.getInstance().getTime()); CacheManaging cache = CacheManaging.newInstance(BitCoinApp.getAppContext()); try { cache.setupFile(); @@ -89,7 +79,6 @@ private void updateCache() { newValuesToSave.put("date", date); for (String key : valuesObtained.keySet()) { newValuesToSave.put(key, String.valueOf(valuesObtained.get(key))); - System.out.println(key + " | " + valuesObtained.get(key)); } cache.writeCache(newValuesToSave); } catch (Exception e) { @@ -97,24 +86,4 @@ private void updateCache() { throw new NullPointerException("Impossible to obtain values"); } } - - /*private JSONObject getHTTPSRequest(String requestUrl) throws Exception { - Thread httpsRequestThread = new Thread(new Runnable() { - @Override - public void run() { - StringBuilder response = new StringBuilder(); - URL urlObject = new URL(requestUrl); - HttpsURLConnection connection = (HttpsURLConnection) urlObject.openConnection(); - connection.setRequestMethod("GET"); - BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(connection.getInputStream())); - - String line; - while ((line = bufferedReader.readLine()) != null) { - response.append(line); - } - bufferedReader.close(); - return new JSONObject(response.toString()); - } - }) - }*/ } diff --git a/app/src/main/java/javinator9889/bitcoinpools/BackgroundJobs/NotificationHandler.java b/app/src/main/java/javinator9889/bitcoinpools/BackgroundJobs/NotificationHandler.java index b55786c..d0c6ff2 100644 --- a/app/src/main/java/javinator9889/bitcoinpools/BackgroundJobs/NotificationHandler.java +++ b/app/src/main/java/javinator9889/bitcoinpools/BackgroundJobs/NotificationHandler.java @@ -8,6 +8,7 @@ import android.content.Intent; import android.content.SharedPreferences; import android.os.Build; +import android.support.annotation.NonNull; import android.util.Log; import org.json.JSONException; @@ -35,7 +36,8 @@ class NotificationHandler { private NotificationHandler() { final SharedPreferences sp = BitCoinApp.getSharedPreferences(); Log.d(Constants.LOG.NTAG, Constants.LOG.CREATING_NOTIFICATION); - NOTIFICATIONS_ENABLED = sp.getBoolean(Constants.SHARED_PREFERENCES.NOTIFICATIONS_ENABLED, false); + NOTIFICATIONS_ENABLED = sp.getBoolean(Constants.SHARED_PREFERENCES.NOTIFICATIONS_ENABLED, + false); NOTIFIED_HIGH = sp.getBoolean(Constants.SHARED_PREFERENCES.NOTIFIED_HIGH, false); NOTIFIED_LOW = sp.getBoolean(Constants.SHARED_PREFERENCES.NOTIFIED_LOW, false); SPECIFIC_VALUE = sp.getInt(Constants.SHARED_PREFERENCES.VALUE_TO_CHECK, 1000); @@ -53,7 +55,8 @@ void putNotification() { String notificationTitle = ""; String notificationText = ""; String notificationTextLong = ""; - NotificationManager notificationManager = (NotificationManager) BitCoinApp.getAppContext().getSystemService(Context.NOTIFICATION_SERVICE); + NotificationManager notificationManager = (NotificationManager) BitCoinApp.getAppContext() + .getSystemService(Context.NOTIFICATION_SERVICE); PendingIntent clickIntent = PendingIntent.getActivity( BitCoinApp.getAppContext(), Constants.REQUEST_CODE, @@ -64,19 +67,22 @@ void putNotification() { if (NOTIFICATIONS_ENABLED) { if ((MPU < SPECIFIC_VALUE) && !NOTIFIED_LOW) { notificationTitle = BitCoinApp.getAppContext().getString(R.string.lowerPrice); - notificationTextLong = BitCoinApp.getAppContext().getString(R.string.lowerPriceX) + SPECIFIC_VALUE + ". " + BitCoinApp.getAppContext().getString(R.string.actualCost) + MPU; - notificationText = BitCoinApp.getAppContext().getString(R.string.lowerPriceX) + SPECIFIC_VALUE; + notificationTextLong = BitCoinApp.getAppContext().getString(R.string.lowerPriceX) + + SPECIFIC_VALUE + ". " + + BitCoinApp.getAppContext().getString(R.string.actualCost) + MPU; + notificationText = BitCoinApp.getAppContext().getString(R.string.lowerPriceX) + + SPECIFIC_VALUE; NOTIFIED_HIGH = false; NOTIFIED_LOW = true; - //notify = true; notify = (MPU != -1); } else if ((MPU > SPECIFIC_VALUE) && !NOTIFIED_HIGH) { notificationTitle = BitCoinApp.getAppContext().getString(R.string.morePrice); - notificationTextLong = BitCoinApp.getAppContext().getString(R.string.morePriceX) + SPECIFIC_VALUE + ". " + BitCoinApp.getAppContext().getString(R.string.actualCost) + MPU; - notificationText = BitCoinApp.getAppContext().getString(R.string.morePriceX) + SPECIFIC_VALUE; + notificationTextLong = BitCoinApp.getAppContext().getString(R.string.morePriceX) + + SPECIFIC_VALUE + ". " + BitCoinApp.getAppContext().getString(R.string.actualCost) + MPU; + notificationText = BitCoinApp.getAppContext().getString(R.string.morePriceX) + + SPECIFIC_VALUE; NOTIFIED_HIGH = true; NOTIFIED_LOW = false; - //notify = true; notify = (MPU != -1); } if (notify) { @@ -88,7 +94,8 @@ void putNotification() { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { int importance = android.app.NotificationManager.IMPORTANCE_HIGH; assert notificationManager != null; - NotificationChannel mChannel = notificationManager.getNotificationChannel(Constants.CHANNEL_ID); + NotificationChannel mChannel = notificationManager + .getNotificationChannel(Constants.CHANNEL_ID); if (mChannel == null) { mChannel = new NotificationChannel(Constants.CHANNEL_ID, name, importance); mChannel.setDescription(description); @@ -97,14 +104,16 @@ void putNotification() { notificationManager.createNotificationChannel(mChannel); } - notification = new Notification.Builder(BitCoinApp.getAppContext(), Constants.CHANNEL_ID) + notification = new Notification.Builder(BitCoinApp.getAppContext(), + Constants.CHANNEL_ID) .setSmallIcon(R.drawable.ic_stat_equalizer) .setCategory(Notification.CATEGORY_MESSAGE) .setContentTitle(notificationTitle) .setContentText(notificationText) .setAutoCancel(true) .setTicker(notificationTitle) - .setStyle(new Notification.BigTextStyle().bigText(notificationTextLong)); + .setStyle(new Notification.BigTextStyle() + .bigText(notificationTextLong)); } else { notification = new Notification.Builder(BitCoinApp.getAppContext()) .setSmallIcon(R.drawable.ic_stat_equalizer) @@ -113,7 +122,8 @@ void putNotification() { .setContentText(notificationText) .setAutoCancel(true) .setTicker(notificationTitle) - .setStyle(new Notification.BigTextStyle().bigText(notificationTextLong)); + .setStyle(new Notification.BigTextStyle() + .bigText(notificationTextLong)); } notification.setContentIntent(clickIntent); assert notificationManager != null; @@ -123,6 +133,7 @@ void putNotification() { } } + @NonNull static NotificationHandler newInstance() { return new NotificationHandler(); } @@ -131,8 +142,10 @@ private static float initMPU() { net market = new net(); market.execute("https://api.blockchain.info/stats"); try { - return MainActivity.round((float) market.get().getDouble("market_price_usd"), 2); - } catch (InterruptedException | ExecutionException | JSONException | NullPointerException e) { + return MainActivity.round((float) market.get().getDouble("market_price_usd"), + 2); + } catch (InterruptedException | ExecutionException + | JSONException | NullPointerException e) { return -1; } } @@ -142,9 +155,12 @@ void updatePreferences() { } private static void updateSharedPreferences() { - final SharedPreferences.Editor sharedPreferencesEditor = BitCoinApp.getSharedPreferences().edit(); - sharedPreferencesEditor.putBoolean(Constants.SHARED_PREFERENCES.NOTIFIED_HIGH, NOTIFIED_HIGH); - sharedPreferencesEditor.putBoolean(Constants.SHARED_PREFERENCES.NOTIFIED_LOW, NOTIFIED_LOW); + final SharedPreferences.Editor sharedPreferencesEditor = BitCoinApp + .getSharedPreferences().edit(); + sharedPreferencesEditor.putBoolean(Constants.SHARED_PREFERENCES.NOTIFIED_HIGH, + NOTIFIED_HIGH); + sharedPreferencesEditor.putBoolean(Constants.SHARED_PREFERENCES.NOTIFIED_LOW, + NOTIFIED_LOW); sharedPreferencesEditor.apply(); } } diff --git a/app/src/main/java/javinator9889/bitcoinpools/BitCoinApp.java b/app/src/main/java/javinator9889/bitcoinpools/BitCoinApp.java index 1088e41..0beb564 100644 --- a/app/src/main/java/javinator9889/bitcoinpools/BitCoinApp.java +++ b/app/src/main/java/javinator9889/bitcoinpools/BitCoinApp.java @@ -16,10 +16,8 @@ import com.crashlytics.android.Crashlytics; import java.io.IOException; -import java.sql.Time; import java.text.DateFormat; import java.text.SimpleDateFormat; -import java.util.ArrayList; import java.util.Calendar; import java.util.Date; import java.util.HashMap; @@ -31,6 +29,8 @@ import javinator9889.bitcoinpools.BackgroundJobs.CacheJobSchedulerService; import javinator9889.bitcoinpools.BackgroundJobs.JobSchedulerService; +import static javinator9889.bitcoinpools.Constants.MILLIS_A_DAY; + /** * Created by Javinator9889 on 22/01/2018. * Based on: https://github.com/ZonaRMR/SimpleForFacebook/blob/master/app/src/main/java/com/creativetrends/simple/app/activities/SimpleApp.java @@ -53,7 +53,9 @@ public static SharedPreferences getSharedPreferences() { @Override public void onCreate() { APPLICATION_CONTEXT = getApplicationContext(); - SHARED_PREFERENCES = getSharedPreferences(Constants.SHARED_PREFERENCES.SHARED_PREFERENCES_KEY, Context.MODE_PRIVATE); + SHARED_PREFERENCES = getSharedPreferences( + Constants.SHARED_PREFERENCES.SHARED_PREFERENCES_KEY, + Context.MODE_PRIVATE); initSharedPreferences(); try { isCacheCreated = CacheManaging.newInstance(this).setupFile(); @@ -66,8 +68,12 @@ public void onCreate() { } private static void startBackgroundJobs() { - JobScheduler mJobScheduler = (JobScheduler) APPLICATION_CONTEXT.getSystemService(Context.JOB_SCHEDULER_SERVICE); - JobInfo.Builder builder = new JobInfo.Builder(1, new ComponentName(APPLICATION_CONTEXT.getPackageName(), JobSchedulerService.class.getName())); + JobScheduler mJobScheduler = (JobScheduler) APPLICATION_CONTEXT + .getSystemService(Context.JOB_SCHEDULER_SERVICE); + JobInfo.Builder builder = new JobInfo.Builder( + 1, + new ComponentName(APPLICATION_CONTEXT.getPackageName(), + JobSchedulerService.class.getName())); builder.setPeriodic(Constants.SCHEDULING_TIME); builder.setPersisted(Constants.PERSISTED); @@ -76,22 +82,27 @@ private static void startBackgroundJobs() { assert mJobScheduler != null; if (mJobScheduler.schedule(builder.build()) == JobScheduler.RESULT_FAILURE) { - Log.e(Constants.LOG.BCTAG, Constants.LOG.NO_INIT + "JobScheduler" + mJobScheduler.getAllPendingJobs().toString()); + Log.e(Constants.LOG.BCTAG, + Constants.LOG.NO_INIT + "JobScheduler" + mJobScheduler.getAllPendingJobs() + .toString()); } if (isJobCreationNeeded(mJobScheduler)) { - System.out.println("Creating job for cache - true"); - //JobScheduler cacheJobScheduler = (JobScheduler) APPLICATION_CONTEXT.getSystemService(Context.JOB_SCHEDULER_SERVICE); - JobInfo.Builder cacheBuilder = new JobInfo.Builder(2, new ComponentName(APPLICATION_CONTEXT.getPackageName(), CacheJobSchedulerService.class.getName())); + JobInfo.Builder cacheBuilder = new JobInfo.Builder( + 2, + new ComponentName(APPLICATION_CONTEXT.getPackageName(), + CacheJobSchedulerService.class.getName())); cacheBuilder.setPeriodic(TimeUnit.DAYS.toMillis(1)); cacheBuilder.setPersisted(Constants.PERSISTED); cacheBuilder.setRequiredNetworkType(JobInfo.NETWORK_TYPE_ANY); - cacheBuilder.setBackoffCriteria(Constants.BACKOFF_CRITERIA, JobInfo.BACKOFF_POLICY_LINEAR); + cacheBuilder.setBackoffCriteria(Constants.BACKOFF_CRITERIA, + JobInfo.BACKOFF_POLICY_LINEAR); - //assert cacheJobScheduler != null; if (mJobScheduler.schedule(cacheBuilder.build()) == JobScheduler.RESULT_FAILURE) { - Log.e(Constants.LOG.BCTAG, Constants.LOG.NO_INIT + "JobScheduler" + mJobScheduler.getAllPendingJobs().toString()); + Log.e(Constants.LOG.BCTAG, + Constants.LOG.NO_INIT + "JobScheduler" + mJobScheduler + .getAllPendingJobs().toString()); } else { SharedPreferences.Editor newValueForStartedJob = SHARED_PREFERENCES.edit(); newValueForStartedJob.putBoolean(Constants.SHARED_PREFERENCES.CACHE_JOB, true); @@ -101,30 +112,41 @@ private static void startBackgroundJobs() { } private void initSharedPreferences() { - if (!SHARED_PREFERENCES.contains(Constants.SHARED_PREFERENCES.SHARED_PREFERENCES_INITIALIZED)) { + if (!SHARED_PREFERENCES.contains( + Constants.SHARED_PREFERENCES.SHARED_PREFERENCES_INITIALIZED)) + { Log.d(Constants.LOG.BCTAG, Constants.LOG.INIT_PREF); SharedPreferences.Editor sharedPreferencesEditor = SHARED_PREFERENCES.edit(); - sharedPreferencesEditor.putBoolean(Constants.SHARED_PREFERENCES.SHARED_PREFERENCES_INITIALIZED, true); - sharedPreferencesEditor.putBoolean(Constants.SHARED_PREFERENCES.NOTIFICATIONS_ENABLED, false); - sharedPreferencesEditor.putBoolean(Constants.SHARED_PREFERENCES.NOTIFIED_LOW, false); - sharedPreferencesEditor.putBoolean(Constants.SHARED_PREFERENCES.NOTIFIED_HIGH, false); - sharedPreferencesEditor.putInt(Constants.SHARED_PREFERENCES.DAYS_TO_CHECK, 1); - sharedPreferencesEditor.putInt(Constants.SHARED_PREFERENCES.VALUE_TO_CHECK, 1000); - sharedPreferencesEditor.putString(Constants.SHARED_PREFERENCES.APP_VERSION, appVersion()); + sharedPreferencesEditor.putBoolean( + Constants.SHARED_PREFERENCES.SHARED_PREFERENCES_INITIALIZED, true); + sharedPreferencesEditor.putBoolean( + Constants.SHARED_PREFERENCES.NOTIFICATIONS_ENABLED, false); + sharedPreferencesEditor.putBoolean( + Constants.SHARED_PREFERENCES.NOTIFIED_LOW, false); + sharedPreferencesEditor.putBoolean( + Constants.SHARED_PREFERENCES.NOTIFIED_HIGH, false); + sharedPreferencesEditor.putInt( + Constants.SHARED_PREFERENCES.DAYS_TO_CHECK, 1); + sharedPreferencesEditor.putInt( + Constants.SHARED_PREFERENCES.VALUE_TO_CHECK, 1000); + sharedPreferencesEditor.putString( + Constants.SHARED_PREFERENCES.APP_VERSION, appVersion()); sharedPreferencesEditor.apply(); } } public static void forceRestartBackgroundJobs() { Log.d(Constants.LOG.BCTAG, Constants.LOG.RESTART_JOB); - JobScheduler jobScheduler = (JobScheduler) APPLICATION_CONTEXT.getSystemService(Context.JOB_SCHEDULER_SERVICE); + JobScheduler jobScheduler = (JobScheduler) APPLICATION_CONTEXT + .getSystemService(Context.JOB_SCHEDULER_SERVICE); assert jobScheduler != null; jobScheduler.cancelAll(); startBackgroundJobs(); } public static boolean isOnline() { - ConnectivityManager connectionManager = (ConnectivityManager) getAppContext().getSystemService(Context.CONNECTIVITY_SERVICE); + ConnectivityManager connectionManager = (ConnectivityManager) getAppContext() + .getSystemService(Context.CONNECTIVITY_SERVICE); assert connectionManager != null; NetworkInfo netInfo = connectionManager.getActiveNetworkInfo(); return ((netInfo != null) && netInfo.isConnected()); @@ -132,7 +154,8 @@ public static boolean isOnline() { public static String appVersion() { try { - PackageInfo pInfo = getAppContext().getPackageManager().getPackageInfo(getAppContext().getPackageName(), 0); + PackageInfo pInfo = getAppContext().getPackageManager() + .getPackageInfo(getAppContext().getPackageName(), 0); return pInfo.versionName; } catch (PackageManager.NameNotFoundException e) { Crashlytics.logException(e); @@ -141,19 +164,16 @@ public static String appVersion() { } public static boolean isJobCreationNeeded(JobScheduler applicationJobScheduler) { - //SHARED_PREFERENCES.getBoolean(Constants.SHARED_PREFERENCES.CACHE_JOB, false); if (SHARED_PREFERENCES.contains(Constants.SHARED_PREFERENCES.CACHE_JOB)) { List pendingJobs = applicationJobScheduler.getAllPendingJobs(); Iterator currentPendingJob = pendingJobs.iterator(); boolean equals = false; while (currentPendingJob.hasNext() && !equals) { JobInfo pending = currentPendingJob.next(); - equals = pending.toString().equals("(job:2/javinator9889.bitcoinpools/.BackgroundJobs.CacheJobSchedulerService)"); + equals = pending.toString().equals(Constants.JOBINFO); } - final long MILLIS_A_DAY = 86400000; long timeDiff = timeDifference(); return timeDiff >= MILLIS_A_DAY && !equals; -//return (timeDifference() >= MILLIS_A_DAY) || !equals; } else { SharedPreferences.Editor newEntry = SHARED_PREFERENCES.edit(); newEntry.putBoolean(Constants.SHARED_PREFERENCES.CACHE_JOB, false); diff --git a/app/src/main/java/javinator9889/bitcoinpools/CacheManaging.java b/app/src/main/java/javinator9889/bitcoinpools/CacheManaging.java index 92ebdcb..0795471 100644 --- a/app/src/main/java/javinator9889/bitcoinpools/CacheManaging.java +++ b/app/src/main/java/javinator9889/bitcoinpools/CacheManaging.java @@ -1,6 +1,7 @@ package javinator9889.bitcoinpools; import android.content.Context; +import android.support.annotation.NonNull; import java.io.File; import java.io.FileInputStream; @@ -22,6 +23,7 @@ private CacheManaging(Context applicationContext) { this.filename = applicationContext.getCacheDir().getPath() + File.separator + "DataCache"; } + @NonNull public static CacheManaging newInstance(Context applicationContext) { return new CacheManaging(applicationContext); } diff --git a/app/src/main/java/javinator9889/bitcoinpools/Constants.java b/app/src/main/java/javinator9889/bitcoinpools/Constants.java index 2598be1..cc344da 100644 --- a/app/src/main/java/javinator9889/bitcoinpools/Constants.java +++ b/app/src/main/java/javinator9889/bitcoinpools/Constants.java @@ -12,7 +12,9 @@ public class Constants { public static final long SCHEDULING_TIME = TimeUnit.HOURS.toMillis(1); public static final long BACKOFF_CRITERIA = TimeUnit.SECONDS.toMillis(30); public static final int JOB_ID = 1; - public static final int REQUEST_INVITE = 0; + public static final String JOBINFO = "(job:2/javinator9889.bitcoinpools/.BackgroundJobs.CacheJobSchedulerService)"; + public static final long MILLIS_A_DAY = 86400000; + public static class PAYMENTS { public static final String GOOGLE_PUBKEY = "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAgt71diQE3dVAJ/KEJSpt+ZIEeeKDOWl5cBdwRirkjiVPtzwbOlOyJsf+tJzQrYvxJejmkfdwR5TlG4Z+NAZDtcS4mq63JVoPyEbmx0wvVYC3+zav2MbJO9P/gSmwTK0KGwVSyItcH5sqXjK9Mv280uj2jM0IMW0UpM91vzeitCGCbJRwMe1CnzLzFPFI01YJ/QjG+1KY7MzIhn3P2ZbS9C7fhP0BwJIBPoZJkp64pKhXf7iI5qsbZGby4V+iQiU5ONiS+ggy8X076IAB1DijL90BUnbTXCwa1WufChb3da7xV/AiPEHl9UJ2J70I3+/1Dx9MXOrYkBmOKAYFLJlcQwIDAQAB"; public static final String[] GOOGLE_CATALOG = new String[]{"ntpsync.donation.1", @@ -41,7 +43,7 @@ public static final class SHARED_PREFERENCES { public static final String STATS_URL = "https://api.blockchain.info/stats"; public static final String MARKET_NAME = "market_price_usd"; public static final String POOLS_URL = "https://api.blockchain.info/pools?timespan="; - public static final String GITHUB_URL = "https://github.com/Javinator9889/BitCoinPools/releases#latest"; + public static final class LOG { public static final String UNCAUGHT_ERROR = "Uncaught error on: "; @@ -59,7 +61,6 @@ public static final class LOG { public static final String CREATING_CHART = "Creating application chart"; public static final String INIT_VALUES = "Initialising application values"; public static final String LISTENING = "Listening to buttons"; - public static final String CHECKING_PERMISSIONS = "Checking for required permissions"; public static final String LOADING_MPU = "Loading MPU in a new thread..."; public static final String LOADING_RD = "Loading data in a new thread..."; public static final String LOADING_CHART = "Loading PieChart in a new thread..."; diff --git a/app/src/main/java/javinator9889/bitcoinpools/DataLoaderScreen.java b/app/src/main/java/javinator9889/bitcoinpools/DataLoaderScreen.java index e3b1a22..8a04b83 100644 --- a/app/src/main/java/javinator9889/bitcoinpools/DataLoaderScreen.java +++ b/app/src/main/java/javinator9889/bitcoinpools/DataLoaderScreen.java @@ -2,13 +2,10 @@ import android.annotation.SuppressLint; import android.content.Intent; -import android.content.SharedPreferences; import android.os.AsyncTask; import android.os.Bundle; import android.support.annotation.NonNull; import android.support.annotation.Nullable; -import android.support.design.widget.TabLayout; -import android.support.v4.view.ViewPager; import android.support.v7.app.AppCompatActivity; import android.util.Log; @@ -25,17 +22,16 @@ import javax.net.ssl.HttpsURLConnection; -import javinator9889.bitcoinpools.AppUpdaterManager.CheckUpdates; import javinator9889.bitcoinpools.JSONTools.JSONTools; import static javinator9889.bitcoinpools.MainActivity.round; /** * Created by Javinator9889 on 04/03/2018. + * Based on: https://stackoverflow.com/questions/10115403/progressdialog-while-load-activity */ public class DataLoaderScreen extends AppCompatActivity { - //public static MaterialDialog progressDialog = null; public static AppCompatActivity dataLoaderScreenActivity; private float mpu; @@ -50,16 +46,7 @@ protected void onCreate(@Nullable Bundle savedInstanceState) { if (BitCoinApp.isOnline()) { Log.d(Constants.LOG.MATAG, Constants.LOG.CREATING_MAINVIEW); setContentView(R.layout.activity_loading); - //mFirebaseAnalytics = FirebaseAnalytics.getInstance(this); - /*progressDialog = new MaterialDialog.Builder(this) - .cancelable(false) - .title(R.string.loadingData) - .content(R.string.please_wait) - .progress(false, 100) - .build(); - progressDialog.show();*/ new DataLoader().execute(); - //new MainActivity.DataLoader().execute(); } else { new MaterialDialog.Builder(this) .title(R.string.noConnectionTitle) @@ -68,7 +55,8 @@ protected void onCreate(@Nullable Bundle savedInstanceState) { .positiveText(R.string.accept) .onPositive(new MaterialDialog.SingleButtonCallback() { @Override - public void onClick(@NonNull MaterialDialog dialog, @NonNull DialogAction which) { + public void onClick(@NonNull MaterialDialog dialog, + @NonNull DialogAction which) { onBackPressed(); } }) @@ -91,35 +79,25 @@ protected void onPreExecute() { @Override protected void onPostExecute(Boolean result) { if (result) { - Log.i("DLS", "Data loaded..."); - Log.i("DLS", "Data values:\nMPU - " + mpu + "\nRD - " + retrievedData.toString() + "\nCARDS - " + cardsData.toString() + "\nBTCPRICE - " + btcPrice.toString()); - /*if (DataLoaderScreen.this.progressDialog != null) { - DataLoaderScreen.this.progressDialog.dismiss(); - }*/ - //setContentView(R.layout.activity_main); - //completeActivityCreation(); - Intent activityMainIntent = new Intent(DataLoaderScreen.this, MainActivity.class); + Intent activityMainIntent = new Intent(DataLoaderScreen.this, + MainActivity.class); activityMainIntent.putExtra("MPU", mpu); activityMainIntent.putExtra("RD", retrievedData); activityMainIntent.putExtra("CARDS", cardsData); activityMainIntent.putExtra("BTCPRICE", btcPrice); startActivity(activityMainIntent); overridePendingTransition(R.anim.activity_in, R.anim.activity_out); - //DataLoaderScreen.this.finish(); } else { - Log.i("DLS", "Data non-loaded..."); - /*if (progressDialog != null) { - progressDialog.dismiss(); - }*/ new MaterialDialog.Builder(DataLoaderScreen.this) .positiveText(R.string.accept) .cancelable(false) .title(R.string.errorLoading) - .content(R.string.errorLoadingDescription, true) + .content(R.string.errorLoadingDescription, + true) .onPositive(new MaterialDialog.SingleButtonCallback() { @Override - public void onClick(@NonNull MaterialDialog dialog, @NonNull DialogAction which) { - //closeApp(); + public void onClick(@NonNull MaterialDialog dialog, + @NonNull DialogAction which) { DataLoaderScreen.this.onBackPressed(); } }) @@ -150,7 +128,8 @@ private JSONObject getHTTPSRequest(String requestUrl) throws Exception { URL urlObject = new URL(requestUrl); HttpsURLConnection connection = (HttpsURLConnection) urlObject.openConnection(); connection.setRequestMethod("GET"); - BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(connection.getInputStream())); + BufferedReader bufferedReader = new BufferedReader( + new InputStreamReader(connection.getInputStream())); String line; while ((line = bufferedReader.readLine()) != null) { @@ -165,21 +144,15 @@ private void getBitCoinMarketPrice() { @Override public void run() { Log.d(Constants.LOG.MATAG, Constants.LOG.LOADING_MPU); - /*net market = new net(); - market.execute(Constants.STATS_URL); - try { - mpu = round((float) market.get().getDouble(Constants.MARKET_NAME), 2); - } catch (InterruptedException | ExecutionException | JSONException e) { - Log.e(Constants.LOG.MATAG, Constants.LOG.MARKET_PRICE_ERROR + e.getMessage()); - mpu = -1; - }*/ try { - mpu = round((float) getHTTPSRequest(Constants.STATS_URL).getDouble(Constants.MARKET_NAME), 2); - //progressDialog.setProgress(progressDialog.getCurrentProgress() + 20); + mpu = round((float) getHTTPSRequest(Constants.STATS_URL) + .getDouble(Constants.MARKET_NAME), 2); } catch (Exception e) { - Log.e(Constants.LOG.MATAG, Constants.LOG.MARKET_PRICE_ERROR + e.getMessage()); + Log.e(Constants.LOG.MATAG, + Constants.LOG.MARKET_PRICE_ERROR + e.getMessage()); mpu = -1; - throw new DataLoaderException("Failed to get data from: " + Constants.STATS_URL); + throw new DataLoaderException( + "Failed to get data from: " + Constants.STATS_URL); } } }); @@ -190,20 +163,12 @@ private void getPoolsData() { poolsDataThread = new Thread(new Runnable() { @Override public void run() { - int days = BitCoinApp.getSharedPreferences().getInt(Constants.SHARED_PREFERENCES.DAYS_TO_CHECK, 1); + int days = BitCoinApp.getSharedPreferences() + .getInt(Constants.SHARED_PREFERENCES.DAYS_TO_CHECK, 1); Log.d(Constants.LOG.MATAG, Constants.LOG.LOADING_RD); String url = Constants.POOLS_URL + days + "days"; - /*net httpsResponse = new net(); - httpsResponse.execute(url); - try { - RETRIEVED_DATA = JSONTools.sortByValue(JSONTools.convert2HashMap(httpsResponse.get())); - } catch (InterruptedException | ExecutionException e) { - RETRIEVED_DATA = null; - Log.e(Constants.LOG.MATAG, Constants.LOG.DATA_ERROR + e.getMessage()); - }*/ try { retrievedData = JSONTools.convert2HashMap(getHTTPSRequest(url)); - //progressDialog.setProgress(progressDialog.getCurrentProgress() + 20); } catch (Exception e) { retrievedData = null; Log.e(Constants.LOG.MATAG, Constants.LOG.DATA_ERROR + e.getMessage()); @@ -218,23 +183,13 @@ private void getCardsData() { cardsDataThread = new Thread(new Runnable() { @Override public void run() { - /*net httpsResponse = new net(); - Map cardsData = new LinkedHashMap<>(); - httpsResponse.execute(STATS_URL); - try { - cardsData = JSONTools.sortByValue(JSONTools.convert2HashMap(httpsResponse.get())); - } catch (InterruptedException | ExecutionException e) { - cardsData = null; - Log.e(Constants.LOG.MATAG, Constants.LOG.DATA_ERROR + e.getMessage()); - Crashlytics.logException(e); - }*/ try { cardsData = JSONTools.convert2HashMap(getHTTPSRequest(Constants.STATS_URL)); - //progressDialog.setProgress(progressDialog.getCurrentProgress() + 20); } catch (Exception e) { cardsData = null; Log.e(Constants.LOG.MATAG, Constants.LOG.DATA_ERROR + e.getMessage()); - throw new DataLoaderException("Unable to get data from: " + Constants.STATS_URL); + throw new DataLoaderException( + "Unable to get data from: " + Constants.STATS_URL); } } }); @@ -245,73 +200,19 @@ private void getBitCoinPriceHistory() { btcPriceThread = new Thread(new Runnable() { @Override public void run() { - /*net httpsResponse = new net(); - httpsResponse.execute(REQUEST_URL); try { - BTCPRICE = JSONTools.sortDateByValue(JSONTools.convert2DateHashMap(httpsResponse.get().getJSONObject("bpi"))); - } catch (InterruptedException | ExecutionException | JSONException e) { - BTCPRICE = null; - Log.e(Constants.LOG.MATAG, Constants.LOG.DATA_ERROR + e.getMessage()); - }*/ - try { - btcPrice = JSONTools.convert2DateHashMap(getHTTPSRequest(Constants.API_URL).getJSONObject("bpi")); - //progressDialog.setProgress(progressDialog.getCurrentProgress() + 20); + btcPrice = JSONTools.convert2DateHashMap(getHTTPSRequest(Constants.API_URL) + .getJSONObject("bpi")); } catch (Exception e) { btcPrice = null; Log.e(Constants.LOG.MATAG, Constants.LOG.DATA_ERROR + e.getMessage()); - throw new DataLoaderException("Unable to get data from: " + Constants.API_URL); + throw new DataLoaderException( + "Unable to get data from: " + Constants.API_URL); } } }); btcPriceThread.start(); } - - /*private void completeActivityCreation() { - if (BitCoinApp.getSharedPreferences().contains(Constants.SHARED_PREFERENCES.APP_VERSION)) { - if (!BitCoinApp.getSharedPreferences().getString(Constants.SHARED_PREFERENCES.APP_VERSION, "1.0").equals(BitCoinApp.appVersion())) { - new MaterialDialog.Builder(DataLoaderScreen.this) - .title("Changelog") - .content(R.string.changelog, true) - .cancelable(true) - .positiveText(R.string.accept) - .build().show(); - SharedPreferences.Editor editor = BitCoinApp.getSharedPreferences().edit(); - editor.putString(Constants.SHARED_PREFERENCES.APP_VERSION, BitCoinApp.appVersion()); - editor.apply(); - } - } else { - new MaterialDialog.Builder(MainActivity.this) - .title("Changelog") - .content(R.string.changelog, true) - .cancelable(true) - .positiveText(R.string.accept) - .build().show(); - SharedPreferences.Editor editor = BitCoinApp.getSharedPreferences().edit(); - editor.putString(Constants.SHARED_PREFERENCES.APP_VERSION, BitCoinApp.appVersion()); - editor.apply(); - } - - Log.d(Constants.LOG.MATAG, Constants.LOG.INIT_VALUES); - checkPermissions(); - CheckUpdates ck = new CheckUpdates(Constants.GITHUB_USER, Constants.GITHUB_REPO); - - MainActivity.SectionsPagerAdapter mSectionsPagerAdapter = new MainActivity.SectionsPagerAdapter(getSupportFragmentManager()); - MAINACTIVITY_TOOLBAR = findViewById(R.id.toolbar); - setSupportActionBar(MAINACTIVITY_TOOLBAR); - - ViewPager viewPager = findViewById(R.id.viewContainer); - viewPager.setAdapter(mSectionsPagerAdapter); - - TabLayout tabLayout = findViewById(R.id.tabs); - setupTabs(tabLayout); - viewPager.addOnPageChangeListener(new TabLayout.TabLayoutOnPageChangeListener(tabLayout)); - tabLayout.addOnTabSelectedListener(new TabLayout.ViewPagerOnTabSelectedListener(viewPager)); - - Log.d(Constants.LOG.MATAG, Constants.LOG.CREATING_CHART); - - Log.d(Constants.LOG.MATAG, Constants.LOG.LISTENING); - ck.checkForUpdates(MainActivity.this, getString(R.string.updateAvailable), getString(R.string.updateDescrip), getString(R.string.updateNow), getString(R.string.updateLater), getString(R.string.updatePage));*/ - //} } class DataLoaderException extends RuntimeException { diff --git a/app/src/main/java/javinator9889/bitcoinpools/FragmentViews/CardsAdapter.java b/app/src/main/java/javinator9889/bitcoinpools/FragmentViews/CardsAdapter.java index 9fcc49c..6788009 100644 --- a/app/src/main/java/javinator9889/bitcoinpools/FragmentViews/CardsAdapter.java +++ b/app/src/main/java/javinator9889/bitcoinpools/FragmentViews/CardsAdapter.java @@ -3,6 +3,7 @@ import android.annotation.SuppressLint; import android.content.Context; import android.graphics.Color; +import android.support.annotation.NonNull; import android.support.v7.widget.RecyclerView; import android.view.LayoutInflater; import android.view.View; @@ -45,27 +46,31 @@ public class MyViewHolder extends RecyclerView.ViewHolder { this.btcData = btcData; } + @NonNull @Override - public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { - View itemView = LayoutInflater.from(parent.getContext()).inflate(R.layout.bitcoin_card, parent, false); + public MyViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { + View itemView = LayoutInflater.from(parent.getContext()).inflate(R.layout.bitcoin_card, + parent, false); return new MyViewHolder(itemView); } @Override - public void onBindViewHolder(final MyViewHolder holder, @SuppressLint("RecyclerView") final int position) { + public void onBindViewHolder(@NonNull final MyViewHolder holder, + @SuppressLint("RecyclerView") final int position) { final CardsContent content = btcData.get(position); holder.title.setText(content.getTitle()); holder.body.setText(content.getBody()); - DecimalFormat decimalFormat = new DecimalFormat("#.##", new DecimalFormatSymbols(Locale.US)); + DecimalFormat decimalFormat = new DecimalFormat("#.##", + new DecimalFormatSymbols(Locale.US)); if (content.getOldData() == null) holder.oldData.setText(""); else { - //holder.oldData.setText(content.getOldData()); switch (position) { case 0: - float newPrice = Float.parseFloat(content.getBody().replaceAll("[^\\d.]", "")); - float oldPrice = Float.parseFloat(decimalFormat.format(Float.parseFloat(content.getOldData()))); - System.out.println("Comparing: " + newPrice + " | " + oldPrice); + float newPrice = Float.parseFloat( + content.getBody().replaceAll("[^\\d.]", "")); + float oldPrice = Float.parseFloat( + decimalFormat.format(Float.parseFloat(content.getOldData()))); float pricePercentage = percentageCalculator(newPrice, oldPrice); switch (Float.compare(pricePercentage, 0f)) { case 0: @@ -75,20 +80,23 @@ public void onBindViewHolder(final MyViewHolder holder, @SuppressLint("RecyclerV String positiveText = "+" + decimalFormat.format(pricePercentage) + "%"; holder.oldData.setText(positiveText); holder.oldData.setTextColor(Color.GREEN); - holder.oldData.setCompoundDrawablesWithIntrinsicBounds(R.drawable.ic_green_arrow_up_darker, 0, 0, 0); + holder.oldData.setCompoundDrawablesWithIntrinsicBounds( + R.drawable.ic_green_arrow_up_darker, 0, 0, 0); break; case -1: String negativeText = decimalFormat.format(pricePercentage) + "%"; holder.oldData.setText(negativeText); holder.oldData.setTextColor(Color.RED); - holder.oldData.setCompoundDrawablesWithIntrinsicBounds(R.drawable.ic_red_arrow_down, 0, 0, 0); + holder.oldData.setCompoundDrawablesWithIntrinsicBounds( + R.drawable.ic_red_arrow_down, 0, 0, 0); break; } break; case 1: - float newPower = Float.parseFloat(content.getBody().replaceAll("[^\\d.]", "")); - float oldPower = Float.parseFloat(decimalFormat.format(Float.parseFloat(content.getOldData()))); - System.out.println("Comparing: " + newPower + " | " + oldPower); + float newPower = Float.parseFloat( + content.getBody().replaceAll("[^\\d.]", "")); + float oldPower = Float.parseFloat( + decimalFormat.format(Float.parseFloat(content.getOldData()))); float powerPercentage = percentageCalculator(newPower, oldPower); switch (Float.compare(powerPercentage, 0f)) { case 0: @@ -98,20 +106,23 @@ public void onBindViewHolder(final MyViewHolder holder, @SuppressLint("RecyclerV String positiveText = "+" + decimalFormat.format(powerPercentage) + "%"; holder.oldData.setText(positiveText); holder.oldData.setTextColor(Color.GREEN); - holder.oldData.setCompoundDrawablesWithIntrinsicBounds(R.drawable.ic_green_arrow_up_darker, 0, 0, 0); + holder.oldData.setCompoundDrawablesWithIntrinsicBounds( + R.drawable.ic_green_arrow_up_darker, 0, 0, 0); break; case -1: String negativeText = decimalFormat.format(powerPercentage) + "%"; holder.oldData.setText(negativeText); holder.oldData.setTextColor(Color.RED); - holder.oldData.setCompoundDrawablesWithIntrinsicBounds(R.drawable.ic_red_arrow_down, 0, 0, 0); + holder.oldData.setCompoundDrawablesWithIntrinsicBounds( + R.drawable.ic_red_arrow_down, 0, 0, 0); break; } break; case 2: - float newDifficulty = Float.parseFloat(content.getBody().replaceAll("[^\\d.]", "")); - float oldDifficulty = Float.parseFloat(decimalFormat.format(Float.parseFloat(content.getOldData()))); - System.out.println("Comparing: " + newDifficulty + " | " + oldDifficulty); + float newDifficulty = Float.parseFloat( + content.getBody().replaceAll("[^\\d.]", "")); + float oldDifficulty = Float.parseFloat( + decimalFormat.format(Float.parseFloat(content.getOldData()))); float difficultyPercentage; float result = percentageCalculator(newDifficulty, oldDifficulty); if (result == 0) @@ -123,23 +134,29 @@ public void onBindViewHolder(final MyViewHolder holder, @SuppressLint("RecyclerV holder.oldData.setText("0%"); break; case 1: - String positiveText = "+" + decimalFormat.format(difficultyPercentage) + "%"; + String positiveText = "+" + decimalFormat + .format(difficultyPercentage) + "%"; holder.oldData.setText(positiveText); holder.oldData.setTextColor(Color.GREEN); - holder.oldData.setCompoundDrawablesWithIntrinsicBounds(R.drawable.ic_green_arrow_up_darker, 0, 0, 0); + holder.oldData.setCompoundDrawablesWithIntrinsicBounds( + R.drawable.ic_green_arrow_up_darker, 0, 0, 0); break; case -1: - String negativeText = decimalFormat.format(- difficultyPercentage) + "%"; + String negativeText = decimalFormat + .format(- difficultyPercentage) + "%"; holder.oldData.setText(negativeText); holder.oldData.setTextColor(Color.RED); - holder.oldData.setCompoundDrawablesWithIntrinsicBounds(R.drawable.ic_red_arrow_down, 0, 0, 0); + holder.oldData.setCompoundDrawablesWithIntrinsicBounds( + R.drawable.ic_red_arrow_down, 0, 0, 0); break; } break; case 3: - float newBlock = Float.parseFloat(content.getBody().replaceAll("[^\\d.]", "")); - float oldBlock = Float.parseFloat(decimalFormat.format(Float.parseFloat(content.getOldData()) / 10)); - System.out.println("Comparing: " + newBlock + " | " + oldBlock); + float newBlock = Float.parseFloat( + content.getBody().replaceAll("[^\\d.]", "")); + float oldBlock = Float.parseFloat( + decimalFormat.format(Float.parseFloat( + content.getOldData()) / 10)); float blockPercentage = percentageCalculator(newBlock, oldBlock); switch (Float.compare(blockPercentage, 0f)) { case 0: @@ -149,20 +166,23 @@ public void onBindViewHolder(final MyViewHolder holder, @SuppressLint("RecyclerV String positiveText = "+" + decimalFormat.format(blockPercentage) + "%"; holder.oldData.setText(positiveText); holder.oldData.setTextColor(Color.GREEN); - holder.oldData.setCompoundDrawablesWithIntrinsicBounds(R.drawable.ic_green_arrow_up_darker, 0, 0, 0); + holder.oldData.setCompoundDrawablesWithIntrinsicBounds( + R.drawable.ic_green_arrow_up_darker, 0, 0, 0); break; case -1: String negativeText = decimalFormat.format(blockPercentage) + "%"; holder.oldData.setText(negativeText); holder.oldData.setTextColor(Color.RED); - holder.oldData.setCompoundDrawablesWithIntrinsicBounds(R.drawable.ic_red_arrow_down, 0, 0, 0); + holder.oldData.setCompoundDrawablesWithIntrinsicBounds( + R.drawable.ic_red_arrow_down, 0, 0, 0); break; } break; case 4: - float newMinutes = Float.parseFloat(content.getBody().replaceAll("[^\\d.]", "")); - float oldMinutes = Float.parseFloat(decimalFormat.format(Float.parseFloat(content.getOldData()))); - System.out.println("Comparing: " + newMinutes + " | " + oldMinutes); + float newMinutes = Float.parseFloat( + content.getBody().replaceAll("[^\\d.]", "")); + float oldMinutes = Float.parseFloat( + decimalFormat.format(Float.parseFloat(content.getOldData()))); float minutesPercentage; float resultMinutes = percentageCalculator(newMinutes, oldMinutes); if (resultMinutes == 0) @@ -174,23 +194,28 @@ public void onBindViewHolder(final MyViewHolder holder, @SuppressLint("RecyclerV holder.oldData.setText("0%"); break; case 1: - String positiveText = "+" + decimalFormat.format(minutesPercentage) + "%"; + String positiveText = "+" + decimalFormat + .format(minutesPercentage) + "%"; holder.oldData.setText(positiveText); holder.oldData.setTextColor(Color.GREEN); - holder.oldData.setCompoundDrawablesWithIntrinsicBounds(R.drawable.ic_green_arrow_up_darker, 0, 0, 0); + holder.oldData.setCompoundDrawablesWithIntrinsicBounds( + R.drawable.ic_green_arrow_up_darker, 0, 0, 0); break; case -1: String negativeText = decimalFormat.format(minutesPercentage) + "%"; holder.oldData.setText(negativeText); holder.oldData.setTextColor(Color.RED); - holder.oldData.setCompoundDrawablesWithIntrinsicBounds(R.drawable.ic_red_arrow_down, 0, 0, 0); + holder.oldData.setCompoundDrawablesWithIntrinsicBounds( + R.drawable.ic_red_arrow_down, 0, 0, 0); break; } break; case 5: - float newBtcFees = Float.parseFloat(content.getBody().replaceAll("[^\\d.]", "")); - float oldBtcFees = Float.parseFloat(decimalFormat.format(Float.parseFloat(content.getOldData()) / 10000000)); - System.out.println("Comparing: " + newBtcFees + " | " + oldBtcFees); + float newBtcFees = Float.parseFloat( + content.getBody().replaceAll("[^\\d.]", "")); + float oldBtcFees = Float.parseFloat( + decimalFormat.format(Float.parseFloat( + content.getOldData()) / 10000000)); float feePercentage; float resultFees = percentageCalculator(newBtcFees, oldBtcFees); if (resultFees == 0) @@ -205,20 +230,23 @@ public void onBindViewHolder(final MyViewHolder holder, @SuppressLint("RecyclerV String positiveText = "+" + decimalFormat.format(feePercentage) + "%"; holder.oldData.setText(positiveText); holder.oldData.setTextColor(Color.GREEN); - holder.oldData.setCompoundDrawablesWithIntrinsicBounds(R.drawable.ic_green_arrow_up_darker, 0, 0, 0); + holder.oldData.setCompoundDrawablesWithIntrinsicBounds( + R.drawable.ic_green_arrow_up_darker, 0, 0, 0); break; case -1: String negativeText = decimalFormat.format(feePercentage) + "%"; holder.oldData.setText(negativeText); holder.oldData.setTextColor(Color.RED); - holder.oldData.setCompoundDrawablesWithIntrinsicBounds(R.drawable.ic_red_arrow_down, 0, 0, 0); + holder.oldData.setCompoundDrawablesWithIntrinsicBounds( + R.drawable.ic_red_arrow_down, 0, 0, 0); break; } break; case 6: - float newTrans = Float.parseFloat(content.getBody().replaceAll("[^\\d.]", "")); - float oldTrans = Float.parseFloat(decimalFormat.format(Float.parseFloat(content.getOldData()))); - System.out.println("Comparing: " + newTrans + " | " + oldTrans); + float newTrans = Float.parseFloat( + content.getBody().replaceAll("[^\\d.]", "")); + float oldTrans = Float.parseFloat( + decimalFormat.format(Float.parseFloat(content.getOldData()))); float transPercentage = percentageCalculator(newTrans, oldTrans); switch (Float.compare(transPercentage, 0f)) { case 0: @@ -228,36 +256,43 @@ public void onBindViewHolder(final MyViewHolder holder, @SuppressLint("RecyclerV String positiveText = "+" + decimalFormat.format(transPercentage) + "%"; holder.oldData.setText(positiveText); holder.oldData.setTextColor(Color.GREEN); - holder.oldData.setCompoundDrawablesWithIntrinsicBounds(R.drawable.ic_green_arrow_up_darker, 0, 0, 0); + holder.oldData.setCompoundDrawablesWithIntrinsicBounds( + R.drawable.ic_green_arrow_up_darker, 0, 0, 0); break; case -1: String negativeText = decimalFormat.format(transPercentage) + "%"; holder.oldData.setText(negativeText); holder.oldData.setTextColor(Color.RED); - holder.oldData.setCompoundDrawablesWithIntrinsicBounds(R.drawable.ic_red_arrow_down, 0, 0, 0); + holder.oldData.setCompoundDrawablesWithIntrinsicBounds( + R.drawable.ic_red_arrow_down, 0, 0, 0); break; } break; case 7: - float newBenefit = Float.parseFloat(content.getBody().replaceAll("[^\\d.]", "")); - float oldBenefit = Float.parseFloat(decimalFormat.format(Float.parseFloat(content.getOldData()) / 100)); - System.out.println("Comparing: " + newBenefit + " | " + oldBenefit); + float newBenefit = Float.parseFloat( + content.getBody().replaceAll("[^\\d.]", "")); + float oldBenefit = Float.parseFloat( + decimalFormat.format(Float.parseFloat( + content.getOldData()) / 100)); float benefitPercentage = percentageCalculator(newBenefit, oldBenefit); switch (Float.compare(benefitPercentage, 0f)) { case 0: holder.oldData.setText("0%"); break; case 1: - String positiveText = "+" + decimalFormat.format(benefitPercentage) + "%"; + String positiveText = "+" + decimalFormat + .format(benefitPercentage) + "%"; holder.oldData.setText(positiveText); holder.oldData.setTextColor(Color.GREEN); - holder.oldData.setCompoundDrawablesWithIntrinsicBounds(R.drawable.ic_green_arrow_up_darker, 0, 0, 0); + holder.oldData.setCompoundDrawablesWithIntrinsicBounds( + R.drawable.ic_green_arrow_up_darker, 0, 0, 0); break; case -1: String negativeText = decimalFormat.format(benefitPercentage) + "%"; holder.oldData.setText(negativeText); holder.oldData.setTextColor(Color.RED); - holder.oldData.setCompoundDrawablesWithIntrinsicBounds(R.drawable.ic_red_arrow_down, 0, 0, 0); + holder.oldData.setCompoundDrawablesWithIntrinsicBounds( + R.drawable.ic_red_arrow_down, 0, 0, 0); break; } break; diff --git a/app/src/main/java/javinator9889/bitcoinpools/FragmentViews/CustomMarkerView.java b/app/src/main/java/javinator9889/bitcoinpools/FragmentViews/CustomMarkerView.java index 4c493a1..602f7a0 100644 --- a/app/src/main/java/javinator9889/bitcoinpools/FragmentViews/CustomMarkerView.java +++ b/app/src/main/java/javinator9889/bitcoinpools/FragmentViews/CustomMarkerView.java @@ -1,5 +1,6 @@ package javinator9889.bitcoinpools.FragmentViews; +import android.annotation.SuppressLint; import android.content.Context; import android.widget.TextView; @@ -17,6 +18,7 @@ * Based on: https://github.com/PhilJay/MPAndroidChart/blob/master/MPChartExample/src/com/xxmassdeveloper/mpchartexample/custom/MyMarkerView.java */ +@SuppressLint("ViewConstructor") public class CustomMarkerView extends MarkerView { private TextView tvContent; @@ -29,11 +31,13 @@ public CustomMarkerView(Context context, int layoutResource) { // callbacks everytime the MarkerView is redrawn, can be used to update the // content (user-interface) + @SuppressLint("SetTextI18n") @Override public void refreshContent(Entry e, Highlight highlight) { if (e instanceof CandleEntry) { CandleEntry ce = (CandleEntry) e; - tvContent.setText("" + Utils.formatNumber(ce.getHigh(), 0, true)); + tvContent.setText("" + Utils.formatNumber(ce.getHigh(), 0, + true)); } else { tvContent.setText("" + Utils.formatNumber(e.getY(), 0, true)); } diff --git a/app/src/main/java/javinator9889/bitcoinpools/FragmentViews/DonationsActivity.java b/app/src/main/java/javinator9889/bitcoinpools/FragmentViews/DonationsActivity.java index 6017174..a22298a 100644 --- a/app/src/main/java/javinator9889/bitcoinpools/FragmentViews/DonationsActivity.java +++ b/app/src/main/java/javinator9889/bitcoinpools/FragmentViews/DonationsActivity.java @@ -35,19 +35,24 @@ public void onCreate(Bundle savedInstanceState) { setContentView(R.layout.donations_activity); if (isGooglePlayServicesAvailable(this)) { - FragmentTransaction fragmentTransaction = getSupportFragmentManager().beginTransaction(); + FragmentTransaction fragmentTransaction = getSupportFragmentManager() + .beginTransaction(); DonationsFragment donationsFragment; - donationsFragment = DonationsFragment.newInstance(BuildConfig.DEBUG, true, GOOGLE_PUBKEY, GOOGLE_CATALOG, - getResources().getStringArray(R.array.donation_google_catalog_values), false, null, null, - null, false, null, null, false, null); + donationsFragment = DonationsFragment.newInstance(BuildConfig.DEBUG, true, + GOOGLE_PUBKEY, GOOGLE_CATALOG, + getResources().getStringArray(R.array.donation_google_catalog_values), + false, null, null, + null, false, null, + null, false, null); - fragmentTransaction.replace(R.id.donations_activity_container, donationsFragment, "donationsFragment"); + fragmentTransaction.replace(R.id.donations_activity_container, donationsFragment, + "donationsFragment"); fragmentTransaction.commit(); } - Button paypalButton = findViewById(R.id.donations__paypal_modified_donate_button); - paypalButton.setOnClickListener(new View.OnClickListener() { + Button payPalButton = findViewById(R.id.donations__paypal_modified_donate_button); + payPalButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Uri uri = Uri.parse(Constants.PAYMENTS.PAYPALME); @@ -75,11 +80,13 @@ protected void onActivityResult(int requestCode, int resultCode, Intent data) { } public boolean isGooglePlayServicesAvailable(Activity activity) { - GoogleApiAvailability googleApiAvailabilityForPlayServices = GoogleApiAvailability.getInstance(); + GoogleApiAvailability googleApiAvailabilityForPlayServices = GoogleApiAvailability + .getInstance(); int status = googleApiAvailabilityForPlayServices.isGooglePlayServicesAvailable(activity); if (status != ConnectionResult.SUCCESS) { if (googleApiAvailabilityForPlayServices.isUserResolvableError(status)) { - googleApiAvailabilityForPlayServices.getErrorDialog(activity, status, 2404).show(); + googleApiAvailabilityForPlayServices.getErrorDialog(activity, status, 2404) + .show(); } return false; } diff --git a/app/src/main/java/javinator9889/bitcoinpools/FragmentViews/Tab1PoolsChart.java b/app/src/main/java/javinator9889/bitcoinpools/FragmentViews/Tab1PoolsChart.java index 34bc066..15320da 100644 --- a/app/src/main/java/javinator9889/bitcoinpools/FragmentViews/Tab1PoolsChart.java +++ b/app/src/main/java/javinator9889/bitcoinpools/FragmentViews/Tab1PoolsChart.java @@ -1,6 +1,5 @@ package javinator9889.bitcoinpools.FragmentViews; -import android.content.Context; import android.graphics.Typeface; import android.os.Bundle; import android.os.Handler; @@ -23,25 +22,16 @@ import com.github.mikephil.charting.data.PieEntry; import com.github.mikephil.charting.utils.ColorTemplate; -import org.json.JSONException; - import java.util.ArrayList; import java.util.HashMap; import java.util.LinkedHashMap; import java.util.List; import java.util.Map; -import java.util.concurrent.ExecutionException; -import javinator9889.bitcoinpools.BitCoinApp; import javinator9889.bitcoinpools.Constants; -import javinator9889.bitcoinpools.DataLoaderScreen; -import javinator9889.bitcoinpools.JSONTools.JSONTools; import javinator9889.bitcoinpools.MainActivity; -import javinator9889.bitcoinpools.NetTools.net; import javinator9889.bitcoinpools.R; -import static javinator9889.bitcoinpools.MainActivity.round; - /** * Created by Javinator9889 on 28/01/2018. * Creates view for main chart (pools chart) @@ -51,17 +41,14 @@ public class Tab1PoolsChart extends Fragment { private static Map RETRIEVED_DATA = new LinkedHashMap<>(); private static ViewGroup.LayoutParams TABLE_PARAMS; private static float MARKET_PRICE_USD; - private Thread rdThread; private Thread tableThread; - private Thread mpuThread; public Tab1PoolsChart() { } + @SuppressWarnings("unchecked") public static Tab1PoolsChart newInstance(Object... params) { Bundle args = new Bundle(); - System.out.println(Float.valueOf(String.valueOf(params[0]))); - System.out.println(((HashMap) params[1]).toString()); args.putFloat("MPU", Float.valueOf(String.valueOf(params[0]))); args.putSerializable("RD", (HashMap) params[1]); Tab1PoolsChart fragment = new Tab1PoolsChart(); @@ -69,6 +56,7 @@ public static Tab1PoolsChart newInstance(Object... params) { return fragment; } + @SuppressWarnings("unchecked") @Override public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { @@ -76,30 +64,14 @@ public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container, final PieChart chart = createdView.findViewById(R.id.chart); final TableLayout tableLayout = createdView.findViewById(R.id.poolstable); - - /*initRD(); - initT(createdView); - initMPU(); - - createPieChart(chart); - createTable(tableLayout, createdView); - - try { - tableThread.join(); - mpuThread.join(); - return createdView; - } catch (InterruptedException e) { - e.printStackTrace(); - return null; - }*/ MARKET_PRICE_USD = getArguments().getFloat("MPU"); RETRIEVED_DATA = (HashMap) getArguments().getSerializable("RD"); + initT(createdView); createPieChart(chart); createTable(tableLayout, createdView); try { tableThread.join(); - //DataLoaderScreen.progressDialog.setProgress(DataLoaderScreen.progressDialog.getCurrentProgress() + 10); return createdView; } catch (InterruptedException e) { e.printStackTrace(); @@ -129,12 +101,14 @@ private void createPieChart(final PieChart destinationChart) { public void run() { Log.d(Constants.LOG.MATAG, Constants.LOG.LOADING_CHART); List values = new ArrayList<>(); - List> entryList = new ArrayList<>(RETRIEVED_DATA.entrySet()); + List> entryList = new ArrayList<>( + RETRIEVED_DATA.entrySet()); Map.Entry getEntry; int count = 0; for (int i = entryList.size() - 1; (i >= 0) && (count < 10); --i) { getEntry = entryList.get(i); - Log.i(Constants.LOG.MATAG, "Accessing at: " + i + " | Key: " + getEntry.getKey() + " | Value: " + getEntry.getValue()); + Log.i(Constants.LOG.MATAG, "Accessing at: " + i + " | Key: " + + getEntry.getKey() + " | Value: " + getEntry.getValue()); values.add(new PieEntry(getEntry.getValue(), getEntry.getKey())); ++count; } @@ -160,7 +134,8 @@ private void createTable(final TableLayout destinationTable, final View view) { tableThread = new Thread() { public void run() { Log.d(Constants.LOG.MATAG, Constants.LOG.LOADING_TABLE); - List> entryList = new ArrayList<>(RETRIEVED_DATA.entrySet()); + List> entryList = new ArrayList<>( + RETRIEVED_DATA.entrySet()); Map.Entry getEntry; int count = 1; @@ -205,56 +180,12 @@ public void run() { destinationTable.invalidate(); } }; - /*try { - rdThread.join(); - } catch (InterruptedException e) { - Log.e(Constants.LOG.MATAG, Constants.LOG.JOIN_ERROR + rdThread.getName()); - } finally {*/ - tableThread.setName("table_thread"); - tableThread.start(); - //} - } - - private void initRD() { - rdThread = new Thread() { - public void run() { - int days = BitCoinApp.getSharedPreferences().getInt(Constants.SHARED_PREFERENCES.DAYS_TO_CHECK, 1); - Log.d(Constants.LOG.MATAG, Constants.LOG.LOADING_RD); - String url = Constants.POOLS_URL + days + "days"; - net httpsResponse = new net(); - httpsResponse.execute(url); - try { - RETRIEVED_DATA = JSONTools.sortByValue(JSONTools.convert2HashMap(httpsResponse.get())); - } catch (InterruptedException | ExecutionException e) { - RETRIEVED_DATA = null; - Log.e(Constants.LOG.MATAG, Constants.LOG.DATA_ERROR + e.getMessage()); - } - } - }; - rdThread.setName("rd_thread"); - rdThread.start(); + tableThread.setName("table_thread"); + tableThread.start(); } private void initT(View view) { TableRow masterRow = view.findViewById(R.id.masterRow); TABLE_PARAMS = masterRow.getLayoutParams(); } - - private void initMPU() { - mpuThread = new Thread() { - public void run() { - Log.d(Constants.LOG.MATAG, Constants.LOG.LOADING_MPU); - net market = new net(); - market.execute(Constants.STATS_URL); - try { - MARKET_PRICE_USD = round((float) market.get().getDouble(Constants.MARKET_NAME), 2); - } catch (InterruptedException | ExecutionException | JSONException e) { - Log.e(Constants.LOG.MATAG, Constants.LOG.MARKET_PRICE_ERROR + e.getMessage()); - MARKET_PRICE_USD = 0; - } - } - }; - mpuThread.setName("mpu_thread"); - mpuThread.start(); - } } diff --git a/app/src/main/java/javinator9889/bitcoinpools/FragmentViews/Tab2BTCChart.java b/app/src/main/java/javinator9889/bitcoinpools/FragmentViews/Tab2BTCChart.java index a53d4f9..658f46e 100644 --- a/app/src/main/java/javinator9889/bitcoinpools/FragmentViews/Tab2BTCChart.java +++ b/app/src/main/java/javinator9889/bitcoinpools/FragmentViews/Tab2BTCChart.java @@ -11,6 +11,7 @@ import android.os.Bundle; import android.os.Handler; import android.support.annotation.NonNull; +import android.support.annotation.Nullable; import android.support.constraint.ConstraintLayout; import android.support.v4.app.Fragment; import android.support.v4.content.ContextCompat; @@ -27,7 +28,6 @@ import android.widget.DatePicker; import android.widget.TextView; -import com.crashlytics.android.Crashlytics; import com.github.mikephil.charting.charts.LineChart; import com.github.mikephil.charting.data.Entry; import com.github.mikephil.charting.data.LineData; @@ -45,7 +45,6 @@ import java.util.Calendar; import java.util.Date; import java.util.HashMap; -import java.util.Iterator; import java.util.LinkedHashMap; import java.util.List; import java.util.Locale; @@ -55,7 +54,6 @@ import javinator9889.bitcoinpools.BitCoinApp; import javinator9889.bitcoinpools.CacheManaging; import javinator9889.bitcoinpools.Constants; -import javinator9889.bitcoinpools.DataLoaderScreen; import javinator9889.bitcoinpools.JSONTools.JSONTools; import javinator9889.bitcoinpools.MainActivity; import javinator9889.bitcoinpools.NetTools.net; @@ -83,13 +81,13 @@ public class Tab2BTCChart extends Fragment implements DatePickerDialog.OnDateSet private boolean date_set = false; private List cardsContents; + public Tab2BTCChart() { } + @SuppressWarnings("unchecked") public static Tab2BTCChart newInstance(Object... params) { Bundle args = new Bundle(); - System.out.println(((HashMap) params[0]).toString()); - System.out.println(((HashMap) params[1]).toString()); args.putSerializable("CARDS", (HashMap) params[0]); args.putSerializable("BTCPRICE", (HashMap) params[1]); Tab2BTCChart fragment = new Tab2BTCChart(); @@ -97,9 +95,10 @@ public static Tab2BTCChart newInstance(Object... params) { return fragment; } - @SuppressLint("SimpleDateFormat") + @SuppressWarnings("unchecked") @Override - public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { + public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container, + Bundle savedInstanceState) { DisplayMetrics dp = this.getResources().getDisplayMetrics(); float dpHeight = dp.heightPixels; @@ -115,18 +114,20 @@ public void onClick(View v) { REQUEST_URL = API_URL; - //setupValues(); BTCPRICE = (HashMap) getArguments().getSerializable("BTCPRICE"); - this.cardsContentData = (HashMap) getArguments().getSerializable("CARDS"); + this.cardsContentData = (HashMap) getArguments() + .getSerializable("CARDS"); cardsContents = new ArrayList<>(); CardsAdapter adapter = new CardsAdapter(getContext(), cardsContents); DESTINATIONLINECHART = createdView.findViewById(R.id.lineChart); RecyclerView recyclerView = createdView.findViewById(R.id.recycler_view); - RecyclerView.LayoutManager layoutManager = new GridLayoutManager(createdView.getContext(), 1); + RecyclerView.LayoutManager layoutManager = new GridLayoutManager(createdView.getContext(), + 1); recyclerView.setLayoutManager(layoutManager); - recyclerView.addItemDecoration(new GridSpacingItemDecoration(2, dpToPx(10), true)); + recyclerView.addItemDecoration(new GridSpacingItemDecoration(2, + dpToPx(10), true)); recyclerView.setItemAnimator(new DefaultItemAnimator()); recyclerView.setAdapter(adapter); recyclerView.setNestedScrollingEnabled(false); @@ -139,7 +140,8 @@ public void onClick(View v) { a.recycle(); int FINALDP = (int) ((dpHeight - size) * 0.7); - ConstraintLayout.LayoutParams lp = (ConstraintLayout.LayoutParams) DESTINATIONLINECHART.getLayoutParams(); + ConstraintLayout.LayoutParams lp = (ConstraintLayout.LayoutParams) + DESTINATIONLINECHART.getLayoutParams(); lp.height = FINALDP; lp.matchConstraintMaxHeight = (int) dpHeight; DESTINATIONLINECHART.setLayoutParams(lp); @@ -161,17 +163,17 @@ public void onClick(View v) { longPressInfo = getString(R.string.longclick); ((TextView) createdView.findViewById(R.id.longPressInfo)).setText(longPressInfo); return createdView; - }/* finally { - //DataLoaderScreen.progressDialog.setProgress(DataLoaderScreen.progressDialog.getCurrentProgress() + 10); - }*/ + } } private void setupValues() { net httpsResponse = new net(); httpsResponse.execute(REQUEST_URL); try { - BTCPRICE = JSONTools.sortDateByValue(JSONTools.convert2DateHashMap(httpsResponse.get().getJSONObject("bpi"))); - } catch (InterruptedException | ExecutionException | JSONException e) { + BTCPRICE = JSONTools.sortDateByValue(JSONTools.convert2DateHashMap( + httpsResponse.get().getJSONObject("bpi"))); + } catch (InterruptedException | ExecutionException | + JSONException | NullPointerException e) { BTCPRICE = null; Log.e(Constants.LOG.MATAG, Constants.LOG.DATA_ERROR + e.getMessage()); } @@ -180,8 +182,6 @@ private void setupValues() { @Override public void setUserVisibleHint(boolean isVisibleToUser) { super.setUserVisibleHint(isVisibleToUser); - System.out.println(lineChartCreated); - System.out.println("Is view visible for user? " + isVisibleToUser); if (isVisibleToUser && !lineChartCreated) { createLineChart(DESTINATIONLINECHART, FRAGMENT_CONTEXT); } @@ -189,7 +189,8 @@ public void setUserVisibleHint(boolean isVisibleToUser) { MainActivity.MAINACTIVITY_TOOLBAR.setTitle(getString(R.string.btcinfo)); } - private void createLineChart(@NonNull final LineChart destinationChart, @NonNull final Context fragmentContext) { + private void createLineChart(@NonNull final LineChart destinationChart, + @NonNull final Context fragmentContext) { new Handler().postDelayed(new Runnable() { @Override public void run() { @@ -209,7 +210,8 @@ public void run() { ++i; } LineDataSet lineDataSet; - if ((destinationChart.getData() != null) && (destinationChart.getData().getDataSetCount() > 0)) { + if ((destinationChart.getData() != null) && + (destinationChart.getData().getDataSetCount() > 0)) { lineDataSet = (LineDataSet) destinationChart.getData().getDataSetByIndex(0); lineDataSet.setValues(values); destinationChart.getData().notifyDataChanged(); @@ -227,10 +229,12 @@ public void run() { lineDataSet.setValueTextSize(9f); lineDataSet.setDrawFilled(true); lineDataSet.setFormLineWidth(1f); - lineDataSet.setFormLineDashEffect(new DashPathEffect(new float[]{10f, 5f}, 0f)); + lineDataSet.setFormLineDashEffect(new DashPathEffect(new float[]{10f, 5f}, + 0f)); lineDataSet.setFormSize(15.f); lineDataSet.setMode(LineDataSet.Mode.CUBIC_BEZIER); - lineDataSet.setFillDrawable(ContextCompat.getDrawable(fragmentContext, R.drawable.fade_red)); + lineDataSet.setFillDrawable(ContextCompat.getDrawable(fragmentContext, + R.drawable.fade_red)); lineDataSet.setDrawCircles(false); ArrayList dataSets = new ArrayList<>(); dataSets.add(lineDataSet); @@ -302,7 +306,12 @@ public Dialog createDialog() { } System.out.println(this.year + " " + this.month + " " + this.day); - DatePickerDialog dialog = new DatePickerDialog(getActivity(), this, this.year, this.month, this.day); + DatePickerDialog dialog = new DatePickerDialog( + getActivity(), + this, + this.year, + this.month, + this.day); calendar.add(Calendar.DATE, -1); @@ -312,11 +321,12 @@ public Dialog createDialog() { return dialog; } - @SuppressLint("SimpleDateFormat") + //@SuppressLint("SimpleDateFormat") public void forceReload() { String dateParsed = parseDate(); - REQUEST_URL = API_URL + "?start=" + dateParsed + "&end=" + new SimpleDateFormat("yyyy-MM-dd").format(Calendar.getInstance().getTime()); - System.out.println(REQUEST_URL); + REQUEST_URL = API_URL + "?start=" + dateParsed + "&end=" + + new SimpleDateFormat("yyyy-MM-dd", Locale.US) + .format(Calendar.getInstance().getTime()); setupValues(); createLineChart(DESTINATIONLINECHART, FRAGMENT_CONTEXT); } @@ -326,7 +336,6 @@ public static void setLineChartCreated() { } public class GridSpacingItemDecoration extends RecyclerView.ItemDecoration { - private int spanCount; private int spacing; private boolean includeEdge; @@ -343,71 +352,63 @@ public GridSpacingItemDecoration(int spanCount, int spacing, boolean includeEdge */ private int dpToPx(int dp) { Resources r = getResources(); - return Math.round(TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, dp, r.getDisplayMetrics())); + return Math.round(TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, dp, + r.getDisplayMetrics())); } - @SuppressLint("DefaultLocale") private void prepareCards() { - /*net httpsResponse = new net(); - Map cardsData = new LinkedHashMap<>(); - httpsResponse.execute(STATS_URL); - try { - cardsData = JSONTools.sortByValue(JSONTools.convert2HashMap(httpsResponse.get())); - } catch (InterruptedException | ExecutionException e) { - cardsData = null; - Log.e(Constants.LOG.MATAG, Constants.LOG.DATA_ERROR + e.getMessage()); - Crashlytics.logException(e); - } finally { - *///assert cardsData != null; - HashMap cachedMap = getCachedMap(this.cardsContentData); - String market_price = null; - String hash_rate = null; - String difficulty = null; - String blocks_mined = null; - String minutes = null; - String total_fees = null; - String tx = null; - String miners_revenue = null; - if (cachedMap != null) { - market_price = cachedMap.get("market_price_usd"); - hash_rate = cachedMap.get("hash_rate"); - difficulty = cachedMap.get("difficulty"); - blocks_mined = cachedMap.get("n_blocks_mined"); - minutes = cachedMap.get("minutes_between_blocks"); - total_fees = cachedMap.get("total_fees_btc"); - tx = cachedMap.get("n_tx"); - miners_revenue = cachedMap.get("miners_revenue_usd"); - System.out.println(cachedMap.toString()); - } - DecimalFormat df = new DecimalFormat("#.##", new DecimalFormatSymbols(Locale.US)); - cardsContents.add(new CardsContent(getString(R.string.market_price), - "$" + df.format(this.cardsContentData.get("market_price_usd")), - market_price)); - cardsContents.add(new CardsContent(getString(R.string.hash_rate), - df.format(this.cardsContentData.get("hash_rate")) + " GH/s", - hash_rate)); - cardsContents.add(new CardsContent(getString(R.string.difficulty), - df.format(this.cardsContentData.get("difficulty")), - difficulty)); - cardsContents.add(new CardsContent(getString(R.string.min_blocks), - df.format(this.cardsContentData.get("n_blocks_mined") / 10) + " " + getString(R.string.blocks_name), - blocks_mined)); - cardsContents.add(new CardsContent(getString(R.string.minutes_blocks), - df.format(this.cardsContentData.get("minutes_between_blocks")) + " " + getString(R.string.minutes_name), - minutes)); - cardsContents.add(new CardsContent(getString(R.string.total_fees), - df.format(this.cardsContentData.get("total_fees_btc") / 10000000) + " BTC", - total_fees)); - cardsContents.add(new CardsContent(getString(R.string.total_trans), - df.format(this.cardsContentData.get("n_tx")), - tx)); - cardsContents.add(new CardsContent(getString(R.string.min_benefit), - "$" + df.format(this.cardsContentData.get("miners_revenue_usd") / 100), - miners_revenue)); - //} + HashMap cachedMap = getCachedMap(); + String market_price = null; + String hash_rate = null; + String difficulty = null; + String blocks_mined = null; + String minutes = null; + String total_fees = null; + String tx = null; + String miners_revenue = null; + if (cachedMap != null) { + market_price = cachedMap.get("market_price_usd"); + hash_rate = cachedMap.get("hash_rate"); + difficulty = cachedMap.get("difficulty"); + blocks_mined = cachedMap.get("n_blocks_mined"); + minutes = cachedMap.get("minutes_between_blocks"); + total_fees = cachedMap.get("total_fees_btc"); + tx = cachedMap.get("n_tx"); + miners_revenue = cachedMap.get("miners_revenue_usd"); + System.out.println(cachedMap.toString()); + } + DecimalFormat df = new DecimalFormat("#.##", new DecimalFormatSymbols(Locale.US)); + cardsContents.add(new CardsContent(getString(R.string.market_price), + "$" + df.format(this.cardsContentData.get("market_price_usd")), + market_price)); + cardsContents.add(new CardsContent(getString(R.string.hash_rate), + df.format(this.cardsContentData.get("hash_rate")) + " GH/s", + hash_rate)); + cardsContents.add(new CardsContent(getString(R.string.difficulty), + df.format(this.cardsContentData.get("difficulty")), + difficulty)); + cardsContents.add(new CardsContent(getString(R.string.min_blocks), + df.format(this.cardsContentData.get("n_blocks_mined") / 10) + + " " + getString(R.string.blocks_name), + blocks_mined)); + cardsContents.add(new CardsContent(getString(R.string.minutes_blocks), + df.format(this.cardsContentData.get("minutes_between_blocks")) + + " " + getString(R.string.minutes_name), + minutes)); + cardsContents.add(new CardsContent(getString(R.string.total_fees), + df.format(this.cardsContentData.get("total_fees_btc") / 10000000) + + " BTC", + total_fees)); + cardsContents.add(new CardsContent(getString(R.string.total_trans), + df.format(this.cardsContentData.get("n_tx")), + tx)); + cardsContents.add(new CardsContent(getString(R.string.min_benefit), + "$" + df.format(this.cardsContentData.get("miners_revenue_usd") / 100), + miners_revenue)); } - private HashMap getCachedMap(Map newValues) { + @Nullable + private HashMap getCachedMap() { CacheManaging cache = CacheManaging.newInstance(BitCoinApp.getAppContext()); try { cache.setupFile(); @@ -415,19 +416,7 @@ private HashMap getCachedMap(Map newValues) { Log.e(Constants.LOG.MATAG, "Unable to create cache file"); } try { - HashMap oldCache = cache.readCache(); - if (oldCache != null) { - /*HashMap newCacheValues = new LinkedHashMap<>(); - newCacheValues.put("date", - new SimpleDateFormat("dd-MM-yyyy").format(Calendar.getInstance().getTime())); - for (String key : newValues.keySet()) { - newCacheValues.put(key, newValues.get(key).toString()); - //System.out.println(key + " | " + newValues.get(key).toString()); - } - cache.writeCache(newCacheValues); - return null;*/ - return oldCache; - } else return null; + return cache.readCache(); } catch (IOException | ClassNotFoundException e) { System.out.println("Error while reading cache. Full trace: " + e.getMessage()); e.printStackTrace(); diff --git a/app/src/main/java/javinator9889/bitcoinpools/JSONTools/JSONTools.java b/app/src/main/java/javinator9889/bitcoinpools/JSONTools/JSONTools.java index c54bbf4..c9f88f1 100644 --- a/app/src/main/java/javinator9889/bitcoinpools/JSONTools/JSONTools.java +++ b/app/src/main/java/javinator9889/bitcoinpools/JSONTools/JSONTools.java @@ -1,6 +1,6 @@ package javinator9889.bitcoinpools.JSONTools; -import android.annotation.SuppressLint; +import android.support.annotation.Nullable; import org.json.JSONException; import org.json.JSONObject; @@ -15,6 +15,7 @@ import java.util.LinkedHashMap; import java.util.LinkedList; import java.util.List; +import java.util.Locale; import java.util.Map; import java.util.TreeMap; @@ -44,6 +45,7 @@ public int compare(HashMap.Entry o1, HashMap.Entry return sortedMap; } + @Nullable public static HashMap convert2HashMap(JSONObject object) { HashMap hReturn = new HashMap<>(); Iterator iterator = object.keys(); @@ -58,10 +60,11 @@ public static HashMap convert2HashMap(JSONObject object) { } } + @Nullable public static HashMap convert2DateHashMap(JSONObject object) { HashMap hReturn = new HashMap<>(); Iterator iterator = object.keys(); - @SuppressLint("SimpleDateFormat") SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd"); + SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd", Locale.US); try { while (iterator.hasNext()) { String key = iterator.next(); @@ -74,8 +77,6 @@ public static HashMap convert2DateHashMap(JSONObject object) { } public static HashMap sortDateByValue(HashMap unsortMap) { - -// DateFormat df = new SimpleDateFormat("dd-MM-yyyy", Locale.US); Map m1 = new TreeMap<>(unsortMap); HashMap returnMap = new LinkedHashMap<>(); for (Map.Entry entry : m1.entrySet()) { diff --git a/app/src/main/java/javinator9889/bitcoinpools/License.java b/app/src/main/java/javinator9889/bitcoinpools/License.java index 3e70884..043c587 100644 --- a/app/src/main/java/javinator9889/bitcoinpools/License.java +++ b/app/src/main/java/javinator9889/bitcoinpools/License.java @@ -4,16 +4,9 @@ import android.support.v4.app.FragmentManager; import android.support.v7.app.AppCompatActivity; import android.util.Log; -import android.view.View; -import android.widget.Toast; -import com.mikepenz.aboutlibraries.LibTaskCallback; -import com.mikepenz.aboutlibraries.Libs; import com.mikepenz.aboutlibraries.LibsBuilder; -import com.mikepenz.aboutlibraries.LibsConfiguration; -import com.mikepenz.aboutlibraries.entity.Library; import com.mikepenz.aboutlibraries.ui.LibsSupportFragment; -import com.mikepenz.fastadapter.adapters.ItemAdapter; /** * Created by Javinator9889 on 22/12/2017. @@ -46,89 +39,10 @@ protected void onCreate(Bundle savedInstanceState) { .withAboutDescription(getString(R.string.bitcoindesc)) .withLicenseDialog(true) .withLibraries(getString(R.string.library_donations_libraryName)) - /*.withLibraryModification("Donations", Libs.LibraryFields.LIBRARY_NAME, "Donations") - .withLibraryModification("Donations", Libs.LibraryFields.LIBRARY_DESCRIPTION, - "Android Donations Lib supports donations by Google Play Store, Flattr, PayPal, and Bitcoin.") - .withLibraryModification("Donations", Libs.LibraryFields.LICENSE_NAME, getString(R.string.license_Apache_2_0_licenseName)) - .withLibraryModification("Donations", Libs.LibraryFields.AUTHOR_NAME, "PrivacyApps") - .withLibraryModification("Donations", Libs.LibraryFields.LIBRARY_REPOSITORY_LINK, "https://github.com/PrivacyApps/donations") - .withLibraryModification("Donations", Libs.LibraryFields.LIBRARY_VERSION, "2.5")*/ .supportFragment(); FragmentManager fragmentManager = getSupportFragmentManager(); fragmentManager.beginTransaction().replace(R.id.frame_container, fragment).commit(); Log.d(Constants.LOG.LTAG, Constants.LOG.INIT_L); - } - - LibTaskCallback libTaskCallback = new LibTaskCallback() { - @Override - public void onLibTaskStarted() { - Log.e("AboutLibraries", "started"); - } - - @Override - public void onLibTaskFinished(ItemAdapter fastItemAdapter) { - Log.e("AboutLibraries", "finished"); - } - }; - - LibsConfiguration.LibsUIListener libsUIListener = new LibsConfiguration.LibsUIListener() { - @Override - public View preOnCreateView(View view) { - return view; - } - - @Override - public View postOnCreateView(View view) { - return view; - } - }; - - LibsConfiguration.LibsListener libsListener = new LibsConfiguration.LibsListener() { - @Override - public void onIconClicked(View v) { - Toast.makeText(v.getContext(), "We are able to track this now ;)", Toast.LENGTH_LONG).show(); - } - - @Override - public boolean onLibraryAuthorClicked(View v, Library library) { - return false; - } - - @Override - public boolean onLibraryContentClicked(View v, Library library) { - return false; - } - - @Override - public boolean onLibraryBottomClicked(View v, Library library) { - return false; - } - - @Override - public boolean onExtraClicked(View v, Libs.SpecialButton specialButton) { - return false; - } - - @Override - public boolean onIconLongClicked(View v) { - return false; - } - - @Override - public boolean onLibraryAuthorLongClicked(View v, Library library) { - return false; - } - - @Override - public boolean onLibraryContentLongClicked(View v, Library library) { - return false; - } - - @Override - public boolean onLibraryBottomLongClicked(View v, Library library) { - return false; - } - }; } diff --git a/app/src/main/java/javinator9889/bitcoinpools/MainActivity.java b/app/src/main/java/javinator9889/bitcoinpools/MainActivity.java index 986c1ed..9a34748 100644 --- a/app/src/main/java/javinator9889/bitcoinpools/MainActivity.java +++ b/app/src/main/java/javinator9889/bitcoinpools/MainActivity.java @@ -1,67 +1,37 @@ package javinator9889.bitcoinpools; -import android.Manifest; import android.annotation.SuppressLint; -import android.app.PictureInPictureParams; import android.content.Intent; import android.content.SharedPreferences; -import android.content.pm.PackageManager; -import android.content.res.Configuration; import android.net.Uri; -import android.os.AsyncTask; -import android.os.Build; import android.os.Bundle; -import android.support.annotation.NonNull; -import android.support.annotation.Nullable; import android.support.design.widget.TabLayout; -import android.support.v4.app.ActivityCompat; import android.support.v4.app.Fragment; import android.support.v4.app.FragmentManager; import android.support.v4.app.FragmentPagerAdapter; import android.support.v4.view.ViewPager; import android.support.v7.app.AppCompatActivity; import android.support.v7.widget.Toolbar; -import android.text.Html; import android.util.Log; -import android.util.Rational; import android.view.Menu; import android.view.MenuItem; import android.widget.Toast; -import com.afollestad.materialdialogs.DialogAction; import com.afollestad.materialdialogs.MaterialDialog; -import com.crashlytics.android.Crashlytics; -import com.google.android.gms.appinvite.AppInviteInvitation; -import com.google.firebase.analytics.FirebaseAnalytics; -import org.json.JSONException; -import org.json.JSONObject; - -import java.io.BufferedReader; -import java.io.InputStreamReader; -import java.lang.ref.WeakReference; import java.math.BigDecimal; -import java.net.URL; -import java.util.Calendar; import java.util.Date; import java.util.HashMap; -import java.util.LinkedHashMap; -import java.util.Map; -import java.util.concurrent.ExecutionException; -import java.util.concurrent.TimeUnit; - -import javax.net.ssl.HttpsURLConnection; import javinator9889.bitcoinpools.AppUpdaterManager.CheckUpdates; import javinator9889.bitcoinpools.FragmentViews.DonationsActivity; import javinator9889.bitcoinpools.FragmentViews.Tab1PoolsChart; import javinator9889.bitcoinpools.FragmentViews.Tab2BTCChart; import javinator9889.bitcoinpools.JSONTools.JSONTools; -import javinator9889.bitcoinpools.NetTools.net; +@SuppressLint("StaticFieldLeak") public class MainActivity extends AppCompatActivity { - @SuppressLint("StaticFieldLeak") public static Toolbar MAINACTIVITY_TOOLBAR; public static AppCompatActivity mainActivity; @@ -70,48 +40,33 @@ public class MainActivity extends AppCompatActivity { private HashMap cardsData; private HashMap btcPrice; - private FirebaseAnalytics mFirebaseAnalytics; - //private MaterialDialog progressDialog = null; - @Override @SuppressWarnings("unchecked") protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); mainActivity = this; - //if (BitCoinApp.isOnline()) { - Log.d(Constants.LOG.MATAG, Constants.LOG.CREATING_MAINVIEW); - setContentView(R.layout.activity_main); - mFirebaseAnalytics = FirebaseAnalytics.getInstance(this); - /*progressDialog = new MaterialDialog.Builder(this) - .cancelable(false) - .title(R.string.loadingData) - .content(R.string.please_wait) - .progress(true, 0) - .build(); - progressDialog.show(); - new DataLoader().execute();*/ - Intent dataFromDataLoaderClass = getIntent(); - this.mpu = dataFromDataLoaderClass.getFloatExtra("MPU", 0); - this.retrievedData = JSONTools.sortByValue((HashMap) dataFromDataLoaderClass.getSerializableExtra("RD")); - this.cardsData = JSONTools.sortByValue((HashMap) dataFromDataLoaderClass.getSerializableExtra("CARDS")); - this.btcPrice = JSONTools.sortDateByValue((HashMap) dataFromDataLoaderClass.getSerializableExtra("BTCPRICE")); - //System.out.println(this.mpu + " " +this.retrievedData.toString() + " " + this.cardsData.toString() + " " + this.btcPrice.toString()); - if (BitCoinApp.getSharedPreferences().contains(Constants.SHARED_PREFERENCES.APP_VERSION)) { - if (!BitCoinApp.getSharedPreferences().getString(Constants.SHARED_PREFERENCES.APP_VERSION, "1.0").equals(BitCoinApp.appVersion())) { - new MaterialDialog.Builder(this) - .title("Changelog") - .content(R.string.changelog, true) - .cancelable(true) - .positiveText(R.string.accept) - .build().show(); - SharedPreferences.Editor editor = BitCoinApp.getSharedPreferences().edit(); - editor.putString(Constants.SHARED_PREFERENCES.APP_VERSION, BitCoinApp.appVersion()); - editor.apply(); - } - } else { + Log.d(Constants.LOG.MATAG, Constants.LOG.CREATING_MAINVIEW); + setContentView(R.layout.activity_main); + Intent dataFromDataLoaderClass = getIntent(); + this.mpu = dataFromDataLoaderClass.getFloatExtra("MPU", 0); + this.retrievedData = JSONTools.sortByValue + ((HashMap) dataFromDataLoaderClass + .getSerializableExtra("RD")); + this.cardsData = JSONTools.sortByValue + ((HashMap) dataFromDataLoaderClass + .getSerializableExtra("CARDS")); + this.btcPrice = JSONTools.sortDateByValue + ((HashMap) dataFromDataLoaderClass + .getSerializableExtra("BTCPRICE")); + if (BitCoinApp.getSharedPreferences().contains(Constants.SHARED_PREFERENCES.APP_VERSION)) { + if (!BitCoinApp.getSharedPreferences() + .getString(Constants.SHARED_PREFERENCES.APP_VERSION, "1.0") + .equals(BitCoinApp.appVersion())) + { new MaterialDialog.Builder(this) .title("Changelog") - .content(R.string.changelog, true) + .content(R.string.changelog, + true) .cancelable(true) .positiveText(R.string.accept) .build().show(); @@ -119,79 +74,54 @@ protected void onCreate(Bundle savedInstanceState) { editor.putString(Constants.SHARED_PREFERENCES.APP_VERSION, BitCoinApp.appVersion()); editor.apply(); } - - Log.d(Constants.LOG.MATAG, Constants.LOG.INIT_VALUES); - //checkPermissions(); - CheckUpdates ck = new CheckUpdates(Constants.GITHUB_USER, Constants.GITHUB_REPO); - - SectionsPagerAdapter mSectionsPagerAdapter = new SectionsPagerAdapter(getSupportFragmentManager()); - MAINACTIVITY_TOOLBAR = findViewById(R.id.toolbar); - setSupportActionBar(MAINACTIVITY_TOOLBAR); - - ViewPager viewPager = findViewById(R.id.viewContainer); - viewPager.setAdapter(mSectionsPagerAdapter); - - TabLayout tabLayout = findViewById(R.id.tabs); - setupTabs(tabLayout); - viewPager.addOnPageChangeListener(new TabLayout.TabLayoutOnPageChangeListener(tabLayout)); - tabLayout.addOnTabSelectedListener(new TabLayout.ViewPagerOnTabSelectedListener(viewPager)); - - Log.d(Constants.LOG.MATAG, Constants.LOG.CREATING_CHART); - - Log.d(Constants.LOG.MATAG, Constants.LOG.LISTENING); - try { - ck.checkForUpdates(this, getString(R.string.updateAvailable), getString(R.string.updateDescrip), getString(R.string.updateNow), getString(R.string.updateLater), getString(R.string.updatePage)); - } catch (NullPointerException e) { - Log.e(Constants.LOG.MATAG, "Unable to get updates"); - } - //DataLoaderScreen.progressDialog.setProgress(DataLoaderScreen.progressDialog.getCurrentProgress() + 10); - /*} else { + } else { new MaterialDialog.Builder(this) - .title(R.string.noConnectionTitle) - .content(R.string.noConnectionDesc) - .cancelable(false) + .title("Changelog") + .content(R.string.changelog, + true) + .cancelable(true) .positiveText(R.string.accept) - .onPositive(new MaterialDialog.SingleButtonCallback() { - @Override - public void onClick(@NonNull MaterialDialog dialog, @NonNull DialogAction which) { - closeApp(); - } - }) - .build() - .show(); - }*/ - } - - /*@Override - public void onUserLeaveHint() { - if (Build.VERSION.SDK_INT >= 26) { - Rational aspectRatio = new Rational(1080, 1920); - PictureInPictureParams.Builder builder = new PictureInPictureParams.Builder() - .setAspectRatio(aspectRatio); - enterPictureInPictureMode(builder.build()); - } else { - super.onUserLeaveHint(); + .build().show(); + SharedPreferences.Editor editor = BitCoinApp.getSharedPreferences().edit(); + editor.putString(Constants.SHARED_PREFERENCES.APP_VERSION, BitCoinApp.appVersion()); + editor.apply(); } - } - @Override - public void onPictureInPictureModeChanged(boolean isInPictureInPicture, Configuration newConfig) { - if (isInPictureInPicture) - this.moveTaskToBack(false); - else { - Intent restoreActivity = new Intent(MainActivity.this, MainActivity.class); - restoreActivity.setFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT); - startActivity(restoreActivity); + Log.d(Constants.LOG.MATAG, Constants.LOG.INIT_VALUES); + + CheckUpdates ck = new CheckUpdates(Constants.GITHUB_USER, Constants.GITHUB_REPO); + + SectionsPagerAdapter mSectionsPagerAdapter = + new SectionsPagerAdapter(getSupportFragmentManager()); + MAINACTIVITY_TOOLBAR = findViewById(R.id.toolbar); + setSupportActionBar(MAINACTIVITY_TOOLBAR); + + ViewPager viewPager = findViewById(R.id.viewContainer); + viewPager.setAdapter(mSectionsPagerAdapter); + + TabLayout tabLayout = findViewById(R.id.tabs); + setupTabs(tabLayout); + viewPager.addOnPageChangeListener(new TabLayout.TabLayoutOnPageChangeListener(tabLayout)); + tabLayout.addOnTabSelectedListener(new TabLayout.ViewPagerOnTabSelectedListener(viewPager)); + + Log.d(Constants.LOG.MATAG, Constants.LOG.CREATING_CHART); + Log.d(Constants.LOG.MATAG, Constants.LOG.LISTENING); + try { + ck.checkForUpdates(this, + getString(R.string.updateAvailable), + getString(R.string.updateDescrip), + getString(R.string.updateNow), + getString(R.string.updateLater), + getString(R.string.updatePage)); + } catch (NullPointerException e) { + Log.e(Constants.LOG.MATAG, "Unable to get updates"); } - }*/ + } @Override protected void onResume() { super.onResume(); - //DataLoaderScreen.progressDialog.setProgress(DataLoaderScreen.progressDialog.getCurrentProgress() + 5); - //Toast.makeText(this, "Hi, the activity is fully loaded", Toast.LENGTH_LONG).show(); DataLoaderScreen.dataLoaderScreenActivity.finish(); - //DataLoaderScreen.progressDialog.dismiss(); } @Override @@ -231,10 +161,10 @@ public boolean onOptionsItemSelected(MenuItem item) { case R.id.settings: Thread settingsThread = new Thread() { public void run() { - Intent intentSettings = new Intent(MainActivity.this, SpinnerActivity.class); + Intent intentSettings = new Intent(MainActivity.this, + SpinnerActivity.class); startActivity(intentSettings); overridePendingTransition(R.anim.activity_in, R.anim.activity_out); - //MainActivity.this.finish(); } }; settingsThread.setName("settings_thread"); @@ -243,7 +173,8 @@ public void run() { case R.id.license: Thread licenseThread = new Thread() { public void run() { - Intent intentLicense = new Intent(MainActivity.this, License.class); + Intent intentLicense = new Intent(MainActivity.this, + License.class); startActivity(intentLicense); overridePendingTransition(R.anim.activity_in, R.anim.activity_out); } @@ -256,20 +187,19 @@ public void run() { Toast.makeText(this, R.string.updated, Toast.LENGTH_LONG).show(); break; case R.id.share: - /*Intent intent = new AppInviteInvitation.IntentBuilder(getString(R.string.invitation_title)) - .setMessage(getString(R.string.inv_message)) - .setDeepLink(Uri.parse(Constants.GITHUB_URL)) - .build(); - startActivityForResult(intent, Constants.REQUEST_CODE);*/ Intent shareAppIntent = new Intent(Intent.ACTION_SEND); shareAppIntent.setType("text/plain"); shareAppIntent.putExtra(Intent.EXTRA_SUBJECT, "BitCoin Pools"); final Uri googlePlayLink = Uri.parse(Constants.GOOGLE_PLAY_URL); - shareAppIntent.putExtra(Intent.EXTRA_TEXT, getString(R.string.inv_message) + " - Google Play Store: " + googlePlayLink.toString()); + shareAppIntent.putExtra(Intent.EXTRA_TEXT, + getString(R.string.inv_message) + + " - Google Play Store: " + + googlePlayLink.toString()); startActivity(Intent.createChooser(shareAppIntent, getString(R.string.invitation_title))); break; case R.id.donate: - Intent donateIntent = new Intent(MainActivity.this, DonationsActivity.class); + Intent donateIntent = new Intent(MainActivity.this, + DonationsActivity.class); startActivity(donateIntent); overridePendingTransition(R.anim.activity_in, R.anim.activity_out); break; @@ -277,22 +207,11 @@ public void run() { return true; } - private void checkPermissions() { - Log.d(Constants.LOG.MATAG, Constants.LOG.CHECKING_PERMISSIONS); - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { - if (checkSelfPermission(Manifest.permission.WRITE_EXTERNAL_STORAGE) == PackageManager.PERMISSION_DENIED) { - ActivityCompat.requestPermissions(this, new String[]{android.Manifest.permission.WRITE_EXTERNAL_STORAGE}, 1); - } - } - } - - private void closeApp() { - this.onBackPressed(); - } - private void setupTabs(TabLayout destinationTab) { - destinationTab.addTab(destinationTab.newTab().setText(R.string.poolsChart).setIcon(R.drawable.ic_poll_white_24dp)); - destinationTab.addTab(destinationTab.newTab().setText(R.string.bitcoinChart).setIcon(R.drawable.ic_attach_money_white_24dp)); + destinationTab.addTab(destinationTab.newTab(). + setText(R.string.poolsChart).setIcon(R.drawable.ic_poll_white_24dp)); + destinationTab.addTab(destinationTab.newTab(). + setText(R.string.bitcoinChart).setIcon(R.drawable.ic_attach_money_white_24dp)); } /** @@ -307,15 +226,10 @@ public class SectionsPagerAdapter extends FragmentPagerAdapter { @Override public Fragment getItem(int position) { - // getItem is called to instantiate the fragment for the given page. - // Return a PlaceholderFragment (defined as a static inner class below). - //return PlaceholderFragment.newInstance(position + 1); switch (position) { case 0: - //return new Tab1PoolsChart(); return Tab1PoolsChart.newInstance(mpu, retrievedData); case 1: - //return new Tab2BTCChart(); return Tab2BTCChart.newInstance(cardsData, btcPrice); default: return null; @@ -324,7 +238,6 @@ public Fragment getItem(int position) { @Override public int getCount() { - // Show 3 total pages. return 2; } diff --git a/app/src/main/java/javinator9889/bitcoinpools/NetTools/net.java b/app/src/main/java/javinator9889/bitcoinpools/NetTools/net.java index 5b123c9..dc5631a 100644 --- a/app/src/main/java/javinator9889/bitcoinpools/NetTools/net.java +++ b/app/src/main/java/javinator9889/bitcoinpools/NetTools/net.java @@ -1,16 +1,17 @@ package javinator9889.bitcoinpools.NetTools; import android.os.AsyncTask; +import android.support.annotation.NonNull; -import org.json.JSONArray; import org.json.JSONObject; import java.io.BufferedReader; import java.io.InputStreamReader; import java.net.HttpURLConnection; -import javax.net.ssl.HttpsURLConnection; import java.net.URL; +import javax.net.ssl.HttpsURLConnection; + /** * Created by Javinator9889 on 20/12/2017. * Based on: https://stackoverflow.com/questions/1485708/how-do-i-do-a-http-get-in-java @@ -27,12 +28,14 @@ protected JSONObject doInBackground(String... url) { } } + @NonNull public static JSONObject getHttpRequest(String url) throws Exception { StringBuilder response = new StringBuilder(); URL urlObject = new URL(url); HttpURLConnection connection = (HttpURLConnection) urlObject.openConnection(); connection.setRequestMethod("GET"); - BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(connection.getInputStream())); + BufferedReader bufferedReader = new BufferedReader( + new InputStreamReader(connection.getInputStream())); String line; while ((line = bufferedReader.readLine()) != null) { @@ -42,12 +45,14 @@ public static JSONObject getHttpRequest(String url) throws Exception { return new JSONObject(response.toString()); } + @NonNull public static JSONObject getHttpsRequest(String url) throws Exception { StringBuilder response = new StringBuilder(); URL urlObject = new URL(url); HttpsURLConnection connection = (HttpsURLConnection) urlObject.openConnection(); connection.setRequestMethod("GET"); - BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(connection.getInputStream())); + BufferedReader bufferedReader = new BufferedReader( + new InputStreamReader(connection.getInputStream())); String line; while ((line = bufferedReader.readLine()) != null) { @@ -55,6 +60,5 @@ public static JSONObject getHttpsRequest(String url) throws Exception { } bufferedReader.close(); return new JSONObject(response.toString()); - //return response.toString(); } } diff --git a/app/src/main/java/javinator9889/bitcoinpools/SpinnerActivity.java b/app/src/main/java/javinator9889/bitcoinpools/SpinnerActivity.java index ad01dd5..6161126 100644 --- a/app/src/main/java/javinator9889/bitcoinpools/SpinnerActivity.java +++ b/app/src/main/java/javinator9889/bitcoinpools/SpinnerActivity.java @@ -38,47 +38,59 @@ protected void onCreate(@Nullable final Bundle savedInstanceState) { setTitle(R.string.settingsTitle); initArrayOfValues(); - ACTUAL_DAYS = BitCoinApp.getSharedPreferences().getInt(Constants.SHARED_PREFERENCES.DAYS_TO_CHECK, 1); - ACTUAL_PRICE = BitCoinApp.getSharedPreferences().getInt(Constants.SHARED_PREFERENCES.VALUE_TO_CHECK, 1000); - ACTUAL_ENABLED = BitCoinApp.getSharedPreferences().getBoolean(Constants.SHARED_PREFERENCES.NOTIFICATIONS_ENABLED, false); + ACTUAL_DAYS = BitCoinApp.getSharedPreferences() + .getInt(Constants.SHARED_PREFERENCES.DAYS_TO_CHECK, 1); + ACTUAL_PRICE = BitCoinApp.getSharedPreferences() + .getInt(Constants.SHARED_PREFERENCES.VALUE_TO_CHECK, 1000); + ACTUAL_ENABLED = BitCoinApp.getSharedPreferences() + .getBoolean(Constants.SHARED_PREFERENCES.NOTIFICATIONS_ENABLED, false); NEW_VALUE_ENABLED = ACTUAL_ENABLED; - TextView tv = (TextView) findViewById(R.id.daysTitle); - final Spinner spinner = (Spinner) findViewById(R.id.spinner2); + TextView tv = findViewById(R.id.daysTitle); + final Spinner spinner = findViewById(R.id.spinner2); Log.d(Constants.LOG.STAG, Constants.LOG.INIT_SPINNER); spinner.setOnItemSelectedListener(this); - ArrayAdapter adapter = ArrayAdapter.createFromResource(this, R.array.days, android.R.layout.simple_spinner_item); + ArrayAdapter adapter = ArrayAdapter + .createFromResource(this, R.array.days, + android.R.layout.simple_spinner_item); adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); spinner.setAdapter(adapter); spinner.setSelection(ACTUAL_DAYS - 1); String output = getString(R.string.cDays); tv.setText(output); - final Spinner spinner1 = (Spinner) findViewById(R.id.spinner3); + final Spinner spinner1 = findViewById(R.id.spinner3); spinner1.setOnItemSelectedListener(this); - ArrayAdapter adapter1 = ArrayAdapter.createFromResource(this, R.array.prices, android.R.layout.simple_spinner_item); + ArrayAdapter adapter1 = ArrayAdapter + .createFromResource(this, R.array.prices, + android.R.layout.simple_spinner_item); adapter1.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); spinner1.setAdapter(adapter1); spinner1.setSelection(PRICES_VALUES.get(ACTUAL_PRICE)); spinner1.setEnabled(ACTUAL_ENABLED); Log.d(Constants.LOG.STAG, Constants.LOG.INIT_SWITCH + ACTUAL_ENABLED); - final Switch settingsSwitch = (Switch) findViewById(R.id.switch1); + final Switch settingsSwitch = findViewById(R.id.switch1); settingsSwitch.setChecked(ACTUAL_ENABLED); settingsSwitch.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { @Override public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { - Log.d(Constants.LOG.STAG, Constants.LOG.CHANGE_PREFERENCES + "switch (enables/disables options)"); + Log.d(Constants.LOG.STAG, Constants.LOG.CHANGE_PREFERENCES + + "switch (enables/disables options)"); if (isChecked) { - SharedPreferences.Editor sharedPreferencesEditor = BitCoinApp.getSharedPreferences().edit(); - sharedPreferencesEditor.putBoolean(Constants.SHARED_PREFERENCES.NOTIFICATIONS_ENABLED, true); + SharedPreferences.Editor sharedPreferencesEditor = BitCoinApp + .getSharedPreferences().edit(); + sharedPreferencesEditor.putBoolean(Constants.SHARED_PREFERENCES + .NOTIFICATIONS_ENABLED, true); sharedPreferencesEditor.apply(); spinner1.setEnabled(true); NEW_VALUE_ENABLED = true; } else { - SharedPreferences.Editor sharedPreferencesEditor = BitCoinApp.getSharedPreferences().edit(); - sharedPreferencesEditor.putBoolean(Constants.SHARED_PREFERENCES.NOTIFICATIONS_ENABLED, false); + SharedPreferences.Editor sharedPreferencesEditor = BitCoinApp + .getSharedPreferences().edit(); + sharedPreferencesEditor.putBoolean(Constants.SHARED_PREFERENCES + .NOTIFICATIONS_ENABLED, false); sharedPreferencesEditor.apply(); spinner1.setEnabled(false); NEW_VALUE_ENABLED = false; @@ -91,21 +103,30 @@ public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { public void onItemSelected(AdapterView parent, View view, int position, long id) { switch (parent.getId()) { case R.id.spinner2: - Log.d(Constants.LOG.STAG, Constants.LOG.CHANGE_PREFERENCES + "spinner2 (days to check)"); + Log.d(Constants.LOG.STAG, Constants.LOG.CHANGE_PREFERENCES + + "spinner2 (days to check)"); NEW_VALUE_DAYS = Integer.parseInt(parent.getItemAtPosition(position).toString()); - SharedPreferences.Editor sharedPreferencesEditor = BitCoinApp.getSharedPreferences().edit(); - sharedPreferencesEditor.putInt(Constants.SHARED_PREFERENCES.DAYS_TO_CHECK, NEW_VALUE_DAYS); + SharedPreferences.Editor sharedPreferencesEditor = BitCoinApp + .getSharedPreferences().edit(); + sharedPreferencesEditor.putInt(Constants.SHARED_PREFERENCES.DAYS_TO_CHECK, + NEW_VALUE_DAYS); sharedPreferencesEditor.apply(); break; case R.id.spinner3: - Log.d(Constants.LOG.STAG, Constants.LOG.CHANGE_PREFERENCES + "spinner3 (price to check)"); - NEW_VALUE_PRICE = Integer.parseInt(parent.getItemAtPosition(position).toString().replace("$", "")); - SharedPreferences.Editor sharedPreferencesEditor2 = BitCoinApp.getSharedPreferences().edit(); - sharedPreferencesEditor2.putInt(Constants.SHARED_PREFERENCES.VALUE_TO_CHECK, NEW_VALUE_PRICE); + Log.d(Constants.LOG.STAG, Constants.LOG.CHANGE_PREFERENCES + + "spinner3 (price to check)"); + NEW_VALUE_PRICE = Integer.parseInt(parent.getItemAtPosition(position).toString() + .replace("$", "")); + SharedPreferences.Editor sharedPreferencesEditor2 = BitCoinApp + .getSharedPreferences().edit(); + sharedPreferencesEditor2.putInt(Constants.SHARED_PREFERENCES.VALUE_TO_CHECK, + NEW_VALUE_PRICE); sharedPreferencesEditor2.apply(); break; default: - Log.e(Constants.LOG.STAG, Constants.LOG.UNCAUGHT_ERROR + "SpinnerActivity.onItemSelected(AdapterView parent, View view, int position, long id)", new UnknownError()); + Log.e(Constants.LOG.STAG, Constants.LOG.UNCAUGHT_ERROR + + "SpinnerActivity.onItemSelected(AdapterView parent, View view, int position, long id)", + new UnknownError()); break; } } @@ -116,13 +137,14 @@ public void onNothingSelected(AdapterView parent) {} @Override public void onBackPressed() { Log.d(Constants.LOG.STAG, Constants.LOG.BACK_TO_MC); - if ((NEW_VALUE_DAYS != ACTUAL_DAYS) || (NEW_VALUE_PRICE != ACTUAL_PRICE) || (NEW_VALUE_ENABLED != ACTUAL_ENABLED)) { + if ((NEW_VALUE_DAYS != ACTUAL_DAYS) || (NEW_VALUE_PRICE != ACTUAL_PRICE) + || (NEW_VALUE_ENABLED != ACTUAL_ENABLED)) + { Toast.makeText(this, R.string.prefUpdated, Toast.LENGTH_LONG).show(); if (NEW_VALUE_ENABLED && !ACTUAL_ENABLED) BitCoinApp.forceRestartBackgroundJobs(); refresh(); } - //refresh(); super.onBackPressed(); overridePendingTransition(R.anim.activity_back_in, R.anim.activity_back_out); }