From 423ee56a4c0cd5f1f8fa78f5424dc19feca6a950 Mon Sep 17 00:00:00 2001 From: Douglas Rafael Date: Wed, 12 Feb 2020 00:22:22 -0300 Subject: [PATCH] Fixed bug when the synchronization service is unavailable. --- app/build.gradle | 2 +- .../local/pref/AppPreferencesHelper.java | 55 +++++++++++--- .../view/ui/activity/MainActivity.java | 5 +- .../view/ui/preference/LoginFitBit.java | 2 +- .../view/ui/preference/SettingsFragment.java | 76 +++++++++---------- 5 files changed, 86 insertions(+), 54 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index cd9464f..e9d103f 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -48,7 +48,7 @@ android { dependencies { implementation fileTree(dir: 'libs', include: ['*.jar']) implementation 'androidx.constraintlayout:constraintlayout:1.1.3' - implementation 'com.google.android.material:material:1.0.0' + implementation 'com.google.android.material:material:1.1.0' implementation 'androidx.appcompat:appcompat:1.1.0' // Butterknife diff --git a/app/src/main/java/br/edu/uepb/nutes/ocariot/data/repository/local/pref/AppPreferencesHelper.java b/app/src/main/java/br/edu/uepb/nutes/ocariot/data/repository/local/pref/AppPreferencesHelper.java index d6aadb8..a216545 100644 --- a/app/src/main/java/br/edu/uepb/nutes/ocariot/data/repository/local/pref/AppPreferencesHelper.java +++ b/app/src/main/java/br/edu/uepb/nutes/ocariot/data/repository/local/pref/AppPreferencesHelper.java @@ -10,6 +10,7 @@ import br.edu.uepb.nutes.ocariot.data.model.ocariot.Child; import br.edu.uepb.nutes.ocariot.data.model.ocariot.FitBitAppData; import br.edu.uepb.nutes.ocariot.exception.LocalPreferenceException; +import timber.log.Timber; /** * Class to perform operations on the device's shared preference. @@ -85,30 +86,54 @@ public boolean addInt(String key, int value) { @Override public String getOcariotURL() { - return mPrefs.getString(PREF_KEY_OCARIOT_API, null); + try { + return mPrefs.getString(PREF_KEY_OCARIOT_API, null); + } catch (ClassCastException | NullPointerException ex) { + Timber.e(ex); + return null; + } } @Override public boolean changedOcariotUrl() { - return mPrefs.getBoolean(PREF_KEY_CHANGED_OCARIOT_API, false); + try { + return mPrefs.getBoolean(PREF_KEY_CHANGED_OCARIOT_API, false); + } catch (ClassCastException | NullPointerException ex) { + Timber.e(ex); + return false; + } } @Override public UserAccess getUserAccessOcariot() { - String userAccess = mPrefs.getString(PREF_KEY_AUTH_OCARIOT, null); - return UserAccess.jsonDeserialize(userAccess); + try { + String userAccess = mPrefs.getString(PREF_KEY_AUTH_OCARIOT, null); + return UserAccess.jsonDeserialize(userAccess); + } catch (ClassCastException | NullPointerException ex) { + Timber.e(ex); + } + return null; } @Override public Child getLastSelectedChild() { - String user = mPrefs.getString(PREF_KEY_LAST_SELECTED_CHILD, null); - return Child.jsonDeserialize(user); + try { + String user = mPrefs.getString(PREF_KEY_LAST_SELECTED_CHILD, null); + return Child.jsonDeserialize(user); + } catch (ClassCastException | NullPointerException ex) { + Timber.e(ex); + } + return null; } @Override public FitBitAppData getFitbitAppData() { - String fitbitAppData = mPrefs.getString(PREF_KEY_FITBIT_DATA, null); - if (fitbitAppData != null) return FitBitAppData.jsonDeserialize(fitbitAppData); + try { + String fitbitAppData = mPrefs.getString(PREF_KEY_FITBIT_DATA, null); + if (fitbitAppData != null) return FitBitAppData.jsonDeserialize(fitbitAppData); + } catch (ClassCastException | NullPointerException ex) { + Timber.e(ex); + } return null; } @@ -120,13 +145,23 @@ public boolean removeSession() { @Override public boolean getBoolean(String key) { checkKey(key); - return mPrefs.getBoolean(key, false); + try { + return mPrefs.getBoolean(key, false); + } catch (ClassCastException | NullPointerException ex) { + Timber.e(ex); + return false; + } } @Override public int getInt(String key) { checkKey(key); - return mPrefs.getInt(key, -1); + try { + return mPrefs.getInt(key, -1); + } catch (ClassCastException | NumberFormatException | NullPointerException ex) { + Timber.e(ex); + return -1; + } } private void checkKey(String key) { diff --git a/app/src/main/java/br/edu/uepb/nutes/ocariot/view/ui/activity/MainActivity.java b/app/src/main/java/br/edu/uepb/nutes/ocariot/view/ui/activity/MainActivity.java index 78ac5c7..5961cae 100644 --- a/app/src/main/java/br/edu/uepb/nutes/ocariot/view/ui/activity/MainActivity.java +++ b/app/src/main/java/br/edu/uepb/nutes/ocariot/view/ui/activity/MainActivity.java @@ -17,6 +17,7 @@ import androidx.fragment.app.FragmentTransaction; import com.google.android.material.bottomnavigation.BottomNavigationView; +import com.tapadoo.alerter.Alerter; import org.greenrobot.eventbus.EventBus; import org.greenrobot.eventbus.Subscribe; @@ -141,6 +142,7 @@ protected void onResume() { protected void onStop() { super.onStop(); EventBus.getDefault().unregister(this); + Alerter.hide(); } @Override @@ -284,7 +286,8 @@ private void redirectToLogin() { } /** - * Open children manager activity. + * Open children manager activity. + * * @param isFirst boolean */ private void openChildrenManagerActivity(boolean isFirst) { diff --git a/app/src/main/java/br/edu/uepb/nutes/ocariot/view/ui/preference/LoginFitBit.java b/app/src/main/java/br/edu/uepb/nutes/ocariot/view/ui/preference/LoginFitBit.java index 1910c21..4c5f422 100644 --- a/app/src/main/java/br/edu/uepb/nutes/ocariot/view/ui/preference/LoginFitBit.java +++ b/app/src/main/java/br/edu/uepb/nutes/ocariot/view/ui/preference/LoginFitBit.java @@ -152,7 +152,7 @@ Single doAuthorizationToken(final AuthorizationResponse authResp) { * * @return boolean */ - private boolean clientFibitIsValid() { + public boolean clientFibitIsValid() { return !(appPref.getFitbitAppData() == null || appPref.getFitbitAppData().getClientId() == null || appPref.getFitbitAppData().getClientSecret() == null); } diff --git a/app/src/main/java/br/edu/uepb/nutes/ocariot/view/ui/preference/SettingsFragment.java b/app/src/main/java/br/edu/uepb/nutes/ocariot/view/ui/preference/SettingsFragment.java index af83401..d7efb04 100644 --- a/app/src/main/java/br/edu/uepb/nutes/ocariot/view/ui/preference/SettingsFragment.java +++ b/app/src/main/java/br/edu/uepb/nutes/ocariot/view/ui/preference/SettingsFragment.java @@ -84,7 +84,6 @@ public void onCreate(final Bundle savedInstanceState) { initEvents(); // Initialize configuration for return of Fitbit authentication and authorization. initResultAuthFitBit(); - Alerter.hide(); } private void initEvents() { @@ -114,6 +113,12 @@ public void onStart() { populateView(); } + @Override + public void onStop() { + super.onStop(); + Alerter.hide(); + } + @Override public void onAttach(Context context) { super.onAttach(context); @@ -142,9 +147,10 @@ public void onDetach() { @Override public boolean onPreferenceClick(Preference preference) { if (preference.getKey().equals(getString(R.string.key_fitibit))) { - if (!fitbitValidConfigs()) { + if (!loginFitBit.clientFibitIsValid()) { mAlertMessage.show(R.string.title_error, R.string.error_configs_fitbit, R.color.colorDanger, R.drawable.ic_warning_dark); + switchPrefFitBit.setChecked(!switchPrefFitBit.isChecked()); return true; } @@ -187,22 +193,14 @@ private void populateView() { * Updates key preference equal to "key_sync_data" with last sync date. */ private void updateViewLastSync() { - new Handler().post(() -> { - Preference prefSync = findPreference(getString(R.string.key_sync_data)); - prefSync.setSummary(getResources().getString(R.string.synchronization_data) - .concat("\n\n") - .concat(getResources().getString(R.string.last_sync_date_time, mChild.getLastSync() != null ? - DateUtils.convertDateTimeUTCToLocale(mChild.getLastSync(), - getResources().getString(R.string.date_time_abb5), null) : "--") - ) - ); - }); - } - - private boolean fitbitValidConfigs() { - if (appPref.getFitbitAppData() == null) return false; - return appPref.getFitbitAppData().getClientId() != null && - appPref.getFitbitAppData().getClientSecret() != null; + new Handler().post(() -> findPreference(getString(R.string.key_sync_data)) + .setSummary(getResources().getString(R.string.synchronization_data) + .concat("\n\n") + .concat(getResources().getString(R.string.last_sync_date_time, mChild.getLastSync() != null ? + DateUtils.convertDateTimeUTCToLocale(mChild.getLastSync(), + getResources().getString(R.string.date_time_abb5), null) : "--") + ) + )); } /** @@ -255,36 +253,32 @@ private void populateSwitchFitbit() { * Open dialog confirm revoke FitBit. */ private void openDialogRevokeFitBit() { - getActivity().runOnUiThread(() -> { - AlertDialog.Builder mDialog = new AlertDialog.Builder(mContext); - mDialog.setMessage(mContext.getResources() - .getString(R.string.dialog_confirm_revoke_fitbit, mChild.getUsername())) - .setPositiveButton(R.string.title_yes, (dialog, which) -> revokeFitBitAuth()) - .setNegativeButton(R.string.title_no, null) - .create() - .show(); - }); + getActivity().runOnUiThread(() -> new AlertDialog.Builder(mContext) + .setMessage(mContext.getResources() + .getString(R.string.dialog_confirm_revoke_fitbit, mChild.getUsername())) + .setPositiveButton(R.string.title_yes, (dialog, which) -> revokeFitBitAuth()) + .setNegativeButton(R.string.title_no, null) + .create() + .show()); } /** * Show dialog confirm sign out in app. */ private void openDialogSignOut() { - getActivity().runOnUiThread(() -> { - AlertDialog.Builder mDialog = new AlertDialog.Builder(mContext); - mDialog.setMessage(R.string.dialog_confirm_sign_out) - .setPositiveButton(R.string.title_yes, (dialog, which) -> { - if (appPref.removeSession()) { - Intent intent = new Intent(getActivity(), LoginActivity.class); - intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | - Intent.FLAG_ACTIVITY_CLEAR_TASK); - startActivity(intent); - } + getActivity().runOnUiThread(() -> new AlertDialog.Builder(mContext) + .setMessage(R.string.dialog_confirm_sign_out) + .setPositiveButton(R.string.title_yes, (dialog, which) -> { + if (appPref.removeSession()) { + Intent intent = new Intent(getActivity(), LoginActivity.class); + intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | + Intent.FLAG_ACTIVITY_CLEAR_TASK); + startActivity(intent); } - ).setNegativeButton(R.string.title_no, null) - .create() - .show(); - }); + } + ).setNegativeButton(R.string.title_no, null) + .create() + .show()); } /**