Skip to content

Commit

Permalink
Merge pull request #1134 from PhenoApps/brapi_export_window_leak_fix
Browse files Browse the repository at this point in the history
brapi_export_window_leak_fix
  • Loading branch information
trife authored Jan 19, 2025
2 parents 0a46575 + 5365f4d commit 0a423c2
Show file tree
Hide file tree
Showing 6 changed files with 103 additions and 11 deletions.
Original file line number Diff line number Diff line change
@@ -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;
Expand All @@ -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;
Expand Down Expand Up @@ -49,6 +52,8 @@ public class BrapiActivity extends ThemedActivity {
private List<BrapiObservationLevel> observationLevels;
private BrapiObservationLevel selectedObservationLevel;

private BrapiAuthDialogFragment brapiAuth = new BrapiAuthDialogFragment().newInstance();

@Override
public void onDestroy() {
super.onDestroy();
Expand Down Expand Up @@ -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();
}
Expand All @@ -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;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -77,6 +79,8 @@ public class BrapiExportActivity extends ThemedActivity {
private UploadError putImageContentError;
private UploadError putImageMetaDataError;

private final BrapiAuthDialogFragment brapiAuth = new BrapiAuthDialogFragment().newInstance();

public BrapiExportActivity() {

}
Expand Down Expand Up @@ -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;
Expand Down Expand Up @@ -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<Observation> observationDbIds, List<Observation> observationsNeedingSync) {
UploadError retVal = UploadError.NONE;
SimpleDateFormat timeStamp = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSSZZZZZ",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -37,6 +38,8 @@ public class BrapiProgramActivity extends ThemedActivity {
private ListView programsView;
private final ArrayList<BrapiProgram> programsList = new ArrayList<>();

private BrapiAuthDialogFragment brapiAuth = new BrapiAuthDialogFragment().newInstance();

@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Expand Down Expand Up @@ -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();
}
Expand All @@ -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<BrapiProgram> programs) {
List<Object> itemDataList = new ArrayList<>();
for (BrapiProgram program : programs) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -39,6 +40,8 @@ public class BrapiTraitActivity extends ThemedActivity {
private List<TraitObject> selectedTraits;
private BrapiPaginationManager paginationManager;

private final BrapiAuthDialogFragment brapiAuth = new BrapiAuthDialogFragment().newInstance();

@Inject
DataHelper database;

Expand Down Expand Up @@ -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();
}
Expand All @@ -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<TraitObject> traits) {

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -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);
Expand Down Expand Up @@ -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();
}
Expand All @@ -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<BrapiTrial> trials) {
List<Object> itemDataList = new ArrayList<>();
for (BrapiTrial trial : trials) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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);
Expand All @@ -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<FieldBookImage, Void> function, final Function<Integer, Void> failFunction);
Expand Down

0 comments on commit 0a423c2

Please sign in to comment.