diff --git a/app/build.gradle b/app/build.gradle
index 2135c835..edb798e7 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -21,7 +21,7 @@ static def getDate() {
}
android {
- compileSdk 34
+ compileSdk = 36
namespace = "org.openimis.imispolicies"
if (keystorePropertiesFile.exists()) {
signingConfigs {
@@ -35,7 +35,7 @@ android {
}
defaultConfig {
applicationId "org.openimis.imispolicies"
- minSdkVersion 21
+ minSdkVersion 26
targetSdkVersion 33
versionCode gitVersionCode
versionName gitVersionName
@@ -240,6 +240,7 @@ dependencies {
implementation 'androidx.recyclerview:recyclerview:1.3.2'
implementation 'org.apache.commons:commons-lang3:3.12.0'
implementation 'cz.msebera.android:httpclient:4.5.8'
+ implementation 'androidx.activity:activity:1.11.0'
androidTestImplementation('androidx.test.espresso:espresso-core:3.1.0', {
exclude group: 'com.android.support', module: 'support-annotations'
diff --git a/app/src/localeMv/res/values-fr/strings.xml b/app/src/localeMv/res/values-fr/strings.xml
index 11d2d761..54f0e0fe 100644
--- a/app/src/localeMv/res/values-fr/strings.xml
+++ b/app/src/localeMv/res/values-fr/strings.xml
@@ -482,4 +482,6 @@
Cash
Téléphone portable
Virement banquaire
+ Champs requis
+ Connexion
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 5a88ad6d..5d4ea82e 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -49,6 +49,10 @@
android:theme="@style/AppTheme"
tools:ignore="GoogleAppIndexingWarning"
tools:replace="android:icon,android:label">
+
+
diff --git a/app/src/main/java/org/openimis/imispolicies/MainActivity.java b/app/src/main/java/org/openimis/imispolicies/MainActivity.java
index 9298d82a..7dc234cf 100644
--- a/app/src/main/java/org/openimis/imispolicies/MainActivity.java
+++ b/app/src/main/java/org/openimis/imispolicies/MainActivity.java
@@ -307,7 +307,14 @@ public void onReceivedTitle(WebView view, String title) {
OfficerName = headerview.findViewById(R.id.tvOfficerName);
Login.setOnClickListener(v -> {
- wv.loadUrl("file:///android_asset/pages/Login.html?s=3");
+ if(ca.isLoggedIn()) {
+ global.setOfficerCode("");
+ global.setOfficerName("");
+ ca.Logout();
+ }
+ Intent intent = new Intent(this, Signing.class);
+ intent.putExtra("page", 3);
+ startActivity(intent);
drawer.closeDrawer(GravityCompat.START);
SetLoggedIn();
});
@@ -742,7 +749,10 @@ public boolean onNavigationItemSelected(MenuItem item) {
Intent intent = new Intent(this, Enquire.class);
startActivity(intent);
} else {
- wv.loadUrl("file:///android_asset/pages/Login.html?s=5");
+ Intent intent = new Intent(this, Signing.class);
+ intent.putExtra("page", 5);
+ startActivity(intent);
+ //wv.loadUrl("file:///android_asset/pages/Login.html?s=5");
}
} else if (id == R.id.nav_payment) {
ClientAndroidInterface ca = new ClientAndroidInterface(this);
diff --git a/app/src/main/java/org/openimis/imispolicies/Signing.java b/app/src/main/java/org/openimis/imispolicies/Signing.java
new file mode 100644
index 00000000..5ecb1795
--- /dev/null
+++ b/app/src/main/java/org/openimis/imispolicies/Signing.java
@@ -0,0 +1,128 @@
+package org.openimis.imispolicies;
+
+import android.annotation.SuppressLint;
+import android.app.ProgressDialog;
+import android.content.Intent;
+import android.os.AsyncTask;
+import android.os.Bundle;
+import android.view.View;
+import android.view.Window;
+import android.view.WindowManager;
+import android.webkit.WebSettings;
+import android.webkit.WebView;
+import android.widget.Button;
+import android.widget.EditText;
+import android.widget.TextView;
+
+import androidx.activity.EdgeToEdge;
+import androidx.annotation.NonNull;
+import androidx.appcompat.app.ActionBar;
+import androidx.appcompat.app.AppCompatActivity;
+import androidx.appcompat.widget.Toolbar;
+import androidx.core.content.ContextCompat;
+import androidx.core.graphics.Insets;
+import androidx.core.view.ViewCompat;
+import androidx.core.view.WindowInsetsCompat;
+
+import com.google.android.material.progressindicator.CircularProgressIndicator;
+
+import org.openimis.imispolicies.tools.Log;
+import org.openimis.imispolicies.usecase.Login;
+
+public class Signing extends AppCompatActivity {
+
+ private EditText etLogin, etPassword;
+ private Button btnLogin;
+ private TextView tvError;
+ protected ProgressDialog progressDialog;
+ private CircularProgressIndicator cp;
+ private int page = 0;
+
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ EdgeToEdge.enable(this);
+ setContentView(R.layout.activity_signing);
+ Window window = getWindow();
+ window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
+ window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
+ window.setStatusBarColor(ContextCompat.getColor(this, R.color.colorPrimary));
+ if (getSupportActionBar() != null) {
+ getSupportActionBar().setTitle(getResources().getString(R.string.Login));
+ getSupportActionBar().setDisplayHomeAsUpEnabled(true);
+ }
+ Intent intent = getIntent();
+ page = intent.getIntExtra("page", 0);
+
+ etLogin = findViewById(R.id.etLogin);
+ etPassword = findViewById(R.id.etPassword);
+ btnLogin = findViewById(R.id.btnSignIn);
+ tvError = findViewById(R.id.tvLoginError);
+ cp = findViewById(R.id.cp_load_login);
+ tvError.setEnabled(false);
+ cp.setIndeterminate(false);
+
+ btnLogin.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View view) {
+ if(isFormValid()){
+ etLogin.setBackground(getDrawable(R.drawable.edit_text));
+ etPassword.setBackground(getDrawable(R.drawable.edit_text));
+ tvError.setText("");
+ String username = etLogin.getText().toString().trim();
+ String password = etPassword.getText().toString().trim();
+ cp.setIndeterminate(true);
+ Thread thread = new Thread(){
+ @Override
+ public void run() {
+ try{
+ new Login().execute(username, password);
+ runOnUiThread(() -> {
+ MainActivity.SetLoggedIn();
+ if(page == 5){
+ Intent intent = new Intent(Signing.this , Enquire.class);
+ startActivity(intent);
+ finish();
+ } else {
+ finish();
+ }
+ });
+ } catch (Exception e){
+ e.printStackTrace();
+ runOnUiThread(()->{
+ cp.setIndeterminate(false);
+ tvError.setText(getResources().getString(R.string.LoginFail));
+ });
+ }
+ }
+ };
+ thread.start();
+ }
+ }
+ });
+ }
+
+ @Override
+ public boolean onSupportNavigateUp() {
+ finish();
+ return true;
+ }
+
+ private boolean isFormValid(){
+ if(etLogin.getText().toString().trim().isEmpty() || etPassword.getText().toString().trim().isEmpty()){
+ tvError.setText(getResources().getString(R.string.fieldRequired));
+ if(etLogin.getText().toString().trim().isEmpty()){
+ etLogin.setBackground(getDrawable(R.drawable.edit_text_error));
+ }else{
+ etLogin.setBackground(getDrawable(R.drawable.edit_text));
+ }
+ if(etPassword.getText().toString().trim().isEmpty()) {
+ etPassword.setBackground(getDrawable(R.drawable.edit_text_error));
+ }else{
+ etPassword.setBackground(getDrawable(R.drawable.edit_text));
+ }
+ return false;
+ }
+ return true;
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/org/openimis/imispolicies/usecase/Login.java b/app/src/main/java/org/openimis/imispolicies/usecase/Login.java
index a142fc34..260901b7 100644
--- a/app/src/main/java/org/openimis/imispolicies/usecase/Login.java
+++ b/app/src/main/java/org/openimis/imispolicies/usecase/Login.java
@@ -53,6 +53,9 @@ public Login(
@WorkerThread
public void execute(@NonNull String username, @NonNull String password) throws Exception {
+ if (Global.getGlobal().getOfficerCode() == null) {
+ Global.getGlobal().setOfficerCode(username);
+ }
String officerCode = Global.getGlobal().getOfficerCode();
if (officerCode == null) {
throw new IllegalStateException("OfficerCode should not be null on login");
diff --git a/app/src/main/res/drawable/button.xml b/app/src/main/res/drawable/button.xml
new file mode 100644
index 00000000..d3b12430
--- /dev/null
+++ b/app/src/main/res/drawable/button.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/edit_text.xml b/app/src/main/res/drawable/edit_text.xml
new file mode 100644
index 00000000..4a60d8d9
--- /dev/null
+++ b/app/src/main/res/drawable/edit_text.xml
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/edit_text_error.xml b/app/src/main/res/drawable/edit_text_error.xml
new file mode 100644
index 00000000..c8ab795a
--- /dev/null
+++ b/app/src/main/res/drawable/edit_text_error.xml
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/ic_eye.xml b/app/src/main/res/drawable/ic_eye.xml
new file mode 100644
index 00000000..63fc10d1
--- /dev/null
+++ b/app/src/main/res/drawable/ic_eye.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
diff --git a/app/src/main/res/layout/activity_signing.xml b/app/src/main/res/layout/activity_signing.xml
new file mode 100644
index 00000000..2af97ebb
--- /dev/null
+++ b/app/src/main/res/layout/activity_signing.xml
@@ -0,0 +1,79 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index ee5e65a1..71d20629 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -483,4 +483,6 @@
Cash
Mobile Phone
Bank Transfer
+ Field required
+ Connecting
diff --git a/app/src/main/res/values/styles.xml b/app/src/main/res/values/styles.xml
index 9dcb2b92..21cad60c 100644
--- a/app/src/main/res/values/styles.xml
+++ b/app/src/main/res/values/styles.xml
@@ -7,7 +7,8 @@
- @color/colorPrimaryDark
- @color/colorAccent
- - @color/colorPrimary
+ - @color/grey
+ - @color/colorPrimary