diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml
index 8b49bf0e..0ff29eb6 100644
--- a/.github/workflows/publish.yml
+++ b/.github/workflows/publish.yml
@@ -182,11 +182,6 @@ jobs:
with:
lane: build
options: '{ "flavor": "safaridoctors_kenya" }'
- - name: Assemble simprints
- uses: maierj/fastlane-action@v1.4.0
- with:
- lane: build
- options: '{ "flavor": "simprints" }'
- name: Assemble surveillance_covid19_kenya
uses: maierj/fastlane-action@v1.4.0
with:
diff --git a/build.gradle b/build.gradle
index 987785fb..6baf06b9 100644
--- a/build.gradle
+++ b/build.gradle
@@ -30,8 +30,6 @@ repositories {
}
}
-def simprintsApiKey, simprintsModuleId, simprintsUserId
-
def getVersionCode = {
int versionCode = 2
if (System.env.CI == 'true' && System.env.RELEASE_VERSION && System.env.RELEASE_VERSION.startsWith('v')) {
@@ -97,30 +95,6 @@ android {
buildConfigField "String", "LOG_TAG", '"MedicMobile"'
buildConfigField "Long", "TTL_LAST_URL", '24l * 60 * 60 * 1000' // 24 hs max time last URL loaded is remembered
- if (System.env.SIMPRINTS_API_KEY) {
- buildConfigField "String", "SIMPRINTS_API_KEY", /"${System.env.SIMPRINTS_API_KEY}"/
- } else if (simprintsApiKey) {
- buildConfigField "String", "SIMPRINTS_API_KEY", /"${simprintsApiKey}"/
- } else {
- buildConfigField "String", "SIMPRINTS_API_KEY", /"Medic's API Key"/
- }
-
- if (System.env.SIMPRINTS_USER_ID) {
- buildConfigField "String", "SIMPRINTS_USER_ID", /"${System.env.SIMPRINTS_USER_ID}"/
- } else if (simprintsUserId) {
- buildConfigField "String", "SIMPRINTS_USER_ID", /"${simprintsUserId}"/
- } else {
- buildConfigField "String", "SIMPRINTS_USER_ID", '"some-user-id"'
- }
-
- if (System.env.SIMPRINTS_MODULE_ID) {
- buildConfigField "String", "SIMPRINTS_MODULE_ID", /"${System.env.SIMPRINTS_MODULE_ID}"/
- } else if (simprintsModuleId) {
- buildConfigField "String", "SIMPRINTS_MODULE_ID", /"${simprintsModuleId}"/
- } else {
- buildConfigField "String", "SIMPRINTS_MODULE_ID", '"Medic Module ID"'
- }
-
// Every APK requires a unique version code.
// So when compiling multiple APKS for the different ABIs, use the first digit
variant.outputs.each { output ->
@@ -144,7 +118,7 @@ android {
}
release {
minifyEnabled true
- proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'config/libsimprints.pro'
+ proguardFiles getDefaultProguardFile('proguard-android-optimize.txt')
shrinkResources true
signingConfig signingConfigs.release
}
@@ -188,9 +162,6 @@ android {
// for `unbranded` - it will use the defaults in
// src/main
dimension = 'brand'
- simprintsApiKey = 'f4c47c4e-d6ee-444f-b16e-22a4761b1f3c'
- simprintsModuleId = 'simprints.app'
- simprintsUserId = 'test@simprints.app'
}
medicmobiledemo {
@@ -308,15 +279,6 @@ android {
applicationId = 'org.medicmobile.webapp.mobile.safaridoctors_kenya'
}
- simprints {
- dimension = 'brand'
- applicationId = 'org.medicmobile.webapp.mobile.simprints'
-
- simprintsApiKey = 'f4c47c4e-d6ee-444f-b16e-22a4761b1f3c'
- simprintsModuleId = 'simprints.app'
- simprintsUserId = 'test@simprints.app'
- }
-
vhw_burundi {
dimension = 'brand'
applicationId = 'org.medicmobile.webapp.mobile.vhw_burundi'
@@ -396,7 +358,6 @@ android {
dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
- implementation 'com.simprints:LibSimprints:1.0.11'
implementation 'com.github.Mariovc:ImagePicker:1.2.2'
// Latest version of androidx.core requires Android 12+
// noinspection GradleDependency
diff --git a/config/libsimprints.pro b/config/libsimprints.pro
deleted file mode 100644
index d334fee2..00000000
--- a/config/libsimprints.pro
+++ /dev/null
@@ -1,3 +0,0 @@
--keep class com.simprints.libsimprints.* implements android.os.Parcelable {
- *;
-}
diff --git a/gradle.properties b/gradle.properties
index 8a3062f7..07f6f783 100644
--- a/gradle.properties
+++ b/gradle.properties
@@ -1,4 +1,4 @@
android.useAndroidX=true
-# Remove 'android.enableJetifier=true' when dropping the libraries: com.simprints:LibSimprints and com.github.Mariovc:ImagePicker.
+# Remove 'android.enableJetifier=true' when dropping the library: com.github.Mariovc:ImagePicker.
android.enableJetifier=true
org.gradle.jvmargs=-Xmx2048m
diff --git a/src/main/AndroidManifest.xml b/src/main/AndroidManifest.xml
index 1fa8a3f6..232efd8e 100644
--- a/src/main/AndroidManifest.xml
+++ b/src/main/AndroidManifest.xml
@@ -69,9 +69,6 @@
-
-
-
diff --git a/src/main/java/org/medicmobile/webapp/mobile/ChtExternalAppHandler.java b/src/main/java/org/medicmobile/webapp/mobile/ChtExternalAppHandler.java
index 07239190..5cad0911 100644
--- a/src/main/java/org/medicmobile/webapp/mobile/ChtExternalAppHandler.java
+++ b/src/main/java/org/medicmobile/webapp/mobile/ChtExternalAppHandler.java
@@ -3,8 +3,7 @@
import static android.Manifest.permission.READ_EXTERNAL_STORAGE;
import static android.app.Activity.RESULT_OK;
import static android.content.pm.PackageManager.PERMISSION_GRANTED;
-import static org.medicmobile.webapp.mobile.EmbeddedBrowserActivity.ACCESS_STORAGE_PERMISSION_REQUEST_CODE;
-import static org.medicmobile.webapp.mobile.EmbeddedBrowserActivity.CHT_EXTERNAL_APP_ACTIVITY_REQUEST_CODE;
+import static org.medicmobile.webapp.mobile.EmbeddedBrowserActivity.RequestCode;
import static org.medicmobile.webapp.mobile.JavascriptUtils.safeFormat;
import static org.medicmobile.webapp.mobile.MedicLog.error;
import static org.medicmobile.webapp.mobile.MedicLog.trace;
@@ -59,7 +58,11 @@ void startIntent(ChtExternalApp chtExternalApp) {
if (ContextCompat.checkSelfPermission(this.context, READ_EXTERNAL_STORAGE) != PERMISSION_GRANTED) {
trace(this, "ChtExternalAppHandler :: Requesting storage permissions to process image files taken from external apps");
this.lastIntent = intent; // Saving intent to start it when permission is granted.
- ActivityCompat.requestPermissions(this.context, PERMISSIONS_STORAGE, ACCESS_STORAGE_PERMISSION_REQUEST_CODE);
+ ActivityCompat.requestPermissions(
+ this.context,
+ PERMISSIONS_STORAGE,
+ RequestCode.ACCESS_STORAGE_PERMISSION.getCode()
+ );
return;
}
@@ -80,7 +83,7 @@ void resumeActivity() {
private void startActivity(Intent intent) {
try {
trace(this, "ChtExternalAppHandler :: Starting activity %s %s", intent, intent.getExtras());
- this.context.startActivityForResult(intent, CHT_EXTERNAL_APP_ACTIVITY_REQUEST_CODE);
+ this.context.startActivityForResult(intent, RequestCode.CHT_EXTERNAL_APP_ACTIVITY.getCode());
} catch (Exception exception) {
error(exception, "ChtExternalAppHandler :: Error when starting the activity %s %s", intent, intent.getExtras());
diff --git a/src/main/java/org/medicmobile/webapp/mobile/EmbeddedBrowserActivity.java b/src/main/java/org/medicmobile/webapp/mobile/EmbeddedBrowserActivity.java
index 8a8c06a4..d8557c03 100644
--- a/src/main/java/org/medicmobile/webapp/mobile/EmbeddedBrowserActivity.java
+++ b/src/main/java/org/medicmobile/webapp/mobile/EmbeddedBrowserActivity.java
@@ -37,31 +37,25 @@
import androidx.core.content.ContextCompat;
import java.util.Arrays;
+import java.util.Optional;
@SuppressWarnings({ "PMD.GodClass", "PMD.TooManyMethods" })
public class EmbeddedBrowserActivity extends LockableActivity {
- /**
- * Any activity result with all 3 low bits set is _not_ a simprints result.
- *
- * The following block of bit-shifted integers are intended for use in the subsystem seen
- * in the onActivityResult below. These integers respect the reserved block of integers
- * which are used by simprints. Simprint intents are started in the webapp where a matching
- * bitmask is used to respect the scheme on that side of things.
- * */
- private static final int NON_SIMPRINTS_FLAGS = 0x7;
- static final int GRAB_PHOTO_ACTIVITY_REQUEST_CODE = (0 << 3) | NON_SIMPRINTS_FLAGS;
- static final int GRAB_MRDT_PHOTO_ACTIVITY_REQUEST_CODE = (1 << 3) | NON_SIMPRINTS_FLAGS;
- static final int DISCLOSURE_LOCATION_ACTIVITY_REQUEST_CODE = (2 << 3) | NON_SIMPRINTS_FLAGS;
- static final int ACCESS_STORAGE_PERMISSION_REQUEST_CODE = (3 << 3) | NON_SIMPRINTS_FLAGS;
- static final int CHT_EXTERNAL_APP_ACTIVITY_REQUEST_CODE = (4 << 3) | NON_SIMPRINTS_FLAGS;
- static final int ACCESS_LOCATION_PERMISSION_REQUEST_CODE = (5 << 3) | NON_SIMPRINTS_FLAGS;
+
+ private WebView container;
+ private SettingsStore settings;
+ private String appUrl;
+ private MrdtSupport mrdt;
+ private PhotoGrabber photoGrabber;
+ private SmsSender smsSender;
+ private ChtExternalAppHandler chtExternalAppHandler;
+ private boolean isMigrationRunning = false;
static final String[] LOCATION_PERMISSIONS = { ACCESS_FINE_LOCATION, ACCESS_COARSE_LOCATION };
private static final ValueCallback IGNORE_RESULT = new ValueCallback() {
public void onReceiveValue(String result) { /* ignore */ }
};
-
private final ValueCallback backButtonHandler = new ValueCallback() {
public void onReceiveValue(String result) {
if(!"true".equals(result)) {
@@ -70,16 +64,6 @@ public void onReceiveValue(String result) {
}
};
- private WebView container;
- private SettingsStore settings;
- private String appUrl;
- private SimprintsSupport simprints;
- private MrdtSupport mrdt;
- private PhotoGrabber photoGrabber;
- private SmsSender smsSender;
- private ChtExternalAppHandler chtExternalAppHandler;
-
- private boolean isMigrationRunning = false;
//> ACTIVITY LIFECYCLE METHODS
@Override public void onCreate(Bundle savedInstanceState) {
@@ -87,7 +71,6 @@ public void onReceiveValue(String result) {
trace(this, "Starting webview...");
- this.simprints = new SimprintsSupport(this);
this.photoGrabber = new PhotoGrabber(this);
this.mrdt = new MrdtSupport(this);
this.chtExternalAppHandler = new ChtExternalAppHandler(this);
@@ -210,48 +193,56 @@ protected void onStop() {
backButtonHandler);
}
- @Override protected void onActivityResult(int requestCode, int resultCode, Intent intent) {
- try {
- trace(this, "onActivityResult() :: requestCode=%s, resultCode=%s",
- requestCodeToString(requestCode), resultCode);
+ @Override protected void onActivityResult(int requestCd, int resultCode, Intent intent) {
+ Optional requestCodeOpt = RequestCode.valueOf(requestCd);
- if((requestCode & NON_SIMPRINTS_FLAGS) != NON_SIMPRINTS_FLAGS) {
- String js = simprints.process(requestCode, intent);
- trace(this, "Executing JavaScript: %s", js);
- evaluateJavascript(js);
- return;
- }
+ if (!requestCodeOpt.isPresent()) {
+ trace(this, "onActivityResult() :: no handling for requestCode=%s", requestCd);
+ return;
+ }
- switch(requestCode) {
- case GRAB_PHOTO_ACTIVITY_REQUEST_CODE:
+ RequestCode requestCode = requestCodeOpt.get();
+
+ try {
+ trace(this, "onActivityResult() :: requestCode=%s, resultCode=%s", requestCode.name(), resultCode);
+
+ switch (requestCode) {
+ case GRAB_PHOTO_ACTIVITY:
photoGrabber.process(requestCode, resultCode, intent);
return;
- case GRAB_MRDT_PHOTO_ACTIVITY_REQUEST_CODE:
+ case GRAB_MRDT_PHOTO_ACTIVITY:
processMrdtResult(requestCode, resultCode, intent);
return;
- case DISCLOSURE_LOCATION_ACTIVITY_REQUEST_CODE:
+ case DISCLOSURE_LOCATION_ACTIVITY:
processLocationPermissionResult(resultCode);
return;
- case CHT_EXTERNAL_APP_ACTIVITY_REQUEST_CODE:
+ case CHT_EXTERNAL_APP_ACTIVITY:
processChtExternalAppResult(resultCode, intent);
return;
default:
- trace(this, "onActivityResult() :: no handling for requestCode=%s",
- requestCodeToString(requestCode));
+ trace(this, "onActivityResult() :: no handling for requestCode=%s", requestCode.name());
}
- } catch(Exception ex) {
+ } catch (Exception ex) {
String action = intent == null ? null : intent.getAction();
warn(ex, "Problem handling intent %s (%s) with requestCode=%s & resultCode=%s",
- intent, action, requestCodeToString(requestCode), resultCode);
+ intent, action, requestCode.name(), resultCode);
}
}
@Override
- public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
- super.onRequestPermissionsResult(requestCode, permissions, grantResults);
+ public void onRequestPermissionsResult(int requestCd, String[] permissions, int[] grantResults) {
+ Optional requestCodeOpt = RequestCode.valueOf(requestCd);
+
+ if (!requestCodeOpt.isPresent()) {
+ trace(this, "onRequestPermissionsResult() :: no handling for requestCode=%s", requestCd);
+ return;
+ }
+
+ RequestCode requestCode = requestCodeOpt.get();
+ super.onRequestPermissionsResult(requestCd, permissions, grantResults);
boolean granted = grantResults.length > 0 && grantResults[0] == PERMISSION_GRANTED;
- if (requestCode == ACCESS_LOCATION_PERMISSION_REQUEST_CODE) {
+ if (requestCode == RequestCode.ACCESS_LOCATION_PERMISSION) {
if (granted) {
locationRequestResolved();
return;
@@ -260,7 +251,7 @@ public void onRequestPermissionsResult(int requestCode, String[] permissions, in
return;
}
- if (requestCode == ACCESS_STORAGE_PERMISSION_REQUEST_CODE) {
+ if (requestCode == RequestCode.ACCESS_STORAGE_PERMISSION) {
if (granted) {
this.chtExternalAppHandler.resumeActivity();
return;
@@ -271,10 +262,6 @@ public void onRequestPermissionsResult(int requestCode, String[] permissions, in
}
//> ACCESSORS
- SimprintsSupport getSimprintsSupport() {
- return this.simprints;
- }
-
MrdtSupport getMrdtSupport() {
return this.mrdt;
}
@@ -334,7 +321,7 @@ public boolean getLocationPermissions() {
trace(this, "getLocationPermissions() :: location not granted before, requesting access...");
Intent intent = new Intent(this, RequestPermissionActivity.class);
- startActivityForResult(intent, DISCLOSURE_LOCATION_ACTIVITY_REQUEST_CODE);
+ startActivityForResult(intent, RequestCode.DISCLOSURE_LOCATION_ACTIVITY.getCode());
return false;
}
@@ -343,38 +330,25 @@ public void locationRequestResolved() {
}
//> PRIVATE HELPERS
- private String requestCodeToString(int requestCode) {
- switch (requestCode) {
- case ACCESS_LOCATION_PERMISSION_REQUEST_CODE:
- return "ACCESS_LOCATION_PERMISSION_REQUEST_CODE";
- case DISCLOSURE_LOCATION_ACTIVITY_REQUEST_CODE:
- return "DISCLOSURE_LOCATION_ACTIVITY_REQUEST_CODE";
- case GRAB_PHOTO_ACTIVITY_REQUEST_CODE:
- return "GRAB_PHOTO_ACTIVITY_REQUEST_CODE";
- case GRAB_MRDT_PHOTO_ACTIVITY_REQUEST_CODE:
- return "GRAB_MRDT_PHOTO_ACTIVITY_REQUEST_CODE";
- case CHT_EXTERNAL_APP_ACTIVITY_REQUEST_CODE:
- return "CHT_EXTERNAL_APP_ACTIVITY_REQUEST_CODE";
- default:
- return String.valueOf(requestCode);
- }
- }
-
private void processChtExternalAppResult(int resultCode, Intent intentData) {
String script = this.chtExternalAppHandler.processResult(resultCode, intentData);
trace(this, "ChtExternalAppHandler :: Executing JavaScript: %s", script);
evaluateJavascript(script);
}
- private void processMrdtResult(int requestCode, int resultCode, Intent intent) {
- String js = mrdt.process(requestCode, resultCode, intent);
+ private void processMrdtResult(RequestCode requestCode, int resultCode, Intent intent) {
+ String js = mrdt.process(requestCode, intent);
trace(this, "Executing JavaScript: %s", js);
evaluateJavascript(js);
}
private void processLocationPermissionResult(int resultCode) {
if (resultCode == RESULT_OK) {
- ActivityCompat.requestPermissions(this, LOCATION_PERMISSIONS, ACCESS_LOCATION_PERMISSION_REQUEST_CODE);
+ ActivityCompat.requestPermissions(
+ this,
+ LOCATION_PERMISSIONS,
+ RequestCode.ACCESS_LOCATION_PERMISSION.getCode()
+ );
} else if (resultCode == RESULT_CANCELED) {
processGeolocationDeniedStatus();
}
@@ -488,4 +462,32 @@ private void registerRetryConnectionBroadcastReceiver() {
};
registerReceiver(broadcastReceiver, new IntentFilter("retryConnection"));
}
+
+//> ENUMS
+ public enum RequestCode {
+ ACCESS_LOCATION_PERMISSION(100),
+ ACCESS_STORAGE_PERMISSION(101),
+ CHT_EXTERNAL_APP_ACTIVITY(102),
+ DISCLOSURE_LOCATION_ACTIVITY(103),
+ GRAB_MRDT_PHOTO_ACTIVITY(104),
+ GRAB_PHOTO_ACTIVITY(105);
+
+ private final int requestCode;
+
+ RequestCode(int requestCode) {
+ this.requestCode = requestCode;
+ }
+
+ public static Optional valueOf(int code) {
+ return Arrays
+ .stream(RequestCode.values())
+ .filter(e -> e.getCode() == code)
+ .findFirst();
+ }
+
+ public int getCode() {
+ return requestCode;
+ }
+ }
+
}
diff --git a/src/main/java/org/medicmobile/webapp/mobile/MedicAndroidJavascript.java b/src/main/java/org/medicmobile/webapp/mobile/MedicAndroidJavascript.java
index 5994b1d6..cc839b34 100644
--- a/src/main/java/org/medicmobile/webapp/mobile/MedicAndroidJavascript.java
+++ b/src/main/java/org/medicmobile/webapp/mobile/MedicAndroidJavascript.java
@@ -42,7 +42,6 @@ public class MedicAndroidJavascript {
private static final String DATE_FORMAT = "yyyy-MM-dd";
private final EmbeddedBrowserActivity parent;
- private final SimprintsSupport simprints;
private final MrdtSupport mrdt;
private final SmsSender smsSender;
private final ChtExternalAppHandler chtExternalAppHandler;
@@ -53,7 +52,6 @@ public class MedicAndroidJavascript {
public MedicAndroidJavascript(EmbeddedBrowserActivity parent) {
this.parent = parent;
- this.simprints = parent.getSimprintsSupport();
this.mrdt = parent.getMrdtSupport();
this.smsSender = parent.getSmsSender();
this.chtExternalAppHandler = parent.getChtExternalAppLauncherActivity();
@@ -162,38 +160,6 @@ public void mrdt_verify() {
}
}
- /**
- * @return {@code true} iff an app is available to handle supported simprints {@code Intent}s
- */
- @android.webkit.JavascriptInterface
- public boolean simprints_available() {
- try {
- return simprints.isAppInstalled();
- } catch(Exception ex) {
- logException(ex);
- return false;
- }
- }
-
- @android.webkit.JavascriptInterface
- public void simprints_ident(int targetInputId) {
- try {
- simprints.startIdent(targetInputId);
- } catch(Exception ex) {
- logException(ex);
- }
- }
-
- @android.webkit.JavascriptInterface
- public void simprints_reg(int targetInputId) {
- try {
- simprints.startReg(targetInputId);
- } catch(Exception ex) {
- logException(ex);
- }
- }
-
-
@android.webkit.JavascriptInterface
public boolean sms_available() {
return smsSender != null;
diff --git a/src/main/java/org/medicmobile/webapp/mobile/MrdtSupport.java b/src/main/java/org/medicmobile/webapp/mobile/MrdtSupport.java
index b3553ec8..bc603a49 100644
--- a/src/main/java/org/medicmobile/webapp/mobile/MrdtSupport.java
+++ b/src/main/java/org/medicmobile/webapp/mobile/MrdtSupport.java
@@ -6,7 +6,7 @@
//import org.json.JSONException;
-import static org.medicmobile.webapp.mobile.EmbeddedBrowserActivity.GRAB_MRDT_PHOTO_ACTIVITY_REQUEST_CODE;
+import static org.medicmobile.webapp.mobile.EmbeddedBrowserActivity.RequestCode;
import static org.medicmobile.webapp.mobile.JavascriptUtils.safeFormat;
import static org.medicmobile.webapp.mobile.MedicLog.trace;
import static org.medicmobile.webapp.mobile.MedicLog.warn;
@@ -26,14 +26,14 @@ boolean isAppInstalled() {
}
void startVerify() {
- ctx.startActivityForResult(verifyIntent(), GRAB_MRDT_PHOTO_ACTIVITY_REQUEST_CODE);
+ ctx.startActivityForResult(verifyIntent(), RequestCode.GRAB_MRDT_PHOTO_ACTIVITY.getCode());
}
- String process(int requestCode, int resultCode, Intent i) {
- trace(this, "process() :: requestCode=%s", requestCode);
+ String process(RequestCode requestCode, Intent i) {
+ trace(this, "process() :: requestCode=%s", requestCode.name());
- switch(requestCode) {
- case GRAB_MRDT_PHOTO_ACTIVITY_REQUEST_CODE: {
+ switch (requestCode) {
+ case GRAB_MRDT_PHOTO_ACTIVITY: {
try {
byte[] data = i.getByteArrayExtra("data");
String base64data = Base64.encodeToString(data, Base64.NO_WRAP);
@@ -51,7 +51,7 @@ String process(int requestCode, int resultCode, Intent i) {
}
}
- default: throw new RuntimeException("Bad request type: " + requestCode);
+ default: throw new RuntimeException("Bad request type: " + requestCode.name());
}
}
diff --git a/src/main/java/org/medicmobile/webapp/mobile/PhotoGrabber.java b/src/main/java/org/medicmobile/webapp/mobile/PhotoGrabber.java
index 34d4b893..72cebd8b 100644
--- a/src/main/java/org/medicmobile/webapp/mobile/PhotoGrabber.java
+++ b/src/main/java/org/medicmobile/webapp/mobile/PhotoGrabber.java
@@ -17,7 +17,7 @@
import static android.provider.MediaStore.ACTION_IMAGE_CAPTURE;
import static com.mvc.imagepicker.ImagePicker.getImageFromResult;
import static com.mvc.imagepicker.ImagePicker.getPickImageIntent;
-import static org.medicmobile.webapp.mobile.EmbeddedBrowserActivity.GRAB_PHOTO_ACTIVITY_REQUEST_CODE;
+import static org.medicmobile.webapp.mobile.EmbeddedBrowserActivity.RequestCode;
import static org.medicmobile.webapp.mobile.MedicLog.log;
import static org.medicmobile.webapp.mobile.MedicLog.trace;
import static org.medicmobile.webapp.mobile.MedicLog.warn;
@@ -64,9 +64,9 @@ void chooser(ValueCallback callback, boolean capture) {
else pickImage();
}
- void process(int requestCode, int resultCode, Intent i) {
+ void process(RequestCode requestCode, int resultCode, Intent i) {
if(uploadCallback == null) {
- warn(this, "uploadCallback is null for requestCode %s", requestCode);
+ warn(this, "uploadCallback is null for requestCode %s", requestCode.name());
return;
}
@@ -112,14 +112,14 @@ public void run() {
}
private void takePhoto() {
- a.startActivityForResult(cameraIntent(), GRAB_PHOTO_ACTIVITY_REQUEST_CODE);
+ a.startActivityForResult(cameraIntent(), RequestCode.GRAB_PHOTO_ACTIVITY.getCode());
}
private void pickImage() {
trace(this, "picking image intent");
Intent i = getPickImageIntent(a, a.getString(R.string.promptChooseImage));
trace(this, "starting activity :: %s", i);
- a.startActivityForResult(i, GRAB_PHOTO_ACTIVITY_REQUEST_CODE);
+ a.startActivityForResult(i, RequestCode.GRAB_PHOTO_ACTIVITY.getCode());
}
private boolean canStartCamera() {
diff --git a/src/main/java/org/medicmobile/webapp/mobile/SimprintsSupport.java b/src/main/java/org/medicmobile/webapp/mobile/SimprintsSupport.java
deleted file mode 100644
index be79efef..00000000
--- a/src/main/java/org/medicmobile/webapp/mobile/SimprintsSupport.java
+++ /dev/null
@@ -1,127 +0,0 @@
-package org.medicmobile.webapp.mobile;
-
-import android.app.Activity;
-import android.content.Intent;
-
-import com.simprints.libsimprints.Identification;
-import com.simprints.libsimprints.Registration;
-import com.simprints.libsimprints.SimHelper;
-
-import java.util.List;
-
-import org.json.JSONArray;
-import org.json.JSONException;
-
-import static com.simprints.libsimprints.Constants.SIMPRINTS_IDENTIFICATIONS;
-import static com.simprints.libsimprints.Constants.SIMPRINTS_REGISTRATION;
-import static org.medicmobile.webapp.mobile.BuildConfig.SIMPRINTS_API_KEY;
-import static org.medicmobile.webapp.mobile.BuildConfig.SIMPRINTS_MODULE_ID;
-import static org.medicmobile.webapp.mobile.BuildConfig.SIMPRINTS_USER_ID;
-import static org.medicmobile.webapp.mobile.JavascriptUtils.safeFormat;
-import static org.medicmobile.webapp.mobile.MedicLog.log;
-import static org.medicmobile.webapp.mobile.MedicLog.trace;
-import static org.medicmobile.webapp.mobile.MedicLog.warn;
-import static org.medicmobile.webapp.mobile.Utils.intentHandlerAvailableFor;
-import static org.medicmobile.webapp.mobile.Utils.json;
-
-final class SimprintsSupport {
- private static final int INTENT_TYPE_MASK = 0x7;
- private static final int INTENT_ID_MASK = 0xFFFFF8;
-
- // future: private static final int INTENT_CONFIRM_IDENTITY = 1;
- private static final int INTENT_IDENTIFY = 2;
- private static final int INTENT_REGISTER = 3;
- // future: private static final int INTENT_UPDATE = 4;
- // future: private static final int INTENT_VERIFY = 5;
-
- private final Activity ctx;
-
- SimprintsSupport(Activity ctx) {
- this.ctx = ctx;
- }
-
- boolean isAppInstalled() {
- return
- intentHandlerAvailableFor(ctx, regIntent()) &&
- intentHandlerAvailableFor(ctx, identIntent());
- }
-
- void startIdent(int targetInputId) {
- checkValid(targetInputId);
- ctx.startActivityForResult(identIntent(), targetInputId | INTENT_IDENTIFY);
- }
-
- void startReg(int targetInputId) {
- checkValid(targetInputId);
- ctx.startActivityForResult(regIntent(), targetInputId | INTENT_REGISTER);
- }
-
- String process(int requestCode, Intent i) {
- int requestType = requestCode & INTENT_TYPE_MASK;
- int requestId = requestCode & INTENT_ID_MASK;
-
- trace(this, "process() :: requestType=%s, requestCode=%s", requestType, requestCode);
-
- switch(requestType) {
- case INTENT_IDENTIFY: {
- try {
- JSONArray result = new JSONArray();
- if(i != null && i.hasExtra(SIMPRINTS_IDENTIFICATIONS)) {
- List ids = i.getParcelableArrayListExtra(SIMPRINTS_IDENTIFICATIONS);
- for(Identification id : ids) {
- result.put(json(
- "id", id.getGuid(),
- "confidence", id.getConfidence(),
- "tier", id.getTier()
- ));
- }
- }
-
- log(this, "Simprints ident returned IDs: " + result + "; requestId=" + requestId);
-
- return jsResponse("identify", requestId, result);
- } catch(JSONException ex) {
- warn(ex, "Problem serialising simprints identifications.");
- return safeFormat("console.log('Problem serialising simprints identifications: %s')", ex);
- }
- }
-
- case INTENT_REGISTER: {
- try {
- if(i == null || !i.hasExtra(SIMPRINTS_REGISTRATION)) return "console.log('No registration data returned from simprints app.')";
- Registration registration = i.getParcelableExtra(SIMPRINTS_REGISTRATION);
- String id = registration.getGuid();
- log(this, "Simprints registration returned ID: " + id + "; requestId=" + requestCode);
- return jsResponse("register", requestId, json("id", id));
- } catch(JSONException ex) {
- warn(ex, "Problem serialising simprints registration result.");
- return safeFormat("console.log('Problem serialising simprints registration result: %s')", ex);
- }
- }
-
- default: throw new RuntimeException("Bad request type: " + requestType);
- }
- }
-
-//> PRIVATE HELPERS
- private Intent identIntent() {
- return simHelper().identify(SIMPRINTS_MODULE_ID);
- }
-
- private Intent regIntent() {
- return simHelper().register(SIMPRINTS_MODULE_ID);
- }
-
- private String jsResponse(String requestType, int requestId, Object result) {
- return safeFormat("angular.element(document.body).injector().get('AndroidApi').v1.simprintsResponse('%s', '%s', '%s')", requestType, requestId, result);
- }
-
-//> STATIC HELPERS
- private static SimHelper simHelper() {
- return new SimHelper(SIMPRINTS_API_KEY, SIMPRINTS_USER_ID);
- }
-
- private static void checkValid(int targetInputId) {
- if(targetInputId != (targetInputId & INTENT_ID_MASK)) throw new RuntimeException("Bad targetInputId: " + targetInputId);
- }
-}
diff --git a/src/simprints/res/values/strings.xml b/src/simprints/res/values/strings.xml
deleted file mode 100644
index 1a3793a8..00000000
--- a/src/simprints/res/values/strings.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
- Medic - Simprints
- simprints.app.medicmobile.org
-
diff --git a/src/test/java/org/medicmobile/webapp/mobile/ChtExternalAppHandlerTest.java b/src/test/java/org/medicmobile/webapp/mobile/ChtExternalAppHandlerTest.java
index 8c0a2ac0..0e88681b 100644
--- a/src/test/java/org/medicmobile/webapp/mobile/ChtExternalAppHandlerTest.java
+++ b/src/test/java/org/medicmobile/webapp/mobile/ChtExternalAppHandlerTest.java
@@ -15,8 +15,7 @@
import androidx.core.app.ActivityCompat;
import static org.junit.Assert.assertEquals;
-import static org.medicmobile.webapp.mobile.EmbeddedBrowserActivity.ACCESS_STORAGE_PERMISSION_REQUEST_CODE;
-import static org.medicmobile.webapp.mobile.EmbeddedBrowserActivity.CHT_EXTERNAL_APP_ACTIVITY_REQUEST_CODE;
+import static org.medicmobile.webapp.mobile.EmbeddedBrowserActivity.RequestCode;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.ArgumentMatchers.anyInt;
import static org.mockito.ArgumentMatchers.anyString;
@@ -175,7 +174,7 @@ public void startIntent_withValidIntent_startsIntentCorrectly() {
//> THEN
verify(chtExternalApp).createIntent();
- verify(mockContext).startActivityForResult(eq(intent), eq(CHT_EXTERNAL_APP_ACTIVITY_REQUEST_CODE));
+ verify(mockContext).startActivityForResult(eq(intent), eq(RequestCode.CHT_EXTERNAL_APP_ACTIVITY.getCode()));
}
@Test
@@ -198,7 +197,7 @@ public void startIntent_withException_catchesException() {
//> THEN
verify(chtExternalApp).createIntent();
- verify(mockContext).startActivityForResult(eq(intent), eq(CHT_EXTERNAL_APP_ACTIVITY_REQUEST_CODE));
+ verify(mockContext).startActivityForResult(eq(intent), eq(RequestCode.CHT_EXTERNAL_APP_ACTIVITY.getCode()));
medicLogMock.verify(() -> MedicLog.error(
any(),
eq("ChtExternalAppHandler :: Error when starting the activity %s %s"),
@@ -228,7 +227,11 @@ public void startIntent_withoutStoragePermissions_requestsPermissions() {
//> THEN
verify(chtExternalApp).createIntent();
contextCompatMock.verify(() -> ContextCompat.checkSelfPermission(mockContext, READ_EXTERNAL_STORAGE));
- activityCompatMock.verify(() -> ActivityCompat.requestPermissions(mockContext, new String[]{READ_EXTERNAL_STORAGE}, ACCESS_STORAGE_PERMISSION_REQUEST_CODE));
+ activityCompatMock.verify(() -> ActivityCompat.requestPermissions(
+ mockContext,
+ new String[]{READ_EXTERNAL_STORAGE},
+ RequestCode.ACCESS_STORAGE_PERMISSION.getCode()
+ ));
verify(mockContext, never()).startActivityForResult(any(), anyInt());
}
@@ -261,8 +264,12 @@ public void resumeActivity_withLastIntent_startsIntentCorrectly() {
//> THEN
verify(chtExternalApp).createIntent();
contextCompatMock.verify(() -> ContextCompat.checkSelfPermission(mockContext, READ_EXTERNAL_STORAGE));
- activityCompatMock.verify(() -> ActivityCompat.requestPermissions(mockContext, new String[]{READ_EXTERNAL_STORAGE}, ACCESS_STORAGE_PERMISSION_REQUEST_CODE));
- verify(mockContext).startActivityForResult(eq(intent), eq(CHT_EXTERNAL_APP_ACTIVITY_REQUEST_CODE));
+ activityCompatMock.verify(() -> ActivityCompat.requestPermissions(
+ mockContext,
+ new String[]{READ_EXTERNAL_STORAGE},
+ RequestCode.ACCESS_STORAGE_PERMISSION.getCode()
+ ));
+ verify(mockContext).startActivityForResult(eq(intent), eq(RequestCode.CHT_EXTERNAL_APP_ACTIVITY.getCode()));
}
}
diff --git a/src/test/java/org/medicmobile/webapp/mobile/EmbeddedBrowserActivityTest.java b/src/test/java/org/medicmobile/webapp/mobile/EmbeddedBrowserActivityTest.java
index 2a4d87db..2e2357e2 100644
--- a/src/test/java/org/medicmobile/webapp/mobile/EmbeddedBrowserActivityTest.java
+++ b/src/test/java/org/medicmobile/webapp/mobile/EmbeddedBrowserActivityTest.java
@@ -8,7 +8,7 @@
import static android.content.pm.PackageManager.PERMISSION_GRANTED;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;
-import static org.medicmobile.webapp.mobile.EmbeddedBrowserActivity.ACCESS_LOCATION_PERMISSION_REQUEST_CODE;
+import static org.medicmobile.webapp.mobile.EmbeddedBrowserActivity.RequestCode;
import static org.medicmobile.webapp.mobile.EmbeddedBrowserActivity.LOCATION_PERMISSIONS;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.ArgumentMatchers.eq;
@@ -125,7 +125,7 @@ public void getLocationPermissions_withPermissionsDenied_requestPermissions() {
activityCompatMock.verify(() -> ActivityCompat.requestPermissions(
embeddedBrowserActivity,
LOCATION_PERMISSIONS,
- ACCESS_LOCATION_PERMISSION_REQUEST_CODE
+ RequestCode.ACCESS_LOCATION_PERMISSION.getCode()
));
Intents.release();