Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 2 additions & 4 deletions app/src/org/commcare/activities/CommCareSetupActivity.java
Original file line number Diff line number Diff line change
Expand Up @@ -29,10 +29,9 @@
import org.commcare.connect.ConnectNavHelper;
import org.commcare.connect.PersonalIdManager;
import org.commcare.connect.database.ConnectUserDatabaseUtil;
import org.commcare.connect.database.ConnectJobUtils;
import org.commcare.connect.network.connect.ConnectApiHandler;
import org.commcare.connect.network.connect.models.ConnectOpportunitiesResponseModel;
import org.commcare.connect.network.connectId.PersonalIdApiErrorHandler;
import org.commcare.connect.network.PersonalIdOrConnectApiErrorHandler;
import androidx.annotation.Nullable;
import org.commcare.dalvik.BuildConfig;
import org.commcare.dalvik.R;
Expand Down Expand Up @@ -73,7 +72,6 @@
import org.javarosa.core.reference.ReferenceManager;
import org.javarosa.core.services.Logger;
import org.javarosa.core.services.locale.Localization;
import org.jetbrains.annotations.NotNull;

import java.io.IOException;
import java.security.SignatureException;
Expand Down Expand Up @@ -1011,7 +1009,7 @@ private void refreshOpportunities() {

@Override
public void onFailure(@NonNull PersonalIdOrConnectApiErrorCodes errorCode, @Nullable Throwable t) {
String error = PersonalIdApiErrorHandler.handle(activity, errorCode, t);
String error = PersonalIdOrConnectApiErrorHandler.handle(activity, errorCode, t);
Toast.makeText(activity, error, Toast.LENGTH_LONG).show();
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ import com.google.android.material.tabs.TabLayoutMediator
import org.commcare.activities.CommCareActivity
import org.commcare.activities.connect.viewmodel.PersonalIdWorkHistoryViewModel
import org.commcare.adapters.WorkHistoryViewPagerAdapter
import org.commcare.connect.network.connectId.PersonalIdApiErrorHandler
import org.commcare.connect.network.PersonalIdOrConnectApiErrorHandler
import org.commcare.dalvik.R
import org.commcare.dalvik.databinding.ActivityPersonalIdWorkHistoryBinding
import org.commcare.views.dialogs.CustomProgressDialog
Expand Down Expand Up @@ -73,7 +73,7 @@ class PersonalIdWorkHistoryActivity : CommCareActivity<PersonalIdWorkHistoryActi

private fun observeWorkHistoryApiCall() {
personalIdWorkHistoryViewModel.apiError.observe(this) { (code, throwable) ->
val errorMessage = PersonalIdApiErrorHandler.handle(this, code, throwable)
val errorMessage = PersonalIdOrConnectApiErrorHandler.handle(this, code, throwable)
Toast.makeText(this, errorMessage, Toast.LENGTH_SHORT).show()
}
}
Expand Down
4 changes: 2 additions & 2 deletions app/src/org/commcare/connect/ConnectJobHelper.kt
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ import org.commcare.connect.network.connect.ConnectApiHandler
import org.commcare.connect.network.connect.models.ConnectOpportunitiesResponseModel
import org.commcare.connect.network.connect.models.DeliveryAppProgressResponseModel
import org.commcare.connect.network.connect.models.LearningAppProgressResponseModel
import org.commcare.connect.network.connectId.PersonalIdApiErrorHandler
import org.commcare.connect.network.PersonalIdOrConnectApiErrorHandler
import org.commcare.google.services.analytics.AnalyticsParamValue.FINISH_DELIVERY
import org.commcare.google.services.analytics.AnalyticsParamValue.PAID_DELIVERY
import org.commcare.google.services.analytics.AnalyticsParamValue.START_DELIVERY
Expand Down Expand Up @@ -159,7 +159,7 @@ object ConnectJobHelper {
Toast
.makeText(
context,
PersonalIdApiErrorHandler.handle(context, errorCode, t),
PersonalIdOrConnectApiErrorHandler.handle(context, errorCode, t),
Toast.LENGTH_LONG,
).show()
FirebaseAnalyticsUtil.reportCccApiPaymentConfirmation(false)
Expand Down
Original file line number Diff line number Diff line change
@@ -1,40 +1,42 @@
package org.commcare.connect.network.connectId;
package org.commcare.connect.network;

import android.app.Activity;
import android.content.Context;

import androidx.annotation.Nullable;

import org.commcare.connect.network.ConnectNetworkHelper;
import org.commcare.connect.network.base.BaseApiHandler;
import org.commcare.dalvik.R;
import org.javarosa.core.services.Logger;

/**
* Utility class for handling standardized API error responses across the configuration flow.
* <p>
* This class provides a centralized method to interpret and react to various
* {@link PersonalIdApiHandler.PersonalIdOrConnectApiErrorCodes} returned by the network layer.
* {@link BaseApiHandler.PersonalIdOrConnectApiErrorCodes} returned by the network layer.
* It ensures consistent user feedback (e.g. toasts, dialogs) and error recovery
* flows (e.g. token management or outdated API messages) across all API interactions.
* </p>
* <p>
* Usage Example:
* <pre>
* PersonalIdApiErrorHandler.handle(requireActivity(), failureCode);
* PersonalIdOrConnectApiErrorHandler.handle(requireActivity(), failureCode);
* </pre>
*/
public class PersonalIdApiErrorHandler {
public class PersonalIdOrConnectApiErrorHandler {

/**
* Handles an API error by interpreting the error code and taking an appropriate
* user-facing action, such as displaying a toast or triggering a token renewal.
*
* @param context the context (usually the current Activity) used to display UI elements
* @param errorCode the specific {@link PersonalIdApiHandler.PersonalIdOrConnectApiErrorCodes} to handle
* @param context the context (usually the current Activity) used to display UI elements
* @param errorCode the specific {@link BaseApiHandler.PersonalIdOrConnectApiErrorCodes} to handle
* @param t the exception that was thrown, if any; can be null
*/
public static String handle(Context context, PersonalIdApiHandler.PersonalIdOrConnectApiErrorCodes errorCode,
@Nullable Throwable t) {
public static String handle(
Context context,
BaseApiHandler.PersonalIdOrConnectApiErrorCodes errorCode,
@Nullable Throwable t
) {
switch (errorCode) {
case NETWORK_ERROR:
return context.getString(R.string.recovery_network_unavailable);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@
import org.commcare.connect.database.ConnectJobUtils;
import org.commcare.connect.database.ConnectUserDatabaseUtil;
import org.commcare.connect.network.connect.ConnectApiHandler;
import org.commcare.connect.network.connectId.PersonalIdApiErrorHandler;
import org.commcare.connect.network.PersonalIdOrConnectApiErrorHandler;
import org.commcare.dalvik.R;
import org.commcare.dalvik.databinding.FragmentConnectDeliveryDetailsBinding;
import org.commcare.google.services.analytics.FirebaseAnalyticsUtil;
Expand Down Expand Up @@ -105,7 +105,7 @@ public void onFailure(@NonNull PersonalIdOrConnectApiErrorCodes errorCode, @Null
if (errorCode == PersonalIdOrConnectApiErrorCodes.BAD_REQUEST_ERROR) {
message = getString(R.string.recovery_unable_to_claim_opportunity);
} else {
message = PersonalIdApiErrorHandler.handle(requireActivity(), errorCode, t);
message = PersonalIdOrConnectApiErrorHandler.handle(requireActivity(), errorCode, t);
}
showSnackBarWithDismissAction(getBinding().getRoot(), message);
FirebaseAnalyticsUtil.reportCccApiClaimJob(false);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,17 +19,13 @@
import org.commcare.connect.ConnectDateUtils;
import org.commcare.connect.database.ConnectJobUtils;
import org.commcare.connect.database.ConnectUserDatabaseUtil;
import org.commcare.connect.network.ApiConnect;
import org.commcare.connect.network.ConnectNetworkHelper;
import org.commcare.connect.network.IApiCallback;
import org.commcare.connect.network.connect.ConnectApiHandler;
import org.commcare.connect.network.connectId.PersonalIdApiErrorHandler;
import org.commcare.connect.network.PersonalIdOrConnectApiErrorHandler;
import org.commcare.dalvik.R;
import org.commcare.dalvik.databinding.FragmentConnectJobIntroBinding;
import org.commcare.google.services.analytics.FirebaseAnalyticsUtil;
import org.jetbrains.annotations.NotNull;

import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;
import java.util.Locale;
Expand Down Expand Up @@ -119,7 +115,7 @@ private void startLearning(boolean appInstalled) {

@Override
public void onFailure(@NonNull PersonalIdOrConnectApiErrorCodes errorCode, @Nullable Throwable t) {
Toast.makeText(requireContext(), PersonalIdApiErrorHandler.handle(requireActivity(), errorCode, t),Toast.LENGTH_LONG).show();
Toast.makeText(requireContext(), PersonalIdOrConnectApiErrorHandler.handle(requireActivity(), errorCode, t),Toast.LENGTH_LONG).show();
reportApiCall(false);
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,6 @@
import static org.commcare.connect.ConnectConstants.LEARN_APP;
import static org.commcare.connect.ConnectConstants.NEW_APP;

import android.app.Activity;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
Expand All @@ -34,7 +33,7 @@
import org.commcare.connect.database.ConnectUserDatabaseUtil;
import org.commcare.connect.network.connect.ConnectApiHandler;
import org.commcare.connect.network.connect.models.ConnectOpportunitiesResponseModel;
import org.commcare.connect.network.connectId.PersonalIdApiErrorHandler;
import org.commcare.connect.network.PersonalIdOrConnectApiErrorHandler;
import org.commcare.dalvik.R;
import org.commcare.dalvik.databinding.FragmentConnectJobsListBinding;
import org.commcare.fragments.base.BaseConnectFragment;
Expand Down Expand Up @@ -81,7 +80,7 @@ public void refreshData() {

@Override
public void onFailure(@NonNull PersonalIdOrConnectApiErrorCodes errorCode, @Nullable Throwable t) {
Toast.makeText(requireContext(), PersonalIdApiErrorHandler.handle(requireActivity(), errorCode, t),Toast.LENGTH_LONG).show();
Toast.makeText(requireContext(), PersonalIdOrConnectApiErrorHandler.handle(requireActivity(), errorCode, t),Toast.LENGTH_LONG).show();
navigateFailure();
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@
import org.commcare.connect.ConnectConstants;
import org.commcare.connect.database.ConnectDatabaseHelper;
import org.commcare.connect.database.ConnectUserDatabaseUtil;
import org.commcare.connect.network.connectId.PersonalIdApiErrorHandler;
import org.commcare.connect.network.PersonalIdOrConnectApiErrorHandler;
import org.commcare.connect.network.connectId.PersonalIdApiHandler;
import org.commcare.dalvik.R;
import org.commcare.dalvik.databinding.FragmentRecoveryCodeBinding;
Expand Down Expand Up @@ -207,7 +207,7 @@ public void onFailure(PersonalIdOrConnectApiErrorCodes failureCode, Throwable t)
if (handleCommonSignupFailures(failureCode)) {
return;
}
showError(PersonalIdApiErrorHandler.handle(requireActivity(), failureCode, t));
showError(PersonalIdOrConnectApiErrorHandler.handle(requireActivity(), failureCode, t));
if (failureCode.shouldAllowRetry()) {
enableContinueButton(true);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,14 +11,13 @@
import android.view.WindowManager;

import androidx.annotation.NonNull;
import androidx.fragment.app.Fragment;
import androidx.lifecycle.ViewModelProvider;
import androidx.navigation.NavDirections;
import androidx.navigation.Navigation;

import org.commcare.activities.connect.viewmodel.PersonalIdSessionDataViewModel;
import org.commcare.android.database.connect.models.PersonalIdSessionData;
import org.commcare.connect.network.connectId.PersonalIdApiErrorHandler;
import org.commcare.connect.network.PersonalIdOrConnectApiErrorHandler;
import org.commcare.connect.network.connectId.PersonalIdApiHandler;
import org.commcare.dalvik.databinding.ScreenPersonalidNameBinding;
import org.commcare.google.services.analytics.FirebaseAnalyticsUtil;
Expand Down Expand Up @@ -96,7 +95,7 @@ public void onFailure(PersonalIdOrConnectApiErrorCodes failureCode, Throwable t)


private void navigateFailure(PersonalIdApiHandler.PersonalIdOrConnectApiErrorCodes failureCode, Throwable t) {
showError(PersonalIdApiErrorHandler.handle(requireActivity(), failureCode, t));
showError(PersonalIdOrConnectApiErrorHandler.handle(requireActivity(), failureCode, t));

if (failureCode.shouldAllowRetry()) {
enableContinueButton(true);
Expand Down
Original file line number Diff line number Diff line change
@@ -1,34 +1,25 @@
package org.commcare.fragments.personalId;

import android.Manifest;
import android.annotation.SuppressLint;
import android.app.Activity;
import android.content.Context;
import android.content.DialogInterface;
import android.graphics.Color;
import android.graphics.drawable.ColorDrawable;
import android.location.Location;
import android.os.Bundle;
import android.text.Editable;
import android.text.TextUtils;
import android.text.TextWatcher;
import android.text.method.LinkMovementMethod;
import android.view.Gravity;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.view.WindowManager;
import android.widget.LinearLayout;
import android.widget.PopupWindow;
import android.widget.Toast;

import androidx.activity.result.ActivityResultLauncher;
import androidx.activity.result.IntentSenderRequest;
import androidx.activity.result.contract.ActivityResultContracts;
import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;
import androidx.appcompat.widget.AppCompatImageView;
import androidx.appcompat.widget.AppCompatTextView;
import androidx.lifecycle.ViewModelProvider;
import androidx.navigation.NavDirections;
import androidx.navigation.Navigation;
Expand All @@ -49,7 +40,7 @@
import org.commcare.android.logging.ReportingUtils;
import org.commcare.connect.ConnectConstants;
import org.commcare.connect.network.base.BaseApiHandler;
import org.commcare.connect.network.connectId.PersonalIdApiErrorHandler;
import org.commcare.connect.network.PersonalIdOrConnectApiErrorHandler;
import org.commcare.connect.network.connectId.PersonalIdApiHandler;
import org.commcare.dalvik.R;
import org.commcare.dalvik.databinding.ScreenPersonalidPhonenoBinding;
Expand Down Expand Up @@ -520,7 +511,7 @@ private void onConfigurationSuccess() {
}

private void navigateFailure(PersonalIdApiHandler.PersonalIdOrConnectApiErrorCodes failureCode, Throwable t) {
showError(PersonalIdApiErrorHandler.handle(requireActivity(), failureCode, t));
showError(PersonalIdOrConnectApiErrorHandler.handle(requireActivity(), failureCode, t));
if (failureCode.shouldAllowRetry()) {
enableContinueButton(true);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@
import org.commcare.android.database.connect.models.PersonalIdSessionData;
import org.commcare.connect.SMSBroadcastReceiver;
import org.commcare.connect.network.base.BaseApiHandler;
import org.commcare.connect.network.connectId.PersonalIdApiErrorHandler;
import org.commcare.connect.network.PersonalIdOrConnectApiErrorHandler;
import org.commcare.dalvik.R;
import org.commcare.dalvik.databinding.ScreenPersonalidPhoneVerifyBinding;
import org.commcare.google.services.analytics.FirebaseAnalyticsUtil;
Expand Down Expand Up @@ -141,7 +141,7 @@ public void onPersonalIdApiFailure(
if (handleCommonSignupFailures(failureCode)) {
return;
}
String error = PersonalIdApiErrorHandler.handle(activity, failureCode, t);
String error = PersonalIdOrConnectApiErrorHandler.handle(activity, failureCode, t);
if (failureCode == BaseApiHandler.PersonalIdOrConnectApiErrorCodes.FAILED_AUTH_ERROR) {
error = getString(R.string.personalid_incorrect_otp);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,6 @@
import androidx.activity.result.contract.ActivityResultContracts;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.fragment.app.Fragment;
import androidx.lifecycle.ViewModelProvider;
import androidx.navigation.NavDirections;
import androidx.navigation.Navigation;
Expand All @@ -25,7 +24,7 @@
import org.commcare.connect.ConnectConstants;
import org.commcare.connect.database.ConnectDatabaseHelper;
import org.commcare.connect.database.ConnectUserDatabaseUtil;
import org.commcare.connect.network.connectId.PersonalIdApiErrorHandler;
import org.commcare.connect.network.PersonalIdOrConnectApiErrorHandler;
import org.commcare.connect.network.connectId.PersonalIdApiHandler;
import org.commcare.dalvik.R;
import org.commcare.dalvik.databinding.ScreenPersonalidPhotoCaptureBinding;
Expand Down Expand Up @@ -107,7 +106,7 @@ private void onCompleteProfileFailure(PersonalIdApiHandler.PersonalIdOrConnectAp
return;
}

showError(PersonalIdApiErrorHandler.handle(requireActivity(), failureCode, t));
showError(PersonalIdOrConnectApiErrorHandler.handle(requireActivity(), failureCode, t));

if (failureCode.shouldAllowRetry()) {
enableTakePhotoButton();
Expand Down
2 changes: 0 additions & 2 deletions app/src/org/commcare/utils/FirebaseAuthService.java
Original file line number Diff line number Diff line change
Expand Up @@ -18,8 +18,6 @@
import androidx.annotation.NonNull;

import org.commcare.android.database.connect.models.PersonalIdSessionData;
import org.commcare.connect.network.base.BaseApiHandler;
import org.commcare.connect.network.connectId.PersonalIdApiErrorHandler;
import org.commcare.connect.network.connectId.PersonalIdApiHandler;
import org.javarosa.core.services.Logger;

Expand Down
2 changes: 0 additions & 2 deletions app/src/org/commcare/utils/PersonalIDAuthService.kt
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,6 @@ package org.commcare.utils

import android.app.Activity
import org.commcare.android.database.connect.models.PersonalIdSessionData
import org.commcare.connect.network.base.BaseApiHandler.PersonalIdOrConnectApiErrorCodes
import org.commcare.connect.network.connectId.PersonalIdApiErrorHandler
import org.commcare.connect.network.connectId.PersonalIdApiHandler


Expand Down
4 changes: 2 additions & 2 deletions app/src/org/commcare/utils/PushNotificationApiHelper.kt
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ import org.commcare.connect.ConnectConstants.PAYMENT_ID
import org.commcare.connect.ConnectConstants.REDIRECT_ACTION
import org.commcare.connect.database.ConnectUserDatabaseUtil
import org.commcare.connect.database.NotificationRecordDatabaseHelper
import org.commcare.connect.network.connectId.PersonalIdApiErrorHandler
import org.commcare.connect.network.PersonalIdOrConnectApiErrorHandler
import org.commcare.connect.network.connectId.PersonalIdApiHandler
import org.commcare.pn.helper.NotificationBroadcastHelper
import org.commcare.pn.workers.MessagingChannelsKeySyncWorker
Expand Down Expand Up @@ -98,7 +98,7 @@ object PushNotificationApiHelper {
continuation.resume(
Result.failure(
Exception(
PersonalIdApiErrorHandler.handle(
PersonalIdOrConnectApiErrorHandler.handle(
context,
failureCode,
t,
Expand Down