diff --git a/app/src/main/java/com/fieldbook/tracker/activities/brapi/BrapiActivity.java b/app/src/main/java/com/fieldbook/tracker/activities/brapi/BrapiActivity.java index 2a82eb318..52049ce63 100644 --- a/app/src/main/java/com/fieldbook/tracker/activities/brapi/BrapiActivity.java +++ b/app/src/main/java/com/fieldbook/tracker/activities/brapi/BrapiActivity.java @@ -1,5 +1,6 @@ package com.fieldbook.tracker.activities.brapi; +import android.app.Activity; import android.content.Intent; import android.os.Bundle; import android.view.Gravity; @@ -15,9 +16,11 @@ import androidx.annotation.Nullable; import androidx.arch.core.util.Function; +import androidx.fragment.app.FragmentActivity; import com.fieldbook.tracker.R; import com.fieldbook.tracker.activities.ThemedActivity; +import com.fieldbook.tracker.brapi.BrapiAuthDialogFragment; import com.fieldbook.tracker.brapi.BrapiLoadDialog; import com.fieldbook.tracker.brapi.model.BrapiObservationLevel; import com.fieldbook.tracker.brapi.model.BrapiStudyDetails; @@ -49,6 +52,8 @@ public class BrapiActivity extends ThemedActivity { private List observationLevels; private BrapiObservationLevel selectedObservationLevel; + private BrapiAuthDialogFragment brapiAuth = new BrapiAuthDialogFragment().newInstance(); + @Override public void onDestroy() { super.onDestroy(); @@ -177,7 +182,9 @@ public Void apply(final Integer code) { public void run() { // Show error message. We don't finish the activity intentionally. if(BrAPIService.isConnectionError(code)){ - BrAPIService.handleConnectionError(BrapiActivity.this, code); + if (BrAPIService.handleConnectionError(BrapiActivity.this, code)) { + showBrapiAuthDialog(); + } }else { Toast.makeText(getApplicationContext(), getString(R.string.brapi_studies_error), Toast.LENGTH_LONG).show(); } @@ -191,6 +198,18 @@ public void run() { }); } + private void showBrapiAuthDialog() { + try { + runOnUiThread(() -> { + if (!brapiAuth.isVisible()) { + brapiAuth.show(getSupportFragmentManager(), "BrapiAuthDialogFragment"); + } + }); + } catch (Exception e) { + e.printStackTrace(); + } + } + private void loadObservationLevels() { brAPIService.getObservationLevels(programDbId, input -> { this.observationLevels = input; diff --git a/app/src/main/java/com/fieldbook/tracker/activities/brapi/BrapiExportActivity.java b/app/src/main/java/com/fieldbook/tracker/activities/brapi/BrapiExportActivity.java index 80c3e2827..046ce5d7b 100644 --- a/app/src/main/java/com/fieldbook/tracker/activities/brapi/BrapiExportActivity.java +++ b/app/src/main/java/com/fieldbook/tracker/activities/brapi/BrapiExportActivity.java @@ -14,10 +14,12 @@ import androidx.appcompat.widget.Toolbar; import androidx.arch.core.util.Function; +import androidx.fragment.app.FragmentActivity; import com.fieldbook.tracker.R; import com.fieldbook.tracker.activities.ThemedActivity; import com.fieldbook.tracker.brapi.ApiErrorCode; +import com.fieldbook.tracker.brapi.BrapiAuthDialogFragment; import com.fieldbook.tracker.brapi.BrapiControllerResponse; import com.fieldbook.tracker.brapi.model.FieldBookImage; import com.fieldbook.tracker.brapi.model.Observation; @@ -77,6 +79,8 @@ public class BrapiExportActivity extends ThemedActivity { private UploadError putImageContentError; private UploadError putImageMetaDataError; + private final BrapiAuthDialogFragment brapiAuth = new BrapiAuthDialogFragment().newInstance(); + public BrapiExportActivity() { } @@ -547,7 +551,18 @@ private void uploadComplete() { putImageContentError == UploadError.API_UNAUTHORIZED_ERROR || putImageMetaDataError == UploadError.API_UNAUTHORIZED_ERROR) { reset(); - BrAPIService.handleConnectionError(this, 401); + boolean showDialog = BrAPIService.handleConnectionError(this, 401); + if (showDialog) { + try { + runOnUiThread(() -> { + if (!brapiAuth.isVisible()) { + brapiAuth.show(getSupportFragmentManager(), "BrapiAuthDialogFragment"); + } + }); + } catch (Exception e) { + e.printStackTrace(); + } + } return; } else { String message; @@ -608,6 +623,14 @@ private void reset() { imagesEditedIncomplete.clear(); } + @Override + protected void onDestroy() { + super.onDestroy(); + if (brapiAuth != null && brapiAuth.isAdded() && brapiAuth.isVisible()) { + brapiAuth.dismiss(); + } + } + private UploadError processResponse(List observationDbIds, List observationsNeedingSync) { UploadError retVal = UploadError.NONE; SimpleDateFormat timeStamp = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSSZZZZZ", diff --git a/app/src/main/java/com/fieldbook/tracker/activities/brapi/BrapiProgramActivity.java b/app/src/main/java/com/fieldbook/tracker/activities/brapi/BrapiProgramActivity.java index 08f765830..a7a8c15e2 100644 --- a/app/src/main/java/com/fieldbook/tracker/activities/brapi/BrapiProgramActivity.java +++ b/app/src/main/java/com/fieldbook/tracker/activities/brapi/BrapiProgramActivity.java @@ -20,6 +20,7 @@ import com.fieldbook.tracker.R; import com.fieldbook.tracker.activities.ThemedActivity; +import com.fieldbook.tracker.brapi.BrapiAuthDialogFragment; import com.fieldbook.tracker.brapi.model.BrapiProgram; import com.fieldbook.tracker.brapi.service.BrAPIService; import com.fieldbook.tracker.brapi.service.BrAPIServiceFactory; @@ -37,6 +38,8 @@ public class BrapiProgramActivity extends ThemedActivity { private ListView programsView; private final ArrayList programsList = new ArrayList<>(); + private BrapiAuthDialogFragment brapiAuth = new BrapiAuthDialogFragment().newInstance(); + @Override public void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); @@ -141,7 +144,9 @@ private void loadPrograms() { (BrapiProgramActivity.this).runOnUiThread(() -> { // Show error message. We don't finish the activity intentionally. if(BrAPIService.isConnectionError(code)){ - BrAPIService.handleConnectionError(BrapiProgramActivity.this, code); + if (BrAPIService.handleConnectionError(BrapiProgramActivity.this, code)) { + showBrapiAuthDialog(); + } }else { Toast.makeText(getApplicationContext(), getString(R.string.brapi_programs_error), Toast.LENGTH_LONG).show(); } @@ -151,6 +156,18 @@ private void loadPrograms() { }); } + private void showBrapiAuthDialog() { + try { + runOnUiThread(() -> { + if (!brapiAuth.isVisible()) { + brapiAuth.show(getSupportFragmentManager(), "BrapiAuthDialogFragment"); + } + }); + } catch (Exception e) { + e.printStackTrace(); + } + } + private ListAdapter buildProgramsArrayAdapter(List programs) { List itemDataList = new ArrayList<>(); for (BrapiProgram program : programs) { diff --git a/app/src/main/java/com/fieldbook/tracker/activities/brapi/BrapiTraitActivity.java b/app/src/main/java/com/fieldbook/tracker/activities/brapi/BrapiTraitActivity.java index 9e2e7460a..996941b90 100644 --- a/app/src/main/java/com/fieldbook/tracker/activities/brapi/BrapiTraitActivity.java +++ b/app/src/main/java/com/fieldbook/tracker/activities/brapi/BrapiTraitActivity.java @@ -16,6 +16,7 @@ import com.fieldbook.tracker.R; import com.fieldbook.tracker.activities.CollectActivity; import com.fieldbook.tracker.activities.ThemedActivity; +import com.fieldbook.tracker.brapi.BrapiAuthDialogFragment; import com.fieldbook.tracker.brapi.service.BrAPIService; import com.fieldbook.tracker.brapi.service.BrAPIServiceFactory; import com.fieldbook.tracker.brapi.service.BrapiPaginationManager; @@ -39,6 +40,8 @@ public class BrapiTraitActivity extends ThemedActivity { private List selectedTraits; private BrapiPaginationManager paginationManager; + private final BrapiAuthDialogFragment brapiAuth = new BrapiAuthDialogFragment().newInstance(); + @Inject DataHelper database; @@ -188,7 +191,9 @@ public Void apply(final Integer code) { public void run() { // Show error message. We don't finish the activity intentionally. if(BrAPIService.isConnectionError(code)){ - BrAPIService.handleConnectionError(BrapiTraitActivity.this, code); + if (BrAPIService.handleConnectionError(BrapiTraitActivity.this, code)) { + showBrapiAuthDialog(); + } }else { Toast.makeText(getApplicationContext(), getString(R.string.brapi_ontology_error), Toast.LENGTH_LONG).show(); } @@ -201,6 +206,18 @@ public void run() { }); } + private void showBrapiAuthDialog() { + try { + runOnUiThread(() -> { + if (!brapiAuth.isVisible()) { + brapiAuth.show(getSupportFragmentManager(), "BrapiAuthDialogFragment"); + } + }); + } catch (Exception e) { + e.printStackTrace(); + } + } + // Transforms the trait data to display it on the screen. private ArrayAdapter buildTraitsArrayAdapter(List traits) { diff --git a/app/src/main/java/com/fieldbook/tracker/activities/brapi/BrapiTrialActivity.java b/app/src/main/java/com/fieldbook/tracker/activities/brapi/BrapiTrialActivity.java index 126ed4f71..a513e679b 100644 --- a/app/src/main/java/com/fieldbook/tracker/activities/brapi/BrapiTrialActivity.java +++ b/app/src/main/java/com/fieldbook/tracker/activities/brapi/BrapiTrialActivity.java @@ -18,6 +18,7 @@ import com.fieldbook.tracker.R; import com.fieldbook.tracker.activities.ThemedActivity; +import com.fieldbook.tracker.brapi.BrapiAuthDialogFragment; import com.fieldbook.tracker.brapi.model.BrapiTrial; import com.fieldbook.tracker.brapi.service.BrAPIService; import com.fieldbook.tracker.brapi.service.BrAPIServiceFactory; @@ -32,6 +33,8 @@ public class BrapiTrialActivity extends ThemedActivity { private BrapiTrial brapiTrial; private BrapiPaginationManager paginationManager; + private final BrapiAuthDialogFragment brapiAuth = new BrapiAuthDialogFragment().newInstance(); + @Override public void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); @@ -114,7 +117,9 @@ public Void apply(Integer code) { public void run() { // Show error message. We don't finish the activity intentionally. if(BrAPIService.isConnectionError(code)){ - BrAPIService.handleConnectionError(BrapiTrialActivity.this, code); + if (BrAPIService.handleConnectionError(BrapiTrialActivity.this, code)) { + showBrapiAuthDialog(); + } }else { Toast.makeText(getApplicationContext(), getString(R.string.brapi_trials_error), Toast.LENGTH_LONG).show(); } @@ -126,6 +131,18 @@ public void run() { }); } + private void showBrapiAuthDialog() { + try { + runOnUiThread(() -> { + if (!brapiAuth.isVisible()) { + brapiAuth.show(getSupportFragmentManager(), "BrapiAuthDialogFragment"); + } + }); + } catch (Exception e) { + e.printStackTrace(); + } + } + private ListAdapter buildTrialsArrayAdapter(List trials) { List itemDataList = new ArrayList<>(); for (BrapiTrial trial : trials) { diff --git a/app/src/main/java/com/fieldbook/tracker/brapi/service/BrAPIService.java b/app/src/main/java/com/fieldbook/tracker/brapi/service/BrAPIService.java index a44e853d3..8a1b658fa 100644 --- a/app/src/main/java/com/fieldbook/tracker/brapi/service/BrAPIService.java +++ b/app/src/main/java/com/fieldbook/tracker/brapi/service/BrAPIService.java @@ -129,18 +129,15 @@ static boolean isConnectionError(int code) { return code == 401 || code == 403 || code == 404; } - static void handleConnectionError(Context context, int code) { + static boolean handleConnectionError(Context context, int code) { ApiErrorCode apiErrorCode = ApiErrorCode.processErrorCode(code); String toastMsg; + boolean returnVal = false; switch (apiErrorCode) { case UNAUTHORIZED: - // Start the login process - ((Activity) context).runOnUiThread(() -> { - BrapiAuthDialogFragment brapiAuth = new BrapiAuthDialogFragment().newInstance(); - brapiAuth.show(((FragmentActivity) context).getSupportFragmentManager(), "BrapiAuthDialogFragment"); - }); toastMsg = context.getString(R.string.brapi_auth_deny); + returnVal = true; break; case FORBIDDEN: toastMsg = context.getString(R.string.brapi_auth_permission_deny); @@ -155,6 +152,8 @@ static void handleConnectionError(Context context, int code) { ((Activity)context).runOnUiThread(() -> { Toast.makeText(context.getApplicationContext(), toastMsg, Toast.LENGTH_LONG).show(); }); + + return returnVal; } void postImageMetaData(FieldBookImage image, final Function function, final Function failFunction);