Passcode Functionality completed
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index dfb8082..d28cf45 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -31,14 +31,18 @@
                 android:resource="@xml/filepaths" />
         </provider>
 
-        <activity android:name=".ui.online.SplashActivity" android:theme="@style/SplashTheme">
+        <activity
+            android:name=".ui.online.SplashActivity"
+            android:theme="@style/SplashTheme">
             <intent-filter>
                 <action android:name="android.intent.action.MAIN" />
                 <category android:name="android.intent.category.LAUNCHER" />
             </intent-filter>
         </activity>
 
-        <activity android:name=".ui.online.launcher.LauncherActivity"/>
+        <activity android:name=".ui.online.launcher.LauncherActivity" />
+
+        <activity android:name=".ui.online.PassCodeActivity" />
 
         <activity
             android:name=".ui.online.login.LoginActivity"
@@ -50,7 +54,7 @@
 
         <activity android:name=".ui.online.customers.customerpayroll.PayrollActivity" />
 
-        <activity android:name=".ui.online.customers.customerpayroll.editcustomerpayroll.EditPayrollActivity"/>
+        <activity android:name=".ui.online.customers.customerpayroll.editcustomerpayroll.EditPayrollActivity" />
 
         <activity android:name=".ui.online.depositaccounts.depositaccountslist.DepositAccountsActivity" />
 
diff --git a/app/src/main/java/org/apache/fineract/FineractApplication.java b/app/src/main/java/org/apache/fineract/FineractApplication.java
index f9bd6a4..de32205 100644
--- a/app/src/main/java/org/apache/fineract/FineractApplication.java
+++ b/app/src/main/java/org/apache/fineract/FineractApplication.java
@@ -5,6 +5,7 @@
 
 import com.crashlytics.android.Crashlytics;
 import com.evernote.android.job.JobManager;
+import com.mifos.mobile.passcode.utils.ForegroundChecker;
 import com.raizlabs.android.dbflow.config.FlowManager;
 
 import org.apache.fineract.injection.component.ApplicationComponent;
@@ -35,6 +36,7 @@
         instance = this;
         Fabric.with(this, new Crashlytics());
         FlowManager.init(this);
