Skip to content

Commit bb1a0b3

Browse files
committed
생체인증 card layout 수정, 생체인증 미 등록시 비밀번호 결제로 진행하도록 로직 추가
1 parent dfdaca9 commit bb1a0b3

File tree

9 files changed

+135
-117
lines changed

9 files changed

+135
-117
lines changed

bootpay/src/main/AndroidManifest.xml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,8 @@
88
<application
99
android:allowBackup="true"
1010
android:supportsRtl="true">
11-
<activity android:name=".bio.activity.BootpayBioActivity" android:screenOrientation="portrait" android:theme="@style/Theme.Transparent" />
12-
<activity android:name=".bio.activity.BootpayBioWebviewActivity" android:screenOrientation="portrait"/>
11+
<activity android:name=".bio.activity.BootpayBioActivity" android:screenOrientation="portrait" android:theme="@style/Theme.Transparent" android:windowSoftInputMode="adjustResize"/>
12+
<activity android:name=".bio.activity.BootpayBioWebviewActivity" android:screenOrientation="portrait" android:windowSoftInputMode="adjustResize"/>
1313
</application>
1414

1515
<uses-permission android:name="android.permission.USE_BIOMETRIC" />

bootpay/src/main/java/kr/co/bootpay/BootpayBuilder.java

Lines changed: 19 additions & 95 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
import android.os.Handler;
99
import android.os.Looper;
1010

11-
import androidx.fragment.app.FragmentTransaction;
11+
import androidx.biometric.BiometricManager;
1212

1313
import com.google.gson.Gson;
1414

@@ -17,8 +17,8 @@
1717

1818
import kr.co.bootpay.api.ApiPresenter;
1919
import kr.co.bootpay.api.ApiService;
20-
import kr.co.bootpay.bio.BootpayBioDialog;
2120
import kr.co.bootpay.bio.activity.BootpayBioActivity;
21+
import kr.co.bootpay.bio.activity.BootpayBioWebviewActivity;
2222
import kr.co.bootpay.bio.memory.CurrentBioRequest;
2323
import kr.co.bootpay.enums.Method;
2424
import kr.co.bootpay.enums.PG;
@@ -41,6 +41,8 @@
4141
import kr.co.bootpay.valid.PGAvailable;
4242
import kr.co.bootpay.valid.ValidRequest;
4343

44+
import static androidx.biometric.BiometricManager.BIOMETRIC_SUCCESS;
45+
4446
public class BootpayBuilder {
4547
private Context context;
4648

@@ -454,22 +456,10 @@ public void requestBio() {
454456
handler.post(new Runnable() {
455457
@Override
456458
public void run() {
457-
requestBioDialog();
459+
requestBioActivity();
458460
}
459461
});
460462
}
461-
// Handler handler = new Handler(Looper.getMainLooper());
462-
// handler.post(new Runnable() {
463-
// @Override
464-
// public void run() {
465-
// long current = System.currentTimeMillis();
466-
// if(current - CurrentBioRequest.getInstance().start_window_time > 2000) {
467-
// CurrentBioRequest.getInstance().start_window_time = current;
468-
// requestBioDialog();
469-
// }
470-
// }
471-
// });
472-
473463
}
474464

475465

@@ -511,7 +501,7 @@ public void onClick(
511501

512502
}
513503

