diff --git a/app/build.gradle b/app/build.gradle
index a1184bde9..7892aea58 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -132,7 +132,7 @@ dependencies {
//multidex
implementation "androidx.multidex:multidex:$rootProject.multiDexVersion"
-
+
//TableView
implementation "com.evrencoskun.library:tableview:$rootProject.tableViewVersion"
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 3f796adfa..165f10929 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -42,6 +42,8 @@
+
+
-
\ No newline at end of file
+
diff --git a/app/src/main/java/org/mifos/mobile/ui/activities/IntroductionActivity.java b/app/src/main/java/org/mifos/mobile/ui/activities/IntroductionActivity.java
new file mode 100644
index 000000000..a29e3d91c
--- /dev/null
+++ b/app/src/main/java/org/mifos/mobile/ui/activities/IntroductionActivity.java
@@ -0,0 +1,156 @@
+package org.mifos.mobile.ui.activities;
+
+import androidx.appcompat.app.AppCompatActivity;
+import androidx.viewpager.widget.ViewPager;
+import butterknife.BindView;
+import butterknife.ButterKnife;
+
+import android.Manifest;
+import android.content.Intent;
+import android.os.Bundle;
+import android.text.Html;
+import android.view.View;
+import android.widget.Button;
+import android.widget.LinearLayout;
+import android.widget.TextView;
+
+import org.mifos.mobile.R;
+import org.mifos.mobile.api.local.PreferencesHelper;
+import org.mifos.mobile.ui.adapters.IntroductionViewPagerAdapter;
+import org.mifos.mobile.utils.CheckSelfPermissionAndRequest;
+import org.mifos.mobile.utils.Constants;
+
+public class IntroductionActivity extends AppCompatActivity {
+
+ @BindView(R.id.view_pager)
+ public ViewPager viewPager;
+
+ @BindView(R.id.layoutDots)
+ public LinearLayout dotsLayout;
+
+ @BindView(R.id.btn_skip)
+ public Button btnSkip;
+
+ @BindView(R.id.btn_next)
+ public Button btnNext;
+
+ private IntroductionViewPagerAdapter myViewPagerAdapter;
+ private TextView[] dots;
+ private int[] layouts;
+ private PreferencesHelper prefs;
+
+
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ setContentView(R.layout.activity_introduction);
+ ButterKnife.bind(this);
+
+ prefs = new PreferencesHelper(this);
+ layouts = new int[]{
+ R.layout.intro_screen_1,
+ R.layout.intro_screen_2,
+ R.layout.intro_screen_3,
+ R.layout.intro_screen_4};
+
+ addBottomDots(0);
+ myViewPagerAdapter = new IntroductionViewPagerAdapter(layouts, this);
+ viewPager.setAdapter(myViewPagerAdapter);
+ viewPager.addOnPageChangeListener(viewPagerPageChangeListener);
+
+ btnSkip.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ launchHomeScreen();
+ }
+ });
+ btnNext.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ int current = getItem(+1);
+ if (current < layouts.length) {
+ if (current == 2 && !CheckSelfPermissionAndRequest
+ .checkSelfPermission(getApplicationContext(),
+ Manifest.permission.READ_PHONE_STATE)) {
+ requestPermission();
+ }
+ viewPager.setCurrentItem(current);
+ } else {
+ launchHomeScreen();
+ }
+ }
+ });
+ }
+
+
+ private void addBottomDots(int currentPage) {
+ int colorInactive = getResources().getColor(R.color.primary);
+ int colorActive = getResources().getColor(R.color.white);
+ dots = new TextView[layouts.length];
+
+ dotsLayout.removeAllViews();
+ for (int i = 0; i < dots.length; i++) {
+ dots[i] = new TextView(this);
+ dots[i].setText(Html.fromHtml(getString(R.string.dot_string)));
+ dots[i].setTextSize(35);
+ dots[i].setTextColor(colorInactive);
+ dotsLayout.addView(dots[i]);
+ }
+ if (dots.length > 0) {
+ dots[currentPage].setTextColor(colorActive);
+ }
+ }
+
+ private int getItem(int i) {
+ return viewPager.getCurrentItem() + i;
+ }
+
+ private void launchHomeScreen() {
+ prefs.putBoolean("check_first_time", false);
+ startActivity(new Intent(this, LoginActivity.class));
+ finish();
+ }
+
+
+ ViewPager.OnPageChangeListener viewPagerPageChangeListener = new ViewPager
+ .OnPageChangeListener() {
+ @Override
+ public void onPageSelected(int position) {
+ addBottomDots(position);
+
+ if (position == layouts.length - 1) {
+ btnNext.setText(getString(R.string.start));
+ btnSkip.setVisibility(View.GONE);
+ } else if (position == 2 && !CheckSelfPermissionAndRequest
+ .checkSelfPermission(getApplicationContext(),
+ Manifest.permission.READ_PHONE_STATE)) {
+ requestPermission();
+ } else {
+ btnNext.setText(getString(R.string.next));
+ btnSkip.setVisibility(View.VISIBLE);
+ }
+ }
+
+ @Override
+ public void onPageScrolled(int arg0, float arg1, int arg2) { }
+
+ @Override
+ public void onPageScrollStateChanged(int arg0) { }
+ };
+
+
+ /**
+ * Uses {@link CheckSelfPermissionAndRequest} to check for runtime permissions
+ */
+ private void requestPermission() {
+ CheckSelfPermissionAndRequest.requestPermission(
+ this,
+ Manifest.permission.READ_PHONE_STATE,
+ Constants.PERMISSIONS_REQUEST_READ_PHONE_STATE,
+ getResources().getString(
+ R.string.dialog_message_phone_state_permission_denied_prompt),
+ getResources().getString(R.string.
+ dialog_message_phone_state_permission_never_ask_again),
+ Constants.PERMISSIONS_READ_PHONE_STATE_STATUS);
+ }
+}
diff --git a/app/src/main/java/org/mifos/mobile/ui/activities/PassCodeActivity.java b/app/src/main/java/org/mifos/mobile/ui/activities/PassCodeActivity.java
index e469d9482..4bc16e5d3 100644
--- a/app/src/main/java/org/mifos/mobile/ui/activities/PassCodeActivity.java
+++ b/app/src/main/java/org/mifos/mobile/ui/activities/PassCodeActivity.java
@@ -1,6 +1,5 @@
package org.mifos.mobile.ui.activities;
-import android.Manifest;
import android.content.DialogInterface;
import android.content.Intent;
import android.os.Bundle;
@@ -10,8 +9,6 @@
import com.mifos.mobile.passcode.utils.EncryptionUtil;
import org.mifos.mobile.R;
-import org.mifos.mobile.utils.CheckSelfPermissionAndRequest;
-import org.mifos.mobile.utils.Constants;
import org.mifos.mobile.utils.MaterialDialog;
import org.mifos.mobile.utils.Toaster;
@@ -20,26 +17,8 @@ public class PassCodeActivity extends MifosPassCodeActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
- if (!CheckSelfPermissionAndRequest.checkSelfPermission(this,
- Manifest.permission.READ_PHONE_STATE)) {
- requestPermission();
- }
}
- /**
- * Uses {@link CheckSelfPermissionAndRequest} to check for runtime permissions
- */
- private void requestPermission() {
- CheckSelfPermissionAndRequest.requestPermission(
- this,
- Manifest.permission.READ_PHONE_STATE,
- Constants.PERMISSIONS_REQUEST_READ_PHONE_STATE,
- getResources().getString(
- R.string.dialog_message_phone_state_permission_denied_prompt),
- getResources().getString(R.string.
- dialog_message_phone_state_permission_never_ask_again),
- Constants.PERMISSIONS_READ_PHONE_STATE_STATUS);
- }
@Override
public int getLogo() {
diff --git a/app/src/main/java/org/mifos/mobile/ui/activities/SplashActivity.java b/app/src/main/java/org/mifos/mobile/ui/activities/SplashActivity.java
index 2bdfd0606..93978c0f1 100644
--- a/app/src/main/java/org/mifos/mobile/ui/activities/SplashActivity.java
+++ b/app/src/main/java/org/mifos/mobile/ui/activities/SplashActivity.java
@@ -9,12 +9,14 @@
import com.mifos.mobile.passcode.utils.PasscodePreferencesHelper;
+import org.mifos.mobile.api.local.PreferencesHelper;
import org.mifos.mobile.ui.activities.base.BaseActivity;
import org.mifos.mobile.utils.Constants;
public class SplashActivity extends BaseActivity {
PasscodePreferencesHelper passcodePreferencesHelper;
+ PreferencesHelper prefs;
Intent intent;
@Override
@@ -23,9 +25,13 @@ protected void onCreate(Bundle savedInstanceState) {
getActivityComponent().inject(this);
passcodePreferencesHelper = new PasscodePreferencesHelper(this);
+ prefs = new PreferencesHelper(this);
if (!passcodePreferencesHelper.getPassCode().isEmpty()) {
intent = new Intent(this, PassCodeActivity.class);
intent.putExtra(Constants.INTIAL_LOGIN, true);
+ } else if (passcodePreferencesHelper.getPassCode().isEmpty() &&
+ prefs.getBoolean("check_first_time", true)) {
+ intent = new Intent(this, IntroductionActivity.class);
} else {
intent = new Intent(this, LoginActivity.class);
}
diff --git a/app/src/main/java/org/mifos/mobile/ui/adapters/IntroductionViewPagerAdapter.java b/app/src/main/java/org/mifos/mobile/ui/adapters/IntroductionViewPagerAdapter.java
new file mode 100644
index 000000000..4d4379c38
--- /dev/null
+++ b/app/src/main/java/org/mifos/mobile/ui/adapters/IntroductionViewPagerAdapter.java
@@ -0,0 +1,45 @@
+package org.mifos.mobile.ui.adapters;
+
+import android.content.Context;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+
+import androidx.viewpager.widget.PagerAdapter;
+
+public class IntroductionViewPagerAdapter extends PagerAdapter {
+
+ private LayoutInflater layoutInflater;
+ private int[] layouts;
+ Context context;
+
+ public IntroductionViewPagerAdapter(int[] layoutArray, Context context) {
+ layouts = layoutArray;
+ this.context = context;
+ }
+
+ @Override
+ public Object instantiateItem(ViewGroup container, int position) {
+ layoutInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
+ View view = layoutInflater.inflate(layouts[position], container, false);
+ container.addView(view);
+ return view;
+ }
+
+ @Override
+ public int getCount() {
+ return layouts.length;
+ }
+
+ @Override
+ public boolean isViewFromObject(View view, Object obj) {
+ return view == obj;
+ }
+
+
+ @Override
+ public void destroyItem(ViewGroup container, int position, Object object) {
+ View view = (View) object;
+ container.removeView(view);
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/res/drawable-hdpi/ic_done.png b/app/src/main/res/drawable-hdpi/ic_done.png
new file mode 100644
index 000000000..d765fa436
Binary files /dev/null and b/app/src/main/res/drawable-hdpi/ic_done.png differ
diff --git a/app/src/main/res/drawable-hdpi/ic_intro.png b/app/src/main/res/drawable-hdpi/ic_intro.png
new file mode 100644
index 000000000..f4636b2fd
Binary files /dev/null and b/app/src/main/res/drawable-hdpi/ic_intro.png differ
diff --git a/app/src/main/res/drawable-hdpi/ic_permission.png b/app/src/main/res/drawable-hdpi/ic_permission.png
new file mode 100644
index 000000000..65a33ce9e
Binary files /dev/null and b/app/src/main/res/drawable-hdpi/ic_permission.png differ
diff --git a/app/src/main/res/drawable-mdpi/ic_done.png b/app/src/main/res/drawable-mdpi/ic_done.png
new file mode 100644
index 000000000..a59b05430
Binary files /dev/null and b/app/src/main/res/drawable-mdpi/ic_done.png differ
diff --git a/app/src/main/res/drawable-mdpi/ic_intro.png b/app/src/main/res/drawable-mdpi/ic_intro.png
new file mode 100644
index 000000000..075895f42
Binary files /dev/null and b/app/src/main/res/drawable-mdpi/ic_intro.png differ
diff --git a/app/src/main/res/drawable-mdpi/ic_permission.png b/app/src/main/res/drawable-mdpi/ic_permission.png
new file mode 100644
index 000000000..0c0f2a1f9
Binary files /dev/null and b/app/src/main/res/drawable-mdpi/ic_permission.png differ
diff --git a/app/src/main/res/drawable-xhdpi/ic_done.png b/app/src/main/res/drawable-xhdpi/ic_done.png
new file mode 100644
index 000000000..b1d06d296
Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/ic_done.png differ
diff --git a/app/src/main/res/drawable-xhdpi/ic_intro.png b/app/src/main/res/drawable-xhdpi/ic_intro.png
new file mode 100644
index 000000000..56f49a54d
Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/ic_intro.png differ
diff --git a/app/src/main/res/drawable-xhdpi/ic_permission.png b/app/src/main/res/drawable-xhdpi/ic_permission.png
new file mode 100644
index 000000000..69481935f
Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/ic_permission.png differ
diff --git a/app/src/main/res/drawable-xxhdpi/ic_done.png b/app/src/main/res/drawable-xxhdpi/ic_done.png
new file mode 100644
index 000000000..5955c1c36
Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/ic_done.png differ
diff --git a/app/src/main/res/drawable-xxhdpi/ic_intro.png b/app/src/main/res/drawable-xxhdpi/ic_intro.png
new file mode 100644
index 000000000..42a288081
Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/ic_intro.png differ
diff --git a/app/src/main/res/drawable-xxhdpi/ic_permission.png b/app/src/main/res/drawable-xxhdpi/ic_permission.png
new file mode 100644
index 000000000..ebaba9600
Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/ic_permission.png differ
diff --git a/app/src/main/res/drawable-xxxhdpi/ic_done.png b/app/src/main/res/drawable-xxxhdpi/ic_done.png
new file mode 100644
index 000000000..2cfa9ee3f
Binary files /dev/null and b/app/src/main/res/drawable-xxxhdpi/ic_done.png differ
diff --git a/app/src/main/res/drawable-xxxhdpi/ic_intro.png b/app/src/main/res/drawable-xxxhdpi/ic_intro.png
new file mode 100644
index 000000000..60bba8eb4
Binary files /dev/null and b/app/src/main/res/drawable-xxxhdpi/ic_intro.png differ
diff --git a/app/src/main/res/drawable-xxxhdpi/ic_permission.png b/app/src/main/res/drawable-xxxhdpi/ic_permission.png
new file mode 100644
index 000000000..45fdb3935
Binary files /dev/null and b/app/src/main/res/drawable-xxxhdpi/ic_permission.png differ
diff --git a/app/src/main/res/layout/activity_introduction.xml b/app/src/main/res/layout/activity_introduction.xml
new file mode 100644
index 000000000..3a4d2536f
--- /dev/null
+++ b/app/src/main/res/layout/activity_introduction.xml
@@ -0,0 +1,51 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/intro_screen_1.xml b/app/src/main/res/layout/intro_screen_1.xml
new file mode 100644
index 000000000..f71686765
--- /dev/null
+++ b/app/src/main/res/layout/intro_screen_1.xml
@@ -0,0 +1,39 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/intro_screen_2.xml b/app/src/main/res/layout/intro_screen_2.xml
new file mode 100644
index 000000000..a89cc182e
--- /dev/null
+++ b/app/src/main/res/layout/intro_screen_2.xml
@@ -0,0 +1,41 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/intro_screen_3.xml b/app/src/main/res/layout/intro_screen_3.xml
new file mode 100644
index 000000000..1d4f46e53
--- /dev/null
+++ b/app/src/main/res/layout/intro_screen_3.xml
@@ -0,0 +1,40 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/intro_screen_4.xml b/app/src/main/res/layout/intro_screen_4.xml
new file mode 100644
index 000000000..3f361a7f8
--- /dev/null
+++ b/app/src/main/res/layout/intro_screen_4.xml
@@ -0,0 +1,40 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/values/dimens.xml b/app/src/main/res/values/dimens.xml
index 5b4386261..088678775 100644
--- a/app/src/main/res/values/dimens.xml
+++ b/app/src/main/res/values/dimens.xml
@@ -74,4 +74,13 @@
55dp
14sp
1dp
+
+
+ 16dp
+ 30dp
+ 20dp
+ 170dp
+ 30dp
+ 16dp
+ 40dp
\ No newline at end of file
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index 56cb4750d..806eed573 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -572,6 +572,24 @@
Savings Account Transaction
Transaction Period
Transaction Type
+ next
+
+
+ Welcome to Mifos Mobile
+ Your one stop solution to all banking problems
+
+
+ Some Features
+ Check your accounts, apply for loans, transfer money, see charges
+ ...
+
+ Permission
+ Please grant the permission
+
+ Done
+ You are all set!
+
+ Start
- English