feat: show Error UI and No Internt connection logic
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index d2ad324..b3a7b2e 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -2,6 +2,7 @@
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="org.apache.fineract">
+ <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.CAMERA"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
diff --git a/app/src/main/java/org/apache/fineract/data/remote/ConnectivityInterceptor.java b/app/src/main/java/org/apache/fineract/data/remote/ConnectivityInterceptor.java
new file mode 100644
index 0000000..8c297f3
--- /dev/null
+++ b/app/src/main/java/org/apache/fineract/data/remote/ConnectivityInterceptor.java
@@ -0,0 +1,36 @@
+package org.apache.fineract.data.remote;
+
+import android.content.Context;
+import android.support.annotation.NonNull;
+
+import org.apache.fineract.exceptions.NoConnectivityException;
+import org.apache.fineract.utils.NetworkUtil;
+
+import java.io.IOException;
+
+import okhttp3.Interceptor;
+import okhttp3.Request;
+import okhttp3.Response;
+
+/**
+ * @author Rajan Maurya
+ * On 23/09/17.
+ */
+public class ConnectivityInterceptor implements Interceptor {
+
+ private Context context;
+
+ public ConnectivityInterceptor(Context context) {
+ this.context = context;
+ }
+
+ @Override
+ public Response intercept(@NonNull Chain chain) throws IOException {
+ if (!NetworkUtil.isConnected(context)) {
+ throw new NoConnectivityException();
+ }
+
+ Request.Builder builder = chain.request().newBuilder();
+ return chain.proceed(builder.build());
+ }
+}
diff --git a/app/src/main/java/org/apache/fineract/data/remote/FineractOkHttpClient.java b/app/src/main/java/org/apache/fineract/data/remote/FineractOkHttpClient.java
index 2740539..a97741f 100644
--- a/app/src/main/java/org/apache/fineract/data/remote/FineractOkHttpClient.java
+++ b/app/src/main/java/org/apache/fineract/data/remote/FineractOkHttpClient.java
@@ -99,6 +99,7 @@
//Interceptor :> Full Body Logger and ApiRequest Header
builder.addInterceptor(logger);
+ builder.addInterceptor(new ConnectivityInterceptor(context));
builder.addInterceptor(new FineractInterceptor(context));
builder.addInterceptor(new ReceivedCookiesInterceptor(context));
diff --git a/app/src/main/java/org/apache/fineract/exceptions/NoConnectivityException.java b/app/src/main/java/org/apache/fineract/exceptions/NoConnectivityException.java
new file mode 100644
index 0000000..aa9ffab
--- /dev/null
+++ b/app/src/main/java/org/apache/fineract/exceptions/NoConnectivityException.java
@@ -0,0 +1,15 @@
+package org.apache.fineract.exceptions;
+
+import java.io.IOException;
+
+/**
+ * @author Rajan Maurya
+ * On 23/09/17.
+ */
+public class NoConnectivityException extends IOException {
+
+ @Override
+ public String getMessage() {
+ return "No connectivity exception";
+ }
+}
diff --git a/app/src/main/java/org/apache/fineract/ui/adapters/CustomerAdapter.java b/app/src/main/java/org/apache/fineract/ui/adapters/CustomerAdapter.java
index a19a275..772f313 100644
--- a/app/src/main/java/org/apache/fineract/ui/adapters/CustomerAdapter.java
+++ b/app/src/main/java/org/apache/fineract/ui/adapters/CustomerAdapter.java
@@ -51,7 +51,8 @@
@Override
public void onBindViewHolder(ViewHolder holder, int position) {
Customer customer = customers.get(position);
- holder.tvCustomerName.setText(customer.getGivenName() + " " + customer.getSurname());
+ holder.tvCustomerName.setText(context.getString(R.string.customer_name,
+ customer.getGivenName(), customer.getSurname() ));
if (customer.getAssignedEmployee() != null) {
holder.tvAssignedEmployee.setText(context.getString(R.string.assigned_employee_list,
diff --git a/app/src/main/java/org/apache/fineract/ui/base/BasePresenter.java b/app/src/main/java/org/apache/fineract/ui/base/BasePresenter.java
index 1e005c7..7773559 100644
--- a/app/src/main/java/org/apache/fineract/ui/base/BasePresenter.java
+++ b/app/src/main/java/org/apache/fineract/ui/base/BasePresenter.java
@@ -2,6 +2,9 @@
import android.content.Context;
+import org.apache.fineract.exceptions.NoConnectivityException;
+import org.apache.fineract.utils.MifosErrorUtils;
+
/**
* Base class that implements the Presenter interface and provides a base implementation for
* attachView() and detachView(). It also handles keeping a reference to the mvpView that
@@ -26,6 +29,14 @@
mvpView = null;
}
+ public void showExceptionError(Throwable throwable, String errorMessage) {
+ if (throwable instanceof NoConnectivityException) {
+ getMvpView().showNoInternetConnection();
+ } else {
+ getMvpView().showError(MifosErrorUtils.getFineractError(throwable, errorMessage));
+ }
+ }
+
public boolean isViewAttached() {
return mvpView != null;
}
diff --git a/app/src/main/java/org/apache/fineract/ui/base/MvpView.java b/app/src/main/java/org/apache/fineract/ui/base/MvpView.java
index 344e11e..7ba9b0c 100644
--- a/app/src/main/java/org/apache/fineract/ui/base/MvpView.java
+++ b/app/src/main/java/org/apache/fineract/ui/base/MvpView.java
@@ -8,4 +8,7 @@
*/
public interface MvpView {
+ void showNoInternetConnection();
+
+ void showError(String message);
}
diff --git a/app/src/main/java/org/apache/fineract/ui/online/customers/createcustomer/customeractivity/CreateCustomerActivity.java b/app/src/main/java/org/apache/fineract/ui/online/customers/createcustomer/customeractivity/CreateCustomerActivity.java
index 54cce3a..500cd8e 100644
--- a/app/src/main/java/org/apache/fineract/ui/online/customers/createcustomer/customeractivity/CreateCustomerActivity.java
+++ b/app/src/main/java/org/apache/fineract/ui/online/customers/createcustomer/customeractivity/CreateCustomerActivity.java
@@ -187,6 +187,13 @@
}
@Override
+ public void showNoInternetConnection() {
+ stepperLayout.setNextButtonEnabled(true);
+ Toaster.show(findViewById(android.R.id.content),
+ getString(R.string.no_internet_connection));
+ }
+
+ @Override
public void showError(String message) {
stepperLayout.setNextButtonEnabled(true);
Toaster.show(findViewById(android.R.id.content), message);
diff --git a/app/src/main/java/org/apache/fineract/ui/online/customers/createcustomer/customeractivity/CreateCustomerPresenter.java b/app/src/main/java/org/apache/fineract/ui/online/customers/createcustomer/customeractivity/CreateCustomerPresenter.java
index df12c6e..7b33045 100644
--- a/app/src/main/java/org/apache/fineract/ui/online/customers/createcustomer/customeractivity/CreateCustomerPresenter.java
+++ b/app/src/main/java/org/apache/fineract/ui/online/customers/createcustomer/customeractivity/CreateCustomerPresenter.java
@@ -50,9 +50,10 @@
}
@Override
- public void onError(Throwable e) {
+ public void onError(Throwable throwable) {
getMvpView().hideProgressbar();
- getMvpView().showError(context.getString(R.string.error_creating_customer));
+ showExceptionError(throwable,
+ context.getString(R.string.error_creating_customer));
}
})
@@ -74,9 +75,10 @@
}
@Override
- public void onError(Throwable e) {
+ public void onError(Throwable throwable) {
getMvpView().hideProgressbar();
- getMvpView().showError(context.getString(R.string.error_updating_customer));
+ showExceptionError(throwable,
+ context.getString(R.string.error_updating_customer));
}
})
);
diff --git a/app/src/main/java/org/apache/fineract/ui/online/customers/createcustomer/formcustomeraddress/FormCustomerAddressFragment.java b/app/src/main/java/org/apache/fineract/ui/online/customers/createcustomer/formcustomeraddress/FormCustomerAddressFragment.java
index 97a7440..0a88e94 100644
--- a/app/src/main/java/org/apache/fineract/ui/online/customers/createcustomer/formcustomeraddress/FormCustomerAddressFragment.java
+++ b/app/src/main/java/org/apache/fineract/ui/online/customers/createcustomer/formcustomeraddress/FormCustomerAddressFragment.java
@@ -249,6 +249,11 @@
}
@Override
+ public void showNoInternetConnection() {
+ Toaster.show(rootView, getString(R.string.no_internet_connection));
+ }
+
+ @Override
public void showError(String message) {
Toaster.show(rootView, message);
}
diff --git a/app/src/main/java/org/apache/fineract/ui/online/customers/createcustomer/formcustomeraddress/FormCustomerAddressPresenter.java b/app/src/main/java/org/apache/fineract/ui/online/customers/createcustomer/formcustomeraddress/FormCustomerAddressPresenter.java
index 7c274e9..0ef358a 100644
--- a/app/src/main/java/org/apache/fineract/ui/online/customers/createcustomer/formcustomeraddress/FormCustomerAddressPresenter.java
+++ b/app/src/main/java/org/apache/fineract/ui/online/customers/createcustomer/formcustomeraddress/FormCustomerAddressPresenter.java
@@ -72,8 +72,9 @@
}
@Override
- public void onError(Throwable e) {
- getMvpView().showError(context.getString(R.string.error_loading_countries));
+ public void onError(Throwable throwable) {
+ showExceptionError(throwable,
+ context.getString(R.string.error_loading_countries));
}
@Override
diff --git a/app/src/main/java/org/apache/fineract/ui/online/customers/customeractivities/CustomerActivitiesContract.java b/app/src/main/java/org/apache/fineract/ui/online/customers/customeractivities/CustomerActivitiesContract.java
index da611d3..caf71e8 100644
--- a/app/src/main/java/org/apache/fineract/ui/online/customers/customeractivities/CustomerActivitiesContract.java
+++ b/app/src/main/java/org/apache/fineract/ui/online/customers/customeractivities/CustomerActivitiesContract.java
@@ -24,8 +24,6 @@
void showProgressbar();
void hideProgressbar();
-
- void showError(String message);
}
interface Presenter {
diff --git a/app/src/main/java/org/apache/fineract/ui/online/customers/customeractivities/CustomerActivitiesFragment.java b/app/src/main/java/org/apache/fineract/ui/online/customers/customeractivities/CustomerActivitiesFragment.java
index 796d013..052d8f0 100644
--- a/app/src/main/java/org/apache/fineract/ui/online/customers/customeractivities/CustomerActivitiesFragment.java
+++ b/app/src/main/java/org/apache/fineract/ui/online/customers/customeractivities/CustomerActivitiesFragment.java
@@ -2,16 +2,12 @@
import android.os.Bundle;
import android.support.annotation.Nullable;
-import android.support.v4.content.ContextCompat;
import android.support.v4.widget.SwipeRefreshLayout;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
-import android.widget.ImageView;
-import android.widget.RelativeLayout;
-import android.widget.TextView;
import org.apache.fineract.R;
import org.apache.fineract.data.models.customer.Command;
@@ -41,14 +37,8 @@
@BindView(R.id.swipe_container)
SwipeRefreshLayout swipeRefreshLayout;
- @BindView(R.id.rl_error)
- RelativeLayout rlError;
-
- @BindView(R.id.iv_retry)
- ImageView ivRetry;
-
- @BindView(R.id.tv_error)
- TextView tvStatus;
+ @BindView(R.id.layout_error)
+ View layoutError;
@Inject
CustomerActivitiesPresenter customerActivitiesPresenter;
@@ -84,6 +74,7 @@
@Nullable Bundle savedInstanceState) {
rootView = inflater.inflate(R.layout.fragment_customer_activities, container, false);
ButterKnife.bind(this, rootView);
+ initializeFineractUIErrorHandler(getContext(), rootView);
customerActivitiesPresenter.attachView(this);
showUserInterface();
@@ -102,10 +93,10 @@
customerActivitiesPresenter.fetchCustomerCommands(customerIdentifier);
}
- @OnClick(R.id.iv_retry)
+ @OnClick(R.id.btn_try_again)
void onRetry() {
rvCustomerActivities.setVisibility(View.GONE);
- rlError.setVisibility(View.GONE);
+ layoutError.setVisibility(View.GONE);
customerActivitiesPresenter.fetchCustomerCommands(customerIdentifier);
}
@@ -130,20 +121,18 @@
@Override
public void showEmptyCommands(String message) {
showRecyclerView(false);
- tvStatus.setText(message);
- ivRetry.setImageDrawable(ContextCompat.getDrawable(getActivity(),
- R.drawable.ic_assignment_turned_in_black_24dp));
- ivRetry.setEnabled(false);
+ showFineractEmptyUI(getString(R.string.activities), getString(R.string.activities),
+ R.drawable.ic_event_black_24dp);
}
@Override
public void showRecyclerView(boolean status) {
if (status) {
rvCustomerActivities.setVisibility(View.VISIBLE);
- rlError.setVisibility(View.GONE);
+ layoutError.setVisibility(View.GONE);
} else {
rvCustomerActivities.setVisibility(View.GONE);
- rlError.setVisibility(View.VISIBLE);
+ layoutError.setVisibility(View.VISIBLE);
}
}
@@ -158,9 +147,15 @@
}
@Override
+ public void showNoInternetConnection() {
+ showRecyclerView(false);
+ showFineractNoInternetUI();
+ }
+
+ @Override
public void showError(String message) {
showRecyclerView(false);
- tvStatus.setText(message);
+ showFineractErrorUI(getString(R.string.activities));
}
@Override
diff --git a/app/src/main/java/org/apache/fineract/ui/online/customers/customeractivities/CustomerActivitiesPresenter.java b/app/src/main/java/org/apache/fineract/ui/online/customers/customeractivities/CustomerActivitiesPresenter.java
index 8f5f86f..9a0513a 100644
--- a/app/src/main/java/org/apache/fineract/ui/online/customers/customeractivities/CustomerActivitiesPresenter.java
+++ b/app/src/main/java/org/apache/fineract/ui/online/customers/customeractivities/CustomerActivitiesPresenter.java
@@ -68,9 +68,9 @@
}
@Override
- public void onError(Throwable e) {
+ public void onError(Throwable throwable) {
getMvpView().hideProgressbar();
- getMvpView().showError(
+ showExceptionError(throwable,
context.getString(R.string.error_fetching_customer_activities));
}
@@ -81,4 +81,5 @@
})
);
}
+
}
\ No newline at end of file
diff --git a/app/src/main/java/org/apache/fineract/ui/online/customers/customerdetails/CustomerDetailsFragment.java b/app/src/main/java/org/apache/fineract/ui/online/customers/customerdetails/CustomerDetailsFragment.java
index 8708cb3..fcf3d2a 100644
--- a/app/src/main/java/org/apache/fineract/ui/online/customers/customerdetails/CustomerDetailsFragment.java
+++ b/app/src/main/java/org/apache/fineract/ui/online/customers/customerdetails/CustomerDetailsFragment.java
@@ -21,7 +21,6 @@
import org.apache.fineract.data.models.customer.Customer;
import org.apache.fineract.ui.base.FineractBaseActivity;
import org.apache.fineract.ui.base.FineractBaseFragment;
-import org.apache.fineract.ui.base.Toaster;
import org.apache.fineract.ui.online.customers.createcustomer.CustomerAction;
import org.apache.fineract.ui.online.customers.createcustomer.customeractivity.CreateCustomerActivity;
import org.apache.fineract.ui.online.customers.customeractivities.CustomerActivitiesActivity;
@@ -89,11 +88,8 @@
@BindView(R.id.cl_customer_details)
CoordinatorLayout clCustomerDetails;
- @BindView(R.id.rl_error)
- RelativeLayout rlError;
-
- @BindView(R.id.tv_error)
- TextView tvError;
+ @BindView(R.id.layout_error)
+ View layoutError;
@BindView(R.id.rl_email)
RelativeLayout rlEmail;
@@ -140,6 +136,7 @@
rootView = inflater.inflate(R.layout.fragment_customer_details, container, false);
((FineractBaseActivity) getActivity()).getActivityComponent().inject(this);
ButterKnife.bind(this, rootView);
+ initializeFineractUIErrorHandler(getActivity(), rootView);
customerDetailsPresenter.attachView(this);
showUserInterface();
@@ -155,10 +152,10 @@
customerDetailsPresenter.loanCustomerDetails(customerIdentifier);
}
- @OnClick(R.id.iv_retry)
+ @OnClick(R.id.btn_try_again)
void onRetry() {
clCustomerDetails.setVisibility(View.GONE);
- rlError.setVisibility(View.GONE);
+ layoutError.setVisibility(View.GONE);
customerDetailsPresenter.loanCustomerDetails(customerIdentifier);
}
@@ -230,6 +227,7 @@
public void showCustomerDetails(Customer customer) {
this.customer = customer;
clCustomerDetails.setVisibility(View.VISIBLE);
+ layoutError.setVisibility(View.GONE);
loadCustomerPortrait();
@@ -321,10 +319,17 @@
}
@Override
+ public void showNoInternetConnection() {
+ clCustomerDetails.setVisibility(View.GONE);
+ layoutError.setVisibility(View.VISIBLE);
+ showFineractNoInternetUI();
+ }
+
+ @Override
public void showError(String errorMessage) {
- rlError.setVisibility(View.VISIBLE);
- tvError.setText(errorMessage);
- Toaster.show(rootView, errorMessage);
+ clCustomerDetails.setVisibility(View.GONE);
+ layoutError.setVisibility(View.VISIBLE);
+ showFineractErrorUI(getString(R.string.customer_details));
}
@Override
diff --git a/app/src/main/java/org/apache/fineract/ui/online/customers/customerdetails/CustomerDetailsPresenter.java b/app/src/main/java/org/apache/fineract/ui/online/customers/customerdetails/CustomerDetailsPresenter.java
index 76bbefa..1f1b052 100644
--- a/app/src/main/java/org/apache/fineract/ui/online/customers/customerdetails/CustomerDetailsPresenter.java
+++ b/app/src/main/java/org/apache/fineract/ui/online/customers/customerdetails/CustomerDetailsPresenter.java
@@ -2,6 +2,7 @@
import android.content.Context;
+import org.apache.fineract.R;
import org.apache.fineract.data.datamanager.DataManagerCustomer;
import org.apache.fineract.data.models.customer.Customer;
import org.apache.fineract.injection.ApplicationContext;
@@ -60,9 +61,10 @@
}
@Override
- public void onError(Throwable e) {
+ public void onError(Throwable throwable) {
getMvpView().hideProgressbar();
- getMvpView().showError("Failed to fetch customer details");
+ showExceptionError(throwable,
+ context.getString(R.string.error_fetching_customer_details));
}
@Override
diff --git a/app/src/main/java/org/apache/fineract/ui/online/customers/customerlist/CustomersContract.java b/app/src/main/java/org/apache/fineract/ui/online/customers/customerlist/CustomersContract.java
index 57b24eb..f4464d9 100644
--- a/app/src/main/java/org/apache/fineract/ui/online/customers/customerlist/CustomersContract.java
+++ b/app/src/main/java/org/apache/fineract/ui/online/customers/customerlist/CustomersContract.java
@@ -28,8 +28,6 @@
void hideProgressbar();
void showMessage(String message);
-
- void showError();
}
interface Presenter {
diff --git a/app/src/main/java/org/apache/fineract/ui/online/customers/customerlist/CustomersFragment.java b/app/src/main/java/org/apache/fineract/ui/online/customers/customerlist/CustomersFragment.java
index 58ea269..6fb9592 100644
--- a/app/src/main/java/org/apache/fineract/ui/online/customers/customerlist/CustomersFragment.java
+++ b/app/src/main/java/org/apache/fineract/ui/online/customers/customerlist/CustomersFragment.java
@@ -11,9 +11,6 @@
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
-import android.widget.ImageView;
-import android.widget.RelativeLayout;
-import android.widget.TextView;
import org.apache.fineract.R;
import org.apache.fineract.data.models.customer.Customer;
@@ -24,8 +21,7 @@
import org.apache.fineract.ui.base.OnItemClickListener;
import org.apache.fineract.ui.base.Toaster;
import org.apache.fineract.ui.online.customers.createcustomer.CustomerAction;
-import org.apache.fineract.ui.online.customers.createcustomer.customeractivity
- .CreateCustomerActivity;
+import org.apache.fineract.ui.online.customers.createcustomer.customeractivity.CreateCustomerActivity;
import org.apache.fineract.ui.online.customers.customerdetails.CustomerDetailsActivity;
import org.apache.fineract.utils.ConstantKeys;
@@ -53,14 +49,8 @@
@BindView(R.id.swipe_container)
SwipeRefreshLayout swipeRefreshLayout;
- @BindView(R.id.rl_error)
- RelativeLayout rlError;
-
- @BindView(R.id.iv_retry)
- ImageView ivRetry;
-
- @BindView(R.id.tv_error)
- TextView tvStatus;
+ @BindView(R.id.layout_error)
+ View layoutError;
View rootView;
@@ -93,6 +83,7 @@
rootView = inflater.inflate(R.layout.fragment_customer_list, container, false);
((FineractBaseActivity) getActivity()).getActivityComponent().inject(this);
ButterKnife.bind(this, rootView);
+ initializeFineractUIErrorHandler(getActivity(), rootView);
customerPresenter.attachView(this);
setToolbarTitle(getString(R.string.customers));
@@ -117,7 +108,7 @@
customerPresenter.fetchCustomers(0, false);
}
- @OnClick(R.id.iv_retry)
+ @OnClick(R.id.btn_try_again)
void onRetry() {
customerPresenter.fetchCustomers(0, false);
}
@@ -167,18 +158,18 @@
@Override
public void showEmptyCustomers(String message) {
showRecyclerView(false);
- tvStatus.setText(getString(R.string.empty_customer_list));
- showMessage(getString(R.string.empty_customer_list));
+ showFineractEmptyUI(getString(R.string.customers), getString(R.string.customer),
+ R.drawable.ic_customer_black_24dp);
}
@Override
public void showRecyclerView(boolean status) {
if (status) {
rvCustomers.setVisibility(View.VISIBLE);
- rlError.setVisibility(View.GONE);
+ layoutError.setVisibility(View.GONE);
} else {
rvCustomers.setVisibility(View.GONE);
- rlError.setVisibility(View.VISIBLE);
+ layoutError.setVisibility(View.VISIBLE);
}
}
@@ -198,10 +189,19 @@
}
@Override
- public void showError() {
+ public void showNoInternetConnection() {
showRecyclerView(false);
- tvStatus.setText(getString(R.string.error_loading_customers));
- showMessage(getString(R.string.error_loading_customers));
+ showFineractNoInternetUI();
+ }
+
+ @Override
+ public void showError(String message) {
+ if (customerAdapter.getItemCount() != 0) {
+ showMessage(getString(R.string.error_failed_to_refresh_customers));
+ } else {
+ showRecyclerView(false);
+ showFineractErrorUI(getString(R.string.customers));
+ }
}
@Override
diff --git a/app/src/main/java/org/apache/fineract/ui/online/customers/customerlist/CustomersPresenter.java b/app/src/main/java/org/apache/fineract/ui/online/customers/customerlist/CustomersPresenter.java
index 0b2deb7..720660e 100644
--- a/app/src/main/java/org/apache/fineract/ui/online/customers/customerlist/CustomersPresenter.java
+++ b/app/src/main/java/org/apache/fineract/ui/online/customers/customerlist/CustomersPresenter.java
@@ -88,7 +88,8 @@
getMvpView().showMessage(
context.getString(R.string.error_loading_customers));
} else {
- getMvpView().showError();
+ showExceptionError(throwable,
+ context.getString(R.string.error_loading_customers));
}
}
diff --git a/app/src/main/java/org/apache/fineract/ui/online/customers/customerprofile/CustomerProfileActivity.java b/app/src/main/java/org/apache/fineract/ui/online/customers/customerprofile/CustomerProfileActivity.java
index 5eaffaa..bed1d69 100644
--- a/app/src/main/java/org/apache/fineract/ui/online/customers/customerprofile/CustomerProfileActivity.java
+++ b/app/src/main/java/org/apache/fineract/ui/online/customers/customerprofile/CustomerProfileActivity.java
@@ -164,4 +164,12 @@
public void refreshUI() {
loadCustomerPortrait();
}
+
+ @Override
+ public void showNoInternetConnection() {
+ }
+
+ @Override
+ public void showError(String message) {
+ }
}
diff --git a/app/src/main/java/org/apache/fineract/ui/online/customers/customerprofile/editcustomerprofilebottomsheet/EditCustomerProfileBottomSheet.java b/app/src/main/java/org/apache/fineract/ui/online/customers/customerprofile/editcustomerprofilebottomsheet/EditCustomerProfileBottomSheet.java
index f015460..0cca5f3 100644
--- a/app/src/main/java/org/apache/fineract/ui/online/customers/customerprofile/editcustomerprofilebottomsheet/EditCustomerProfileBottomSheet.java
+++ b/app/src/main/java/org/apache/fineract/ui/online/customers/customerprofile/editcustomerprofilebottomsheet/EditCustomerProfileBottomSheet.java
@@ -378,4 +378,14 @@
public void onDismiss(DialogInterface dialog) {
super.onDismiss(dialog);
}
+
+ @Override
+ public void showNoInternetConnection() {
+ Toaster.show(rootView, getString(R.string.no_internet_connection));
+ }
+
+ @Override
+ public void showError(String message) {
+ Toaster.show(rootView, message);
+ }
}
diff --git a/app/src/main/java/org/apache/fineract/ui/online/customers/customerprofile/editcustomerprofilebottomsheet/EditCustomerProfilePresenter.java b/app/src/main/java/org/apache/fineract/ui/online/customers/customerprofile/editcustomerprofilebottomsheet/EditCustomerProfilePresenter.java
index 4d53808..056b64f 100644
--- a/app/src/main/java/org/apache/fineract/ui/online/customers/customerprofile/editcustomerprofilebottomsheet/EditCustomerProfilePresenter.java
+++ b/app/src/main/java/org/apache/fineract/ui/online/customers/customerprofile/editcustomerprofilebottomsheet/EditCustomerProfilePresenter.java
@@ -72,10 +72,10 @@
}
@Override
- public void onError(Throwable e) {
+ public void onError(Throwable throwable) {
getMvpView().hideProgressDialog();
- getMvpView().showMessage(context.getString(
- R.string.error_uploading_customer_portrait));
+ showExceptionError(throwable,
+ context.getString(R.string.error_uploading_customer_portrait));
}
})
);
@@ -96,10 +96,10 @@
}
@Override
- public void onError(Throwable e) {
+ public void onError(Throwable throwable) {
getMvpView().hideProgressDialog();
- getMvpView().showMessage(context.getString(
- R.string.error_deleting_customer_portrait));
+ showExceptionError(throwable,
+ context.getString(R.string.error_deleting_customer_portrait));
}
})
);
diff --git a/app/src/main/java/org/apache/fineract/ui/online/customers/customertasks/CustomerTasksBottomSheetContract.java b/app/src/main/java/org/apache/fineract/ui/online/customers/customertasks/CustomerTasksBottomSheetContract.java
index 438f0ee..9d52907 100644
--- a/app/src/main/java/org/apache/fineract/ui/online/customers/customertasks/CustomerTasksBottomSheetContract.java
+++ b/app/src/main/java/org/apache/fineract/ui/online/customers/customertasks/CustomerTasksBottomSheetContract.java
@@ -17,8 +17,6 @@
void showProgressbar();
void hideProgressbar();
-
- void showError();
}
interface Presenter {
diff --git a/app/src/main/java/org/apache/fineract/ui/online/customers/customertasks/CustomerTasksBottomSheetFragment.java b/app/src/main/java/org/apache/fineract/ui/online/customers/customertasks/CustomerTasksBottomSheetFragment.java
index f5f4715..efb6a10 100644
--- a/app/src/main/java/org/apache/fineract/ui/online/customers/customertasks/CustomerTasksBottomSheetFragment.java
+++ b/app/src/main/java/org/apache/fineract/ui/online/customers/customertasks/CustomerTasksBottomSheetFragment.java
@@ -222,7 +222,13 @@
}
@Override
- public void showError() {
+ public void showNoInternetConnection() {
+ etComment.setEnabled(true);
+ Toaster.show(rootView, getString(R.string.no_internet_connection));
+ }
+
+ @Override
+ public void showError(String message) {
etComment.setEnabled(true);
Toaster.show(rootView, getString(R.string.error_updating_status));
}
diff --git a/app/src/main/java/org/apache/fineract/ui/online/customers/customertasks/CustomerTasksBottomSheetPresenter.java b/app/src/main/java/org/apache/fineract/ui/online/customers/customertasks/CustomerTasksBottomSheetPresenter.java
index f6af1b7..526ecc9 100644
--- a/app/src/main/java/org/apache/fineract/ui/online/customers/customertasks/CustomerTasksBottomSheetPresenter.java
+++ b/app/src/main/java/org/apache/fineract/ui/online/customers/customertasks/CustomerTasksBottomSheetPresenter.java
@@ -2,6 +2,7 @@
import android.content.Context;
+import org.apache.fineract.R;
import org.apache.fineract.data.datamanager.DataManagerCustomer;
import org.apache.fineract.data.models.customer.Command;
import org.apache.fineract.injection.ApplicationContext;
@@ -61,9 +62,10 @@
}
@Override
- public void onError(Throwable e) {
+ public void onError(Throwable throwable) {
getMvpView().hideProgressbar();
- getMvpView().showError();
+ showExceptionError(throwable,
+ context.getString(R.string.error_updating_status));
}
})
);
diff --git a/app/src/main/java/org/apache/fineract/ui/online/depositaccounts/createdepositaccount/createdepositactivity/CreateDepositActivity.java b/app/src/main/java/org/apache/fineract/ui/online/depositaccounts/createdepositaccount/createdepositactivity/CreateDepositActivity.java
index c2d7ff6..91ed803 100644
--- a/app/src/main/java/org/apache/fineract/ui/online/depositaccounts/createdepositaccount/createdepositactivity/CreateDepositActivity.java
+++ b/app/src/main/java/org/apache/fineract/ui/online/depositaccounts/createdepositaccount/createdepositactivity/CreateDepositActivity.java
@@ -160,6 +160,14 @@
}
@Override
+ public void showNoInternetConnection() {
+ stepperLayout.setNextButtonEnabled(true);
+ stepperLayout.setBackButtonEnabled(true);
+ Toaster.show(findViewById(android.R.id.content),
+ getString(R.string.no_internet_connection));
+ }
+
+ @Override
public void showError(String message) {
stepperLayout.setNextButtonEnabled(true);
stepperLayout.setBackButtonEnabled(true);
diff --git a/app/src/main/java/org/apache/fineract/ui/online/depositaccounts/createdepositaccount/createdepositactivity/CreateDepositPresenter.java b/app/src/main/java/org/apache/fineract/ui/online/depositaccounts/createdepositaccount/createdepositactivity/CreateDepositPresenter.java
index 2a5239b..95c796f 100644
--- a/app/src/main/java/org/apache/fineract/ui/online/depositaccounts/createdepositaccount/createdepositactivity/CreateDepositPresenter.java
+++ b/app/src/main/java/org/apache/fineract/ui/online/depositaccounts/createdepositaccount/createdepositactivity/CreateDepositPresenter.java
@@ -61,9 +61,9 @@
}
@Override
- public void onError(Throwable e) {
+ public void onError(Throwable throwable) {
getMvpView().hideProgressbar();
- getMvpView().showError(
+ showExceptionError(throwable,
context.getString(R.string.error_creating_deposit_account));
}
})
@@ -86,9 +86,9 @@
}
@Override
- public void onError(Throwable e) {
+ public void onError(Throwable throwable) {
getMvpView().hideProgressbar();
- getMvpView().showError(
+ showExceptionError(throwable,
context.getString(R.string.error_updating_deposit_account));
}
})
diff --git a/app/src/main/java/org/apache/fineract/ui/online/depositaccounts/createdepositaccount/formdepositassignproduct/FormDepositAssignProductFragment.java b/app/src/main/java/org/apache/fineract/ui/online/depositaccounts/createdepositaccount/formdepositassignproduct/FormDepositAssignProductFragment.java
index ad965d4..e2e262d 100644
--- a/app/src/main/java/org/apache/fineract/ui/online/depositaccounts/createdepositaccount/formdepositassignproduct/FormDepositAssignProductFragment.java
+++ b/app/src/main/java/org/apache/fineract/ui/online/depositaccounts/createdepositaccount/formdepositassignproduct/FormDepositAssignProductFragment.java
@@ -5,8 +5,8 @@
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
-import android.support.design.widget.CoordinatorLayout;
import android.support.design.widget.TextInputLayout;
+import android.support.v4.widget.NestedScrollView;
import android.support.v7.widget.RecyclerView;
import android.support.v7.widget.StaggeredGridLayoutManager;
import android.view.LayoutInflater;
@@ -29,8 +29,7 @@
import org.apache.fineract.ui.base.FineractBaseActivity;
import org.apache.fineract.ui.base.FineractBaseFragment;
import org.apache.fineract.ui.online.depositaccounts.createdepositaccount.DepositAction;
-import org.apache.fineract.ui.online.depositaccounts.createdepositaccount
- .DepositOnNavigationBarListener;
+import org.apache.fineract.ui.online.depositaccounts.createdepositaccount.DepositOnNavigationBarListener;
import org.apache.fineract.ui.views.DelayAutoCompleteTextView;
import org.apache.fineract.utils.ConstantKeys;
@@ -41,6 +40,7 @@
import butterknife.BindView;
import butterknife.ButterKnife;
+import butterknife.OnClick;
/**
* @author Rajan Maurya
@@ -67,8 +67,11 @@
@BindView(R.id.rv_beneficiary)
RecyclerView rvBeneficiary;
- @BindView(R.id.cl_deposit_assign_product)
- CoordinatorLayout clDepositAssignProduct;
+ @BindView(R.id.ncv_deposit_assign_product)
+ NestedScrollView ncvDepositAssignProduct;
+
+ @BindView(R.id.layout_error)
+ View layoutError;
@BindView(R.id.pb_search_beneficiary)
ProgressBar pbSearchBeneficiary;
@@ -121,6 +124,7 @@
rootView = inflater.inflate(R.layout.fragment_form_deposit_assign_product,
container, false);
ButterKnife.bind(this, rootView);
+ initializeFineractUIErrorHandler(getActivity(), rootView);
formDepositAssignProductPresenter.attachView(this);
showUserInterface();
@@ -137,6 +141,13 @@
return rootView;
}
+ @OnClick(R.id.btn_try_again)
+ void onRetry() {
+ ncvDepositAssignProduct.setVisibility(View.GONE);
+ layoutError.setVisibility(View.GONE);
+ formDepositAssignProductPresenter.fetchProductDefinitions();
+ }
+
@Override
public VerificationError verifyStep() {
if (productIdentifier == null) {
@@ -186,7 +197,7 @@
@Override
public void editDepositAccountDetails(DepositAccount depositAccount) {
- clDepositAssignProduct.setVisibility(View.VISIBLE);
+ ncvDepositAssignProduct.setVisibility(View.VISIBLE);
beneficiaryAdapter.setAllBeneficiary(depositAccount.getBeneficiaries());
spProducts.setVisibility(View.GONE);
tvSelectProductHeader.setVisibility(View.GONE);
@@ -195,7 +206,8 @@
@Override
public void showProductDefinitions(List<String> products) {
- clDepositAssignProduct.setVisibility(View.VISIBLE);
+ ncvDepositAssignProduct.setVisibility(View.VISIBLE);
+ layoutError.setVisibility(View.GONE);
this.products.addAll(products);
productsAdapter.notifyDataSetChanged();
}
@@ -211,8 +223,17 @@
}
@Override
+ public void showNoInternetConnection() {
+ ncvDepositAssignProduct.setVisibility(View.GONE);
+ layoutError.setVisibility(View.VISIBLE);
+ showFineractNoInternetUI();
+ }
+
+ @Override
public void showError(String message) {
- clDepositAssignProduct.setVisibility(View.VISIBLE);
+ ncvDepositAssignProduct.setVisibility(View.GONE);
+ layoutError.setVisibility(View.VISIBLE);
+ showFineractErrorUI(getString(R.string.deposit_product));
}
@Override
diff --git a/app/src/main/java/org/apache/fineract/ui/online/depositaccounts/createdepositaccount/formdepositassignproduct/FormDepositAssignProductPresenter.java b/app/src/main/java/org/apache/fineract/ui/online/depositaccounts/createdepositaccount/formdepositassignproduct/FormDepositAssignProductPresenter.java
index 2d00a10..2890234 100644
--- a/app/src/main/java/org/apache/fineract/ui/online/depositaccounts/createdepositaccount/formdepositassignproduct/FormDepositAssignProductPresenter.java
+++ b/app/src/main/java/org/apache/fineract/ui/online/depositaccounts/createdepositaccount/formdepositassignproduct/FormDepositAssignProductPresenter.java
@@ -2,6 +2,7 @@
import android.content.Context;
+import org.apache.fineract.R;
import org.apache.fineract.data.datamanager.DataManagerDeposit;
import org.apache.fineract.data.models.deposit.ProductDefinition;
import org.apache.fineract.injection.ApplicationContext;
@@ -66,9 +67,10 @@
}
@Override
- public void onError(Throwable e) {
+ public void onError(Throwable throwable) {
getMvpView().hideProgressbar();
- getMvpView().showError("");
+ showExceptionError(throwable,
+ context.getString(R.string.error_fetching_deposit_product));
}
@Override
diff --git a/app/src/main/java/org/apache/fineract/ui/online/depositaccounts/depositaccountdetails/DepositAccountDetailsFragment.java b/app/src/main/java/org/apache/fineract/ui/online/depositaccounts/depositaccountdetails/DepositAccountDetailsFragment.java
index b9696b7..179e63b 100644
--- a/app/src/main/java/org/apache/fineract/ui/online/depositaccounts/depositaccountdetails/DepositAccountDetailsFragment.java
+++ b/app/src/main/java/org/apache/fineract/ui/online/depositaccounts/depositaccountdetails/DepositAccountDetailsFragment.java
@@ -9,7 +9,6 @@
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
-import android.widget.RelativeLayout;
import android.widget.TextView;
import org.apache.fineract.R;
@@ -18,8 +17,7 @@
import org.apache.fineract.ui.base.FineractBaseFragment;
import org.apache.fineract.ui.base.Toaster;
import org.apache.fineract.ui.online.depositaccounts.createdepositaccount.DepositAction;
-import org.apache.fineract.ui.online.depositaccounts.createdepositaccount.createdepositactivity
- .CreateDepositActivity;
+import org.apache.fineract.ui.online.depositaccounts.createdepositaccount.createdepositactivity.CreateDepositActivity;
import org.apache.fineract.utils.ConstantKeys;
import org.apache.fineract.utils.StatusUtils;
@@ -54,11 +52,8 @@
@BindView(R.id.tv_beneficiaries)
TextView tvBeneficiaries;
- @BindView(R.id.rl_error)
- RelativeLayout rlError;
-
- @BindView(R.id.tv_error)
- TextView tvError;
+ @BindView(R.id.layout_error)
+ View layoutError;
@BindView(R.id.fab_edit_deposit_account)
FloatingActionButton fabEditDepositAccount;
@@ -93,6 +88,7 @@
rootView = inflater.inflate(R.layout.fragment_customer_deposit_details, container, false);
((FineractBaseActivity) getActivity()).getActivityComponent().inject(this);
ButterKnife.bind(this, rootView);
+ initializeFineractUIErrorHandler(getActivity(), rootView);
customerDepositDetailsPresenter.attachView(this);
setToolbarTitle(getString(R.string.deposit_account));
@@ -106,10 +102,10 @@
customerDepositDetailsPresenter.fetchDepositAccountDetails(accountIdentifier);
}
- @OnClick(R.id.iv_retry)
+ @OnClick(R.id.btn_try_again)
void onRetry() {
clCustomerDepositDetails.setVisibility(View.GONE);
- rlError.setVisibility(View.GONE);
+ layoutError.setVisibility(View.GONE);
customerDepositDetailsPresenter.fetchDepositAccountDetails(accountIdentifier);
}
@@ -126,7 +122,7 @@
public void showDepositDetails(DepositAccount depositAccount) {
this.depositAccount = depositAccount;
clCustomerDepositDetails.setVisibility(View.VISIBLE);
- rlError.setVisibility(View.GONE);
+ layoutError.setVisibility(View.GONE);
StatusUtils.setDepositAccountStatusIcon(depositAccount.getState(),
ivDepositCurrentStatus, getActivity());
@@ -158,10 +154,17 @@
}
@Override
+ public void showNoInternetConnection() {
+ clCustomerDepositDetails.setVisibility(View.GONE);
+ layoutError.setVisibility(View.VISIBLE);
+ showFineractNoInternetUI();
+ }
+
+ @Override
public void showError(String message) {
clCustomerDepositDetails.setVisibility(View.GONE);
- rlError.setVisibility(View.VISIBLE);
- tvError.setText(message);
+ layoutError.setVisibility(View.VISIBLE);
+ showFineractErrorUI(getString(R.string.deposit_account));
Toaster.show(rootView, message);
}
diff --git a/app/src/main/java/org/apache/fineract/ui/online/depositaccounts/depositaccountdetails/DepositAccountDetailsPresenter.java b/app/src/main/java/org/apache/fineract/ui/online/depositaccounts/depositaccountdetails/DepositAccountDetailsPresenter.java
index 2b11a20..d1025b9 100644
--- a/app/src/main/java/org/apache/fineract/ui/online/depositaccounts/depositaccountdetails/DepositAccountDetailsPresenter.java
+++ b/app/src/main/java/org/apache/fineract/ui/online/depositaccounts/depositaccountdetails/DepositAccountDetailsPresenter.java
@@ -63,9 +63,9 @@
}
@Override
- public void onError(Throwable e) {
+ public void onError(Throwable throwable) {
getMvpView().hideProgressbar();
- getMvpView().showError(
+ showExceptionError(throwable,
context.getString(R.string.error_loading_deposit_details));
}
diff --git a/app/src/main/java/org/apache/fineract/ui/online/depositaccounts/depositaccountslist/DepositAccountsFragment.java b/app/src/main/java/org/apache/fineract/ui/online/depositaccounts/depositaccountslist/DepositAccountsFragment.java
index fdaa38d..0a5e2f4 100644
--- a/app/src/main/java/org/apache/fineract/ui/online/depositaccounts/depositaccountslist/DepositAccountsFragment.java
+++ b/app/src/main/java/org/apache/fineract/ui/online/depositaccounts/depositaccountslist/DepositAccountsFragment.java
@@ -134,6 +134,12 @@
}
@Override
+ public void showNoInternetConnection() {
+ showRecyclerView(false);
+ showFineractNoInternetUI();
+ }
+
+ @Override
public void showError(String errorMessage) {
showRecyclerView(false);
showFineractErrorUI(getString(R.string.deposit_accounts));
diff --git a/app/src/main/java/org/apache/fineract/ui/online/depositaccounts/depositaccountslist/DepositAccountsPresenter.java b/app/src/main/java/org/apache/fineract/ui/online/depositaccounts/depositaccountslist/DepositAccountsPresenter.java
index 1e28756..a117c5a 100644
--- a/app/src/main/java/org/apache/fineract/ui/online/depositaccounts/depositaccountslist/DepositAccountsPresenter.java
+++ b/app/src/main/java/org/apache/fineract/ui/online/depositaccounts/depositaccountslist/DepositAccountsPresenter.java
@@ -67,9 +67,9 @@
}
@Override
- public void onError(Throwable e) {
+ public void onError(Throwable throwable) {
getMvpView().hideProgressbar();
- getMvpView().showError(
+ showExceptionError(throwable,
context.getString(R.string.error_fetching_deposit_accounts));
}
diff --git a/app/src/main/java/org/apache/fineract/ui/online/identification/createidentification/identificationactivity/CreateIdentificationActivity.java b/app/src/main/java/org/apache/fineract/ui/online/identification/createidentification/identificationactivity/CreateIdentificationActivity.java
index de6f496..ff2c2a5 100644
--- a/app/src/main/java/org/apache/fineract/ui/online/identification/createidentification/identificationactivity/CreateIdentificationActivity.java
+++ b/app/src/main/java/org/apache/fineract/ui/online/identification/createidentification/identificationactivity/CreateIdentificationActivity.java
@@ -167,6 +167,14 @@
}
@Override
+ public void showNoInternetConnection() {
+ stepperLayout.setNextButtonEnabled(true);
+ stepperLayout.setBackButtonEnabled(true);
+ Toaster.show(findViewById(android.R.id.content),
+ getString(R.string.no_internet_connection));
+ }
+
+ @Override
public void showError(String message) {
stepperLayout.setNextButtonEnabled(true);
stepperLayout.setBackButtonEnabled(true);
diff --git a/app/src/main/java/org/apache/fineract/ui/online/identification/createidentification/identificationactivity/CreateIdentificationPresenter.java b/app/src/main/java/org/apache/fineract/ui/online/identification/createidentification/identificationactivity/CreateIdentificationPresenter.java
index 2a08bca..bcb86f5 100644
--- a/app/src/main/java/org/apache/fineract/ui/online/identification/createidentification/identificationactivity/CreateIdentificationPresenter.java
+++ b/app/src/main/java/org/apache/fineract/ui/online/identification/createidentification/identificationactivity/CreateIdentificationPresenter.java
@@ -63,11 +63,10 @@
}
@Override
- public void onError(Throwable e) {
+ public void onError(Throwable throwable) {
getMvpView().hideProgressbar();
- getMvpView().showError(
- context.getString(
- R.string.error_creating_identification_card));
+ showExceptionError(throwable, context.getString(
+ R.string.error_creating_identification_card));
}
})
);
@@ -90,10 +89,10 @@
}
@Override
- public void onError(Throwable e) {
+ public void onError(Throwable throwable) {
getMvpView().hideProgressbar();
- getMvpView().showError(
- context.getString(R.string.error_editing_identification_card));
+ showExceptionError(throwable, context.getString(
+ R.string.error_updating_identification_card));
}
})
);
diff --git a/app/src/main/java/org/apache/fineract/ui/online/identification/identificationdetails/IdentificationDetailsContract.java b/app/src/main/java/org/apache/fineract/ui/online/identification/identificationdetails/IdentificationDetailsContract.java
index cb91b44..d564963 100644
--- a/app/src/main/java/org/apache/fineract/ui/online/identification/identificationdetails/IdentificationDetailsContract.java
+++ b/app/src/main/java/org/apache/fineract/ui/online/identification/identificationdetails/IdentificationDetailsContract.java
@@ -13,6 +13,8 @@
interface View extends MvpView {
+ void fetchIdentificationScanCard();
+
void showUserInterface();
void initializeRecyclerView();
diff --git a/app/src/main/java/org/apache/fineract/ui/online/identification/identificationdetails/IdentificationDetailsFragment.java b/app/src/main/java/org/apache/fineract/ui/online/identification/identificationdetails/IdentificationDetailsFragment.java
index db69744..8288492 100644
--- a/app/src/main/java/org/apache/fineract/ui/online/identification/identificationdetails/IdentificationDetailsFragment.java
+++ b/app/src/main/java/org/apache/fineract/ui/online/identification/identificationdetails/IdentificationDetailsFragment.java
@@ -13,7 +13,6 @@
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
-import android.widget.RelativeLayout;
import android.widget.TextView;
import android.widget.Toast;
@@ -26,12 +25,9 @@
import org.apache.fineract.ui.base.FineractBaseActivity;
import org.apache.fineract.ui.base.FineractBaseFragment;
import org.apache.fineract.ui.online.identification.createidentification.Action;
-import org.apache.fineract.ui.online.identification.createidentification.identificationactivity
- .CreateIdentificationActivity;
-import org.apache.fineract.ui.online.identification.uploadidentificationscan
- .AddScanIdentificationListener;
-import org.apache.fineract.ui.online.identification.uploadidentificationscan
- .UploadIdentificationCardBottomSheet;
+import org.apache.fineract.ui.online.identification.createidentification.identificationactivity.CreateIdentificationActivity;
+import org.apache.fineract.ui.online.identification.uploadidentificationscan.AddScanIdentificationListener;
+import org.apache.fineract.ui.online.identification.uploadidentificationscan.UploadIdentificationCardBottomSheet;
import org.apache.fineract.ui.online.identification.viewscancard.ViewScanCardActivity;
import org.apache.fineract.utils.ConstantKeys;
import org.apache.fineract.utils.DateUtils;
@@ -75,11 +71,8 @@
@BindView(R.id.rv_scans_uploaded)
RecyclerView rvScansUploaded;
- @BindView(R.id.rl_error)
- RelativeLayout rlError;
-
- @BindView(R.id.tv_error)
- TextView tvError;
+ @BindView(R.id.layout_error)
+ View layoutError;
@Inject
IdentificationScanAdapter identificationScanAdapter;
@@ -120,6 +113,7 @@
rootView = inflater.inflate(R.layout.fragment_identification_details, container, false);
((FineractBaseActivity) getActivity()).getActivityComponent().inject(this);
ButterKnife.bind(this, rootView);
+ initializeFineractUIErrorHandler(getActivity(), rootView);
identificationDetailsPresenter.attachView(this);
showUserInterface();
@@ -139,24 +133,27 @@
getString(R.string.upload_new_identification_card_scan));
}
- @OnClick(R.id.iv_retry)
+ @OnClick(R.id.btn_try_again)
void onRetry() {
- identificationDetailsPresenter.fetchIdentificationScanCards(customerIdentifier,
- identificationCard.getNumber());
+ fetchIdentificationScanCard();
}
@Override
public void onResume() {
super.onResume();
- identificationDetailsPresenter.fetchIdentificationScanCards(customerIdentifier,
- identificationCard.getNumber());
+ fetchIdentificationScanCard();
}
@Override
public void updateScanUploadedIdentification() {
+ fetchIdentificationScanCard();
+ }
+
+ @Override
+ public void fetchIdentificationScanCard() {
tvScansStatus.setVisibility(View.VISIBLE);
rvScansUploaded.setVisibility(View.GONE);
- rlError.setVisibility(View.GONE);
+ layoutError.setVisibility(View.GONE);
identificationDetailsPresenter.fetchIdentificationScanCards(customerIdentifier,
identificationCard.getNumber());
}
@@ -195,10 +192,10 @@
public void showRecyclerView(boolean status) {
if (status) {
rvScansUploaded.setVisibility(View.VISIBLE);
- rlError.setVisibility(View.GONE);
+ layoutError.setVisibility(View.GONE);
} else {
rvScansUploaded.setVisibility(View.GONE);
- rlError.setVisibility(View.VISIBLE);
+ layoutError.setVisibility(View.VISIBLE);
}
tvScansStatus.setVisibility(View.GONE);
}
@@ -206,8 +203,8 @@
@Override
public void showScansStatus(String message) {
showRecyclerView(false);
- rlError.getChildAt(0).setVisibility(View.GONE);
- tvError.setText(message);
+ showFineractEmptyUI(getString(R.string.identification_card_scans),
+ getString(R.string.identification_card_scan), R.drawable.ic_description_black_24dp);
}
@Override
@@ -240,9 +237,15 @@
}
@Override
+ public void showNoInternetConnection() {
+ showRecyclerView(false);
+ showFineractNoInternetUI();
+ }
+
+ @Override
public void showError(String message) {
showRecyclerView(false);
- tvError.setText(message);
+ showFineractErrorUI(getString(R.string.identification_card_scans));
}
@Override
diff --git a/app/src/main/java/org/apache/fineract/ui/online/identification/identificationdetails/IdentificationDetailsPresenter.java b/app/src/main/java/org/apache/fineract/ui/online/identification/identificationdetails/IdentificationDetailsPresenter.java
index e68813b..d8dacbe 100644
--- a/app/src/main/java/org/apache/fineract/ui/online/identification/identificationdetails/IdentificationDetailsPresenter.java
+++ b/app/src/main/java/org/apache/fineract/ui/online/identification/identificationdetails/IdentificationDetailsPresenter.java
@@ -70,8 +70,8 @@
}
@Override
- public void onError(Throwable e) {
- getMvpView().showError(
+ public void onError(Throwable throwable) {
+ showExceptionError(throwable,
context.getString(R.string.error_fetching_scans));
}
diff --git a/app/src/main/java/org/apache/fineract/ui/online/identification/identificationlist/IdentificationsContract.java b/app/src/main/java/org/apache/fineract/ui/online/identification/identificationlist/IdentificationsContract.java
index 5cff8db..c38030c 100644
--- a/app/src/main/java/org/apache/fineract/ui/online/identification/identificationlist/IdentificationsContract.java
+++ b/app/src/main/java/org/apache/fineract/ui/online/identification/identificationlist/IdentificationsContract.java
@@ -23,6 +23,8 @@
void showRecyclerView(boolean status);
+ void showEmptyIdentifications();
+
void showMessage(String message);
}
diff --git a/app/src/main/java/org/apache/fineract/ui/online/identification/identificationlist/IdentificationsFragment.java b/app/src/main/java/org/apache/fineract/ui/online/identification/identificationlist/IdentificationsFragment.java
index f8c862b..bca48e2 100644
--- a/app/src/main/java/org/apache/fineract/ui/online/identification/identificationlist/IdentificationsFragment.java
+++ b/app/src/main/java/org/apache/fineract/ui/online/identification/identificationlist/IdentificationsFragment.java
@@ -9,8 +9,6 @@
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
-import android.widget.RelativeLayout;
-import android.widget.TextView;
import org.apache.fineract.R;
import org.apache.fineract.data.models.customer.identification.Identification;
@@ -20,10 +18,8 @@
import org.apache.fineract.ui.base.OnItemClickListener;
import org.apache.fineract.ui.base.Toaster;
import org.apache.fineract.ui.online.identification.createidentification.Action;
-import org.apache.fineract.ui.online.identification.createidentification.identificationactivity
- .CreateIdentificationActivity;
-import org.apache.fineract.ui.online.identification.identificationdetails
- .IdentificationDetailsFragment;
+import org.apache.fineract.ui.online.identification.createidentification.identificationactivity.CreateIdentificationActivity;
+import org.apache.fineract.ui.online.identification.identificationdetails.IdentificationDetailsFragment;
import org.apache.fineract.utils.ConstantKeys;
import java.util.ArrayList;
@@ -48,11 +44,8 @@
@BindView(R.id.swipe_container)
SwipeRefreshLayout swipeRefreshLayout;
- @BindView(R.id.rl_error)
- RelativeLayout rlError;
-
- @BindView(R.id.tv_error)
- TextView tvError;
+ @BindView(R.id.layout_error)
+ View layoutError;
@Inject
IdentificationsPresenter identificationsPresenter;
@@ -90,6 +83,7 @@
((FineractBaseActivity) getActivity()).getActivityComponent().inject(this);
identificationsPresenter.attachView(this);
ButterKnife.bind(this, rootView);
+ initializeFineractUIErrorHandler(getActivity(), rootView);
showUserInterface();
@@ -151,21 +145,38 @@
public void showRecyclerView(boolean status) {
if (status) {
rvIdentifications.setVisibility(View.VISIBLE);
- rlError.setVisibility(View.GONE);
+ layoutError.setVisibility(View.GONE);
} else {
rvIdentifications.setVisibility(View.GONE);
- rlError.setVisibility(View.VISIBLE);
+ layoutError.setVisibility(View.VISIBLE);
}
}
@Override
- public void showMessage(String message) {
+ public void showEmptyIdentifications() {
showRecyclerView(false);
- tvError.setText(message);
+ showFineractEmptyUI(getString(R.string.identification_cards),
+ getString(R.string.identification_card), R.drawable.ic_person_outline_black_24dp);
+ }
+
+ @Override
+ public void showMessage(String message) {
Toaster.show(rootView, message);
}
@Override
+ public void showNoInternetConnection() {
+ showRecyclerView(false);
+ showFineractNoInternetUI();
+ }
+
+ @Override
+ public void showError(String message) {
+ showRecyclerView(false);
+ showFineractErrorUI(getString(R.string.identification_cards));
+ }
+
+ @Override
public void onItemClick(View childView, int position) {
((FineractBaseActivity) getActivity()).replaceFragment(
IdentificationDetailsFragment.newInstance(customerIdentifier,
diff --git a/app/src/main/java/org/apache/fineract/ui/online/identification/identificationlist/IdentificationsPresenter.java b/app/src/main/java/org/apache/fineract/ui/online/identification/identificationlist/IdentificationsPresenter.java
index 74ba678..fa1b855 100644
--- a/app/src/main/java/org/apache/fineract/ui/online/identification/identificationlist/IdentificationsPresenter.java
+++ b/app/src/main/java/org/apache/fineract/ui/online/identification/identificationlist/IdentificationsPresenter.java
@@ -61,17 +61,16 @@
getMvpView().hideProgressbar();
if (identifications.size() == 0) {
- getMvpView().showMessage(
- context.getString(R.string.empty_identification_list));
+ getMvpView().showEmptyIdentifications();
} else {
getMvpView().showIdentification(identifications);
}
}
@Override
- public void onError(Throwable e) {
+ public void onError(Throwable throwable) {
getMvpView().hideProgressbar();
- getMvpView().showMessage(
+ showExceptionError(throwable,
context.getString(R.string.error_fetching_identification_list));
}
diff --git a/app/src/main/java/org/apache/fineract/ui/online/identification/uploadidentificationscan/UploadIdentificationCardBottomSheet.java b/app/src/main/java/org/apache/fineract/ui/online/identification/uploadidentificationscan/UploadIdentificationCardBottomSheet.java
index 45c44ce..86180fa 100644
--- a/app/src/main/java/org/apache/fineract/ui/online/identification/uploadidentificationscan/UploadIdentificationCardBottomSheet.java
+++ b/app/src/main/java/org/apache/fineract/ui/online/identification/uploadidentificationscan/UploadIdentificationCardBottomSheet.java
@@ -215,6 +215,11 @@
}
@Override
+ public void showNoInternetConnection() {
+ Toaster.show(rootView, getString(R.string.no_internet_connection));
+ }
+
+ @Override
public void showError(String message) {
Toaster.show(rootView, message);
}
diff --git a/app/src/main/java/org/apache/fineract/ui/online/identification/uploadidentificationscan/UploadIdentificationCardPresenter.java b/app/src/main/java/org/apache/fineract/ui/online/identification/uploadidentificationscan/UploadIdentificationCardPresenter.java
index 613ed4b..93b4157 100644
--- a/app/src/main/java/org/apache/fineract/ui/online/identification/uploadidentificationscan/UploadIdentificationCardPresenter.java
+++ b/app/src/main/java/org/apache/fineract/ui/online/identification/uploadidentificationscan/UploadIdentificationCardPresenter.java
@@ -74,9 +74,9 @@
}
@Override
- public void onError(Throwable e) {
+ public void onError(Throwable throwable) {
getMvpView().hideProgressDialog();
- getMvpView().showError(context
+ showExceptionError(throwable, context
.getString(R.string.error_uploading_identification_scan_card));
}
})
diff --git a/app/src/main/java/org/apache/fineract/ui/online/launcher/LauncherActivity.java b/app/src/main/java/org/apache/fineract/ui/online/launcher/LauncherActivity.java
index 9e6ff2b..f36c304 100644
--- a/app/src/main/java/org/apache/fineract/ui/online/launcher/LauncherActivity.java
+++ b/app/src/main/java/org/apache/fineract/ui/online/launcher/LauncherActivity.java
@@ -96,4 +96,14 @@
super.onDestroy();
launcherPresenter.detachView();
}
+
+ @Override
+ public void showNoInternetConnection() {
+
+ }
+
+ @Override
+ public void showError(String message) {
+
+ }
}
diff --git a/app/src/main/java/org/apache/fineract/ui/online/loanaccounts/loanaccountlist/LoanAccountsContract.java b/app/src/main/java/org/apache/fineract/ui/online/loanaccounts/loanaccountlist/LoanAccountsContract.java
index 0c42588..3d55a5b 100644
--- a/app/src/main/java/org/apache/fineract/ui/online/loanaccounts/loanaccountlist/LoanAccountsContract.java
+++ b/app/src/main/java/org/apache/fineract/ui/online/loanaccounts/loanaccountlist/LoanAccountsContract.java
@@ -25,8 +25,6 @@
void showMessage(String message);
- void showError();
-
void showProgressbar();
void hideProgressbar();
diff --git a/app/src/main/java/org/apache/fineract/ui/online/loanaccounts/loanaccountlist/LoanAccountsFragment.java b/app/src/main/java/org/apache/fineract/ui/online/loanaccounts/loanaccountlist/LoanAccountsFragment.java
index 252b449..f9aca09 100644
--- a/app/src/main/java/org/apache/fineract/ui/online/loanaccounts/loanaccountlist/LoanAccountsFragment.java
+++ b/app/src/main/java/org/apache/fineract/ui/online/loanaccounts/loanaccountlist/LoanAccountsFragment.java
@@ -9,8 +9,6 @@
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
-import android.widget.RelativeLayout;
-import android.widget.TextView;
import org.apache.fineract.R;
import org.apache.fineract.data.models.loan.LoanAccount;
@@ -20,8 +18,7 @@
import org.apache.fineract.ui.base.FineractBaseFragment;
import org.apache.fineract.ui.base.OnItemClickListener;
import org.apache.fineract.ui.base.Toaster;
-import org.apache.fineract.ui.online.loanaccounts.loanapplication.loanactivity
- .LoanApplicationActivity;
+import org.apache.fineract.ui.online.loanaccounts.loanapplication.loanactivity.LoanApplicationActivity;
import org.apache.fineract.ui.online.loanaccounts.loandetails.CustomerLoanDetailsFragment;
import org.apache.fineract.utils.ConstantKeys;
@@ -47,11 +44,8 @@
@BindView(R.id.swipe_container)
SwipeRefreshLayout swipeRefreshLayout;
- @BindView(R.id.rl_error)
- RelativeLayout rlError;
-
- @BindView(R.id.tv_error)
- TextView tvErrorMessage;
+ @BindView(R.id.layout_error)
+ View layoutError;
@Inject
LoanAccountsPresenter customerLoansPresenter;
@@ -87,6 +81,7 @@
rootView = inflater.inflate(R.layout.fragment_customer_loans, container, false);
((FineractBaseActivity) getActivity()).getActivityComponent().inject(this);
ButterKnife.bind(this, rootView);
+ initializeFineractUIErrorHandler(getActivity(), rootView);
customerLoansPresenter.attachView(this);
setToolbarTitle(getString(R.string.loan_accounts));
@@ -106,8 +101,10 @@
customerLoansPresenter.fetchCustomerLoanAccounts(customerIdentifier, 0, false);
}
- @OnClick(R.id.iv_retry)
+ @OnClick(R.id.btn_try_again)
void onRetry() {
+ rvCustomerLoans.setVisibility(View.GONE);
+ layoutError.setVisibility(View.GONE);
customerLoansPresenter.fetchCustomerLoanAccounts(customerIdentifier, 0, false);
}
@@ -155,18 +152,18 @@
@Override
public void showEmptyLoanAccounts(String message) {
showRecyclerView(false);
- tvErrorMessage.setText(getString(R.string.empty_customer_loans));
- showMessage(getString(R.string.empty_customer_loans));
+ showFineractEmptyUI(getString(R.string.loan_accounts), getString(R.string.loan_account),
+ R.drawable.ic_payment_black_24dp);
}
@Override
public void showRecyclerView(boolean status) {
if (status) {
rvCustomerLoans.setVisibility(View.VISIBLE);
- rlError.setVisibility(View.GONE);
+ layoutError.setVisibility(View.GONE);
} else {
rvCustomerLoans.setVisibility(View.GONE);
- rlError.setVisibility(View.VISIBLE);
+ layoutError.setVisibility(View.VISIBLE);
}
}
@@ -176,10 +173,16 @@
}
@Override
- public void showError() {
+ public void showNoInternetConnection() {
showRecyclerView(false);
- tvErrorMessage.setText(getString(R.string.error_loading_customer_loans));
- showMessage(getString(R.string.error_loading_customer_loans));
+ showFineractNoInternetUI();
+ }
+
+ @Override
+ public void showError(String message) {
+ showRecyclerView(false);
+ showMessage(message);
+ showFineractErrorUI(getString(R.string.loan_accounts));
}
@Override
diff --git a/app/src/main/java/org/apache/fineract/ui/online/loanaccounts/loanaccountlist/LoanAccountsPresenter.java b/app/src/main/java/org/apache/fineract/ui/online/loanaccounts/loanaccountlist/LoanAccountsPresenter.java
index 5a942f2..64addd0 100644
--- a/app/src/main/java/org/apache/fineract/ui/online/loanaccounts/loanaccountlist/LoanAccountsPresenter.java
+++ b/app/src/main/java/org/apache/fineract/ui/online/loanaccounts/loanaccountlist/LoanAccountsPresenter.java
@@ -6,6 +6,7 @@
import org.apache.fineract.data.datamanager.DataManagerLoans;
import org.apache.fineract.data.models.loan.LoanAccount;
import org.apache.fineract.data.models.loan.LoanAccountPage;
+import org.apache.fineract.exceptions.NoConnectivityException;
import org.apache.fineract.injection.ApplicationContext;
import org.apache.fineract.injection.ConfigPersistent;
import org.apache.fineract.ui.base.BasePresenter;
@@ -84,13 +85,17 @@
}
@Override
- public void onError(Throwable e) {
+ public void onError(Throwable throwable) {
getMvpView().hideProgressbar();
- if (loadmore) {
+ if (loadmore && !(throwable instanceof NoConnectivityException)) {
getMvpView().showMessage(
context.getString(R.string.error_loading_customer_loans));
+ } else if (loadmore && (throwable instanceof NoConnectivityException)) {
+ getMvpView().showMessage(
+ context.getString(R.string.no_internet_connection));
} else {
- getMvpView().showError();
+ showExceptionError(throwable,
+ context.getString(R.string.error_loading_customer_loans));
}
}
diff --git a/app/src/main/java/org/apache/fineract/ui/online/loanaccounts/loanapplication/loanactivity/LoanApplicationActivity.java b/app/src/main/java/org/apache/fineract/ui/online/loanaccounts/loanapplication/loanactivity/LoanApplicationActivity.java
index e8a75ce..5614ca6 100644
--- a/app/src/main/java/org/apache/fineract/ui/online/loanaccounts/loanapplication/loanactivity/LoanApplicationActivity.java
+++ b/app/src/main/java/org/apache/fineract/ui/online/loanaccounts/loanapplication/loanactivity/LoanApplicationActivity.java
@@ -74,7 +74,7 @@
stepperLayout.setAdapter(stepAdapter, currentPosition);
stepperLayout.setListener(this);
stepperLayout.setOffscreenPageLimit(stepAdapter.getCount());
- setToolbarTitle("Create new loan");
+ setToolbarTitle(getString(R.string.create_new_loan));
showBackButton();
}
@@ -129,6 +129,12 @@
}
@Override
+ public void showNoInternetConnection() {
+ Toaster.show(findViewById(android.R.id.content),
+ getString(R.string.no_internet_connection));
+ }
+
+ @Override
public void showError(String message) {
Toaster.show(findViewById(android.R.id.content), message);
}
diff --git a/app/src/main/java/org/apache/fineract/ui/online/loanaccounts/loanapplication/loanactivity/LoanApplicationPresenter.java b/app/src/main/java/org/apache/fineract/ui/online/loanaccounts/loanapplication/loanactivity/LoanApplicationPresenter.java
index 7069853..b4e7bac 100644
--- a/app/src/main/java/org/apache/fineract/ui/online/loanaccounts/loanapplication/loanactivity/LoanApplicationPresenter.java
+++ b/app/src/main/java/org/apache/fineract/ui/online/loanaccounts/loanapplication/loanactivity/LoanApplicationPresenter.java
@@ -61,9 +61,9 @@
}
@Override
- public void onError(Throwable e) {
+ public void onError(Throwable throwable) {
getMvpView().hideProgressbar();
- getMvpView().showError(
+ showExceptionError(throwable,
context.getString(R.string.error_while_creating_loan));
}
})
diff --git a/app/src/main/java/org/apache/fineract/ui/online/loanaccounts/loanapplication/loancosigner/LoanCoSignerFragment.java b/app/src/main/java/org/apache/fineract/ui/online/loanaccounts/loanapplication/loancosigner/LoanCoSignerFragment.java
index 7fae6ba..bebe21c 100644
--- a/app/src/main/java/org/apache/fineract/ui/online/loanaccounts/loanapplication/loancosigner/LoanCoSignerFragment.java
+++ b/app/src/main/java/org/apache/fineract/ui/online/loanaccounts/loanapplication/loancosigner/LoanCoSignerFragment.java
@@ -119,6 +119,11 @@
}
@Override
+ public void showNoInternetConnection() {
+ Toaster.show(rootView, getString(R.string.no_internet_connection));
+ }
+
+ @Override
public void showError(String message) {
Toaster.show(rootView, getString(R.string.error_loading_customers));
}
diff --git a/app/src/main/java/org/apache/fineract/ui/online/loanaccounts/loanapplication/loancosigner/LoanCoSignerPresenter.java b/app/src/main/java/org/apache/fineract/ui/online/loanaccounts/loanapplication/loancosigner/LoanCoSignerPresenter.java
index 9196a3b..7d0ded2 100644
--- a/app/src/main/java/org/apache/fineract/ui/online/loanaccounts/loanapplication/loancosigner/LoanCoSignerPresenter.java
+++ b/app/src/main/java/org/apache/fineract/ui/online/loanaccounts/loanapplication/loancosigner/LoanCoSignerPresenter.java
@@ -69,9 +69,10 @@
}
@Override
- public void onError(Throwable e) {
+ public void onError(Throwable throwable) {
getMvpView().hideProgressbar();
- getMvpView().showError(context.getString(R.string.error_loading_customers));
+ showExceptionError(throwable,
+ context.getString(R.string.error_loading_customers));
}
@Override
diff --git a/app/src/main/java/org/apache/fineract/ui/online/loanaccounts/loanapplication/loandetails/LoanDetailsFragment.java b/app/src/main/java/org/apache/fineract/ui/online/loanaccounts/loanapplication/loandetails/LoanDetailsFragment.java
index 354cade..384df72 100644
--- a/app/src/main/java/org/apache/fineract/ui/online/loanaccounts/loanapplication/loandetails/LoanDetailsFragment.java
+++ b/app/src/main/java/org/apache/fineract/ui/online/loanaccounts/loanapplication/loandetails/LoanDetailsFragment.java
@@ -5,8 +5,8 @@
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
-import android.support.design.widget.CoordinatorLayout;
import android.support.design.widget.TextInputLayout;
+import android.support.v4.widget.NestedScrollView;
import android.support.v7.widget.AppCompatSpinner;
import android.text.Editable;
import android.text.TextWatcher;
@@ -54,8 +54,8 @@
public static final String LOG_TAG = LoanDetailsFragment.class.getSimpleName();
- @BindView(R.id.cl_loan_details)
- CoordinatorLayout clLoanDetails;
+ @BindView(R.id.ncv_loan_details)
+ NestedScrollView ncvLoanDetails;
@BindView(R.id.sp_products)
AppCompatSpinner spProducts;
@@ -120,6 +120,9 @@
@BindView(R.id.sp_repay_year_month)
AppCompatSpinner spRepayYearMonth;
+ @BindView(R.id.layout_error)
+ View layoutError;
+
View rootView;
@Inject
@@ -170,6 +173,7 @@
@Nullable Bundle savedInstanceState) {
rootView = inflater.inflate(R.layout.fragment_loan_details, container, false);
ButterKnife.bind(this, rootView);
+ initializeFineractUIErrorHandler(getActivity(), rootView);
loanDetailsPresenter.attachView(this);
showUserInterface();
@@ -179,6 +183,13 @@
return rootView;
}
+ @OnClick(R.id.btn_try_again)
+ void reloadProducts() {
+ layoutError.setVisibility(View.GONE);
+ ncvLoanDetails.setVisibility(View.GONE);
+ loanDetailsPresenter.fetchProducts();
+ }
+
@Override
public VerificationError verifyStep() {
if (!validateShortName() || !validateTerm() || !validateRepay()
@@ -322,7 +333,8 @@
@Override
public void showProducts(List<String> products) {
- clLoanDetails.setVisibility(View.VISIBLE);
+ ncvLoanDetails.setVisibility(View.VISIBLE);
+ layoutError.setVisibility(View.GONE);
this.products.addAll(products);
productsAdapter.notifyDataSetChanged();
}
@@ -342,6 +354,8 @@
@Override
public void showEmptyProducts() {
+ ncvLoanDetails.setVisibility(View.VISIBLE);
+ layoutError.setVisibility(View.GONE);
Toaster.show(rootView, getString(R.string.empty_create_loan_products), Toaster.INDEFINITE);
}
@@ -356,8 +370,17 @@
}
@Override
+ public void showNoInternetConnection() {
+ ncvLoanDetails.setVisibility(View.GONE);
+ layoutError.setVisibility(View.VISIBLE);
+ showFineractNoInternetUI();
+ }
+
+ @Override
public void showError(String message) {
- clLoanDetails.setVisibility(View.VISIBLE);
+ ncvLoanDetails.setVisibility(View.GONE);
+ layoutError.setVisibility(View.VISIBLE);
+ showFineractErrorUI(getString(R.string.products));
}
@Override
diff --git a/app/src/main/java/org/apache/fineract/ui/online/loanaccounts/loanapplication/loandetails/LoanDetailsPresenter.java b/app/src/main/java/org/apache/fineract/ui/online/loanaccounts/loanapplication/loandetails/LoanDetailsPresenter.java
index 44cfcc2..f293c20 100644
--- a/app/src/main/java/org/apache/fineract/ui/online/loanaccounts/loanapplication/loandetails/LoanDetailsPresenter.java
+++ b/app/src/main/java/org/apache/fineract/ui/online/loanaccounts/loanapplication/loandetails/LoanDetailsPresenter.java
@@ -79,9 +79,10 @@
}
@Override
- public void onError(Throwable e) {
+ public void onError(Throwable throwable) {
getMvpView().hideProgressbar();
- getMvpView().showError(context.getString(R.string.error_loading_products));
+ showExceptionError(throwable,
+ context.getString(R.string.error_loading_products));
}
@Override
diff --git a/app/src/main/java/org/apache/fineract/ui/online/loanaccounts/loandetails/CustomerLoanDetailsFragment.java b/app/src/main/java/org/apache/fineract/ui/online/loanaccounts/loandetails/CustomerLoanDetailsFragment.java
index f31cf7a..bd4f291 100644
--- a/app/src/main/java/org/apache/fineract/ui/online/loanaccounts/loandetails/CustomerLoanDetailsFragment.java
+++ b/app/src/main/java/org/apache/fineract/ui/online/loanaccounts/loandetails/CustomerLoanDetailsFragment.java
@@ -248,6 +248,13 @@
}
@Override
+ public void showNoInternetConnection() {
+ ncvCustomerLoanDetails.setVisibility(View.GONE);
+ layoutError.setVisibility(View.VISIBLE);
+ showFineractNoInternetUI();
+ }
+
+ @Override
public void showError(String message) {
ncvCustomerLoanDetails.setVisibility(View.GONE);
layoutError.setVisibility(View.VISIBLE);
diff --git a/app/src/main/java/org/apache/fineract/ui/online/loanaccounts/loandetails/CustomerLoanDetailsPresenter.java b/app/src/main/java/org/apache/fineract/ui/online/loanaccounts/loandetails/CustomerLoanDetailsPresenter.java
index c4bfcab..a24d421 100644
--- a/app/src/main/java/org/apache/fineract/ui/online/loanaccounts/loandetails/CustomerLoanDetailsPresenter.java
+++ b/app/src/main/java/org/apache/fineract/ui/online/loanaccounts/loandetails/CustomerLoanDetailsPresenter.java
@@ -62,9 +62,9 @@
}
@Override
- public void onError(Throwable e) {
+ public void onError(Throwable throwable) {
getMvpView().hideProgressbar();
- getMvpView().showError(
+ showExceptionError(throwable,
context.getString(R.string.error_loading_customer_loan_details));
}
diff --git a/app/src/main/java/org/apache/fineract/ui/online/loanaccounts/plannedpayment/PlannedPaymentContract.java b/app/src/main/java/org/apache/fineract/ui/online/loanaccounts/plannedpayment/PlannedPaymentContract.java
index 7645e0e..24e9318 100644
--- a/app/src/main/java/org/apache/fineract/ui/online/loanaccounts/plannedpayment/PlannedPaymentContract.java
+++ b/app/src/main/java/org/apache/fineract/ui/online/loanaccounts/plannedpayment/PlannedPaymentContract.java
@@ -14,6 +14,8 @@
interface View extends MvpView {
+ void fetchPlannedPayment();
+
void showUserInterface();
void showPlannedPayment(List<PlannedPayment> plannedPayments);
@@ -29,9 +31,6 @@
void hideProgressbar();
void showMessage(String message);
-
- void showError();
-
}
interface Presenter {
diff --git a/app/src/main/java/org/apache/fineract/ui/online/loanaccounts/plannedpayment/PlannedPaymentFragment.java b/app/src/main/java/org/apache/fineract/ui/online/loanaccounts/plannedpayment/PlannedPaymentFragment.java
index 5e75830..191df3c 100644
--- a/app/src/main/java/org/apache/fineract/ui/online/loanaccounts/plannedpayment/PlannedPaymentFragment.java
+++ b/app/src/main/java/org/apache/fineract/ui/online/loanaccounts/plannedpayment/PlannedPaymentFragment.java
@@ -12,7 +12,6 @@
import android.view.View;
import android.view.ViewGroup;
import android.widget.CalendarView;
-import android.widget.RelativeLayout;
import android.widget.TextView;
import org.apache.fineract.R;
@@ -57,11 +56,8 @@
@BindView(R.id.cv_planned_payment)
CardView cvCalenderPlannedPayment;
- @BindView(R.id.rl_error)
- RelativeLayout rlError;
-
- @BindView(R.id.tv_error)
- TextView tvError;
+ @BindView(R.id.layout_error)
+ View layoutError;
@BindView(R.id.tv_toolbar_date)
TextView tvToolbarDate;
@@ -107,17 +103,25 @@
rootView = inflater.inflate(R.layout.fragment_planned_payment, container, false);
((FineractBaseActivity) getActivity()).getActivityComponent().inject(this);
ButterKnife.bind(this, rootView);
+ initializeFineractUIErrorHandler(getActivity(), rootView);
plannedPaymentPresenter.attachView(this);
showUserInterface();
- plannedPaymentPresenter.fetchPlannedPayment(productIdentifier, caseIdentifier, 0,
- initialDisbursalDate, false);
+ fetchPlannedPayment();
return rootView;
}
@Override
+ public void fetchPlannedPayment() {
+ rvPlannedPayment.setVisibility(View.GONE);
+ layoutError.setVisibility(View.GONE);
+ plannedPaymentPresenter.fetchPlannedPayment(productIdentifier, caseIdentifier, 0,
+ initialDisbursalDate, false);
+ }
+
+ @Override
public void showUserInterface() {
//TODO fix null pointer exception in toolbar
if (toolbar != null) {
@@ -159,10 +163,9 @@
}
}
- @OnClick(R.id.iv_retry)
+ @OnClick(R.id.btn_try_again)
void onRetry() {
- plannedPaymentPresenter.fetchPlannedPayment(productIdentifier, caseIdentifier, 0,
- initialDisbursalDate, false);
+ fetchPlannedPayment();
}
@Override
@@ -205,18 +208,18 @@
@Override
public void showEmptyPayments(String message) {
showRecyclerView(false);
- tvError.setText(getString(R.string.empty_planned_payments));
- showMessage(getString(R.string.empty_planned_payments));
+ showFineractEmptyUI(getString(R.string.planned_payments),
+ getString(R.string.planned_payments), R.drawable.ic_payment_black_24dp);
}
@Override
public void showRecyclerView(boolean visible) {
if (visible) {
rvPlannedPayment.setVisibility(View.VISIBLE);
- rlError.setVisibility(View.GONE);
+ layoutError.setVisibility(View.GONE);
} else {
rvPlannedPayment.setVisibility(View.GONE);
- rlError.setVisibility(View.VISIBLE);
+ layoutError.setVisibility(View.VISIBLE);
}
}
@@ -236,10 +239,19 @@
}
@Override
- public void showError() {
+ public void showNoInternetConnection() {
showRecyclerView(false);
- tvError.setText(getString(R.string.error_loading_planned_payment));
- showMessage(getString(R.string.error_loading_planned_payment));
+ showFineractNoInternetUI();
+ }
+
+ @Override
+ public void showError(String message) {
+ if (plannedPaymentAdapter.getItemCount() != 0) {
+ showMessage(message);
+ } else {
+ showRecyclerView(false);
+ showFineractErrorUI(getString(R.string.planned_payments));
+ }
}
@Override
diff --git a/app/src/main/java/org/apache/fineract/ui/online/loanaccounts/plannedpayment/PlannedPaymentPresenter.java b/app/src/main/java/org/apache/fineract/ui/online/loanaccounts/plannedpayment/PlannedPaymentPresenter.java
index 85357da..1e7c2e9 100644
--- a/app/src/main/java/org/apache/fineract/ui/online/loanaccounts/plannedpayment/PlannedPaymentPresenter.java
+++ b/app/src/main/java/org/apache/fineract/ui/online/loanaccounts/plannedpayment/PlannedPaymentPresenter.java
@@ -6,6 +6,7 @@
import org.apache.fineract.data.datamanager.DataManagerIndividualLending;
import org.apache.fineract.data.models.payment.PlannedPayment;
import org.apache.fineract.data.models.payment.PlannedPaymentPage;
+import org.apache.fineract.exceptions.NoConnectivityException;
import org.apache.fineract.injection.ApplicationContext;
import org.apache.fineract.injection.ConfigPersistent;
import org.apache.fineract.ui.base.BasePresenter;
@@ -87,13 +88,17 @@
}
@Override
- public void onError(Throwable e) {
+ public void onError(Throwable throwable) {
getMvpView().hideProgressbar();
- if (loadmore) {
+ if (loadmore && !(throwable instanceof NoConnectivityException)) {
getMvpView().showMessage(
context.getString(R.string.error_loading_planned_payment));
+ } else if (loadmore && (throwable instanceof NoConnectivityException)) {
+ getMvpView().showMessage(
+ context.getString(R.string.no_internet_connection));
} else {
- getMvpView().showError();
+ showExceptionError(throwable,
+ context.getString(R.string.error_loading_planned_payment));
}
}
diff --git a/app/src/main/java/org/apache/fineract/ui/online/login/LoginActivity.java b/app/src/main/java/org/apache/fineract/ui/online/login/LoginActivity.java
index 84b39fc..9956991 100644
--- a/app/src/main/java/org/apache/fineract/ui/online/login/LoginActivity.java
+++ b/app/src/main/java/org/apache/fineract/ui/online/login/LoginActivity.java
@@ -10,6 +10,7 @@
import org.apache.fineract.data.local.PreferencesHelper;
import org.apache.fineract.data.models.Authentication;
import org.apache.fineract.ui.base.FineractBaseActivity;
+import org.apache.fineract.ui.base.Toaster;
import org.apache.fineract.ui.online.DashboardActivity;
import javax.inject.Inject;
@@ -88,6 +89,11 @@
}
@Override
+ public void showNoInternetConnection() {
+ Toaster.show(findViewById(android.R.id.content), R.string.no_internet_connection);
+ }
+
+ @Override
public void showError(String errorMessage) {
Toast.makeText(this, errorMessage, Toast.LENGTH_LONG).show();
}
diff --git a/app/src/main/java/org/apache/fineract/ui/online/login/LoginPresenter.java b/app/src/main/java/org/apache/fineract/ui/online/login/LoginPresenter.java
index e412876..5e5de54 100644
--- a/app/src/main/java/org/apache/fineract/ui/online/login/LoginPresenter.java
+++ b/app/src/main/java/org/apache/fineract/ui/online/login/LoginPresenter.java
@@ -9,6 +9,7 @@
import org.apache.fineract.data.datamanager.DataManagerAuth;
import org.apache.fineract.data.models.Authentication;
import org.apache.fineract.data.models.error.MifosError;
+import org.apache.fineract.exceptions.NoConnectivityException;
import org.apache.fineract.injection.ApplicationContext;
import org.apache.fineract.injection.ConfigPersistent;
import org.apache.fineract.ui.base.BasePresenter;
@@ -75,9 +76,8 @@
@Override
public void onError(Throwable throwable) {
getMvpView().hideProgressDialog();
- if (throwable instanceof IOException) {
- getMvpView().showError(
- context.getString(R.string.no_internet_connection));
+ if (throwable instanceof NoConnectivityException) {
+ getMvpView().showNoInternetConnection();
}
MifosError mifosError = new MifosError();
diff --git a/app/src/main/java/org/apache/fineract/ui/online/roles/roleslist/RolesFragment.java b/app/src/main/java/org/apache/fineract/ui/online/roles/roleslist/RolesFragment.java
index 9bfa22e..247d453 100644
--- a/app/src/main/java/org/apache/fineract/ui/online/roles/roleslist/RolesFragment.java
+++ b/app/src/main/java/org/apache/fineract/ui/online/roles/roleslist/RolesFragment.java
@@ -2,16 +2,12 @@
import android.os.Bundle;
import android.support.annotation.Nullable;
-import android.support.v4.content.ContextCompat;
import android.support.v4.widget.SwipeRefreshLayout;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
-import android.widget.ImageView;
-import android.widget.RelativeLayout;
-import android.widget.TextView;
import org.apache.fineract.R;
import org.apache.fineract.data.models.rolesandpermission.Role;
@@ -41,14 +37,8 @@
@BindView(R.id.swipe_container)
SwipeRefreshLayout swipeRefreshLayout;
- @BindView(R.id.rl_error)
- RelativeLayout rlError;
-
- @BindView(R.id.iv_retry)
- ImageView ivRetry;
-
- @BindView(R.id.tv_error)
- TextView tvError;
+ @BindView(R.id.layout_error)
+ View layoutError;
View rootView;
@@ -72,6 +62,7 @@
rootView = inflater.inflate(R.layout.fragment_roles_list, container, false);
((FineractBaseActivity) getActivity()).getActivityComponent().inject(this);
ButterKnife.bind(this, rootView);
+ initializeFineractUIErrorHandler(getActivity(), rootView);
rolesPresenter.attachView(this);
setToolbarTitle(getString(R.string.manage_roles));
@@ -91,9 +82,9 @@
rolesPresenter.fetchRoles();
}
- @OnClick(R.id.iv_retry)
+ @OnClick(R.id.btn_try_again)
void reloadRoles() {
- rlError.setVisibility(View.GONE);
+ layoutError.setVisibility(View.GONE);
rvRoles.setVisibility(View.GONE);
rolesPresenter.fetchRoles();
}
@@ -120,19 +111,18 @@
@Override
public void showEmptyRoles() {
showRecyclerView(false);
- tvError.setText(R.string.empty_roles);
- ivRetry.setImageDrawable(ContextCompat.getDrawable(getActivity(),
- R.drawable.ic_assignment_turned_in_black_24dp));
+ showFineractEmptyUI(getString(R.string.roles_and_permissions), getString(R.string.role),
+ R.drawable.ic_lock_black_24dp);
}
@Override
public void showRecyclerView(Boolean status) {
if (status) {
rvRoles.setVisibility(View.VISIBLE);
- rlError.setVisibility(View.GONE);
+ layoutError.setVisibility(View.GONE);
} else {
rvRoles.setVisibility(View.GONE);
- rlError.setVisibility(View.VISIBLE);
+ layoutError.setVisibility(View.VISIBLE);
}
}
@@ -147,9 +137,15 @@
}
@Override
+ public void showNoInternetConnection() {
+ showRecyclerView(false);
+ showFineractNoInternetUI();
+ }
+
+ @Override
public void showError(String message) {
showRecyclerView(false);
- tvError.setText(message);
+ showFineractErrorUI(getString(R.string.roles_and_permissions));
}
@Override
diff --git a/app/src/main/java/org/apache/fineract/ui/online/roles/roleslist/RolesPresenter.java b/app/src/main/java/org/apache/fineract/ui/online/roles/roleslist/RolesPresenter.java
index b24d86a..8afd1c0 100644
--- a/app/src/main/java/org/apache/fineract/ui/online/roles/roleslist/RolesPresenter.java
+++ b/app/src/main/java/org/apache/fineract/ui/online/roles/roleslist/RolesPresenter.java
@@ -56,9 +56,10 @@
}
@Override
- public void onError(Throwable e) {
+ public void onError(Throwable throwable) {
getMvpView().hideProgressbar();
- getMvpView().showError(context.getString(R.string.error_fetching_roles));
+ showExceptionError(throwable,
+ context.getString(R.string.error_fetching_roles));
}
@Override
diff --git a/app/src/main/java/org/apache/fineract/ui/uierrorhandler/FineractUIErrorHandler.java b/app/src/main/java/org/apache/fineract/ui/uierrorhandler/FineractUIErrorHandler.java
index 9f84055..0bf6eb6 100644
--- a/app/src/main/java/org/apache/fineract/ui/uierrorhandler/FineractUIErrorHandler.java
+++ b/app/src/main/java/org/apache/fineract/ui/uierrorhandler/FineractUIErrorHandler.java
@@ -19,6 +19,7 @@
public class FineractUIErrorHandler {
private ImageView ivEmptyFeatureImage;
+ private ImageView ivErrorNoInternet;
private TextView tvFeatureName;
private TextView tvSubFeatureName;
private Button btnTryAgain;
@@ -55,6 +56,7 @@
llErrorToLoad.setVisibility(View.VISIBLE);
btnTryAgain.setText(context.getString(R.string.try_again));
tvErrorFeatureName.setText(featureName);
+ ivErrorNoInternet.setImageResource(R.drawable.ic_cloud_off_black_24dp);
break;
case NO_INTERNET:
llEmptyUI.setVisibility(View.GONE);
@@ -62,6 +64,7 @@
llNoInternet.setVisibility(View.VISIBLE);
llErrorToLoad.setVisibility(View.VISIBLE);
btnTryAgain.setText(context.getString(R.string.retry));
+ ivErrorNoInternet.setImageResource(R.drawable.ic_portable_wifi_off_black_24dp);
break;
}
}
@@ -76,5 +79,6 @@
llError = ButterKnife.findById(view, R.id.ll_error);
btnTryAgain = ButterKnife.findById(view, R.id.btn_try_again);
tvErrorFeatureName = ButterKnife.findById(view, R.id.tv_error_feature_name);
+ ivErrorNoInternet = ButterKnife.findById(view, R.id.iv_error_no_connection);
}
}
diff --git a/app/src/main/java/org/apache/fineract/utils/MifosErrorUtils.java b/app/src/main/java/org/apache/fineract/utils/MifosErrorUtils.java
index f7343f6..fc50b06 100644
--- a/app/src/main/java/org/apache/fineract/utils/MifosErrorUtils.java
+++ b/app/src/main/java/org/apache/fineract/utils/MifosErrorUtils.java
@@ -32,6 +32,10 @@
return gson.fromJson(serverResponse, MifosError.class);
}
+ public static String getFineractError(Throwable throwable, String message) {
+ return message;
+ }
+
public static String getErrorMessage(Context context, Throwable throwable) {
MifosError mifosError = new MifosError();
Converter<ResponseBody, MifosError> errorConverter =
diff --git a/app/src/main/java/org/apache/fineract/utils/NetworkUtil.java b/app/src/main/java/org/apache/fineract/utils/NetworkUtil.java
new file mode 100644
index 0000000..ae5386a
--- /dev/null
+++ b/app/src/main/java/org/apache/fineract/utils/NetworkUtil.java
@@ -0,0 +1,110 @@
+package org.apache.fineract.utils;
+
+import android.content.Context;
+import android.net.ConnectivityManager;
+import android.net.NetworkInfo;
+import android.telephony.TelephonyManager;
+
+/**
+ * Check device's network connectivity and speed
+ *
+ * @author emil http://stackoverflow.com/users/220710/emil
+ */
+public class NetworkUtil {
+
+ /**
+ * Get the network info
+ */
+ public static NetworkInfo getNetworkInfo(Context context) {
+ ConnectivityManager cm = (ConnectivityManager)
+ context.getSystemService(Context.CONNECTIVITY_SERVICE);
+ return cm.getActiveNetworkInfo();
+ }
+
+ /**
+ * Check if there is any connectivity
+ */
+ public static boolean isConnected(Context context) {
+ NetworkInfo info = NetworkUtil.getNetworkInfo(context);
+ return (info != null && info.isConnected());
+ }
+
+ /**
+ * Check if there is any connectivity to a Wifi network
+ */
+ public static boolean isConnectedWifi(Context context) {
+ NetworkInfo info = NetworkUtil.getNetworkInfo(context);
+ return (info != null && info.isConnected()
+ && info.getType() == ConnectivityManager.TYPE_WIFI);
+ }
+
+ /**
+ * Check if there is any connectivity to a mobile network
+ */
+ public static boolean isConnectedMobile(Context context) {
+ NetworkInfo info = NetworkUtil.getNetworkInfo(context);
+ return (info != null && info.isConnected()
+ && info.getType() == ConnectivityManager.TYPE_MOBILE);
+ }
+
+ /**
+ * Check if there is fast connectivity
+ */
+ public static boolean isConnectedFast(Context context) {
+ NetworkInfo info = NetworkUtil.getNetworkInfo(context);
+ return (info != null && info.isConnected() &&
+ NetworkUtil.isConnectionFast(info.getType(), info.getSubtype()));
+ }
+
+ /**
+ * Check if the connection is fast
+ */
+ public static boolean isConnectionFast(int type, int subType) {
+ if (type == ConnectivityManager.TYPE_WIFI) {
+ return true;
+ } else if (type == ConnectivityManager.TYPE_MOBILE) {
+ switch (subType) {
+ case TelephonyManager.NETWORK_TYPE_1xRTT:
+ return false; // ~ 50-100 kbps
+ case TelephonyManager.NETWORK_TYPE_CDMA:
+ return false; // ~ 14-64 kbps
+ case TelephonyManager.NETWORK_TYPE_EDGE:
+ return false; // ~ 50-100 kbps
+ case TelephonyManager.NETWORK_TYPE_EVDO_0:
+ return true; // ~ 400-1000 kbps
+ case TelephonyManager.NETWORK_TYPE_EVDO_A:
+ return true; // ~ 600-1400 kbps
+ case TelephonyManager.NETWORK_TYPE_GPRS:
+ return false; // ~ 100 kbps
+ case TelephonyManager.NETWORK_TYPE_HSDPA:
+ return true; // ~ 2-14 Mbps
+ case TelephonyManager.NETWORK_TYPE_HSPA:
+ return true; // ~ 700-1700 kbps
+ case TelephonyManager.NETWORK_TYPE_HSUPA:
+ return true; // ~ 1-23 Mbps
+ case TelephonyManager.NETWORK_TYPE_UMTS:
+ return true; // ~ 400-7000 kbps
+ /*
+ * Above API level 7, make sure to set android:targetSdkVersion
+ * to appropriate level to use these
+ */
+ case TelephonyManager.NETWORK_TYPE_EHRPD: // API level 11
+ return true; // ~ 1-2 Mbps
+ case TelephonyManager.NETWORK_TYPE_EVDO_B: // API level 9
+ return true; // ~ 5 Mbps
+ case TelephonyManager.NETWORK_TYPE_HSPAP: // API level 13
+ return true; // ~ 10-20 Mbps
+ case TelephonyManager.NETWORK_TYPE_IDEN: // API level 8
+ return false; // ~25 kbps
+ case TelephonyManager.NETWORK_TYPE_LTE: // API level 11
+ return true; // ~ 10+ Mbps
+ // Unknown
+ case TelephonyManager.NETWORK_TYPE_UNKNOWN:
+ default:
+ return false;
+ }
+ } else {
+ return false;
+ }
+ }
+}
diff --git a/app/src/main/res/layout/fragment_customer_activities.xml b/app/src/main/res/layout/fragment_customer_activities.xml
index bb3d494..3e328d8 100644
--- a/app/src/main/res/layout/fragment_customer_activities.xml
+++ b/app/src/main/res/layout/fragment_customer_activities.xml
@@ -19,8 +19,8 @@
</android.support.v4.widget.SwipeRefreshLayout>
<include
- layout="@layout/layout_error"
- android:id="@+id/rl_error"
+ layout="@layout/layout_exception_handler"
+ android:id="@+id/layout_error"
android:visibility="gone"/>
</android.support.design.widget.CoordinatorLayout>
\ No newline at end of file
diff --git a/app/src/main/res/layout/fragment_customer_deposit_details.xml b/app/src/main/res/layout/fragment_customer_deposit_details.xml
index 9ed7459..c47a1b3 100644
--- a/app/src/main/res/layout/fragment_customer_deposit_details.xml
+++ b/app/src/main/res/layout/fragment_customer_deposit_details.xml
@@ -212,12 +212,13 @@
</android.support.v7.widget.CardView>
<include
- layout="@layout/layout_error"
- android:id="@+id/rl_error"
+ layout="@layout/layout_exception_handler"
+ android:id="@+id/layout_error"
android:visibility="gone"/>
<android.support.design.widget.FloatingActionButton
android:clickable="true"
+ android:focusable="true"
android:id="@+id/fab_edit_deposit_account"
android:layout_gravity="bottom|end"
android:layout_height="wrap_content"
diff --git a/app/src/main/res/layout/fragment_customer_details.xml b/app/src/main/res/layout/fragment_customer_details.xml
index ceb7735..f86dc14 100644
--- a/app/src/main/res/layout/fragment_customer_details.xml
+++ b/app/src/main/res/layout/fragment_customer_details.xml
@@ -1,667 +1,673 @@
<?xml version="1.0" encoding="utf-8"?>
<android.support.design.widget.CoordinatorLayout
- android:id="@+id/cl_customer_details"
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
- android:fitsSystemWindows="true"
android:layout_height="match_parent"
android:layout_width="match_parent"
android:visibility="visible">
- <android.support.design.widget.AppBarLayout
- android:fitsSystemWindows="true"
- android:id="@+id/app_bar_layout"
- android:layout_height="@dimen/detail_backdrop_height"
- android:layout_width="match_parent"
- android:theme="@style/AppTheme.AppBarOverlay">
-
- <android.support.design.widget.CollapsingToolbarLayout
- android:clickable="true"
- android:focusable="true"
- android:fitsSystemWindows="true"
- android:foreground="?android:attr/selectableItemBackground"
- android:id="@+id/collapsing_toolbar"
- android:layout_height="match_parent"
- android:layout_width="match_parent"
- app:contentScrim="?attr/colorPrimary"
- app:layout_scrollFlags="scroll|exitUntilCollapsed">
-
- <ImageView
- android:contentDescription="@string/customer_image"
- android:fitsSystemWindows="true"
- android:id="@+id/iv_customer_profile"
- android:layout_height="match_parent"
- android:layout_width="match_parent"
- android:scaleType="fitCenter"
- android:src="@drawable/mifos_logo_new"
- app:layout_collapseMode="parallax"/>
-
- <android.support.v7.widget.Toolbar
- android:id="@+id/toolbar"
- android:layout_height="?attr/actionBarSize"
- android:layout_width="match_parent"
- app:layout_collapseMode="pin">
-
- <include
- layout="@layout/layout_collapsing_header_view"
- android:id="@+id/toolbar_header_view"
- android:layout_height="wrap_content"
- android:layout_marginEnd="@dimen/header_view_end_margin_right"
- android:layout_marginRight="@dimen/header_view_end_margin_right"
- android:layout_width="match_parent"
- android:visibility="gone"/>
-
- </android.support.v7.widget.Toolbar>
-
- </android.support.design.widget.CollapsingToolbarLayout>
-
- </android.support.design.widget.AppBarLayout>
-
- <android.support.v4.widget.NestedScrollView
- xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:app="http://schemas.android.com/apk/res-auto"
- android:background="@color/gray_light"
- android:id="@+id/ncv_customer_details"
+ <android.support.design.widget.CoordinatorLayout
+ android:id="@+id/cl_customer_details"
android:layout_height="match_parent"
- android:layout_width="match_parent"
- app:layout_behavior="@string/appbar_scrolling_view_behavior">
+ android:layout_width="match_parent">
- <LinearLayout
- android:layout_height="match_parent"
+ <android.support.design.widget.AppBarLayout
+ android:fitsSystemWindows="true"
+ android:id="@+id/app_bar_layout"
+ android:layout_height="@dimen/detail_backdrop_height"
android:layout_width="match_parent"
- android:orientation="vertical">
+ android:theme="@style/AppTheme.AppBarOverlay">
- <android.support.v7.widget.CardView
- xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:app="http://schemas.android.com/apk/res-auto"
- android:background="@color/white"
+ <android.support.design.widget.CollapsingToolbarLayout
android:clickable="true"
+ android:fitsSystemWindows="true"
+ android:focusable="true"
android:foreground="?android:attr/selectableItemBackground"
- android:id="@+id/cv_customer"
+ android:id="@+id/collapsing_toolbar"
android:layout_height="match_parent"
android:layout_width="match_parent"
- android:visibility="visible">
+ app:contentScrim="?attr/colorPrimary"
+ app:layout_scrollFlags="scroll|exitUntilCollapsed">
- <LinearLayout
+ <ImageView
+ android:contentDescription="@string/customer_image"
+ android:fitsSystemWindows="true"
+ android:id="@+id/iv_customer_profile"
android:layout_height="match_parent"
android:layout_width="match_parent"
- android:orientation="vertical"
- android:padding="16dp">
+ android:scaleType="fitCenter"
+ android:src="@drawable/mifos_logo_new"
+ app:layout_collapseMode="parallax"/>
+
+ <android.support.v7.widget.Toolbar
+ android:id="@+id/toolbar"
+ android:layout_height="?attr/actionBarSize"
+ android:layout_width="match_parent"
+ app:layout_collapseMode="pin">
+
+ <include
+ layout="@layout/layout_collapsing_header_view"
+ android:id="@+id/toolbar_header_view"
+ android:layout_height="wrap_content"
+ android:layout_marginEnd="@dimen/header_view_end_margin_right"
+ android:layout_marginRight="@dimen/header_view_end_margin_right"
+ android:layout_width="match_parent"
+ android:visibility="gone"/>
+
+ </android.support.v7.widget.Toolbar>
+
+ </android.support.design.widget.CollapsingToolbarLayout>
+
+ </android.support.design.widget.AppBarLayout>
+
+ <android.support.v4.widget.NestedScrollView
+ xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:app="http://schemas.android.com/apk/res-auto"
+ android:background="@color/gray_light"
+ android:id="@+id/ncv_customer_details"
+ android:layout_height="match_parent"
+ android:layout_width="match_parent"
+ app:layout_behavior="@string/appbar_scrolling_view_behavior">
+
+ <LinearLayout
+ android:layout_height="match_parent"
+ android:layout_width="match_parent"
+ android:orientation="vertical">
+
+ <android.support.v7.widget.CardView
+ xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:app="http://schemas.android.com/apk/res-auto"
+ android:background="@color/white"
+ android:clickable="true"
+ android:foreground="?android:attr/selectableItemBackground"
+ android:id="@+id/cv_customer"
+ android:layout_height="match_parent"
+ android:layout_width="match_parent"
+ android:visibility="visible">
<LinearLayout
- android:id="@+id/ll_current_status"
+ android:layout_height="match_parent"
+ android:layout_width="match_parent"
+ android:orientation="vertical"
+ android:padding="16dp">
+
+ <LinearLayout
+ android:id="@+id/ll_current_status"
+ android:layout_height="match_parent"
+ android:layout_width="match_parent"
+ android:orientation="vertical">
+
+ <TextView
+ android:layout_height="wrap_content"
+ android:layout_width="wrap_content"
+ android:text="@string/current_status"
+ android:textColor="@color/colorSecondaryText"
+ android:textSize="@dimen/text_size_12sp"/>
+
+ <LinearLayout
+ android:layout_height="match_parent"
+ android:layout_width="wrap_content"
+ android:orientation="horizontal"
+ android:paddingTop="@dimen/layout_padding_4dp">
+
+ <LinearLayout
+ style="@style/circleLayout"
+ android:gravity="center"
+ android:id="@+id/ll_task1"
+ android:layout_height="35dp"
+ android:layout_width="35dp">
+
+ <ImageView
+ android:id="@+id/iv_current_status"
+ android:layout_height="wrap_content"
+ android:layout_width="wrap_content"
+ app:srcCompat="@drawable/ic_check_circle_black_24dp"/>
+
+ </LinearLayout>
+
+ <TextView
+ android:id="@+id/tv_current_status"
+ android:layout_gravity="center"
+ android:layout_height="wrap_content"
+ android:layout_width="wrap_content"
+ android:paddingEnd="0dp"
+ android:paddingLeft="@dimen/layout_padding_8dp"
+ android:paddingRight="0dp"
+ android:paddingStart="@dimen/layout_padding_8dp"
+ tools:text="Active"/>
+
+ </LinearLayout>
+
+ </LinearLayout>
+
+ <LinearLayout
+ android:id="@+id/ll_address"
+ android:layout_height="match_parent"
+ android:layout_width="match_parent"
+ android:orientation="vertical"
+ android:paddingTop="@dimen/layout_padding_16dp">
+
+ <TextView
+ android:layout_height="wrap_content"
+ android:layout_width="wrap_content"
+ android:text="@string/address"
+ android:textColor="@color/colorSecondaryText"
+ android:textSize="@dimen/text_size_12sp"/>
+
+ <RelativeLayout
+ android:layout_height="match_parent"
+ android:layout_width="match_parent"
+ android:orientation="horizontal"
+ android:paddingTop="@dimen/layout_padding_4dp">
+
+ <ImageView
+ style="@style/circleLayout"
+ android:id="@+id/iv_address"
+ android:layout_height="35dp"
+ android:layout_width="35dp"
+ app:srcCompat="@drawable/ic_place_black_24dp"/>
+
+ <TextView
+ android:foregroundGravity="center"
+ android:id="@+id/tv_address"
+ android:isScrollContainer="false"
+ android:layout_centerInParent="true"
+ android:layout_height="match_parent"
+ android:layout_toEndOf="@+id/iv_address"
+ android:layout_toRightOf="@+id/iv_address"
+ android:layout_width="match_parent"
+ android:paddingEnd="0dp"
+ android:paddingLeft="@dimen/layout_padding_8dp"
+ android:paddingRight="0dp"
+ android:paddingStart="@dimen/layout_padding_8dp"
+ tools:text="Lärchen,Lärchenhof 7, Nickenich,"/>
+
+ </RelativeLayout>
+
+ </LinearLayout>
+
+ <LinearLayout
+ android:id="@+id/ll_contact_info"
+ android:layout_height="match_parent"
+ android:layout_width="match_parent"
+ android:orientation="vertical"
+ android:paddingTop="@dimen/layout_padding_16dp">
+
+ <TextView
+ android:layout_height="wrap_content"
+ android:layout_width="wrap_content"
+ android:text="@string/contact_information"
+ android:textColor="@color/colorSecondaryText"
+ android:textSize="@dimen/text_size_12sp"/>
+
+ <TextView
+ android:id="@+id/tv_no_contact_details_available"
+ android:layout_height="wrap_content"
+ android:layout_width="wrap_content"
+ android:paddingBottom="@dimen/layout_padding_4dp"
+ android:paddingTop="@dimen/layout_padding_4dp"
+ android:text="@string/no_contact_details_available"
+ android:visibility="gone"/>
+
+ <RelativeLayout
+ android:id="@+id/rl_email"
+ android:layout_height="match_parent"
+ android:layout_width="match_parent"
+ android:orientation="horizontal"
+ android:paddingTop="@dimen/layout_padding_4dp"
+ android:visibility="gone">
+
+ <ImageView
+ style="@style/circleLayout"
+ android:id="@+id/iv_email"
+ android:layout_height="35dp"
+ android:layout_width="35dp"
+ app:srcCompat="@drawable/ic_email_black_24dp"/>
+
+ <TextView
+ android:foregroundGravity="center"
+ android:id="@+id/tv_email"
+ android:isScrollContainer="false"
+ android:layout_centerInParent="true"
+ android:layout_height="match_parent"
+ android:layout_toEndOf="@+id/iv_email"
+ android:layout_toRightOf="@+id/iv_email"
+ android:layout_width="match_parent"
+ android:paddingEnd="0dp"
+ android:paddingLeft="@dimen/layout_padding_8dp"
+ android:paddingRight="0dp"
+ android:paddingStart="@dimen/layout_padding_8dp"
+ tools:text="example@gmail.com"/>
+
+ </RelativeLayout>
+
+ <RelativeLayout
+ android:id="@+id/rl_phone_no"
+ android:layout_height="match_parent"
+ android:layout_width="match_parent"
+ android:orientation="horizontal"
+ android:paddingTop="@dimen/layout_padding_4dp"
+ android:visibility="gone">
+
+ <ImageView
+ style="@style/circleLayout"
+ android:id="@+id/iv_phone_no"
+ android:layout_height="35dp"
+ android:layout_width="35dp"
+ app:srcCompat="@drawable/ic_phone_black_24dp"/>
+
+ <TextView
+ android:foregroundGravity="center"
+ android:id="@+id/tv_phone_no"
+ android:isScrollContainer="false"
+ android:layout_centerInParent="true"
+ android:layout_height="match_parent"
+ android:layout_toEndOf="@+id/iv_phone_no"
+ android:layout_toRightOf="@+id/iv_phone_no"
+ android:layout_width="match_parent"
+ android:paddingEnd="0dp"
+ android:paddingLeft="@dimen/layout_padding_8dp"
+ android:paddingRight="0dp"
+ android:paddingStart="@dimen/layout_padding_8dp"
+ tools:text="PrefixOperator - NoTelp"/>
+
+ </RelativeLayout>
+
+ <RelativeLayout
+ android:id="@+id/rl_mobile_no"
+ android:layout_height="match_parent"
+ android:layout_width="match_parent"
+ android:orientation="horizontal"
+ android:paddingTop="@dimen/layout_padding_4dp"
+ android:visibility="gone">
+
+ <ImageView
+ style="@style/circleLayout"
+ android:id="@+id/iv_mobile_no"
+ android:layout_height="35dp"
+ android:layout_width="35dp"
+ app:srcCompat="@drawable/ic_smartphone_black_24dp"/>
+
+ <TextView
+ android:foregroundGravity="center"
+ android:id="@+id/tv_mobile_no"
+ android:isScrollContainer="false"
+ android:layout_centerInParent="true"
+ android:layout_height="match_parent"
+ android:layout_toEndOf="@+id/iv_mobile_no"
+ android:layout_toRightOf="@+id/iv_mobile_no"
+ android:layout_width="match_parent"
+ android:paddingEnd="0dp"
+ android:paddingLeft="@dimen/layout_padding_8dp"
+ android:paddingRight="0dp"
+ android:paddingStart="@dimen/layout_padding_8dp"
+ tools:text="KodeArea - Notelp"/>
+
+ </RelativeLayout>
+
+ </LinearLayout>
+
+ <LinearLayout
+ android:id="@+id/ll_birthday"
+ android:layout_height="match_parent"
+ android:layout_width="match_parent"
+ android:orientation="vertical"
+ android:paddingTop="@dimen/layout_padding_16dp">
+
+ <TextView
+ android:layout_height="wrap_content"
+ android:layout_width="wrap_content"
+ android:text="@string/birthday"
+ android:textColor="@color/colorSecondaryText"
+ android:textSize="@dimen/text_size_12sp"/>
+
+ <RelativeLayout
+ android:layout_height="match_parent"
+ android:layout_width="match_parent"
+ android:orientation="horizontal"
+ android:paddingTop="@dimen/layout_padding_4dp">
+
+ <ImageView
+ style="@style/circleLayout"
+ android:id="@+id/iv_birthday"
+ android:layout_height="35dp"
+ android:layout_width="35dp"
+ app:srcCompat="@drawable/ic_cake_black_24dp"/>
+
+ <TextView
+ android:foregroundGravity="center"
+ android:id="@+id/tv_birthday"
+ android:isScrollContainer="false"
+ android:layout_centerInParent="true"
+ android:layout_height="match_parent"
+ android:layout_toEndOf="@+id/iv_birthday"
+ android:layout_toRightOf="@+id/iv_birthday"
+ android:layout_width="match_parent"
+ android:paddingEnd="0dp"
+ android:paddingLeft="@dimen/layout_padding_8dp"
+ android:paddingRight="0dp"
+ android:paddingStart="@dimen/layout_padding_8dp"
+ tools:text="1974-7-18"/>
+
+ </RelativeLayout>
+
+ </LinearLayout>
+
+ </LinearLayout>
+
+ </android.support.v7.widget.CardView>
+
+ <TextView
+ android:layout_height="match_parent"
+ android:layout_width="match_parent"
+ android:paddingBottom="@dimen/layout_padding_8dp"
+ android:paddingEnd="0dp"
+ android:paddingLeft="@dimen/layout_padding_8dp"
+ android:paddingRight="0dp"
+ android:paddingStart="@dimen/layout_padding_8dp"
+ android:paddingTop="@dimen/layout_padding_16dp"
+ android:text="@string/financial_products"/>
+
+ <android.support.v7.widget.CardView
+ xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:app="http://schemas.android.com/apk/res-auto"
+ android:background="@color/white"
+ android:id="@+id/cv_financial_products"
+ android:layout_height="match_parent"
+ android:layout_width="match_parent"
+ android:visibility="visible">
+
+ <LinearLayout
android:layout_height="match_parent"
android:layout_width="match_parent"
android:orientation="vertical">
- <TextView
- android:layout_height="wrap_content"
- android:layout_width="wrap_content"
- android:text="@string/current_status"
- android:textColor="@color/colorSecondaryText"
- android:textSize="@dimen/text_size_12sp"/>
-
<LinearLayout
+ android:clickable="true"
+ android:foreground="?android:attr/selectableItemBackground"
+ android:id="@+id/ll_loan_accounts"
android:layout_height="match_parent"
- android:layout_width="wrap_content"
+ android:layout_width="match_parent"
android:orientation="horizontal"
- android:paddingTop="@dimen/layout_padding_4dp">
+ android:padding="16dp">
<LinearLayout
- style="@style/circleLayout"
- android:gravity="center"
- android:id="@+id/ll_task1"
- android:layout_height="35dp"
- android:layout_width="35dp">
+ android:layout_height="wrap_content"
+ android:layout_width="wrap_content"
+ android:orientation="horizontal">
<ImageView
- android:id="@+id/iv_current_status"
+ style="@style/circleLayout"
+ android:layout_height="35dp"
+ android:layout_width="35dp"
+ app:srcCompat="@drawable/ic_payment_black_24dp"/>
+
+ <LinearLayout
android:layout_height="wrap_content"
+ android:layout_marginLeft="@dimen/layout_padding_8dp"
+ android:layout_marginStart="@dimen/layout_padding_8dp"
android:layout_width="wrap_content"
- app:srcCompat="@drawable/ic_check_circle_black_24dp"/>
+ android:orientation="vertical">
+
+ <TextView
+ android:layout_height="wrap_content"
+ android:layout_width="wrap_content"
+ android:text="@string/loan_accounts"/>
+
+ <TextView
+ android:layout_height="match_parent"
+ android:layout_width="wrap_content"
+ android:text="@string/manage_loan_accounts"
+ android:textSize="@dimen/text_size_12sp"/>
+
+ </LinearLayout>
</LinearLayout>
- <TextView
- android:id="@+id/tv_current_status"
- android:layout_gravity="center"
+
+ </LinearLayout>
+
+ <LinearLayout
+ android:clickable="true"
+ android:foreground="?android:attr/selectableItemBackground"
+ android:id="@+id/ll_deposit_accounts"
+ android:layout_height="match_parent"
+ android:layout_width="match_parent"
+ android:orientation="horizontal"
+ android:padding="16dp">
+
+ <LinearLayout
android:layout_height="wrap_content"
android:layout_width="wrap_content"
- android:paddingEnd="0dp"
- android:paddingLeft="@dimen/layout_padding_8dp"
- android:paddingRight="0dp"
- android:paddingStart="@dimen/layout_padding_8dp"
- tools:text="Active"/>
+ android:orientation="horizontal">
+
+ <ImageView
+ style="@style/circleLayout"
+ android:layout_height="35dp"
+ android:layout_width="35dp"
+ app:srcCompat="@drawable/ic_attach_money_black_24dp"/>
+
+ <LinearLayout
+ android:layout_height="wrap_content"
+ android:layout_marginLeft="@dimen/layout_padding_8dp"
+ android:layout_marginStart="@dimen/layout_padding_8dp"
+ android:layout_width="match_parent"
+ android:orientation="vertical">
+
+ <TextView
+ android:layout_height="wrap_content"
+ android:layout_width="wrap_content"
+ android:text="@string/deposit_accounts"/>
+
+ <TextView
+ android:layout_height="match_parent"
+ android:layout_width="wrap_content"
+ android:text="@string/manage_deposit_accounts"
+ android:textSize="@dimen/text_size_12sp"/>
+
+ </LinearLayout>
+
+ </LinearLayout>
</LinearLayout>
</LinearLayout>
- <LinearLayout
- android:id="@+id/ll_address"
- android:layout_height="match_parent"
- android:layout_width="match_parent"
- android:orientation="vertical"
- android:paddingTop="@dimen/layout_padding_16dp">
+ </android.support.v7.widget.CardView>
- <TextView
- android:layout_height="wrap_content"
- android:layout_width="wrap_content"
- android:text="@string/address"
- android:textColor="@color/colorSecondaryText"
- android:textSize="@dimen/text_size_12sp"/>
-
- <RelativeLayout
- android:layout_height="match_parent"
- android:layout_width="match_parent"
- android:orientation="horizontal"
- android:paddingTop="@dimen/layout_padding_4dp">
-
- <ImageView
- style="@style/circleLayout"
- android:id="@+id/iv_address"
- android:layout_height="35dp"
- android:layout_width="35dp"
- app:srcCompat="@drawable/ic_place_black_24dp"/>
-
- <TextView
- android:foregroundGravity="center"
- android:id="@+id/tv_address"
- android:isScrollContainer="false"
- android:layout_centerInParent="true"
- android:layout_height="match_parent"
- android:layout_toEndOf="@+id/iv_address"
- android:layout_toRightOf="@+id/iv_address"
- android:layout_width="match_parent"
- android:paddingEnd="0dp"
- android:paddingLeft="@dimen/layout_padding_8dp"
- android:paddingRight="0dp"
- android:paddingStart="@dimen/layout_padding_8dp"
- tools:text="Lärchen,Lärchenhof 7, Nickenich,"/>
-
- </RelativeLayout>
-
- </LinearLayout>
-
- <LinearLayout
- android:id="@+id/ll_contact_info"
- android:layout_height="match_parent"
- android:layout_width="match_parent"
- android:orientation="vertical"
- android:paddingTop="@dimen/layout_padding_16dp">
-
- <TextView
- android:layout_height="wrap_content"
- android:layout_width="wrap_content"
- android:text="@string/contact_information"
- android:textColor="@color/colorSecondaryText"
- android:textSize="@dimen/text_size_12sp"/>
-
- <TextView
- android:id="@+id/tv_no_contact_details_available"
- android:layout_height="wrap_content"
- android:layout_width="wrap_content"
- android:paddingBottom="@dimen/layout_padding_4dp"
- android:paddingTop="@dimen/layout_padding_4dp"
- android:text="@string/no_contact_details_available"
- android:visibility="gone"/>
-
- <RelativeLayout
- android:id="@+id/rl_email"
- android:layout_height="match_parent"
- android:layout_width="match_parent"
- android:orientation="horizontal"
- android:paddingTop="@dimen/layout_padding_4dp"
- android:visibility="gone">
-
- <ImageView
- style="@style/circleLayout"
- android:id="@+id/iv_email"
- android:layout_height="35dp"
- android:layout_width="35dp"
- app:srcCompat="@drawable/ic_email_black_24dp"/>
-
- <TextView
- android:foregroundGravity="center"
- android:id="@+id/tv_email"
- android:isScrollContainer="false"
- android:layout_centerInParent="true"
- android:layout_height="match_parent"
- android:layout_toEndOf="@+id/iv_email"
- android:layout_toRightOf="@+id/iv_email"
- android:layout_width="match_parent"
- android:paddingEnd="0dp"
- android:paddingLeft="@dimen/layout_padding_8dp"
- android:paddingRight="0dp"
- android:paddingStart="@dimen/layout_padding_8dp"
- tools:text="example@gmail.com"/>
-
- </RelativeLayout>
-
- <RelativeLayout
- android:id="@+id/rl_phone_no"
- android:layout_height="match_parent"
- android:layout_width="match_parent"
- android:orientation="horizontal"
- android:paddingTop="@dimen/layout_padding_4dp"
- android:visibility="gone">
-
- <ImageView
- style="@style/circleLayout"
- android:id="@+id/iv_phone_no"
- android:layout_height="35dp"
- android:layout_width="35dp"
- app:srcCompat="@drawable/ic_phone_black_24dp"/>
-
- <TextView
- android:foregroundGravity="center"
- android:id="@+id/tv_phone_no"
- android:isScrollContainer="false"
- android:layout_centerInParent="true"
- android:layout_height="match_parent"
- android:layout_toEndOf="@+id/iv_phone_no"
- android:layout_toRightOf="@+id/iv_phone_no"
- android:layout_width="match_parent"
- android:paddingEnd="0dp"
- android:paddingLeft="@dimen/layout_padding_8dp"
- android:paddingRight="0dp"
- android:paddingStart="@dimen/layout_padding_8dp"
- tools:text="PrefixOperator - NoTelp"/>
-
- </RelativeLayout>
-
- <RelativeLayout
- android:id="@+id/rl_mobile_no"
- android:layout_height="match_parent"
- android:layout_width="match_parent"
- android:orientation="horizontal"
- android:paddingTop="@dimen/layout_padding_4dp"
- android:visibility="gone">
-
- <ImageView
- style="@style/circleLayout"
- android:id="@+id/iv_mobile_no"
- android:layout_height="35dp"
- android:layout_width="35dp"
- app:srcCompat="@drawable/ic_smartphone_black_24dp"/>
-
- <TextView
- android:foregroundGravity="center"
- android:id="@+id/tv_mobile_no"
- android:isScrollContainer="false"
- android:layout_centerInParent="true"
- android:layout_height="match_parent"
- android:layout_toEndOf="@+id/iv_mobile_no"
- android:layout_toRightOf="@+id/iv_mobile_no"
- android:layout_width="match_parent"
- android:paddingEnd="0dp"
- android:paddingLeft="@dimen/layout_padding_8dp"
- android:paddingRight="0dp"
- android:paddingStart="@dimen/layout_padding_8dp"
- tools:text="KodeArea - Notelp"/>
-
- </RelativeLayout>
-
- </LinearLayout>
-
- <LinearLayout
- android:id="@+id/ll_birthday"
- android:layout_height="match_parent"
- android:layout_width="match_parent"
- android:orientation="vertical"
- android:paddingTop="@dimen/layout_padding_16dp">
-
- <TextView
- android:layout_height="wrap_content"
- android:layout_width="wrap_content"
- android:text="@string/birthday"
- android:textColor="@color/colorSecondaryText"
- android:textSize="@dimen/text_size_12sp"/>
-
- <RelativeLayout
- android:layout_height="match_parent"
- android:layout_width="match_parent"
- android:orientation="horizontal"
- android:paddingTop="@dimen/layout_padding_4dp">
-
- <ImageView
- style="@style/circleLayout"
- android:id="@+id/iv_birthday"
- android:layout_height="35dp"
- android:layout_width="35dp"
- app:srcCompat="@drawable/ic_cake_black_24dp"/>
-
- <TextView
- android:foregroundGravity="center"
- android:id="@+id/tv_birthday"
- android:isScrollContainer="false"
- android:layout_centerInParent="true"
- android:layout_height="match_parent"
- android:layout_toEndOf="@+id/iv_birthday"
- android:layout_toRightOf="@+id/iv_birthday"
- android:layout_width="match_parent"
- android:paddingEnd="0dp"
- android:paddingLeft="@dimen/layout_padding_8dp"
- android:paddingRight="0dp"
- android:paddingStart="@dimen/layout_padding_8dp"
- tools:text="1974-7-18"/>
-
- </RelativeLayout>
-
- </LinearLayout>
-
- </LinearLayout>
-
- </android.support.v7.widget.CardView>
-
- <TextView
- android:layout_height="match_parent"
- android:layout_width="match_parent"
- android:paddingBottom="@dimen/layout_padding_8dp"
- android:paddingEnd="0dp"
- android:paddingLeft="@dimen/layout_padding_8dp"
- android:paddingRight="0dp"
- android:paddingStart="@dimen/layout_padding_8dp"
- android:paddingTop="@dimen/layout_padding_16dp"
- android:text="@string/financial_products"/>
-
- <android.support.v7.widget.CardView
- xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:app="http://schemas.android.com/apk/res-auto"
- android:background="@color/white"
- android:id="@+id/cv_financial_products"
- android:layout_height="match_parent"
- android:layout_width="match_parent"
- android:visibility="visible">
-
- <LinearLayout
+ <TextView
android:layout_height="match_parent"
android:layout_width="match_parent"
- android:orientation="vertical">
+ android:paddingBottom="@dimen/layout_padding_8dp"
+ android:paddingEnd="0dp"
+ android:paddingLeft="@dimen/layout_padding_8dp"
+ android:paddingRight="0dp"
+ android:paddingStart="@dimen/layout_padding_8dp"
+ android:paddingTop="@dimen/layout_padding_16dp"
+ android:text="@string/management"/>
+
+ <android.support.v7.widget.CardView
+ xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:app="http://schemas.android.com/apk/res-auto"
+ android:background="@color/white"
+ android:id="@+id/cv_management"
+ android:layout_height="match_parent"
+ android:layout_width="match_parent">
<LinearLayout
- android:clickable="true"
- android:foreground="?android:attr/selectableItemBackground"
- android:id="@+id/ll_loan_accounts"
android:layout_height="match_parent"
android:layout_width="match_parent"
- android:orientation="horizontal"
- android:padding="16dp">
+ android:orientation="vertical">
<LinearLayout
- android:layout_height="wrap_content"
- android:layout_width="wrap_content"
- android:orientation="horizontal">
-
- <ImageView
- style="@style/circleLayout"
- android:layout_height="35dp"
- android:layout_width="35dp"
- app:srcCompat="@drawable/ic_payment_black_24dp"/>
+ android:clickable="true"
+ android:foreground="?android:attr/selectableItemBackground"
+ android:id="@+id/ll_identifier_cards"
+ android:layout_height="match_parent"
+ android:layout_width="match_parent"
+ android:orientation="horizontal"
+ android:padding="16dp">
<LinearLayout
android:layout_height="wrap_content"
- android:layout_marginLeft="@dimen/layout_padding_8dp"
- android:layout_marginStart="@dimen/layout_padding_8dp"
android:layout_width="wrap_content"
- android:orientation="vertical">
+ android:orientation="horizontal">
- <TextView
+ <ImageView
+ style="@style/circleLayout"
+ android:layout_height="35dp"
+ android:layout_width="35dp"
+ app:srcCompat="@drawable/ic_person_outline_black_24dp"/>
+
+
+ <LinearLayout
android:layout_height="wrap_content"
- android:layout_width="wrap_content"
- android:text="@string/loan_accounts"/>
+ android:layout_marginLeft="@dimen/layout_padding_8dp"
+ android:layout_marginStart="@dimen/layout_padding_8dp"
+ android:layout_width="match_parent"
+ android:orientation="vertical">
- <TextView
- android:layout_height="match_parent"
- android:layout_width="wrap_content"
- android:text="@string/manage_loan_accounts"
- android:textSize="@dimen/text_size_12sp"/>
+ <TextView
+ android:layout_height="wrap_content"
+ android:layout_width="wrap_content"
+ android:text="@string/identification_cards"/>
+
+ <TextView
+ android:layout_height="match_parent"
+ android:layout_width="wrap_content"
+ android:text="@string/view_identification_card"
+ android:textSize="@dimen/text_size_12sp"/>
+
+ </LinearLayout>
</LinearLayout>
</LinearLayout>
-
- </LinearLayout>
-
- <LinearLayout
- android:clickable="true"
- android:foreground="?android:attr/selectableItemBackground"
- android:id="@+id/ll_deposit_accounts"
- android:layout_height="match_parent"
- android:layout_width="match_parent"
- android:orientation="horizontal"
- android:padding="16dp">
-
<LinearLayout
- android:layout_height="wrap_content"
- android:layout_width="wrap_content"
- android:orientation="horizontal">
-
- <ImageView
- style="@style/circleLayout"
- android:layout_height="35dp"
- android:layout_width="35dp"
- app:srcCompat="@drawable/ic_attach_money_black_24dp"/>
+ android:clickable="true"
+ android:foreground="?android:attr/selectableItemBackground"
+ android:id="@+id/ll_tasks"
+ android:layout_height="match_parent"
+ android:layout_width="match_parent"
+ android:orientation="horizontal"
+ android:padding="16dp">
<LinearLayout
android:layout_height="wrap_content"
- android:layout_marginLeft="@dimen/layout_padding_8dp"
- android:layout_marginStart="@dimen/layout_padding_8dp"
- android:layout_width="match_parent"
- android:orientation="vertical">
+ android:layout_width="wrap_content"
+ android:orientation="horizontal">
- <TextView
+ <ImageView
+ style="@style/circleLayout"
+ android:layout_height="35dp"
+ android:layout_width="35dp"
+ app:srcCompat="@drawable/ic_task_black_24dp"/>
+
+ <LinearLayout
android:layout_height="wrap_content"
- android:layout_width="wrap_content"
- android:text="@string/deposit_accounts"/>
+ android:layout_marginLeft="@dimen/layout_padding_8dp"
+ android:layout_marginStart="@dimen/layout_padding_8dp"
+ android:layout_width="match_parent"
+ android:orientation="vertical">
- <TextView
- android:layout_height="match_parent"
- android:layout_width="wrap_content"
- android:text="@string/manage_deposit_accounts"
- android:textSize="@dimen/text_size_12sp"/>
+ <TextView
+ android:layout_height="wrap_content"
+ android:layout_width="wrap_content"
+ android:text="@string/tasks"/>
+
+ <TextView
+ android:layout_height="match_parent"
+ android:layout_width="wrap_content"
+ android:text="@string/change_customer_status"
+ android:textSize="@dimen/text_size_12sp"/>
+
+ </LinearLayout>
</LinearLayout>
+
</LinearLayout>
- </LinearLayout>
-
- </LinearLayout>
-
- </android.support.v7.widget.CardView>
-
- <TextView
- android:layout_height="match_parent"
- android:layout_width="match_parent"
- android:paddingBottom="@dimen/layout_padding_8dp"
- android:paddingEnd="0dp"
- android:paddingLeft="@dimen/layout_padding_8dp"
- android:paddingRight="0dp"
- android:paddingStart="@dimen/layout_padding_8dp"
- android:paddingTop="@dimen/layout_padding_16dp"
- android:text="@string/management"/>
-
- <android.support.v7.widget.CardView
- xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:app="http://schemas.android.com/apk/res-auto"
- android:background="@color/white"
- android:id="@+id/cv_management"
- android:layout_height="match_parent"
- android:layout_width="match_parent">
-
- <LinearLayout
- android:layout_height="match_parent"
- android:layout_width="match_parent"
- android:orientation="vertical">
-
- <LinearLayout
- android:clickable="true"
- android:foreground="?android:attr/selectableItemBackground"
- android:id="@+id/ll_identifier_cards"
- android:layout_height="match_parent"
- android:layout_width="match_parent"
- android:orientation="horizontal"
- android:padding="16dp">
-
<LinearLayout
- android:layout_height="wrap_content"
- android:layout_width="wrap_content"
- android:orientation="horizontal">
-
- <ImageView
- style="@style/circleLayout"
- android:layout_height="35dp"
- android:layout_width="35dp"
- app:srcCompat="@drawable/ic_person_outline_black_24dp"/>
-
+ android:clickable="true"
+ android:foreground="?android:attr/selectableItemBackground"
+ android:id="@+id/ll_activities"
+ android:layout_height="match_parent"
+ android:layout_width="match_parent"
+ android:orientation="horizontal"
+ android:padding="@dimen/layout_padding_16dp">
<LinearLayout
android:layout_height="wrap_content"
- android:layout_marginLeft="@dimen/layout_padding_8dp"
- android:layout_marginStart="@dimen/layout_padding_8dp"
- android:layout_width="match_parent"
- android:orientation="vertical">
+ android:layout_width="wrap_content"
+ android:orientation="horizontal">
- <TextView
+ <ImageView
+ style="@style/circleLayout"
+ android:layout_height="35dp"
+ android:layout_width="35dp"
+ app:srcCompat="@drawable/ic_event_black_24dp"/>
+
+ <LinearLayout
android:layout_height="wrap_content"
- android:layout_width="wrap_content"
- android:text="@string/identification_cards"/>
+ android:layout_marginLeft="@dimen/layout_padding_8dp"
+ android:layout_marginStart="@dimen/layout_padding_8dp"
+ android:layout_width="match_parent"
+ android:orientation="vertical">
- <TextView
- android:layout_height="match_parent"
- android:layout_width="wrap_content"
- android:text="@string/view_identification_card"
- android:textSize="@dimen/text_size_12sp"/>
+ <TextView
+ android:layout_height="wrap_content"
+ android:layout_width="wrap_content"
+ android:text="@string/activities"/>
+
+ <TextView
+ android:layout_height="match_parent"
+ android:layout_width="wrap_content"
+ android:text="@string/recent_activities"
+ android:textSize="@dimen/text_size_12sp"/>
+
+ </LinearLayout>
</LinearLayout>
+
</LinearLayout>
</LinearLayout>
- <LinearLayout
- android:clickable="true"
- android:foreground="?android:attr/selectableItemBackground"
- android:id="@+id/ll_tasks"
- android:layout_height="match_parent"
- android:layout_width="match_parent"
- android:orientation="horizontal"
- android:padding="16dp">
+ </android.support.v7.widget.CardView>
- <LinearLayout
- android:layout_height="wrap_content"
- android:layout_width="wrap_content"
- android:orientation="horizontal">
+ </LinearLayout>
- <ImageView
- style="@style/circleLayout"
- android:layout_height="35dp"
- android:layout_width="35dp"
- app:srcCompat="@drawable/ic_task_black_24dp"/>
+ </android.support.v4.widget.NestedScrollView>
- <LinearLayout
- android:layout_height="wrap_content"
- android:layout_marginLeft="@dimen/layout_padding_8dp"
- android:layout_marginStart="@dimen/layout_padding_8dp"
- android:layout_width="match_parent"
- android:orientation="vertical">
+ <include
+ layout="@layout/layout_collapsing_header_view"
+ android:id="@+id/float_header_view"
+ android:layout_height="wrap_content"
+ android:layout_width="match_parent"
+ app:layout_behavior="org.apache.fineract.ui.views.ViewBehavior"
+ />
- <TextView
- android:layout_height="wrap_content"
- android:layout_width="wrap_content"
- android:text="@string/tasks"/>
+ <android.support.design.widget.FloatingActionButton
+ android:clickable="true"
+ android:focusable="true"
+ android:id="@+id/fab_edit_customer"
+ android:layout_height="wrap_content"
+ android:layout_margin="@dimen/fab_margin"
+ android:layout_width="wrap_content"
+ android:tint="@color/white"
+ app:layout_anchor="@+id/app_bar_layout"
+ app:layout_anchorGravity="bottom|end"
+ app:srcCompat="@drawable/ic_edit_black_24dp"/>
- <TextView
- android:layout_height="match_parent"
- android:layout_width="wrap_content"
- android:text="@string/change_customer_status"
- android:textSize="@dimen/text_size_12sp"/>
-
- </LinearLayout>
-
- </LinearLayout>
-
-
- </LinearLayout>
-
- <LinearLayout
- android:clickable="true"
- android:foreground="?android:attr/selectableItemBackground"
- android:id="@+id/ll_activities"
- android:layout_height="match_parent"
- android:layout_width="match_parent"
- android:orientation="horizontal"
- android:padding="@dimen/layout_padding_16dp">
-
- <LinearLayout
- android:layout_height="wrap_content"
- android:layout_width="wrap_content"
- android:orientation="horizontal">
-
- <ImageView
- style="@style/circleLayout"
- android:layout_height="35dp"
- android:layout_width="35dp"
- app:srcCompat="@drawable/ic_event_black_24dp"/>
-
- <LinearLayout
- android:layout_height="wrap_content"
- android:layout_marginLeft="@dimen/layout_padding_8dp"
- android:layout_marginStart="@dimen/layout_padding_8dp"
- android:layout_width="match_parent"
- android:orientation="vertical">
-
- <TextView
- android:layout_height="wrap_content"
- android:layout_width="wrap_content"
- android:text="@string/activities"/>
-
- <TextView
- android:layout_height="match_parent"
- android:layout_width="wrap_content"
- android:text="@string/recent_activities"
- android:textSize="@dimen/text_size_12sp"/>
-
- </LinearLayout>
-
- </LinearLayout>
-
-
- </LinearLayout>
-
- </LinearLayout>
-
- </android.support.v7.widget.CardView>
-
- </LinearLayout>
-
- </android.support.v4.widget.NestedScrollView>
+ </android.support.design.widget.CoordinatorLayout>
<include
- layout="@layout/layout_error"
- android:id="@+id/rl_error"
+ layout="@layout/layout_exception_handler"
+ android:id="@+id/layout_error"
android:visibility="gone"/>
- <include
- layout="@layout/layout_collapsing_header_view"
- android:id="@+id/float_header_view"
- android:layout_height="wrap_content"
- android:layout_width="match_parent"
- app:layout_behavior="org.apache.fineract.ui.views.ViewBehavior"
- />
-
- <android.support.design.widget.FloatingActionButton
- android:clickable="true"
- android:id="@+id/fab_edit_customer"
- android:layout_height="wrap_content"
- android:layout_margin="@dimen/fab_margin"
- android:layout_width="wrap_content"
- android:tint="@color/white"
- app:layout_anchor="@+id/app_bar_layout"
- app:layout_anchorGravity="bottom|end"
- app:srcCompat="@drawable/ic_edit_black_24dp"/>
-
</android.support.design.widget.CoordinatorLayout>
diff --git a/app/src/main/res/layout/fragment_customer_list.xml b/app/src/main/res/layout/fragment_customer_list.xml
index 5221bb3..7ebae36 100644
--- a/app/src/main/res/layout/fragment_customer_list.xml
+++ b/app/src/main/res/layout/fragment_customer_list.xml
@@ -20,12 +20,13 @@
</android.support.v4.widget.SwipeRefreshLayout>
<include
- layout="@layout/layout_error"
- android:id="@+id/rl_error"
+ layout="@layout/layout_exception_handler"
+ android:id="@+id/layout_error"
android:visibility="gone"/>
<android.support.design.widget.FloatingActionButton
android:clickable="true"
+ android:focusable="true"
android:id="@+id/fab_add_customer"
android:layout_gravity="bottom|end"
android:layout_height="wrap_content"
diff --git a/app/src/main/res/layout/fragment_customer_loans.xml b/app/src/main/res/layout/fragment_customer_loans.xml
index 2176dff..3ca9ff1 100644
--- a/app/src/main/res/layout/fragment_customer_loans.xml
+++ b/app/src/main/res/layout/fragment_customer_loans.xml
@@ -20,12 +20,13 @@
</android.support.v4.widget.SwipeRefreshLayout>
<include
- layout="@layout/layout_error"
- android:id="@+id/rl_error"
+ layout="@layout/layout_exception_handler"
+ android:id="@+id/layout_error"
android:visibility="gone"/>
<android.support.design.widget.FloatingActionButton
android:clickable="true"
+ android:focusable="true"
android:id="@+id/fab_add_customer_loan"
android:layout_gravity="bottom|end"
android:layout_height="wrap_content"
diff --git a/app/src/main/res/layout/fragment_form_deposit_assign_product.xml b/app/src/main/res/layout/fragment_form_deposit_assign_product.xml
index 1eebcb8..17b17e7 100644
--- a/app/src/main/res/layout/fragment_form_deposit_assign_product.xml
+++ b/app/src/main/res/layout/fragment_form_deposit_assign_product.xml
@@ -1,19 +1,18 @@
<?xml version="1.0" encoding="utf-8"?>
<android.support.design.widget.CoordinatorLayout
xmlns:android="http://schemas.android.com/apk/res/android"
- android:id="@+id/cl_deposit_assign_product"
android:layout_height="match_parent"
android:layout_width="match_parent"
- android:visibility="invisible">
+ android:visibility="visible">
<android.support.v4.widget.NestedScrollView
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:background="@color/gray_light"
- android:id="@+id/ncv_loan_details"
+ android:id="@+id/ncv_deposit_assign_product"
android:layout_height="match_parent"
android:layout_width="match_parent"
- android:visibility="visible"
+ android:visibility="gone"
app:layout_behavior="@string/appbar_scrolling_view_behavior">
<android.support.v7.widget.CardView
@@ -100,4 +99,9 @@
</android.support.v4.widget.NestedScrollView>
+ <include
+ layout="@layout/layout_exception_handler"
+ android:id="@+id/layout_error"
+ android:visibility="gone"/>
+
</android.support.design.widget.CoordinatorLayout>
\ No newline at end of file
diff --git a/app/src/main/res/layout/fragment_identification_details.xml b/app/src/main/res/layout/fragment_identification_details.xml
index 15f081a..0c4fa5b 100644
--- a/app/src/main/res/layout/fragment_identification_details.xml
+++ b/app/src/main/res/layout/fragment_identification_details.xml
@@ -213,16 +213,15 @@
android:layout_height="200dp"
android:textSize="@dimen/text_size_12sp"
android:clickable="true"
+ android:focusable="true"
android:foreground="?android:attr/selectableItemBackground"
android:text="@string/loading_scans_please_wait"/>
<include
- layout="@layout/layout_error"
- android:id="@+id/rl_error"
+ android:layout_height="300dp"
android:layout_width="match_parent"
- android:layout_height="200dp"
- android:clickable="true"
- android:foreground="?android:attr/selectableItemBackground"
+ layout="@layout/layout_exception_handler"
+ android:id="@+id/layout_error"
android:visibility="gone"/>
</FrameLayout>
@@ -235,6 +234,7 @@
<android.support.design.widget.FloatingActionButton
android:clickable="true"
+ android:focusable="true"
android:id="@+id/fab_upload_identification_scan_card"
android:layout_gravity="bottom|end"
android:layout_height="wrap_content"
diff --git a/app/src/main/res/layout/fragment_identification_list.xml b/app/src/main/res/layout/fragment_identification_list.xml
index af0d298..202d482 100644
--- a/app/src/main/res/layout/fragment_identification_list.xml
+++ b/app/src/main/res/layout/fragment_identification_list.xml
@@ -21,12 +21,13 @@
</android.support.v4.widget.SwipeRefreshLayout>
<include
- layout="@layout/layout_error"
- android:id="@+id/rl_error"
+ layout="@layout/layout_exception_handler"
+ android:id="@+id/layout_error"
android:visibility="gone"/>
<android.support.design.widget.FloatingActionButton
android:clickable="true"
+ android:focusable="true"
android:id="@+id/fab_add_identification_card"
android:layout_gravity="bottom|end"
android:layout_height="wrap_content"
diff --git a/app/src/main/res/layout/fragment_loan_details.xml b/app/src/main/res/layout/fragment_loan_details.xml
index 382eb4b..c8b05d7 100644
--- a/app/src/main/res/layout/fragment_loan_details.xml
+++ b/app/src/main/res/layout/fragment_loan_details.xml
@@ -4,7 +4,7 @@
android:id="@+id/cl_loan_details"
android:layout_height="match_parent"
android:layout_width="match_parent"
- android:visibility="invisible">
+ android:visibility="visible">
<android.support.v4.widget.NestedScrollView
xmlns:android="http://schemas.android.com/apk/res/android"
@@ -13,7 +13,7 @@
android:id="@+id/ncv_loan_details"
android:layout_height="match_parent"
android:layout_width="match_parent"
- android:visibility="visible"
+ android:visibility="invisible"
app:layout_behavior="@string/appbar_scrolling_view_behavior">
<android.support.v7.widget.CardView
@@ -307,4 +307,9 @@
</android.support.v4.widget.NestedScrollView>
+ <include
+ layout="@layout/layout_exception_handler"
+ android:id="@+id/layout_error"
+ android:visibility="gone"/>
+
</android.support.design.widget.CoordinatorLayout>
\ No newline at end of file
diff --git a/app/src/main/res/layout/fragment_planned_payment.xml b/app/src/main/res/layout/fragment_planned_payment.xml
index bad381c..b340779 100644
--- a/app/src/main/res/layout/fragment_planned_payment.xml
+++ b/app/src/main/res/layout/fragment_planned_payment.xml
@@ -2,12 +2,12 @@
<android.support.design.widget.CoordinatorLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_height="match_parent"
- android:layout_width="match_parent" >
+ android:layout_width="match_parent">
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
- android:animateLayoutChanges="true"
- style="@style/LinearLayout.Base">
+ style="@style/LinearLayout.Base"
+ android:animateLayoutChanges="true">
<LinearLayout
android:layout_height="wrap_content"
@@ -25,6 +25,7 @@
<LinearLayout
android:clickable="true"
+ android:focusable="true"
android:foreground="?android:attr/selectableItemBackground"
android:id="@+id/ll_toolbar_date"
android:layout_height="match_parent"
@@ -33,10 +34,10 @@
android:padding="16dp">
<TextView
- android:id="@+id/tv_toolbar_date"
android:drawableEnd="@drawable/ic_arrow_drop_down_black_24dp"
android:drawableRight="@drawable/ic_arrow_drop_down_black_24dp"
android:gravity="center"
+ android:id="@+id/tv_toolbar_date"
android:layout_gravity="center"
android:layout_height="wrap_content"
android:layout_width="wrap_content"
@@ -54,6 +55,7 @@
xmlns:app="http://schemas.android.com/apk/res-auto"
android:background="@color/white"
android:clickable="true"
+ android:focusable="true"
android:foreground="?android:attr/selectableItemBackground"
android:id="@+id/cv_planned_payment"
android:layout_height="wrap_content"
@@ -68,39 +70,46 @@
<CalendarView
android:id="@+id/calender_view_payment"
android:layout_height="300dp"
- android:layout_width="match_parent" />
+ android:layout_width="match_parent"/>
<android.support.v7.widget.AppCompatButton
android:id="@+id/btn_load_planned_payment"
android:layout_gravity="end"
- android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_margin="@dimen/layout_padding_8dp"
- android:textAllCaps="false"
- android:text="@string/load_payment"/>
+ android:layout_width="wrap_content"
+ android:text="@string/load_payment"
+ android:textAllCaps="false"/>
</LinearLayout>
</android.support.v7.widget.CardView>
- <android.support.v4.widget.SwipeRefreshLayout
- android:id="@+id/swipe_container"
+ <android.support.design.widget.CoordinatorLayout
+ xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_height="match_parent"
android:layout_width="match_parent">
- <android.support.v7.widget.RecyclerView
- android:id="@+id/rv_planned_payment"
- android:layout_centerHorizontal="true"
- android:layout_height="0dp"
- android:layout_marginBottom="@dimen/layout_padding_30dp"
- android:layout_weight="1"
- android:layout_width="wrap_content"/>
- </android.support.v4.widget.SwipeRefreshLayout>
+ <android.support.v4.widget.SwipeRefreshLayout
+ android:id="@+id/swipe_container"
+ android:layout_height="match_parent"
+ android:layout_width="match_parent">
- <include
- layout="@layout/layout_error"
- android:id="@+id/rl_error"
- android:visibility="gone"/>
+ <android.support.v7.widget.RecyclerView
+ android:id="@+id/rv_planned_payment"
+ android:layout_centerHorizontal="true"
+ android:layout_height="0dp"
+ android:layout_marginBottom="@dimen/layout_padding_30dp"
+ android:layout_weight="1"
+ android:layout_width="wrap_content"/>
+ </android.support.v4.widget.SwipeRefreshLayout>
+
+ <include
+ layout="@layout/layout_exception_handler"
+ android:id="@+id/layout_error"
+ android:visibility="gone"/>
+
+ </android.support.design.widget.CoordinatorLayout>
</LinearLayout>
diff --git a/app/src/main/res/layout/fragment_roles_list.xml b/app/src/main/res/layout/fragment_roles_list.xml
index fd10e39..466dec4 100644
--- a/app/src/main/res/layout/fragment_roles_list.xml
+++ b/app/src/main/res/layout/fragment_roles_list.xml
@@ -19,12 +19,13 @@
</android.support.v4.widget.SwipeRefreshLayout>
<include
- layout="@layout/layout_error"
- android:id="@+id/rl_error"
+ layout="@layout/layout_exception_handler"
+ android:id="@+id/layout_error"
android:visibility="gone"/>
<android.support.design.widget.FloatingActionButton
android:clickable="true"
+ android:focusable="true"
android:id="@+id/fab_add_role"
android:layout_gravity="bottom|end"
android:layout_height="wrap_content"
diff --git a/app/src/main/res/layout/layout_exception_handler.xml b/app/src/main/res/layout/layout_exception_handler.xml
index 9bbd38e..724d4bc 100644
--- a/app/src/main/res/layout/layout_exception_handler.xml
+++ b/app/src/main/res/layout/layout_exception_handler.xml
@@ -13,9 +13,10 @@
android:layout_height="match_parent"
android:layout_width="match_parent"
android:orientation="vertical"
- android:visibility="visible">
+ android:visibility="gone">
<ImageView
+ android:id="@+id/iv_error_no_connection"
android:contentDescription="@string/status_image"
android:layout_gravity="center|center_horizontal"
android:layout_height="70dp"
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index e0f86e4..965f297 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -29,6 +29,7 @@
<string name="current_status">Current status</string>
<string name="management">Management</string>
<string name="identification_cards">Identification cards</string>
+ <string name="identification_card">Identification card</string>
<string name="view_identification_card">View identification cards</string>
<string name="tasks">Tasks</string>
<string name="change_customer_status">Change the status of customer</string>
@@ -54,6 +55,7 @@
<string name="payment_cycle">Payment cycle</string>
<string name="term">Term</string>
<string name="planned_payment">Planned Payment</string>
+ <string name="planned_payments">Planned Payments</string>
<string name="view_payments">View payments</string>
<string name="debt_income_report">Debt Income Report</string>
<string name="view_debt_income_report">View debt income report</string>
@@ -70,6 +72,7 @@
<string name="balance">Balance</string>
<string name="beneficiaries">Beneficiaries</string>
<string name="deposit_account">Deposit account</string>
+ <string name="deposit_product">Deposit product</string>
<string name="remaining_principal">Remaining principal</string>
<string name="load_payment">Load Payment</string>
<string name="short_name">Short name</string>
@@ -178,6 +181,12 @@
<string name="oh_no">Oh no!</string>
<string name="empty_ui_message">No %1$s Found</string>
<string name="empty_ui_sub_message">Tap to add %1$s</string>
+ <string name="customer_details">Customer details</string>
+ <string name="create_new_loan">Create new loan</string>
+ <string name="identification_card_scans">Identification card scans</string>
+ <string name="identification_card_scan">Identification card scan</string>
+ <string name="role">Role</string>
+ <string name="customer_name">%1$s %2$s</string>
<!--Edit Text hint required-->
<string name="required_account">Account*</string>
@@ -239,7 +248,7 @@
<string name="error_updating_status">Error while updating customer</string>
<string name="error_fetching_identification_list">Error while fetching identification cards</string>
<string name="error_creating_identification_card">Error while creating identification card</string>
- <string name="error_editing_identification_card">Error while editing identification card</string>
+ <string name="error_updating_identification_card">Error while updating identification card</string>
<string name="error_fetching_scans">Error while fetching scan cards</string>
<string name="error_uploading_identification_scan_card">Error while uploading identification scan card</string>
<string name="error_deleting_identification_scan_card">Error while deleting identification scan card</string>
@@ -251,6 +260,9 @@
<string name="error_fetching_customer_activities">Error fetching customer activities</string>
<string name="error_fetching_roles">Error fetching roles</string>
<string name="error_sorry_not_able_to_load">Sorry we weren\'t able to load</string>
+ <string name="error_fetching_customer_details">Failed to fetch customer details</string>
+ <string name="error_fetching_deposit_product">Failed to fetch deposit product</string>
+ <string name="error_failed_to_refresh_customers">Failed to refresh customers</string>
<!--Material Dialog-->