+        ForegroundChecker.init(this);
     }
 
     public static Context getContext() {
diff --git a/app/src/main/java/org/apache/fineract/ui/base/FineractBaseActivity.java b/app/src/main/java/org/apache/fineract/ui/base/FineractBaseActivity.java
index f40b697..e4d953e 100644
--- a/app/src/main/java/org/apache/fineract/ui/base/FineractBaseActivity.java
+++ b/app/src/main/java/org/apache/fineract/ui/base/FineractBaseActivity.java
@@ -6,18 +6,20 @@
 import androidx.fragment.app.Fragment;
 import androidx.fragment.app.FragmentManager;
 import androidx.fragment.app.FragmentTransaction;
-import androidx.appcompat.app.AppCompatActivity;
 import androidx.appcompat.widget.Toolbar;
 import android.view.MenuItem;
 import android.view.View;
 import android.view.inputmethod.InputMethodManager;
 
+import com.mifos.mobile.passcode.BasePassCodeActivity;
+
 import org.apache.fineract.FineractApplication;
 import org.apache.fineract.R;
 import org.apache.fineract.injection.component.ActivityComponent;
 import org.apache.fineract.injection.component.ConfigPersistentComponent;
 import org.apache.fineract.injection.component.DaggerConfigPersistentComponent;
 import org.apache.fineract.injection.module.ActivityModule;
+import org.apache.fineract.ui.online.PassCodeActivity;
 
 import java.util.HashMap;
 import java.util.Map;
@@ -29,7 +31,7 @@
  * creation of Dagger components and makes sure that instances of ConfigPersistentComponent survive
  * across configuration changes.
  */
-public class FineractBaseActivity extends AppCompatActivity implements BaseActivityCallback {
+public class FineractBaseActivity extends BasePassCodeActivity implements BaseActivityCallback {
 
     private static final String KEY_ACTIVITY_ID = "KEY_ACTIVITY_ID";
     private static final AtomicLong NEXT_ID = new AtomicLong(0);
@@ -187,4 +189,9 @@
     public int stackCount() {
         return getSupportFragmentManager().getBackStackEntryCount();
     }
+
+    @Override
+    public Class getPassCodeClass() {
+        return PassCodeActivity.class;
+    }
 }
diff --git a/app/src/main/java/org/apache/fineract/ui/online/PassCodeActivity.kt b/app/src/main/java/org/apache/fineract/ui/online/PassCodeActivity.kt
new file mode 100644
index 0000000..9cbbf84
--- /dev/null
+++ b/app/src/main/java/org/apache/fineract/ui/online/PassCodeActivity.kt
@@ -0,0 +1,44 @@
+package org.apache.fineract.ui.online
+
+import android.content.Intent
+import android.os.Bundle
+import android.os.PersistableBundle
+import android.view.View
+import com.mifos.mobile.passcode.MifosPassCodeActivity
+import com.mifos.mobile.passcode.utils.EncryptionUtil
+import org.apache.fineract.R
+import org.apache.fineract.ui.base.Toaster
+import org.apache.fineract.ui.online.login.LoginActivity
+
+
+/*
+ * Created by saksham on 12/June/2019
+*/
+
+class PassCodeActivity : MifosPassCodeActivity() {
+
+    override fun onCreate(savedInstanceState: Bundle?, persistentState: PersistableBundle?) {
+        super.onCreate(savedInstanceState, persistentState)
+    }
+
+    override fun showToaster(view: View?, msg: Int) {
+        Toaster.show(view, msg, Toaster.SHORT)
+    }
+
+    override fun startLoginActivity() {
+        startActivity(Intent(this, LoginActivity::class.java))
+        finish()
+    }
+
+    override fun getLogo(): Int {
+        return R.drawable.mifos_logo_new
+    }
+
+    override fun getEncryptionType(): Int {
+        return EncryptionUtil.FINERACT_CN
+    }
+
+    override fun startNextActivity() {
+        startActivity(Intent(this, DashboardActivity::class.java))
+    }
+}
\ No newline at end of file
diff --git a/app/src/main/java/org/apache/fineract/ui/online/SplashActivity.kt b/app/src/main/java/org/apache/fineract/ui/online/SplashActivity.kt
index a336dc0..b85c9df 100644
--- a/app/src/main/java/org/apache/fineract/ui/online/SplashActivity.kt
+++ b/app/src/main/java/org/apache/fineract/ui/online/SplashActivity.kt
@@ -14,5 +14,6 @@
     override fun onCreate(savedInstanceState: Bundle?) {
         super.onCreate(savedInstanceState)
         startActivity(Intent(this, LauncherActivity::class.java))
+        finish()
     }
 }
\ No newline at end of file
diff --git a/app/src/main/java/org/apache/fineract/ui/online/launcher/LauncherActivity.java b/app/src/main/java/org/apache/fineract/ui/online/launcher/LauncherActivity.java
index f36c304..07a4403 100644
--- a/app/src/main/java/org/apache/fineract/ui/online/launcher/LauncherActivity.java
+++ b/app/src/main/java/org/apache/fineract/ui/online/launcher/LauncherActivity.java
@@ -3,12 +3,14 @@
 import android.content.Intent;
 import android.os.Bundle;
 
+import com.mifos.mobile.passcode.utils.PassCodeConstants;
+
 import org.apache.fineract.R;
 import org.apache.fineract.data.local.PreferenceKey;
 import org.apache.fineract.data.local.PreferencesHelper;
 import org.apache.fineract.data.models.Authentication;
 import org.apache.fineract.ui.base.FineractBaseActivity;
-import org.apache.fineract.ui.online.DashboardActivity;
+import org.apache.fineract.ui.online.PassCodeActivity;
 import org.apache.fineract.ui.online.login.LoginActivity;
 import org.apache.fineract.utils.DateUtils;
 
@@ -46,18 +48,19 @@
             if (DateUtils.isTokenExpired(authentication.getAccessTokenExpiration())) {
                 checkRefreshAccessToken();
             } else {
-                startActivity(DashboardActivity.class);
+                startPasscodeActivity();
             }
         } else {
-            startActivity(LoginActivity.class);
+            startLoginActivity();
         }
