diff --git a/.github/workflows/feature_branch_ci.yml b/.github/workflows/feature_branch_ci.yml
new file mode 100644
index 0000000000..7dcf639542
--- /dev/null
+++ b/.github/workflows/feature_branch_ci.yml
@@ -0,0 +1,34 @@
+name: Workflow for feature branches
+
+on:
+ push:
+ branches:
+ - '*'
+ - '!development'
+ - '!master'
+
+jobs:
+ build:
+ name: Build APK
+ runs-on: ubuntu-latest
+ steps:
+ - name: Checking out repository
+ uses: actions/checkout@v2
+
+ # Set up JDK
+ - name: Set Up JDK 1.8
+ uses: actions/setup-java@v1
+ with:
+ java-version: 1.8
+
+ # Install NDK
+ - name: Install NDK
+ run: echo "y" | sudo ${ANDROID_HOME}/tools/bin/sdkmanager --install "ndk;20.0.5594570" --sdk_root=${ANDROID_SDK_ROOT}
+
+ # Update Gradle Permission
+ - name: Change gradlew Permission
+ run: chmod +x gradlew
+
+ # Build App
+ - name: Build with Gradle
+ run: ./gradlew assemble
\ No newline at end of file
diff --git a/.github/workflows/master_dev_ci.yml b/.github/workflows/master_dev_ci.yml
new file mode 100644
index 0000000000..4351df81c3
--- /dev/null
+++ b/.github/workflows/master_dev_ci.yml
@@ -0,0 +1,75 @@
+name: Workflow for master/development branches
+
+on:
+ pull_request:
+ push:
+ branches:
+ - 'development'
+ - 'master'
+
+jobs:
+ build:
+ name: Build APK
+ runs-on: ubuntu-latest
+ steps:
+ - name: Checking out repository
+ uses: actions/checkout@v2
+
+ # Set up JDK
+ - name: Set Up JDK 1.8
+ uses: actions/setup-java@v1
+ with:
+ java-version: 1.8
+
+ # Install NDK
+ - name: Install NDK
+ run: echo "y" | sudo ${ANDROID_HOME}/tools/bin/sdkmanager --install "ndk;20.0.5594570" --sdk_root=${ANDROID_SDK_ROOT}
+
+ # Update Gradle Permission
+ - name: Change gradlew Permission
+ run: chmod +x gradlew
+
+ # Build App
+ - name: Build with Gradle
+ run: ./gradlew assemble
+
+ # Upload Built APK
+ - name: Upload Build Artifacts
+ uses: actions/upload-artifact@v2.2.0
+ with:
+ name: mifos-mobile
+ path: app/build/outputs/apk/debug/
+
+ lintCheck:
+ name: Static Analysis
+ runs-on: ubuntu-latest
+ steps:
+ - name: Checking out repository
+ uses: actions/checkout@v2
+
+ - name: Static Analysis
+ run: ./gradlew lint
+
+ - name: Upload Static Analysis Report For Mifos-Mobile Module
+ uses: actions/upload-artifact@v2.2.0
+ if: failure()
+ with:
+ name: Static Analysis Report
+ path: app/build/reports/
+
+ pmd:
+ name: PMD
+ runs-on: ubuntu-latest
+ steps:
+ - name: Checking out repository
+ uses: actions/checkout@v2
+
+ - name: PMD Check
+ run: ./gradlew pmd
+
+ - name: Upload PMD Report
+ uses: actions/upload-artifact@v2.2.0
+ if: failure()
+ with:
+ name: PMD Report
+ path: app/build/reports/
\ No newline at end of file
diff --git a/.travis.yml b/.travis.yml
deleted file mode 100644
index 8bc1e32d59..0000000000
--- a/.travis.yml
+++ /dev/null
@@ -1,31 +0,0 @@
-language: android
-jdk: oraclejdk8
-sudo: required
-android:
- components:
- - tools
- - extra-android-support
- - extra-google-google_play_services
- - extra-android-m2repository
- - extra-google-m2repository
- - build-tools-28.0.3
- - android-28
- - android-22
- - sys-img-armeabi-v7a-android-22
-
-before_script:
- - echo no | android create avd --force -n test -t android-22 --abi armeabi-v7a
- - emulator -avd test -no-skin -no-audio -no-window &
- - android-wait-for-emulator
- - adb shell input keyevent 82 &
-
-script: "./gradlew build connectedAndroidTest --stacktrace"
-
-# gitter integration
-notifications:
- webhooks:
- urls:
- - https://webhooks.gitter.im/e/6c1aa14ed3a3ccb5bc92
- on_success: change # options: [always|never|change] default: always
- on_failure: always # options: [always|never|change] default: always
- on_start: never # options: [always|never|change] default: always
\ No newline at end of file
diff --git a/README.md b/README.md
index 011a5d27cd..6568587f9f 100644
--- a/README.md
+++ b/README.md
@@ -2,13 +2,13 @@
# Mifos-Mobile Android Application for MifosX
-An Android Application built on top of the MifosX Self-Service platform for end-user customers to view/transact on the accounts and loans they hold. Data visible to customers will be a sub-set of what staff can see. This is a native Android Application written in Java with POJO classes in Kotlin.
+An Android Application built on top of the MifosX Self-Service platform for end-user customers to view/transact on the accounts and loans they hold. Data visible to customers will be a sub-set of what staff can see. This is a native Android Application written in Kotlin.
### Status
-[](https://gitter.im/openMF/self-service-app?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge)
-[](https://travis-ci.org/openMF/mifos-mobile)
-
+| Master | Development | Chat |
+|------------|-----------------|-----------------|
+| ![Mifos-Mobile CI[Master/Dev]](https://github.com/openMF/mifos-mobile/workflows/Mifos-Mobile%20CI%5BMaster/Dev%5D/badge.svg?branch=master) | ![Mifos-Mobile CI[Master/Dev]](https://github.com/openMF/mifos-mobile/workflows/Mifos-Mobile%20CI%5BMaster/Dev%5D/badge.svg?branch=development) |[](https://gitter.im/openMF/self-service-app?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge)|
## Screenshots
@@ -29,7 +29,7 @@ We have the following branches :
* **development**
All the contributions should be pushed to this branch. If you're making a contribution,
you are supposed to make a pull request to _development_.
- Please make sure it passes a build check on Travis.
+ Please make sure it passes a build check on Github Workflows CI.
It is advisable to clone only the development branch using the following command:
@@ -42,6 +42,12 @@ We have the following branches :
* **master**
The master branch contains all the stable and bug-free working code. The development branch once complete will be merged with this branch.
+To get the latest apk of master/development branch from Github Artifacts, follow these steps:
+1. Go to to the [Actions](https://github.com/openMF/mifos-mobile/actions) tab of this repository.
+2. Select the latest workflow for master/development branch.
+3. Click on hyperlink 'mifos-mobile' in Artifacts section.
+4. Extract the downloaded file and get the apk.
+
## Development Setup
Before you begin, you should have already downloaded the Android Studio SDK and set it up correctly. You can find a guide on how to do this here: [Setting up Android Studio](http://developer.android.com/sdk/installing/index.html?pkg=studio).
@@ -68,3 +74,6 @@ View the [wiki](https://github.com/openMF/self-service-app/wiki) to see pages th
See the [requirements](https://github.com/openMF/self-service-app/wiki/Design-&-Requirements) for an initial design mockup and documentation on the Fineract API.
+## Note
+
+The UI design is currently being revamped. New design can be found [here](https://docs.google.com/presentation/d/1yFR19vGlKW-amxzGms8TgPzd1jWkrALPFcaC85EyYpw/edit#slide=id.g6c6ccd991d_0_42)
diff --git a/app/build.gradle b/app/build.gradle
index a1184bde95..a2e9aa177c 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -3,12 +3,14 @@ apply plugin: 'io.fabric'
apply plugin: 'com.google.gms.oss.licenses.plugin'
apply plugin: 'kotlin-android'
apply plugin: 'kotlin-android-extensions'
+apply plugin: 'kotlin-kapt'
apply from: '../config/quality/quality.gradle'
android {
compileSdkVersion rootProject.ext.compileSdkVersion
buildToolsVersion rootProject.ext.buildToolsVersion
+ ndkVersion rootProject.ext.ndkVersion
defaultConfig {
applicationId "org.mifos.mobile"
@@ -76,7 +78,7 @@ dependencies {
implementation 'androidx.legacy:legacy-support-v4:1.0.0'
implementation 'androidx.lifecycle:lifecycle-extensions:2.1.0'
implementation 'androidx.lifecycle:lifecycle-viewmodel-ktx:2.1.0'
- annotationProcessor "com.github.Raizlabs.DBFlow:dbflow-processor:$rootProject.dbflowVersion"
+ kapt "com.github.Raizlabs.DBFlow:dbflow-processor:$rootProject.dbflowVersion"
implementation "com.github.Raizlabs.DBFlow:dbflow-core:$rootProject.dbflowVersion"
implementation "com.github.Raizlabs.DBFlow:dbflow:$rootProject.dbflowVersion"
@@ -95,7 +97,7 @@ dependencies {
implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlinVersion"
//Square dependencies
- implementation('com.squareup.retrofit2:retrofit:$rootProject.retrofitVersion') {
+ implementation("com.squareup.retrofit2:retrofit:$rootProject.retrofitVersion") {
// exclude Retrofit’s OkHttp peer-dependency module and define your own module import
exclude module: 'okhttp'
}
@@ -109,17 +111,20 @@ dependencies {
implementation "io.reactivex.rxjava2:rxjava:$rootProject.rxjavaVersion"
//Dagger dependencies
- annotationProcessor "com.google.dagger:dagger-compiler:$rootProject.daggerVersion"
+ kapt "com.google.dagger:dagger-compiler:$rootProject.daggerVersion"
implementation "com.google.dagger:dagger:$rootProject.daggerVersion"
compileOnly 'javax.annotation:jsr250-api:1.0' //Required by Dagger2
//Butter Knife
- implementation "com.jakewharton:butterknife:$rootProject.butterKnifeVersion"
- annotationProcessor "com.jakewharton:butterknife-compiler:$rootProject.butterKnifeVersion"
+ implementation "com.jakewharton:butterknife:$butterKnifeVersion"
+ kapt "com.jakewharton:butterknife-compiler:$butterKnifeVersion"
implementation('com.crashlytics.sdk.android:crashlytics:2.6.7@aar') {
transitive = true
}
+ //Annotation library
+ implementation "androidx.annotation:annotation:$rootProject.annotationLibraryVersion"
+
//qr code
implementation "com.google.zxing:core:$rootProject.zxingcoreVersion"
implementation "me.dm7.barcodescanner:zxing:$rootProject.zxingbarcodescannerVersion"
@@ -132,7 +137,7 @@ dependencies {
//multidex
implementation "androidx.multidex:multidex:$rootProject.multiDexVersion"
-
+
//TableView
implementation "com.evrencoskun.library:tableview:$rootProject.tableViewVersion"
@@ -155,4 +160,4 @@ dependencies {
androidTestImplementation "androidx.test:runner:$rootProject.runnerVersion"
androidTestImplementation "androidx.test:rules:$rootProject.rulesVersion"
}
-apply plugin: 'com.google.gms.google-services'
+apply plugin: 'com.google.gms.google-services'
\ No newline at end of file
diff --git a/app/src/androidTest/java/org/mifos/mobile/ApplicationTest.java b/app/src/androidTest/java/org/mifos/mobile/ApplicationTest.java
deleted file mode 100644
index adb323d113..0000000000
--- a/app/src/androidTest/java/org/mifos/mobile/ApplicationTest.java
+++ /dev/null
@@ -1,25 +0,0 @@
-package org.mifos.mobile;
-
-import android.content.Context;
-
-import org.junit.Test;
-import org.junit.runner.RunWith;
-
-import androidx.test.InstrumentationRegistry;
-import androidx.test.runner.AndroidJUnit4;
-
-import static org.junit.Assert.assertEquals;
-
-/**
- * Testing Fundamentals
- */
-@RunWith(AndroidJUnit4.class)
-public class ApplicationTest {
-
- @Test
- public void useAppContext() {
- // Context of the app under test.
- Context appContext = InstrumentationRegistry.getTargetContext();
- assertEquals("org.mifos.mobile", appContext.getPackageName());
- }
-}
diff --git a/app/src/androidTest/java/org/mifos/mobile/ApplicationTest.kt b/app/src/androidTest/java/org/mifos/mobile/ApplicationTest.kt
new file mode 100644
index 0000000000..03b73753c4
--- /dev/null
+++ b/app/src/androidTest/java/org/mifos/mobile/ApplicationTest.kt
@@ -0,0 +1,21 @@
+package org.mifos.mobile
+
+import androidx.test.InstrumentationRegistry
+import androidx.test.runner.AndroidJUnit4
+
+import org.junit.Assert
+import org.junit.Test
+import org.junit.runner.RunWith
+
+/**
+ * [Testing Fundamentals](http://d.android.com/tools/testing/testing_android.html)
+ */
+@RunWith(AndroidJUnit4::class)
+class ApplicationTest {
+ @Test
+ fun useAppContext() {
+ // Context of the app under test.
+ val appContext = InstrumentationRegistry.getTargetContext()
+ Assert.assertEquals("org.mifos.mobile", appContext.packageName)
+ }
+}
\ No newline at end of file
diff --git a/app/src/commonTest/java/org/mifos/mobile/FakeJsonName.java b/app/src/commonTest/java/org/mifos/mobile/FakeJsonName.java
deleted file mode 100644
index 80a9dc1439..0000000000
--- a/app/src/commonTest/java/org/mifos/mobile/FakeJsonName.java
+++ /dev/null
@@ -1,78 +0,0 @@
-package org.mifos.mobile;
-
-/**
- * Created by dilpreet on 26/6/17.
- */
-
-public class FakeJsonName {
-
- public static final String ACCOUNT_OPTION_TEMPLATE = "accountOptionTemplate.json";
-
- public static final String CLIENT_ACCOUNTS_JSON = "clientAccounts.json";
-
- public static final String CLIENT_SAVINGS_ACCOUNT_JSON = "clientSavingsAccounts.json";
-
- public static final String CLIENT_LOAN_ACCOUNT_JSON = "clientLoanAccounts.json";
-
- public static final String CLIENT_SHARE_ACCOUNT_JSON = "clientShareAccounts.json";
-
- public static final String BENEFICIARIES_JSON = "beneficiaries.json";
-
- public static final String BENEFICIARY_TEMPLATE_JSON = "beneficiaryTemplate.json";
-
- public static final String BENEFICIARY_PAYLOAD_JSON = "beneficiaryPayload.json";
-
- public static final String BENEFICIARY_UPDATE_PAYLOAD_JSON = "beneficiaryUpdatePayload.json";
-
- public static final String LOAN_ACCOUNT_JSON = "loanAccount.json";
-
- public static final String LOAN_PAYLOAD_JSON = "loanPayload.json";
-
- public static final String LOAN_TEMPLATE_JSON = "loanTemplate.json";
-
- public static final String LOAN_TEMPLATE_BY_PRODUCT_JSON = "loanTemplateByProduct.json";
-
- public static final String LOAN_ACCOUNT_WITH_TRANSACTIONS_JSON =
- "loanAccountWithTransactions.json";
-
- public static final String LOAN_ACCOUNT_WITH_EMPTY_TRANSACTIONS_JSON =
- "loanAccountWithEmptyTransactions.json";
-
- public static final String LOAN_ACCOUNT_WITH_REPAYMENT_SCHEDULE_JSON =
- "loanAccountWithRepaymentSchedule.json";
-
- public static final String LOAN_ACCOUNT_WITH_EMPTY_REPAYMENT_SCHEDULE_JSON =
- "loanAccountWithEmptyRepaymentSchedule.json";
-
- public static final String CLIENTS_JSON = "clients.json";
-
- public static final String CLIENTS_NOT_FOUND_JSON = "clientsNotFound.json";
-
- public static final String USER_JSON = "user.json";
-
- public static final String TRANSACTIONS_JSON = "transactions.json";
-
- public static final String TRANFER_PAYLOAD_JSON = "transferPayload.json";
-
- public static final String SAVINGS_WITH_ASSOCIATIONS = "SavingsAccountWithAssociations.json";
-
- public static final String REGISTER = "register.json";
-
- public static final String CHARGE = "charge.json";
-
- public static final String SAVING_CHARGE = "savingCharge.json";
-
- public static final String LOAN_CHARGE = "loanCharge.json";
-
- public static final String USER_VERIFY_JSON = "userVerify.json";
-
- public static final String GUARANTOR_TEMPLATE = "guarantorTemplate.json";
-
- public static final String GUARANTOR_LIST = "guarantorList.json";
-
- public static final String SAVINGS_ACCOUNT_TEMPLATE = "savingsAccountTemplate.json";
-
- public static final String CLIENT_JSON = "client.json";
-
- public static final String UPDATE_PASSWORD_PAYLOAD_JSON = "updatePasswordPayload.json";
-}
diff --git a/app/src/commonTest/java/org/mifos/mobile/FakeJsonName.kt b/app/src/commonTest/java/org/mifos/mobile/FakeJsonName.kt
new file mode 100644
index 0000000000..28b85bc9ac
--- /dev/null
+++ b/app/src/commonTest/java/org/mifos/mobile/FakeJsonName.kt
@@ -0,0 +1,41 @@
+package org.mifos.mobile
+
+/**
+ * Created by dilpreet on 26/6/17.
+ */
+object FakeJsonName {
+ const val ACCOUNT_OPTION_TEMPLATE = "accountOptionTemplate.json"
+ const val CLIENT_ACCOUNTS_JSON = "clientAccounts.json"
+ const val CLIENT_SAVINGS_ACCOUNT_JSON = "clientSavingsAccounts.json"
+ const val CLIENT_LOAN_ACCOUNT_JSON = "clientLoanAccounts.json"
+ const val CLIENT_SHARE_ACCOUNT_JSON = "clientShareAccounts.json"
+ const val BENEFICIARIES_JSON = "beneficiaries.json"
+ const val BENEFICIARY_TEMPLATE_JSON = "beneficiaryTemplate.json"
+ const val BENEFICIARY_PAYLOAD_JSON = "beneficiaryPayload.json"
+ const val BENEFICIARY_UPDATE_PAYLOAD_JSON = "beneficiaryUpdatePayload.json"
+ const val LOGIN = "login.json"
+ const val LOAN_ACCOUNT_JSON = "loanAccount.json"
+ const val LOAN_PAYLOAD_JSON = "loanPayload.json"
+ const val LOAN_TEMPLATE_JSON = "loanTemplate.json"
+ const val LOAN_TEMPLATE_BY_PRODUCT_JSON = "loanTemplateByProduct.json"
+ const val LOAN_ACCOUNT_WITH_TRANSACTIONS_JSON = "loanAccountWithTransactions.json"
+ const val LOAN_ACCOUNT_WITH_EMPTY_TRANSACTIONS_JSON = "loanAccountWithEmptyTransactions.json"
+ const val LOAN_ACCOUNT_WITH_REPAYMENT_SCHEDULE_JSON = "loanAccountWithRepaymentSchedule.json"
+ const val LOAN_ACCOUNT_WITH_EMPTY_REPAYMENT_SCHEDULE_JSON = "loanAccountWithEmptyRepaymentSchedule.json"
+ const val CLIENTS_JSON = "clients.json"
+ const val CLIENTS_NOT_FOUND_JSON = "clientsNotFound.json"
+ const val USER_JSON = "user.json"
+ const val TRANSACTIONS_JSON = "transactions.json"
+ const val TRANFER_PAYLOAD_JSON = "transferPayload.json"
+ const val SAVINGS_WITH_ASSOCIATIONS = "SavingsAccountWithAssociations.json"
+ const val REGISTER = "register.json"
+ const val CHARGE = "charge.json"
+ const val SAVING_CHARGE = "savingCharge.json"
+ const val LOAN_CHARGE = "loanCharge.json"
+ const val USER_VERIFY_JSON = "userVerify.json"
+ const val GUARANTOR_TEMPLATE = "guarantorTemplate.json"
+ const val GUARANTOR_LIST = "guarantorList.json"
+ const val SAVINGS_ACCOUNT_TEMPLATE = "savingsAccountTemplate.json"
+ const val CLIENT_JSON = "client.json"
+ const val UPDATE_PASSWORD_PAYLOAD_JSON = "updatePasswordPayload.json"
+}
\ No newline at end of file
diff --git a/app/src/commonTest/java/org/mifos/mobile/FakeRemoteDataSource.java b/app/src/commonTest/java/org/mifos/mobile/FakeRemoteDataSource.java
deleted file mode 100644
index da159ce34d..0000000000
--- a/app/src/commonTest/java/org/mifos/mobile/FakeRemoteDataSource.java
+++ /dev/null
@@ -1,206 +0,0 @@
-package org.mifos.mobile;
-
-import com.google.gson.reflect.TypeToken;
-
-import org.mifos.mobile.models.Charge;
-import org.mifos.mobile.models.Page;
-import org.mifos.mobile.models.Transaction;
-import org.mifos.mobile.models.UpdatePasswordPayload;
-import org.mifos.mobile.models.User;
-import org.mifos.mobile.models.accounts.loan.LoanAccount;
-import org.mifos.mobile.models.accounts.loan.LoanWithAssociations;
-import org.mifos.mobile.models.accounts.savings.SavingsWithAssociations;
-import org.mifos.mobile.models.beneficiary.Beneficiary;
-import org.mifos.mobile.models.beneficiary.BeneficiaryPayload;
-import org.mifos.mobile.models.beneficiary.BeneficiaryUpdatePayload;
-import org.mifos.mobile.models.client.Client;
-import org.mifos.mobile.models.client.ClientAccounts;
-import org.mifos.mobile.models.guarantor.GuarantorPayload;
-import org.mifos.mobile.models.guarantor.GuarantorTemplatePayload;
-import org.mifos.mobile.models.payload.LoansPayload;
-import org.mifos.mobile.models.payload.TransferPayload;
-import org.mifos.mobile.models.register.RegisterPayload;
-import org.mifos.mobile.models.register.UserVerify;
-import org.mifos.mobile.models.templates.account.AccountOptionsTemplate;
-import org.mifos.mobile.models.templates.beneficiary.BeneficiaryTemplate;
-import org.mifos.mobile.models.templates.loans.LoanTemplate;
-import org.mifos.mobile.models.templates.savings.SavingsAccountTemplate;
-
-import java.util.List;
-
-/**
- * Created by dilpreet on 26/6/17.
- */
-
-public class FakeRemoteDataSource {
-
- private static TestDataFactory mTestDataFactory = new TestDataFactory();
-
- public static ClientAccounts getClientAccounts() {
- return mTestDataFactory.getListTypePojo(new TypeToken() {
- }, FakeJsonName.CLIENT_ACCOUNTS_JSON);
- }
-
- public static Client getCurrentClient() {
- return mTestDataFactory.getObjectTypePojo(Client.class,
- FakeJsonName.CLIENT_JSON);
- }
-
-
- public static ClientAccounts getClientSavingsAccount() {
- return mTestDataFactory.getObjectTypePojo(ClientAccounts.class,
- FakeJsonName.CLIENT_SAVINGS_ACCOUNT_JSON);
- }
-
- public static ClientAccounts getClientLoanAccount() {
- return mTestDataFactory.getObjectTypePojo(ClientAccounts.class,
- FakeJsonName.CLIENT_LOAN_ACCOUNT_JSON);
- }
-
- public static ClientAccounts getClientShareAccount() {
- return mTestDataFactory.getObjectTypePojo(ClientAccounts.class,
- FakeJsonName.CLIENT_SHARE_ACCOUNT_JSON);
- }
-
- public static List getBeneficiaries() {
- return mTestDataFactory.getListTypePojo(new TypeToken>() {
- }, FakeJsonName.BENEFICIARIES_JSON);
- }
-
- public static BeneficiaryTemplate getBeneficiaryTemplate() {
- return mTestDataFactory.getObjectTypePojo(BeneficiaryTemplate.class,
- FakeJsonName.BENEFICIARY_TEMPLATE_JSON);
- }
-
- public static BeneficiaryPayload beneficiaryPayload() {
- return mTestDataFactory.getObjectTypePojo(BeneficiaryPayload.class,
- FakeJsonName.BENEFICIARY_PAYLOAD_JSON);
- }
-
- public static BeneficiaryUpdatePayload beneficiaryUpdatePayload() {
- return mTestDataFactory.getObjectTypePojo(BeneficiaryUpdatePayload.class,
- FakeJsonName.BENEFICIARY_UPDATE_PAYLOAD_JSON);
- }
-
- public static LoanAccount getLoanAccount() {
- return mTestDataFactory.getObjectTypePojo(LoanAccount.class,
- FakeJsonName.LOAN_ACCOUNT_JSON);
- }
-
- public static LoanTemplate getLoanTemplate() {
- return mTestDataFactory.getObjectTypePojo(LoanTemplate.class,
- FakeJsonName.LOAN_TEMPLATE_JSON);
- }
-
- public static LoansPayload getLoansPayload() {
- return mTestDataFactory.getObjectTypePojo(LoansPayload.class,
- FakeJsonName.LOAN_PAYLOAD_JSON);
- }
-
- public static LoanTemplate getLoanTemplateByTemplate() {
- return mTestDataFactory.getObjectTypePojo(LoanTemplate.class,
- FakeJsonName.LOAN_TEMPLATE_BY_PRODUCT_JSON);
- }
-
- public static LoanWithAssociations getLoanAccountWithTransaction() {
- return mTestDataFactory.getObjectTypePojo(LoanWithAssociations.class,
- FakeJsonName.LOAN_ACCOUNT_WITH_TRANSACTIONS_JSON);
- }
-
- public static LoanWithAssociations getLoanAccountWithEmptyTransaction() {
- return mTestDataFactory.getObjectTypePojo(LoanWithAssociations.class,
- FakeJsonName.LOAN_ACCOUNT_WITH_EMPTY_TRANSACTIONS_JSON);
- }
-
- public static LoanWithAssociations getLoanAccountRepaymentSchedule() {
- return mTestDataFactory.getObjectTypePojo(LoanWithAssociations.class,
- FakeJsonName.LOAN_ACCOUNT_WITH_REPAYMENT_SCHEDULE_JSON);
- }
-
- public static LoanWithAssociations getLoanAccountEmptyRepaymentSchedule() {
- return mTestDataFactory.getObjectTypePojo(LoanWithAssociations.class,
- FakeJsonName.LOAN_ACCOUNT_WITH_EMPTY_REPAYMENT_SCHEDULE_JSON);
- }
-
- public static User getUser() {
- return mTestDataFactory.getObjectTypePojo(User.class,
- FakeJsonName.USER_JSON);
- }
-
- public static Page getClients() {
- return mTestDataFactory.getListTypePojo(new TypeToken>() {
- }, FakeJsonName.CLIENTS_JSON);
- }
-
- public static Page getNoClients() {
- return mTestDataFactory.getListTypePojo(new TypeToken>() {
- }, FakeJsonName.CLIENTS_NOT_FOUND_JSON);
- }
-
- public static Page getTransactions() {
- return mTestDataFactory.getListTypePojo(new TypeToken>() {
- }, FakeJsonName.TRANSACTIONS_JSON);
- }
-
- public static SavingsWithAssociations getSavingsWithAssociations() {
- return mTestDataFactory.getObjectTypePojo(SavingsWithAssociations.class,
- FakeJsonName.SAVINGS_WITH_ASSOCIATIONS);
- }
-
- public static AccountOptionsTemplate getAccountOptionsTemplate() {
- return mTestDataFactory.getObjectTypePojo(AccountOptionsTemplate.class,
- FakeJsonName.ACCOUNT_OPTION_TEMPLATE);
- }
-
- public static TransferPayload getTransferPayload() {
- return mTestDataFactory.getObjectTypePojo(TransferPayload.class,
- FakeJsonName.TRANFER_PAYLOAD_JSON);
- }
-
-
- public static RegisterPayload getRegisterPayload() {
- return mTestDataFactory.getObjectTypePojo(RegisterPayload.class,
- FakeJsonName.REGISTER);
- }
-
- public static Page getCharge() {
- return mTestDataFactory.getListTypePojo(new TypeToken>() {
- }, FakeJsonName.CHARGE);
- }
-
- public static List getSavingsCharge() {
- return mTestDataFactory.getListTypePojo(new TypeToken>() {
- }, FakeJsonName.SAVING_CHARGE);
- }
-
- public static List getLoanCharge() {
- return mTestDataFactory.getListTypePojo(new TypeToken>() {
- }, FakeJsonName.LOAN_CHARGE);
- }
-
- public static UserVerify getUserVerify() {
- return mTestDataFactory.getObjectTypePojo(UserVerify.class,
- FakeJsonName.USER_VERIFY_JSON);
- }
-
- public static GuarantorTemplatePayload getGuarantorTemplatePayload() {
- return mTestDataFactory.getObjectTypePojo(GuarantorTemplatePayload.class,
- FakeJsonName.GUARANTOR_TEMPLATE);
- }
-
- public static List getGuarantorsList() {
- return mTestDataFactory.getListTypePojo(new TypeToken>() {
- }, FakeJsonName.GUARANTOR_LIST);
- }
-
- public static SavingsAccountTemplate getSavingAccountApplicationTemplate() {
- return mTestDataFactory.getObjectTypePojo(SavingsAccountTemplate.class,
- FakeJsonName.SAVINGS_ACCOUNT_TEMPLATE);
-
- }
- public static UpdatePasswordPayload getUpdatePasswordPayload() {
- return mTestDataFactory.getObjectTypePojo(UpdatePasswordPayload.class,
- FakeJsonName.UPDATE_PASSWORD_PAYLOAD_JSON);
-
- }
-}
diff --git a/app/src/commonTest/java/org/mifos/mobile/FakeRemoteDataSource.kt b/app/src/commonTest/java/org/mifos/mobile/FakeRemoteDataSource.kt
new file mode 100644
index 0000000000..a837276de9
--- /dev/null
+++ b/app/src/commonTest/java/org/mifos/mobile/FakeRemoteDataSource.kt
@@ -0,0 +1,129 @@
+package org.mifos.mobile
+
+import com.google.gson.reflect.TypeToken
+
+import org.mifos.mobile.models.*
+import org.mifos.mobile.models.accounts.loan.LoanAccount
+import org.mifos.mobile.models.accounts.loan.LoanWithAssociations
+import org.mifos.mobile.models.accounts.savings.SavingsWithAssociations
+import org.mifos.mobile.models.beneficiary.Beneficiary
+import org.mifos.mobile.models.beneficiary.BeneficiaryPayload
+import org.mifos.mobile.models.beneficiary.BeneficiaryUpdatePayload
+import org.mifos.mobile.models.client.Client
+import org.mifos.mobile.models.client.ClientAccounts
+import org.mifos.mobile.models.guarantor.GuarantorPayload
+import org.mifos.mobile.models.guarantor.GuarantorTemplatePayload
+import org.mifos.mobile.models.payload.LoansPayload
+import org.mifos.mobile.models.payload.LoginPayload
+import org.mifos.mobile.models.payload.TransferPayload
+import org.mifos.mobile.models.register.RegisterPayload
+import org.mifos.mobile.models.register.UserVerify
+import org.mifos.mobile.models.templates.account.AccountOptionsTemplate
+import org.mifos.mobile.models.templates.beneficiary.BeneficiaryTemplate
+import org.mifos.mobile.models.templates.loans.LoanTemplate
+import org.mifos.mobile.models.templates.savings.SavingsAccountTemplate
+
+/**
+ * Created by dilpreet on 26/6/17.
+ */
+object FakeRemoteDataSource {
+ private val mTestDataFactory = TestDataFactory()
+ val clientAccounts: ClientAccounts
+ get() = mTestDataFactory.getListTypePojo(object : TypeToken() {}, FakeJsonName.CLIENT_ACCOUNTS_JSON)
+ val currentClient: Client
+ get() = mTestDataFactory.getObjectTypePojo(Client::class.java,
+ FakeJsonName.CLIENT_JSON)
+ val clientSavingsAccount: ClientAccounts
+ get() = mTestDataFactory.getObjectTypePojo(ClientAccounts::class.java,
+ FakeJsonName.CLIENT_SAVINGS_ACCOUNT_JSON)
+ val clientLoanAccount: ClientAccounts
+ get() = mTestDataFactory.getObjectTypePojo(ClientAccounts::class.java,
+ FakeJsonName.CLIENT_LOAN_ACCOUNT_JSON)
+ val clientShareAccount: ClientAccounts
+ get() = mTestDataFactory.getObjectTypePojo(ClientAccounts::class.java,
+ FakeJsonName.CLIENT_SHARE_ACCOUNT_JSON)
+ val beneficiaries: List
+ get() = mTestDataFactory.getListTypePojo>(object : TypeToken?>() {}, FakeJsonName.BENEFICIARIES_JSON)
+ val beneficiaryTemplate: BeneficiaryTemplate
+ get() = mTestDataFactory.getObjectTypePojo(BeneficiaryTemplate::class.java,
+ FakeJsonName.BENEFICIARY_TEMPLATE_JSON)
+
+ fun beneficiaryPayload(): BeneficiaryPayload {
+ return mTestDataFactory.getObjectTypePojo(BeneficiaryPayload::class.java,
+ FakeJsonName.BENEFICIARY_PAYLOAD_JSON)
+ }
+
+ fun beneficiaryUpdatePayload(): BeneficiaryUpdatePayload {
+ return mTestDataFactory.getObjectTypePojo(BeneficiaryUpdatePayload::class.java,
+ FakeJsonName.BENEFICIARY_UPDATE_PAYLOAD_JSON)
+ }
+
+ val loanAccount: LoanAccount
+ get() = mTestDataFactory.getObjectTypePojo(LoanAccount::class.java,
+ FakeJsonName.LOAN_ACCOUNT_JSON)
+ val loanTemplate: LoanTemplate
+ get() = mTestDataFactory.getObjectTypePojo(LoanTemplate::class.java,
+ FakeJsonName.LOAN_TEMPLATE_JSON)
+ val loansPayload: LoansPayload
+ get() = mTestDataFactory.getObjectTypePojo(LoansPayload::class.java,
+ FakeJsonName.LOAN_PAYLOAD_JSON)
+ val loanTemplateByTemplate: LoanTemplate
+ get() = mTestDataFactory.getObjectTypePojo(LoanTemplate::class.java,
+ FakeJsonName.LOAN_TEMPLATE_BY_PRODUCT_JSON)
+ val loanAccountWithTransaction: LoanWithAssociations
+ get() = mTestDataFactory.getObjectTypePojo(LoanWithAssociations::class.java,
+ FakeJsonName.LOAN_ACCOUNT_WITH_TRANSACTIONS_JSON)
+ val loanAccountWithEmptyTransaction: LoanWithAssociations
+ get() = mTestDataFactory.getObjectTypePojo(LoanWithAssociations::class.java,
+ FakeJsonName.LOAN_ACCOUNT_WITH_EMPTY_TRANSACTIONS_JSON)
+ val loanAccountRepaymentSchedule: LoanWithAssociations
+ get() = mTestDataFactory.getObjectTypePojo(LoanWithAssociations::class.java,
+ FakeJsonName.LOAN_ACCOUNT_WITH_REPAYMENT_SCHEDULE_JSON)
+ val loanAccountEmptyRepaymentSchedule: LoanWithAssociations
+ get() = mTestDataFactory.getObjectTypePojo(LoanWithAssociations::class.java,
+ FakeJsonName.LOAN_ACCOUNT_WITH_EMPTY_REPAYMENT_SCHEDULE_JSON)
+ val user: User
+ get() = mTestDataFactory.getObjectTypePojo(User::class.java,
+ FakeJsonName.USER_JSON)
+ val clients: Page?
+ get() = mTestDataFactory.getListTypePojo?>(object : TypeToken?>() {}, FakeJsonName.CLIENTS_JSON)
+ val noClients: Page?
+ get() = mTestDataFactory.getListTypePojo?>(object : TypeToken?>() {}, FakeJsonName.CLIENTS_NOT_FOUND_JSON)
+ val transactions: Page?
+ get() = mTestDataFactory.getListTypePojo?>(object : TypeToken?>() {}, FakeJsonName.TRANSACTIONS_JSON)
+ val savingsWithAssociations: SavingsWithAssociations
+ get() = mTestDataFactory.getObjectTypePojo(SavingsWithAssociations::class.java,
+ FakeJsonName.SAVINGS_WITH_ASSOCIATIONS)
+ val accountOptionsTemplate: AccountOptionsTemplate
+ get() = mTestDataFactory.getObjectTypePojo(AccountOptionsTemplate::class.java,
+ FakeJsonName.ACCOUNT_OPTION_TEMPLATE)
+ val transferPayload: TransferPayload
+ get() = mTestDataFactory.getObjectTypePojo(TransferPayload::class.java,
+ FakeJsonName.TRANFER_PAYLOAD_JSON)
+ val registerPayload: RegisterPayload
+ get() = mTestDataFactory.getObjectTypePojo(RegisterPayload::class.java,
+ FakeJsonName.REGISTER)
+ val loginPayload: LoginPayload
+ get() = mTestDataFactory.getObjectTypePojo(LoginPayload::class.java,
+ FakeJsonName.LOGIN)
+ val charge: Page?
+ get() = mTestDataFactory.getListTypePojo?>(object : TypeToken?>() {}, FakeJsonName.CHARGE)
+ val savingsCharge: List
+ get() = mTestDataFactory.getListTypePojo>(object : TypeToken?>() {}, FakeJsonName.SAVING_CHARGE)
+ val loanCharge: List
+ get() = mTestDataFactory.getListTypePojo>(object : TypeToken?>() {}, FakeJsonName.LOAN_CHARGE)
+ val userVerify: UserVerify
+ get() = mTestDataFactory.getObjectTypePojo(UserVerify::class.java,
+ FakeJsonName.USER_VERIFY_JSON)
+ val guarantorTemplatePayload: GuarantorTemplatePayload
+ get() = mTestDataFactory.getObjectTypePojo(GuarantorTemplatePayload::class.java,
+ FakeJsonName.GUARANTOR_TEMPLATE)
+ val guarantorsList: List
+ get() = mTestDataFactory.getListTypePojo>(object : TypeToken?>() {}, FakeJsonName.GUARANTOR_LIST)
+ val savingAccountApplicationTemplate: SavingsAccountTemplate
+ get() = mTestDataFactory.getObjectTypePojo(SavingsAccountTemplate::class.java,
+ FakeJsonName.SAVINGS_ACCOUNT_TEMPLATE)
+ val updatePasswordPayload: UpdatePasswordPayload
+ get() = mTestDataFactory.getObjectTypePojo(UpdatePasswordPayload::class.java,
+ FakeJsonName.UPDATE_PASSWORD_PAYLOAD_JSON)
+}
\ No newline at end of file
diff --git a/app/src/commonTest/java/org/mifos/mobile/RetrofitUtils.java b/app/src/commonTest/java/org/mifos/mobile/RetrofitUtils.java
deleted file mode 100644
index d4c816c7e0..0000000000
--- a/app/src/commonTest/java/org/mifos/mobile/RetrofitUtils.java
+++ /dev/null
@@ -1,24 +0,0 @@
-package org.mifos.mobile;
-
-import okhttp3.MediaType;
-import okhttp3.ResponseBody;
-import retrofit2.HttpException;
-import retrofit2.Response;
-
-/**
- * Created by dilpreet on 29/7/17.
- */
-
-public class RetrofitUtils {
-
- public static Exception get404Exception() {
- return new HttpException(Response.error(404, ResponseBody.create(MediaType.
- parse("application/json"), "Not Found")));
- }
-
- public static Exception get401Exception() {
- return new HttpException(Response.error(401, ResponseBody.create(MediaType.
- parse("application/json"), "UnAuthorized")));
- }
-
-}
diff --git a/app/src/commonTest/java/org/mifos/mobile/RetrofitUtils.kt b/app/src/commonTest/java/org/mifos/mobile/RetrofitUtils.kt
new file mode 100644
index 0000000000..5358ca218f
--- /dev/null
+++ b/app/src/commonTest/java/org/mifos/mobile/RetrofitUtils.kt
@@ -0,0 +1,19 @@
+package org.mifos.mobile
+
+import okhttp3.MediaType
+import okhttp3.ResponseBody
+import retrofit2.HttpException
+import retrofit2.Response
+
+/**
+ * Created by dilpreet on 29/7/17.
+ */
+object RetrofitUtils {
+ fun get404Exception(): Exception {
+ return HttpException(Response.error(404, ResponseBody.create(MediaType.parse("application/json"), "Not Found")))
+ }
+
+ fun get401Exception(): Exception {
+ return HttpException(Response.error(401, ResponseBody.create(MediaType.parse("application/json"), "UnAuthorized")))
+ }
+}
\ No newline at end of file
diff --git a/app/src/commonTest/java/org/mifos/mobile/TestDataFactory.java b/app/src/commonTest/java/org/mifos/mobile/TestDataFactory.kt
similarity index 57%
rename from app/src/commonTest/java/org/mifos/mobile/TestDataFactory.java
rename to app/src/commonTest/java/org/mifos/mobile/TestDataFactory.kt
index a91cc8d88c..e045f80a3b 100644
--- a/app/src/commonTest/java/org/mifos/mobile/TestDataFactory.java
+++ b/app/src/commonTest/java/org/mifos/mobile/TestDataFactory.kt
@@ -1,22 +1,19 @@
-package org.mifos.mobile;
+package org.mifos.mobile
-import com.google.gson.Gson;
-import com.google.gson.reflect.TypeToken;
-import com.google.gson.stream.JsonReader;
+import com.google.gson.Gson
+import com.google.gson.reflect.TypeToken
+import com.google.gson.stream.JsonReader
-import java.io.InputStream;
-import java.io.InputStreamReader;
+import java.io.InputStreamReader
/**
* Created by dilpreet on 26/6/17.
*/
-
-public class TestDataFactory {
-
-
+class TestDataFactory {
/**
* Note : This Generic Method DeSerialize Only Json Object in POJO
- *
+ *
+ *
* Note : Do Not use Array [] in POJO classes for of any element initialization,
* Use Instead ArrayList.
*
@@ -25,23 +22,21 @@ public class TestDataFactory {
* @param Return type
* @return Return the Object Type model by Deserializing the Json of resources
* @Example Of Deserializing Object Type Json
- *
+ *
+ *
* Object object = mTestDataFactory.getListTypePojo(
* new TypeToken */
+ fun getObjectTypePojo(model: Class?, jsonName: String?): T {
+ val `in` = javaClass.classLoader?.getResourceAsStream(jsonName)
+ val reader = JsonReader(InputStreamReader(`in`))
+ return Gson().fromJson(reader, model)
}
-
/**
* Note : This Generic Method DeSerialize Both Object and List Type Json in POJO
- *
+ *
+ *
* Note : Do Not use Array [] in POJO classes for of any element initialization,
* Use Instead ArrayList.
*
@@ -50,22 +45,22 @@ public T getObjectTypePojo(Class model, String jsonName) {
* @param return type
* @return Return the List of the listModel by Deserializing the Json of resources
* @Example of Deserializing List Type Json
- *
+ *
+ *
* TestDataFactory mTestDataFactory = new TestDataFactory();
- *
+ *
+ *
* List */
+ fun getListTypePojo(listModel: TypeToken?, jsonName: String?): T {
+ val `in` = javaClass.classLoader?.getResourceAsStream(jsonName)
+ val reader = JsonReader(InputStreamReader(`in`))
+ return Gson().fromJson(reader, listModel?.type)
}
-}
+}
\ No newline at end of file
diff --git a/app/src/debug/java/org/mifos/mobile/api/BaseURL.java b/app/src/debug/java/org/mifos/mobile/api/BaseURL.java
deleted file mode 100644
index 6e5c686498..0000000000
--- a/app/src/debug/java/org/mifos/mobile/api/BaseURL.java
+++ /dev/null
@@ -1,30 +0,0 @@
-package org.mifos.mobile.api;
-
-/**
- * @author Vishwajeet
- * @since 09/06/16
- */
-
-public class BaseURL {
-
- public static final String API_ENDPOINT = "mobile.openmf.org";
- public static final String API_PATH = "/fineract-provider/api/v1/self/";
- public static final String PROTOCOL_HTTPS = "https://";
-
- private String url;
-
- public String getUrl() {
- if (url == null) {
- return PROTOCOL_HTTPS + API_ENDPOINT + API_PATH;
- }
- return url;
- }
-
- public String getDefaultBaseUrl() {
- return PROTOCOL_HTTPS + API_ENDPOINT;
- }
-
- public String getUrl(String endpoint) {
- return endpoint + API_PATH;
- }
-}
diff --git a/app/src/debug/java/org/mifos/mobile/api/BaseURL.kt b/app/src/debug/java/org/mifos/mobile/api/BaseURL.kt
new file mode 100644
index 0000000000..c582f3b5e7
--- /dev/null
+++ b/app/src/debug/java/org/mifos/mobile/api/BaseURL.kt
@@ -0,0 +1,23 @@
+package org.mifos.mobile.api
+
+/**
+ * @author Vishwajeet
+ * @since 09/06/16
+ */
+class BaseURL {
+ val url: String? = null
+ get() = field
+ ?: PROTOCOL_HTTPS + API_ENDPOINT + API_PATH
+ val defaultBaseUrl: String
+ get() = PROTOCOL_HTTPS + API_ENDPOINT
+
+ fun getUrl(endpoint: String): String {
+ return endpoint + API_PATH
+ }
+
+ companion object {
+ const val API_ENDPOINT = "mobile.mifos.io"
+ const val API_PATH = "/fineract-provider/api/v1/self/"
+ const val PROTOCOL_HTTPS = "https://"
+ }
+}
\ No newline at end of file
diff --git a/app/src/debug/java/org/mifos/mobile/api/SelfServiceInterceptor.java b/app/src/debug/java/org/mifos/mobile/api/SelfServiceInterceptor.java
deleted file mode 100644
index 24943d66d9..0000000000
--- a/app/src/debug/java/org/mifos/mobile/api/SelfServiceInterceptor.java
+++ /dev/null
@@ -1,48 +0,0 @@
-/*
- * This project is licensed under the open source MPL V2.
- * See https://github.com/openMF/android-client/blob/master/LICENSE.md
- */
-
-package org.mifos.mobile.api;
-
-
-import android.text.TextUtils;
-
-import java.io.IOException;
-
-import okhttp3.Interceptor;
-import okhttp3.Request;
-import okhttp3.Request.Builder;
-import okhttp3.Response;
-
-/**
- * @author Vishwajeet
- * @since 21/06/16
- */
-public class SelfServiceInterceptor implements Interceptor {
-
- public static final String HEADER_TENANT = "Fineract-Platform-TenantId";
- public static final String HEADER_AUTH = "Authorization";
- public static final String DEFAULT_TENANT = "mobile";
- private String authToken;
- private String tenant;
-
- public SelfServiceInterceptor(String tenant, String authToken) {
- this.authToken = authToken;
- this.tenant = tenant;
- }
-
- @Override
- public Response intercept(Chain chain) throws IOException {
- Request chainRequest = chain.request();
- Builder builder = chainRequest.newBuilder()
- .header(HEADER_TENANT, tenant);
-
- if (!TextUtils.isEmpty(authToken)) {
- builder.header(HEADER_AUTH, authToken);
- }
-
- Request request = builder.build();
- return chain.proceed(request);
- }
-}
diff --git a/app/src/debug/java/org/mifos/mobile/api/SelfServiceInterceptor.kt b/app/src/debug/java/org/mifos/mobile/api/SelfServiceInterceptor.kt
new file mode 100644
index 0000000000..3cd1928b78
--- /dev/null
+++ b/app/src/debug/java/org/mifos/mobile/api/SelfServiceInterceptor.kt
@@ -0,0 +1,37 @@
+/*
+ * This project is licensed under the open source MPL V2.
+ * See https://github.com/openMF/android-client/blob/master/LICENSE.md
+ */
+package org.mifos.mobile.api
+
+import android.text.TextUtils
+
+import okhttp3.Interceptor
+import okhttp3.Response
+
+import java.io.IOException
+
+/**
+ * @author Vishwajeet
+ * @since 21/06/16
+ */
+class SelfServiceInterceptor(private val tenant: String?, private val authToken: String?) :
+ Interceptor {
+ @Throws(IOException::class)
+ override fun intercept(chain: Interceptor.Chain): Response {
+ val chainRequest = chain.request()
+ val builder = chainRequest.newBuilder()
+ .header(HEADER_TENANT, tenant)
+ if (!TextUtils.isEmpty(authToken)) {
+ builder.header(HEADER_AUTH, authToken)
+ }
+ val request = builder.build()
+ return chain.proceed(request)
+ }
+
+ companion object {
+ const val HEADER_TENANT = "Fineract-Platform-TenantId"
+ const val HEADER_AUTH = "Authorization"
+ const val DEFAULT_TENANT = "mobile"
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 3f796adfa7..2b0935a296 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -56,7 +56,8 @@
+ android:screenOrientation="portrait"
+ android:windowSoftInputMode="adjustResize"/>
T createApi(Class clazz) {
- return retrofit.create(clazz);
- }
-
- public static void createService(String endpoint, String tenant, String authToken) {
- retrofit = new Retrofit.Builder()
- .baseUrl(new BaseURL().getUrl(endpoint))
- .addConverterFactory(GsonConverterFactory.create())
- .addCallAdapterFactory(RxJava2CallAdapterFactory.create())
- .client(new SelfServiceOkHttpClient(tenant, authToken).getMifosOkHttpClient())
- .build();
- init();
- }
-
- public AuthenticationService getAuthenticationApi() {
- return authenticationApi;
- }
-
- public ClientService getClientsApi() {
- return clientsApi;
- }
-
- public SavingAccountsListService getSavingAccountsListApi() {
- return savingAccountsListApi;
- }
-
- public LoanAccountsListService getLoanAccountsListApi() {
- return loanAccountsListApi;
- }
-
- public RecentTransactionsService getRecentTransactionsApi() {
- return recentTransactionsApi;
- }
-
- public ClientChargeService getClientChargeApi() {
- return clientChargeApi;
- }
-
- public BeneficiaryService getBeneficiaryApi() {
- return beneficiaryApi;
- }
-
- public ThirdPartyTransferService getThirdPartyTransferApi() {
- return thirdPartyTransferApi;
- }
-
- public RegistrationService getRegistrationApi() {
- return registrationApi;
- }
-
- public NotificationService getNotificationApi() {
- return notificationApi;
- }
-
- public GuarantorService getGuarantorApi() {
- return guarantorService;
- }
-
- public UserDetailsService getUserDetailsService() {
- return userDetailsService;
- }
-}
diff --git a/app/src/main/java/org/mifos/mobile/api/BaseApiManager.kt b/app/src/main/java/org/mifos/mobile/api/BaseApiManager.kt
new file mode 100644
index 0000000000..39092b656f
--- /dev/null
+++ b/app/src/main/java/org/mifos/mobile/api/BaseApiManager.kt
@@ -0,0 +1,92 @@
+package org.mifos.mobile.api
+
+import org.mifos.mobile.api.local.PreferencesHelper
+import org.mifos.mobile.api.services.*
+
+import retrofit2.Retrofit
+import retrofit2.adapter.rxjava2.RxJava2CallAdapterFactory
+import retrofit2.converter.gson.GsonConverterFactory
+
+import javax.inject.Inject
+
+/**
+ * @author Vishwajeet
+ * @since 13/6/16
+ */
+class BaseApiManager @Inject constructor(preferencesHelper: PreferencesHelper) {
+ val authenticationApi: AuthenticationService?
+ get() = Companion.authenticationApi
+ val clientsApi: ClientService?
+ get() = Companion.clientsApi
+ val savingAccountsListApi: SavingAccountsListService?
+ get() = Companion.savingAccountsListApi
+ val loanAccountsListApi: LoanAccountsListService?
+ get() = Companion.loanAccountsListApi
+ val recentTransactionsApi: RecentTransactionsService?
+ get() = Companion.recentTransactionsApi
+ val clientChargeApi: ClientChargeService?
+ get() = Companion.clientChargeApi
+ val beneficiaryApi: BeneficiaryService?
+ get() = Companion.beneficiaryApi
+ val thirdPartyTransferApi: ThirdPartyTransferService?
+ get() = Companion.thirdPartyTransferApi
+ val registrationApi: RegistrationService?
+ get() = Companion.registrationApi
+ val notificationApi: NotificationService?
+ get() = Companion.notificationApi
+ val userDetailsService: UserDetailsService?
+ get() = Companion.userDetailsService
+ val guarantorApi: GuarantorService?
+ get() = Companion.field
+
+ companion object {
+ private val field: GuarantorService? = null
+ private var retrofit: Retrofit? = null
+ private var authenticationApi: AuthenticationService? = null
+ private var clientsApi: ClientService? = null
+ private var savingAccountsListApi: SavingAccountsListService? = null
+ private var loanAccountsListApi: LoanAccountsListService? = null
+ private var recentTransactionsApi: RecentTransactionsService? = null
+ private var clientChargeApi: ClientChargeService? = null
+ private var beneficiaryApi: BeneficiaryService? = null
+ private var thirdPartyTransferApi: ThirdPartyTransferService? = null
+ private var registrationApi: RegistrationService? = null
+ private var notificationApi: NotificationService? = null
+ private var userDetailsService: UserDetailsService? = null
+ private var guarantorApi: GuarantorService? = null
+ private fun init() {
+ authenticationApi = createApi(AuthenticationService::class.java)
+ clientsApi = createApi(ClientService::class.java)
+ savingAccountsListApi = createApi(SavingAccountsListService::class.java)
+ loanAccountsListApi = createApi(LoanAccountsListService::class.java)
+ recentTransactionsApi = createApi(RecentTransactionsService::class.java)
+ clientChargeApi = createApi(ClientChargeService::class.java)
+ beneficiaryApi = createApi(BeneficiaryService::class.java)
+ thirdPartyTransferApi = createApi(ThirdPartyTransferService::class.java)
+ registrationApi = createApi(RegistrationService::class.java)
+ notificationApi = createApi(NotificationService::class.java)
+ guarantorApi = createApi(GuarantorService::class.java)
+ userDetailsService = createApi(UserDetailsService::class.java)
+ }
+
+ private fun createApi(clazz: Class): T? {
+ return retrofit?.create(clazz)
+ }
+
+ @JvmStatic
+ fun createService(endpoint: String?, tenant: String?, authToken: String?) {
+ retrofit = Retrofit.Builder()
+ .baseUrl(BaseURL().getUrl(endpoint!!))
+ .addConverterFactory(GsonConverterFactory.create())
+ .addCallAdapterFactory(RxJava2CallAdapterFactory.create())
+ .client(SelfServiceOkHttpClient(tenant, authToken).mifosOkHttpClient)
+ .build()
+ init()
+ }
+ }
+
+ init {
+ createService(preferencesHelper.baseUrl, preferencesHelper.tenant,
+ preferencesHelper.token)
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/org/mifos/mobile/api/DataManager.java b/app/src/main/java/org/mifos/mobile/api/DataManager.java
deleted file mode 100644
index bd1946f2c7..0000000000
--- a/app/src/main/java/org/mifos/mobile/api/DataManager.java
+++ /dev/null
@@ -1,339 +0,0 @@
-package org.mifos.mobile.api;
-
-import org.mifos.mobile.FakeRemoteDataSource;
-import org.mifos.mobile.api.local.DatabaseHelper;
-import org.mifos.mobile.api.local.PreferencesHelper;
-import org.mifos.mobile.models.Charge;
-import org.mifos.mobile.models.client.Client;
-import org.mifos.mobile.models.guarantor.GuarantorApplicationPayload;
-import org.mifos.mobile.models.guarantor.GuarantorPayload;
-import org.mifos.mobile.models.guarantor.GuarantorTemplatePayload;
-import org.mifos.mobile.models.UpdatePasswordPayload;
-import org.mifos.mobile.models.accounts.savings.SavingsAccountApplicationPayload;
-import org.mifos.mobile.models.accounts.savings.SavingsAccountUpdatePayload;
-import org.mifos.mobile.models.accounts.savings.SavingsAccountWithdrawPayload;
-import org.mifos.mobile.models.notification.MifosNotification;
-import org.mifos.mobile.models.notification.NotificationRegisterPayload;
-import org.mifos.mobile.models.Page;
-import org.mifos.mobile.models.Transaction;
-import org.mifos.mobile.models.User;
-import org.mifos.mobile.models.accounts.loan.LoanAccount;
-import org.mifos.mobile.models.accounts.loan.LoanWithAssociations;
-import org.mifos.mobile.models.accounts.loan.LoanWithdraw;
-import org.mifos.mobile.models.accounts.savings.SavingsWithAssociations;
-import org.mifos.mobile.models.beneficiary.Beneficiary;
-import org.mifos.mobile.models.beneficiary.BeneficiaryPayload;
-import org.mifos.mobile.models.beneficiary.BeneficiaryUpdatePayload;
-import org.mifos.mobile.models.client.ClientAccounts;
-import org.mifos.mobile.models.notification.NotificationUserDetail;
-import org.mifos.mobile.models.payload.LoansPayload;
-import org.mifos.mobile.models.payload.TransferPayload;
-import org.mifos.mobile.models.register.RegisterPayload;
-import org.mifos.mobile.models.register.UserVerify;
-import org.mifos.mobile.models.templates.account.AccountOptionsTemplate;
-import org.mifos.mobile.models.templates.beneficiary.BeneficiaryTemplate;
-import org.mifos.mobile.models.templates.loans.LoanTemplate;
-import org.mifos.mobile.models.templates.savings.SavingsAccountTemplate;
-
-import java.util.List;
-
-import javax.inject.Inject;
-import javax.inject.Singleton;
-
-import io.reactivex.Observable;
-import io.reactivex.ObservableSource;
-import io.reactivex.functions.Function;
-import okhttp3.MediaType;
-import okhttp3.ResponseBody;
-
-
-/**
- * @author Vishwajeet
- * @since 13/6/16.
- */
-@Singleton
-public class DataManager {
-
- private final PreferencesHelper preferencesHelper;
- private final BaseApiManager baseApiManager;
- private final DatabaseHelper databaseHelper;
- private long clientId;
-
- @Inject
- public DataManager(PreferencesHelper preferencesHelper, BaseApiManager baseApiManager,
- DatabaseHelper databaseHelper) {
- this.preferencesHelper = preferencesHelper;
- this.baseApiManager = baseApiManager;
- this.databaseHelper = databaseHelper;
- clientId = this.preferencesHelper.getClientId();
- }
-
- public Observable login(String username, String password) {
- return baseApiManager.getAuthenticationApi().authenticate(username, password);
- }
-
- public Observable> getClients() {
- return baseApiManager.getClientsApi().getClients();
- }
-
- public Observable getCurrentClient() {
- return baseApiManager.getClientsApi().getClientForId(clientId);
- }
-
- public Observable getClientImage() {
- return baseApiManager.getClientsApi().getClientImage(clientId);
- }
-
- public Observable getClientAccounts() {
- return baseApiManager.getClientsApi().getClientAccounts(clientId);
- }
-
- public Observable getAccounts(String accountType) {
- return baseApiManager.getClientsApi().getAccounts(clientId, accountType);
- }
-
- public Observable> getRecentTransactions(int offset, int limit) {
- return baseApiManager.getRecentTransactionsApi()
- .getRecentTransactionsList(clientId, offset, limit);
- }
-
- public Observable> getClientCharges(long clientId) {
- return baseApiManager.getClientChargeApi().getClientChargeList(clientId)
- .concatMap(new Function, ObservableSource extends Page>>() {
- @Override
- public Observable extends Page> apply(Page chargePage) {
- return databaseHelper.syncCharges(chargePage);
- }
- });
- }
-
- public Observable> getLoanCharges(long loanId) {
- return baseApiManager.getClientChargeApi().getLoanAccountChargeList(loanId);
- }
-
- public Observable> getSavingsCharges(long savingsId) {
- return baseApiManager.getClientChargeApi().getSavingsAccountChargeList(savingsId);
- }
-
- public Observable getSavingsWithAssociations(long accountId,
- String associationType) {
- return baseApiManager
- .getSavingAccountsListApi().getSavingsWithAssociations(accountId, associationType);
- }
-
- public Observable getAccountTransferTemplate() {
- return baseApiManager.getSavingAccountsListApi().getAccountTransferTemplate();
- }
-
- public Observable makeTransfer(TransferPayload transferPayload) {
- return baseApiManager.getSavingAccountsListApi().makeTransfer(transferPayload);
- }
-
- public Observable getSavingAccountApplicationTemplate(long client) {
- return baseApiManager.getSavingAccountsListApi()
- .getSavingsAccountApplicationTemplate(client);
- }
-
- public Observable submitSavingAccountApplication(
- SavingsAccountApplicationPayload payload) {
- return baseApiManager.getSavingAccountsListApi().submitSavingAccountApplication(payload);
- }
-
- public Observable updateSavingsAccount(
- String accountId, SavingsAccountUpdatePayload payload) {
- return baseApiManager.getSavingAccountsListApi()
- .updateSavingsAccountUpdate(accountId, payload);
- }
-
- public Observable submitWithdrawSavingsAccount(
- String accountId, SavingsAccountWithdrawPayload payload) {
- return baseApiManager.getSavingAccountsListApi()
- .submitWithdrawSavingsAccount(accountId, payload)
- .onErrorResumeNext(new Function>() {
- @Override
- public ObservableSource extends
- ResponseBody> apply(Throwable throwable) throws Exception {
- return Observable.just(ResponseBody.create(MediaType.parse("text/parse"),
- "Saving Account Withdrawn Successfully"));
- }
- });
- }
-
- public Observable getLoanAccountDetails(long loanId) {
- return baseApiManager.getLoanAccountsListApi().getLoanAccountsDetail(loanId);
- }
-
- public Observable getLoanWithAssociations(String associationType,
- long loanId) {
- return baseApiManager.getLoanAccountsListApi()
- .getLoanWithAssociations(loanId, associationType);
- }
-
- public Observable getLoanTemplate() {
- return baseApiManager.getLoanAccountsListApi().getLoanTemplate(clientId);
- }
-
- public Observable getLoanTemplateByProduct(Integer productId) {
- return baseApiManager.getLoanAccountsListApi()
- .getLoanTemplateByProduct(clientId, productId);
- }
-
- public Observable createLoansAccount(LoansPayload loansPayload) {
- return baseApiManager.getLoanAccountsListApi().createLoansAccount(loansPayload);
- }
-
- public Observable updateLoanAccount(long loanId, LoansPayload loansPayload) {
- return baseApiManager.getLoanAccountsListApi().updateLoanAccount(loanId, loansPayload);
- }
-
- public Observable withdrawLoanAccount(long loanId, LoanWithdraw loanWithdraw) {
- return baseApiManager.getLoanAccountsListApi().withdrawLoanAccount(loanId, loanWithdraw);
- }
-
- public Observable> getBeneficiaryList() {
- return baseApiManager.getBeneficiaryApi().getBeneficiaryList();
- }
-
- public Observable getBeneficiaryTemplate() {
- return baseApiManager.getBeneficiaryApi().getBeneficiaryTemplate();
- }
-
- public Observable createBeneficiary(BeneficiaryPayload beneficiaryPayload) {
- return baseApiManager.getBeneficiaryApi().createBeneficiary(beneficiaryPayload);
- }
-
- public Observable updateBeneficiary(long beneficiaryId,
- BeneficiaryUpdatePayload payload) {
- return baseApiManager.getBeneficiaryApi().updateBeneficiary(beneficiaryId, payload);
- }
-
- public Observable deleteBeneficiary(long beneficiaryId) {
- return baseApiManager.getBeneficiaryApi().deleteBeneficiary(beneficiaryId);
- }
-
- public Observable getThirdPartyTransferTemplate() {
- return baseApiManager.getThirdPartyTransferApi().getAccountTransferTemplate();
- }
-
- public Observable makeThirdPartyTransfer(TransferPayload transferPayload) {
- return baseApiManager.getThirdPartyTransferApi().makeTransfer(transferPayload);
- }
-
- public Observable registerUser(RegisterPayload registerPayload) {
- return baseApiManager.getRegistrationApi().registerUser(registerPayload);
- }
-
- public Observable verifyUser(UserVerify userVerify) {
- return baseApiManager.getRegistrationApi().verifyUser(userVerify);
- }
-
- public PreferencesHelper getPreferencesHelper() {
- return preferencesHelper;
- }
-
- public Observable> getClientLocalCharges() {
- return databaseHelper.getClientCharges();
- }
-
- public Observable> getNotifications() {
- return databaseHelper.getNotifications();
- }
-
- public Observable getUnreadNotificationsCount() {
- return databaseHelper.getUnreadNotificationsCount();
- }
-
- public Observable registerNotification(NotificationRegisterPayload payload) {
- return baseApiManager.getNotificationApi().registerNotification(payload);
- }
-
- public Observable updateRegisterNotification(long id, NotificationRegisterPayload
- payload) {
- return baseApiManager.getNotificationApi().updateRegisterNotification(id, payload);
- }
-
- public Observable getUserNotificationId(long id) {
- return baseApiManager.getNotificationApi().getUserNotificationId(id);
- }
-
- public Observable updateAccountPassword(UpdatePasswordPayload payload) {
- return baseApiManager.getUserDetailsService().updateAccountPassword(payload);
- }
-
- public long getClientId() {
- return clientId;
- }
-
- public void setClientId(long clientId) {
- this.clientId = clientId;
- }
-
- public Observable getGuarantorTemplate(long loanId) {
- return baseApiManager.getGuarantorApi().getGuarantorTemplate(loanId)
- .onErrorResumeNext(new Function>() {
- @Override
- public ObservableSource extends
- GuarantorTemplatePayload> apply(Throwable throwable) throws Exception {
- return Observable.just(FakeRemoteDataSource.getGuarantorTemplatePayload());
- }
- });
- }
-
- public Observable> getGuarantorList(long loanId) {
- return baseApiManager.getGuarantorApi().getGuarantorList(loanId)
- .onErrorResumeNext(new Function>>() {
- @Override
- public ObservableSource
- extends List> apply(Throwable throwable) throws
- Exception {
- return Observable.just(FakeRemoteDataSource.getGuarantorsList());
- }
- });
- }
-
- public Observable createGuarantor(long loanId,
- GuarantorApplicationPayload payload) {
- return baseApiManager.getGuarantorApi().createGuarantor(loanId, payload)
- .onErrorResumeNext(new Function>() {
- @Override
- public ObservableSource extends ResponseBody> apply(Throwable throwable)
- throws Exception {
- ResponseBody responseBody = ResponseBody.create(MediaType
- .parse("text/plain"), "Guarantor Added Successfully");
- return Observable.just(responseBody);
- }
- });
- }
-
- public Observable updateGuarantor(GuarantorApplicationPayload payload,
- long loanId, long guarantorId) {
- return baseApiManager.getGuarantorApi().updateGuarantor(payload, loanId, guarantorId)
- .onErrorResumeNext(new Function>() {
- @Override
- public ObservableSource extends ResponseBody> apply(Throwable throwable)
- throws Exception {
- return Observable.just(ResponseBody.create(MediaType
- .parse("plain/text"), "Guarantor Updated Successfully"));
- }
- });
- }
-
- public Observable deleteGuarantor(long loanId, long guarantorId) {
- return baseApiManager.getGuarantorApi().deleteGuarantor(loanId, guarantorId)
- .onErrorResumeNext(new Function>() {
- @Override
- public ObservableSource extends ResponseBody> apply(Throwable throwable)
- throws Exception {
- return Observable.just(ResponseBody.create(MediaType
- .parse("plain/text"), "Guarantor Deleted Successfully"));
- }
- });
- }
-
-}
diff --git a/app/src/main/java/org/mifos/mobile/api/DataManager.kt b/app/src/main/java/org/mifos/mobile/api/DataManager.kt
new file mode 100644
index 0000000000..0ebd57bd7a
--- /dev/null
+++ b/app/src/main/java/org/mifos/mobile/api/DataManager.kt
@@ -0,0 +1,265 @@
+package org.mifos.mobile.api
+
+import io.reactivex.Observable
+import io.reactivex.ObservableSource
+import io.reactivex.functions.Function
+
+import okhttp3.MediaType
+import okhttp3.ResponseBody
+
+import org.mifos.mobile.FakeRemoteDataSource
+import org.mifos.mobile.api.local.DatabaseHelper
+import org.mifos.mobile.api.local.PreferencesHelper
+import org.mifos.mobile.models.*
+import org.mifos.mobile.models.accounts.loan.LoanAccount
+import org.mifos.mobile.models.accounts.loan.LoanWithAssociations
+import org.mifos.mobile.models.accounts.loan.LoanWithdraw
+import org.mifos.mobile.models.accounts.savings.SavingsAccountApplicationPayload
+import org.mifos.mobile.models.accounts.savings.SavingsAccountUpdatePayload
+import org.mifos.mobile.models.accounts.savings.SavingsAccountWithdrawPayload
+import org.mifos.mobile.models.accounts.savings.SavingsWithAssociations
+import org.mifos.mobile.models.beneficiary.Beneficiary
+import org.mifos.mobile.models.beneficiary.BeneficiaryPayload
+import org.mifos.mobile.models.beneficiary.BeneficiaryUpdatePayload
+import org.mifos.mobile.models.client.Client
+import org.mifos.mobile.models.client.ClientAccounts
+import org.mifos.mobile.models.guarantor.GuarantorApplicationPayload
+import org.mifos.mobile.models.guarantor.GuarantorPayload
+import org.mifos.mobile.models.guarantor.GuarantorTemplatePayload
+import org.mifos.mobile.models.notification.MifosNotification
+import org.mifos.mobile.models.notification.NotificationRegisterPayload
+import org.mifos.mobile.models.notification.NotificationUserDetail
+import org.mifos.mobile.models.payload.LoansPayload
+import org.mifos.mobile.models.payload.LoginPayload
+import org.mifos.mobile.models.payload.TransferPayload
+import org.mifos.mobile.models.register.RegisterPayload
+import org.mifos.mobile.models.register.UserVerify
+import org.mifos.mobile.models.templates.account.AccountOptionsTemplate
+import org.mifos.mobile.models.templates.beneficiary.BeneficiaryTemplate
+import org.mifos.mobile.models.templates.loans.LoanTemplate
+import org.mifos.mobile.models.templates.savings.SavingsAccountTemplate
+
+import javax.inject.Inject
+import javax.inject.Singleton
+
+/**
+ * @author Vishwajeet
+ * @since 13/6/16.
+ */
+@Singleton
+class DataManager @Inject constructor(
+ val preferencesHelper: PreferencesHelper, private val baseApiManager: BaseApiManager,
+ private val databaseHelper: DatabaseHelper
+) {
+ var clientId: Long? = preferencesHelper.clientId
+ fun login(loginPayload: LoginPayload?): Observable? {
+ return baseApiManager.authenticationApi?.authenticate(loginPayload)
+ }
+
+ val clients: Observable?>?
+ get() = baseApiManager.clientsApi?.clients
+ val currentClient: Observable?
+ get() = baseApiManager.clientsApi?.getClientForId(clientId)
+ val clientImage: Observable?
+ get() = baseApiManager.clientsApi?.getClientImage(clientId)
+ val clientAccounts: Observable?
+ get() = baseApiManager.clientsApi?.getClientAccounts(clientId)
+
+ fun getAccounts(accountType: String?): Observable? {
+ return baseApiManager.clientsApi?.getAccounts(clientId, accountType)
+ }
+
+ fun getRecentTransactions(offset: Int, limit: Int): Observable?>? {
+ return baseApiManager.recentTransactionsApi
+ ?.getRecentTransactionsList(clientId, offset, limit)
+ }
+
+ fun getClientCharges(clientId: Long): Observable?>? {
+ return baseApiManager.clientChargeApi?.getClientChargeList(clientId)
+ ?.concatMap { chargePage -> databaseHelper.syncCharges(chargePage) }
+ }
+
+ fun getLoanCharges(loanId: Long): Observable?>? {
+ return baseApiManager.clientChargeApi?.getLoanAccountChargeList(loanId)
+ }
+
+ fun getSavingsCharges(savingsId: Long): Observable?>? {
+ return baseApiManager.clientChargeApi?.getSavingsAccountChargeList(savingsId)
+ }
+
+ fun getSavingsWithAssociations(
+ accountId: Long?,
+ associationType: String?
+ ): Observable? {
+ return baseApiManager
+ .savingAccountsListApi?.getSavingsWithAssociations(accountId, associationType)
+ }
+
+ val accountTransferTemplate: Observable?
+ get() = baseApiManager.savingAccountsListApi?.accountTransferTemplate
+
+ fun makeTransfer(transferPayload: TransferPayload?): Observable? {
+ return baseApiManager.savingAccountsListApi?.makeTransfer(transferPayload)
+ }
+
+ fun getSavingAccountApplicationTemplate(client: Long?): Observable? {
+ return baseApiManager.savingAccountsListApi
+ ?.getSavingsAccountApplicationTemplate(client)
+ }
+
+ fun submitSavingAccountApplication(
+ payload: SavingsAccountApplicationPayload?
+ ): Observable? {
+ return baseApiManager.savingAccountsListApi?.submitSavingAccountApplication(payload)
+ }
+
+ fun updateSavingsAccount(
+ accountId: String?, payload: SavingsAccountUpdatePayload?
+ ): Observable? {
+ return baseApiManager.savingAccountsListApi
+ ?.updateSavingsAccountUpdate(accountId, payload)
+ }
+
+ fun submitWithdrawSavingsAccount(
+ accountId: String?, payload: SavingsAccountWithdrawPayload?
+ ): Observable? {
+ return baseApiManager.savingAccountsListApi
+ ?.submitWithdrawSavingsAccount(accountId, payload)
+ ?.onErrorResumeNext(Function> {
+ Observable.just(ResponseBody.create(MediaType.parse("text/parse"),
+ "Saving Account Withdrawn Successfully"))
+ })
+ }
+
+ fun getLoanAccountDetails(loanId: Long): Observable? {
+ return baseApiManager.loanAccountsListApi?.getLoanAccountsDetail(loanId)
+ }
+
+ fun getLoanWithAssociations(
+ associationType: String?,
+ loanId: Long?
+ ): Observable? {
+ return baseApiManager.loanAccountsListApi
+ ?.getLoanWithAssociations(loanId, associationType)
+ }
+
+ val loanTemplate: Observable?
+ get() = baseApiManager.loanAccountsListApi?.getLoanTemplate(clientId)
+
+ fun getLoanTemplateByProduct(productId: Int?): Observable? {
+ return baseApiManager.loanAccountsListApi
+ ?.getLoanTemplateByProduct(clientId, productId)
+ }
+
+ fun createLoansAccount(loansPayload: LoansPayload?): Observable? {
+ return baseApiManager.loanAccountsListApi?.createLoansAccount(loansPayload)
+ }
+
+ fun updateLoanAccount(loanId: Long, loansPayload: LoansPayload?): Observable? {
+ return baseApiManager.loanAccountsListApi?.updateLoanAccount(loanId, loansPayload)
+ }
+
+ fun withdrawLoanAccount(loanId: Long?, loanWithdraw: LoanWithdraw?): Observable? {
+ return baseApiManager.loanAccountsListApi?.withdrawLoanAccount(loanId, loanWithdraw)
+ }
+
+ val beneficiaryList: Observable?>?
+ get() = baseApiManager.beneficiaryApi?.beneficiaryList
+ val beneficiaryTemplate: Observable?
+ get() = baseApiManager.beneficiaryApi?.beneficiaryTemplate
+
+ fun createBeneficiary(beneficiaryPayload: BeneficiaryPayload?): Observable? {
+ return baseApiManager.beneficiaryApi?.createBeneficiary(beneficiaryPayload)
+ }
+
+ fun updateBeneficiary(
+ beneficiaryId: Long?,
+ payload: BeneficiaryUpdatePayload?
+ ): Observable? {
+ return baseApiManager.beneficiaryApi?.updateBeneficiary(beneficiaryId, payload)
+ }
+
+ fun deleteBeneficiary(beneficiaryId: Long?): Observable? {
+ return baseApiManager.beneficiaryApi?.deleteBeneficiary(beneficiaryId)
+ }
+
+ val thirdPartyTransferTemplate: Observable?
+ get() = baseApiManager.thirdPartyTransferApi?.accountTransferTemplate
+
+ fun makeThirdPartyTransfer(transferPayload: TransferPayload?): Observable? {
+ return baseApiManager.thirdPartyTransferApi?.makeTransfer(transferPayload)
+ }
+
+ fun registerUser(registerPayload: RegisterPayload?): Observable? {
+ return baseApiManager.registrationApi?.registerUser(registerPayload)
+ }
+
+ fun verifyUser(userVerify: UserVerify?): Observable? {
+ return baseApiManager.registrationApi?.verifyUser(userVerify)
+ }
+
+ val clientLocalCharges: Observable?>?
+ get() = databaseHelper.clientCharges
+ val notifications: Observable?>?
+ get() = databaseHelper.notifications
+ val unreadNotificationsCount: Observable
+ get() = databaseHelper.unreadNotificationsCount
+
+ fun registerNotification(payload: NotificationRegisterPayload?): Observable? {
+ return baseApiManager.notificationApi?.registerNotification(payload)
+ }
+
+ fun updateRegisterNotification(id: Long, payload: NotificationRegisterPayload?): Observable? {
+ return baseApiManager.notificationApi?.updateRegisterNotification(id, payload)
+ }
+
+ fun getUserNotificationId(id: Long): Observable? {
+ return baseApiManager.notificationApi?.getUserNotificationId(id)
+ }
+
+ fun updateAccountPassword(payload: UpdatePasswordPayload?): Observable? {
+ return baseApiManager.userDetailsService?.updateAccountPassword(payload)
+ }
+
+ fun getGuarantorTemplate(loanId: Long?): Observable? {
+ return baseApiManager.guarantorApi?.getGuarantorTemplate(loanId)
+ ?.onErrorResumeNext(Function> { Observable.just(FakeRemoteDataSource.guarantorTemplatePayload) })
+ }
+
+ fun getGuarantorList(loanId: Long): Observable?>? {
+ return baseApiManager.guarantorApi?.getGuarantorList(loanId)
+ ?.onErrorResumeNext(Function>> { Observable.just(FakeRemoteDataSource.guarantorsList) })
+ }
+
+ fun createGuarantor(
+ loanId: Long?,
+ payload: GuarantorApplicationPayload?
+ ): Observable? {
+ return baseApiManager.guarantorApi?.createGuarantor(loanId, payload)
+ ?.onErrorResumeNext(Function> {
+ val responseBody = ResponseBody.create(MediaType
+ .parse("text/plain"), "Guarantor Added Successfully")
+ Observable.just(responseBody)
+ })
+ }
+
+ fun updateGuarantor(
+ payload: GuarantorApplicationPayload?,
+ loanId: Long?, guarantorId: Long?
+ ): Observable? {
+ return baseApiManager.guarantorApi?.updateGuarantor(payload, loanId, guarantorId)
+ ?.onErrorResumeNext(Function> {
+ Observable.just(ResponseBody.create(MediaType
+ .parse("plain/text"), "Guarantor Updated Successfully"))
+ })
+ }
+
+ fun deleteGuarantor(loanId: Long?, guarantorId: Long?): Observable? {
+ return baseApiManager.guarantorApi?.deleteGuarantor(loanId, guarantorId)
+ ?.onErrorResumeNext(Function> {
+ Observable.just(ResponseBody.create(MediaType
+ .parse("plain/text"), "Guarantor Deleted Successfully"))
+ })
+ }
+
+}
\ No newline at end of file
diff --git a/app/src/main/java/org/mifos/mobile/api/SelfServiceOkHttpClient.java b/app/src/main/java/org/mifos/mobile/api/SelfServiceOkHttpClient.java
deleted file mode 100644
index ac71f37b37..0000000000
--- a/app/src/main/java/org/mifos/mobile/api/SelfServiceOkHttpClient.java
+++ /dev/null
@@ -1,107 +0,0 @@
-package org.mifos.mobile.api;
-
-import java.security.KeyStore;
-import java.security.cert.CertificateException;
-import java.security.cert.X509Certificate;
-import java.util.Arrays;
-import java.util.concurrent.TimeUnit;
-
-import javax.net.ssl.HostnameVerifier;
-import javax.net.ssl.SSLContext;
-import javax.net.ssl.SSLSession;
-import javax.net.ssl.SSLSocketFactory;
-import javax.net.ssl.TrustManager;
-import javax.net.ssl.TrustManagerFactory;
-import javax.net.ssl.X509TrustManager;
-
-import okhttp3.OkHttpClient;
-import okhttp3.logging.HttpLoggingInterceptor;
-import okhttp3.logging.HttpLoggingInterceptor.Level;
-
-
-public class SelfServiceOkHttpClient {
- private String authToken;
- private String tenant;
-
- public SelfServiceOkHttpClient(String tenant, String authToken) {
- this.authToken = authToken;
- this.tenant = tenant;
- }
-
- public OkHttpClient getMifosOkHttpClient() {
-
- OkHttpClient.Builder builder = new OkHttpClient.Builder();
-
- try {
- // Create a trust manager that does not validate certificate chains
- TrustManager[] trustAllCerts = {
- new X509TrustManager() {
- @Override
- public void checkClientTrusted(
- X509Certificate[] chain,
- String authType) throws CertificateException {
- }
-
- @Override
- public void checkServerTrusted(
- X509Certificate[] chain,
- String authType) throws CertificateException {
- }
-
- @Override
- public X509Certificate[] getAcceptedIssuers() {
- return new X509Certificate[0];
- }
- }
- };
-
- // Install the all-trusting trust manager
- SSLContext sslContext = SSLContext.getInstance("SSL");
- sslContext.init(null, trustAllCerts, new java.security.SecureRandom());
- // Create an ssl socket factory with our all-trusting manager
- SSLSocketFactory sslSocketFactory = sslContext.getSocketFactory();
-
- //Enable Full Body Logging
- HttpLoggingInterceptor logger = new HttpLoggingInterceptor();
- logger.setLevel(Level.BODY);
-
- TrustManagerFactory trustManagerFactory = TrustManagerFactory.
- getInstance(TrustManagerFactory.getDefaultAlgorithm());
- trustManagerFactory.init((KeyStore) null);
- TrustManager[] trustManagers = trustManagerFactory.getTrustManagers();
- if (trustManagers.length != 1 || !(trustManagers[0] instanceof X509TrustManager)) {
- throw new IllegalStateException("Unexpected default trust managers:" + Arrays.
- toString(trustManagers));
- }
- X509TrustManager trustManager = (X509TrustManager) trustManagers[0];
-
- //Set SSL certificate to OkHttpClient Builder
-
- builder.sslSocketFactory(sslSocketFactory, trustManager);
-
- builder.hostnameVerifier(new HostnameVerifier() {
- @Override
- public boolean verify(String hostname, SSLSession session) {
- return true;
- }
- });
- } catch (Exception e) {
- throw new RuntimeException(e);
- }
-
- //Enable Full Body Logging
- HttpLoggingInterceptor logger = new HttpLoggingInterceptor();
- logger.setLevel(Level.BODY);
-
- //Setting Timeout 30 Seconds
- builder.connectTimeout(60, TimeUnit.SECONDS);
- builder.readTimeout(60, TimeUnit.SECONDS);
-
- //Interceptor :> Full Body Logger and ApiRequest Header
- builder.addInterceptor(logger);
- builder.addInterceptor(new SelfServiceInterceptor(tenant, authToken));
-
- return builder.build();
-
- }
-}
diff --git a/app/src/main/java/org/mifos/mobile/api/SelfServiceOkHttpClient.kt b/app/src/main/java/org/mifos/mobile/api/SelfServiceOkHttpClient.kt
new file mode 100644
index 0000000000..66de4399bd
--- /dev/null
+++ b/app/src/main/java/org/mifos/mobile/api/SelfServiceOkHttpClient.kt
@@ -0,0 +1,82 @@
+package org.mifos.mobile.api
+
+import okhttp3.OkHttpClient
+import okhttp3.logging.HttpLoggingInterceptor
+
+import java.security.KeyStore
+import java.security.SecureRandom
+import java.security.cert.CertificateException
+import java.security.cert.X509Certificate
+import java.util.*
+import java.util.concurrent.TimeUnit
+
+import javax.net.ssl.SSLContext
+import javax.net.ssl.TrustManager
+import javax.net.ssl.TrustManagerFactory
+import javax.net.ssl.X509TrustManager
+
+class SelfServiceOkHttpClient(private val tenant: String?, private val authToken: String?) {
+ // Create a trust manager that does not validate certificate chains
+ val mifosOkHttpClient: OkHttpClient
+ get() {
+ val builder = OkHttpClient.Builder()
+ try {
+ // Create a trust manager that does not validate certificate chains
+ val trustAllCerts = arrayOf(
+ object : X509TrustManager {
+ @Throws(CertificateException::class)
+ override fun checkClientTrusted(
+ chain: Array,
+ authType: String
+ ) {
+ }
+
+ @Throws(CertificateException::class)
+ override fun checkServerTrusted(
+ chain: Array,
+ authType: String
+ ) {
+ }
+
+ override fun getAcceptedIssuers(): Array {
+ return arrayOfNulls(0)
+ }
+ }
+ )
+
+ // Install the all-trusting trust manager
+ val sslContext = SSLContext.getInstance("SSL")
+ sslContext.init(null, trustAllCerts, SecureRandom())
+ // Create an ssl socket factory with our all-trusting manager
+ val sslSocketFactory = sslContext.socketFactory
+
+ //Enable Full Body Logging
+ val logger = HttpLoggingInterceptor()
+ logger.level = HttpLoggingInterceptor.Level.BODY
+ val trustManagerFactory = TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm())
+ trustManagerFactory.init(null as KeyStore?)
+ val trustManagers = trustManagerFactory.trustManagers
+ check(!(trustManagers.size != 1 || trustManagers[0] !is X509TrustManager)) { "Unexpected default trust managers:" + Arrays.toString(trustManagers) }
+ val trustManager = trustManagers[0] as X509TrustManager
+
+ //Set SSL certificate to OkHttpClient Builder
+ builder.sslSocketFactory(sslSocketFactory, trustManager)
+ builder.hostnameVerifier { _, _ -> true }
+ } catch (e: Exception) {
+ throw RuntimeException(e)
+ }
+
+ //Enable Full Body Logging
+ val logger = HttpLoggingInterceptor()
+ logger.level = HttpLoggingInterceptor.Level.BODY
+
+ //Setting Timeout 30 Seconds
+ builder.connectTimeout(60, TimeUnit.SECONDS)
+ builder.readTimeout(60, TimeUnit.SECONDS)
+
+ //Interceptor :> Full Body Logger and ApiRequest Header
+ builder.addInterceptor(logger)
+ builder.addInterceptor(SelfServiceInterceptor(tenant, authToken))
+ return builder.build()
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/org/mifos/mobile/api/local/DatabaseHelper.java b/app/src/main/java/org/mifos/mobile/api/local/DatabaseHelper.java
deleted file mode 100644
index 7a51b88e51..0000000000
--- a/app/src/main/java/org/mifos/mobile/api/local/DatabaseHelper.java
+++ /dev/null
@@ -1,102 +0,0 @@
-package org.mifos.mobile.api.local;
-
-import com.raizlabs.android.dbflow.sql.language.SQLite;
-
-import org.mifos.mobile.models.Charge;
-import org.mifos.mobile.models.Page;
-import org.mifos.mobile.models.notification.MifosNotification;
-import org.mifos.mobile.models.notification.MifosNotification_Table;
-import org.mifos.mobile.utils.NotificationComparator;
-
-import java.util.Collections;
-import java.util.List;
-import java.util.concurrent.Callable;
-
-import javax.inject.Inject;
-import javax.inject.Singleton;
-
-import io.reactivex.Observable;
-import io.reactivex.ObservableSource;
-
-
-/**
- * Created by Rajan Maurya on 02/03/17.
- */
-@Singleton
-public class DatabaseHelper {
-
- @Inject
- public DatabaseHelper() {
- }
-
- public Observable> syncCharges(final Page charges) {
- return Observable.defer(new Callable>>() {
- @Override
- public Observable> call() {
- for (Charge charge : charges.getPageItems()) {
- charge.save();
- }
- return Observable.just(charges);
- }
- });
- }
-
- public Observable> getClientCharges() {
- return Observable.defer(new Callable>>() {
- @Override
- public Observable> call() {
- List charges = SQLite.select()
- .from(Charge.class)
- .queryList();
- Page chargePage = new Page<>();
- chargePage.setPageItems(charges);
- return Observable.just(chargePage);
- }
- });
- }
-
- public Observable> getNotifications() {
- return Observable.defer(new Callable>>() {
- @Override
- public Observable> call() {
- deleteOldNotifications();
- List notifications = SQLite.select()
- .from(MifosNotification.class)
- .queryList();
- Collections.sort(notifications, new NotificationComparator());
- return Observable.just(notifications);
- }
- });
- }
-
- public Observable getUnreadNotificationsCount() {
- return Observable.defer(new Callable>() {
- @Override
- public Observable call() {
- deleteOldNotifications();
- int count = SQLite.select()
- .from(MifosNotification.class)
- .where(MifosNotification_Table.read.eq(false))
- .queryList().size();
- return Observable.just(count);
- }
- });
- }
-
- private void deleteOldNotifications() {
- Observable.defer(new Callable>() {
- @Override
- public Observable call() {
- long thirtyDaysInSeconds = 2592000;
- long thirtyDaysFromCurrentTimeInSeconds = (System.currentTimeMillis() / 1000) -
- thirtyDaysInSeconds;
- SQLite.delete(MifosNotification.class)
- .where(MifosNotification_Table.timeStamp.
- lessThan(thirtyDaysFromCurrentTimeInSeconds * 1000))
- .execute();
- return null;
- }
- });
- }
-
-}
diff --git a/app/src/main/java/org/mifos/mobile/api/local/DatabaseHelper.kt b/app/src/main/java/org/mifos/mobile/api/local/DatabaseHelper.kt
new file mode 100644
index 0000000000..8be20fc9c0
--- /dev/null
+++ b/app/src/main/java/org/mifos/mobile/api/local/DatabaseHelper.kt
@@ -0,0 +1,70 @@
+package org.mifos.mobile.api.local
+
+import com.raizlabs.android.dbflow.sql.language.SQLite
+
+import io.reactivex.Observable
+
+import org.mifos.mobile.models.Charge
+import org.mifos.mobile.models.Page
+import org.mifos.mobile.models.notification.MifosNotification
+import org.mifos.mobile.models.notification.MifosNotification_Table
+import org.mifos.mobile.utils.NotificationComparator
+
+import java.util.*
+import javax.inject.Inject
+import javax.inject.Singleton
+
+/**
+ * Created by Rajan Maurya on 02/03/17.
+ */
+@Singleton
+class DatabaseHelper @Inject constructor() {
+ fun syncCharges(charges: Page?): Observable?>? {
+ return Observable.defer {
+ if (charges != null)
+ for (charge in charges.pageItems)
+ charge?.save()
+ Observable.just(charges)
+ }
+ }
+
+ val clientCharges: Observable?>?
+ get() = Observable.defer {
+ val charges = SQLite.select()
+ .from(Charge::class.java)
+ .queryList()
+ val chargePage = Page()
+ chargePage.pageItems = charges
+ Observable.just(chargePage)
+ }
+ val notifications: Observable?>?
+ get() = Observable.defer {
+ deleteOldNotifications()
+ val notifications = SQLite.select()
+ .from(MifosNotification::class.java)
+ .queryList()
+ Collections.sort(notifications, NotificationComparator())
+ Observable.just(notifications)
+ }
+ val unreadNotificationsCount: Observable
+ get() = Observable.defer {
+ deleteOldNotifications()
+ val count = SQLite.select()
+ .from(MifosNotification::class.java)
+ .where(MifosNotification_Table.read.eq(false))
+ .queryList().size
+ Observable.just(count)
+ }
+
+ private fun deleteOldNotifications() {
+ Observable.defer {
+ val thirtyDaysInSeconds: Long = 2592000
+ val thirtyDaysFromCurrentTimeInSeconds = System.currentTimeMillis() / 1000 -
+ thirtyDaysInSeconds
+ SQLite.delete(MifosNotification::class.java)
+ .where(MifosNotification_Table.timeStamp.lessThan(thirtyDaysFromCurrentTimeInSeconds * 1000))
+ .execute()
+ null
+ }
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/org/mifos/mobile/api/local/PreferencesHelper.java b/app/src/main/java/org/mifos/mobile/api/local/PreferencesHelper.java
deleted file mode 100644
index 6086138a02..0000000000
--- a/app/src/main/java/org/mifos/mobile/api/local/PreferencesHelper.java
+++ /dev/null
@@ -1,198 +0,0 @@
-package org.mifos.mobile.api.local;
-
-import android.content.Context;
-import android.content.SharedPreferences;
-import android.preference.PreferenceManager;
-import android.text.TextUtils;
-
-import org.mifos.mobile.api.BaseURL;
-import org.mifos.mobile.api.SelfServiceInterceptor;
-import org.mifos.mobile.injection.ApplicationContext;
-
-import java.util.Map;
-
-import javax.inject.Inject;
-import javax.inject.Singleton;
-
-/**
- * @author Vishwajeet
- * @since 07/06/16
- */
-
-@Singleton
-public class PreferencesHelper {
- private static final String USER_ID = "preferences_user_id";
- private static final String TOKEN = "preferences_token";
- private static final String CLIENT_ID = "preferences_client";
- private static final String OFFICE_NAME = "preferences_office_name";
- private static final String USER_NAME = "preferences_user_name";
- private static final String PASSCODE = "preferences_passcode";
- private static final String OVERVIEW_STATE = "preferences_overview_state";
- private static final String SENT_TOKEN_TO_SERVER = "sentTokenToServer";
- private static final String GCM_TOKEN = "gcm_token";
- private static final String TENANT = "preferences_base_tenant";
- private static final String BASE_URL = "preferences_base_url_key";
- private static final String PROFILE_IMAGE = "preferences_profile_image";
- public static final String CLIENT_NAME = "client_name";
-
- private SharedPreferences sharedPreferences;
-
- @Inject
- public PreferencesHelper(@ApplicationContext Context context) {
- this.sharedPreferences = PreferenceManager.getDefaultSharedPreferences(context);
- }
-
- public void clear() {
- SharedPreferences.Editor editor = sharedPreferences.edit();
- //prevent deletion of url and tenant
- for (Map.Entry entry: sharedPreferences.getAll().entrySet()) {
- if (!(entry.getKey().equals(BASE_URL) || entry.getKey().equals(TENANT))) {
- editor.remove(entry.getKey());
- }
- }
- editor.apply();
- }
-
- public int getInt(String preferenceKey, int preferenceDefaultValue) {
- return sharedPreferences.getInt(preferenceKey, preferenceDefaultValue);
- }
-
- public void putInt(String preferenceKey, int preferenceValue) {
- sharedPreferences.edit().putInt(preferenceKey, preferenceValue).apply();
- }
-
- public long getLong(String preferenceKey, long preferenceDefaultValue) {
- return sharedPreferences.getLong(preferenceKey, preferenceDefaultValue);
- }
-
- public void putLong(String preferenceKey, long preferenceValue) {
- sharedPreferences.edit().putLong(preferenceKey, preferenceValue).apply();
- }
-
- public String getString(String preferenceKey, String preferenceDefaultValue) {
- return sharedPreferences.getString(preferenceKey, preferenceDefaultValue);
- }
-
- public void putString(String preferenceKey, String preferenceValue) {
- sharedPreferences.edit().putString(preferenceKey, preferenceValue).apply();
- }
-
- public void putBoolean(String preferenceKey, boolean preferenceValue) {
- sharedPreferences.edit().putBoolean(preferenceKey, preferenceValue).apply();
- }
-
- public boolean getBoolean(String preferenceKey, boolean preferenceDefaultValue) {
- return sharedPreferences.getBoolean(preferenceKey, preferenceDefaultValue);
- }
-
- public void saveToken(String token) {
- putString(TOKEN, token);
- }
-
- public void clearToken() {
- putString(TOKEN, "");
- }
-
- public String getToken() {
- return getString(TOKEN, "");
- }
-
- public boolean isAuthenticated() {
- return !TextUtils.isEmpty(getToken());
- }
-
- public long getUserId() {
- return getLong(USER_ID, -1);
- }
-
- public void setUserId(long id) {
- putLong(USER_ID, id);
- }
-
- public String getTenant() {
- return getString(TENANT, SelfServiceInterceptor.DEFAULT_TENANT);
- }
-
- public void setPasscode(String passcode) {
- putString(PASSCODE, passcode);
- }
-
- public String getPasscode() {
- return getString(PASSCODE, "");
- }
-
- public void setClientId(long clientId) {
- putLong(CLIENT_ID, clientId);
- }
-
- public long getClientId() {
- return getLong(CLIENT_ID, -1);
- }
-
- public void setOfficeName(String officeName) {
- putString(OFFICE_NAME, officeName);
- }
-
- public String getUserName() {
- return getString(USER_NAME, "");
- }
-
- public void setUserName(String userName) {
- putString(USER_NAME, userName);
- }
-
- public String getClientName() {
- return getString(CLIENT_NAME, "");
- }
-
- public void setClientName(String clientName) {
- putString(CLIENT_NAME, clientName);
- }
-
- public String getOfficeName() {
- return getString(OFFICE_NAME, "");
- }
-
- public void setOverviewState(boolean state) {
- putBoolean(OVERVIEW_STATE, state);
- }
-
- public boolean overviewState() {
- return getBoolean(OVERVIEW_STATE, true);
- }
-
- public void saveGcmToken(String token) {
- putString(GCM_TOKEN, token);
- }
-
- public String getUserProfileImage() {
- return getString(PROFILE_IMAGE, null);
- }
-
- public void setUserProfileImage(String image) {
- putString(PROFILE_IMAGE, image);
- }
-
- public String getGcmToken() {
- return getString(GCM_TOKEN, "");
- }
-
- public void setSentTokenToServer(boolean sentTokenToServer) {
- putBoolean(SENT_TOKEN_TO_SERVER, sentTokenToServer);
- }
-
- public boolean sentTokenToServerState() {
- return getBoolean(SENT_TOKEN_TO_SERVER, false);
- }
-
- public void updateConfiguration(String baseUrl, String tenant) {
- sharedPreferences.edit()
- .putString(BASE_URL, baseUrl)
- .putString(TENANT, tenant)
- .apply();
- }
-
- public String getBaseUrl() {
- return getString(BASE_URL, new BaseURL().getDefaultBaseUrl());
- }
-}
diff --git a/app/src/main/java/org/mifos/mobile/api/local/PreferencesHelper.kt b/app/src/main/java/org/mifos/mobile/api/local/PreferencesHelper.kt
new file mode 100644
index 0000000000..6b892b89d2
--- /dev/null
+++ b/app/src/main/java/org/mifos/mobile/api/local/PreferencesHelper.kt
@@ -0,0 +1,167 @@
+package org.mifos.mobile.api.local
+
+import android.content.Context
+import android.content.SharedPreferences
+import android.preference.PreferenceManager
+import android.text.TextUtils
+
+import org.mifos.mobile.api.BaseURL
+import org.mifos.mobile.api.SelfServiceInterceptor
+import org.mifos.mobile.injection.ApplicationContext
+
+import javax.inject.Inject
+import javax.inject.Singleton
+
+/**
+ * @author Vishwajeet
+ * @since 07/06/16
+ */
+@Singleton
+class PreferencesHelper @Inject constructor(@ApplicationContext context: Context?) {
+ private val sharedPreferences: SharedPreferences? = PreferenceManager.getDefaultSharedPreferences(context)
+ fun clear() {
+ val editor = sharedPreferences?.edit()
+ //prevent deletion of url and tenant
+ if (sharedPreferences != null)
+ for ((key) in sharedPreferences.all) {
+ if (!(key == BASE_URL || key == TENANT)) {
+ editor?.remove(key)
+ }
+ }
+ editor?.apply()
+ }
+
+ fun getInt(preferenceKey: String?, preferenceDefaultValue: Int): Int? {
+ return sharedPreferences?.getInt(preferenceKey, preferenceDefaultValue)
+ }
+
+ fun putInt(preferenceKey: String?, preferenceValue: Int) {
+ sharedPreferences?.edit()?.putInt(preferenceKey, preferenceValue)?.apply()
+ }
+
+ fun getLong(preferenceKey: String?, preferenceDefaultValue: Long): Long? {
+ return sharedPreferences?.getLong(preferenceKey, preferenceDefaultValue)
+ }
+
+ fun putLong(preferenceKey: String?, preferenceValue: Long) {
+ sharedPreferences?.edit()?.putLong(preferenceKey, preferenceValue)?.apply()
+ }
+
+ fun getString(preferenceKey: String?, preferenceDefaultValue: String?): String? {
+ return sharedPreferences?.getString(preferenceKey, preferenceDefaultValue)
+ }
+
+ private fun putString(preferenceKey: String?, preferenceValue: String?) {
+ sharedPreferences?.edit()?.putString(preferenceKey, preferenceValue)?.apply()
+ }
+
+ fun putBoolean(preferenceKey: String?, preferenceValue: Boolean) {
+ sharedPreferences?.edit()?.putBoolean(preferenceKey, preferenceValue)?.apply()
+ }
+
+ fun getBoolean(preferenceKey: String?, preferenceDefaultValue: Boolean): Boolean? {
+ return sharedPreferences?.getBoolean(preferenceKey, preferenceDefaultValue)
+ }
+
+ fun saveToken(token: String?) {
+ putString(TOKEN, token)
+ }
+
+ fun clearToken() {
+ putString(TOKEN, "")
+ }
+
+ val token: String?
+ get() = getString(TOKEN, "")
+ val isAuthenticated: Boolean?
+ get() = !TextUtils.isEmpty(token)
+ var userId: Long?
+ get() = getLong(USER_ID, -1)
+ set(id) {
+ if (id != null)
+ putLong(USER_ID, id)
+ }
+ val tenant: String?
+ get() = getString(TENANT, SelfServiceInterceptor.DEFAULT_TENANT)
+ var passcode: String?
+ get() = getString(PASSCODE, "")
+ set(passcode) {
+ putString(PASSCODE, passcode)
+ }
+ var clientId: Long?
+ get() = getLong(CLIENT_ID, -1)
+ set(clientId) {
+ if (clientId != null)
+ putLong(CLIENT_ID, clientId)
+ }
+ var userName: String?
+ get() = getString(USER_NAME, "")
+ set(userName) {
+ putString(USER_NAME, userName)
+ }
+ var clientName: String?
+ get() = getString(CLIENT_NAME, "")
+ set(clientName) {
+ putString(CLIENT_NAME, clientName)
+ }
+ var officeName: String?
+ get() = getString(OFFICE_NAME, "")
+ set(officeName) {
+ putString(OFFICE_NAME, officeName)
+ }
+
+ fun setOverviewState(state: Boolean) {
+ putBoolean(OVERVIEW_STATE, state)
+ }
+
+ fun overviewState(): Boolean? {
+ return getBoolean(OVERVIEW_STATE, true)
+ }
+
+ fun saveGcmToken(token: String?) {
+ putString(GCM_TOKEN, token)
+ }
+
+ var userProfileImage: String?
+ get() = getString(PROFILE_IMAGE, null)
+ set(image) {
+ putString(PROFILE_IMAGE, image)
+ }
+ val gcmToken: String?
+ get() = getString(GCM_TOKEN, "")
+
+ fun setSentTokenToServer(sentTokenToServer: Boolean) {
+ putBoolean(SENT_TOKEN_TO_SERVER, sentTokenToServer)
+ }
+
+ fun sentTokenToServerState(): Boolean? {
+ return getBoolean(SENT_TOKEN_TO_SERVER, false)
+ }
+
+ fun updateConfiguration(baseUrl: String?, tenant: String?) {
+ sharedPreferences?.edit()
+ ?.putString(BASE_URL, baseUrl)
+ ?.putString(TENANT, tenant)
+ ?.apply()
+ }
+
+ val baseUrl: String?
+ get() = getString(BASE_URL, BaseURL().defaultBaseUrl)
+
+ companion object {
+ private const val USER_ID = "preferences_user_id"
+ private const val TOKEN = "preferences_token"
+ private const val CLIENT_ID = "preferences_client"
+ private const val OFFICE_NAME = "preferences_office_name"
+ private const val USER_NAME = "preferences_user_name"
+ private const val PASSCODE = "preferences_passcode"
+ private const val OVERVIEW_STATE = "preferences_overview_state"
+ private const val SENT_TOKEN_TO_SERVER = "sentTokenToServer"
+ private const val GCM_TOKEN = "gcm_token"
+ private const val TENANT = "preferences_base_tenant"
+ private const val BASE_URL = "preferences_base_url_key"
+ private const val PROFILE_IMAGE = "preferences_profile_image"
+ const val CLIENT_NAME = "client_name"
+ }
+
+}
\ No newline at end of file
diff --git a/app/src/main/java/org/mifos/mobile/api/local/SelfServiceDatabase.java b/app/src/main/java/org/mifos/mobile/api/local/SelfServiceDatabase.java
deleted file mode 100644
index 973a325e25..0000000000
--- a/app/src/main/java/org/mifos/mobile/api/local/SelfServiceDatabase.java
+++ /dev/null
@@ -1,11 +0,0 @@
-package org.mifos.mobile.api.local;
-
-import com.raizlabs.android.dbflow.annotation.Database;
-
-@Database(name = SelfServiceDatabase.NAME, version = SelfServiceDatabase.VERSION)
-public class SelfServiceDatabase {
-
- public static final String NAME = "SelfService"; // we will add the .db extension
-
- public static final int VERSION = 1;
-}
diff --git a/app/src/main/java/org/mifos/mobile/api/local/SelfServiceDatabase.kt b/app/src/main/java/org/mifos/mobile/api/local/SelfServiceDatabase.kt
new file mode 100644
index 0000000000..e16c092842
--- /dev/null
+++ b/app/src/main/java/org/mifos/mobile/api/local/SelfServiceDatabase.kt
@@ -0,0 +1,9 @@
+package org.mifos.mobile.api.local
+
+import com.raizlabs.android.dbflow.annotation.Database
+
+@Database(name = SelfServiceDatabase.NAME, version = SelfServiceDatabase.VERSION)
+object SelfServiceDatabase {
+ const val NAME: String = "SelfService" // we will add the .db extension
+ const val VERSION: Int = 1
+}
diff --git a/app/src/main/java/org/mifos/mobile/api/services/AuthenticationService.java b/app/src/main/java/org/mifos/mobile/api/services/AuthenticationService.java
deleted file mode 100644
index b9ecb3b7de..0000000000
--- a/app/src/main/java/org/mifos/mobile/api/services/AuthenticationService.java
+++ /dev/null
@@ -1,20 +0,0 @@
-package org.mifos.mobile.api.services;
-
-import org.mifos.mobile.api.ApiEndPoints;
-import org.mifos.mobile.models.User;
-
-import io.reactivex.Observable;
-import retrofit2.http.POST;
-import retrofit2.http.Query;
-
-/**
- * @author Vishwajeet
- * @since 09/06/16
- */
-
-public interface AuthenticationService {
-
- @POST(ApiEndPoints.AUTHENTICATION)
- Observable authenticate(@Query("username") String username,
- @Query("password") String password);
-}
diff --git a/app/src/main/java/org/mifos/mobile/api/services/AuthenticationService.kt b/app/src/main/java/org/mifos/mobile/api/services/AuthenticationService.kt
new file mode 100644
index 0000000000..33e2e4f799
--- /dev/null
+++ b/app/src/main/java/org/mifos/mobile/api/services/AuthenticationService.kt
@@ -0,0 +1,20 @@
+package org.mifos.mobile.api.services
+
+import org.mifos.mobile.api.ApiEndPoints
+import org.mifos.mobile.models.User
+import org.mifos.mobile.models.payload.LoginPayload
+
+import io.reactivex.Observable
+import retrofit2.http.Body
+import retrofit2.http.POST
+
+/**
+ * @author Vishwajeet
+ * @since 09/06/16
+ */
+
+interface AuthenticationService {
+
+ @POST(ApiEndPoints.AUTHENTICATION)
+ fun authenticate(@Body loginPayload: LoginPayload?): Observable?
+}
\ No newline at end of file
diff --git a/app/src/main/java/org/mifos/mobile/api/services/BeneficiaryService.java b/app/src/main/java/org/mifos/mobile/api/services/BeneficiaryService.java
deleted file mode 100644
index 211f73f200..0000000000
--- a/app/src/main/java/org/mifos/mobile/api/services/BeneficiaryService.java
+++ /dev/null
@@ -1,41 +0,0 @@
-package org.mifos.mobile.api.services;
-
-import org.mifos.mobile.api.ApiEndPoints;
-import org.mifos.mobile.models.beneficiary.Beneficiary;
-import org.mifos.mobile.models.beneficiary.BeneficiaryPayload;
-import org.mifos.mobile.models.beneficiary.BeneficiaryUpdatePayload;
-import org.mifos.mobile.models.templates.beneficiary.BeneficiaryTemplate;
-
-import java.util.List;
-
-import io.reactivex.Observable;
-import okhttp3.ResponseBody;
-import retrofit2.http.Body;
-import retrofit2.http.DELETE;
-import retrofit2.http.GET;
-import retrofit2.http.POST;
-import retrofit2.http.PUT;
-import retrofit2.http.Path;
-
-/**
- * Created by dilpreet on 14/6/17.
- */
-
-public interface BeneficiaryService {
-
- @GET(ApiEndPoints.BENEFICIARIES + "/tpt")
- Observable> getBeneficiaryList();
-
- @GET(ApiEndPoints.BENEFICIARIES + "/tpt/template")
- Observable getBeneficiaryTemplate();
-
- @POST(ApiEndPoints.BENEFICIARIES + "/tpt")
- Observable createBeneficiary(@Body BeneficiaryPayload beneficiaryPayload);
-
- @PUT(ApiEndPoints.BENEFICIARIES + "/tpt/{beneficiaryId}")
- Observable updateBeneficiary(@Path("beneficiaryId") long beneficiaryId,
- @Body BeneficiaryUpdatePayload payload);
-
- @DELETE(ApiEndPoints.BENEFICIARIES + "/tpt/{beneficiaryId}")
- Observable deleteBeneficiary(@Path("beneficiaryId") long beneficiaryId);
-}
diff --git a/app/src/main/java/org/mifos/mobile/api/services/BeneficiaryService.kt b/app/src/main/java/org/mifos/mobile/api/services/BeneficiaryService.kt
new file mode 100644
index 0000000000..dd21f3facc
--- /dev/null
+++ b/app/src/main/java/org/mifos/mobile/api/services/BeneficiaryService.kt
@@ -0,0 +1,33 @@
+package org.mifos.mobile.api.services
+
+import io.reactivex.Observable
+import okhttp3.ResponseBody
+import org.mifos.mobile.api.ApiEndPoints
+import org.mifos.mobile.models.beneficiary.Beneficiary
+import org.mifos.mobile.models.beneficiary.BeneficiaryPayload
+import org.mifos.mobile.models.beneficiary.BeneficiaryUpdatePayload
+import org.mifos.mobile.models.templates.beneficiary.BeneficiaryTemplate
+import retrofit2.http.*
+
+/**
+ * Created by dilpreet on 14/6/17.
+ */
+interface BeneficiaryService {
+ @get:GET(ApiEndPoints.BENEFICIARIES + "/tpt")
+ val beneficiaryList: Observable?>?
+
+ @get:GET(ApiEndPoints.BENEFICIARIES + "/tpt/template")
+ val beneficiaryTemplate: Observable?
+
+ @POST(ApiEndPoints.BENEFICIARIES + "/tpt")
+ fun createBeneficiary(@Body beneficiaryPayload: BeneficiaryPayload?): Observable?
+
+ @PUT(ApiEndPoints.BENEFICIARIES + "/tpt/{beneficiaryId}")
+ fun updateBeneficiary(
+ @Path("beneficiaryId") beneficiaryId: Long?,
+ @Body payload: BeneficiaryUpdatePayload?
+ ): Observable?
+
+ @DELETE(ApiEndPoints.BENEFICIARIES + "/tpt/{beneficiaryId}")
+ fun deleteBeneficiary(@Path("beneficiaryId") beneficiaryId: Long?): Observable?
+}
\ No newline at end of file
diff --git a/app/src/main/java/org/mifos/mobile/api/services/ClientChargeService.java b/app/src/main/java/org/mifos/mobile/api/services/ClientChargeService.java
deleted file mode 100644
index c03f1e9ca9..0000000000
--- a/app/src/main/java/org/mifos/mobile/api/services/ClientChargeService.java
+++ /dev/null
@@ -1,26 +0,0 @@
-package org.mifos.mobile.api.services;
-
-import org.mifos.mobile.api.ApiEndPoints;
-import org.mifos.mobile.models.Charge;
-import org.mifos.mobile.models.Page;
-
-import java.util.List;
-
-import io.reactivex.Observable;
-import retrofit2.http.GET;
-import retrofit2.http.Path;
-
-/**
- * @author Vishwajeet
- * @since 17/8/16.
- */
-public interface ClientChargeService {
- @GET(ApiEndPoints.CLIENTS + "/{clientId}/charges")
- Observable> getClientChargeList(@Path("clientId") long clientId);
-
- @GET(ApiEndPoints.LOANS + "/{loanId}/charges")
- Observable> getLoanAccountChargeList(@Path("loanId") long loanId);
-
- @GET(ApiEndPoints.SAVINGS_ACCOUNTS + "/{savingsId}/charges")
- Observable> getSavingsAccountChargeList(@Path("savingsId") long savingsId);
-}
diff --git a/app/src/main/java/org/mifos/mobile/api/services/ClientChargeService.kt b/app/src/main/java/org/mifos/mobile/api/services/ClientChargeService.kt
new file mode 100644
index 0000000000..ec58914253
--- /dev/null
+++ b/app/src/main/java/org/mifos/mobile/api/services/ClientChargeService.kt
@@ -0,0 +1,27 @@
+package org.mifos.mobile.api.services
+
+import io.reactivex.Observable
+
+import org.mifos.mobile.api.ApiEndPoints
+import org.mifos.mobile.models.Charge
+import org.mifos.mobile.models.Page
+
+import retrofit2.http.GET
+import retrofit2.http.Path
+
+/**
+ * @author Vishwajeet
+ * @since 17/8/16.
+ */
+interface ClientChargeService {
+
+ @GET(ApiEndPoints.CLIENTS + "/{clientId}/charges")
+ fun getClientChargeList(@Path("clientId") clientId: Long?): Observable?>?
+
+ @GET(ApiEndPoints.LOANS + "/{loanId}/charges")
+ fun getLoanAccountChargeList(@Path("loanId") loanId: Long?): Observable?>?
+
+ @GET(ApiEndPoints.SAVINGS_ACCOUNTS + "/{savingsId}/charges")
+ fun getSavingsAccountChargeList(@Path("savingsId") savingsId: Long?): Observable?>?
+
+}
\ No newline at end of file
diff --git a/app/src/main/java/org/mifos/mobile/api/services/ClientService.java b/app/src/main/java/org/mifos/mobile/api/services/ClientService.java
deleted file mode 100644
index cbd56d9a05..0000000000
--- a/app/src/main/java/org/mifos/mobile/api/services/ClientService.java
+++ /dev/null
@@ -1,39 +0,0 @@
-package org.mifos.mobile.api.services;
-
-import org.mifos.mobile.api.ApiEndPoints;
-import org.mifos.mobile.models.Page;
-import org.mifos.mobile.models.client.Client;
-import org.mifos.mobile.models.client.ClientAccounts;
-
-import io.reactivex.Observable;
-import okhttp3.ResponseBody;
-import retrofit2.http.GET;
-import retrofit2.http.Path;
-import retrofit2.http.Query;
-
-/**
- * @author Vishwajeet
- * @since 20/6/16.
- */
-public interface ClientService {
-
- String CLIENT_ID = "clientId";
-
- //This is a default call and Loads client from 0 to 200
- @GET(ApiEndPoints.CLIENTS)
- Observable> getClients();
-
- @GET(ApiEndPoints.CLIENTS + "/{clientId}")
- Observable getClientForId(@Path(CLIENT_ID) long clientId);
-
- @GET(ApiEndPoints.CLIENTS + "/{clientId}/images")
- Observable getClientImage(@Path(CLIENT_ID) long clientId);
-
- @GET(ApiEndPoints.CLIENTS + "/{clientId}/accounts")
- Observable getClientAccounts(@Path(CLIENT_ID) long clientId);
-
- @GET(ApiEndPoints.CLIENTS + "/{clientId}/accounts")
- Observable getAccounts(@Path(CLIENT_ID) long clientId,
- @Query("fields") String accountType);
-
-}
diff --git a/app/src/main/java/org/mifos/mobile/api/services/ClientService.kt b/app/src/main/java/org/mifos/mobile/api/services/ClientService.kt
new file mode 100644
index 0000000000..7145d69d8e
--- /dev/null
+++ b/app/src/main/java/org/mifos/mobile/api/services/ClientService.kt
@@ -0,0 +1,40 @@
+package org.mifos.mobile.api.services
+
+import io.reactivex.Observable
+import okhttp3.ResponseBody
+import org.mifos.mobile.api.ApiEndPoints
+import org.mifos.mobile.models.Page
+import org.mifos.mobile.models.client.Client
+import org.mifos.mobile.models.client.ClientAccounts
+import retrofit2.http.GET
+import retrofit2.http.Path
+import retrofit2.http.Query
+
+/**
+ * @author Vishwajeet
+ * @since 20/6/16.
+ */
+interface ClientService {
+ //This is a default call and Loads client from 0 to 200
+ @get:GET(ApiEndPoints.CLIENTS)
+ val clients: Observable?>?
+
+ @GET(ApiEndPoints.CLIENTS + "/{clientId}")
+ fun getClientForId(@Path(CLIENT_ID) clientId: Long?): Observable?
+
+ @GET(ApiEndPoints.CLIENTS + "/{clientId}/images")
+ fun getClientImage(@Path(CLIENT_ID) clientId: Long?): Observable?
+
+ @GET(ApiEndPoints.CLIENTS + "/{clientId}/accounts")
+ fun getClientAccounts(@Path(CLIENT_ID) clientId: Long?): Observable?
+
+ @GET(ApiEndPoints.CLIENTS + "/{clientId}/accounts")
+ fun getAccounts(
+ @Path(CLIENT_ID) clientId: Long?,
+ @Query("fields") accountType: String?
+ ): Observable?
+
+ companion object {
+ const val CLIENT_ID = "clientId"
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/org/mifos/mobile/api/services/GuarantorService.java b/app/src/main/java/org/mifos/mobile/api/services/GuarantorService.java
deleted file mode 100644
index 976b1ed180..0000000000
--- a/app/src/main/java/org/mifos/mobile/api/services/GuarantorService.java
+++ /dev/null
@@ -1,44 +0,0 @@
-package org.mifos.mobile.api.services;
-
-/*
- * Created by saksham on 23/July/2018
- */
-
-import org.mifos.mobile.models.guarantor.GuarantorApplicationPayload;
-import org.mifos.mobile.models.guarantor.GuarantorPayload;
-import org.mifos.mobile.models.guarantor.GuarantorTemplatePayload;
-
-import java.util.List;
-
-import io.reactivex.Observable;
-import okhttp3.ResponseBody;
-import retrofit2.http.Body;
-import retrofit2.http.DELETE;
-import retrofit2.http.GET;
-import retrofit2.http.POST;
-import retrofit2.http.PUT;
-import retrofit2.http.Path;
-
-@SuppressWarnings("PMD.AvoidDuplicateLiterals")
-public interface GuarantorService {
-
- @GET("/loans/{loanId}/guarantors/template")
- Observable getGuarantorTemplate(@Path("loanId") long loanId);
-
- @GET("/loans/{loanId}/guarantors")
- Observable> getGuarantorList(@Path("loanId") long loanId);
-
- @POST("/loans/{loanId}/guarantors")
- Observable createGuarantor(@Path("loanId") long loanId,
- @Body GuarantorApplicationPayload payload);
-
- @PUT("loans/{loanId}/guarantors/{guarantorId}")
- Observable updateGuarantor(@Body GuarantorApplicationPayload payload,
- @Path("loanId") long loanId,
- @Path("guarantorId") long guarantorId);
-
- @DELETE("/loans/{loanId}/guarantors/{guarantorId}")
- Observable deleteGuarantor(@Path("loanId") long loanId,
- @Path("guarantorId") long guarantorId);
-
-}
diff --git a/app/src/main/java/org/mifos/mobile/api/services/GuarantorService.kt b/app/src/main/java/org/mifos/mobile/api/services/GuarantorService.kt
new file mode 100644
index 0000000000..e6caa5e45c
--- /dev/null
+++ b/app/src/main/java/org/mifos/mobile/api/services/GuarantorService.kt
@@ -0,0 +1,40 @@
+package org.mifos.mobile.api.services
+
+import io.reactivex.Observable
+
+import okhttp3.ResponseBody
+
+import org.mifos.mobile.models.guarantor.GuarantorApplicationPayload
+import org.mifos.mobile.models.guarantor.GuarantorPayload
+import org.mifos.mobile.models.guarantor.GuarantorTemplatePayload
+
+import retrofit2.http.*
+
+/*
+* Created by saksham on 23/July/2018
+*/ interface GuarantorService {
+ @GET("/loans/{loanId}/guarantors/template")
+ fun getGuarantorTemplate(@Path("loanId") loanId: Long?): Observable?
+
+ @GET("/loans/{loanId}/guarantors")
+ fun getGuarantorList(@Path("loanId") loanId: Long?): Observable?>?
+
+ @POST("/loans/{loanId}/guarantors")
+ fun createGuarantor(
+ @Path("loanId") loanId: Long?,
+ @Body payload: GuarantorApplicationPayload?
+ ): Observable?
+
+ @PUT("loans/{loanId}/guarantors/{guarantorId}")
+ fun updateGuarantor(
+ @Body payload: GuarantorApplicationPayload?,
+ @Path("loanId") loanId: Long?,
+ @Path("guarantorId") guarantorId: Long?
+ ): Observable?
+
+ @DELETE("/loans/{loanId}/guarantors/{guarantorId}")
+ fun deleteGuarantor(
+ @Path("loanId") loanId: Long?,
+ @Path("guarantorId") guarantorId: Long?
+ ): Observable?
+}
\ No newline at end of file
diff --git a/app/src/main/java/org/mifos/mobile/api/services/LoanAccountsListService.java b/app/src/main/java/org/mifos/mobile/api/services/LoanAccountsListService.java
deleted file mode 100644
index 92cdeecb6f..0000000000
--- a/app/src/main/java/org/mifos/mobile/api/services/LoanAccountsListService.java
+++ /dev/null
@@ -1,52 +0,0 @@
-package org.mifos.mobile.api.services;
-
-import org.mifos.mobile.api.ApiEndPoints;
-import org.mifos.mobile.models.accounts.loan.LoanAccount;
-import org.mifos.mobile.models.accounts.loan.LoanWithAssociations;
-import org.mifos.mobile.models.accounts.loan.LoanWithdraw;
-import org.mifos.mobile.models.payload.LoansPayload;
-import org.mifos.mobile.models.templates.loans.LoanTemplate;
-import org.mifos.mobile.utils.Constants;
-
-import io.reactivex.Observable;
-import okhttp3.ResponseBody;
-import retrofit2.http.Body;
-import retrofit2.http.GET;
-import retrofit2.http.POST;
-import retrofit2.http.PUT;
-import retrofit2.http.Path;
-import retrofit2.http.Query;
-
-/**
- * @author Vishwajeet
- * @since 23/6/16.
- */
-public interface LoanAccountsListService {
-
- @GET(ApiEndPoints.LOANS + "/{loanId}/")
- Observable getLoanAccountsDetail(@Path("loanId") long loanId);
-
- @GET(ApiEndPoints.LOANS + "/{loanId}")
- Observable getLoanWithAssociations(
- @Path("loanId") long loanId,
- @Query("associations") String associationType);
-
- @GET(ApiEndPoints.LOANS + "/template?templateType=individual")
- Observable getLoanTemplate(@Query("clientId") long clientId);
-
- @GET(ApiEndPoints.LOANS + "/template?templateType=individual")
- Observable getLoanTemplateByProduct(
- @Query("clientId") long clientId,
- @Query("productId") Integer productId);
-
- @POST(ApiEndPoints.LOANS)
- Observable createLoansAccount(@Body LoansPayload loansPayload);
-
- @PUT(ApiEndPoints.LOANS + "/{loanId}/")
- Observable updateLoanAccount(@Path("loanId") long loanId,
- @Body LoansPayload loansPayload);
-
- @POST(ApiEndPoints.LOANS + "/{loanId}?command=withdrawnByApplicant")
- Observable withdrawLoanAccount(@Path(Constants.LOAN_ID) long loanId,
- @Body LoanWithdraw loanWithdraw);
-}
diff --git a/app/src/main/java/org/mifos/mobile/api/services/LoanAccountsListService.kt b/app/src/main/java/org/mifos/mobile/api/services/LoanAccountsListService.kt
new file mode 100644
index 0000000000..a6d697152f
--- /dev/null
+++ b/app/src/main/java/org/mifos/mobile/api/services/LoanAccountsListService.kt
@@ -0,0 +1,51 @@
+package org.mifos.mobile.api.services
+
+import io.reactivex.Observable
+import okhttp3.ResponseBody
+import org.mifos.mobile.api.ApiEndPoints
+import org.mifos.mobile.models.accounts.loan.LoanAccount
+import org.mifos.mobile.models.accounts.loan.LoanWithAssociations
+import org.mifos.mobile.models.accounts.loan.LoanWithdraw
+import org.mifos.mobile.models.payload.LoansPayload
+import org.mifos.mobile.models.templates.loans.LoanTemplate
+import org.mifos.mobile.utils.Constants
+import retrofit2.http.*
+
+/**
+ * @author Vishwajeet
+ * @since 23/6/16.
+ */
+interface LoanAccountsListService {
+ @GET(ApiEndPoints.LOANS + "/{loanId}/")
+ fun getLoanAccountsDetail(@Path("loanId") loanId: Long): Observable?
+
+ @GET(ApiEndPoints.LOANS + "/{loanId}")
+ fun getLoanWithAssociations(
+ @Path("loanId") loanId: Long?,
+ @Query("associations") associationType: String?
+ ): Observable?
+
+ @GET(ApiEndPoints.LOANS + "/template?templateType=individual")
+ fun getLoanTemplate(@Query("clientId") clientId: Long?): Observable?
+
+ @GET(ApiEndPoints.LOANS + "/template?templateType=individual")
+ fun getLoanTemplateByProduct(
+ @Query("clientId") clientId: Long?,
+ @Query("productId") productId: Int?
+ ): Observable?
+
+ @POST(ApiEndPoints.LOANS)
+ fun createLoansAccount(@Body loansPayload: LoansPayload?): Observable?
+
+ @PUT(ApiEndPoints.LOANS + "/{loanId}/")
+ fun updateLoanAccount(
+ @Path("loanId") loanId: Long,
+ @Body loansPayload: LoansPayload?
+ ): Observable?
+
+ @POST(ApiEndPoints.LOANS + "/{loanId}?command=withdrawnByApplicant")
+ fun withdrawLoanAccount(
+ @Path(Constants.LOAN_ID) loanId: Long?,
+ @Body loanWithdraw: LoanWithdraw?
+ ): Observable?
+}
\ No newline at end of file
diff --git a/app/src/main/java/org/mifos/mobile/api/services/NotificationService.java b/app/src/main/java/org/mifos/mobile/api/services/NotificationService.java
deleted file mode 100644
index af6e52d54d..0000000000
--- a/app/src/main/java/org/mifos/mobile/api/services/NotificationService.java
+++ /dev/null
@@ -1,30 +0,0 @@
-package org.mifos.mobile.api.services;
-
-import org.mifos.mobile.api.ApiEndPoints;
-import org.mifos.mobile.models.notification.NotificationRegisterPayload;
-import org.mifos.mobile.models.notification.NotificationUserDetail;
-
-import io.reactivex.Observable;
-import okhttp3.ResponseBody;
-import retrofit2.http.Body;
-import retrofit2.http.GET;
-import retrofit2.http.POST;
-import retrofit2.http.PUT;
-import retrofit2.http.Path;
-
-/**
- * Created by dilpreet on 26/09/17.
- */
-
-public interface NotificationService {
-
- @GET(ApiEndPoints.DEVICE + "/registration/client/{clientId}")
- Observable getUserNotificationId(@Path("clientId")long clientId);
-
- @POST(ApiEndPoints.DEVICE + "/registration")
- Observable registerNotification(@Body NotificationRegisterPayload payload);
-
- @PUT(ApiEndPoints.DEVICE + "/registration/{id}")
- Observable updateRegisterNotification(@Path("id")long id,
- @Body NotificationRegisterPayload payload);
-}
diff --git a/app/src/main/java/org/mifos/mobile/api/services/NotificationService.kt b/app/src/main/java/org/mifos/mobile/api/services/NotificationService.kt
new file mode 100644
index 0000000000..fa8979783e
--- /dev/null
+++ b/app/src/main/java/org/mifos/mobile/api/services/NotificationService.kt
@@ -0,0 +1,25 @@
+package org.mifos.mobile.api.services
+
+import io.reactivex.Observable
+import okhttp3.ResponseBody
+import org.mifos.mobile.api.ApiEndPoints
+import org.mifos.mobile.models.notification.NotificationRegisterPayload
+import org.mifos.mobile.models.notification.NotificationUserDetail
+import retrofit2.http.*
+
+/**
+ * Created by dilpreet on 26/09/17.
+ */
+interface NotificationService {
+ @GET(ApiEndPoints.DEVICE + "/registration/client/{clientId}")
+ fun getUserNotificationId(@Path("clientId") clientId: Long): Observable?
+
+ @POST(ApiEndPoints.DEVICE + "/registration")
+ fun registerNotification(@Body payload: NotificationRegisterPayload?): Observable?
+
+ @PUT(ApiEndPoints.DEVICE + "/registration/{id}")
+ fun updateRegisterNotification(
+ @Path("id") id: Long,
+ @Body payload: NotificationRegisterPayload?
+ ): Observable?
+}
\ No newline at end of file
diff --git a/app/src/main/java/org/mifos/mobile/api/services/RecentTransactionsService.java b/app/src/main/java/org/mifos/mobile/api/services/RecentTransactionsService.java
deleted file mode 100644
index ed5236e8b4..0000000000
--- a/app/src/main/java/org/mifos/mobile/api/services/RecentTransactionsService.java
+++ /dev/null
@@ -1,22 +0,0 @@
-package org.mifos.mobile.api.services;
-
-import org.mifos.mobile.api.ApiEndPoints;
-import org.mifos.mobile.models.Page;
-import org.mifos.mobile.models.Transaction;
-
-import io.reactivex.Observable;
-import retrofit2.http.GET;
-import retrofit2.http.Path;
-import retrofit2.http.Query;
-
-/**
- * @author Vishwajeet
- * @since 10/08/2016
- */
-public interface RecentTransactionsService {
- @GET(ApiEndPoints.CLIENTS + "/{clientId}/transactions")
- Observable> getRecentTransactionsList(
- @Path("clientId") long clientId,
- @Query("offset") int offset,
- @Query("limit") int limit);
-}
\ No newline at end of file
diff --git a/app/src/main/java/org/mifos/mobile/api/services/RecentTransactionsService.kt b/app/src/main/java/org/mifos/mobile/api/services/RecentTransactionsService.kt
new file mode 100644
index 0000000000..1047322b7b
--- /dev/null
+++ b/app/src/main/java/org/mifos/mobile/api/services/RecentTransactionsService.kt
@@ -0,0 +1,22 @@
+package org.mifos.mobile.api.services
+
+import io.reactivex.Observable
+import org.mifos.mobile.api.ApiEndPoints
+import org.mifos.mobile.models.Page
+import org.mifos.mobile.models.Transaction
+import retrofit2.http.GET
+import retrofit2.http.Path
+import retrofit2.http.Query
+
+/**
+ * @author Vishwajeet
+ * @since 10/08/2016
+ */
+interface RecentTransactionsService {
+ @GET(ApiEndPoints.CLIENTS + "/{clientId}/transactions")
+ fun getRecentTransactionsList(
+ @Path("clientId") clientId: Long?,
+ @Query("offset") offset: Int?,
+ @Query("limit") limit: Int?
+ ): Observable?>?
+}
\ No newline at end of file
diff --git a/app/src/main/java/org/mifos/mobile/api/services/RegistrationService.java b/app/src/main/java/org/mifos/mobile/api/services/RegistrationService.java
deleted file mode 100644
index c866a277e6..0000000000
--- a/app/src/main/java/org/mifos/mobile/api/services/RegistrationService.java
+++ /dev/null
@@ -1,23 +0,0 @@
-package org.mifos.mobile.api.services;
-
-import org.mifos.mobile.api.ApiEndPoints;
-import org.mifos.mobile.models.register.RegisterPayload;
-import org.mifos.mobile.models.register.UserVerify;
-
-import io.reactivex.Observable;
-import okhttp3.ResponseBody;
-import retrofit2.http.Body;
-import retrofit2.http.POST;
-
-/**
- * Created by dilpreet on 31/7/17.
- */
-
-public interface RegistrationService {
-
- @POST(ApiEndPoints.REGISTRATION)
- Observable registerUser(@Body RegisterPayload registerPayload);
-
- @POST(ApiEndPoints.REGISTRATION + "/user")
- Observable verifyUser(@Body UserVerify userVerify);
-}
diff --git a/app/src/main/java/org/mifos/mobile/api/services/RegistrationService.kt b/app/src/main/java/org/mifos/mobile/api/services/RegistrationService.kt
new file mode 100644
index 0000000000..2661d97b71
--- /dev/null
+++ b/app/src/main/java/org/mifos/mobile/api/services/RegistrationService.kt
@@ -0,0 +1,20 @@
+package org.mifos.mobile.api.services
+
+import io.reactivex.Observable
+import okhttp3.ResponseBody
+import org.mifos.mobile.api.ApiEndPoints
+import org.mifos.mobile.models.register.RegisterPayload
+import org.mifos.mobile.models.register.UserVerify
+import retrofit2.http.Body
+import retrofit2.http.POST
+
+/**
+ * Created by dilpreet on 31/7/17.
+ */
+interface RegistrationService {
+ @POST(ApiEndPoints.REGISTRATION)
+ fun registerUser(@Body registerPayload: RegisterPayload?): Observable