| /* |
| * Copyright (C) 2015 The Android Open Source Project |
| * |
| * Licensed under the Apache License, Version 2.0 (the "License"); |
| * you may not use this file except in compliance with the License. |
| * You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, software |
| * distributed under the License is distributed on an "AS IS" BASIS, |
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| * See the License for the specific language governing permissions and |
| * limitations under the License |
| */ |
| |
| package com.example.android.fingerprintdialog; |
| |
| import android.app.KeyguardManager; |
| import android.content.Context; |
| import android.content.SharedPreferences; |
| import android.hardware.fingerprint.FingerprintManager; |
| import android.preference.PreferenceManager; |
| import android.security.keystore.KeyProperties; |
| import android.view.inputmethod.InputMethodManager; |
| |
| import java.security.KeyStore; |
| import java.security.KeyStoreException; |
| import java.security.NoSuchAlgorithmException; |
| import java.security.NoSuchProviderException; |
| |
| import javax.crypto.Cipher; |
| import javax.crypto.KeyGenerator; |
| import javax.crypto.NoSuchPaddingException; |
| |
| import dagger.Module; |
| import dagger.Provides; |
| |
| /** |
| * Dagger module for Fingerprint APIs. |
| */ |
| @Module( |
| library = true, |
| injects = {MainActivity.class} |
| ) |
| public class FingerprintModule { |
| |
| private final Context mContext; |
| |
| public FingerprintModule(Context context) { |
| mContext = context; |
| } |
| |
| @Provides |
| public Context providesContext() { |
| return mContext; |
| } |
| |
| @Provides |
| public FingerprintManager providesFingerprintManager(Context context) { |
| return context.getSystemService(FingerprintManager.class); |
| } |
| |
| @Provides |
| public KeyguardManager providesKeyguardManager(Context context) { |
| return context.getSystemService(KeyguardManager.class); |
| } |
| |
| @Provides |
| public KeyStore providesKeystore() { |
| try { |
| return KeyStore.getInstance("AndroidKeyStore"); |
| } catch (KeyStoreException e) { |
| throw new RuntimeException("Failed to get an instance of KeyStore", e); |
| } |
| } |
| |
| @Provides |
| public KeyGenerator providesKeyGenerator() { |
| try { |
| return KeyGenerator.getInstance(KeyProperties.KEY_ALGORITHM_AES, "AndroidKeyStore"); |
| } catch (NoSuchAlgorithmException | NoSuchProviderException e) { |
| throw new RuntimeException("Failed to get an instance of KeyGenerator", e); |
| } |
| } |
| |
| @Provides |
| public Cipher providesCipher(KeyStore keyStore) { |
| try { |
| return Cipher.getInstance(KeyProperties.KEY_ALGORITHM_AES + "/" |
| + KeyProperties.BLOCK_MODE_CBC + "/" |
| + KeyProperties.ENCRYPTION_PADDING_PKCS7); |
| } catch (NoSuchAlgorithmException | NoSuchPaddingException e) { |
| throw new RuntimeException("Failed to get an instance of Cipher", e); |
| } |
| } |
| |
| @Provides |
| public InputMethodManager providesInputMethodManager(Context context) { |
| return (InputMethodManager) context.getSystemService(Context.INPUT_METHOD_SERVICE); |
| } |
| |
| @Provides |
| public SharedPreferences providesSharedPreferences(Context context) { |
| return PreferenceManager.getDefaultSharedPreferences(context); |
| } |
| } |