Merge pull request #127 from therajanmaurya/logout

Feature: logout from app
diff --git a/app/src/main/java/com/mifos/apache/fineract/injection/component/ActivityComponent.java b/app/src/main/java/com/mifos/apache/fineract/injection/component/ActivityComponent.java
index 7c17c6f..0b17aa1 100644
--- a/app/src/main/java/com/mifos/apache/fineract/injection/component/ActivityComponent.java
+++ b/app/src/main/java/com/mifos/apache/fineract/injection/component/ActivityComponent.java
@@ -2,6 +2,7 @@
 
 import com.mifos.apache.fineract.injection.PerActivity;
 import com.mifos.apache.fineract.injection.module.ActivityModule;
+import com.mifos.apache.fineract.ui.online.DashboardActivity;
 import com.mifos.apache.fineract.ui.online.customers.createcustomer.customeractivity.CreateCustomerActivity;
 import com.mifos.apache.fineract.ui.online.customers.createcustomer.formcustomeraddress.FormCustomerAddressFragment;
 
@@ -94,4 +95,6 @@
     void inject(CreateDepositActivity createDepositActivity);
 
     void inject(CustomerActivitiesFragment customerActivitiesFragment);
+
+    void inject(DashboardActivity dashboardActivity);
 }
diff --git a/app/src/main/java/com/mifos/apache/fineract/ui/online/DashboardActivity.java b/app/src/main/java/com/mifos/apache/fineract/ui/online/DashboardActivity.java
index 012feac..8e4510e 100644
--- a/app/src/main/java/com/mifos/apache/fineract/ui/online/DashboardActivity.java
+++ b/app/src/main/java/com/mifos/apache/fineract/ui/online/DashboardActivity.java
@@ -1,5 +1,7 @@
 package com.mifos.apache.fineract.ui.online;
 
+import android.content.DialogInterface;
+import android.content.Intent;
 import android.os.Bundle;
 import android.support.annotation.NonNull;
 import android.support.design.widget.NavigationView;
@@ -11,9 +13,14 @@
 import android.view.View;
 
 import com.mifos.apache.fineract.R;
+import com.mifos.apache.fineract.data.local.PreferencesHelper;
 import com.mifos.apache.fineract.ui.base.MifosBaseActivity;
 import com.mifos.apache.fineract.ui.online.customers.customerlist.CustomersFragment;
 import com.mifos.apache.fineract.ui.online.dashboard.DashboardFragment;
+import com.mifos.apache.fineract.ui.online.launcher.LauncherActivity;
+import com.mifos.apache.fineract.utils.MaterialDialog;
+
+import javax.inject.Inject;
 
 import butterknife.BindView;
 import butterknife.ButterKnife;
@@ -33,10 +40,14 @@
     @BindView(R.id.drawer_layout)
     DrawerLayout drawerLayout;
 
+    @Inject
+    PreferencesHelper preferencesHelper;
+
     @Override
     protected void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
         setContentView(R.layout.activity_dashboard);
+        getActivityComponent().inject(this);
         ButterKnife.bind(this);
 
         replaceFragment(DashboardFragment.newInstance(), false, R.id.container);
@@ -63,8 +74,9 @@
 
             @Override
             public void onDrawerSlide(View drawerView, float slideOffset) {
-                if (slideOffset != 0)
+                if (slideOffset != 0) {
                     hideKeyboard(drawerLayout);
+                }
                 super.onDrawerSlide(drawerView, slideOffset);
             }
         };
@@ -83,6 +95,9 @@
             case R.id.item_customer:
                 replaceFragment(CustomersFragment.newInstance(), true, R.id.container);
                 break;
+            case R.id.item_logout:
+                logout();
+                break;
         }
         drawerLayout.closeDrawer(Gravity.START);
         setTitle(item.getTitle());
@@ -98,4 +113,26 @@
             super.onBackPressed();
         }
     }
