diff --git a/app/build.gradle b/app/build.gradle index 035af45..6bc52cd 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -29,8 +29,8 @@ android { applicationId "au.gov.health.covidsafe" minSdkVersion rootProject.ext.minSdkVersion targetSdkVersion rootProject.ext.targetSdkVersion - versionCode 125 - versionName "2.5" + versionCode 128 + versionName "2.6" buildConfigField "String", "GITHASH", "\"${getGitHash()}\"" testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" diff --git a/app/src/main/java/au/gov/health/covidsafe/HomeActivity.kt b/app/src/main/java/au/gov/health/covidsafe/HomeActivity.kt index 2daff1a..3c3c37d 100644 --- a/app/src/main/java/au/gov/health/covidsafe/HomeActivity.kt +++ b/app/src/main/java/au/gov/health/covidsafe/HomeActivity.kt @@ -31,6 +31,7 @@ import kotlinx.android.synthetic.main.activity_home.* private const val TAG = "HomeActivity" private const val UNAUTHORIZED = "Unauthorized" private const val UNAUTHENTICATED = "unauthenticated" +private const val CLOUDFRONT = "CloudFront" class HomeActivity : FragmentActivity(), NetworkConnectionCheck.NetworkConnectionListener, SensorDelegate { @@ -39,6 +40,7 @@ class HomeActivity : FragmentActivity(), NetworkConnectionCheck.NetworkConnectio var isWindowFocusChangeLiveData = MutableLiveData() var isJWTCorrupted = MutableLiveData() var isJWTExpired = MutableLiveData() + var cloudFrontIssue = MutableLiveData() override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) @@ -117,6 +119,9 @@ class HomeActivity : FragmentActivity(), NetworkConnectionCheck.NetworkConnectio if (it.errorBodyMessage.equals(UNAUTHORIZED) || it.errorBodyMessage.equals(UNAUTHENTICATED)) { isJWTCorrupted.postValue(true) isJWTExpired.postValue(true) + } else if (it.errorBodyMessage.equals(CLOUDFRONT)) { + isJWTExpired.postValue(true) + cloudFrontIssue.postValue(true) } else { Log.d("LEE", "Authenticate") isJWTCorrupted.postValue(false) diff --git a/app/src/main/java/au/gov/health/covidsafe/scheduler/GetMessagesScheduler.kt b/app/src/main/java/au/gov/health/covidsafe/scheduler/GetMessagesScheduler.kt index b4c1e6c..c892cf7 100644 --- a/app/src/main/java/au/gov/health/covidsafe/scheduler/GetMessagesScheduler.kt +++ b/app/src/main/java/au/gov/health/covidsafe/scheduler/GetMessagesScheduler.kt @@ -6,6 +6,7 @@ import android.app.job.JobScheduler import android.app.job.JobService import android.content.ComponentName import android.content.Context +import android.util.Log import au.gov.health.covidsafe.BuildConfig import au.gov.health.covidsafe.app.TracerApp import au.gov.health.covidsafe.extensions.isBatteryOptimizationDisabled @@ -26,6 +27,7 @@ import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.GlobalScope import kotlinx.coroutines.delay import kotlinx.coroutines.launch +import okhttp3.internal.toHeaderList import retrofit2.Call import retrofit2.Callback import retrofit2.Response @@ -174,7 +176,6 @@ object GetMessagesScheduler { messagesCall.enqueue(object : Callback { override fun onResponse(call: Call, response: Response) { val responseCode = response.code() - if (responseCode == 200) { CentralLog.d(TAG, "onResponse() got 200 response.") @@ -188,6 +189,12 @@ object GetMessagesScheduler { val messageResponse = MessagesResponse(emptyList(), null, false, errorMessage.message) messagesResponseCallback?.invoke(messageResponse) } + } else if (responseCode == 403) { + val server = response.headers()["server"] + if (!server.isNullOrEmpty() && server == "CloudFront") { + val messageResponse = MessagesResponse(emptyList(), null, false, "CloudFront") + messagesResponseCallback?.invoke(messageResponse) + } } else { CentralLog.w(TAG, "onResponse() got error response code = $responseCode.") } diff --git a/app/src/main/java/au/gov/health/covidsafe/ui/home/HomeFragment.kt b/app/src/main/java/au/gov/health/covidsafe/ui/home/HomeFragment.kt index 78336e0..e5c6777 100644 --- a/app/src/main/java/au/gov/health/covidsafe/ui/home/HomeFragment.kt +++ b/app/src/main/java/au/gov/health/covidsafe/ui/home/HomeFragment.kt @@ -73,6 +73,7 @@ class HomeFragment : BaseFragment(), EasyPermissions.PermissionCallbacks, Networ private var counter: Int = 0 private var jwtExpired: Boolean = false + private var cloudFront: Boolean = false private var checkIsInternetConnected = false private var isAppWithLatestVersion = false @@ -159,6 +160,7 @@ class HomeFragment : BaseFragment(), EasyPermissions.PermissionCallbacks, Networ isJWTExpired.observe(this@HomeFragment, isJwtExpired) isAppUpdateAvailableLiveData.observe(this@HomeFragment, latestAppAvailable) isWindowFocusChangeLiveData.observe(this@HomeFragment, refreshUiObserver) + cloudFrontIssue.observe(this@HomeFragment, isCloudFrontIssue) } homeFragmentViewModel.turnCaseNumber.observe(this, Observer { turnOn -> @@ -205,6 +207,15 @@ class HomeFragment : BaseFragment(), EasyPermissions.PermissionCallbacks, Networ } permissions_card_subtitle.visibility = GONE registration_layout.visibility = VISIBLE + if (cloudFront) { + re_register.visibility = GONE + register_body.visibility = GONE + geoblock_error_message.visibility = VISIBLE + } else { + re_register.visibility = VISIBLE + register_body.visibility = VISIBLE + geoblock_error_message.visibility = GONE + } } } }) @@ -237,6 +248,10 @@ class HomeFragment : BaseFragment(), EasyPermissions.PermissionCallbacks, Networ jwtExpired = expired } + private val isCloudFrontIssue = Observer { + cloudFront = it + } + override fun onResume() { super.onResume() diff --git a/app/src/main/java/au/gov/health/covidsafe/ui/onboarding/fragment/enternumber/EnterNumberFragment.kt b/app/src/main/java/au/gov/health/covidsafe/ui/onboarding/fragment/enternumber/EnterNumberFragment.kt index bbcd66d..0d3e57f 100644 --- a/app/src/main/java/au/gov/health/covidsafe/ui/onboarding/fragment/enternumber/EnterNumberFragment.kt +++ b/app/src/main/java/au/gov/health/covidsafe/ui/onboarding/fragment/enternumber/EnterNumberFragment.kt @@ -3,6 +3,7 @@ package au.gov.health.covidsafe.ui.onboarding.fragment.enternumber import android.annotation.SuppressLint import android.app.AlertDialog import android.content.Intent +import android.net.Uri import android.os.Bundle import android.view.KeyEvent import android.view.LayoutInflater @@ -16,9 +17,9 @@ import androidx.annotation.NavigationRes import androidx.core.content.ContextCompat import androidx.core.os.bundleOf import androidx.core.widget.addTextChangedListener -import au.gov.health.covidsafe.preference.Preference import au.gov.health.covidsafe.R import au.gov.health.covidsafe.app.TracerApp +import au.gov.health.covidsafe.preference.Preference import au.gov.health.covidsafe.talkback.setHeading import au.gov.health.covidsafe.ui.base.PagerChildFragment import au.gov.health.covidsafe.ui.base.UploadButtonLayout @@ -157,6 +158,18 @@ class EnterNumberFragment : PagerChildFragment() { .setPositiveButton(android.R.string.yes, null).show() } + fun showPhoneNumberWrong() { + alertDialog?.dismiss() + alertDialog = AlertDialog.Builder(activity) + .setMessage(R.string.max_registrations) + .setIcon(android.R.drawable.ic_dialog_alert) + .setNegativeButton(R.string.max_registration_button2, null) + .setPositiveButton(R.string.max_registrations_button1) { _,_ -> + startActivity(Intent(Intent.ACTION_VIEW, Uri.parse("https://covidsafe-form.service.gov.au/"))) + } + .show() + } + fun navigateToOTPPage( session: String, challengeName: String, diff --git a/app/src/main/java/au/gov/health/covidsafe/ui/onboarding/fragment/enternumber/EnterNumberPresenter.kt b/app/src/main/java/au/gov/health/covidsafe/ui/onboarding/fragment/enternumber/EnterNumberPresenter.kt index e74b047..093e4b7 100644 --- a/app/src/main/java/au/gov/health/covidsafe/ui/onboarding/fragment/enternumber/EnterNumberPresenter.kt +++ b/app/src/main/java/au/gov/health/covidsafe/ui/onboarding/fragment/enternumber/EnterNumberPresenter.kt @@ -71,9 +71,11 @@ class EnterNumberPresenter(private val enterNumberFragment: EnterNumberFragment) when { it is GetOnboardingOtpException.GetOtpInvalidNumberException -> { enterNumberFragment.showInvalidPhoneNumberPrompt(R.string.invalid_phone_number) + enterNumberFragment.showPhoneNumberWrong() } context.isInternetAvailable() -> { - enterNumberFragment.showGenericError() + enterNumberFragment.showPhoneNumberWrong() +// enterNumberFragment.showGenericError() } else -> { enterNumberFragment.showCheckInternetError() diff --git a/app/src/main/res/layout/view_home_setup_incomplete.xml b/app/src/main/res/layout/view_home_setup_incomplete.xml index 6d0cac6..aa7af36 100644 --- a/app/src/main/res/layout/view_home_setup_incomplete.xml +++ b/app/src/main/res/layout/view_home_setup_incomplete.xml @@ -148,6 +148,19 @@ tools:visibility="visible" android:text="@string/jwt_expired_description" /> + + diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 4e376f8..d2f4636 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -296,6 +296,8 @@ Please try again later Please check your internet connection + + You may be connected using an internet provider from outside Australia. This could happen when using international data roaming on a non-Australian SIM card.\n\nPlease connect to an Australian network or use a local Wi-Fi internet connection to continue. OK Heading Hide @@ -398,6 +400,9 @@ Loading latest numbers %@ locally acquired Main restrictions + Cancel + You\'ve reached the limit to register using the same mobile number.\n\nTo use the same mobile number to register again, you must request to delete your current registration information. + Request deletion COVIDSafe update in progress. \n\n Please make sure you phone is not switched off until the update is complete. Minute