Proyectos de Subversion Android Microlearning - Inconcert

Rev

Rev 9 | Ir a la última revisión | | Ultima modificación | Ver Log |

Rev Autor Línea Nro. Línea
8 gabriel 1
package com.cesams.twogetskills.inconcert.fragment;
2
 
3
import android.content.Intent;
4
import android.os.Bundle;
5
 
6
import androidx.annotation.NonNull;
7
import androidx.biometric.BiometricManager;
8
import androidx.biometric.BiometricPrompt;
9
import androidx.core.content.ContextCompat;
10
import androidx.fragment.app.Fragment;
11
 
12
import android.provider.Settings;
13
import android.util.Log;
14
import android.view.LayoutInflater;
15
import android.view.View;
16
import android.view.ViewGroup;
17
import android.widget.Button;
18
import android.widget.TextView;
19
import android.widget.Toast;
20
 
21
import com.cesams.twogetskills.inconcert.Constants;
22
import com.cesams.twogetskills.inconcert.R;
23
import com.cesams.twogetskills.inconcert.skeleton.ITwoGetSkills;
24
 
25
import java.util.concurrent.Executor;
26
 
27
/**
28
 * A simple {@link Fragment} subclass.
29
 * Use the {@link BiometricOptions#newInstance} factory method to
30
 * create an instance of this fragment.
31
 */