+        finish();
     }
 
     @Override
     public void checkRefreshAccessToken() {
         Authentication authentication = preferencesHelper.getSignedInUser();
         if (DateUtils.isTokenExpired(authentication.getRefreshTokenExpiration())) {
-            startActivity(LoginActivity.class);
+            startLoginActivity();
         } else {
             //Refresh access token
             preferencesHelper.putBoolean(PreferenceKey.PREF_KEY_REFRESH_ACCESS_TOKEN, true);
@@ -66,24 +69,30 @@
     }
 
     @Override
-    public void startActivity(Class aClass) {
-        Intent intent = new Intent(this, aClass);
+    public void startLoginActivity() {
+        Intent intent = new Intent(this, LoginActivity.class);
         startActivity(intent);
         finish();
     }
 
+    public void startPasscodeActivity() {
+        Intent intent = new Intent(this, PassCodeActivity.class);
+        intent.putExtra(PassCodeConstants.PASSCODE_INITIAL_LOGIN, true);
+        startActivity(intent);
+    }
+
     @Override
     public void refreshAccessTokenSuccessfully(Authentication authentication) {
         preferencesHelper.putBoolean(PreferenceKey.PREF_KEY_REFRESH_ACCESS_TOKEN, false);
         preferencesHelper.putAccessToken(authentication.getAccessToken());
         preferencesHelper.putSignInUser(authentication);
-        startActivity(DashboardActivity.class);
+        startPasscodeActivity();
     }
 
     @Override
     public void refreshAccessTokenFailed() {
         clearCredentials();
-        startActivity(LoginActivity.class);
+        startLoginActivity();
     }
 
     @Override
diff --git a/app/src/main/java/org/apache/fineract/ui/online/launcher/LauncherContract.java b/app/src/main/java/org/apache/fineract/ui/online/launcher/LauncherContract.java
index 694f633..97e2bfa 100644
--- a/app/src/main/java/org/apache/fineract/ui/online/launcher/LauncherContract.java
+++ b/app/src/main/java/org/apache/fineract/ui/online/launcher/LauncherContract.java
@@ -15,7 +15,9 @@
 
         void checkRefreshAccessToken();
 
-        void startActivity(Class aClass);
+        void startLoginActivity();
+
+        void startPasscodeActivity();
 
         void refreshAccessTokenSuccessfully(Authentication authentication);
 
diff --git a/app/src/main/java/org/apache/fineract/ui/online/login/LoginActivity.java b/app/src/main/java/org/apache/fineract/ui/online/login/LoginActivity.java
index 9956991..cb8683d 100644
--- a/app/src/main/java/org/apache/fineract/ui/online/login/LoginActivity.java
+++ b/app/src/main/java/org/apache/fineract/ui/online/login/LoginActivity.java
@@ -6,12 +6,14 @@
 import android.widget.EditText;
 import android.widget.Toast;
 
+import com.mifos.mobile.passcode.utils.PassCodeConstants;
+
 import org.apache.fineract.R;
 import org.apache.fineract.data.local.PreferencesHelper;
 import org.apache.fineract.data.models.Authentication;
 import org.apache.fineract.ui.base.FineractBaseActivity;
 import org.apache.fineract.ui.base.Toaster;
-import org.apache.fineract.ui.online.DashboardActivity;
+import org.apache.fineract.ui.online.PassCodeActivity;
 
 import javax.inject.Inject;
 
@@ -83,7 +85,9 @@
         preferencesHelper.putAccessToken(user.getAccessToken());
         preferencesHelper.putSignInUser(user);
         preferencesHelper.putUserName(etUsername.getEditableText().toString().trim());
-        startActivity(new Intent(this, DashboardActivity.class));
+        Intent intent = new Intent(this, PassCodeActivity.class);
+        intent.putExtra(PassCodeConstants.PASSCODE_INITIAL_LOGIN, true);
+        startActivity(intent);
         finish();
         Toast.makeText(this, getString(R.string.welcome), Toast.LENGTH_LONG).show();
     }