514-
private void requestBioDialog() {
504+
private void requestBioActivity() {
515505
// bioDialog = BootpayBioDialog();
516506
if(close != null) CurrentBioRequest.getInstance().close = close;
517507
if(cancel != null) CurrentBioRequest.getInstance().cancel = cancel;
@@ -522,81 +512,17 @@ private void requestBioDialog() {
522512
isBioIntent = true;
523513
CurrentBioRequest.getInstance().request = request;
524514

525-
Intent intent = new Intent(context, BootpayBioActivity.class);
526-
// context.pen
527-
context.startActivity(intent);
528-
// context.ov
529-
// overridePendingTransition(R.anim.fade_in, R.anim.fade_out);
530-
531-
// bioDialog = new BootpayBioDialog().setRequest(request)
532-
// .setOnResponseListener(listener != null ? listener : new EventListener() {
533-
// @Override
534-
// public void onClose(String data) {
535-
// if(close != null) close.onClose(data);
536-
// }
537-
//
538-
// @Override
539-
// public void onReady(String data) {
540-
// if(ready != null ) ready.onReady(data);
541-
// }
542-
//
543-
// @Override
544-
// public void onError(String data) {
545-
// if(error != null ) error.onError(data);
546-
// }
547-
//
548-
// @Override
549-
// public void onCancel(String data) {
550-
// if(cancel != null ) cancel.onCancel(data);
551-
// }
552-
//
553-
// @Override
554-
// public void onConfirm(String data) {
555-
// if(confirm != null ) confirm.onConfirm(data);
556-
// }
557-
//
558-
// @Override
559-
// public void onDone(String data) {
560-
// if(done != null ) done.onDone(data);
561-
// }
562-
// });
563-
//
564-
// bioDialog.onCancel(new DialogInterface() {
565-
// @Override
566-
// public void cancel() {
567-
// if (bioDialog != null)
568-
// bioDialog.onDestroy();
569-
// bioDialog = null;
570-
// UserInfo.getInstance(context).finish();
571-
// Bootpay.finish();
572-
// }
573-
//
574-
// @Override
575-
// public void dismiss() {
576-
// if (bioDialog != null)
577-
// bioDialog.onDestroy();
578-
// bioDialog = null;
579-
// UserInfo.getInstance(context).finish();
580-
// Bootpay.finish();
581-
// }
582-
// });
583-
//// bioDialog.getatt
584-
//
585-
// if (bioDialog != null || fmx != null) {
586-
// try {
587-
// FragmentTransaction ft = fmx.beginTransaction();
588-
// ft.add(bioDialog, String.valueOf(System.currentTimeMillis()));
589-
// ft.commitAllowingStateLoss();
590-
//
591-
//// getFragmentManager().beginTransaction().add(mDialogFragment, "DialogFragment Tag").commitAllowingStateLoss();
592-
//
593-
//
594-
//
595-
//// bioDialog.show(fmx, "bootpay");
596-
// } catch (Exception e) {
597-
// e.printStackTrace();
598-
// }
599-
// }
515+
CurrentBioRequest.getInstance().bioActivity = null;
516+
CurrentBioRequest.getInstance().webActivity = null;
517+
518+
if(BiometricManager.from(context).canAuthenticate() == BIOMETRIC_SUCCESS) {
519+
Intent intent = new Intent(context, BootpayBioActivity.class);
520+
context.startActivity(intent);
521+
} else {
522+
CurrentBioRequest.getInstance().type = CurrentBioRequest.REQUEST_TYPE_PASSWORD_PAY;
523+
Intent intent = new Intent(context, BootpayBioWebviewActivity.class);
524+
context.startActivity(intent);
525+
}
600526
}
601527

602528

@@ -676,10 +602,8 @@ public void transactionConfirm(String data) {
676602
if(isBioIntent == true) {
677603
if(CurrentBioRequest.getInstance().bioActivity != null)
678604
CurrentBioRequest.getInstance().bioActivity.transactionConfirm(data);
679-
// String method_name= getIntent.getIntExtra("method_name");
680-
// Class<?> c = Class.forName("class name");
681-
// Method method = c.getDeclaredMethod (method_name, parameterTypes)
682-
// method.invoke (objectToInvokeOn, params)
605+
if(CurrentBioRequest.getInstance().webActivity != null)
606+
CurrentBioRequest.getInstance().webActivity.transactionConfirm(data);
683607
}
684608

685609
// if(bioDialog != null)

bootpay/src/main/java/kr/co/bootpay/bio/activity/BootpayBioActivity.java

Lines changed: 40 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@
2626

2727
import androidx.annotation.NonNull;
2828
import androidx.annotation.Nullable;
29+
import androidx.biometric.BiometricManager;
2930
import androidx.biometric.BiometricPrompt;
3031
import androidx.core.content.ContextCompat;
3132
import androidx.fragment.app.FragmentActivity;
@@ -65,6 +66,8 @@
6566
import kr.co.bootpay.pref.UserInfo;
6667
import kr.co.bootpay.rest.BootpayBioRestImplement;
6768

69+
import static androidx.biometric.BiometricManager.BIOMETRIC_SUCCESS;
70+
6871

6972
public class BootpayBioActivity extends FragmentActivity implements BootpayBioRestImplement {
7073

@@ -98,6 +101,23 @@ public class BootpayBioActivity extends FragmentActivity implements BootpayBioRe
98101

99102
ProgressDialog progress;
100103

104+
boolean doubleBackToExitPressedOnce = false;
105+
@Override
106+
public void onBackPressed() {
107+
if (doubleBackToExitPressedOnce) {
108+
super.onBackPressed();
109+
return;
110+
}
111+
this.doubleBackToExitPressedOnce = true;
112+
Toast.makeText(this, "'뒤로' 버튼을 한번 더 눌러주세요.", Toast.LENGTH_SHORT).show();
113+
new Handler().postDelayed(new Runnable() {
114+
@Override
115+
public void run() {
116+
doubleBackToExitPressedOnce = false;
117+
}
118+
}, 2000);
119+
}
120+
101121
@Override
102122
protected void onCreate(@Nullable Bundle savedInstanceState) {
103123
super.onCreate(savedInstanceState);
@@ -309,6 +329,18 @@ private String getComma(double value) {
309329
return myFormatter.format(value) + "원";
310330
}
311331

332+
public void clearCardPager() {
333+
this.data = data;
334+
Handler handler = new Handler(Looper.getMainLooper());
335+
handler.post(new Runnable() {
336+
@Override
337+
public void run() {
338+
cardPagerAdapter.removeData();
339+
cardPagerAdapter.notifyDataSetChanged();
340+
}
341+
});
342+
}
343+
312344
public void setCardPager(final BioWalletData data) {
313345
this.data = data;
314346
Handler handler = new Handler(Looper.getMainLooper());
@@ -319,7 +351,6 @@ public void run() {
319351
cardPagerAdapter.notifyDataSetChanged();
320352
}
321353
});
322-
323354
}
324355

325356
// @Override
@@ -342,6 +373,7 @@ void getEasyCardWalletList() {
342373
if(uuid == null || "".equals(uuid)) { Log.d("bootpay", "uuid 값이 없습니다"); return; }
343374
if(userToken == null || "".equals(userToken)) { Log.d("bootpay", "userToken 값이 없습니다"); return; }
344375

376+
clearCardPager();
345377
presenter.getEasyCardWallet(uuid, userToken);
346378
}
347379

@@ -362,6 +394,8 @@ void goBioPayRequest(String passwordToken) {
362394
otp = getOTPValue(key);
363395
}
364396

397+
request.getBoot_extra().getQuotas();
398+
365399
showProgress("결제 요청중");
366400
presenter.postEasyCardRequest(uuid, userToken, otp, passwordToken, bioWallet.wallet_id, "", CurrentBioRequest.getInstance().request.getPayload());
367401
}
@@ -565,7 +599,11 @@ void goBiometricAuth() {
565599
handler.post(new Runnable() {
566600
@Override
567601
public void run() {
568-
biometricPrompt.authenticate(promptInfo);
602+
if(BiometricManager.from(context).canAuthenticate() == BIOMETRIC_SUCCESS) {
603+
biometricPrompt.authenticate(promptInfo);
604+
} else {
605+
Toast.makeText(context, "생체인증 정보가 등록되지 않은 기기입니다.", Toast.LENGTH_SHORT).show();
606+
}
569607
}
570608
});
571609
}

bootpay/src/main/java/kr/co/bootpay/bio/activity/BootpayBioWebView.java

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
import android.os.Looper;
1313
import android.os.Message;
1414
import android.util.AttributeSet;
15+
import android.util.Log;
1516
import android.view.Gravity;
1617
import android.view.KeyEvent;
1718
import android.view.View;
@@ -41,6 +42,7 @@
4142
import static kr.co.bootpay.bio.memory.CurrentBioRequest.REQUEST_TYPE_ENABLE_DEVICE;
4243
import static kr.co.bootpay.bio.memory.CurrentBioRequest.REQUEST_TYPE_OTHER;
4344
import static kr.co.bootpay.bio.memory.CurrentBioRequest.REQUEST_TYPE_PASSWORD_CHANGE;
45+
import static kr.co.bootpay.bio.memory.CurrentBioRequest.REQUEST_TYPE_PASSWORD_PAY;
4446
import static kr.co.bootpay.bio.memory.CurrentBioRequest.REQUEST_TYPE_REGISTER_CARD;
4547
import static kr.co.bootpay.bio.memory.CurrentBioRequest.REQUEST_TYPE_VERIFY_PASSWORD;
4648
import static kr.co.bootpay.bio.memory.CurrentBioRequest.REQUEST_TYPE_VERIFY_PASSWORD_FOR_PAY;
@@ -127,7 +129,6 @@ void goBootpayRequest() {
127129
applicationId(),
128130
name(),
129131
pg(),
130-
// userPhone(),
131132
agree(),
132133
method(),
133134
methods(),
@@ -152,7 +153,7 @@ void goVerifyPasswordRequest() {
152153
// var msg = "이 기기에서 Touch ID 결제를 활성화합니다"
153154
// if(request_type == BootpayAuthWebView.REQUEST_TYPE_VERIFY_PASSWORD_FOR_PAY) { msg = "비밀번호 입력방식으로 결제를 진행합니다" }
154155

155-
String msg = "이 기기에서 Touch ID 결제를 활성화합니다";
156+
String msg = "이 기기에서 생체인증 결제를 활성화합니다";
156157
if(CurrentBioRequest.getInstance().type == REQUEST_TYPE_VERIFY_PASSWORD_FOR_PAY) msg = "비밀번호 입력방식으로 결제를 진행합니다";
157158

158159
loadParams(
@@ -233,7 +234,7 @@ public void onPageFinished(WebView view, String url) {
233234
goVerifyPasswordRequest();
234235
} else if(CurrentBioRequest.getInstance().type == REQUEST_TYPE_PASSWORD_CHANGE) {
235236
goChangePasswordRequest();
236-
} else if(CurrentBioRequest.getInstance().type == REQUEST_TYPE_OTHER) {
237+
} else if(CurrentBioRequest.getInstance().type == REQUEST_TYPE_OTHER || CurrentBioRequest.getInstance().type == REQUEST_TYPE_PASSWORD_PAY) {
237238
if (request == null) return;
238239
if(request.getBoot_extra() != null && request.getBoot_extra().getQuick_popup() == 1) {
239240
setQuickPopup();
@@ -503,12 +504,14 @@ private String name() {
503504

504505
private String method() {
505506
String method = request.getMethod();
507+
if(CurrentBioRequest.getInstance().type == REQUEST_TYPE_PASSWORD_PAY) return String.format(Locale.KOREA, "method:'%s'", "easy_card");
506508
if(method == null || "".equals(method)) return "";
507509
return String.format(Locale.KOREA, "method:'%s'", method);
508510
}
509511

510512
private String methods() {
511513
String methods = listToString(request.getMethods());
514+
if(CurrentBioRequest.getInstance().type == REQUEST_TYPE_PASSWORD_PAY) return "";
512515
if(methods == null || "".equals(methods)) return "";
513516
return String.format(Locale.KOREA, "methods:[%s]", methods);
514517
}
@@ -605,7 +608,7 @@ private void loadParams(String... script) {
605608
builder.append(";");
606609
String request = builder.toString();
607610

608-
// Log.d("bootpay request -----", request);
611+
Log.d("bootpay request -----", request);
609612

610613
load(request);
611614
}

0 commit comments

Comments
 (0)