AuthActivity

 avatar
Trrieu112233
java
25 days ago
3.3 kB
7
Indexable
package com.example.testapp2;

import android.app.Activity;
import android.content.Intent;
import android.hardware.biometrics.BiometricPrompt;
import android.os.Bundle;
import android.os.CancellationSignal;
import android.service.autofill.Dataset;
import android.util.Log;
import android.view.autofill.AutofillId;
import android.view.autofill.AutofillManager;
import android.view.autofill.AutofillValue;
import android.widget.Toast;

public class AuthActivity extends Activity {
    private static final String TAG = "TEE_AuthActivity";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        if(android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.Q) {
            BiometricPrompt biometricPrompt = new BiometricPrompt.Builder(this)
                    .setTitle("Xác thực TEE")
                    .setSubtitle("Vui lòng quét vân tay hoặc dùng mật khẩu máy")
                    .setDeviceCredentialAllowed(true)
                    .build();
            CancellationSignal cancellationSignal = new CancellationSignal();
            biometricPrompt.authenticate(cancellationSignal, getMainExecutor(), new BiometricPrompt.AuthenticationCallback() {
                @Override
                public void onAuthenticationSucceeded(BiometricPrompt.AuthenticationResult result) {
                    super.onAuthenticationSucceeded(result);
                    unlockAndReturnPassword();
                }
                @Override
                public void onAuthenticationFailed(){
                    super.onAuthenticationFailed();
                    Toast.makeText(AuthActivity.this, "Xác thực thất bại", Toast.LENGTH_SHORT).show();
                }
                @Override
                public void onAuthenticationError(int errorCode, CharSequence errString){
                    Log.e(TAG, "Biometric error: " + errString);
                    setResult(RESULT_CANCELED);
                    finish();
                }
            });
        } else {
            unlockAndReturnPassword();
        }
    }

    private void unlockAndReturnPassword(){
        Intent intent = getIntent();
        String pkg = intent.getStringExtra("EXTRA_PKG");
        String user = intent.getStringExtra("EXTRA_USER");
        AutofillId usernameId = intent.getParcelableExtra("EXTRA_USER_ID");
        AutofillId passwordId = intent.getParcelableExtra("EXTRA_PASSWORD_ID");

        Log.d(TAG, "Biometric authen success. Fletching pass from TEE");
        String pass = new ExecuteCommandTask(this, true).executeSync("get", pkg, user);
        if(pass != null && !pass.isEmpty()){
            Dataset unlockedDataset = new Dataset.Builder()
                    .setValue(usernameId, AutofillValue.forText(user))
                    .setValue(passwordId, AutofillValue.forText(pass.trim()))
                    .build();

            Intent replyIntent = new Intent();
            replyIntent.putExtra(AutofillManager.EXTRA_AUTHENTICATION_RESULT, unlockedDataset);
            setResult(RESULT_OK, replyIntent);
        } else {
            setResult(RESULT_CANCELED);
        }
        finish();
    }
}
Editor is loading...
Leave a Comment