Browse Source

Fingerprint prompt on first login added

master
Preyea Regmi 5 years ago
parent
commit
e66b56fbca
  1. 48
      app/src/main/java/com/gmeremit/online/gmeremittance_native/base/BaseActivity.java
  2. 130
      app/src/main/java/com/gmeremit/online/gmeremittance_native/settings/view/FingerprintEnablePromptActivity.java
  3. 4
      app/src/main/res/drawable/avd_fingerprint_prompt.xml
  4. 18
      app/src/main/res/drawable/vd_fingerprint_prompt.xml
  5. 34
      app/src/main/res/layout/activity_fingerprint_enable_prompt.xml
  6. 3
      app/src/main/res/values/strings.xml

48
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);
}
}

130
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;
}
}
}

4
app/src/main/res/drawable/avd_fingerprint_prompt.xml

@ -35,8 +35,8 @@
android:valueTo="0"
android:valueType="floatType"/>
<objectAnimator
android:startOffset="500"
android:duration="383"
android:startOffset="650"
android:duration="500"
android:interpolator="@interpolator/fingerprint_on_0"
android:propertyName="trimPathEnd"
android:valueFrom="0.0"

18
app/src/main/res/drawable/vd_fingerprint_prompt.xml

@ -1,25 +1,25 @@
<vector
xmlns:android="http://schemas.android.com/apk/res/android"
android:name="vector"
android:width="5120dp"
android:height="5120dp"
android:width="118dp"
android:height="128dp"
android:viewportWidth="5120"
android:viewportHeight="5120">
<path
android:name="path_3"
android:pathData="M 752 4148 C 677 4120 596 4037 575 3968 C 562 3922 560 3707 560 2075 C 560 -13 552 177 644 84 C 734 -6 660 0 1752 0 C 2486 0 2721 3 2757 13 C 2816 28 2901 104 2938 174 L 2965 225 L 2968 1368 L 2970 2511 L 2941 2541 C 2901 2580 2859 2580 2819 2541 L 2790 2512 L 2790 1661 L 2790 810 L 1755 810 L 720 810 L 720 2080 L 720 3350 L 1460 3352 C 2191 3355 2200 3355 2220 3376 C 2231 3387 2243 3413 2247 3433 C 2252 3464 2248 3473 2222 3500 L 2192 3530 L 1455 3530 L 718 3530 L 722 3703 C 725 3853 728 3880 746 3914 C 787 3993 755 3990 1462 3990 C 1927 3990 2096 3993 2115 4002 C 2144 4015 2170 4057 2170 4089 C 2170 4100 2158 4122 2144 4139 L 2118 4170 L 1462 4169 C 825 4169 803 4168 752 4148 Z M 2788 446 C 2785 240 2781 227 2709 185 C 2676 165 2657 165 1755 165 L 835 165 L 800 187 C 733 228 726 253 722 453 L 718 630 L 1755 630 L 2791 630 L 2788 446 Z"
android:fillColor="#000000"
android:strokeColor="#00000000"/>
android:fillColor="#6A6A6A"
android:strokeColor="#6A6A6A"/>
<path
android:name="path_4"
android:pathData="M 1563 476 C 1505 450 1491 378 1535 335 C 1559 310 1560 310 1759 310 L 1958 310 L 1984 341 C 2018 381 2017 412 1981 452 L 1952 485 L 1773 487 C 1637 489 1588 487 1563 476 Z"
android:fillColor="#000000"
android:strokeColor="#00000000"/>
android:fillColor="#6A6A6A"
android:strokeColor="#6A6A6A"/>
<path
android:name="path_5"
android:pathData="M 1537 3822 C 1502 3786 1501 3741 1534 3703 L 1558 3675 L 1740 3672 C 1941 3668 1971 3674 1995 3721 C 2017 3763 2013 3788 1981 3821 L 1952 3850 L 1758 3850 L 1564 3850 L 1537 3822 Z"
android:fillColor="#000000"
android:strokeColor="#00000000"/>
android:fillColor="#6A6A6A"
android:strokeColor="#6A6A6A"/>
<group
android:name="checkcontainer"
@ -33,6 +33,6 @@
android:strokeAlpha="1"
android:trimPathEnd="0"
android:strokeWidth="170"
android:strokeColor="@color/bluebg"/>
android:strokeColor="@color/colorPrimary"/>
</group>
</vector>

34
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" />
<ImageView
android:id="@+id/avdFingerImage"
@ -58,14 +59,14 @@
android:gravity="center"
android:paddingStart="15dp"
android:paddingEnd="15dp"
android:text="You can later change your preference from"
android:text="@string/change_later_text"
android:textSize="18sp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/avdMobileImage" />
<com.gmeremit.online.gmeremittance_native.customwidgets.GmeTextView
android:id="@+id/textView4"
android:id="@+id/tv_manual"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="10dp"
@ -74,7 +75,6 @@
android:gravity="center"
android:paddingStart="15dp"
android:paddingEnd="15dp"
android:text="Setting >> Fingerprint Authentication"
android:textColor="@color/bluebg"
android:textSize="15sp"
app:layout_constraintEnd_toEndOf="parent"
@ -87,27 +87,27 @@
android:layout_height="50dp"
android:layout_gravity="center"
android:layout_marginStart="8dp"
android:layout_marginTop="60dp"
android:layout_marginEnd="8dp"
android:layout_marginBottom="28dp"
android:background="@drawable/red_morph_button_bg"
android:text="@string/use_fingerprint_text"
android:textAllCaps="false"
android:textColor="@color/white"
android:textSize="18sp"
app:layout_constraintBottom_toTopOf="@+id/txt_not_use_fingerprint"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent" />
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/tv_manual" />
<com.gmeremit.online.gmeremittance_native.customwidgets.GmeTextView
android:id="@+id/txt_not_use_fingerprint"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="10dp"
android:layout_marginEnd="10dp"
android:layout_marginBottom="52dp"
android:text="@string/biometric_noti_password_use_button_text"
android:layout_marginStart="8dp"
android:layout_marginTop="24dp"
android:layout_marginEnd="8dp"
android:text="@string/not_now_text"
android:textColor="@color/colorPrimary"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent" />
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/btn_use_fingerprint" />
</android.support.constraint.ConstraintLayout>

3
app/src/main/res/values/strings.xml

@ -479,6 +479,9 @@
<string name="order_type_text">Order Type</string>
<string name="use_fingerprint_text">Use Fingerprint</string>
<string name="biometric_noti_password_use_button_text">Continue only using password</string>
<string name="fingerprint_auth_enabled_text">Fingerprint authentication is enabled</string>
<string name="fingerprint_auth_prompt_title_text">Do you want to use your fingerprint instead of password?</string>
<string name="change_later_text">You can later change your preference from</string>
</resources>
Loading…
Cancel
Save