From d016f13499092d236104b8d70e95442cb3400485 Mon Sep 17 00:00:00 2001 From: malinowskikam Date: Mon, 19 Jul 2021 14:12:58 +0200 Subject: [PATCH] OTC-347: Added token keeping, Fitted app to APIv3 --- build.gradle | 2 +- claimManagement/build.gradle | 22 +- claimManagement/proguard-rules.pro | 25 + .../java/org/openimis/imisclaims/Escape.java | 8 +- claimManagement/src/main/AndroidManifest.xml | 72 +- .../openimis/imisclaims/ClaimActivity.java | 47 +- .../openimis/imisclaims/EnquireActivity.java | 640 ++++---- .../java/org/openimis/imisclaims/Global.java | 201 ++- .../org/openimis/imisclaims/ImisActivity.java | 228 +++ .../java/org/openimis/imisclaims/Login.java | 40 +- .../org/openimis/imisclaims/MainActivity.java | 1307 +++++------------ .../openimis/imisclaims/ReviewFragment.java | 2 +- .../org/openimis/imisclaims/SQLHandler.java | 7 +- .../org/openimis/imisclaims/SearchClaims.java | 800 ---------- .../imisclaims/SearchClaimsActivity.java | 220 +++ .../{Settings.java => SettingsActivity.java} | 47 +- .../org/openimis/imisclaims/Synchronize.java | 715 --------- .../imisclaims/SynchronizeActivity.java | 109 ++ .../imisclaims/SynchronizeService.java | 281 ++++ .../org/openimis/imisclaims/ToRestApi.java | 158 +- .../java/org/openimis/imisclaims/Token.java | 120 +- .../res/layout/activity_search_claims.xml | 2 +- .../main/res/layout/activity_synchronize.xml | 2 +- gradle/wrapper/gradle-wrapper.properties | 2 +- 24 files changed, 1872 insertions(+), 3185 deletions(-) create mode 100644 claimManagement/proguard-rules.pro create mode 100644 claimManagement/src/main/java/org/openimis/imisclaims/ImisActivity.java delete mode 100644 claimManagement/src/main/java/org/openimis/imisclaims/SearchClaims.java create mode 100644 claimManagement/src/main/java/org/openimis/imisclaims/SearchClaimsActivity.java rename claimManagement/src/main/java/org/openimis/imisclaims/{Settings.java => SettingsActivity.java} (78%) delete mode 100644 claimManagement/src/main/java/org/openimis/imisclaims/Synchronize.java create mode 100644 claimManagement/src/main/java/org/openimis/imisclaims/SynchronizeActivity.java create mode 100644 claimManagement/src/main/java/org/openimis/imisclaims/SynchronizeService.java diff --git a/build.gradle b/build.gradle index b64861ef..3378f0cd 100644 --- a/build.gradle +++ b/build.gradle @@ -7,7 +7,7 @@ buildscript { jcenter() } dependencies { - classpath 'com.android.tools.build:gradle:3.0.1' + classpath 'com.android.tools.build:gradle:4.1.3' // NOTE: Do not place your application dependencies here; they belong diff --git a/claimManagement/build.gradle b/claimManagement/build.gradle index 46c207f9..2063aed0 100644 --- a/claimManagement/build.gradle +++ b/claimManagement/build.gradle @@ -48,6 +48,7 @@ android { resValue "string", "ReleaseDateValue", getDate() buildConfigField "String", "API_BASE_URL", '"http://demo.openimis.org/rest/"' buildConfigField "String", "RAR_PASSWORD", '")(#$1HsD"' + buildConfigField "String", "API_VERSION", '"3"' } productFlavors { @@ -121,28 +122,23 @@ android { exclude 'META-INF/DEPENDENCIES' } + compileOptions { + sourceCompatibility JavaVersion.VERSION_1_8 + targetCompatibility JavaVersion.VERSION_1_8 + } } dependencies { - //implementation fileTree(include: ['*.jar'], dir: 'libs') - implementation 'com.android.support:appcompat-v7:28.0.0' - implementation 'com.android.support:support-v4:28.0.0' - implementation 'com.android.support:design:28.0.0' - implementation 'com.android.support:support-annotations:27.1.1' - implementation 'com.android.support.constraint:constraint-layout:1.1.3' + implementation fileTree(include: ['*.jar'], dir: 'libs') + implementation 'com.android.support:support-annotations:28.0.0' + implementation 'com.android.support.constraint:constraint-layout:2.0.4' implementation 'com.google.zxing:core:3.3.0' implementation 'com.embarkmobile:zxing-android-minimal:1.2.1@aar' + implementation 'com.android.support:design:28.0.0' testImplementation 'junit:junit:4.12' androidTestImplementation 'com.android.support.test:runner:1.0.2' androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2' - // https://mvnrepository.com/artifact/com.squareup.picasso/picasso implementation group: 'com.squareup.picasso', name: 'picasso', version: '2.5.2' - // https://mvnrepository.com/artifact/net.lingala.zip4j/zip4j implementation group: 'net.lingala.zip4j', name: 'zip4j', version: '1.2.7' - // https://mvnrepository.com/artifact/org.apache.httpcomponents/httpcore - //implementation group: 'org.apache.httpcomponents', name: 'httpcore', version: '4.4.1' - // https://mvnrepository.com/artifact/org.apache.httpcomponents/httpclient -// implementation group: 'org.apache.httpcomponents', name: 'httpclient', version: '4.4.1' - implementation "cz.msebera.android:httpclient:4.4.1.2" } diff --git a/claimManagement/proguard-rules.pro b/claimManagement/proguard-rules.pro new file mode 100644 index 00000000..b3b209b8 --- /dev/null +++ b/claimManagement/proguard-rules.pro @@ -0,0 +1,25 @@ +# Add project specific ProGuard rules here. +# By default, the flags in this file are appended to flags specified +# in C:\Users\Hiren\AppData\Local\Android\sdk/tools/proguard/proguard-android.txt +# You can edit the include path and order by changing the proguardFiles +# directive in build.gradle. +# +# For more details, see +# http://developer.android.com/guide/developing/tools/proguard.html + +# Add any project specific keep options here: + +# If your project uses WebView with JS, uncomment the following +# and specify the fully qualified class name to the JavaScript interface +# class: +#-keepclassmembers class fqcn.of.javascript.interface.for.webview { +# public *; +#} + +# Uncomment this to preserve the line number information for +# debugging stack traces. +#-keepattributes SourceFile,LineNumberTable + +# If you keep the line number information, uncomment this to +# hide the original source file name. +#-renamesourcefileattribute SourceFile diff --git a/claimManagement/src/local/java/org/openimis/imisclaims/Escape.java b/claimManagement/src/local/java/org/openimis/imisclaims/Escape.java index e37df491..2459d64b 100644 --- a/claimManagement/src/local/java/org/openimis/imisclaims/Escape.java +++ b/claimManagement/src/local/java/org/openimis/imisclaims/Escape.java @@ -2,12 +2,6 @@ public class Escape { public boolean CheckCHFID(String InsureeNumber) { - if (InsureeNumber.length() != 9) return false; - int actualControlNumber, expectedControlNumber; - - expectedControlNumber = Integer.parseInt(InsureeNumber.substring(8)); - actualControlNumber = Integer.parseInt(InsureeNumber.substring(0, 8)) % 7; - - return expectedControlNumber == actualControlNumber; + return InsureeNumber != null && InsureeNumber.length() != 0; } } diff --git a/claimManagement/src/main/AndroidManifest.xml b/claimManagement/src/main/AndroidManifest.xml index 783fb336..b3c757fe 100644 --- a/claimManagement/src/main/AndroidManifest.xml +++ b/claimManagement/src/main/AndroidManifest.xml @@ -12,24 +12,35 @@ - - - - + + + - + + + + @@ -39,61 +50,52 @@ - - - + + + - - - - - - - - - + - - - + android:required="false" /> - + + - + android:label="@string/title_activity_claim_review" /> \ No newline at end of file diff --git a/claimManagement/src/main/java/org/openimis/imisclaims/ClaimActivity.java b/claimManagement/src/main/java/org/openimis/imisclaims/ClaimActivity.java index fdc8beb2..56b3b4d9 100644 --- a/claimManagement/src/main/java/org/openimis/imisclaims/ClaimActivity.java +++ b/claimManagement/src/main/java/org/openimis/imisclaims/ClaimActivity.java @@ -188,45 +188,30 @@ protected void onCreate(Bundle savedInstanceState) { etDiagnosis4.setThreshold(1); etDiagnosis4.setOnItemClickListener(adapter); - etStartDate.setOnTouchListener(new View.OnTouchListener() { - - @Override - public boolean onTouch(View v, MotionEvent event) { - showDialog(StartDate_Dialog_ID); - return false; - } + etStartDate.setOnTouchListener((v, event) -> { + showDialog(StartDate_Dialog_ID); + return false; }); - etEndDate.setOnTouchListener(new View.OnTouchListener() { - - @Override - public boolean onTouch(View v, MotionEvent event) { - showDialog(EndDate_Dialog_ID); - return false; - } + etEndDate.setOnTouchListener((v, event) -> { + showDialog(EndDate_Dialog_ID); + return false; }); - btnNew.setOnClickListener(new View.OnClickListener() { - - @Override - public void onClick(View v) { - if (TotalItemService>0){ - ConfirmDialog(getResources().getString(R.string.ConfirmDiscard)); - }else{ - ClearForm(); - } + btnNew.setOnClickListener(v -> { + if (TotalItemService>0){ + ConfirmDialog(getResources().getString(R.string.ConfirmDiscard)); + }else{ + ClearForm(); } }); - btnScan.setOnClickListener(new View.OnClickListener() { - - @Override - public void onClick(View v) { - Intent intent = new Intent("com.google.zxing.client.android.SCAN"); - intent.putExtra("SCAN_MODE", "QR_CODE_MODE"); - startActivityForResult(intent, 1); - } + btnScan.setOnClickListener(v -> { + Intent scanIntent = new Intent(this,com.google.zxing.client.android.CaptureActivity.class); + scanIntent.setAction("com.google.zxing.client.android.SCAN"); + scanIntent.putExtra("SCAN_MODE", "QR_CODE_MODE"); + startActivityForResult(scanIntent, 1); }); btnPost.setOnClickListener(new View.OnClickListener() { diff --git a/claimManagement/src/main/java/org/openimis/imisclaims/EnquireActivity.java b/claimManagement/src/main/java/org/openimis/imisclaims/EnquireActivity.java index 1bc92a9e..5ec58bd4 100644 --- a/claimManagement/src/main/java/org/openimis/imisclaims/EnquireActivity.java +++ b/claimManagement/src/main/java/org/openimis/imisclaims/EnquireActivity.java @@ -2,10 +2,8 @@ import android.annotation.SuppressLint; import android.app.AlertDialog; -import android.app.NotificationManager; import android.app.ProgressDialog; import android.content.Context; -import android.content.DialogInterface; import android.content.Intent; import android.database.Cursor; import android.database.sqlite.SQLiteDatabase; @@ -13,12 +11,10 @@ import android.graphics.BitmapFactory; import android.os.Bundle; import android.os.Environment; -import android.os.Vibrator; import android.support.v7.app.ActionBar; import android.support.v7.app.AppCompatActivity; import android.support.v7.widget.Toolbar; import android.util.Log; -import android.view.KeyEvent; import android.view.MenuItem; import android.view.View; import android.view.inputmethod.EditorInfo; @@ -32,14 +28,13 @@ import android.widget.SimpleAdapter; import android.widget.TextView; +import com.google.zxing.integration.android.IntentIntegrator; import com.squareup.picasso.Picasso; import org.json.JSONArray; import org.json.JSONException; import org.json.JSONObject; -import org.openimis.imisclaims.R; - import java.io.ByteArrayInputStream; import java.util.ArrayList; import java.util.HashMap; @@ -47,33 +42,22 @@ public class EnquireActivity extends AppCompatActivity { EditText etCHFID; - TextView tvCHFID,tvName,tvGender,tvDOB; - ImageButton btnGo,btnScan; + TextView tvCHFID, tvName, tvGender, tvDOB; + ImageButton btnGo, btnScan; ListView lv; ImageView iv; LinearLayout ll; ProgressDialog pd; - NotificationManager mNotificationManager; - Vibrator vibrator; - ArrayList> PolicyList = new ArrayList>(); + ArrayList> PolicyList = new ArrayList<>(); - static String Language; Bitmap theImage; - String result; - - AlertDialog ad; - SQLiteDatabase db; private boolean ZoomOut = false; private int orgHeight, orgWidth; - public TextView getTvCHFID() { - return tvCHFID; - } - @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); @@ -89,22 +73,11 @@ protected void onCreate(Bundle savedInstanceState) { isSDCardAvailable(); //Check if network available - if (((Global)getApplicationContext()).isNetworkAvailable()) { -// tvMode.setText(Html.fromHtml("Online mode.")); - - } else { -// tvMode.setText(Html.fromHtml("Offline mode.")); + if (!((Global) getApplicationContext()).isNetworkAvailable()) { setTitle(getResources().getString(R.string.app_name_claims) + "-" + getResources().getString(R.string.OfflineMode)); setTitleColor(getResources().getColor(R.color.Red)); } - -/* new Thread() { - public void run() { - CheckForUpdates(); - } - - }.start();*/ etCHFID = (EditText) findViewById(R.id.etCHFID); tvCHFID = (TextView) findViewById(R.id.tvCHFID); tvName = (TextView) findViewById(R.id.tvName); @@ -117,38 +90,52 @@ public void run() { ll = (LinearLayout) findViewById(R.id.llListView); - iv.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - if (ZoomOut) { - iv.setLayoutParams(new LinearLayout.LayoutParams(orgWidth, orgHeight)); - iv.setAdjustViewBounds(true); - ZoomOut = false; - } else { - orgWidth = iv.getWidth(); - orgHeight = iv.getHeight(); - iv.setLayoutParams(new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.MATCH_PARENT)); - iv.setScaleType(ImageView.ScaleType.CENTER_INSIDE); - ZoomOut = true; - } + iv.setOnClickListener(v -> { + if (ZoomOut) { + iv.setLayoutParams(new LinearLayout.LayoutParams(orgWidth, orgHeight)); + iv.setAdjustViewBounds(true); + ZoomOut = false; + } else { + orgWidth = iv.getWidth(); + orgHeight = iv.getHeight(); + iv.setLayoutParams(new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.MATCH_PARENT)); + iv.setScaleType(ImageView.ScaleType.CENTER_INSIDE); + ZoomOut = true; } }); - btnGo.setOnClickListener(new View.OnClickListener() { + btnGo.setOnClickListener(v -> { + InputMethodManager inputManager = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); + inputManager.hideSoftInputFromWindow(getCurrentFocus().getWindowToken(), InputMethodManager.HIDE_NOT_ALWAYS); + + ClearForm(); + Escape escape = new Escape(); + if (!escape.CheckCHFID(etCHFID.getText().toString())) { + ShowDialog(tvCHFID, getResources().getString(R.string.MissingCHFID)); + return; + } + + pd = ProgressDialog.show(EnquireActivity.this, "", getResources().getString(R.string.GetingInsuuree)); + new Thread(() -> { + getInsureeInfo(); + pd.dismiss(); + }).start(); + }); - @Override - public void onClick(View v) { + btnScan.setOnClickListener(v -> { + Intent intent = new Intent(this, com.google.zxing.client.android.CaptureActivity.class); + intent.setAction("com.google.zxing.client.android.SCAN"); + intent.putExtra("SCAN_MODE", "QR_CODE_MODE"); + startActivityForResult(intent, 1); - InputMethodManager inputManager = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); - inputManager.hideSoftInputFromWindow(getCurrentFocus().getWindowToken(), InputMethodManager.HIDE_NOT_ALWAYS); + ClearForm(); + }); + etCHFID.setOnEditorActionListener((v, actionId, event) -> { + if (actionId == EditorInfo.IME_ACTION_GO) { ClearForm(); Escape escape = new Escape(); - if (!escape.CheckCHFID(etCHFID.getText().toString())) { - ShowDialog(tvCHFID, getResources().getString(R.string.MissingCHFID)); - return; - } - + if (!escape.CheckCHFID(etCHFID.getText().toString())) return false; pd = ProgressDialog.show(EnquireActivity.this, "", getResources().getString(R.string.GetingInsuuree)); new Thread() { @@ -159,120 +146,16 @@ public void run() { } }.start(); } - }); - - btnScan.setOnClickListener(new View.OnClickListener() { - - @Override - public void onClick(View v) { - Intent intent = new Intent("com.google.zxing.client.android.SCAN"); - intent.putExtra("SCAN_MODE", "QR_CODE_MODE"); - startActivityForResult(intent, 1); - - ClearForm(); - //if (!CheckCHFID())return; - - - } - }); - - etCHFID.setOnEditorActionListener(new TextView.OnEditorActionListener() { - - @Override - public boolean onEditorAction(TextView v, int actionId, KeyEvent event) { - if (actionId == EditorInfo.IME_ACTION_GO) { - ClearForm(); - Escape escape = new Escape(); - if (!escape.CheckCHFID(etCHFID.getText().toString())) return false; - - pd = ProgressDialog.show(EnquireActivity.this, "", getResources().getString(R.string.GetingInsuuree)); - new Thread() { - public void run() { - getInsureeInfo(); - - pd.dismiss(); - } - }.start(); - } - return false; - } + return false; }); } - /*private void CheckForUpdates(){ - if(_General.isNetworkAvailable(EnquireActivity.this)){ - if(_General.isNewVersionAvailable(VersionField,EnquireActivity.this,getApplicationContext().getPackageName())){ - //Show notification bar - mNotificationManager = (NotificationManager)getSystemService(NOTIFICATION_SERVICE); - - final Notification NotificationDetails = new Notification(R.drawable.enquire, getResources().getString(R.string.NotificationAlertText), System.currentTimeMillis()); - - NotificationDetails.flags = Notification.FLAG_SHOW_LIGHTS | Notification.FLAG_AUTO_CANCEL | Notification.DEFAULT_SOUND | Notification.DEFAULT_VIBRATE; - - Context context = getApplicationContext(); - CharSequence ContentTitle = getResources().getString(R.string.ContentTitle); - CharSequence ContentText = getResources().getString(R.string.ContentText); - - Intent NotifyIntent = new Intent(android.content.Intent.ACTION_VIEW, Uri.parse(ApkFileLocation)); - - PendingIntent intent = PendingIntent.getActivity(EnquireActivity.this, 0, NotifyIntent,0); - NotificationDetails.setLatestEventInfo(context, ContentTitle, ContentText, intent); - - mNotificationManager.notify(SIMPLE_NOTIFICATION_ID, NotificationDetails); - - vibrator = (Vibrator)getSystemService(VIBRATOR_SERVICE); - vibrator.vibrate(500); - - } - } - }*/ - /*private void CheckForUpdates(){ - if(_General.isNetworkAvailable(EnquireActivity.this)){ - if(_General.isNewVersionAvailable(VersionField,EnquireActivity.this,getApplicationContext().getPackageName())){ - //Show notification bar - mNotificationManager = (NotificationManager)getSystemService(NOTIFICATION_SERVICE); - - //final Notification NotificationDetails = new Notification(R.drawable.ic_launcher, getResources().getString(R.string.NotificationAlertText), System.currentTimeMillis()); - //NotificationDetails.flags = Notification.FLAG_SHOW_LIGHTS | Notification.FLAG_AUTO_CANCEL | Notification.DEFAULT_SOUND | Notification.DEFAULT_VIBRATE; - //NotificationDetails.setLatestEventInfo(context, ContentTitle, ContentText, intent); - //mNotificationManager.notify(SIMPLE_NOTFICATION_ID, NotificationDetails); - Context context = getApplicationContext(); - CharSequence ContentTitle = getResources().getString(R.string.ContentTitle); - CharSequence ContentText = getResources().getString(R.string.ContentText); - - Intent NotifyIntent = new Intent(this, EnquireActivity.class); - - PendingIntent intent = PendingIntent.getActivity(this, 0, NotifyIntent,PendingIntent.FLAG_CANCEL_CURRENT); - NotificationCompat.Builder builder = new NotificationCompat.Builder(this); - builder.setAutoCancel(false); - builder.setContentTitle(ContentTitle); - builder.setContentText(ContentText); - //builder.setSmallIcon(R.drawable.silverware); - builder.setContentIntent(intent); - builder.setOngoing(false); -*//* String s = "ring"; - int res_sound_id = context.getResources().getIdentifier(s, "raw", context.getPackageName()); - Uri u = Uri.parse("android.resource://" + context.getPackageName() + "/" + res_sound_id); - builder.setSound(u);*//* - - mNotificationManager.notify(SIMPLE_NOTIFICATION_ID, builder.build()); - vibrator = (Vibrator)getSystemService(VIBRATOR_SERVICE); - vibrator.vibrate(500); - } - } - - - - }*/ - - protected void onActivityResult(int requestCode, int resultCode, Intent data) { try { - switch(requestCode){ - + switch (requestCode) { case 1: - if (resultCode == RESULT_OK){ + if (resultCode == RESULT_OK) { String CHFID = data.getStringExtra("SCAN_RESULT"); etCHFID.setText(CHFID); @@ -280,138 +163,108 @@ protected void onActivityResult(int requestCode, int resultCode, Intent data) { if (!escape.CheckCHFID(etCHFID.getText().toString())) return; pd = ProgressDialog.show(EnquireActivity.this, "", getResources().getString(R.string.GetingInsuuree)); - new Thread(){ - public void run(){ - getInsureeInfo(); - - pd.dismiss(); - } - }.start(); + new Thread(() -> { + getInsureeInfo(); + pd.dismiss(); + }).start(); } break; - } - } catch (Exception e) { - // TODO Auto-generated catch block e.printStackTrace(); } } - private void isSDCardAvailable(){ - String status = ((Global)getApplicationContext()).getSDCardStatus(); - if (Environment.MEDIA_MOUNTED_READ_ONLY.equals(status)){ + private void isSDCardAvailable() { + String status = ((Global) getApplicationContext()).getSDCardStatus(); + if (Environment.MEDIA_MOUNTED_READ_ONLY.equals(status)) { //Toast.makeText(this, "SD Card is in read only mode.", Toast.LENGTH_LONG); new AlertDialog.Builder(this) .setMessage(getResources().getString(R.string.SDCardReadOnly)) .setCancelable(false) - .setPositiveButton("Force close", new DialogInterface.OnClickListener() { - - @Override - public void onClick(DialogInterface dialog, int which) { - finish(); - } - }).show(); + .setPositiveButton("Force close", (dialog, which) -> finish()).show(); - }else if(!Environment.MEDIA_MOUNTED.equals(status)){ + } else if (!Environment.MEDIA_MOUNTED.equals(status)) { new AlertDialog.Builder(this) .setMessage(getResources().getString(R.string.SDCardMissing)) .setCancelable(false) - .setPositiveButton(getResources().getString(R.string.ForceClose), new DialogInterface.OnClickListener() { - - @Override - public void onClick(DialogInterface dialog, int which) { - finish(); - } - }).create().show(); + .setPositiveButton(getResources().getString(R.string.ForceClose), (dialog, which) -> finish()).create().show(); } } - protected AlertDialog ShowDialog(final TextView tv,String msg){ + protected AlertDialog ShowDialog(final TextView tv, String msg) { return new AlertDialog.Builder(this) .setMessage(msg) .setCancelable(false) - .setPositiveButton(R.string.Ok, new DialogInterface.OnClickListener() { - - @Override - public void onClick(DialogInterface dialog, int which) { - tv.requestFocus(); - } - }).show(); + .setPositiveButton(R.string.Ok, (dialog, which) -> tv.requestFocus()).show(); } @SuppressLint("WrongConstant") - private String getDataFromDb(String chfid){ - - try{ - - result = "[{"; + private String getDataFromDb(String chfid) { + StringBuilder builder; + try { + builder = new StringBuilder("[{"); db = openOrCreateDatabase(SQLHandler.DB_NAME_DATA, SQLiteDatabase.OPEN_READONLY, null); - - String[] columns = {"CHFID" ,"Photo" , "InsureeName", "DOB", "Gender","ProductCode", "ProductName", "ExpiryDate", "Status", "DedType", "Ded1", "Ded2", "Ceiling1", "Ceiling2"}; - - Cursor c = db.query("tblPolicyInquiry", columns, "Trim(CHFID)=" + "\'"+ chfid +"\'" , null, null, null, null); + String[] columns = {"CHFID", "Photo", "InsureeName", "DOB", "Gender", "ProductCode", "ProductName", "ExpiryDate", "Status", "DedType", "Ded1", "Ded2", "Ceiling1", "Ceiling2"}; + String[] selectionArgs = {chfid}; + Cursor c = db.query("tblPolicyInquiry", columns, "Trim(CHFID)=?", selectionArgs, null, null, null); int i = 0; boolean _isHeadingDone = false; - for(c.moveToFirst();!c.isAfterLast();c.moveToNext()){ - for(i=0;i<5;i++){ - if (!_isHeadingDone){ - if (c.getColumnName(i).equalsIgnoreCase("photo")){ + for (c.moveToFirst(); !c.isAfterLast(); c.moveToNext()) { + for (i = 0; i < 5; i++) { + if (!_isHeadingDone) { + if (c.getColumnName(i).equalsIgnoreCase("photo")) { byte[] photo = c.getBlob(i); - if (photo != null){ + if (photo != null) { ByteArrayInputStream is = new ByteArrayInputStream(photo); theImage = BitmapFactory.decodeStream(is); } continue; } - result = result + "\"" + c.getColumnName(i) + "\":" + "\"" + c.getString(i) + "\","; - }else{ - + builder.append("\"").append(c.getColumnName(i)).append("\":").append("\"").append(c.getString(i)).append("\","); } } _isHeadingDone = true; if (c.isFirst()) - result = result + "\"" + "Details" + "\":[{" ; + builder.append("\"").append("Details").append("\":[{"); else - result = result + "{"; + builder.append("{"); - for(i=5;i { + try { + JSONArray jsonArray = new JSONArray(result); - }else{ + if (jsonArray.length() == 0) { + ShowDialog(getResources().getString(R.string.RecordNotFound)); + return; + } - if(theImage != null){ + ll.setVisibility(View.VISIBLE); + + int i = 0; + for (i = 0; i < jsonArray.length(); i++) { + JSONObject jsonObject = jsonArray.getJSONObject(i); + if (!etCHFID.getText().toString().trim().equals(jsonObject.getString("chfid").trim())) + continue; + + tvCHFID.setText(jsonObject.getString("chfid")); + tvName.setText(jsonObject.getString("insureeName")); + tvDOB.setText(jsonObject.getString("dob"));//Adjust + tvGender.setText(jsonObject.getString("gender")); + + if (((Global) getApplicationContext()).isNetworkAvailable()) { + + String photo_url_str = "/" + jsonObject.getString("photoPath"); //TODO prepare new method to get Image on enquiring + + iv.setImageResource(R.drawable.person); + Picasso.with(getApplicationContext()) + .load(photo_url_str) + .placeholder(R.drawable.person) + .error(R.drawable.person).into(iv); + } else { + if (theImage != null) { + iv.setImageBitmap(theImage); + } else { + byte[] photo = jsonObject.getString("photoPath").getBytes(); + ByteArrayInputStream is = new ByteArrayInputStream(photo); + theImage = BitmapFactory.decodeStream(is); + if (theImage != null) { iv.setImageBitmap(theImage); - }else { - byte[] photo = jsonObject.getString("photoPath").getBytes(); - ByteArrayInputStream is = new ByteArrayInputStream(photo); - theImage = BitmapFactory.decodeStream(is); - if(theImage != null){ - iv.setImageBitmap(theImage); - }else{ - iv.setImageResource(R.drawable.person); - } + } else { + iv.setImageResource(R.drawable.person); } - - } + } + jsonArray = new JSONArray(jsonObject.getString("details")); - jsonArray = new JSONArray(jsonObject.getString("details")); - - - for(i = 0;i< jsonArray.length();i++){ - jsonObject = jsonArray.getJSONObject(i); - - - HashMap Policy = new HashMap<>(); - jsonObject = jsonArray.getJSONObject(i); - double iDedType = 0; - if(!jsonObject.getString("dedType").equalsIgnoreCase("null"))iDedType = Double.valueOf(jsonObject.getString("dedType")); - - String Ded = "",Ded1= "",Ded2 = ""; - String Ceiling = "",Ceiling1 = "", Ceiling2 =""; - - String jDed1 = "",jDed2 = "",jCeiling1 = "",jCeiling2 = ""; + for (i = 0; i < jsonArray.length(); i++) { + jsonObject = jsonArray.getJSONObject(i); - if(jsonObject.getString("ded1").equalsIgnoreCase("null")) jDed1 = "";else jDed1 = jsonObject.getString("ded1"); - if(jsonObject.getString("ded2").equalsIgnoreCase("null")) jDed2 = "";else jDed2 = jsonObject.getString("ded2"); - if(jsonObject.getString("ceiling1").equalsIgnoreCase("null")) jCeiling1 = "";else jCeiling1 = jsonObject.getString("ceiling1"); - if(jsonObject.getString("ceiling2").equalsIgnoreCase("null")) jCeiling2 = "";else jCeiling2 = jsonObject.getString("ceiling2"); + HashMap Policy = new HashMap<>(); + jsonObject = jsonArray.getJSONObject(i); + double iDedType = 0; + if (!jsonObject.getString("dedType").equalsIgnoreCase("null")) + iDedType = Double.parseDouble(jsonObject.getString("dedType")); - //Get the type + String Ded = "", Ded1 = "", Ded2 = ""; + String Ceiling = "", Ceiling1 = "", Ceiling2 = ""; - if(iDedType == 1 | iDedType == 2 | iDedType == 3){ - if (!jDed1.equals(""))Ded1 = jsonObject.getString("ded1"); - if (!jCeiling1.equals(""))Ceiling1 = jsonObject.getString("ceiling1"); + String jDed1 = "", jDed2 = "", jCeiling1 = "", jCeiling2 = ""; - if(!Ded1.equals("")) Ded = "Deduction: " + Ded1; - if(!Ceiling1.equals("")) Ceiling = "Ceiling: " + Ceiling1; + if (jsonObject.getString("ded1").equalsIgnoreCase("null")) jDed1 = ""; + else jDed1 = jsonObject.getString("ded1"); + if (jsonObject.getString("ded2").equalsIgnoreCase("null")) jDed2 = ""; + else jDed2 = jsonObject.getString("ded2"); + if (jsonObject.getString("ceiling1").equalsIgnoreCase("null")) + jCeiling1 = ""; + else jCeiling1 = jsonObject.getString("ceiling1"); + if (jsonObject.getString("ceiling2").equalsIgnoreCase("null")) + jCeiling2 = ""; + else jCeiling2 = jsonObject.getString("ceiling2"); - }else if(iDedType == 1.1 | iDedType == 2.1 | iDedType == 3.1){ + //Get the type - if (jDed1.length() > 0)Ded1 = " IP:" + jsonObject.getString("ded1"); - if (jDed2.length() > 0)Ded2 = " OP:" + jsonObject.getString("ded2"); - if (jCeiling1.length() > 0)Ceiling1 = " IP:" + jsonObject.getString("ceiling1"); - if (jCeiling2.length() > 0)Ceiling2 = " OP:" + jsonObject.getString("ceiling2"); + if (iDedType == 1 | iDedType == 2 | iDedType == 3) { + if (!jDed1.equals("")) Ded1 = jsonObject.getString("ded1"); + if (!jCeiling1.equals("")) Ceiling1 = jsonObject.getString("ceiling1"); - if (!(Ded1 + Ded2).equals("")) Ded = "Deduction: "+ Ded1 + Ded2; - if (!(Ceiling1 + Ceiling2).equals("")) Ceiling = "Ceiling: "+ Ceiling1 + Ceiling2; + if (!Ded1.equals("")) Ded = "Deduction: " + Ded1; + if (!Ceiling1.equals("")) Ceiling = "Ceiling: " + Ceiling1; - } + } else if (iDedType == 1.1 | iDedType == 2.1 | iDedType == 3.1) { + if (jDed1.length() > 0) Ded1 = " IP:" + jsonObject.getString("ded1"); + if (jDed2.length() > 0) Ded2 = " OP:" + jsonObject.getString("ded2"); + if (jCeiling1.length() > 0) + Ceiling1 = " IP:" + jsonObject.getString("ceiling1"); + if (jCeiling2.length() > 0) + Ceiling2 = " OP:" + jsonObject.getString("ceiling2"); + if (!(Ded1 + Ded2).equals("")) Ded = "Deduction: " + Ded1 + Ded2; + if (!(Ceiling1 + Ceiling2).equals("")) + Ceiling = "Ceiling: " + Ceiling1 + Ceiling2; - Policy.put("Heading", jsonObject.getString("productCode")); - Policy.put("Heading1", jsonObject.getString("expiryDate")+ " " + jsonObject.getString("status")); - Policy.put("SubItem1", jsonObject.getString("productName")); - Policy.put("SubItem2",Ded); - Policy.put("SubItem3",Ceiling); - String TotalAdmissionsLeft = ""; - String TotalVisitsLeft = ""; - String TotalConsultationsLeft = ""; - String TotalSurgeriesLeft = ""; - String TotalDeliveriesLeft = ""; - String TotalAntenatalLeft = ""; - String ConsultationAmountLeft = ""; - String SurgeryAmountLeft = ""; - String HospitalizationAmountLeft = ""; - String AntenatalAmountLeft = ""; - String DeliveryAmountLeft = ""; - - TotalAdmissionsLeft = buildEnquireValue(jsonObject, "totalAdmissionsLeft", R.string.totalAdmissionsLeft); - TotalVisitsLeft = buildEnquireValue(jsonObject, "totalVisitsLeft", R.string.totalVisitsLeft); - TotalConsultationsLeft = buildEnquireValue(jsonObject, "totalConsultationsLeft", R.string.totalConsultationsLeft); - TotalSurgeriesLeft = buildEnquireValue(jsonObject, "totalSurgeriesLeft", R.string.totalSurgeriesLeft); - TotalDeliveriesLeft = buildEnquireValue(jsonObject, "totalDelivieriesLeft", R.string.totalDeliveriesLeft); - TotalAntenatalLeft = buildEnquireValue(jsonObject, "totalAntenatalLeft", R.string.totalAntenatalLeft); - ConsultationAmountLeft = buildEnquireValue(jsonObject, "consultationAmountLeft", R.string.consultationAmountLeft); - SurgeryAmountLeft = buildEnquireValue(jsonObject, "surgeryAmountLeft", R.string.surgeryAmountLeft); - HospitalizationAmountLeft = buildEnquireValue(jsonObject, "hospitalizationAmountLeft", R.string.hospitalizationAmountLeft); - AntenatalAmountLeft = buildEnquireValue(jsonObject, "antenatalAmountLeft", R.string.antenatalAmountLeft); - DeliveryAmountLeft = buildEnquireValue(jsonObject, "deliveryAmountLeft", R.string.deliveryAmountLeft); - - if(!getSpecificControl("TotalAdmissionsLeft").equals("N")){Policy.put("SubItem4",TotalAdmissionsLeft);} - if(!getSpecificControl("TotalVisitsLeft").equals("N")){Policy.put("SubItem5",TotalVisitsLeft);} - if(!getSpecificControl("TotalConsultationsLeft").equals("N")){Policy.put("SubItem6",TotalConsultationsLeft);} - if(!getSpecificControl("TotalSurgeriesLeft").equals("N")){Policy.put("SubItem7",TotalSurgeriesLeft);} - if(!getSpecificControl("TotalDelivieriesLeft").equals("N")){Policy.put("SubItem8",TotalDeliveriesLeft);} - if(!getSpecificControl("TotalAntenatalLeft").equals("N")){Policy.put("SubItem9",TotalAntenatalLeft);} - if(!getSpecificControl("ConsultationAmountLeft").equals("N")){Policy.put("SubItem10",ConsultationAmountLeft);} - if(!getSpecificControl("AntenatalAmountLeft").equals("N")){Policy.put("SubItem13",AntenatalAmountLeft);} - if(!getSpecificControl("SurgeryAmountLeft").equals("N")){Policy.put("SubItem11",SurgeryAmountLeft);} - if(!getSpecificControl("HospitalizationAmountLeft").equals("N")){Policy.put("SubItem12",HospitalizationAmountLeft);} - if(!getSpecificControl("DeliveryAmountLeft").equals("N")){Policy.put("SubItem14",DeliveryAmountLeft);} - - PolicyList.add(Policy); - etCHFID.setText(""); - //break; } - } - ListAdapter adapter = new SimpleAdapter(EnquireActivity.this, - PolicyList, R.layout.policylist, - new String[]{"Heading","Heading1","SubItem1","SubItem2","SubItem3","SubItem4","SubItem5","SubItem6","SubItem7","SubItem8","SubItem9","SubItem10","SubItem11","SubItem12","SubItem13","SubItem14"}, - new int[]{R.id.tvHeading,R.id.tvHeading1,R.id.tvSubItem1,R.id.tvSubItem2,R.id.tvSubItem3,R.id.tvSubItem4,R.id.tvSubItem5,R.id.tvSubItem6,R.id.tvSubItem7,R.id.tvSubItem8,R.id.tvSubItem9,R.id.tvSubItem10,R.id.tvSubItem11,R.id.tvSubItem12,R.id.tvSubItem13,R.id.tvSubItem14} - ); - lv.setAdapter(adapter); + Policy.put("Heading", jsonObject.getString("productCode")); + Policy.put("Heading1", jsonObject.getString("expiryDate") + " " + jsonObject.getString("status")); + Policy.put("SubItem1", jsonObject.getString("productName")); + Policy.put("SubItem2", Ded); + Policy.put("SubItem3", Ceiling); + String TotalAdmissionsLeft; + String TotalVisitsLeft; + String TotalConsultationsLeft; + String TotalSurgeriesLeft; + String TotalDeliveriesLeft; + String TotalAntenatalLeft; + String ConsultationAmountLeft; + String SurgeryAmountLeft; + String HospitalizationAmountLeft; + String AntenatalAmountLeft; + String DeliveryAmountLeft; + + TotalAdmissionsLeft = buildEnquireValue(jsonObject, "totalAdmissionsLeft", R.string.totalAdmissionsLeft); + TotalVisitsLeft = buildEnquireValue(jsonObject, "totalVisitsLeft", R.string.totalVisitsLeft); + TotalConsultationsLeft = buildEnquireValue(jsonObject, "totalConsultationsLeft", R.string.totalConsultationsLeft); + TotalSurgeriesLeft = buildEnquireValue(jsonObject, "totalSurgeriesLeft", R.string.totalSurgeriesLeft); + TotalDeliveriesLeft = buildEnquireValue(jsonObject, "totalDelivieriesLeft", R.string.totalDeliveriesLeft); + TotalAntenatalLeft = buildEnquireValue(jsonObject, "totalAntenatalLeft", R.string.totalAntenatalLeft); + ConsultationAmountLeft = buildEnquireValue(jsonObject, "consultationAmountLeft", R.string.consultationAmountLeft); + SurgeryAmountLeft = buildEnquireValue(jsonObject, "surgeryAmountLeft", R.string.surgeryAmountLeft); + HospitalizationAmountLeft = buildEnquireValue(jsonObject, "hospitalizationAmountLeft", R.string.hospitalizationAmountLeft); + AntenatalAmountLeft = buildEnquireValue(jsonObject, "antenatalAmountLeft", R.string.antenatalAmountLeft); + DeliveryAmountLeft = buildEnquireValue(jsonObject, "deliveryAmountLeft", R.string.deliveryAmountLeft); + + if (!getSpecificControl("TotalAdmissionsLeft").equals("N")) { + Policy.put("SubItem4", TotalAdmissionsLeft); + } + if (!getSpecificControl("TotalVisitsLeft").equals("N")) { + Policy.put("SubItem5", TotalVisitsLeft); + } + if (!getSpecificControl("TotalConsultationsLeft").equals("N")) { + Policy.put("SubItem6", TotalConsultationsLeft); + } + if (!getSpecificControl("TotalSurgeriesLeft").equals("N")) { + Policy.put("SubItem7", TotalSurgeriesLeft); + } + if (!getSpecificControl("TotalDelivieriesLeft").equals("N")) { + Policy.put("SubItem8", TotalDeliveriesLeft); + } + if (!getSpecificControl("TotalAntenatalLeft").equals("N")) { + Policy.put("SubItem9", TotalAntenatalLeft); + } + if (!getSpecificControl("ConsultationAmountLeft").equals("N")) { + Policy.put("SubItem10", ConsultationAmountLeft); + } + if (!getSpecificControl("AntenatalAmountLeft").equals("N")) { + Policy.put("SubItem13", AntenatalAmountLeft); + } + if (!getSpecificControl("SurgeryAmountLeft").equals("N")) { + Policy.put("SubItem11", SurgeryAmountLeft); + } + if (!getSpecificControl("HospitalizationAmountLeft").equals("N")) { + Policy.put("SubItem12", HospitalizationAmountLeft); + } + if (!getSpecificControl("DeliveryAmountLeft").equals("N")) { + Policy.put("SubItem14", DeliveryAmountLeft); + } - } catch (JSONException e) { - // TODO Auto-generated catch block - result = "Exception occurred:" + e.toString(); - }catch(Exception e){ - Log.e("Error", e.toString()); - result = ""; + PolicyList.add(Policy); + etCHFID.setText(""); + //break; + } } - + ListAdapter adapter = new SimpleAdapter(EnquireActivity.this, + PolicyList, R.layout.policylist, + new String[]{"Heading", "Heading1", "SubItem1", "SubItem2", "SubItem3", "SubItem4", "SubItem5", "SubItem6", "SubItem7", "SubItem8", "SubItem9", "SubItem10", "SubItem11", "SubItem12", "SubItem13", "SubItem14"}, + new int[]{R.id.tvHeading, R.id.tvHeading1, R.id.tvSubItem1, R.id.tvSubItem2, R.id.tvSubItem3, R.id.tvSubItem4, R.id.tvSubItem5, R.id.tvSubItem6, R.id.tvSubItem7, R.id.tvSubItem8, R.id.tvSubItem9, R.id.tvSubItem10, R.id.tvSubItem11, R.id.tvSubItem12, R.id.tvSubItem13, R.id.tvSubItem14} + ); + + lv.setAdapter(adapter); + } catch (JSONException e) { + result = "Exception occurred:" + e.toString(); + } catch (Exception e) { + Log.e("Error", e.toString()); + result = ""; } }); - } protected String buildEnquireValue(JSONObject jsonObject, String jsonKey, int labelId) throws JSONException { @@ -610,16 +473,11 @@ public AlertDialog ShowDialog(String msg) { return new AlertDialog.Builder(this) .setMessage(msg) .setCancelable(false) - - .setPositiveButton(R.string.Ok, new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialogInterface, int i) { - - } + .setPositiveButton(R.string.Ok, (dialogInterface, i) -> { }).show(); } - private void ClearForm(){ + private void ClearForm() { tvCHFID.setText(getResources().getString(R.string.CHFID)); tvName.setText(getResources().getString(R.string.InsureeName)); tvDOB.setText(getResources().getString(R.string.DOB)); @@ -638,13 +496,11 @@ private String getSpecificControl(String FieldName) { return control; } - public boolean onOptionsItemSelected(MenuItem item){ + public boolean onOptionsItemSelected(MenuItem item) { onBackPressed(); -// Intent myIntent = new Intent(getApplicationContext(), MainActivity.class); -// startActivityForResult(myIntent, 0); -// finish(); return true; } + @Override public void onBackPressed() { super.onBackPressed(); diff --git a/claimManagement/src/main/java/org/openimis/imisclaims/Global.java b/claimManagement/src/main/java/org/openimis/imisclaims/Global.java index dab2553b..13d24d93 100644 --- a/claimManagement/src/main/java/org/openimis/imisclaims/Global.java +++ b/claimManagement/src/main/java/org/openimis/imisclaims/Global.java @@ -27,73 +27,104 @@ import android.app.Application; import android.content.Context; +import android.content.SharedPreferences; import android.content.res.Resources; import android.net.ConnectivityManager; import android.net.NetworkInfo; import android.os.Environment; +import android.support.v7.app.AppCompatActivity; +import android.util.Base64; import android.util.DisplayMetrics; import android.util.Log; +import java.io.BufferedReader; import java.io.File; +import java.io.FileInputStream; +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.InputStreamReader; +import java.io.OutputStreamWriter; +import java.security.MessageDigest; +import java.util.Arrays; import java.util.HashMap; +import java.util.List; import java.util.Locale; import java.util.Map; -import static org.openimis.imisclaims.BuildConfig.API_BASE_URL; +import javax.crypto.Cipher; +import javax.crypto.spec.SecretKeySpec; + import static org.openimis.imisclaims.BuildConfig.RAR_PASSWORD; import static org.openimis.imisclaims.BuildConfig.APP_DIR; -/** - * Created by HP on 05/16/2017. - */ - public class Global extends Application { private static Global instance; private String OfficerCode; private String OfficerName; private int UserId; - private int OfficerId; - private String token; - private boolean isLogged; private String MainDirectory; - private Map SubDirectories = new HashMap<>(); - private String ImageFolder; - private static final String _Domain = API_BASE_URL; + private String AppDirectory; + private final Map SubDirectories = new HashMap<>(); private static final String _DefaultRarPassword = RAR_PASSWORD; + private Token JWTToken; + + private final List ProtectedDirectories = Arrays.asList("Authentications"); + + + public Global() { + instance = this; + } + + public static Global getGlobal() { + return instance; + } - public Global() { instance = this; } - public static Context getContext() { return instance; } - public String getDomain(){ - return _Domain; + public Context getContext() { + return instance.getApplicationContext(); } + public String getDefaultRarPassword() { return _DefaultRarPassword; } + public String getOfficerCode() { return OfficerCode; } + public void setOfficerCode(String officerCode) { OfficerCode = officerCode; } + public int getUserId() { return UserId; } + public void setUserId(int userId) { UserId = userId; } - public boolean getIslogged() { - return isLogged; - } - public void setIsLogged(boolean logged) { - isLogged = logged; - } + public void setOfficerName(String officerName) { OfficerName = officerName; } - public String getOfficeName(){ + + public String getOfficeName() { return this.OfficerName; } + public Token getJWTToken() { + if (JWTToken == null) + JWTToken = new Token(); + return JWTToken; + } + + public boolean isLoggedIn() { + boolean isLoggedIn = getJWTToken().isTokenValidJWT(); + if (!isLoggedIn) { + getJWTToken().clearToken(); + } + return isLoggedIn; + } + private String createOrCheckDirectory(String path) { File dir = new File(path); @@ -105,7 +136,7 @@ private String createOrCheckDirectory(String path) { } public String getMainDirectory() { - if (MainDirectory == null) { + if (MainDirectory == null || "".equals(MainDirectory)) { String documentsDir = createOrCheckDirectory(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOCUMENTS).toString()); MainDirectory = createOrCheckDirectory(documentsDir + File.separator + APP_DIR); @@ -116,28 +147,97 @@ public String getMainDirectory() { return MainDirectory; } + public String getAppDirectory() { + if (AppDirectory == null || "".equals(AppDirectory)) { + AppDirectory = createOrCheckDirectory(getApplicationInfo().dataDir); + + if ("".equals(AppDirectory)) { + Log.w("DIRS", "App directory could not be created"); + } + } + return AppDirectory; + } + public String getSubdirectory(String subdirectory) { - if (!SubDirectories.containsKey(subdirectory)) { - String subDir = createOrCheckDirectory(getMainDirectory() + File.separator + subdirectory); + if (!SubDirectories.containsKey(subdirectory) || "".equals(SubDirectories.get(subdirectory))) { + String directory; - if ("".equals(subDir)) { + if (ProtectedDirectories.contains(subdirectory)) { + directory = getAppDirectory(); + } else { + directory = getMainDirectory(); + } + + String subDirPath = createOrCheckDirectory(directory + File.separator + subdirectory); + + if ("".equals(subDirPath)) { Log.w("DIRS", subdirectory + " directory could not be created"); - return null; + return ""; } else { - SubDirectories.put(subdirectory, subDir); + SubDirectories.put(subdirectory, subDirPath); } } return SubDirectories.get(subdirectory); } - public boolean isNetworkAvailable(){ + public String getFileText(File file) { + String line; + StringBuilder stringBuilder = new StringBuilder(); + if (file.exists()) { + try { + BufferedReader reader = new BufferedReader(new InputStreamReader(new FileInputStream(file))); + + line = reader.readLine(); + if (line != null) { + stringBuilder.append(line); + + line = reader.readLine(); + while (line != null) { + stringBuilder.append("\n"); + stringBuilder.append(line); + line = reader.readLine(); + } + } + } catch (IOException e) { + e.printStackTrace(); + } + } + return stringBuilder.toString(); + } + + public String getFileText(String dir, String filename) { + return getFileText(new File(dir, filename)); + } + + public void writeText(File file, String text) { + try { + if (file.exists()) { + file.delete(); + } + if (file.createNewFile()) { + FileOutputStream fOut = new FileOutputStream(file); + OutputStreamWriter myOutWriter = new OutputStreamWriter(fOut); + myOutWriter.write(text); + myOutWriter.close(); + fOut.close(); + } + } catch (IOException e) { + e.printStackTrace(); + } + } + + public void writeText(String dir, String filename, String text) { + writeText(new File(new File(dir), filename), text); + } + + public boolean isNetworkAvailable() { ConnectivityManager cm = (ConnectivityManager) this.getSystemService(Context.CONNECTIVITY_SERVICE); NetworkInfo ni = cm.getActiveNetworkInfo(); return (ni != null && ni.isConnected()); } - public void ChangeLanguage(String Language){ + public void ChangeLanguage(String Language) { Resources res = getResources(); DisplayMetrics dm = res.getDisplayMetrics(); android.content.res.Configuration config = res.getConfiguration(); @@ -145,12 +245,47 @@ public void ChangeLanguage(String Language){ res.updateConfiguration(config, dm); } - // ToDo: remove this method if published to Google Play - public boolean isNewVersionAvailable(String Field, String PackageName){ + public boolean isNewVersionAvailable(String Field, String PackageName) { return false; } - public String getSDCardStatus(){ + public String getSDCardStatus() { return Environment.getExternalStorageState(); } + + public String getRarPwd() { + String password = ""; + SharedPreferences sharedPreferences = getSharedPreferences("MyPref", 0); + if (!sharedPreferences.contains("rarPwd")) { + password = getDefaultRarPassword(); + } else { + String encryptedRarPassword = sharedPreferences.getString("rarPwd", getDefaultRarPassword()); + String trimEncryptedPassword = encryptedRarPassword.trim(); + String salt = sharedPreferences.getString("salt", null); + String trimSalt = salt.trim(); + try { + password = decryptRarPwd(trimEncryptedPassword, trimSalt); + } catch (Exception e) { + e.printStackTrace(); + } + } + return password; + } + + private String decryptRarPwd(String dataToDecrypt, String decPassword) throws Exception { + SecretKeySpec key = generateKey(decPassword); + Cipher c = Cipher.getInstance("AES"); + c.init(Cipher.DECRYPT_MODE, key); + byte[] decodedValue = Base64.decode(dataToDecrypt, Base64.DEFAULT); + byte[] decValue = c.doFinal(decodedValue); + return new String(decValue); + } + + private SecretKeySpec generateKey(String encPassword) throws Exception { + final MessageDigest digest = MessageDigest.getInstance("SHA-256"); + byte[] bytes = encPassword.getBytes("UTF-8"); + digest.update(bytes, 0, bytes.length); + byte[] key = digest.digest(); + return new SecretKeySpec(key, "AES"); + } } diff --git a/claimManagement/src/main/java/org/openimis/imisclaims/ImisActivity.java b/claimManagement/src/main/java/org/openimis/imisclaims/ImisActivity.java new file mode 100644 index 00000000..fcd9ee46 --- /dev/null +++ b/claimManagement/src/main/java/org/openimis/imisclaims/ImisActivity.java @@ -0,0 +1,228 @@ +package org.openimis.imisclaims; + +import android.app.AlertDialog; +import android.app.ProgressDialog; +import android.content.BroadcastReceiver; +import android.content.Context; +import android.content.DialogInterface; +import android.content.Intent; +import android.content.IntentFilter; +import android.os.Bundle; +import android.support.annotation.Nullable; +import android.support.v7.app.ActionBar; +import android.support.v7.app.AppCompatActivity; +import android.view.LayoutInflater; +import android.view.View; +import android.widget.TextView; +import android.widget.Toast; + +import java.util.ArrayList; + +public abstract class ImisActivity extends AppCompatActivity { + private BroadcastReceiver broadcastReceiver; + private final ArrayList emptyBroadcastList = new ArrayList<>(); + + protected ProgressDialog progressDialog; + protected ActionBar actionBar; + protected Global global; + + @Override + protected void onCreate(@Nullable Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + actionBar = getSupportActionBar(); + global = (Global) getApplicationContext(); + + broadcastReceiver = new BroadcastReceiver() { + @Override + public void onReceive(Context context, Intent intent) { + onBroadcastReceived(context, intent); + } + }; + } + + @Override + public void onBackPressed() { + super.onBackPressed(); + } + + @Override + protected void onStart() { + super.onStart(); + } + + @Override + protected void onStop() { + super.onStop(); + } + + @Override + protected void onPause() { + super.onPause(); + unregisterReceiver(broadcastReceiver); + } + + @Override + protected void onResume() { + super.onResume(); + + IntentFilter intentFilter = new IntentFilter(); + + ArrayList intentList = getBroadcastList(); + for (String intent : intentList) { + intentFilter.addAction(intent); + } + + registerReceiver(broadcastReceiver, intentFilter); + } + + /** + * Override to handle registered broadcasts + * works together with getBroadcastList + */ + protected void onBroadcastReceived(Context context, Intent intent) { + + } + + /** + * Override to register for broadcast intents + * works together with onBroadcastReceived + * + * @return List of actions to listen + */ + protected ArrayList getBroadcastList() { + return emptyBroadcastList; + } + + protected void refresh() { + finish(); + startActivity(getIntent()); + } + + protected Context getContext() { + return this; + } + + protected AlertDialog showSelectDialog(String title, CharSequence[] itemList, DialogInterface.OnClickListener itemSelectedCallback, DialogInterface.OnClickListener cancelCallback) { + AlertDialog.Builder builder = new AlertDialog.Builder(this) + .setTitle(title) + .setCancelable(false) + .setItems(itemList, itemSelectedCallback); + + if (cancelCallback != null) { + builder.setNegativeButton(R.string.Cancel, cancelCallback); + } else { + builder.setPositiveButton(R.string.Ok, ((dialog, which) -> dialog.cancel())); + } + + return builder.show(); + } + + protected AlertDialog showDialog(String msg, DialogInterface.OnClickListener okCallback, DialogInterface.OnClickListener cancelCallback) { + AlertDialog.Builder builder = new AlertDialog.Builder(this) + .setMessage(msg) + .setCancelable(false); + + if (okCallback != null) { + builder.setPositiveButton(R.string.Ok, okCallback); + } else { + builder.setPositiveButton(R.string.Ok, ((dialog, which) -> dialog.cancel())); + } + + if (cancelCallback != null) { + builder.setNegativeButton(R.string.Cancel, cancelCallback); + } + + return builder.show(); + } + + protected AlertDialog showDialog(String msg, DialogInterface.OnClickListener okCallback) { + return showDialog(msg, okCallback, null); + } + + protected AlertDialog showDialog(String msg) { + return showDialog(msg, null, null); + } + + private AlertDialog showLoginDialogBox(Runnable onLoggedIn, Runnable onCancel) { + LayoutInflater li = LayoutInflater.from(this); + View promptsView = li.inflate(R.layout.login_dialog, null); + + AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(this); + alertDialogBuilder.setView(promptsView); + + final TextView username = promptsView.findViewById(R.id.UserName); + final TextView password = promptsView.findViewById(R.id.Password); + + String officer_code = ((Global) getApplicationContext()).getOfficerCode(); + username.setText(String.valueOf(officer_code)); + + // set dialog message + alertDialogBuilder + .setCancelable(false) + .setPositiveButton(R.string.Ok, + (dialog, id) -> { + if (!(username.getText().length() == 0) && !(password.getText().length() == 0)) { + progressDialog = ProgressDialog.show(this, getResources().getString(R.string.Login), getResources().getString(R.string.InProgress)); + + new Thread(() -> { + Login login = new Login(); + + boolean isUserLogged = login.LoginToken(username.getText().toString(), password.getText().toString()); + progressDialog.dismiss(); + + if (isUserLogged) { + runOnUiThread(() -> { + showToast(getResources().getString(R.string.Login_Successful)); + onLoggedIn.run(); + }); + } else { + runOnUiThread(() -> { + showToast(getResources().getString(R.string.LoginFail)); + showLoginDialogBox(onLoggedIn, onCancel); + }); + } + }).start(); + } else { + showToast(getResources().getString(R.string.Enter_Credentials)); + dialog.dismiss(); + showLoginDialogBox(onLoggedIn, onCancel); + } + }) + .setNegativeButton(R.string.Cancel, + (dialog, id) -> { + dialog.dismiss(); + onCancel.run(); + }); + + return alertDialogBuilder.show(); + } + + + /** + * Execute the task if internet is available and the user is logged in. + * If there is no network or the the user cancels login the task is canceled + * + * @param task Task to do when the user is logged in + */ + protected void doLoggedIn(Runnable task, Runnable onCancel) { + if (global.isNetworkAvailable()) { + if (global.isLoggedIn()) { + task.run(); + } else { + showLoginDialogBox(task, onCancel); + } + } else { + showToast(getResources().getString(R.string.InternetRequired)); + onCancel.run(); + } + } + + protected void doLoggedIn(Runnable task) { + doLoggedIn(task, () -> { + }); + } + + protected void showToast(String message) { + runOnUiThread(() -> Toast.makeText(this, message, Toast.LENGTH_LONG).show()); + } +} diff --git a/claimManagement/src/main/java/org/openimis/imisclaims/Login.java b/claimManagement/src/main/java/org/openimis/imisclaims/Login.java index d753a4c9..830e70c1 100644 --- a/claimManagement/src/main/java/org/openimis/imisclaims/Login.java +++ b/claimManagement/src/main/java/org/openimis/imisclaims/Login.java @@ -1,8 +1,8 @@ package org.openimis.imisclaims; -import cz.msebera.android.httpclient.HttpEntity; -import cz.msebera.android.httpclient.HttpResponse; -import cz.msebera.android.httpclient.util.EntityUtils; +import org.apache.http.HttpEntity; +import org.apache.http.HttpResponse; +import org.apache.http.util.EntityUtils; import org.json.JSONException; import org.json.JSONObject; @@ -10,14 +10,14 @@ public class Login { - Token tokenl; + Token token; - public Login(){ - tokenl = new Token(); + public Login() { + token = Global.getGlobal().getJWTToken(); } // Login to API and get Token JWT - public boolean LoginToken(final String Username, final String Password){ + public boolean LoginToken(final String Username, final String Password) { ToRestApi rest = new ToRestApi(); JSONObject object = new JSONObject(); @@ -30,31 +30,25 @@ public boolean LoginToken(final String Username, final String Password){ String functionName = "login"; - HttpResponse response = null; + HttpResponse response; + String content; - String content = null; + response = rest.postToRestApi(object, functionName); + content = rest.getContent(response); - try { - response = rest.postToRestApi(object, functionName); - HttpEntity respEntity = (response != null) ? response.getEntity() : null; - content = (respEntity != null) ? EntityUtils.toString(respEntity) : null; - } catch (IOException e) { - e.printStackTrace(); - return false; - } - - - if (response!=null && response.getStatusLine().getStatusCode() == 200) { - JSONObject ob = null; - String jwt = null; + if (response != null && response.getStatusLine().getStatusCode() == 200 && content != null) { + JSONObject ob; + String jwt = ""; + String validTo = ""; try { ob = new JSONObject(content); jwt = ob.getString("access_token"); + validTo = ob.getString("expires_on"); } catch (JSONException e) { e.printStackTrace(); } - tokenl.saveTokenText(jwt); + token.saveTokenText(jwt, validTo); return true; } diff --git a/claimManagement/src/main/java/org/openimis/imisclaims/MainActivity.java b/claimManagement/src/main/java/org/openimis/imisclaims/MainActivity.java index f8110215..53bcdb8d 100644 --- a/claimManagement/src/main/java/org/openimis/imisclaims/MainActivity.java +++ b/claimManagement/src/main/java/org/openimis/imisclaims/MainActivity.java @@ -6,7 +6,6 @@ import android.app.PendingIntent; import android.app.ProgressDialog; import android.content.Context; -import android.content.DialogInterface; import android.content.Intent; import android.content.pm.PackageManager; import android.database.Cursor; @@ -16,12 +15,12 @@ import android.os.Bundle; import android.os.Environment; import android.os.Vibrator; +import android.support.annotation.NonNull; import android.support.design.widget.NavigationView; import android.support.v4.app.ActivityCompat; import android.support.v4.view.GravityCompat; import android.support.v4.widget.DrawerLayout; import android.support.v7.app.ActionBarDrawerToggle; -import android.support.v7.app.AppCompatActivity; import android.support.v4.app.NotificationCompat; import android.support.v7.widget.Toolbar; import android.view.LayoutInflater; @@ -32,67 +31,64 @@ import android.widget.TextView; import android.widget.Toast; -import cz.msebera.android.httpclient.HttpEntity; -import cz.msebera.android.httpclient.HttpResponse; -import cz.msebera.android.httpclient.util.EntityUtils; +import org.apache.http.HttpEntity; +import org.apache.http.HttpResponse; +import org.apache.http.util.EntityUtils; import org.json.JSONArray; import org.json.JSONException; import org.json.JSONObject; -import java.io.BufferedReader; import java.io.File; -import java.io.FileInputStream; -import java.io.FileOutputStream; import java.io.IOException; -import java.io.InputStreamReader; -import java.io.OutputStreamWriter; import java.text.SimpleDateFormat; +import java.util.ArrayList; import java.util.Date; +import java.util.Locale; import static android.provider.Settings.ACTION_MANAGE_ALL_FILES_ACCESS_PERMISSION; - -public class MainActivity extends AppCompatActivity - implements NavigationView.OnNavigationItemSelectedListener { +public class MainActivity extends ImisActivity { + ArrayList broadcastList; + final CharSequence[] lang = {"English", "Francais"}; String Language; - Global global; - Token tokenl; + SQLHandler sql; SQLiteDatabase db; ToRestApi toRestApi; - TextView progressBarinsideText; - boolean isUserLogged; TextView accepted_count; TextView rejected_count; TextView pending_count; - TextView AdminName; + DrawerLayout drawer; + ProgressDialog pd; + Menu menu; static String Path; - String AcceptedFolder; - String RejectedFolder; - String PendingFolder; - String TrashFolder; final String VersionField = "AppVersionEnquire"; NotificationManager mNotificationManager; final int SIMPLE_NOTIFICATION_ID = 1; Vibrator vibrator; - ProgressDialog pd; - - Menu menu; - - public static final String PREFS_NAME = "CMPref"; - //final CharSequence[] lang = {"English","Swahili"}; - final CharSequence[] lang = {"English","Francais"}; + @Override + protected void onBroadcastReceived(Context context, Intent intent) { + String action = intent.getAction(); + if (SynchronizeService.ACTION_CLAIM_COUNT_RESULT.equals(action)) { + accepted_count.setText(String.valueOf(intent.getIntExtra(SynchronizeService.EXTRA_CLAIM_COUNT_ACCEPTED, 0))); + rejected_count.setText(String.valueOf(intent.getIntExtra(SynchronizeService.EXTRA_CLAIM_COUNT_REJECTED, 0))); + pending_count.setText(String.valueOf(intent.getIntExtra(SynchronizeService.EXTRA_CLAIM_COUNT_PENDING, 0))); + } + } + @Override + protected ArrayList getBroadcastList() { + return broadcastList; + } @Override public boolean onCreateOptionsMenu(Menu menu) { this.menu = menu; - // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.main, menu); return true; } @@ -101,52 +97,55 @@ public boolean onCreateOptionsMenu(Menu menu) { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); - requestPermision(); - setContentView(R.layout.activity_main); - global = (Global) getApplicationContext(); + requestPermissions(); + isSDCardAvailable(); + + broadcastList = new ArrayList<>(); + broadcastList.add(SynchronizeService.ACTION_CLAIM_COUNT_RESULT); + toRestApi = new ToRestApi(); - tokenl = new Token(); pd = new ProgressDialog(this); pd.setCancelable(false); - Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); + Toolbar toolbar = findViewById(R.id.toolbar); setSupportActionBar(toolbar); - new Thread() { - public void run() { - CheckForUpdates(); - } + actionBar = getSupportActionBar(); - }.start(); + new Thread(this::checkForUpdates).start(); - DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout); + drawer = findViewById(R.id.drawer_layout); ActionBarDrawerToggle toggle = new ActionBarDrawerToggle( this, drawer, toolbar, R.string.navigation_drawer_open, R.string.navigation_drawer_close); drawer.addDrawerListener(toggle); toggle.syncState(); - NavigationView navigationView = (NavigationView) findViewById(R.id.nav_view); - navigationView.setNavigationItemSelectedListener(this); + NavigationView navigationView = findViewById(R.id.nav_view); + navigationView.setNavigationItemSelectedListener(this::onNavigationItemSelected); accepted_count = findViewById(R.id.accepted_count); rejected_count = findViewById(R.id.rejected_count); pending_count = findViewById(R.id.pending_count); - AdminName = (TextView) findViewById(R.id.AdminName); + accepted_count.setText("0"); + rejected_count.setText("0"); + pending_count.setText("0"); + + AdminName = findViewById(R.id.AdminName); } @Override public void onResume() { super.onResume(); - refreshCont(); + SynchronizeService.getClaimCount(this); } @Override public void onBackPressed() { - DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout); + DrawerLayout drawer = findViewById(R.id.drawer_layout); if (drawer.isDrawerOpen(GravityCompat.START)) { drawer.closeDrawer(GravityCompat.START); } else { @@ -156,193 +155,102 @@ public void onBackPressed() { @Override public boolean onOptionsItemSelected(MenuItem item) { - // Handle action bar item clicks here. The action bar will - // automatically handle clicks on the Home/Up button, so long - // as you specify a parent activity in AndroidManifest.xml. int id = item.getItemId(); - //noinspection SimplifiableIfStatement if (id == R.id.change_language) { - new AlertDialog.Builder(this) - .setTitle(getResources().getString(R.string.Select_Language)) - .setCancelable(false) - .setNegativeButton(getResources().getString(R.string.button_cancel), new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialogInterface, int i) { - dialogInterface.cancel(); - } - }) - .setItems(lang,new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialog, int which) { + showSelectDialog( + getResources().getString(R.string.Select_Language), + lang, + (dialog, which) -> { //if (lang[which].toString() == "English")Language="en";else Language="sw"; - if (lang[which].toString() == "English")Language="en";else Language="fr"; - + if (lang[which].toString().equals("English")) Language = "en"; + else Language = "fr"; global.ChangeLanguage(Language); - isSDCardAvailable(); - finish(); - Intent intent = new Intent(MainActivity.this, MainActivity.class); - startActivity(intent); - - } - - }).show(); + refresh(); + }, + null + ); return true; - } - if (id == R.id.login_logout) { - if(tokenl.getTokenText().length() <= 0){ - LoginDialogBox("MainActivity"); - }else { - global.setUserId(0); - item.setTitle("Login"); - Toast.makeText(MainActivity.this, MainActivity.this.getResources().getString(R.string.Logout_Successful), Toast.LENGTH_LONG).show(); - } + } else if (id == R.id.login_logout) { +// if(tokenl.getTokenText().length() <= 0){ +// LoginDialogBox("MainActivity"); +// }else { +// global.setUserId(0); +// item.setTitle("Login"); +// Toast.makeText(MainActivity.this, MainActivity.this.getResources().getString(R.string.Logout_Successful), Toast.LENGTH_LONG).show(); +// } return true; - } - return super.onOptionsItemSelected(item); + } else + return super.onOptionsItemSelected(item); } - @SuppressWarnings("StatementWithEmptyBody") - @Override public boolean onNavigationItemSelected(MenuItem item) { - // Handle navigation view item clicks here. int id = item.getItemId(); if (id == R.id.nav_home) { -// Intent intent = new Intent(this, MainActivity.class); -// startActivity(intent); - } - if (id == R.id.nav_enquire) { - if(!global.isNetworkAvailable()){ - pd.dismiss(); - Toast.makeText(MainActivity.this,MainActivity.this.getResources().getString(R.string.InternetRequired),Toast.LENGTH_LONG).show(); - return false; - } - if(isUserLogged){ + return true; + } else if (id == R.id.nav_enquire) { + doLoggedIn(() -> { Intent intent = new Intent(this, EnquireActivity.class); startActivity(intent); - }else{ - LoginDialogBoxServices("Enquire"); - } - } - if (id == R.id.nav_Map_Items) { + }); + } else if (id == R.id.nav_Map_Items) { Intent intent = new Intent(this, MapItems.class); startActivity(intent); - } - if (id == R.id.nav_Map_Services) { + } else if (id == R.id.nav_Map_Services) { Intent intent = new Intent(this, MapServices.class); startActivity(intent); - } - if (id == R.id.nav_Refresh_Map) { - if(!global.isNetworkAvailable()){ - Toast.makeText(MainActivity.this,MainActivity.this.getResources().getString(R.string.InternetRequired),Toast.LENGTH_LONG).show(); - return false; - } - //Are you sure dialog - int userid = global.getUserId(); - if(tokenl.getTokenText().length() > 0){ - ShowComfirmationDialog(); - //Toast.makeText(MainActivity.this,MainActivity.this.getResources().getString(R.string.Login_Successful),Toast.LENGTH_LONG).show(); - - }else{ - LoginDialogBox("refresh_map"); - } - } - if (id == R.id.nav_claim) { + } else if (id == R.id.nav_Refresh_Map) { + confirmRefreshMap(); + } else if (id == R.id.nav_claim) { Intent intent = new Intent(this, ClaimActivity.class); startActivity(intent); - } - if (id == R.id.nav_Reports) { + } else if (id == R.id.nav_Reports) { Intent intent = new Intent(getApplicationContext(), Report.class); startActivity(intent); -/* - if(!_General.isNetworkAvailable(ClaimActivity.this)){ - ShowDialog(getResources().getString(R.string.InternetRequired)); - return false; - } - - if(etHealthFacility.getText().length() == 0){ - ShowDialog(etHealthFacility,getResources().getString(R.string.MissingHealthFacility)); - return false; - } - if(etClaimAdmin.getText().length() == 0){ - ShowDialog(etClaimAdmin,getResources().getString(R.string.MissingClaimAdmin)); - return false; - } - - Intent Stats = new Intent(ClaimActivity.this,Statistics.class); - Stats.putExtra("HFCode",etHealthFacility.getText()); - Stats.putExtra("ClaimAdmin",etClaimAdmin.getText()); - ClaimActivity.this.startActivity(Stats); - return true;*/ - } else if (id == R.id.nav_Sync) { - if(!global.isNetworkAvailable()){ - Toast.makeText(MainActivity.this,MainActivity.this.getResources().getString(R.string.InternetRequired),Toast.LENGTH_LONG).show(); - return false; - } - Intent intent = new Intent(getApplicationContext(), Synchronize.class); + Intent intent = new Intent(getApplicationContext(), SynchronizeActivity.class); startActivity(intent); } else if (id == R.id.nav_quit) { - QuitConfirmDialogBox(); - - }else if (id == R.id.nav_about) { + showDialog( + getResources().getString(R.string.AreYouSure), + (dialog, i) -> { + global.setOfficerCode(""); + finish(); + }, + (dialog, i) -> dialog.cancel() + ); + } else if (id == R.id.nav_about) { Intent intent = new Intent(this, About.class); startActivity(intent); } else if (id == R.id.nav_Retrieve) { - if(!global.isNetworkAvailable()){ - Toast.makeText(MainActivity.this,MainActivity.this.getResources().getString(R.string.InternetRequired),Toast.LENGTH_LONG).show(); - return false; - } - if (tokenl.getTokenText().length() <= 0) { - LoginDialogBox("search_claims"); - } else { - Intent intent = new Intent(this, SearchClaims.class); + doLoggedIn(() -> { + Intent intent = new Intent(this, SearchClaimsActivity.class); startActivity(intent); - } + }); } else if (id == R.id.nav_settings) { - Intent intent = new Intent(this, Settings.class); + Intent intent = new Intent(this, SettingsActivity.class); startActivity(intent); } - DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout); drawer.closeDrawer(GravityCompat.START); return true; } - public void QuitConfirmDialogBox() { - - // get prompts.xml view - LayoutInflater li = LayoutInflater.from(this); - View promptsView = li.inflate(R.layout.quit_dialog, null); - - AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder( - this); - - // set prompts.xml to alertdialog builder - alertDialogBuilder.setView(promptsView); - - // set dialog message - alertDialogBuilder - .setCancelable(false) - .setPositiveButton(R.string.Yes, - new DialogInterface.OnClickListener() { - public void onClick(DialogInterface dialog,int id) { - global.setOfficerCode(""); - dialog.cancel(); - finish(); - } - }) - .setNegativeButton(R.string.No, - new DialogInterface.OnClickListener() { - public void onClick(DialogInterface dialog,int id) { - dialog.cancel(); - } - }); - // create alert dialog - AlertDialog alertDialog = alertDialogBuilder.create(); - alertDialog.show(); + public AlertDialog confirmRefreshMap() { + return showDialog( + getResources().getString(R.string.AreYouSure), + (dialog, i) -> { + try { + JSONObject object1 = new JSONObject(); + object1.put("last_update_date", new SimpleDateFormat("yyyy/MM/dd", Locale.US).format(new Date(0))); + DownLoadDiagnosesServicesItemsAgain(object1, sql); + } catch (Exception e) { + e.printStackTrace(); + } + }); } + private void initializeDb3File(SQLHandler sql) { if (checkDataBase()) { if (global.isNetworkAvailable()) { @@ -363,10 +271,10 @@ private void initializeDb3File(SQLHandler sql) { } } else { if (!sql.checkIfAny("tblControls")) { - ErrorDialogBox(getResources().getString(R.string.noControls) + " " + getResources().getString(R.string.provideExtractOrInternet),true); + CriticalErrorDialogBox(getResources().getString(R.string.noControls) + " " + getResources().getString(R.string.provideExtractOrInternet)); } else if (!sql.checkIfAny("tblClaimAdmins")) { if (sql.getAdjustibility("ClaimAdministrator").equals("M")) - ErrorDialogBox(getResources().getString(R.string.noAdmins) + " " + getResources().getString(R.string.provideExtractOrInternet),true); + CriticalErrorDialogBox(getResources().getString(R.string.noAdmins) + " " + getResources().getString(R.string.provideExtractOrInternet)); } else { ClaimAdminDialogBox(); } @@ -383,380 +291,82 @@ public void createFolders() { } } - private void isSDCardAvailable(){ + private void isSDCardAvailable() { String status = global.getSDCardStatus(); - if (Environment.MEDIA_MOUNTED_READ_ONLY.equals(status)){ + if (Environment.MEDIA_MOUNTED_READ_ONLY.equals(status)) { //Toast.makeText(this, "SD Card is in read only mode.", Toast.LENGTH_LONG); new AlertDialog.Builder(this) .setMessage(getResources().getString(R.string.SDCardReadOnly)) .setCancelable(false) - .setPositiveButton("Force close", new DialogInterface.OnClickListener() { + .setPositiveButton("Force close", (dialog, which) -> finish()).show(); - @Override - public void onClick(DialogInterface dialog, int which) { - finish(); - } - }).show(); - - }else if(!Environment.MEDIA_MOUNTED.equals(status)){ + } else if (!Environment.MEDIA_MOUNTED.equals(status)) { new AlertDialog.Builder(this) .setMessage(getResources().getString(R.string.SDCardMissing)) .setCancelable(false) - .setPositiveButton(getResources().getString(R.string.ForceClose), new DialogInterface.OnClickListener() { - - @Override - public void onClick(DialogInterface dialog, int which) { - finish(); - } - }).create().show(); + .setPositiveButton(getResources().getString(R.string.ForceClose), (dialog, which) -> finish()).show(); } } - public void LoginDialogBox(final String page) { - - final int[] userid = {0}; - - // get prompts.xml view - LayoutInflater li = LayoutInflater.from(this); - View promptsView = li.inflate(R.layout.login_dialog, null); - - AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder( - this); - - // set prompts.xml to alertdialog builder - alertDialogBuilder.setView(promptsView); - - final TextView username = (TextView) promptsView.findViewById(R.id.UserName); - final TextView password = (TextView) promptsView.findViewById(R.id.Password); - String officer_code = global.getOfficerCode(); - username.setText(String.valueOf(officer_code)); - // set dialog message - alertDialogBuilder - .setCancelable(false) - .setPositiveButton(getResources().getString(R.string.Ok), - new DialogInterface.OnClickListener() { - public void onClick(DialogInterface dialog, int id) { - if (global.isNetworkAvailable()) { - if (!username.getText().toString().equals("") && !password.getText().toString().equals("")) { - pd = ProgressDialog.show(MainActivity.this, getResources().getString(R.string.Login), getResources().getString(R.string.InProgress)); - - new Thread() { - public void run() { - isUserLogged = new Login().LoginToken(username.getText().toString(), password.getText().toString()); - - if (!isUserLogged) { - runOnUiThread(new Runnable() { - @Override - public void run() { - pd.dismiss(); - //ShowDialog(MainActivity.this.getResources().getString(R.string.LoginFail)); - Toast.makeText(MainActivity.this, MainActivity.this.getResources().getString(R.string.LoginFail), Toast.LENGTH_LONG).show(); - LoginDialogBox(page); - } - }); - - } else { - final String finalToken = tokenl.getTokenText(); - runOnUiThread(new Runnable() { - @Override - public void run() { - if (finalToken.length() > 0) { - pd.dismiss(); - //updateMenuTitlesLogout(); - if (page.equals("MainActivity")) { -/* Intent intent = new Intent(MainActivity.this, MainActivity.class); - startActivity(intent);*/ - Toast.makeText(MainActivity.this, MainActivity.this.getResources().getString(R.string.Login_Successful), Toast.LENGTH_LONG).show(); - } - if (page.equals("Enquire")) { - Intent intent = new Intent(MainActivity.this, EnquireActivity.class); - startActivity(intent); - Toast.makeText(MainActivity.this, MainActivity.this.getResources().getString(R.string.Login_Successful), Toast.LENGTH_LONG).show(); - } - if (page.equals("refresh_map")) { - Toast.makeText(MainActivity.this, MainActivity.this.getResources().getString(R.string.Login_Successful), Toast.LENGTH_LONG).show(); - ShowComfirmationDialog(); - } - if(page.equals("search_claims")) { - Intent intent = new Intent(MainActivity.this, SearchClaims.class); - startActivity(intent); - Toast.makeText(MainActivity.this, MainActivity.this.getResources().getString(R.string.Login_Successful), Toast.LENGTH_LONG).show(); - } - } else { - pd.dismiss(); - //ShowDialog(MainActivity.this.getResources().getString(R.string.LoginFail)); - Toast.makeText(MainActivity.this, MainActivity.this.getResources().getString(R.string.LoginFail), Toast.LENGTH_LONG).show(); - LoginDialogBox(page); - } - } - }); - } - - - } - }.start(); - - - } else { - LoginDialogBox(page); - Toast.makeText(MainActivity.this, MainActivity.this.getResources().getString(R.string.Enter_Credentials), Toast.LENGTH_LONG).show(); - } - } else { - ErrorDialogBox(getResources().getString(R.string.CheckInternet)); - } - - - } - }) - .setNegativeButton(R.string.Cancel, - new DialogInterface.OnClickListener() { - public void onClick(DialogInterface dialog, int id) { - dialog.cancel(); - } - }); - - // create alert dialog - AlertDialog alertDialog = alertDialogBuilder.create(); - alertDialog.show(); - } - - public void LoginDialogBoxServices(final String page) { - - final int[] userid = {0}; - - // get prompts.xml view - LayoutInflater li = LayoutInflater.from(this); - View promptsView = li.inflate(R.layout.login_dialog, null); - - AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder( - this); - - // set prompts.xml to alertdialog builder - alertDialogBuilder.setView(promptsView); - - final TextView username = (TextView) promptsView.findViewById(R.id.UserName); - final TextView password = (TextView) promptsView.findViewById(R.id.Password); - String officer_code = global.getOfficerCode(); - username.setText(String.valueOf(officer_code)); - // set dialog message - alertDialogBuilder - .setCancelable(false) - .setPositiveButton(getResources().getString(R.string.Ok), - new DialogInterface.OnClickListener() { - public void onClick(DialogInterface dialog, int id) { - if (!username.getText().toString().equals("") && !password.getText().toString().equals("")) { - pd = ProgressDialog.show(MainActivity.this, getResources().getString(R.string.Login), getResources().getString(R.string.InProgress)); - - new Thread() { - public void run() { - isUserLogged = new Login().LoginToken(username.getText().toString(), password.getText().toString()); - runOnUiThread(new Runnable() { - @Override - public void run() { - if (isUserLogged) { - pd.dismiss(); - //updateMenuTitlesLogout(); - if (page.equals("MainActivity")) { -/* Intent intent = new Intent(MainActivity.this, MainActivity.class); - startActivity(intent);*/ - Toast.makeText(MainActivity.this, MainActivity.this.getResources().getString(R.string.Login_Successful), Toast.LENGTH_LONG).show(); - } - if (page.equals("Enquire")) { - Intent intent = new Intent(MainActivity.this, EnquireActivity.class); - startActivity(intent); - Toast.makeText(MainActivity.this, MainActivity.this.getResources().getString(R.string.Login_Successful), Toast.LENGTH_LONG).show(); - } - - } else { - pd.dismiss(); - //ShowDialog(MainActivity.this.getResources().getString(R.string.LoginFail)); - Toast.makeText(MainActivity.this, MainActivity.this.getResources().getString(R.string.LoginFail), Toast.LENGTH_LONG).show(); - LoginDialogBoxServices(page); - } - } - }); - } - }.start(); - - - } else { - LoginDialogBox(page); - Toast.makeText(MainActivity.this, MainActivity.this.getResources().getString(R.string.Enter_Credentials), Toast.LENGTH_LONG).show(); - } - - } - }) - .setNegativeButton(R.string.Cancel, - new DialogInterface.OnClickListener() { - public void onClick(DialogInterface dialog, int id) { - dialog.cancel(); - } - }); - - // create alert dialog - AlertDialog alertDialog = alertDialogBuilder.create(); - alertDialog.show(); - } - public void ClaimAdminDialogBox() { - - // get prompts.xml view LayoutInflater li = LayoutInflater.from(this); View promptsView = li.inflate(R.layout.claim_code_dialog, null); - - AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder( - this); - - // set prompts.xml to alertdialog builder + AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(this); alertDialogBuilder.setView(promptsView); - final EditText claim_code = (EditText) promptsView.findViewById(R.id.ClaimCode); + final EditText claim_code = promptsView.findViewById(R.id.ClaimCode); - // set dialog message alertDialogBuilder .setCancelable(false) .setPositiveButton(R.string.Continue, - new DialogInterface.OnClickListener() { - public void onClick(DialogInterface dialog,int id) { - validateClaimAdminCode(claim_code.getText().toString()); - dialog.cancel(); - } - }) + (dialog, id) -> validateClaimAdminCode(claim_code.getText().toString())) .setNegativeButton(R.string.Cancel, - new DialogInterface.OnClickListener() { - public void onClick(DialogInterface dialog,int id) { - dialog.cancel(); - finish(); - } - }); - - // create alert dialog - AlertDialog alertDialog = alertDialogBuilder.create(); - alertDialog.show(); + (dialog, id) -> finish()) + .show(); } public void ErrorDialogBox(final String message) { - ErrorDialogBox(message,false); + showDialog(message); } - public void ErrorDialogBox(final String message, final boolean critical) { - - // get prompts.xml view - LayoutInflater li = LayoutInflater.from(this); - View promptsView = li.inflate(R.layout.error_message_dialog, null); - - AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder( - this); - - // set prompts.xml to alertdialog builder - alertDialogBuilder.setView(promptsView); - - final TextView error = (TextView) promptsView.findViewById(R.id.error_message); - error.setText(message); - - // set dialog message - alertDialogBuilder - .setCancelable(false) - .setPositiveButton(R.string.button_ok, - new DialogInterface.OnClickListener() { - public void onClick(DialogInterface dialog,int id) { - dialog.cancel(); - if(critical) - finish(); - } - }); - // create alert dialog - AlertDialog alertDialog = alertDialogBuilder.create(); - alertDialog.show(); - } - - public AlertDialog ShowComfirmationDialog() { - return new AlertDialog.Builder(this) - .setMessage(getResources().getString(R.string.AreYouSure)) - .setCancelable(false) - - .setPositiveButton(R.string.Ok, new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialogInterface, int i) { - JSONObject l = null; - try { - -/* if(!getLastUpdateDate().equals("")){ - //String date = getLastUpdateDate().substring(0, getLastUpdateDate().indexOf(".")); - object.put("last_update_date",getLastUpdateDate()); - }*/ - JSONObject object1 = new JSONObject(); - SimpleDateFormat formatter = new SimpleDateFormat("yyyy/MM/dd"); - String dateS = formatter.format(new Date(0)); - object1.put("last_update_date",dateS); - - DownLoadDiagnosesServicesItemsAgain(object1, sql); - - } catch (Exception e) { - e.printStackTrace(); - } - } - }) - .setNegativeButton(R.string.Cancel, - new DialogInterface.OnClickListener() { - public void onClick(DialogInterface dialog,int id) { - dialog.cancel(); - } - }) - .show(); + public void CriticalErrorDialogBox(final String message) { + showDialog(message, (dialog, i) -> finish()); } public AlertDialog DownloadMasterDialog() { - return new AlertDialog.Builder(this) - .setMessage(getResources().getString(R.string.getMasterData)) - .setCancelable(false) - - .setPositiveButton(R.string.Ok, new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialogInterface, int i) { - if(getControls()){ - try{ - if(global.getOfficerCode() == null || global.getOfficerCode().equals("")){ - if(!sql.getAdjustibility("ClaimAdministrator").equals("N")){ - ClaimAdminDialogBox(); - } + return showDialog(getResources().getString(R.string.getMasterData), + (dialogInterface, i) -> { + if (getControls()) { + try { + if (global.getOfficerCode() == null || global.getOfficerCode().equals("")) { + if (!sql.getAdjustibility("ClaimAdministrator").equals("N")) { + ClaimAdminDialogBox(); } - }catch (Exception e){ - e.printStackTrace(); - DownloadMasterDialog(); } - }else{ + } catch (Exception e) { + e.printStackTrace(); DownloadMasterDialog(); } + } else { + DownloadMasterDialog(); } - }) - .setNegativeButton(R.string.Cancel, - new DialogInterface.OnClickListener() { - public void onClick(DialogInterface dialog,int id) { - dialog.cancel(); - finish(); - } - }) - .show(); + }, + (dialog, id) -> finish() + ); } - private void CheckForUpdates(){ - if(global.isNetworkAvailable()){ - if(global.isNewVersionAvailable(VersionField,getApplicationContext().getPackageName())){ + private void checkForUpdates() { + if (global.isNetworkAvailable()) { + if (global.isNewVersionAvailable(VersionField, getApplicationContext().getPackageName())) { //Show notification bar - mNotificationManager = (NotificationManager)getSystemService(NOTIFICATION_SERVICE); + mNotificationManager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE); - //final Notification NotificationDetails = new Notification(R.drawable.ic_launcher, getResources().getString(R.string.NotificationAlertText), System.currentTimeMillis()); - //NotificationDetails.flags = Notification.FLAG_SHOW_LIGHTS | Notification.FLAG_AUTO_CANCEL | Notification.DEFAULT_SOUND | Notification.DEFAULT_VIBRATE; - //NotificationDetails.setLatestEventInfo(context, ContentTitle, ContentText, intent); - //mNotificationManager.notify(SIMPLE_NOTFICATION_ID, NotificationDetails); - Context context = getApplicationContext(); CharSequence ContentTitle = getResources().getString(R.string.ContentTitle); CharSequence ContentText = getResources().getString(R.string.ContentText); Intent NotifyIntent = new Intent(this, MainActivity.class); - PendingIntent intent = PendingIntent.getActivity(this, 0, NotifyIntent,PendingIntent.FLAG_CANCEL_CURRENT); + PendingIntent intent = PendingIntent.getActivity(this, 0, NotifyIntent, PendingIntent.FLAG_CANCEL_CURRENT); NotificationCompat.Builder builder = new NotificationCompat.Builder(this, "Notification1"); builder.setAutoCancel(false); builder.setContentTitle(ContentTitle); @@ -764,189 +374,73 @@ private void CheckForUpdates(){ builder.setSmallIcon(R.mipmap.ic_launcher_round); builder.setContentIntent(intent); builder.setOngoing(false); -/* String s = "ring"; - int res_sound_id = context.getResources().getIdentifier(s, "raw", context.getPackageName()); - Uri u = Uri.parse("android.resource://" + context.getPackageName() + "/" + res_sound_id); - builder.setSound(u);*/ - try{ + try { mNotificationManager.notify(SIMPLE_NOTIFICATION_ID, builder.build()); - }catch (Exception e){ + } catch (Exception e) { e.printStackTrace(); } - vibrator = (Vibrator)getSystemService(VIBRATOR_SERVICE); + vibrator = (Vibrator) getSystemService(VIBRATOR_SERVICE); vibrator.vibrate(500); } } } - public void makeTrashFolder(){ - - File DirRejected = new File(global.getSubdirectory("AcceptedClaims")); - File DirAccepted = new File(global.getSubdirectory("RejectedClaims")); - File DirTrash = new File(global.getSubdirectory("Trash")); - - DirAccepted.mkdir(); - DirRejected.mkdir(); - DirTrash.mkdir(); - } - public void refreshCont(){ - int countAccepted = 0; - int countRejected = 0; - int count_pending = 0; - int count_trash = 0; - - if(AcceptedFolder != null && RejectedFolder != null && TrashFolder != null) { - File acceptedClaims = new File(AcceptedFolder); - File rejectedClaims = new File(RejectedFolder); - File pendingFolder = new File(PendingFolder); - File trashFolder = new File(TrashFolder); - - if (acceptedClaims.listFiles() != null) { - for (int i = 0; i < acceptedClaims.listFiles().length; i++) { - String fname = acceptedClaims.listFiles()[i].getName(); - String str; - try { - str = fname.substring(0, 6); - } catch (StringIndexOutOfBoundsException e) { - continue; - } - if (str.equals("Claim_")) { - countAccepted++; - } - } - } else { - countAccepted = 0; - } - - if (rejectedClaims.listFiles() != null) { - for (int i = 0; i < rejectedClaims.listFiles().length; i++) { - String fname = rejectedClaims.listFiles()[i].getName(); - String str; - try { - str = fname.substring(0, 6); - } catch (StringIndexOutOfBoundsException e) { - continue; - } - if (str.equals("Claim_")) { - countRejected++; - } - } - } else { - countRejected = 0; - } - - if (pendingFolder.listFiles() != null) { - for (int i = 0; i < pendingFolder.listFiles().length; i++) { - String fname = pendingFolder.listFiles()[i].getName(); - String str; - try { - str = fname.substring(0, 6); - } catch (StringIndexOutOfBoundsException e) { - continue; - } - if (str.equals("Claim_")) { - count_pending++; - } - } - } else { - count_pending = 0; - } - - if (trashFolder.listFiles() != null) { - for (int i = 0; i < trashFolder.listFiles().length; i++) { - String fname = trashFolder.listFiles()[i].getName(); - String str; - try { - str = fname.substring(0, 6); - } catch (StringIndexOutOfBoundsException e) { - continue; - } - if (str.equals("Claim_")) { - count_trash++; - } - } - } else { - count_trash = 0; - } - } - int total_pending = count_pending; - - accepted_count.setText(String.valueOf(countAccepted)); - rejected_count.setText(String.valueOf(countRejected)); - pending_count.setText(String.valueOf(total_pending)); - + public void refreshCount() { + SynchronizeService.getClaimCount(this); } @Override - public void onRequestPermissionsResult(int requestCode, String permissions[], int[] grantResults) { - switch (requestCode) { - case 1: { - // If request is cancelled, the result arrays are empty. - if (grantResults.length > 0 && grantResults[2] == PackageManager.PERMISSION_GRANTED) { - // permission was granted, yay! Do the - // contacts-related task you need to do. - Path = global.getMainDirectory(); - AcceptedFolder = global.getSubdirectory("AcceptedClaims"); - RejectedFolder = global.getSubdirectory("RejectedClaims"); - PendingFolder = global.getMainDirectory(); - TrashFolder = global.getSubdirectory("Trash"); - createFolders(); - makeTrashFolder(); - - //check if databases exist in phone - File database = new File(global.getSubdirectory("Database") + "/" + "ImisData.db3"); - File databaseMapping = new File(global.getSubdirectory("Database") + "/" + "Mapping.db3"); - //if one of database not exist - then init it and fill master data etc - if (!database.exists() || !databaseMapping.exists()) { - sql = new SQLHandler(this); - sql.onOpen(db); - sql.createTables(); - initializeDb3File(sql); - } - else{ - //if databases exist: show only claim admin dialog box without init data - sql = new SQLHandler(this); - sql.onOpen(db); - ClaimAdminDialogBox(); - } - refreshCont(); - + public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) { + if (requestCode == 1) {// If request is cancelled, the result arrays are empty. + if (grantResults.length > 0 && grantResults[2] == PackageManager.PERMISSION_GRANTED) { + createFolders(); + + //check if databases exist in phone + File database = new File(global.getSubdirectory("Database") + "/" + "ImisData.db3"); + File databaseMapping = new File(global.getSubdirectory("Database") + "/" + "Mapping.db3"); + //if one of database not exist - then init it and fill master data etc + if (!database.exists() || !databaseMapping.exists()) { + sql = new SQLHandler(this); + sql.onOpen(db); + sql.createTables(); + initializeDb3File(sql); } else { - // permission denied, boo! Disable the - // functionality that depends on this permission. - //Toast.makeText(MainActivity.this, MainActivity.this.getResources().getString(R.string.permission_denied), Toast.LENGTH_SHORT).show(); + //if databases exist: show only claim admin dialog box without init data + sql = new SQLHandler(this); + sql.onOpen(db); + ClaimAdminDialogBox(); } - return; - } + refreshCount(); - // other 'case' lines to check for other - // permissions this app might request + } else { + // permission denied + } } - } //Ask for permission - public void requestPermision(){ + public void requestPermissions() { int PERMISSION_ALL = 1; String[] PERMISSIONS = {Manifest.permission.ACCESS_COARSE_LOCATION, Manifest.permission.VIBRATE, Manifest.permission.READ_EXTERNAL_STORAGE, Manifest.permission.WRITE_EXTERNAL_STORAGE, Manifest.permission.INTERNET, Manifest.permission.CAMERA, Manifest.permission.ACCESS_NETWORK_STATE, Manifest.permission.ACCESS_WIFI_STATE, Manifest.permission.ACCESS_FINE_LOCATION, Manifest.permission.CHANGE_WIFI_STATE}; - if(!hasPermissions(this, PERMISSIONS)){ + if (!hasPermissions(this, PERMISSIONS)) { ActivityCompat.requestPermissions(this, PERMISSIONS, PERMISSION_ALL); } // Ask for "Manage External Storage" permission, required in Android 11 if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) { String[] Android11Permissions = {Manifest.permission.MANAGE_EXTERNAL_STORAGE}; - if(!hasPermissions(this, Android11Permissions)){ + if (!hasPermissions(this, Android11Permissions)) { ActivityCompat.requestPermissions(this, Android11Permissions, PERMISSION_ALL); - if(!Environment.isExternalStorageManager()) { + if (!Environment.isExternalStorageManager()) { Intent intent = new Intent(ACTION_MANAGE_ALL_FILES_ACCESS_PERMISSION); startActivity(intent); } } } } + public static boolean hasPermissions(Context context, String... permissions) { if (context != null && permissions != null) { for (String permission : permissions) { @@ -957,6 +451,7 @@ public static boolean hasPermissions(Context context, String... permissions) { } return true; } + public boolean checkDataBase() { SQLiteDatabase checkDB = null; try { @@ -969,22 +464,21 @@ public boolean checkDataBase() { return true; } - public boolean getControls(){ - if(global.isNetworkAvailable()){ + public boolean getControls() { + if (global.isNetworkAvailable()) { String progress_message = getResources().getString(R.string.getControls); pd = ProgressDialog.show(this, getResources().getString(R.string.initializing), progress_message); - Thread thread = new Thread(){ + Thread thread = new Thread() { public void run() { String controls = null; String error_occurred = null; String error_message = null; - String functionName = "Claims/Controls"; + String functionName = "claim/Claims/Controls"; try { String content = toRestApi.getFromRestApi(functionName); - JSONObject ob = null; - JSONObject obContent = null; + JSONObject ob; ob = new JSONObject(content); error_occurred = ob.getString("error_occured"); @@ -992,150 +486,104 @@ public void run() { controls = ob.getString("controls"); sql.ClearAll("tblControls"); //Insert Diagnosese - JSONArray arrControls = null; - JSONObject objControls = null; + JSONArray arrControls; + JSONObject objControls; arrControls = new JSONArray(controls); for (int i = 0; i < arrControls.length(); i++) { objControls = arrControls.getJSONObject(i); - sql.InsertControls(objControls.getString("fieldName").toString(), objControls.getString("adjustibility")); + sql.InsertControls(objControls.getString("fieldName"), objControls.getString("adjustibility")); } - runOnUiThread(new Runnable() { - public void run() { - pd.dismiss(); - getClaimAdmins(); - } + runOnUiThread(() -> { + pd.dismiss(); + getClaimAdmins(); }); } else { - runOnUiThread(new Runnable() { - public void run() { - pd.dismiss(); - } - }); + runOnUiThread(() -> pd.dismiss()); error_message = ob.getString("error_message"); ErrorDialogBox(error_message); } - } catch (JSONException e ) { - e.printStackTrace(); - runOnUiThread(new Runnable() { - public void run() { - pd.dismiss(); - } - }); - - } catch ( IOException e ) { + } catch (JSONException e) { e.printStackTrace(); - runOnUiThread(new Runnable() { - public void run() { - pd.dismiss(); - } - }); + runOnUiThread(() -> pd.dismiss()); } } }; thread.start(); - }else{ + } else { ErrorDialogBox(getResources().getString(R.string.CheckInternet)); return false; } return true; } - public boolean getClaimAdmins(){ - if(global.isNetworkAvailable()){ + public boolean getClaimAdmins() { + if (global.isNetworkAvailable()) { String progress_message = getResources().getString(R.string.application); pd = ProgressDialog.show(this, getResources().getString(R.string.initializing), progress_message); - Thread thread = new Thread(){ + Thread thread = new Thread() { public void run() { - String controls = null; - String error_occurred = null; - String error_message = null; + String controls; - String functionName = "Claims/GetClaimAdmins"; + String functionName = "claim/Claims/GetClaimAdmins"; try { String content = toRestApi.getFromRestApi(functionName); - JSONObject ob = null; - JSONObject obContent = null; + JSONObject ob; ob = new JSONObject(content); - //error_occurred = ob.getString("error_occured"); - //if(error_occurred.equals("true")){ - controls = ob.getString("claim_admins"); sql.ClearAll("tblClaimAdmins"); //Insert Diagnosese - JSONArray arrControls = null; - JSONObject objControls = null; + JSONArray arrControls; + JSONObject objControls; arrControls = new JSONArray(controls); for (int i = 0; i < arrControls.length(); i++) { objControls = arrControls.getJSONObject(i); - String lastName = objControls.getString("lastName").toString(); - String otherNames = objControls.getString("otherNames").toString(); + String lastName = objControls.getString("lastName"); + String otherNames = objControls.getString("otherNames"); String name = lastName + " " + otherNames; sql.InsertClaimAdmins(objControls.getString("claimAdminCode"), name); } - runOnUiThread(new Runnable() { - public void run() { - pd.dismiss(); - Toast.makeText(MainActivity.this, getResources().getString(R.string.initializing_complete), Toast.LENGTH_LONG).show(); - } + runOnUiThread(() -> { + pd.dismiss(); + showToast(getResources().getString(R.string.initializing_complete)); }); - /*}else { - runOnUiThread(new Runnable() { - public void run() {pd.dismiss(); - } - }); - error_message = ob.getString("error_message"); - ErrorDialogBox(error_message); - }*/ } catch (JSONException e) { e.printStackTrace(); - runOnUiThread(new Runnable() { - public void run() { - pd.dismiss(); - } - }); - - } catch ( IOException e) { - e.printStackTrace(); - runOnUiThread(new Runnable() { - public void run() { - pd.dismiss(); - } - }); + runOnUiThread(() -> pd.dismiss()); } } }; thread.start(); - }else{ + } else { ErrorDialogBox(getResources().getString(R.string.CheckInternet)); return false; } return true; } - public void validateClaimAdminCode(final String ClaimCode){ - if(ClaimCode.equals("")){ + public void validateClaimAdminCode(final String ClaimCode) { + if (ClaimCode.equals("")) { Toast.makeText(getBaseContext(), R.string.MissingClaimCode, Toast.LENGTH_LONG).show(); ClaimAdminDialogBox(); - }else{ + } else { String ClaimName = sql.getClaimAdmin(ClaimCode); - if(ClaimName.equals("")){ - Toast.makeText(MainActivity.this,getResources().getString(R.string.invalid_code),Toast.LENGTH_LONG).show(); + if (ClaimName.equals("")) { + Toast.makeText(MainActivity.this, getResources().getString(R.string.invalid_code), Toast.LENGTH_LONG).show(); ClaimAdminDialogBox(); - }else{ - if(!sql.getAdjustibility("ClaimAdministrator").equals("N")){ + } else { + if (!sql.getAdjustibility("ClaimAdministrator").equals("N")) { global.setOfficerCode(ClaimCode); global.setOfficerName(ClaimName); AdminName = (TextView) findViewById(R.id.AdminName); AdminName.setText(global.getOfficeName()); sql = new SQLHandler(MainActivity.this); Cursor c = sql.getMapping("I"); - if(c.getCount() == 0){ + if (c.getCount() == 0) { try { /* if(!getLastUpdateDate().equals("")){ //String date = getLastUpdateDate().substring(0, getLastUpdateDate().indexOf(".")); @@ -1146,7 +594,7 @@ public void validateClaimAdminCode(final String ClaimCode){ JSONObject object = new JSONObject(); SimpleDateFormat formatter = new SimpleDateFormat("yyyy/MM/dd"); String dateS = formatter.format(new Date(0)); - object.put("last_update_date",dateS); + object.put("last_update_date", dateS); try { DownLoadDiagnosesServicesItems(object, sql); } catch (IOException e) { @@ -1156,10 +604,10 @@ public void validateClaimAdminCode(final String ClaimCode){ e.printStackTrace(); } } - }else{ + } else { sql = new SQLHandler(MainActivity.this); Cursor c = sql.getMapping("I"); - if(c.getCount() == 0){ + if (c.getCount() == 0) { try { /* if(!getLastUpdateDate().equals("")){ //String date = getLastUpdateDate().substring(0, getLastUpdateDate().indexOf(".")); @@ -1170,7 +618,7 @@ public void validateClaimAdminCode(final String ClaimCode){ JSONObject object = new JSONObject(); SimpleDateFormat formatter = new SimpleDateFormat("yyyy/MM/dd"); String dateS = formatter.format(new Date(0)); - object.put("last_update_date",dateS); + object.put("last_update_date", dateS); try { DownLoadDiagnosesServicesItems(object, sql); } catch (IOException e) { @@ -1184,14 +632,15 @@ public void validateClaimAdminCode(final String ClaimCode){ } } } + public void DownLoadDiagnosesServicesItems(final JSONObject object, final SQLHandler sql) throws IOException { final String[] content = new String[1]; final HttpResponse[] resp = {null}; - if(global.isNetworkAvailable()){ - String progress_message = getResources().getString(R.string.Diagnoses)+", "+getResources().getString(R.string.Services)+", "+getResources().getString(R.string.Items)+"..."; + if (global.isNetworkAvailable()) { + String progress_message = getResources().getString(R.string.Diagnoses) + ", " + getResources().getString(R.string.Services) + ", " + getResources().getString(R.string.Items) + "..."; pd = ProgressDialog.show(this, getResources().getString(R.string.Checking_For_Updates), progress_message); - Thread thread = new Thread(){ + Thread thread = new Thread() { public void run() { String diagnoses = null; String services = null; @@ -1200,10 +649,10 @@ public void run() { String error_occurred = null; String error_message = null; - String functionName = "GetDiagnosesServicesItems"; + String functionName = "claim/GetDiagnosesServicesItems"; try { - HttpResponse response = toRestApi.postToRestApi(object,functionName); + HttpResponse response = toRestApi.postToRestApi(object, functionName); resp[0] = response; HttpEntity respEntity = response.getEntity(); if (respEntity != null) { @@ -1217,7 +666,7 @@ public void run() { JSONObject ob = null; try { ob = new JSONObject(content[0]); - if(String.valueOf(response.getStatusLine().getStatusCode()).equals("200")){ + if (String.valueOf(response.getStatusLine().getStatusCode()).equals("200")) { diagnoses = ob.getString("diagnoses"); services = ob.getString("services"); items = ob.getString("items"); @@ -1231,94 +680,77 @@ public void run() { JSONArray arrDiagnoses = null; JSONObject objDiagnoses = null; arrDiagnoses = new JSONArray(diagnoses); - for(int i=0; i < arrDiagnoses.length(); i++){ + for (int i = 0; i < arrDiagnoses.length(); i++) { objDiagnoses = arrDiagnoses.getJSONObject(i); - sql.InsertReferences(objDiagnoses.getString("code").toString(),objDiagnoses.getString("name").toString(),"D",""); + sql.InsertReferences(objDiagnoses.getString("code"), objDiagnoses.getString("name"), "D", ""); } //Insert Services JSONArray arrServices = null; JSONObject objServices = null; arrServices = new JSONArray(services); - for(int i=0; i < arrServices.length(); i++){ + for (int i = 0; i < arrServices.length(); i++) { objServices = arrServices.getJSONObject(i); - sql.InsertReferences(objServices.getString("code").toString(),objServices.getString("name").toString(),"S",objServices.getString("price").toString()); - sql.InsertMapping(objServices.getString("code").toString(),objServices.getString("name").toString(),"S"); + sql.InsertReferences(objServices.getString("code"), objServices.getString("name"), "S", objServices.getString("price")); + sql.InsertMapping(objServices.getString("code"), objServices.getString("name"), "S"); } //Insert Items JSONArray arrItems = null; JSONObject objItems = null; arrItems = new JSONArray(items); - for(int i=0; i < arrItems.length(); i++){ + for (int i = 0; i < arrItems.length(); i++) { objItems = arrItems.getJSONObject(i); - sql.InsertReferences(objItems.getString("code").toString(),objItems.getString("name").toString(),"I",objItems.getString("price").toString()); - sql.InsertMapping(objItems.getString("code").toString(),objItems.getString("name").toString(),"I"); + sql.InsertReferences(objItems.getString("code"), objItems.getString("name"), "I", objItems.getString("price")); + sql.InsertMapping(objItems.getString("code"), objItems.getString("name"), "I"); } - runOnUiThread(new Runnable() { - public void run() { - pd.dismiss(); - Toast.makeText(MainActivity.this,getResources().getString(R.string.installed_updates),Toast.LENGTH_LONG).show(); - } + runOnUiThread(() -> { + pd.dismiss(); + Toast.makeText(MainActivity.this, getResources().getString(R.string.installed_updates), Toast.LENGTH_LONG).show(); }); - }else { + } else { error_occurred = ob.getString("error_occured"); - if(error_occurred.equals("true")){ + if (error_occurred.equals("true")) { error_message = ob.getString("error_message"); final String finalError_message = error_message; - runOnUiThread(new Runnable() { - public void run() { - pd.dismiss(); - Toast.makeText(MainActivity.this,finalError_message,Toast.LENGTH_LONG).show(); - ClaimAdminDialogBox(); - } + runOnUiThread(() -> { + pd.dismiss(); + Toast.makeText(MainActivity.this, finalError_message, Toast.LENGTH_LONG).show(); + ClaimAdminDialogBox(); }); - }else { - runOnUiThread(new Runnable() { - public void run() { - pd.dismiss(); - Toast.makeText(MainActivity.this,getResources().getString(R.string.SomethingWentWrongServer),Toast.LENGTH_LONG).show(); - ClaimAdminDialogBox(); - } + } else { + runOnUiThread(() -> { + pd.dismiss(); + Toast.makeText(MainActivity.this, getResources().getString(R.string.SomethingWentWrongServer), Toast.LENGTH_LONG).show(); + ClaimAdminDialogBox(); }); - } - } - } catch (JSONException e) { e.printStackTrace(); - runOnUiThread(new Runnable() { - public void run() { - pd.dismiss(); - ClaimAdminDialogBox(); - } + runOnUiThread(() -> { + pd.dismiss(); + ClaimAdminDialogBox(); }); - Toast.makeText(MainActivity.this,String.valueOf(e),Toast.LENGTH_LONG).show(); + Toast.makeText(MainActivity.this, String.valueOf(e), Toast.LENGTH_LONG).show(); } - }catch (Exception e){ - runOnUiThread(new Runnable() { - public void run() { - pd.dismiss(); - Toast.makeText(MainActivity.this,resp[0].getStatusLine().getStatusCode()+"-"+getResources().getString(R.string.SomethingWentWrongServer),Toast.LENGTH_LONG).show(); - ClaimAdminDialogBox(); - } + } catch (Exception e) { + runOnUiThread(() -> { + pd.dismiss(); + Toast.makeText(MainActivity.this, resp[0].getStatusLine().getStatusCode() + "-" + getResources().getString(R.string.SomethingWentWrongServer), Toast.LENGTH_LONG).show(); + ClaimAdminDialogBox(); }); } } }; thread.start(); - }else{ - runOnUiThread(new Runnable() { - public void run() { - pd.dismiss(); - } - }); + } else { + runOnUiThread(() -> pd.dismiss()); ClaimAdminDialogBox(); ErrorDialogBox(getResources().getString(R.string.CheckInternet)); } @@ -1328,10 +760,10 @@ public void DownLoadDiagnosesServicesItemsAgain(final JSONObject object, final S final String[] content = new String[1]; final HttpResponse[] resp = {null}; - if(global.isNetworkAvailable()){ + if (global.isNetworkAvailable()) { String progress_message = getResources().getString(R.string.refresh_mapping); pd = ProgressDialog.show(this, getResources().getString(R.string.Checking_For_Updates), progress_message); - Thread thread = new Thread(){ + Thread thread = new Thread() { public void run() { String diagnoses = null; String services = null; @@ -1340,24 +772,23 @@ public void run() { String error_occurred = null; String error_message = null; - String functionName = "GetDiagnosesServicesItems"; + String functionName = "claim/GetDiagnosesServicesItems"; try { - HttpResponse response = toRestApi.postToRestApi(object,functionName); + HttpResponse response = toRestApi.postToRestApi(object, functionName); resp[0] = response; HttpEntity respEntity = response.getEntity(); if (respEntity != null) { - final String[] code = {null}; // EntityUtils to get the response content content[0] = EntityUtils.toString(respEntity); } - JSONObject ob = null; + JSONObject ob; try { ob = new JSONObject(content[0]); - if(String.valueOf(response.getStatusLine().getStatusCode()).equals("200")){ + if (String.valueOf(response.getStatusLine().getStatusCode()).equals("200")) { diagnoses = ob.getString("diagnoses"); services = ob.getString("services"); items = ob.getString("items"); @@ -1368,72 +799,64 @@ public void run() { sql.ClearMapping("S"); sql.ClearMapping("I"); //Insert Diagnosese - JSONArray arrDiagnoses = null; - JSONObject objDiagnoses = null; + JSONArray arrDiagnoses; + JSONObject objDiagnoses; arrDiagnoses = new JSONArray(diagnoses); - for(int i=0; i < arrDiagnoses.length(); i++){ + for (int i = 0; i < arrDiagnoses.length(); i++) { objDiagnoses = arrDiagnoses.getJSONObject(i); - sql.InsertReferences(objDiagnoses.getString("code").toString(),objDiagnoses.getString("name").toString(),"D",""); + sql.InsertReferences(objDiagnoses.getString("code"), objDiagnoses.getString("name"), "D", ""); } //Insert Services - JSONArray arrServices = null; - JSONObject objServices = null; + JSONArray arrServices; + JSONObject objServices; arrServices = new JSONArray(services); - for(int i=0; i < arrServices.length(); i++){ + for (int i = 0; i < arrServices.length(); i++) { objServices = arrServices.getJSONObject(i); - sql.InsertReferences(objServices.getString("code").toString(),objServices.getString("name").toString(),"S",objServices.getString("price").toString()); - sql.InsertMapping(objServices.getString("code").toString(),objServices.getString("name").toString(),"S"); + sql.InsertReferences(objServices.getString("code"), objServices.getString("name"), "S", objServices.getString("price")); + sql.InsertMapping(objServices.getString("code"), objServices.getString("name"), "S"); } //Insert Items - JSONArray arrItems = null; - JSONObject objItems = null; + JSONArray arrItems; + JSONObject objItems; arrItems = new JSONArray(items); - for(int i=0; i < arrItems.length(); i++){ + for (int i = 0; i < arrItems.length(); i++) { objItems = arrItems.getJSONObject(i); - sql.InsertReferences(objItems.getString("code").toString(),objItems.getString("name").toString(),"I",objItems.getString("price").toString()); - sql.InsertMapping(objItems.getString("code").toString(),objItems.getString("name").toString(),"I"); + sql.InsertReferences(objItems.getString("code"), objItems.getString("name"), "I", objItems.getString("price")); + sql.InsertMapping(objItems.getString("code"), objItems.getString("name"), "I"); } - runOnUiThread(new Runnable() { - public void run() { - pd.dismiss(); - Toast.makeText(MainActivity.this,getResources().getString(R.string.installed_updates),Toast.LENGTH_LONG).show(); - - JSONObject object = new JSONObject(); - try { - object.put("claim_administrator_code",global.getOfficerCode()); - DownLoadServicesItemsPriceList(object, sql); - } catch (JSONException e) { - e.printStackTrace(); - } catch (IOException e) { - e.printStackTrace(); - } - + runOnUiThread(() -> { + pd.dismiss(); + Toast.makeText(MainActivity.this, getResources().getString(R.string.installed_updates), Toast.LENGTH_LONG).show(); + + JSONObject object1 = new JSONObject(); + try { + object1.put("claim_administrator_code", global.getOfficerCode()); + DownLoadServicesItemsPriceList(object1, sql); + } catch (JSONException | IOException e) { + e.printStackTrace(); } + }); - }else { + } else { error_occurred = ob.getString("error_occured"); - if(error_occurred.equals("true")){ + if (error_occurred.equals("true")) { error_message = ob.getString("error_message"); final String finalError_message = error_message; - runOnUiThread(new Runnable() { - public void run() { - pd.dismiss(); - Toast.makeText(MainActivity.this,finalError_message,Toast.LENGTH_LONG).show(); - ClaimAdminDialogBox(); - } + runOnUiThread(() -> { + pd.dismiss(); + Toast.makeText(MainActivity.this, finalError_message, Toast.LENGTH_LONG).show(); + ClaimAdminDialogBox(); }); - }else { - runOnUiThread(new Runnable() { - public void run() { - pd.dismiss(); - Toast.makeText(MainActivity.this,getResources().getString(R.string.SomethingWentWrongServer),Toast.LENGTH_LONG).show(); - ClaimAdminDialogBox(); - } + } else { + runOnUiThread(() -> { + pd.dismiss(); + Toast.makeText(MainActivity.this, getResources().getString(R.string.SomethingWentWrongServer), Toast.LENGTH_LONG).show(); + ClaimAdminDialogBox(); }); } @@ -1442,43 +865,35 @@ public void run() { } catch (JSONException e) { e.printStackTrace(); - runOnUiThread(new Runnable() { - public void run() { - pd.dismiss(); - ClaimAdminDialogBox(); - } + runOnUiThread(() -> { + pd.dismiss(); + ClaimAdminDialogBox(); }); - Toast.makeText(MainActivity.this,String.valueOf(e),Toast.LENGTH_LONG).show(); + Toast.makeText(MainActivity.this, String.valueOf(e), Toast.LENGTH_LONG).show(); } - }catch (Exception e){ - runOnUiThread(new Runnable() { - public void run() { - pd.dismiss(); - Toast.makeText(MainActivity.this,resp[0].getStatusLine().getStatusCode()+"-"+getResources().getString(R.string.SomethingWentWrongServer),Toast.LENGTH_LONG).show(); - ClaimAdminDialogBox(); - } + } catch (Exception e) { + runOnUiThread(() -> { + pd.dismiss(); + Toast.makeText(MainActivity.this, resp[0].getStatusLine().getStatusCode() + "-" + getResources().getString(R.string.SomethingWentWrongServer), Toast.LENGTH_LONG).show(); + ClaimAdminDialogBox(); }); } } }; thread.start(); - }else{ - runOnUiThread(new Runnable() { - public void run() { - pd.dismiss(); - } - }); + } else { + runOnUiThread(() -> pd.dismiss()); //ClaimAdminDialogBox(); ErrorDialogBox(getResources().getString(R.string.CheckInternet)); } } - private void DownLoadServicesItemsPriceList(final JSONObject object, final SQLHandler sql) throws IOException { + private void DownLoadServicesItemsPriceList(final JSONObject object, final SQLHandler sql) throws IOException { final HttpResponse[] resp = {null}; - if(global.isNetworkAvailable()){ - String progress_message = getResources().getString(R.string.Services)+", "+getResources().getString(R.string.Items)+"..."; + if (global.isNetworkAvailable()) { + String progress_message = getResources().getString(R.string.Services) + ", " + getResources().getString(R.string.Items) + "..."; pd = ProgressDialog.show(this, getResources().getString(R.string.mapping), progress_message); Thread thread = new Thread() { public void run() { @@ -1490,9 +905,9 @@ public void run() { String last_update_date = null; String content = null; - String functionName = "getpaymentlists"; - try{ - HttpResponse response = toRestApi.postToRestApiToken(object,functionName); + String functionName = "claim/getpaymentlists"; + try { + HttpResponse response = toRestApi.postToRestApiToken(object, functionName); resp[0] = response; HttpEntity respEntity = response.getEntity(); if (respEntity != null) { @@ -1509,7 +924,7 @@ public void run() { JSONObject ob = null; try { ob = new JSONObject(content); - if(String.valueOf(code).equals("200")){ + if (String.valueOf(code).equals("200")) { services = ob.getString("pricelist_services"); items = ob.getString("pricelist_items"); last_update_date = ob.getString("update_since_last"); @@ -1526,7 +941,7 @@ public void run() { for (int i = 0; i < arrServices.length(); i++) { objServices = arrServices.getJSONObject(i); //sql.InsertReferences(objServices.getString("code").toString(), objServices.getString("name").toString(), "S", objServices.getString("price").toString()); - sql.InsertMapping(objServices.getString("code").toString(),objServices.getString("name").toString(),"S"); + sql.InsertMapping(objServices.getString("code"), objServices.getString("name"), "S"); } //Insert Items @@ -1536,100 +951,52 @@ public void run() { for (int i = 0; i < arrItems.length(); i++) { objItems = arrItems.getJSONObject(i); //sql.InsertReferences(objItems.getString("code").toString(), objItems.getString("name").toString(), "I", objItems.getString("price").toString()); - sql.InsertMapping(objItems.getString("code").toString(),objItems.getString("name").toString(),"I"); + sql.InsertMapping(objItems.getString("code"), objItems.getString("name"), "I"); } - runOnUiThread(new Runnable() { - public void run() { - pd.dismiss(); - Toast.makeText(MainActivity.this,getResources().getString(R.string.MapSuccessful),Toast.LENGTH_LONG).show(); - } + runOnUiThread(() -> { + pd.dismiss(); + Toast.makeText(MainActivity.this, getResources().getString(R.string.MapSuccessful), Toast.LENGTH_LONG).show(); }); - }else{ + } else { error_occurred = ob.getString("error_occured"); - if(error_occurred.equals("true")){ - if(code >= 400){ - runOnUiThread(new Runnable() { - public void run() { - pd.dismiss(); - LoginDialogBox("refresh_map"); - } + if (error_occurred.equals("true")) { + if (code >= 400) { + runOnUiThread(() -> { + pd.dismiss(); + confirmRefreshMap(); }); - }else{ + } else { error_message = ob.getString("error_message"); final String finalError_message = error_message; - runOnUiThread(new Runnable() { - public void run() { - pd.dismiss(); - } - }); + runOnUiThread(() -> pd.dismiss()); ErrorDialogBox(finalError_message); } } } } catch (JSONException e) { - runOnUiThread(new Runnable() { - public void run() {pd.dismiss();}}); - Toast.makeText(MainActivity.this,String.valueOf(e),Toast.LENGTH_LONG).show(); + runOnUiThread(() -> pd.dismiss()); + Toast.makeText(MainActivity.this, String.valueOf(e), Toast.LENGTH_LONG).show(); } - }catch (Exception e){ - runOnUiThread(new Runnable() { - public void run() { - pd.dismiss(); - Toast.makeText(MainActivity.this,resp[0].getStatusLine().getStatusCode() +"-"+getResources().getString(R.string.AccessDenied),Toast.LENGTH_LONG).show(); - } + } catch (Exception e) { + runOnUiThread(() -> { + pd.dismiss(); + Toast.makeText(MainActivity.this, resp[0].getStatusLine().getStatusCode() + "-" + getResources().getString(R.string.AccessDenied), Toast.LENGTH_LONG).show(); }); } - } }; thread.start(); - }else{ - runOnUiThread(new Runnable() { - public void run() { - pd.dismiss(); - } - }); + } else { + runOnUiThread(() -> pd.dismiss()); ErrorDialogBox(getResources().getString(R.string.CheckInternet)); } } - public void saveLastUpdateDate(String last_update_date) { - if (!Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) { - //handle case of no SDCARD present - } else { - String dir = global.getSubdirectory("Authentications"); - //create folder - File folder = new File(dir); //folder name - folder.mkdirs(); - - //create file - File file = new File(dir, "last_update_date.txt"); - try { - file.createNewFile(); - FileOutputStream fOut = new FileOutputStream(file); - OutputStreamWriter myOutWriter = new OutputStreamWriter(fOut); - myOutWriter.append(last_update_date); - myOutWriter.close(); - fOut.close(); - - } catch (IOException e) { - e.printStackTrace(); - } - } - } - public String getLastUpdateDate(){ - String aBuffer = ""; - try { + + public void saveLastUpdateDate(String lastUpdateDate) { + if (global.getSDCardStatus().equals(Environment.MEDIA_MOUNTED)) { String dir = global.getSubdirectory("Authentications"); - File myFile = new File("/"+dir+"/last_update_date.txt"); - FileInputStream fIn = new FileInputStream(myFile); - BufferedReader myReader = new BufferedReader(new InputStreamReader(fIn)); - aBuffer = myReader.readLine(); - myReader.close(); - } catch (IOException e) { - e.printStackTrace(); + global.writeText(dir, "last_update_date.txt", lastUpdateDate); } - return aBuffer; } - -} +} \ No newline at end of file diff --git a/claimManagement/src/main/java/org/openimis/imisclaims/ReviewFragment.java b/claimManagement/src/main/java/org/openimis/imisclaims/ReviewFragment.java index e33ba712..5173321f 100644 --- a/claimManagement/src/main/java/org/openimis/imisclaims/ReviewFragment.java +++ b/claimManagement/src/main/java/org/openimis/imisclaims/ReviewFragment.java @@ -101,7 +101,7 @@ public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, Approved.setText(object.getString("approved")); Adjusted.setText(object.getString("adjusted")); ClaimStatus.setText(object.getString("claim_status")); - Explanation.setText(object.getString("explination")); + Explanation.setText(object.getString("explanation")); Adjustment.setText(object.getString("adjustment")); } catch (JSONException e) { diff --git a/claimManagement/src/main/java/org/openimis/imisclaims/SQLHandler.java b/claimManagement/src/main/java/org/openimis/imisclaims/SQLHandler.java index 1fa2c45a..06572508 100644 --- a/claimManagement/src/main/java/org/openimis/imisclaims/SQLHandler.java +++ b/claimManagement/src/main/java/org/openimis/imisclaims/SQLHandler.java @@ -21,8 +21,8 @@ public class SQLHandler extends SQLiteOpenHelper{ Global global; - public static final String DB_NAME_MAPPING = ((Global)Global.getContext()).getSubdirectory("Database") + "/" + "Mapping.db3"; - public static final String DB_NAME_DATA = ((Global)Global.getContext()).getSubdirectory("Database") + "/" + "ImisData.db3"; + public static final String DB_NAME_MAPPING = Global.getGlobal().getSubdirectory("Database") + "/" + "Mapping.db3"; + public static final String DB_NAME_DATA = Global.getGlobal().getSubdirectory("Database") + "/" + "ImisData.db3"; private static final String CreateTable = "CREATE TABLE IF NOT EXISTS tblMapping(Code text,Name text,Type text);"; private static final String CreateTableControls = "CREATE TABLE IF NOT EXISTS tblControls(FieldName text, Adjustibility text);"; private static final String CreateTableClaimAdmins = "CREATE TABLE IF NOT EXISTS tblClaimAdmins(Code text, Name text);"; @@ -35,20 +35,17 @@ public class SQLHandler extends SQLiteOpenHelper{ public SQLHandler(Context context) { super(context, DB_NAME_MAPPING, null, 3); global = (Global) context.getApplicationContext(); - // TODO Auto-generated constructor stub } @Override public void onCreate(SQLiteDatabase db) { - // TODO Auto-generated method stub checkDataBase(); db.execSQL(CreateTable); } @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { - // TODO Auto-generated method stub } diff --git a/claimManagement/src/main/java/org/openimis/imisclaims/SearchClaims.java b/claimManagement/src/main/java/org/openimis/imisclaims/SearchClaims.java deleted file mode 100644 index 9a236645..00000000 --- a/claimManagement/src/main/java/org/openimis/imisclaims/SearchClaims.java +++ /dev/null @@ -1,800 +0,0 @@ -package org.openimis.imisclaims; - -import android.app.AlertDialog; -import android.app.DatePickerDialog; -import android.app.Dialog; -import android.app.ProgressDialog; -import android.content.DialogInterface; -import android.content.Intent; -import android.os.Bundle; -import android.support.v7.app.ActionBar; -import android.support.v7.app.AppCompatActivity; -import android.view.LayoutInflater; -import android.view.MotionEvent; -import android.view.View; -import android.widget.AdapterView; -import android.widget.ArrayAdapter; -import android.widget.Button; -import android.widget.DatePicker; -import android.widget.EditText; -import android.widget.Spinner; -import android.widget.TextView; -import android.widget.Toast; - -import cz.msebera.android.httpclient.HttpEntity; -import cz.msebera.android.httpclient.HttpResponse; -import cz.msebera.android.httpclient.util.EntityUtils; -import org.json.JSONException; -import org.json.JSONObject; - -import java.io.IOException; -import java.text.SimpleDateFormat; -import java.util.ArrayList; -import java.util.Calendar; -import java.util.Date; -import java.util.List; - -import static org.openimis.imisclaims.ClaimActivity.EndDate_Dialog_ID; -import static org.openimis.imisclaims.ClaimActivity.StartDate_Dialog_ID; - - -public class SearchClaims extends AppCompatActivity implements AdapterView.OnItemSelectedListener { - - ProgressDialog pd; - - ToRestApi toRestApi; - Token tokenl; - - EditText visit_date_from; - EditText visit_date_to; - EditText date_processed_from; - EditText date_processed_to; - String status_claim = ""; - - Button clear; - Button search; - - static final int StartDate_Dialog_ID1 = 2; - static final int EndDate_Dialog_ID2 = 3; - - private int year, month, day; - final Calendar cal = Calendar.getInstance(); - - Global global; - - @Override - protected void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - setContentView(R.layout.activity_search_claims); - - pd = new ProgressDialog(this); - pd.setCancelable(false); - - global = (Global)getApplicationContext(); - - toRestApi = new ToRestApi(); - tokenl = new Token(); - - final ActionBar actionBar = getSupportActionBar(); - actionBar.setDisplayHomeAsUpEnabled(true); - actionBar.setTitle(getResources().getString(R.string.SearchClaims)); - - - // Spinner element - Spinner spinner = (Spinner) findViewById(R.id.spinner_status); - - // Spinner click listener - spinner.setOnItemSelectedListener(this); - - // Spinner Drop down elements - List categories = new ArrayList(); - categories.add("Select claim status"); - categories.add(getString(R.string.Entered)); - categories.add(getString(R.string.Checked)); - categories.add(getString(R.string.Processed)); - categories.add(getString(R.string.Valuated)); - categories.add(getString(R.string.Rejected)); - - // Creating adapter for spinner - ArrayAdapter dataAdapter = new ArrayAdapter(this, android.R.layout.simple_spinner_item, categories); - - // Drop down layout style - list view with radio button - dataAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); - - // attaching data adapter to spinner - spinner.setAdapter(dataAdapter); - - - clear = (Button) findViewById(R.id.clear); - clear.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View view) { - visit_date_from.setText(""); - visit_date_to.setText(""); - date_processed_from.setText(""); - date_processed_to.setText(""); - } - }); - - - visit_date_from = (EditText) findViewById(R.id.visit_date_from); - visit_date_to = (EditText) findViewById(R.id.visit_date_to); - date_processed_from = (EditText) findViewById(R.id.date_processed_from); - date_processed_to = (EditText) findViewById(R.id.date_processed_to); - - visit_date_from.setOnTouchListener(new View.OnTouchListener() { - @Override - public boolean onTouch(View v, MotionEvent event) { - showDialog(StartDate_Dialog_ID); - return false; - } - }); - - visit_date_to.setOnTouchListener(new View.OnTouchListener() { - - @Override - public boolean onTouch(View v, MotionEvent event) { - showDialog(EndDate_Dialog_ID); - return false; - } - }); - - date_processed_from.setOnTouchListener(new View.OnTouchListener() { - @Override - public boolean onTouch(View v, MotionEvent event) { - showDialog(StartDate_Dialog_ID1); - return false; - } - }); - - date_processed_to.setOnTouchListener(new View.OnTouchListener() { - - @Override - public boolean onTouch(View v, MotionEvent event) { - showDialog(EndDate_Dialog_ID2); - return false; - } - }); - - search = (Button) findViewById(R.id.search); - search.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View view) { - - if(tokenl.getTokenText().length() <= 0){ - LoginDialogBox(); - }else{ - JSONObject object = new JSONObject(); - try { - //object.put("userName",username.getText().toString()); - object.put("claim_administrator_code",global.getOfficerCode().toString()); - if(status_claim.length() != 0){object.put("status_claim",status_claim);} - if(visit_date_from.length() != 0){object.put("visit_date_from",visit_date_from.getText());} - if(visit_date_to.length() != 0){object.put("visit_date_to",visit_date_to.getText());} - if(date_processed_from.length() != 0){object.put("processed_date_from",date_processed_from.getText());} - if(date_processed_to.length() != 0){object.put("processed_date_to",date_processed_to.getText());} - } catch (JSONException e) { - e.printStackTrace(); - } - getClaims(object); - } - } - }); - } - - private void getClaims(JSONObject object) { -/* String claims = "{\n" + - " \"error_occured\": false,\n" + - " \"claims\": [\n" + - " {\n" + - " \"health_facility_code\": \"HF02\",\n" + - " \"health_facility_name\": \"District1 health Center\",\n" + - " \"insurance_number\": \"111111142\",\n" + - " \"patient_name\": \"Fuchs Elis\",\n" + - " \"main_dg\": \"Shigellosis(BacilliaryDysentry)\",\n" + - " \"claim_number\": \"xx1\",\n" + - " \"date_claimed\": \"2017-06-26T00:00:00\",\n" + - " \"visit_date_from\": \"2017-06-26T00:00:00\",\n" + - " \"visit_type\": \"O\",\n" + - " \"claim_status\": \"Valuated\",\n" + - " \"sec_dg_1\": null,\n" + - " \"sec_dg_2\": null,\n" + - " \"sec_dg_3\": null,\n" + - " \"sec_dg_4\": null,\n" + - " \"visit_date_to\": \"2017-06-26T00:00:00\",\n" + - " \"claimed\": 1500,\n" + - " \"approved\": 500,\n" + - " \"adjusted\": 380,\n" + - " \"explination\": \"\",\n" + - " \"adjustment\": null,\n" + - " \"guarantee_number\": \"\",\n" + - " \"services\": [\n" + - " {\n" + - " \"claim_number\": \"xx1\",\n" + - " \"service\": \"Urinary lab test\",\n" + - " \"service_qty\": null,\n" + - " \"service_price\": 1000,\n" + - " \"service_adjusted_qty\": null,\n" + - " \"service_adjusted_price\": 200,\n" + - " \"service_explination\": \"\",\n" + - " \"service_justificaion\": null,\n" + - " \"service_valuated\": 200,\n" + - " \"service_result\": null\n" + - " },\n" + - " {\n" + - " \"claim_number\": \"xx1\",\n" + - " \"service\": \"Antenatal examination\",\n" + - " \"service_qty\": null,\n" + - " \"service_price\": 100,\n" + - " \"service_adjusted_qty\": null,\n" + - " \"service_adjusted_price\": 100,\n" + - " \"service_explination\": \"\",\n" + - " \"service_justificaion\": null,\n" + - " \"service_valuated\": 100,\n" + - " \"service_result\": null\n" + - " }\n" + - " ],\n" + - " \"items\": [\n" + - " {\n" + - " \"claim_number\": \"xx1\",\n" + - " \"item\": \"ACETYLSALICYLIC ACID (ASPIRIN) TABS 300MG-\",\n" + - " \"item_qty\": null,\n" + - " \"item_price\": 400,\n" + - " \"item_adjusted_qty\": null,\n" + - " \"item_adjusted_price\": 200,\n" + - " \"item_explination\": \"\",\n" + - " \"item_justificaion\": null,\n" + - " \"item_valuated\": 80,\n" + - " \"item_result\": \"0\"\n" + - " },\n" + - " {\n" + - " \"claim_number\": \"xx1\",\n" + - " \"item\": \"ADRENALINE 1ML INJ 1MG/ML\",\n" + - " \"item_qty\": 1,\n" + - " \"item_price\": 500,\n" + - " \"item_adjusted_qty\": 0,\n" + - " \"item_adjusted_price\": null,\n" + - " \"item_explination\": \"\",\n" + - " \"item_justificaion\": null,\n" + - " \"item_valuated\": null,\n" + - " \"item_result\": \"10\"\n" + - " },\n" + - " {\n" + - " \"claim_number\": \"xx1\",\n" + - " \"item\": \"FRUSEMIDE TABS 40 MG\",\n" + - " \"item_qty\": 1,\n" + - " \"item_price\": 500,\n" + - " \"item_adjusted_qty\": 0,\n" + - " \"item_adjusted_price\": null,\n" + - " \"item_explination\": \"\",\n" + - " \"item_justificaion\": null,\n" + - " \"item_valuated\": null,\n" + - " \"item_result\": \"4\"\n" + - " }\n" + - " ]\n" + - " },\n" + - " {\n" + - " \"health_facility_code\": \"HF02\",\n" + - " \"health_facility_name\": \"District1 health Center\",\n" + - " \"insurance_number\": \"00100114\",\n" + - " \"patient_name\": \"Joseph Alila\",\n" + - " \"main_dg\": \"Food Poisoning (Bacterial)\",\n" + - " \"claim_number\": \"CLT003\",\n" + - " \"date_claimed\": \"2017-07-20T00:00:00\",\n" + - " \"visit_date_from\": \"2017-07-20T00:00:00\",\n" + - " \"visit_type\": \"E\",\n" + - " \"claim_status\": \"Valuated\",\n" + - " \"sec_dg_1\": null,\n" + - " \"sec_dg_2\": null,\n" + - " \"sec_dg_3\": null,\n" + - " \"sec_dg_4\": null,\n" + - " \"visit_date_to\": \"2017-07-20T00:00:00\",\n" + - " \"claimed\": 1600,\n" + - " \"approved\": 500,\n" + - " \"adjusted\": 500,\n" + - " \"explination\": \"\",\n" + - " \"adjustment\": null,\n" + - " \"guarantee_number\": \"\",\n" + - " \"services\": [\n" + - " {\n" + - " \"claim_number\": \"CLT003\",\n" + - " \"service\": \"GP visit\",\n" + - " \"service_qty\": null,\n" + - " \"service_price\": 100,\n" + - " \"service_adjusted_qty\": null,\n" + - " \"service_adjusted_price\": 100,\n" + - " \"service_explination\": \"\",\n" + - " \"service_justificaion\": null,\n" + - " \"service_valuated\": 100,\n" + - " \"service_result\": null\n" + - " }\n" + - " ],\n" + - " \"items\": []\n" + - " },\n" + - " {\n" + - " \"health_facility_code\": \"HF02\",\n" + - " \"health_facility_name\": \"District1 health Center\",\n" + - " \"insurance_number\": \"777888981\",\n" + - " \"patient_name\": \"Pappen Jane\",\n" + - " \"main_dg\": \"Food Poisoning (Bacterial)\",\n" + - " \"claim_number\": \"wef03\",\n" + - " \"date_claimed\": \"2017-08-31T00:00:00\",\n" + - " \"visit_date_from\": \"2017-08-30T00:00:00\",\n" + - " \"visit_type\": \"R\",\n" + - " \"claim_status\": \"Processed\",\n" + - " \"sec_dg_1\": null,\n" + - " \"sec_dg_2\": null,\n" + - " \"sec_dg_3\": null,\n" + - " \"sec_dg_4\": null,\n" + - " \"visit_date_to\": \"2017-08-30T00:00:00\",\n" + - " \"claimed\": 158,\n" + - " \"approved\": 158,\n" + - " \"adjusted\": 0,\n" + - " \"explination\": \"\",\n" + - " \"adjustment\": null,\n" + - " \"guarantee_number\": null,\n" + - " \"services\": [],\n" + - " \"items\": [\n" + - " {\n" + - " \"claim_number\": \"wef03\",\n" + - " \"item\": null,\n" + - " \"item_qty\": null,\n" + - " \"item_price\": null,\n" + - " \"item_adjusted_qty\": null,\n" + - " \"item_adjusted_price\": null,\n" + - " \"item_explination\": null,\n" + - " \"item_justificaion\": null,\n" + - " \"item_valuated\": null,\n" + - " \"item_result\": null\n" + - " }\n" + - " ]\n" + - " },\n" + - " {\n" + - " \"health_facility_code\": \"HF02\",\n" + - " \"health_facility_name\": \"District1 health Center\",\n" + - " \"insurance_number\": \"00100114\",\n" + - " \"patient_name\": \"Joseph Alila\",\n" + - " \"main_dg\": \"Food Poisoning (Bacterial)\",\n" + - " \"claim_number\": \"wex04\",\n" + - " \"date_claimed\": \"2017-08-31T00:00:00\",\n" + - " \"visit_date_from\": \"2017-08-30T00:00:00\",\n" + - " \"visit_type\": \"R\",\n" + - " \"claim_status\": \"Valuated\",\n" + - " \"sec_dg_1\": null,\n" + - " \"sec_dg_2\": null,\n" + - " \"sec_dg_3\": null,\n" + - " \"sec_dg_4\": null,\n" + - " \"visit_date_to\": \"2017-08-30T00:00:00\",\n" + - " \"claimed\": 165,\n" + - " \"approved\": 165,\n" + - " \"adjusted\": 100,\n" + - " \"explination\": \"\",\n" + - " \"adjustment\": null,\n" + - " \"guarantee_number\": null,\n" + - " \"services\": [],\n" + - " \"items\": []\n" + - " }\n" + - " ]\n" + - "}";*/ - getClaimsApi(object); - - } - - private void getClaimsApi(final JSONObject object) { - String error_occurred = null; - String error_message = null; - String content = null; - - final HttpResponse[] resp = {null}; - if(global.isNetworkAvailable()){ - String progress_message = getResources().getString(R.string.getClaims)+"..."; - pd = ProgressDialog.show(this, getResources().getString(R.string.DownLoad), progress_message); - Thread thread = new Thread() { - public void run() { - - String services = null; - String error_occurred = null; - String error_message = null; - String content = null; - - String functionName = "GetClaims"; - try{ - HttpResponse response = toRestApi.postToRestApi(object,functionName); - resp[0] = response; - HttpEntity respEntity = response.getEntity(); - if (respEntity != null) { - final String[] code = {null}; - // EntityUtils to get the response content - try { - content = EntityUtils.toString(respEntity); - } catch (IOException e) { - e.printStackTrace(); - } - } - int code = response.getStatusLine().getStatusCode(); - - if(code < 400){ - runOnUiThread(new Runnable() { - public void run() { - pd.dismiss(); - } - }); - JSONObject jsonObject = new JSONObject(content); - String data = jsonObject.getString("data"); - if(data.length() != 0){ - openClaimReview(content); - }else { - runOnUiThread(new Runnable() { - public void run() { - Toast.makeText(SearchClaims.this,resp[0].getStatusLine().getStatusCode() +"-"+getResources().getString(R.string.NoClaim),Toast.LENGTH_LONG).show(); - } - }); - } - - }else { - pd.dismiss(); - runOnUiThread(new Runnable() { - public void run() { - Toast.makeText(SearchClaims.this,resp[0].getStatusLine().getStatusCode() +"-"+getResources().getString(R.string.AccessDenied),Toast.LENGTH_LONG).show(); - LoginDialogBox(); - } - }); - Toast.makeText(SearchClaims.this,resp[0].getStatusLine().getStatusCode() +"-"+getResources().getString(R.string.AccessDenied),Toast.LENGTH_LONG).show(); - } - }catch (Exception e){ - pd.dismiss(); - runOnUiThread(new Runnable() { - public void run() { - Toast.makeText(SearchClaims.this,resp[0].getStatusLine().getStatusCode() +"-"+getResources().getString(R.string.AccessDenied),Toast.LENGTH_LONG).show(); - } - }); - } - - } - }; - thread.start(); - }else{ - runOnUiThread(new Runnable() { - public void run() { - pd.dismiss(); - } - }); - ErrorDialogBox(getResources().getString(R.string.CheckInternet)); - } - - } - - public void openClaimReview(String claims){ - Intent intent = new Intent(this, Claims.class); - intent.putExtra("claims", claims); - startActivity(intent); - } - - @Override - public void onItemSelected(AdapterView parent, View view, int position, long id) { - // On selecting a spinner item - status_claim = (parent.getItemAtPosition(position).toString().equals("Select claim status"))?"":parent.getItemAtPosition(position).toString(); - - // Showing selected spinner item - - } - public void onNothingSelected(AdapterView arg0) { - // TODO Auto-generated method stub - status_claim = ""; - } - - @Override - protected Dialog onCreateDialog(int id){ - switch(id){ - - case StartDate_Dialog_ID: - - year = cal.get(Calendar.YEAR); - month = cal.get(Calendar.MONTH); - day = cal.get(Calendar.DAY_OF_MONTH); - - return new DatePickerDialog(this, visit_date_fromPickerListener, year, month, day); - - case EndDate_Dialog_ID: - year = cal.get(Calendar.YEAR); - month = cal.get(Calendar.MONTH); - day = cal.get(Calendar.DAY_OF_MONTH); - - return new DatePickerDialog(this, visit_date_toPickerListner, year, month, day); - - - case StartDate_Dialog_ID1: - - year = cal.get(Calendar.YEAR); - month = cal.get(Calendar.MONTH); - day = cal.get(Calendar.DAY_OF_MONTH); - - return new DatePickerDialog(this, date_processed_fromPickerListener, year, month, day); - - case EndDate_Dialog_ID2: - year = cal.get(Calendar.YEAR); - month = cal.get(Calendar.MONTH); - day = cal.get(Calendar.DAY_OF_MONTH); - - return new DatePickerDialog(this, date_processed_toPickerListner, year, month, day); - } - return null; - } - - private DatePickerDialog.OnDateSetListener visit_date_fromPickerListener = new DatePickerDialog.OnDateSetListener() { - - @Override - public void onDateSet(DatePicker view, int Selectedyear, int SelectedMonth, int SelectedDay) { - year = Selectedyear; - month = SelectedMonth; - day = SelectedDay; - - /* - Date d = new Date(year, month, day); - SimpleDateFormat dateFormatter = new SimpleDateFormat( - "yyyy-MM-dd"); - String vDateFrom = dateFormatter.format(d); - - visit_date_from.setText(vDateFrom);*/ - visit_date_from.setText(new StringBuilder().append(year).append("-").append(month + 1).append("-").append(day)); - } - }; - - private DatePickerDialog.OnDateSetListener visit_date_toPickerListner = new DatePickerDialog.OnDateSetListener() { - - @Override - public void onDateSet(DatePicker view, int SelectedYear, int SelectedMonth, int SelectedDay) { - year = SelectedYear; - month = SelectedMonth; - day = SelectedDay; - -/* Date d = new Date(year, month, day); - SimpleDateFormat dateFormatter = new SimpleDateFormat( - "yyyy-MM-dd"); - String vDateTo = dateFormatter.format(d); - - visit_date_to.setText(vDateTo);*/ - visit_date_to.setText(new StringBuilder().append(year).append("-").append(month + 1).append("-").append(day)); - } - }; - - - private DatePickerDialog.OnDateSetListener date_processed_fromPickerListener = new DatePickerDialog.OnDateSetListener() { - - @Override - public void onDateSet(DatePicker view, int Selectedyear, int SelectedMonth, int SelectedDay) { - year = Selectedyear; - month = SelectedMonth; - day = SelectedDay; - -/* Date d = new Date(year, month, day); - SimpleDateFormat dateFormatter = new SimpleDateFormat( - "yyyy-MM-dd"); - String datePF = dateFormatter.format(d); - - date_processed_from.setText(datePF);*/ - date_processed_from.setText(new StringBuilder().append(year).append("-").append(month + 1).append("-").append(day)); - } - }; - - private DatePickerDialog.OnDateSetListener date_processed_toPickerListner = new DatePickerDialog.OnDateSetListener() { - - @Override - public void onDateSet(DatePicker view, int SelectedYear, int SelectedMonth, int SelectedDay) { - year = SelectedYear; - month = SelectedMonth; - day = SelectedDay; - -/* Date d = new Date(year, month, day); - SimpleDateFormat dateFormatter = new SimpleDateFormat( - "yyyy-MM-dd"); - String datePT = dateFormatter.format(d); - - date_processed_to.setText(datePT);*/ - date_processed_to.setText(new StringBuilder().append(year).append("-").append(month + 1).append("-").append(day)); - } - }; - - public void ErrorDialogBox(final String message) { - - // get prompts.xml view - LayoutInflater li = LayoutInflater.from(this); - View promptsView = li.inflate(R.layout.error_message_dialog, null); - - AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder( - this); - - // set prompts.xml to alertdialog builder - alertDialogBuilder.setView(promptsView); - - final TextView error = (TextView) promptsView.findViewById(R.id.error_message); - error.setText(message.toString()); - - // set dialog message - alertDialogBuilder - .setCancelable(false) - .setPositiveButton(R.string.button_ok, - new DialogInterface.OnClickListener() { - public void onClick(DialogInterface dialog,int id) { - dialog.cancel(); - } - }); - // create alert dialog - AlertDialog alertDialog = alertDialogBuilder.create(); - alertDialog.show(); - } - - public void LoginDialogBox() { - - final int[] userid = {0}; - - // get prompts.xml view - LayoutInflater li = LayoutInflater.from(this); - View promptsView = li.inflate(R.layout.login_dialog, null); - - AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder( - this); - - // set prompts.xml to alertdialog builder - alertDialogBuilder.setView(promptsView); - - final TextView username = (TextView) promptsView.findViewById(R.id.UserName); - final TextView password = (TextView) promptsView.findViewById(R.id.Password); - String officer_code = global.getOfficerCode(); - username.setText(String.valueOf(officer_code)); - // set dialog message - alertDialogBuilder - .setCancelable(false) - .setPositiveButton(getResources().getString(R.string.Ok), - new DialogInterface.OnClickListener() { - public void onClick(DialogInterface dialog,int id) { - if(global.isNetworkAvailable()){ - if(!username.getText().toString().equals("") && !password.getText().toString().equals("")){ - pd = ProgressDialog.show(SearchClaims.this, getResources().getString(R.string.Login), getResources().getString(R.string.InProgress)); - - new Thread() { - public void run() { -/* CallSoap callSoap = new CallSoap(); - callSoap.setFunctionName("isValidLogin"); - userid[0] = callSoap.isUserLoggedIn(username.getText().toString(),password.getText().toString());*/ - JSONObject object = new JSONObject(); - try { - object.put("userName",username.getText().toString()); - object.put("password",password.getText().toString()); - } catch (JSONException e) { - e.printStackTrace(); - } - String functionName = "login"; - HttpResponse response = null; - String content = null; - try{ - response = toRestApi.postToRestApi(object,functionName); - - HttpEntity respEntity = response.getEntity(); - if (respEntity != null) { - final String[] code = {null}; - // EntityUtils to get the response content - - - content = EntityUtils.toString(respEntity); - - } - }catch (Exception e){ - final HttpResponse finalResponse = response; - runOnUiThread(new Runnable() { - @Override - public void run() { - pd.dismiss(); - //ShowDialog(MainActivity.this.getResources().getString(R.string.LoginFail)); - Toast.makeText(SearchClaims.this, finalResponse.getStatusLine().getStatusCode()+"-"+ SearchClaims.this.getResources().getString(R.string.LoginFail),Toast.LENGTH_LONG).show(); - LoginDialogBox(); - } - }); - } - - if(response.getStatusLine().getStatusCode() == 401){ - runOnUiThread(new Runnable() { - @Override - public void run() { - pd.dismiss(); - //ShowDialog(MainActivity.this.getResources().getString(R.string.LoginFail)); - Toast.makeText(SearchClaims.this, SearchClaims.this.getResources().getString(R.string.LoginFail),Toast.LENGTH_LONG).show(); - LoginDialogBox(); - } - }); - - }else{ - JSONObject ob = null; - String token = null; - try { - ob = new JSONObject(content); - token = ob.getString("access_token"); - } catch (JSONException e) { - e.printStackTrace(); - } - - tokenl.saveTokenText(token.toString()); - - final String finalToken = token; - runOnUiThread(new Runnable() { - @Override - public void run() { - if(finalToken.length() > 0){ - pd.dismiss(); - Toast.makeText(SearchClaims.this, SearchClaims.this.getResources().getString(R.string.Login_Successful),Toast.LENGTH_LONG).show(); - - - }else{ - pd.dismiss(); - //ShowDialog(MainActivity.this.getResources().getString(R.string.LoginFail)); - Toast.makeText(SearchClaims.this, SearchClaims.this.getResources().getString(R.string.LoginFail),Toast.LENGTH_LONG).show(); - LoginDialogBox(); - } - } - }); - } - - - } - }.start(); - - - }else{ - LoginDialogBox(); - Toast.makeText(SearchClaims.this, SearchClaims.this.getResources().getString(R.string.Enter_Credentials), Toast.LENGTH_LONG).show(); - } - }else{ - ErrorDialogBox(getResources().getString(R.string.CheckInternet)); - } - - - - } - }) - .setNegativeButton(R.string.Cancel, - new DialogInterface.OnClickListener() { - public void onClick(DialogInterface dialog,int id) { - dialog.cancel(); - } - }); - - // create alert dialog - AlertDialog alertDialog = alertDialogBuilder.create(); - alertDialog.show(); - } - -/* public AlertDialog ShowComfirmationDialog(final JSONObject object) { - return new AlertDialog.Builder(this) - .setMessage(getResources().getString(R.string.AreYouSure)) - .setCancelable(false) - - .setPositiveButton(R.string.Ok, new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialogInterface, int i) { - JSONObject l = null; - JSONObject object1 = new JSONObject(); - - getClaims(object); - } - }) - .setNegativeButton(R.string.Cancel, - new DialogInterface.OnClickListener() { - public void onClick(DialogInterface dialog,int id) { - dialog.cancel(); - } - }) - .show(); - }*/ - - @Override - public void onBackPressed() { - super.onBackPressed(); - } - - @Override - public boolean onSupportNavigateUp() { - onBackPressed(); - return true; - } - -} diff --git a/claimManagement/src/main/java/org/openimis/imisclaims/SearchClaimsActivity.java b/claimManagement/src/main/java/org/openimis/imisclaims/SearchClaimsActivity.java new file mode 100644 index 00000000..23f2729c --- /dev/null +++ b/claimManagement/src/main/java/org/openimis/imisclaims/SearchClaimsActivity.java @@ -0,0 +1,220 @@ +package org.openimis.imisclaims; + +import android.app.DatePickerDialog; +import android.app.ProgressDialog; +import android.content.Intent; +import android.os.Bundle; +import android.widget.ArrayAdapter; +import android.widget.Button; +import android.widget.EditText; +import android.widget.Spinner; +import android.widget.TextView; +import android.widget.Toast; + +import org.apache.http.HttpResponse; +import org.json.JSONException; +import org.json.JSONObject; + +import java.text.SimpleDateFormat; +import java.util.ArrayList; +import java.util.Calendar; +import java.util.List; +import java.util.Locale; + +public class SearchClaimsActivity extends ImisActivity { + ProgressDialog pd; + + ToRestApi toRestApi; + + EditText visitDateFrom; + EditText visitDateTo; + EditText dateProcessedFrom; + EditText dateProcessedTo; + + Calendar visitDateFromCalendar; + Calendar visitDateToCalendar; + Calendar dateProcessedFromCalendar; + Calendar dateProcessedToCalendar; + + Button clear; + Button search; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_search_claims); + + toRestApi = new ToRestApi(); + + if (actionBar != null) { + actionBar.setDisplayHomeAsUpEnabled(true); + actionBar.setTitle(getResources().getString(R.string.SearchClaims)); + } + + List categories = new ArrayList<>(); + categories.add("Select claim status"); + categories.add(getString(R.string.Entered)); + categories.add(getString(R.string.Checked)); + categories.add(getString(R.string.Processed)); + categories.add(getString(R.string.Valuated)); + categories.add(getString(R.string.Rejected)); + + Spinner spinner = findViewById(R.id.spinner_status); + ArrayAdapter dataAdapter = new ArrayAdapter<>(this, android.R.layout.simple_spinner_item, categories); + dataAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); + spinner.setAdapter(dataAdapter); + + + clear = findViewById(R.id.clear); + clear.setOnClickListener(view -> { + visitDateFrom.setText(""); + visitDateTo.setText(""); + dateProcessedFrom.setText(""); + dateProcessedTo.setText(""); + spinner.setSelection(0); + }); + + visitDateFrom = findViewById(R.id.visit_date_from); + visitDateTo = findViewById(R.id.visit_date_to); + dateProcessedFrom = findViewById(R.id.date_processed_from); + dateProcessedTo = findViewById(R.id.date_processed_to); + + visitDateFromCalendar = Calendar.getInstance(); + visitDateToCalendar = Calendar.getInstance(); + dateProcessedFromCalendar = Calendar.getInstance(); + dateProcessedToCalendar = Calendar.getInstance(); + + search = findViewById(R.id.search); + search.setOnClickListener(view -> doLoggedIn(() -> { + JSONObject object = new JSONObject(); + try { + object.put("claim_administrator_code", global.getOfficerCode()); + if (spinner.getSelectedItemPosition() != 0) { + object.put("status_claim", categories.get(spinner.getSelectedItemPosition())); + } + if (visitDateFrom.length() != 0) { + object.put("visit_date_from", visitDateFrom.getText()); + } + if (visitDateTo.length() != 0) { + object.put("visit_date_to", visitDateTo.getText()); + } + if (dateProcessedFrom.length() != 0) { + object.put("processed_date_from", dateProcessedFrom.getText()); + } + if (dateProcessedTo.length() != 0) { + object.put("processed_date_to", dateProcessedTo.getText()); + } + getClaims(object); + } catch (JSONException e) { + e.printStackTrace(); + } + })); + + visitDateFrom.setOnClickListener(v -> + new DatePickerDialog(this, + (view, year, monthOfYear, dayOfMonth) -> { + visitDateFromCalendar.set(Calendar.YEAR, year); + visitDateFromCalendar.set(Calendar.MONTH, monthOfYear); + visitDateFromCalendar.set(Calendar.DAY_OF_MONTH, dayOfMonth); + updateLabel(visitDateFromCalendar, visitDateFrom); + }, + visitDateFromCalendar.get(Calendar.YEAR), + visitDateFromCalendar.get(Calendar.MONTH), + visitDateFromCalendar.get(Calendar.DAY_OF_MONTH) + ).show()); + + visitDateTo.setOnClickListener(v -> + new DatePickerDialog(this, + (view, year, monthOfYear, dayOfMonth) -> { + visitDateToCalendar.set(Calendar.YEAR, year); + visitDateToCalendar.set(Calendar.MONTH, monthOfYear); + visitDateToCalendar.set(Calendar.DAY_OF_MONTH, dayOfMonth); + updateLabel(visitDateToCalendar, visitDateTo); + }, + visitDateToCalendar.get(Calendar.YEAR), + visitDateToCalendar.get(Calendar.MONTH), + visitDateToCalendar.get(Calendar.DAY_OF_MONTH) + ).show()); + + dateProcessedFrom.setOnClickListener(v -> + new DatePickerDialog(this, + (view, year, monthOfYear, dayOfMonth) -> { + dateProcessedFromCalendar.set(Calendar.YEAR, year); + dateProcessedFromCalendar.set(Calendar.MONTH, monthOfYear); + dateProcessedFromCalendar.set(Calendar.DAY_OF_MONTH, dayOfMonth); + updateLabel(dateProcessedFromCalendar, dateProcessedFrom); + }, + dateProcessedFromCalendar.get(Calendar.YEAR), + dateProcessedFromCalendar.get(Calendar.MONTH), + dateProcessedFromCalendar.get(Calendar.DAY_OF_MONTH) + ).show()); + + dateProcessedTo.setOnClickListener(v -> + new DatePickerDialog(this, + (view, year, monthOfYear, dayOfMonth) -> { + dateProcessedToCalendar.set(Calendar.YEAR, year); + dateProcessedToCalendar.set(Calendar.MONTH, monthOfYear); + dateProcessedToCalendar.set(Calendar.DAY_OF_MONTH, dayOfMonth); + updateLabel(dateProcessedToCalendar, dateProcessedTo); + }, + dateProcessedToCalendar.get(Calendar.YEAR), + dateProcessedToCalendar.get(Calendar.MONTH), + dateProcessedToCalendar.get(Calendar.DAY_OF_MONTH) + ).show()); + } + + public void updateLabel(Calendar calendar, TextView view) { + SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd", Locale.US); + view.setText(formatter.format(calendar.getTime())); + } + + private void getClaims(final JSONObject object) { + pd = ProgressDialog.show(this, getResources().getString(R.string.DownLoad), getResources().getString(R.string.getClaims) + "..."); + Thread thread = new Thread() { + public void run() { + + String functionName = "claim/GetClaims/"; + try { + HttpResponse response = toRestApi.postToRestApiToken(object, functionName); + String content = toRestApi.getContent(response); + int code = response.getStatusLine().getStatusCode(); + + if (code < 400) { + runOnUiThread(() -> pd.dismiss()); + JSONObject jsonObject = new JSONObject(content); + String data = jsonObject.getString("data"); + if (data.length() != 0) { + openClaimReview(content); + } else { + runOnUiThread(() -> Toast.makeText(getContext(), response.getStatusLine().getStatusCode() + "-" + getResources().getString(R.string.NoClaim), Toast.LENGTH_LONG).show()); + } + } else { + pd.dismiss(); + runOnUiThread(() -> Toast.makeText(getContext(), getResources().getString(R.string.AccessDenied), Toast.LENGTH_LONG).show()); + } + } catch (Exception e) { + pd.dismiss(); + runOnUiThread(() -> Toast.makeText(getContext(), getResources().getString(R.string.AccessDenied), Toast.LENGTH_LONG).show()); + } + } + }; + thread.start(); + } + + public void openClaimReview(String claims) { + Intent intent = new Intent(this, Claims.class); + intent.putExtra("claims", claims); + startActivity(intent); + } + + @Override + public void onBackPressed() { + super.onBackPressed(); + } + + @Override + public boolean onSupportNavigateUp() { + onBackPressed(); + return true; + } +} diff --git a/claimManagement/src/main/java/org/openimis/imisclaims/Settings.java b/claimManagement/src/main/java/org/openimis/imisclaims/SettingsActivity.java similarity index 78% rename from claimManagement/src/main/java/org/openimis/imisclaims/Settings.java rename to claimManagement/src/main/java/org/openimis/imisclaims/SettingsActivity.java index d1a50c46..29dffb72 100644 --- a/claimManagement/src/main/java/org/openimis/imisclaims/Settings.java +++ b/claimManagement/src/main/java/org/openimis/imisclaims/SettingsActivity.java @@ -1,6 +1,7 @@ package org.openimis.imisclaims; import android.app.AlertDialog; +import android.content.Context; import android.content.DialogInterface; import android.content.SharedPreferences; import android.os.Bundle; @@ -19,7 +20,7 @@ import javax.crypto.Cipher; import javax.crypto.spec.SecretKeySpec; -public class Settings extends AppCompatActivity { +public class SettingsActivity extends AppCompatActivity { Button btnSaveRarPwd, btnDefaultRarPassword; EditText etRarPassword; @@ -42,29 +43,23 @@ protected void onCreate(Bundle savedInstanceState) { etRarPassword = (EditText)findViewById(R.id.rarPassword); btnDefaultRarPassword = (Button) findViewById(R.id.btnDefaultRarPassword); - btnSaveRarPwd.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View view) { - if(etRarPassword.getText().length() == 0){ - ShowDialog("Rar password required"); - } - else { - password = etRarPassword.getText().toString(); - saveRarPassword(password); - ShowDialog("Password has been changed"); - etRarPassword.setText(""); - } - + btnSaveRarPwd.setOnClickListener(view -> { + if(etRarPassword.getText().length() == 0){ + ShowDialog("Rar password required"); } - }); - - btnDefaultRarPassword.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View view) { - password = global.getDefaultRarPassword(); + else { + password = etRarPassword.getText().toString(); saveRarPassword(password); - ShowDialog("Password has been changed to the default rar password"); + ShowDialog("Password has been changed"); + etRarPassword.setText(""); } + + }); + + btnDefaultRarPassword.setOnClickListener(view -> { + password = global.getDefaultRarPassword(); + saveRarPassword(password); + ShowDialog("Password has been changed to the default rar password"); }); } @@ -142,13 +137,9 @@ protected AlertDialog ShowDialog(String msg){ return new AlertDialog.Builder(this) .setMessage(msg) .setCancelable(false) - .setPositiveButton(getResources().getString(R.string.Ok), new DialogInterface.OnClickListener() { - - @Override - public void onClick(DialogInterface dialog, int which) { - //et.requestFocus(); - return; - } + .setPositiveButton(getResources().getString(R.string.Ok), (dialog, which) -> { + //et.requestFocus(); + return; }).show(); } } diff --git a/claimManagement/src/main/java/org/openimis/imisclaims/Synchronize.java b/claimManagement/src/main/java/org/openimis/imisclaims/Synchronize.java deleted file mode 100644 index f2260231..00000000 --- a/claimManagement/src/main/java/org/openimis/imisclaims/Synchronize.java +++ /dev/null @@ -1,715 +0,0 @@ -package org.openimis.imisclaims; - -import android.annotation.SuppressLint; -import android.app.AlertDialog; -import android.app.ProgressDialog; -import android.content.DialogInterface; -import android.content.Intent; -import android.content.SharedPreferences; -import android.os.Bundle; -import android.support.v7.app.ActionBar; -import android.support.v7.app.AppCompatActivity; -import android.view.LayoutInflater; -import android.view.Menu; -import android.view.MenuItem; -import android.view.View; -import android.widget.RelativeLayout; -import android.widget.TextView; -import android.widget.Toast; - -import org.json.JSONArray; -import org.json.JSONObject; - -import java.io.BufferedReader; -import java.io.File; -import java.io.FileInputStream; -import java.io.FilenameFilter; -import java.io.IOException; -import java.io.InputStreamReader; -import java.text.SimpleDateFormat; -import java.util.ArrayList; -import java.util.Calendar; - -public class Synchronize extends AppCompatActivity { - - ToRestApi toRestApi; - Token tokenl; - boolean isUserLogged; - Global global; - - TextView tvUploadClaims,tvZipClaims; - RelativeLayout UploadClaims,zip_claims; - - String FileName; - File ClaimFile; - File ClaimFileJSON; - File[] Claims; - File[] ClaimsJSON; - int TotalClaims,UploadCounter,TotalItemService; - int result; - - ProgressDialog pd; - - private Menu menu; - - private String salt; - - String PendingFolder,TrashFolder; - - Runnable ChangeMessage = new Runnable() { - - @Override - public void run() { - //Change progress dialog message here - //pd.setMessage(UploadCounter + " " + getResources().getString(R.string.Of) + " " + TotalClaims + " " + getResources().getString(R.string.Uploading)); - pd.setMessage(UploadCounter + " File(s) " + getResources().getString(R.string.Uploading)); - - } - }; - - @Override - protected void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - setContentView(R.layout.activity_synchronize); - final ActionBar actionBar = getSupportActionBar(); - actionBar.setDisplayHomeAsUpEnabled(true); - global = (Global)getApplication(); - PendingFolder = global.getMainDirectory(); - TrashFolder = global.getSubdirectory("Trash"); - toRestApi = new ToRestApi(); - tokenl = new Token(); - - tvUploadClaims = (TextView) findViewById(R.id.tvUploadClaims); - tvZipClaims = (TextView) findViewById(R.id.tvZipClaims); - - UploadClaims = (RelativeLayout) findViewById(R.id.upload_claims); - zip_claims = (RelativeLayout) findViewById(R.id.zip_claims); - - File pendingFolder = new File(PendingFolder); - File trashFolder = new File(TrashFolder); - - int count_pending = 0; - int count_trash = 0; - - if(pendingFolder.listFiles() != null){ - for(int i = 0; i< pendingFolder.listFiles().length; i++){ - String fname = pendingFolder.listFiles()[i].getName(); - String str; - try{ - str = fname.substring(0,6); - }catch (StringIndexOutOfBoundsException e){ - continue; - } - if(str.equals("Claim_")){ - count_pending++; - } - } - }else { - count_pending = 0; - } - - if(trashFolder.listFiles() != null){ - for(int i = 0; i< trashFolder.listFiles().length; i++){ - String fname = trashFolder.listFiles()[i].getName(); - String str; - try{ - str = fname.substring(0,6); - }catch (StringIndexOutOfBoundsException e){ - continue; - } - if(str.equals("Claim_")){ - count_trash++; - } - } - }else { - count_trash = 0; - } - - int total_pending = count_trash + count_pending; - - tvUploadClaims.setText(String.valueOf(total_pending)); - tvZipClaims.setText(String.valueOf(count_pending)); - - - UploadClaims.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View view) { - if(!global.getIslogged()){ - LoginDialogBox("Synchronize"); - }else{ - ConfirmUploadClaims(); - } - } - }); - zip_claims.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View view) { - ConfirmXMLCreation(); - - } - }); - } - - @Override - public void onResume() { - reFreshCount(); - super.onResume(); - } - - //Methods - public void LoginDialogBox(final String page) { - - final int[] userid = {0}; - - // get prompts.xml view - LayoutInflater li = LayoutInflater.from(this); - View promptsView = li.inflate(R.layout.login_dialog, null); - - AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder( - this); - - // set prompts.xml to alertdialog builder - alertDialogBuilder.setView(promptsView); - - final TextView username = (TextView) promptsView.findViewById(R.id.UserName); - final TextView password = (TextView) promptsView.findViewById(R.id.Password); - String officer_code = global.getOfficerCode(); - username.setText(String.valueOf(officer_code)); - // set dialog message - alertDialogBuilder - .setCancelable(false) - .setPositiveButton(R.string.Ok, - new DialogInterface.OnClickListener() { - public void onClick(DialogInterface dialog, int id) { - if (!username.getText().toString().equals("") && !password.getText().toString().equals("")) { - pd = ProgressDialog.show(Synchronize.this, getResources().getString(R.string.Login), getResources().getString(R.string.InProgress)); - - new Thread() { - public void run() { - Login login = new Login(); - - isUserLogged = login.LoginToken(username.getText().toString(), password.getText().toString()); - global.setIsLogged(isUserLogged); - - runOnUiThread(new Runnable() { - @Override - public void run() { - pd.dismiss(); - if (isUserLogged) { - if (page.equals("Synchronize")) { - finish(); - Intent intent = new Intent(Synchronize.this, Synchronize.class); - startActivity(intent); - Toast.makeText(Synchronize.this, Synchronize.this.getResources().getString(R.string.Login_Successful), Toast.LENGTH_LONG).show(); - } - } else { - pd.dismiss(); - if (!global.isNetworkAvailable()) { - LoginDialogBox(page); - ShowDialog(Synchronize.this.getResources().getString(R.string.CheckInternet)); - } else { - Toast.makeText(Synchronize.this, Synchronize.this.getResources().getString(R.string.LoginFail), Toast.LENGTH_LONG).show(); - LoginDialogBox(page); - } - } - } - }); - } - }.start(); - - - } else { - LoginDialogBox(page); - Toast.makeText(Synchronize.this, Synchronize.this.getResources().getString(R.string.Enter_Credentials), Toast.LENGTH_LONG).show(); - } - - } - }) - .setNegativeButton(R.string.Cancel, - new DialogInterface.OnClickListener() { - public void onClick(DialogInterface dialog, int id) { - dialog.cancel(); - } - }); - - // create alert dialog - AlertDialog alertDialog = alertDialogBuilder.create(); - alertDialog.show(); - } - - public AlertDialog ShowDialog(String msg) { - return new AlertDialog.Builder(this) - .setMessage(msg) - .setCancelable(false) - .setPositiveButton(R.string.Ok, new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialogInterface, int i) { - dialogInterface.cancel(); - } - }).show(); - } - - public AlertDialog ConfirmXMLCreation() { - return new AlertDialog.Builder(this) - .setMessage(R.string.AreYouSure) - .setCancelable(false) - .setNegativeButton(R.string.Cancel, - new DialogInterface.OnClickListener() { - public void onClick(DialogInterface dialog,int id) { - dialog.cancel(); - } - }) - .setPositiveButton(R.string.Ok, new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialogInterface, int i) { - zipFiles(); - } - }).show(); - } - public AlertDialog ConfirmUploadClaims() { - return new AlertDialog.Builder(this) - .setMessage(R.string.AreYouSure) - .setCancelable(false) - .setNegativeButton(R.string.Cancel, - new DialogInterface.OnClickListener() { - public void onClick(DialogInterface dialog,int id) { - dialog.cancel(); - } - }) - .setPositiveButton(R.string.Ok, new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialogInterface, int i) { - boolean res1 = UploadAllClaims(); - //boolean res2 = UploadAllClaimsTrash(); -/* if(res1 == true || res2 == true){ - reFreshCount(); -*//* finish(); - Intent intent = new Intent(Synchronize.this, Synchronize.class); - startActivity(intent);*//* - }*/ - } - }).show(); - } - - public boolean onOptionsItemSelected(MenuItem item){ - onBackPressed(); - return true; - - } - @Override - public void onBackPressed() { - super.onBackPressed(); - } - - - public boolean UploadAllClaims(){ - - try { - //Get the total number of files to upload - Claims = GetListOfJSONFiles(ClaimActivity.Path,"Claim_"); - ClaimsJSON = GetListOfJSONFiles(ClaimActivity.Path, "ClaimJSON"); - TotalClaims = Claims.length; - int TotalClaimsTrash; - if(GetListOfFiles(TrashFolder).length > 0){ - TotalClaimsTrash = Integer.parseInt(String.valueOf(GetListOfFiles(TrashFolder).length)); - }else{ - TotalClaimsTrash = 0; - } - - //If there are no files to upload give the message and exit - if (TotalClaims == 0 && TotalClaimsTrash == 0){ - ShowDialog(getResources().getString(R.string.NoClaim)); - return false; - } - if (TotalClaims == 0){ - return false; - } - - //If internet is not available then give message and exit - if (!global.isNetworkAvailable()){ - ShowDialog(getResources().getString(R.string.CheckInternet)); - result = -1; - return false; - } - - pd = new ProgressDialog(this); - pd.setCancelable(false); - - pd = ProgressDialog.show(this,"",getResources().getString(R.string.Uploading)); - }catch (Exception e){ - e.printStackTrace(); - } - - Claims = GetListOfJSONFiles(ClaimActivity.Path,"Claim_"); - ClaimsJSON = GetListOfJSONFiles(ClaimActivity.Path,"ClaimJSON_"); - TotalClaims = Claims.length; - - new Thread(){ - public void run(){ - //Check if valid ftp credentials are available - //Start Uploading images - try { - UploadAllJSONClaims(Claims, ClaimsJSON); - }catch (Exception e){ - e.printStackTrace(); - } - - - runOnUiThread(new Runnable() { - - @Override - public void run() { - switch(result){ - case -1: - ShowDialog(getResources().getString(R.string.FTPConnectionFailed)); - break; - case -2: - ShowDialog(getResources().getString(R.string.SomethingWentWrongServer)); - break; - case -3: - ShowDialog(getResources().getString(R.string.FailToUpload)); - break; - default: - ShowDialog(getResources().getString(R.string.BulkUpload)); - } - } - }); - - pd.dismiss(); - } - - }.start(); - return true; - } - - public boolean UploadAllClaimsTrash(){ - final String Path1 = global.getSubdirectory("Trash"); - //Get the total number of files to upload - Claims = GetListOfJSONFiles(Path1,"Claim_"); - ClaimsJSON = GetListOfJSONFiles(Path1,"ClaimJSON_"); - TotalClaims = Claims.length; - int TotalClaimsTrash = Integer.parseInt(String.valueOf(GetListOfFiles(TrashFolder).length)); - - //If there are no files to upload give the message and exit - if (TotalClaims == 0){ - //ShowDialog(getResources().getString(R.string.NoClaim)); - return false; - } - - //If internet is not available then give message and exit - if (!global.isNetworkAvailable()){ - ShowDialog(getResources().getString(R.string.CheckInternet)); - result = -1; - return false; - } - - pd = new ProgressDialog(this); - pd.setCancelable(false); - - pd = ProgressDialog.show(this,"",getResources().getString(R.string.Uploading)); - - Claims = GetListOfJSONFiles(Path1,"Claim_"); - ClaimsJSON = GetListOfJSONFiles(Path1,"ClaimJSON_"); - TotalClaims = Claims.length; - - new Thread(){ - public void run(){ - //Check if valid ftp credentials are available - //Start Uploading images - UploadAllJSONClaims(Claims, ClaimsJSON); - - runOnUiThread(new Runnable() { - - @Override - public void run() { - switch(result){ - case -1: - ShowDialog(getResources().getString(R.string.FTPConnectionFailed)); - break; - case -2: - ShowDialog(getResources().getString(R.string.SomethingWentWrongServer)); - break; - case -3: - ShowDialog(getResources().getString(R.string.FailToUpload)); - break; - default: - ShowDialog(getResources().getString(R.string.BulkUpload)); - } - } - }); - - pd.dismiss(); - } - - }.start(); - return true; - } - - private void UploadAllJSONClaims(File[] Claims, File[] ClaimsJSON){ - - ToRestApi rest = new ToRestApi(); - int resInt = 2; - - for(int i=0;i FilesToAdd = new ArrayList(); - - File Claim = new File(targetPathClaims); - if(Claim.listFiles() != null){ - for(int i = 0; i< Claim.listFiles().length; i++){ - if(Claim.listFiles()[i].isFile()){ - String fname = Claim.listFiles()[i].getName(); - String str; - try{ - str = fname.substring(0,6); - }catch (StringIndexOutOfBoundsException e){ - continue; - } - if(str.equals("Claim_")){ - FilesToAdd.add(new File(Claim.listFiles()[i].getPath())); - } - } - } - - Compressor.zip(FilesToAdd, zipFilePath, password); - // list of files to process to check move to trash - File[] listFilesToCheck = Claim.listFiles(); - for(int i = 0; i< listFilesToCheck.length; i++){ - if(listFilesToCheck[i].isFile()){ - String fname = listFilesToCheck[i].getName(); - String str; - try{ - str = fname.substring(0,6); - }catch (StringIndexOutOfBoundsException e){ - continue; - } - if(str.equals("Claim_")){ - MoveFileToTrash(listFilesToCheck[i]); - } - if(fname.startsWith("ClaimJSON_")){ - MoveFileToTrash(listFilesToCheck[i]); - } - } - } - - if(FilesToAdd.size() == 0){ - ShowDialog(getResources().getString(R.string.NoClaim)); - }else{ - ShowDialog(getResources().getString(R.string.ZipXMLCreated)); - } - reFreshCount(); - }else{ - ShowDialog(getResources().getString(R.string.NoClaim)); - } - - //Compressor.unzip(zipFilePath, unzippedFolderPath, password); - } - - private void MoveFileToTrash(File file){ - file.renameTo(new File(global.getSubdirectory("Trash"), file.getName())); - } - - public void reFreshCount(){ - File pendingFolder = new File(PendingFolder); - File trashFolder = new File(TrashFolder); - - int count_pending = 0; - int count_trash = 0; - if(pendingFolder.listFiles().length > 0){ - for(int i = 0; i< pendingFolder.listFiles().length; i++){ - String fname = pendingFolder.listFiles()[i].getName(); - String str; - try{ - str = fname.substring(0,6); - }catch (StringIndexOutOfBoundsException e){ - continue; - } - if(str.equals("Claim_")){ - count_pending++; - } - } - }else{ - count_pending = 0; - } - - - if(trashFolder.listFiles().length > 0){ - for(int i = 0; i< trashFolder.listFiles().length; i++){ - String fname = trashFolder.listFiles()[i].getName(); - String str; - try{ - str = fname.substring(0,6); - }catch (StringIndexOutOfBoundsException e){ - continue; - } - if(str.equals("Claim_")){ - count_trash++; - } - } - }else{ - count_trash = 0; - } - - - int total_pending = count_pending; - - tvUploadClaims.setText(String.valueOf(total_pending)); - tvZipClaims.setText(String.valueOf(count_pending)); - - tvUploadClaims.setText(String.valueOf(count_pending)); - tvZipClaims.setText(String.valueOf(count_pending)); - } - -} diff --git a/claimManagement/src/main/java/org/openimis/imisclaims/SynchronizeActivity.java b/claimManagement/src/main/java/org/openimis/imisclaims/SynchronizeActivity.java new file mode 100644 index 00000000..9c92a8ac --- /dev/null +++ b/claimManagement/src/main/java/org/openimis/imisclaims/SynchronizeActivity.java @@ -0,0 +1,109 @@ +package org.openimis.imisclaims; + +import android.app.ProgressDialog; +import android.content.Context; +import android.content.Intent; +import android.os.Bundle; +import android.view.MenuItem; +import android.widget.RelativeLayout; +import android.widget.TextView; + +import java.util.ArrayList; + +public class SynchronizeActivity extends ImisActivity { + ArrayList broadcastList; + + TextView tvUploadClaims, tvZipClaims; + RelativeLayout UploadClaims, zip_claims; + + ProgressDialog pd; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_synchronize); + + if (actionBar != null) { + actionBar.setDisplayHomeAsUpEnabled(true); + } + + broadcastList = new ArrayList<>(); + broadcastList.add(SynchronizeService.ACTION_CLAIM_COUNT_RESULT); + broadcastList.add(SynchronizeService.ACTION_SYNC_SUCCESS); + broadcastList.add(SynchronizeService.ACTION_SYNC_ERROR); + broadcastList.add(SynchronizeService.ACTION_EXPORT_SUCCESS); + broadcastList.add(SynchronizeService.ACTION_EXPORT_ERROR); + + + tvUploadClaims = findViewById(R.id.tvUploadClaims); + tvZipClaims = findViewById(R.id.tvZipClaims); + + UploadClaims = findViewById(R.id.upload_claims); + zip_claims = findViewById(R.id.zip_claims); + + UploadClaims.setOnClickListener(view -> doLoggedIn(this::ConfirmUploadClaims)); + zip_claims.setOnClickListener(view -> ConfirmXMLCreation()); + } + + @Override + public void onResume() { + super.onResume(); + SynchronizeService.getClaimCount(this); + } + + @Override + protected void onBroadcastReceived(Context context, Intent intent) { + String action = intent.getAction(); + if (SynchronizeService.ACTION_CLAIM_COUNT_RESULT.equals(action)) { + tvUploadClaims.setText(String.valueOf(intent.getIntExtra(SynchronizeService.EXTRA_CLAIM_COUNT_PENDING, 0))); + tvZipClaims.setText(String.valueOf(intent.getIntExtra(SynchronizeService.EXTRA_CLAIM_COUNT_PENDING_XML, 0))); + } else { + if (SynchronizeService.ACTION_EXPORT_SUCCESS.equals(action)) { + showDialog(getResources().getString(R.string.ZipXMLCreated)); + } else if (SynchronizeService.ACTION_SYNC_SUCCESS.equals(action)) { + pd.dismiss(); + showDialog(getResources().getString(R.string.BulkUpload)); + } else if (SynchronizeService.ACTION_EXPORT_ERROR.equals(action)) { + String errorMessage = intent.getStringExtra(SynchronizeService.EXTRA_ERROR_MESSAGE); + showDialog(errorMessage); + } else if (SynchronizeService.ACTION_SYNC_ERROR.equals(action)) { + pd.dismiss(); + String errorMessage = intent.getStringExtra(SynchronizeService.EXTRA_ERROR_MESSAGE); + showDialog(errorMessage); + } + SynchronizeService.getClaimCount(this); + } + } + + @Override + protected ArrayList getBroadcastList() { + return broadcastList; + } + + public void ConfirmXMLCreation() { + showDialog(getResources().getString(R.string.AreYouSure), (dialogInterface, i) -> exportClaims(), (dialog, id) -> dialog.cancel()); + } + + public void ConfirmUploadClaims() { + showDialog(getResources().getString(R.string.AreYouSure), (dialogInterface, i) -> uploadClaims(), (dialog, id) -> dialog.cancel()); + } + + public boolean onOptionsItemSelected(MenuItem item) { + onBackPressed(); + return true; + } + + @Override + public void onBackPressed() { + super.onBackPressed(); + } + + public void uploadClaims() { + pd = ProgressDialog.show(this, "", getResources().getString(R.string.Uploading)); + SynchronizeService.uploadClaims(this); + } + + public void exportClaims() { + SynchronizeService.exportClaims(this); + } +} diff --git a/claimManagement/src/main/java/org/openimis/imisclaims/SynchronizeService.java b/claimManagement/src/main/java/org/openimis/imisclaims/SynchronizeService.java new file mode 100644 index 00000000..5e240958 --- /dev/null +++ b/claimManagement/src/main/java/org/openimis/imisclaims/SynchronizeService.java @@ -0,0 +1,281 @@ +package org.openimis.imisclaims; + +import android.app.IntentService; +import android.content.Intent; +import android.content.Context; + +import org.json.JSONArray; +import org.json.JSONException; +import org.json.JSONObject; + +import java.io.File; +import java.io.FilenameFilter; +import java.io.IOException; +import java.net.HttpURLConnection; +import java.text.SimpleDateFormat; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Calendar; +import java.util.Locale; + +import org.apache.http.HttpResponse; + +public class SynchronizeService extends IntentService { + private static final String ACTION_UPLOAD_CLAIMS = "SynchronizeService.ACTION_UPLOAD_CLAIMS"; + private static final String ACTION_EXPORT_CLAIMS = "SynchronizeService.ACTION_EXPORT_CLAIMS"; + private static final String ACTION_CLAIM_COUNT = "SynchronizeService.ACTION_CLAIM_COUNT"; + + public static final String ACTION_SYNC_SUCCESS = "SynchronizeService.ACTION_SYNC_SUCCESS"; + public static final String ACTION_SYNC_ERROR = "SynchronizeService.ACTION_SYNC_ERROR"; + public static final String ACTION_EXPORT_SUCCESS = "SynchronizeService.ACTION_EXPORT_SUCCESS"; + public static final String ACTION_EXPORT_ERROR = "SynchronizeService.ACTION_EXPORT_ERROR"; + public static final String ACTION_CLAIM_COUNT_RESULT = "SynchronizeService.ACTION_CLAIM_COUNT_RESULT"; + + public static final String EXTRA_ERROR_MESSAGE = "SynchronizeService.EXTRA_ERROR_MESSAGE"; + public static final String EXTRA_CLAIM_COUNT_PENDING = "SynchronizeService.EXTRA_CLAIM_COUNT_PENDING"; + public static final String EXTRA_CLAIM_COUNT_PENDING_XML = "SynchronizeService.EXTRA_CLAIM_COUNT_PENDING_XML"; + public static final String EXTRA_CLAIM_COUNT_ACCEPTED = "SynchronizeService.EXTRA_CLAIM_COUNT_ACCEPTED"; + public static final String EXTRA_CLAIM_COUNT_REJECTED = "SynchronizeService.EXTRA_CLAIM_COUNT_REJECTED"; + + private static final String claimJsonPrefix = "ClaimJSON_"; + private static final String claimXmlPrefix = "Claim_"; + + private static class ClaimUploadResult { + public static final int CLAIM_REJECTED = 0; + public static final int CLAIM_ACCEPTED = 1; + public static final int CLAIM_UPLOAD_ERROR = 2; + } + + Global global; + + public SynchronizeService() { + super("SynchronizeService"); + } + + @Override + public void onCreate() { + super.onCreate(); + global = (Global) getApplicationContext(); + } + + public static void uploadClaims(Context context) { + Intent intent = new Intent(context, SynchronizeService.class); + intent.setAction(ACTION_UPLOAD_CLAIMS); + context.startService(intent); + } + + public static void exportClaims(Context context) { + Intent intent = new Intent(context, SynchronizeService.class); + intent.setAction(ACTION_EXPORT_CLAIMS); + context.startService(intent); + } + + public static void getClaimCount(Context context) { + Intent intent = new Intent(context, SynchronizeService.class); + intent.setAction(ACTION_CLAIM_COUNT); + context.startService(intent); + } + + @Override + protected void onHandleIntent(Intent intent) { + if (intent != null) { + final String action = intent.getAction(); + if (ACTION_UPLOAD_CLAIMS.equals(action)) { + handleUploadClaims(); + } else if (ACTION_EXPORT_CLAIMS.equals(action)) { + handleExportClaims(); + } else if (ACTION_CLAIM_COUNT.equals(action)) { + handleGetClaimCount(); + } + } + } + + private void handleUploadClaims() { + ToRestApi toRestApi = new ToRestApi(); + String errorMessage; + + File pendingDirectory = new File(global.getMainDirectory()); + + ArrayList jsonClaims = new ArrayList<>(Arrays.asList(getListOfFilesPrefix(pendingDirectory, claimJsonPrefix))); + + if (jsonClaims.size() < 1) { + broadcastError(ACTION_SYNC_ERROR, getResources().getString(R.string.NoClaim)); + } else if (!global.isNetworkAvailable()) { + broadcastError(ACTION_SYNC_ERROR, getResources().getString(R.string.CheckInternet)); + } else { + boolean errorOccurred = false; + for (File claimFile : jsonClaims) { + String claim = global.getFileText(claimFile); + + JSONObject obj = null; + + try { + JSONObject jo = new JSONObject(claim); + JSONObject jobj = jo.getJSONObject("Claim"); + + JSONObject datailsObj = jobj.getJSONObject("Details"); + JSONArray itemsArray = jobj.getJSONArray("Items"); + JSONArray servicesArray = jobj.getJSONArray("Services"); + + JSONArray itemsArrayRes = new JSONArray(); + for (int k = 0; k < itemsArray.length(); k++) { + itemsArrayRes.put(itemsArray.getJSONObject(k).getJSONObject("Item")); + } + + JSONArray servicesArrayRes = new JSONArray(); + for (int k = 0; k < servicesArray.length(); k++) { + servicesArrayRes.put(servicesArray.getJSONObject(k).getJSONObject("Service")); + } + + obj = new JSONObject(); + obj.put("details", datailsObj); + obj.put("items", itemsArrayRes); + obj.put("services", servicesArrayRes); + + HttpResponse response = toRestApi.postToRestApiToken(obj, "claim"); + + if (response == null) { + errorMessage = getResources().getString(R.string.CheckInternet); + } else { + errorMessage = getErrorMessage(response.getStatusLine().getStatusCode()); + } + + if (!"".equals(errorMessage)) { + broadcastError(ACTION_SYNC_ERROR, errorMessage); + errorOccurred = true; + break; + } else { + String content = toRestApi.getContent(response); + + if (content != null && !"".equals(content)) { + int resInt = Integer.parseInt(content); + + switch (resInt) { + case ClaimUploadResult.CLAIM_ACCEPTED: { + MoveFileToSubdirectory(claimFile, "AcceptedClaims"); + File xmlFile = new File(claimFile.getAbsolutePath().replace(claimJsonPrefix, claimXmlPrefix).replace(".txt", ".xml")); + if (xmlFile.exists()) { + MoveFileToSubdirectory(xmlFile, "AcceptedClaims"); + } + break; + } + case ClaimUploadResult.CLAIM_REJECTED: { + MoveFileToSubdirectory(claimFile, "RejectedClaims"); + File xmlFile = new File(claimFile.getAbsolutePath().replace(claimJsonPrefix, claimXmlPrefix).replace(".txt", ".xml")); + if (xmlFile.exists()) { + MoveFileToSubdirectory(xmlFile, "RejectedClaims"); + } + break; + } + default: { + broadcastError(ACTION_SYNC_ERROR, getResources().getString(R.string.ErrorOccurred)); + errorOccurred = true; + } + } + if (errorOccurred) break; + } + } + + } catch (JSONException e) { + e.printStackTrace(); + broadcastError(ACTION_SYNC_ERROR, e.getMessage()); + errorOccurred = true; + break; + } + } + if (!errorOccurred) { + broadcastSuccess(ACTION_SYNC_SUCCESS); + } + } + } + + private void handleExportClaims() { + File pendingDirectory = new File(global.getMainDirectory()); + SimpleDateFormat format = new SimpleDateFormat("dd-MM-yyyy-HH-mm-ss", Locale.US); + Calendar calendar = Calendar.getInstance(); + String dateForZip = format.format(calendar.getTime()); + + String zipFilePath = global.getMainDirectory() + "/Claims" + "_" + global.getOfficerCode() + "_" + dateForZip + ".zip"; + String password = global.getRarPwd(); + + ArrayList xmlClaims = new ArrayList<>(Arrays.asList(getListOfFilesPrefix(pendingDirectory, claimXmlPrefix))); + ArrayList jsonClaims = new ArrayList<>(Arrays.asList(getListOfFilesPrefix(pendingDirectory, claimJsonPrefix))); + + if (xmlClaims.size() > 0) { + Compressor.zip(xmlClaims, zipFilePath, password); + + for (File f : xmlClaims) { + MoveFileToSubdirectory(f, "Trash"); + } + + for (File f : jsonClaims) { + MoveFileToSubdirectory(f, "Trash"); + } + + broadcastSuccess(ACTION_EXPORT_SUCCESS); + } else { + broadcastError(ACTION_EXPORT_ERROR, getResources().getString(R.string.NoClaim)); + } + } + + private void handleGetClaimCount() { + File pendingDirectory = new File(global.getMainDirectory()); + File acceptedDirectory = new File(global.getSubdirectory("AcceptedClaims")); + File rejectedDirectory = new File(global.getSubdirectory("RejectedClaims")); + + int pendingCount = getFilesCountPrefix(pendingDirectory, claimJsonPrefix); + int pendingXMLCount = getFilesCountPrefix(pendingDirectory, claimXmlPrefix); + int acceptedCount = getFilesCountPrefix(acceptedDirectory, claimJsonPrefix); + int rejectedCount = getFilesCountPrefix(rejectedDirectory, claimJsonPrefix); + + broadcastClaimCount(pendingCount, acceptedCount, rejectedCount, pendingXMLCount); + } + + private String getErrorMessage(int responseCode) { + String errorMessage; + if (responseCode == HttpURLConnection.HTTP_UNAUTHORIZED) { + errorMessage = getResources().getString(R.string.has_no_rights); + } else if (responseCode == HttpURLConnection.HTTP_INTERNAL_ERROR) { + errorMessage = getResources().getString(R.string.SomethingWrongServer); + } else if (responseCode >= 400) { + errorMessage = getResources().getString(R.string.SomethingWrongServer); + } else { + errorMessage = ""; + } + return errorMessage; + } + + private File[] getListOfFilesPrefix(File directory, String prefix) { + FilenameFilter filter = (dir, filename) -> filename.startsWith(prefix); + return directory.listFiles(filter); + } + + private int getFilesCountPrefix(File directory, String prefix) { + File[] listOfFiles = getListOfFilesPrefix(directory, prefix); + return listOfFiles != null ? listOfFiles.length : 0; + } + + private void MoveFileToSubdirectory(File file, String subdirectory) { + file.renameTo(new File(global.getSubdirectory(subdirectory), file.getName())); + } + + private void broadcastSuccess(String action) { + Intent successIntent = new Intent(action); + sendBroadcast(successIntent); + } + + private void broadcastError(String action, String errorMessage) { + Intent errorIntent = new Intent(action); + errorIntent.putExtra(EXTRA_ERROR_MESSAGE, errorMessage); + sendBroadcast(errorIntent); + } + + private void broadcastClaimCount(int pending, int accepted, int rejected, int pendingXml) { + Intent resultIntent = new Intent(ACTION_CLAIM_COUNT_RESULT); + resultIntent.putExtra(EXTRA_CLAIM_COUNT_PENDING, pending); + resultIntent.putExtra(EXTRA_CLAIM_COUNT_ACCEPTED, accepted); + resultIntent.putExtra(EXTRA_CLAIM_COUNT_REJECTED, rejected); + resultIntent.putExtra(EXTRA_CLAIM_COUNT_PENDING_XML, pendingXml); + sendBroadcast(resultIntent); + } +} \ No newline at end of file diff --git a/claimManagement/src/main/java/org/openimis/imisclaims/ToRestApi.java b/claimManagement/src/main/java/org/openimis/imisclaims/ToRestApi.java index 529fd9d7..4f7c652b 100644 --- a/claimManagement/src/main/java/org/openimis/imisclaims/ToRestApi.java +++ b/claimManagement/src/main/java/org/openimis/imisclaims/ToRestApi.java @@ -1,108 +1,102 @@ package org.openimis.imisclaims; -import cz.msebera.android.httpclient.HttpEntity; -import cz.msebera.android.httpclient.HttpResponse; -import cz.msebera.android.httpclient.client.HttpClient; -import cz.msebera.android.httpclient.client.methods.HttpGet; -import cz.msebera.android.httpclient.client.methods.HttpPost; -import cz.msebera.android.httpclient.entity.StringEntity; -import cz.msebera.android.httpclient.impl.client.DefaultHttpClient; -import cz.msebera.android.httpclient.util.EntityUtils; +import android.util.Log; + +import org.apache.http.HttpEntity; +import org.apache.http.HttpResponse; +import org.apache.http.client.HttpClient; +import org.apache.http.client.methods.HttpGet; +import org.apache.http.client.methods.HttpPost; +import org.apache.http.entity.StringEntity; +import org.apache.http.impl.client.DefaultHttpClient; +import org.apache.http.util.EntityUtils; import org.json.JSONObject; import java.io.IOException; -/** - * Created by Hiren on 14/02/2019. - */ +import static org.openimis.imisclaims.BuildConfig.API_BASE_URL; +import static org.openimis.imisclaims.BuildConfig.API_VERSION; public class ToRestApi { - Token tokenl = new Token(); - private String uri = ((Global)Global.getContext()).getDomain() + "api/"; - - //Post without Token - public HttpResponse postToRestApi(final JSONObject object, final String functionName) throws IOException { - HttpResponse response = null; - HttpClient httpClient = new DefaultHttpClient(); - HttpPost httpPost = new HttpPost(uri + functionName); - - StringEntity postingString = new StringEntity(object.toString()); - httpPost.setEntity(postingString); - httpPost.setHeader("Content-type", "application/json"); - response = httpClient.execute(httpPost); - - return response; + private final Token token; + private final String uri; + private final String apiVersion; + + public ToRestApi() { + token = Global.getGlobal().getJWTToken(); + uri = API_BASE_URL + "api/"; + apiVersion = API_VERSION; } - //Post with Token - public HttpResponse postToRestApiToken(final JSONObject object, final String functionName) throws IOException { + public HttpResponse getFromRestApi(String functionName, boolean addToken) { HttpClient httpClient = new DefaultHttpClient(); - HttpPost httpPost = new HttpPost(uri + functionName); - - StringEntity postingString = new StringEntity(object.toString()); - httpPost.setEntity(postingString); - httpPost.setHeader("Content-type", "application/json"); - httpPost.setHeader("Authorization", "bearer " + tokenl.getTokenText()); - - HttpResponse response = null; - response = httpClient.execute(httpPost); - - return response; + HttpGet httpGet = new HttpGet(uri + functionName); + httpGet.setHeader("Content-Type", "application/json"); + httpGet.setHeader("api-version", apiVersion); + if (addToken) { + httpGet.setHeader("Authorization", "bearer " + token.getTokenText().trim()); + } + + try { + HttpResponse response = httpClient.execute(httpGet); + int responseCode = response.getStatusLine().getStatusCode(); + Log.i("HTTP_GET", uri + functionName + " - " + responseCode); + return response; + } catch (IOException e) { + e.printStackTrace(); + return null; + } } - // Post without Token, returned object - public String postObjectToRestApiObjectToken(final JSONObject object, final String functionName) throws IOException { - String content = null; + public HttpResponse postToRestApi(JSONObject object, String functionName, boolean addToken) { HttpClient httpClient = new DefaultHttpClient(); - HttpPost httpPost = new HttpPost(uri + functionName); - StringEntity postingString = new StringEntity(object.toString()); - httpPost.setEntity(postingString); + HttpPost httpPost = new HttpPost(uri + functionName); httpPost.setHeader("Content-type", "application/json"); - httpPost.setHeader("Authorization", "bearer " + tokenl.getTokenText()); - - HttpResponse response = null; - response = httpClient.execute(httpPost); - - HttpEntity respEntity = (response!=null)?response.getEntity():null; - - content = (respEntity!=null)?EntityUtils.toString(respEntity):null; - - return content; + httpPost.setHeader("api-version", apiVersion); + if (addToken) { + httpPost.setHeader("Authorization", "bearer " + token.getTokenText().trim()); + } + + try { + StringEntity postingString = new StringEntity(object.toString()); + httpPost.setEntity(postingString); + HttpResponse response = httpClient.execute(httpPost); + int responseCode = response.getStatusLine().getStatusCode(); + Log.i("HTTP_POST", uri + functionName + " - " + responseCode); + return response; + } catch (IOException e) { + e.printStackTrace(); + return null; + } } - // Get without Token - public String getFromRestApi(final String functionName) throws IOException { - String content = null; - HttpClient httpClient = new DefaultHttpClient(); - HttpGet httpGet = new HttpGet(uri+functionName); - httpGet.setHeader("Content-type", "application/json"); - - HttpResponse response = null; - response = httpClient.execute(httpGet); - - HttpEntity respEntity = (response!=null)?response.getEntity():null; - - content = (respEntity!=null)?EntityUtils.toString(respEntity):null; - - return content; + public HttpResponse postToRestApi(JSONObject object, String functionName) { + return postToRestApi(object, functionName, false); } - // Get with Token, returned object - public String getObjectFromRestApiToken(final String functionName) throws IOException{ - String content = null; - HttpClient httpClient = new DefaultHttpClient(); - HttpGet httpGet = new HttpGet(uri + functionName); - httpGet.setHeader("Content-type", "application/json"); - httpGet.setHeader("Authorization", "bearer " + tokenl.getTokenText()); + public HttpResponse postToRestApiToken(JSONObject object, String functionName) { + return postToRestApi(object, functionName, true); + } - HttpResponse response = null; - response = httpClient.execute(httpGet); + public String getFromRestApi(String functionName) { + HttpResponse response = getFromRestApi(functionName, false); + return getContent(response); + } - HttpEntity respEntity = (response!=null)?response.getEntity():null; + public String getFromRestApiToken(String functionName) { + HttpResponse response = getFromRestApi(functionName, true); + return getContent(response); - content = (respEntity!=null)?EntityUtils.toString(respEntity):null; + } - return content; + public String getContent(HttpResponse response) { + try { + HttpEntity respEntity = (response != null) ? response.getEntity() : null; + return (respEntity != null) ? EntityUtils.toString(respEntity) : null; + } catch (IOException e) { + e.printStackTrace(); + return null; + } } } diff --git a/claimManagement/src/main/java/org/openimis/imisclaims/Token.java b/claimManagement/src/main/java/org/openimis/imisclaims/Token.java index 8aa049db..f40c6bc9 100644 --- a/claimManagement/src/main/java/org/openimis/imisclaims/Token.java +++ b/claimManagement/src/main/java/org/openimis/imisclaims/Token.java @@ -1,62 +1,90 @@ package org.openimis.imisclaims; -import android.os.Environment; +import android.util.Base64; -import java.io.BufferedReader; -import java.io.File; -import java.io.FileInputStream; -import java.io.FileOutputStream; -import java.io.IOException; -import java.io.InputStreamReader; -import java.io.OutputStreamWriter; +import org.json.JSONException; +import org.json.JSONObject; -/** - * Created by Hiren on 15/02/2019. - */ +import java.io.File; +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.util.Date; +import java.util.Locale; public class Token { - public void saveTokenText(String token) { - if (!Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) { - //handle case of no SDCARD present + public void saveTokenText(String token, String validTo) { + Global global = Global.getGlobal(); + String dir = global.getSubdirectory("Authentications"); + + File tokenFile = new File(dir, "token.txt"); + File validToFile = new File(dir, "validTo.txt"); + + global.writeText(tokenFile, token); + global.writeText(validToFile, validTo); + } + + public String getTokenText() { + String token = ""; + + Global global = Global.getGlobal(); + String dir = global.getSubdirectory("Authentications"); + + if (isTokenValidJWT()) { + token = global.getFileText(dir, "token.txt"); } else { - //create folder - Global global = (Global)Global.getContext(); - String dir = global.getSubdirectory("Authentications"); - - //create file - File file = new File(dir, "token.txt"); - try { - if (file.exists()) { - file.delete(); - } - if (file.createNewFile()) { - FileOutputStream fOut = new FileOutputStream(file); - OutputStreamWriter myOutWriter = new OutputStreamWriter(fOut); - myOutWriter.append(token); - myOutWriter.close(); - fOut.close(); - } - } catch (Exception e) { - e.printStackTrace(); - } + clearToken(); } + + return token; } - public String getTokenText(){ - String aBuffer = ""; + public void clearToken() { + saveTokenText("", ""); + } + + //How to validate JWT: + //https://datatracker.ietf.org/doc/html/rfc7519#section-7.2 + public boolean isTokenValidJWT() { + Global global = Global.getGlobal(); + String dir = global.getSubdirectory("Authentications"); + + String validTo = global.getFileText(dir, "validTo.txt"); + String token = global.getFileText(dir, "token.txt"); + + if (token == null || "".equals(token)) + return false; + + int indexOfFirstDot = token.indexOf('.'); + if (indexOfFirstDot == -1) + return false; + + String tokenHeader = token.substring(0, indexOfFirstDot); + try { + JSONObject headerObject = new JSONObject(new String(Base64.decode(tokenHeader, Base64.DEFAULT))); + if (!"JWT".equals(headerObject.getString("typ"))) { + return false; + } + } catch (JSONException e) { + return false; + } + + if (validTo == null || "".equals(validTo)) { + return false; + } + try { - Global global = (Global)Global.getContext(); - String dir = global.getSubdirectory("Authentications"); - File myFile = new File(dir, "token.txt"); - if (myFile.exists()) { - FileInputStream fIn = new FileInputStream(myFile); - BufferedReader myReader = new BufferedReader(new InputStreamReader(fIn)); - aBuffer = myReader.readLine(); - myReader.close(); + SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSSSSSXXX", Locale.US); + Date expiryDate = format.parse(validTo); + Date now = new Date(); + + if (now.after(expiryDate)) { + return false; } - } catch (IOException e) { + } catch (ParseException | NullPointerException e) { e.printStackTrace(); } - return aBuffer; + + return true; } } + diff --git a/claimManagement/src/main/res/layout/activity_search_claims.xml b/claimManagement/src/main/res/layout/activity_search_claims.xml index 106b705d..016ec8f5 100644 --- a/claimManagement/src/main/res/layout/activity_search_claims.xml +++ b/claimManagement/src/main/res/layout/activity_search_claims.xml @@ -5,7 +5,7 @@ android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" - tools:context="org.openimis.imisclaims.SearchClaims"> + tools:context="org.openimis.imisclaims.SearchClaimsActivity">