32
public class BiometricOptions extends Fragment {
33
 
34
    // TODO: Rename parameter arguments, choose names that match
35
    // the fragment initialization parameters, e.g. ARG_ITEM_NUMBER
36
    private static final String ARG_PARAM1 = "param1";
37
    private static final String ARG_PARAM2 = "param2";
38
    private Executor executor;
39
    private BiometricPrompt biometricPrompt;
40
    private BiometricPrompt.PromptInfo promptInfo;
41
    private ITwoGetSkills iTwoGetSkills;
42
    private static final int REQUEST_CODE = 8;
43
    private TextView username;
44
 
45
    // TODO: Rename and change types of parameters
46
    private String mParam1;
47
    private String mParam2;
48
 
49
    public BiometricOptions() {
50
        // Required empty public constructor
51
    }
52
 
53
    /**
54
     * Use this factory method to create a new instance of
55
     * this fragment using the provided parameters.
56
     *
57
     * @param param1 Parameter 1.
58
     * @param param2 Parameter 2.
59
     * @return A new instance of fragment BiometricOptions.
60
     */
61
    // TODO: Rename and change types and number of parameters
62
    public static BiometricOptions newInstance(String param1, String param2) {
63
        BiometricOptions fragment = new BiometricOptions();
64
        Bundle args = new Bundle();
65
        args.putString(ARG_PARAM1, param1);
66
        args.putString(ARG_PARAM2, param2);
67
        fragment.setArguments(args);
68
        return fragment;
69
    }
70
 
71
    @Override
72
    public void onCreate(Bundle savedInstanceState) {
73
        super.onCreate(savedInstanceState);
74
        if (getArguments() != null) {
75
            mParam1 = getArguments().getString(ARG_PARAM1);
76
            mParam2 = getArguments().getString(ARG_PARAM2);
77
        }
78
    }
79
 
80
    @Override
81
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
82
                             Bundle savedInstanceState) {
83
        // Inflate the layout for this fragment
84
        View view= inflater.inflate(R.layout.fragment_biometric_options, container, false);
85
        iTwoGetSkills = (ITwoGetSkills) getActivity();
86
        username = view.findViewById(R.id.textView21);
87
        username.setText("Hola "+(iTwoGetSkills.getPreference().getFirstName()));
88
 
89
        executor = ContextCompat.getMainExecutor(getActivity().getApplicationContext());
90
        biometricPrompt = new BiometricPrompt(getActivity(),
91
                executor, new BiometricPrompt.AuthenticationCallback() {
92
            @Override
93
            public void onAuthenticationError(int errorCode,
94
                                              @NonNull CharSequence errString) {
95
                super.onAuthenticationError(errorCode, errString);
96
                Toast.makeText(requireActivity().getApplicationContext(),
97
                                "Se canceló la operación", Toast.LENGTH_SHORT)
98
                        .show();
99
            }
100
 
101
            @Override
102
            public void onAuthenticationSucceeded(
103
                    @NonNull BiometricPrompt.AuthenticationResult result) {
104
                super.onAuthenticationSucceeded(result);
105
               /* Toast.makeText(requireActivity().getApplicationContext(),
106
                        "Authentication succeeded!", Toast.LENGTH_SHORT).show(); */
107
 
108
                getActivity().runOnUiThread(() -> {
109
 
110
                    iTwoGetSkills.getPreference().setBiometriclogin(true);
111
                    iTwoGetSkills.invokeFragment(Constants.IDX_FRAGMENT_WELCOME);
112
                    iTwoGetSkills.showNavigationAndToolbar();
113
                });
114
            }
115
 
116
            @Override
117
            public void onAuthenticationFailed() {
118
                super.onAuthenticationFailed();
119
                Toast.makeText(requireActivity().getApplicationContext(), "No se pudo comprobar tu identidad",
120
                                Toast.LENGTH_SHORT)
121
                        .show();
122
            }
123
        });
124
 
125
        promptInfo = new BiometricPrompt.PromptInfo.Builder()
126
                .setTitle("Iniciar sesión en OnRoom")
127
                .setSubtitle("Podés usar Fingerprint para iniciar sesión en OnRoom")
128
                .setNegativeButtonText("Usar contraseña")
129
                .build();
130
 
131
        // Prompt appears when user clicks "Log in".
132
        // Consider integrating with the keystore to unlock cryptographic operations,
133
        // if needed by your app.
134
        Button biometricLoginButton = view.findViewById(R.id.huellasignin);
135
        biometricLoginButton.setOnClickListener(viewp -> {
136
            biometricPrompt.authenticate(promptInfo);
137
        });
138
 
139
        Button omitbiometrics = view.findViewById(R.id.signin_button_sign_up2);
140
        omitbiometrics.setOnClickListener(new View.OnClickListener() {
141
            @Override
142
            public void onClick(View view) {
143
                getActivity().runOnUiThread(() -> {
144
 
145
                    iTwoGetSkills.invokeFragment(Constants.IDX_FRAGMENT_SIGNIN);
146
                   // iTwoGetSkills.showNavigationAndToolbar();
147
                });
148
            }
149
        });
150
 
151
        BiometricManager biometricManager = BiometricManager.from(getActivity().getApplicationContext());
152
        switch (biometricManager.canAuthenticate(BiometricManager.Authenticators.BIOMETRIC_STRONG)) {
153
            case BiometricManager.BIOMETRIC_SUCCESS:
154
                Log.d("MY_APP_TAG", "App can authenticate using biometrics.");
155
                break;
156
            case BiometricManager.BIOMETRIC_ERROR_NO_HARDWARE:
157
                Log.e("MY_APP_TAG", "No biometric features available on this device.");
158
                break;
159
            case BiometricManager.BIOMETRIC_ERROR_HW_UNAVAILABLE:
160
                Log.e("MY_APP_TAG", "Biometric features are currently unavailable.");
161
                break;
162
            case BiometricManager.BIOMETRIC_ERROR_NONE_ENROLLED:
163
                // Prompts the user to create credentials that your app accepts.
164
                final Intent enrollIntent = new Intent(Settings.ACTION_BIOMETRIC_ENROLL);
165
                enrollIntent.putExtra(Settings.EXTRA_BIOMETRIC_AUTHENTICATORS_ALLOWED,
166
                        BiometricManager.Authenticators.BIOMETRIC_STRONG);
167
                startActivityForResult(enrollIntent, REQUEST_CODE);
168
                break;
169
        }
170
        return view;
171
    }
172
}