Skip to content

Commit 9ae73e6

Browse files
authored
Merge pull request #78 from openimis/feature/OP-197
OP-197: Offline initialization of app is now possible.
2 parents 1b06cb2 + af1a849 commit 9ae73e6

6 files changed

Lines changed: 72 additions & 3 deletions

File tree

build.gradle

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ buildscript {
77
mavenCentral()
88
}
99
dependencies {
10-
classpath 'com.android.tools.build:gradle:7.2.1'
10+
classpath 'com.android.tools.build:gradle:7.3.1'
1111

1212
// NOTE: Do not place your application dependencies here; they belong
1313
// in the individual module build.gradle files

claimManagement/src/main/java/org/openimis/imisclaims/MainActivity.java

Lines changed: 60 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,12 @@
11
package org.openimis.imisclaims;
22

33
import android.Manifest;
4+
import android.annotation.SuppressLint;
45
import android.app.AlertDialog;
56
import android.app.NotificationManager;
67
import android.app.PendingIntent;
78
import android.app.ProgressDialog;
9+
import android.content.ActivityNotFoundException;
810
import android.content.Context;
911
import android.content.Intent;
1012
import android.content.pm.PackageManager;
@@ -29,6 +31,7 @@
2931
import android.widget.RelativeLayout;
3032
import android.widget.TextView;
3133
import android.widget.Toast;
34+
import android.net.Uri;
3235

3336
import org.apache.http.HttpEntity;
3437
import org.apache.http.HttpResponse;
@@ -37,17 +40,25 @@
3740
import org.json.JSONException;
3841
import org.json.JSONObject;
3942
import org.openimis.imisclaims.claimlisting.ClaimListingActivity;
43+
import org.openimis.imisclaims.tools.Log;
4044

4145
import java.io.IOException;
4246
import java.text.SimpleDateFormat;
4347
import java.util.ArrayList;
4448
import java.util.Date;
49+
import java.util.Iterator;
4550
import java.util.Locale;
4651

52+
import org.apache.commons.io.IOUtils;
53+
54+
import java.io.File;
55+
import java.io.FileOutputStream;
56+
4757

4858
public class MainActivity extends ImisActivity {
4959
private static final int REQUEST_PERMISSIONS_CODE = 1;
5060
private static final int REQUEST_ALL_FILES_ACCESS_CODE = 2;
61+
private static final String LOG_TAG = "MainActivity";
5162
ArrayList<String> broadcastList;
5263
final CharSequence[] lang = {"English", "Francais"};
5364
String Language;
@@ -67,6 +78,7 @@ public class MainActivity extends ImisActivity {
6778
final String VersionField = "AppVersionEnquire";
6879
NotificationManager mNotificationManager;
6980
final int SIMPLE_NOTIFICATION_ID = 1;
81+
private static final int REQUEST_PICK_MD_FILE = 3;
7082
Vibrator vibrator;
7183

7284
@Override
@@ -250,13 +262,56 @@ public void onRequestPermissionsResult(int requestCode, @NonNull String[] permis
250262

251263
@Override
252264
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
265+
File databaseFile;
266+
253267
if (requestCode == REQUEST_ALL_FILES_ACCESS_CODE) {
254268
if (checkRequirements()) {
255269
onAllRequirementsMet();
256270
}
271+
} else if (requestCode == REQUEST_PICK_MD_FILE) {
272+
if (resultCode == RESULT_OK && data != null) {
273+
Uri uri = data.getData();
274+
if (uri != null) {
275+
try {
276+
byte[] bytes = IOUtils.toByteArray(getContentResolver().openInputStream(uri));
277+
databaseFile = new File(SQLHandler.DB_NAME_DATA);
278+
if (databaseFile.exists() || databaseFile.createNewFile()) {
279+
new FileOutputStream(databaseFile).write(bytes);
280+
onAllRequirementsMet();
281+
} else {
282+
showDialog(getResources().getString(R.string.ImportMasterDataFailed),
283+
(d, i) -> finish());
284+
}
285+
} catch (Exception e) {
286+
Log.e(LOG_TAG, "Error while copying master data.", e);
287+
}
288+
}
289+
}
257290
}
258291
}
259292

293+
public void PickMasterDataFileDialog() {
294+
new AlertDialog.Builder(MainActivity.this)
295+
.setTitle(getResources().getString(R.string.NoInternetTitle))
296+
.setMessage(getResources().getString(R.string.DoImportClaimsMasterData))
297+
.setCancelable(false)
298+
.setPositiveButton(getResources().getString(R.string.Yes),
299+
(dialog, which) -> {
300+
Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
301+
intent.addCategory(Intent.CATEGORY_OPENABLE);
302+
intent.setType("*/*");
303+
try {
304+
startActivityForResult(intent, REQUEST_PICK_MD_FILE);
305+
} catch (ActivityNotFoundException e) {
306+
Toast.makeText(getApplicationContext(), getResources().getString(R.string.NoFileExporerInstalled), Toast.LENGTH_SHORT).show();
307+
}
308+
}).setNegativeButton(getResources().getString(R.string.No),
309+
(dialog, id) -> {
310+
dialog.cancel();
311+
finish();
312+
}).show();
313+
}
314+
260315
public AlertDialog confirmRefreshMap() {
261316
return showDialog(
262317
getResources().getString(R.string.AreYouSure),
@@ -990,8 +1045,11 @@ public boolean checkRequirements() {
9901045
if (global.isNetworkAvailable()) {
9911046
sqlHandler.createOrOpenDatabases();
9921047
sqlHandler.createTables();
1048+
sqlHandler.createMappingTables();
9931049
initializeDb3File(sqlHandler);
9941050
} else {
1051+
sqlHandler.createMappingTables();
1052+
PickMasterDataFileDialog();
9951053
showToast(R.string.CheckInternet);
9961054
}
9971055

@@ -1007,4 +1065,5 @@ public void onAllRequirementsMet() {
10071065
}
10081066
refreshCount();
10091067
}
1010-
}
1068+
1069+
}

claimManagement/src/main/java/org/openimis/imisclaims/SQLHandler.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -317,7 +317,9 @@ public void createTables() {
317317
Log.e("SQL", "Error while excecutiong executing command: " + command, e);
318318
}
319319
}
320+
}
320321

322+
public void createMappingTables() {
321323
String[] commandsMapping = {CreateTableMapping};
322324
for (String command : commandsMapping) {
323325
try {
@@ -629,4 +631,5 @@ public String getReferenceName(@NonNull String referenceCode) {
629631
return REFERENCE_UNKNOWN;
630632
}
631633
}
634+
632635
}

claimManagement/src/main/java/org/openimis/imisclaims/ToRestApi.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -131,6 +131,7 @@ public String getHttpError(Context context, int httpResponseCode, String httpRea
131131
}
132132
}
133133

134+
134135
public String getPayloadError(String responseContent) {
135136
String payloadError = null;
136137

@@ -145,4 +146,5 @@ public String getPayloadError(String responseContent) {
145146
return payloadError;
146147
}
147148

149+
148150
}

claimManagement/src/main/res/values/strings.xml

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -224,5 +224,10 @@
224224
<string name="Forbidden">You are not allowed to take this action.</string>
225225
<string name="UnknownError">Unknown Error.</string>
226226
<string name="NotFound">Entry does not exist.</string>
227+
<string name="NoFileExporerInstalled">There are no file explorer clients installed.</string>
228+
<string name="DoImportClaimsMasterData">Do you want to import master data as file?</string>
229+
<string name="NoInternetTitle">NO INTERNET CONNECTION</string>
230+
<string name="ImportMasterDataFailed">Failed to read master data from file.</string>
227231
<string name="HttpResponse">HTTP response: %1$d — %2$s</string>
232+
228233
</resources>
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
#Fri Dec 03 10:17:47 CET 2021
22
distributionBase=GRADLE_USER_HOME
3-
distributionUrl=https\://services.gradle.org/distributions/gradle-7.3.3-bin.zip
3+
distributionUrl=https\://services.gradle.org/distributions/gradle-7.4-bin.zip
44
distributionPath=wrapper/dists
55
zipStorePath=wrapper/dists
66
zipStoreBase=GRADLE_USER_HOME

0 commit comments

Comments
 (0)