diff --git a/app/src/main/java/com/gmeremit/online/gmeremittance_native/base/BaseActivity.java b/app/src/main/java/com/gmeremit/online/gmeremittance_native/base/BaseActivity.java index 4352e6c5..26284655 100644 --- a/app/src/main/java/com/gmeremit/online/gmeremittance_native/base/BaseActivity.java +++ b/app/src/main/java/com/gmeremit/online/gmeremittance_native/base/BaseActivity.java @@ -47,6 +47,7 @@ public class BaseActivity extends AppCompatActivity implements BaseContractInter if (!shouldEnableAppScreenShot) { getWindow().setFlags(WindowManager.LayoutParams.FLAG_SECURE, WindowManager.LayoutParams.FLAG_SECURE); } + overridePendingTransition(0,0); } @Override @@ -179,55 +180,20 @@ public class BaseActivity extends AppCompatActivity implements BaseContractInter i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); startActivity(i); -// boolean isDebuggable = (0 != (getApplicationInfo().flags & ApplicationInfo.FLAG_DEBUGGABLE)); -// if (!isDebuggable) { -// try { -// Intent i = getBaseContext().getPackageManager() -// .getLaunchIntentForPackage(getBaseContext().getPackageName()); -// i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); -// startActivity(i); -// } catch (NullPointerException ne) { -// -// } -// } -// else { -// new Handler().postDelayed(()->{ -// PackageManager packageManager = getPackageManager(); -// Intent intent = packageManager.getLaunchIntentForPackage(getPackageName()); -// ComponentName componentName = intent.getComponent(); -// Intent mainIntent = Intent.makeRestartActivityTask(componentName); -// startActivity(mainIntent); -// Runtime.getRuntime().exit(0); -// },500); -// -// } } @Override public void logout() { - /* - Since we have a child process forked at native level for anti debugging mechanism, restarting - app this way may cause unusual behavior with child process. So we kill the app process directly and logout. - */ - -// boolean isDebuggable = (0 != (getApplicationInfo().flags & ApplicationInfo.FLAG_DEBUGGABLE)); -// if (!isDebuggable) { -// Intent intent = new Intent(getApplicationContext(), SplashScreen.class); -// intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK); -// startActivity(intent); -// } else { -// PackageManager packageManager = getPackageManager(); -// Intent intent = packageManager.getLaunchIntentForPackage(getPackageName()); -// ComponentName componentName = intent.getComponent(); -// Intent mainIntent = Intent.makeRestartActivityTask(componentName); -// startActivity(mainIntent); -// Runtime.getRuntime().exit(0); -// } + Intent intent = new Intent(getApplicationContext(), SplashScreen.class); intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK); startActivity(intent); } - + @Override + public void finish() { + super.finish(); + overridePendingTransition(0,0); + } } diff --git a/app/src/main/java/com/gmeremit/online/gmeremittance_native/settings/view/FingerprintEnablePromptActivity.java b/app/src/main/java/com/gmeremit/online/gmeremittance_native/settings/view/FingerprintEnablePromptActivity.java index 04819bfe..2e117589 100644 --- a/app/src/main/java/com/gmeremit/online/gmeremittance_native/settings/view/FingerprintEnablePromptActivity.java +++ b/app/src/main/java/com/gmeremit/online/gmeremittance_native/settings/view/FingerprintEnablePromptActivity.java @@ -1,17 +1,24 @@ package com.gmeremit.online.gmeremittance_native.settings.view; +import android.content.SharedPreferences; import android.os.Handler; import android.support.graphics.drawable.AnimatedVectorDrawableCompat; -import android.support.v7.app.AppCompatActivity; import android.os.Bundle; +import android.view.View; +import android.widget.Button; import android.widget.ImageView; +import android.widget.TextView; +import com.gmeremit.online.gmeremittance_native.GmeApplication; import com.gmeremit.online.gmeremittance_native.R; +import com.gmeremit.online.gmeremittance_native.base.BaseActivity; +import com.gmeremit.online.gmeremittance_native.base.PrefKeys; +import com.gmeremit.online.gmeremittance_native.customwidgets.CustomAlertDialog; import butterknife.BindView; import butterknife.ButterKnife; -public class FingerprintEnablePromptActivity extends AppCompatActivity { +public class FingerprintEnablePromptActivity extends BaseActivity implements View.OnClickListener { private AnimatedVectorDrawableCompat mobileBg; private AnimatedVectorDrawableCompat fingerBg; @@ -22,6 +29,15 @@ public class FingerprintEnablePromptActivity extends AppCompatActivity { @BindView(R.id.avdFingerImage) ImageView avdFingerImageView; + @BindView(R.id.btn_use_fingerprint) + Button btnUseFingerPrint; + + @BindView(R.id.txt_not_use_fingerprint) + TextView notNow; + + @BindView(R.id.tv_manual) + TextView tv_manual; + private boolean isAnimationPlayed = false; @Override @@ -33,43 +49,123 @@ public class FingerprintEnablePromptActivity extends AppCompatActivity { performDefaultAction(savedInstanceState); } - private void init() - { + + @Override + protected void onStart() { + super.onStart(); + btnUseFingerPrint.setOnClickListener(this); + notNow.setOnClickListener(this); + } + + @Override + protected void onStop() { + super.onStop(); + } + + private void init() { mobileBg = AnimatedVectorDrawableCompat.create(this, R.drawable.avd_fingerprint_prompt); fingerBg = AnimatedVectorDrawableCompat.create(this, R.drawable.avd_fingerprint_off_to_on); } - void performDefaultAction(Bundle savedInstance) + void performDefaultAction(Bundle savedInstance) { + playFingerPrintAnimation(0); + + String manual = getString(R.string.setting_text) + " >> "+ getString(R.string.fingerprint_auth_text); + + tv_manual.setText(manual); + + } + + private boolean isBiometricDataAvailable() { + SharedPreferences sp = GmeApplication.getStorage(); + return sp.getString(PrefKeys.APP_USER_ID_SECRET_KEY, null) != null && sp.getString(PrefKeys.APP_USER_SECRET_KEY, null) != null&&sp.getString(PrefKeys.APP_SECRET_KEY,null)!=null; + } + + private void showFingerprintAuthDialog() { - avdMobileImageView.setImageDrawable(mobileBg); + if (isBiometricDataAvailable()) { + FingerPrintAuthPromptDialog fingerPrintAuthPromptDialog = new FingerPrintAuthPromptDialog(); + fingerPrintAuthPromptDialog.setFingerprintAuthListener(true, new FingerPrintAuthPromptDialog.FingerprintAuthListener() { + @Override + public void onFingerPrintAuthenticated(boolean userAction) { + + GmeApplication.getStorage().edit().putBoolean(PrefKeys.APP_FINGER_PRINT_ENABLED, userAction).apply(); + + showToastMessage(getString(R.string.fingerprint_auth_enabled_text)); + finish(); + if (fingerPrintAuthPromptDialog != null) + fingerPrintAuthPromptDialog.dismiss(); + } + + @Override + public void onFingerPrintInvalidatedBySystem() { + + + if (fingerPrintAuthPromptDialog != null) + fingerPrintAuthPromptDialog.dismiss(); + + new Handler().postDelayed(() -> { + GmeApplication.getStorage().edit().clear().apply(); + showPopUpMessage(getString(R.string.fingerprint_changed_externally), CustomAlertDialog.AlertType.ALERT, + alert -> { + logout(); + }); + }, 200); + } + }); + + if (!fingerPrintAuthPromptDialog.isAdded()) + fingerPrintAuthPromptDialog.show(getSupportFragmentManager(), "FingerPrintScannerPromptDialog"); + } else { + showPopUpMessage(getString(R.string.fingerprint_changed_externally), CustomAlertDialog.AlertType.ALERT, + alert -> { + GmeApplication.getStorage().edit().clear().apply(); + logout(); + }); + } } - public void playAnimation(long delay) { - if(delay<0) - delay=0; + + public void playFingerPrintAnimation(long delay) { + if (delay < 0) + delay = 0; new Handler().postDelayed(() -> { try { if (!isAnimationPlayed) { - if (mobileBg != null && !mobileBg.isRunning()) - mobileBg.start(); if (fingerBg != null && !fingerBg.isRunning()) { - avdFingerImageView.setImageDrawable(fingerBg); - fingerBg.start(); + { + avdFingerImageView.setImageDrawable(fingerBg); + fingerBg.start(); + } + if (mobileBg != null && !mobileBg.isRunning()) { + avdMobileImageView.setImageDrawable(mobileBg); + mobileBg.start(); + } + } isAnimationPlayed = true; } } catch (Exception e) { - throw e; + throw e; } }, delay); } + @Override - protected void onResume() { - super.onResume(); - playAnimation(300); + public void onClick(View v) { + switch(v.getId()) { + + case R.id.btn_use_fingerprint : + showFingerprintAuthDialog(); + break; + + case R.id.txt_not_use_fingerprint : + finish(); + break; + } } } diff --git a/app/src/main/res/drawable/avd_fingerprint_prompt.xml b/app/src/main/res/drawable/avd_fingerprint_prompt.xml index 25340b16..2773ef92 100644 --- a/app/src/main/res/drawable/avd_fingerprint_prompt.xml +++ b/app/src/main/res/drawable/avd_fingerprint_prompt.xml @@ -35,8 +35,8 @@ android:valueTo="0" android:valueType="floatType"/> + android:fillColor="#6A6A6A" + android:strokeColor="#6A6A6A"/> + android:fillColor="#6A6A6A" + android:strokeColor="#6A6A6A"/> + android:fillColor="#6A6A6A" + android:strokeColor="#6A6A6A"/> + android:strokeColor="@color/colorPrimary"/> diff --git a/app/src/main/res/layout/activity_fingerprint_enable_prompt.xml b/app/src/main/res/layout/activity_fingerprint_enable_prompt.xml index d1005e15..d38bf565 100644 --- a/app/src/main/res/layout/activity_fingerprint_enable_prompt.xml +++ b/app/src/main/res/layout/activity_fingerprint_enable_prompt.xml @@ -10,11 +10,11 @@ android:id="@+id/gmeTextView5" android:layout_width="wrap_content" android:layout_height="wrap_content" - android:layout_marginStart="10dp" - android:layout_marginEnd="10dp" + android:paddingStart="10dp" + android:paddingEnd="10dp" android:layout_marginBottom="64dp" android:gravity="center" - android:text="Do you want to use fingerprint instead of password?" + android:text="@string/fingerprint_auth_prompt_title_text" android:textColor="@color/colorAccent" android:textSize="24sp" app:layout_constraintBottom_toTopOf="@+id/avdMobileImage" @@ -30,11 +30,12 @@ android:layout_marginTop="32dp" android:layout_marginEnd="8dp" android:layout_marginBottom="8dp" - app:layout_constraintBottom_toBottomOf="@+id/txt_not_use_fingerprint" + app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintEnd_toEndOf="parent" + app:layout_constraintHorizontal_bias="0.53" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent" - app:layout_constraintVertical_bias="0.35000002" /> + app:layout_constraintVertical_bias="0.32" /> + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintTop_toBottomOf="@+id/tv_manual" /> + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintTop_toBottomOf="@+id/btn_use_fingerprint" /> diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 25ac189b..1fcae46e 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -479,6 +479,9 @@ Order Type Use Fingerprint Continue only using password + Fingerprint authentication is enabled + Do you want to use your fingerprint instead of password? + You can later change your preference from