+
+    public void logout() {
+        new MaterialDialog.Builder()
+                .init(this)
+                .setTitle(getString(R.string.dialog_title_confirm_logout))
+                .setMessage(getString(
+                        R.string.dialog_message_confirmation_logout))
+                .setPositiveButton(getString(R.string.dialog_action_logout),
+                        new DialogInterface.OnClickListener() {
+                            @Override
+                            public void onClick(DialogInterface dialog, int which) {
+                                preferencesHelper.clear();
+                                Intent intent = new Intent(DashboardActivity.this,
+                                        LauncherActivity.class);
+                                startActivity(intent);
+                                finish();
+                            }
+                        })
+                .setNegativeButton(getString(R.string.dialog_action_cancel))
+                .createMaterialDialog()
+                .show();
+    }
 }
diff --git a/app/src/main/res/drawable/ic_input_black_24dp.xml b/app/src/main/res/drawable/ic_input_black_24dp.xml
new file mode 100644
index 0000000..fea69df
--- /dev/null
+++ b/app/src/main/res/drawable/ic_input_black_24dp.xml
@@ -0,0 +1,9 @@
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+        android:width="24dp"
+        android:height="24dp"
+        android:viewportWidth="24.0"
+        android:viewportHeight="24.0">
+    <path
+        android:fillColor="#FF000000"
+        android:pathData="M21,3.01H3c-1.1,0 -2,0.9 -2,2V9h2V4.99h18v14.03H3V15H1v4.01c0,1.1 0.9,1.98 2,1.98h18c1.1,0 2,-0.88 2,-1.98v-14c0,-1.11 -0.9,-2 -2,-2zM11,16l4,-4 -4,-4v3H1v2h10v3z"/>
+</vector>
diff --git a/app/src/main/res/menu/menu_navigation_drawer.xml b/app/src/main/res/menu/menu_navigation_drawer.xml
index 59b0c39..3f4dcf4 100644
--- a/app/src/main/res/menu/menu_navigation_drawer.xml
+++ b/app/src/main/res/menu/menu_navigation_drawer.xml
@@ -1,17 +1,31 @@
 <?xml version="1.0" encoding="utf-8"?>
 <menu xmlns:android="http://schemas.android.com/apk/res/android">
 
-    <group android:checkableBehavior="single">
+    <group
+        android:checkableBehavior="single"
+        android:id="@+id/group1">
+
         <item
-            android:id="@+id/item_dashboard"
-            android:icon="@drawable/ic_dashboard_black_24dp"
             android:checked="true"
+            android:icon="@drawable/ic_dashboard_black_24dp"
+            android:id="@+id/item_dashboard"
             android:title="@string/dashboard"/>
         <item
-            android:id="@+id/item_customer"
-            android:icon="@drawable/ic_customer_black_24dp"
             android:checked="true"
+            android:icon="@drawable/ic_customer_black_24dp"
+            android:id="@+id/item_customer"
             android:title="@string/customer"/>
+
+    </group>
+
+    <group
+        android:id="@+id/group2">
+
+        <item
+            android:id="@+id/item_logout"
+            android:icon="@drawable/ic_input_black_24dp"
+            android:title="@string/logout"/>
+
     </group>
 
 </menu>
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index ba1ed59..b69bafc 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -164,6 +164,7 @@
     <string name="select_product">Select product</string>
     <string name="no_beneficiary">No beneficiaries</string>
     <string name="activities_created_by_on">%1$s, %2$s</string>
+    <string name="logout">Logout</string>
 
     <!--Edit Text hint required-->
     <string name="required_account">Account*</string>
@@ -244,9 +245,12 @@
     <string name="dialog_action_re_try">Retry</string>
     <string name="dialog_action_app_settings">App Settings</string>
     <string name="dialog_action_delete">Delete</string>
+    <string name="dialog_action_logout">Logout</string>
     <string name="dialog_title_confirm_deletion">Confirm deletion</string>
+    <string name="dialog_title_confirm_logout">Confirm logout</string>
     <string name="dialog_message_confirmation_delete_identification_card">Do you want to delete this identification card?</string>
     <string name="dialog_message_confirmation_delete_identification_card_scan">Do you want to delete this identification card scan?</string>
+    <string name="dialog_message_confirmation_logout">Are you sure? you want to logout</string>
     <string name="dialog_message_camera_permission_denied_prompt">Without camera permission you will
         not be able to scan the document. Are you sure you want to deny this
         permission?</string>