package com.android.activity;
import android.R.integer;
import android.app.Activity;
import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
import android.content.ServiceConnection;
import android.os.Bundle;
import android.os.Handler;
import android.os.IBinder;
import android.os.Message;
import android.os.RemoteException;
import android.os.SystemClock;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.ProgressBar;
import android.widget.TextView;
import android.widget.Toast;
import com.android.fingerprintcallbackdemo.R;
import com.android.service.FingerprintManager;
import com.android.aidl.*;
public class EnrollActivty extends Activity implements OnClickListener{
private String TAG="fenghaitao";
final public static int ENROLL_SUC = 1;
final public static int ENROLL_PROGRESS = 2;
final public static int ENROLL_CAPTURE_FAILD = 3;
final public static int ENROLL_CAPTURE_SUC = 4;
final public static int ENROLL_FINGER_REMOVE = 5;
private HorizontalProgressBarWithNumber mBar;
private ImageView enrollImage;
private TextView enrollToastTextView;
private Button addOthersFinger, fingerSuc;
private IFingerprintManager mFingerprintManager;
private int fid;
private final int ic_finger[] = { R.drawable.ic_ma_finger0, R.drawable.ic_ma_finger1, R.drawable.ic_ma_finger2,
R.drawable.ic_ma_finger3, R.drawable.ic_ma_finger4, R.drawable.ic_ma_finger5, R.drawable.ic_ma_finger6,
R.drawable.ic_ma_finger7, R.drawable.ic_ma_finger8, R.drawable.ic_ma_finger9, R.drawable.ic_ma_finger10,
R.drawable.ic_ma_finger11, R.drawable.ic_ma_finger12, R.drawable.ic_ma_finger13,
R.drawable.ic_ma_finger14, R.drawable.ic_ma_finger15, R.drawable.ic_ma_finger16};
private ServiceConnection connection = new ServiceConnection() {
@Override
public void onServiceDisconnected(ComponentName name) {
}
@Override
public void onServiceConnected(ComponentName name, IBinder service) {
mFingerprintManager = IFingerprintManager.Stub.asInterface(service);
Log.i(TAG, "=====FingerprintManager on service Connected===");
if(mFingerprintManager != null){
Log.i(TAG, "======SERVICE CONN ENROLL=====");
try {
mFingerprintManager.setOnEnrollListen(new MyEnrollListen());
mFingerprintManager.preEnroll();
mFingerprintManager.enroll();
Log.i(TAG, "======SERVICE CONN ENROLL END =====");
} catch (RemoteException e) {
e.printStackTrace();
}
}
}
};
private Handler mHandler = new Handler(){
public void handleMessage(android.os.Message msg) {
long currTime = SystemClock.currentThreadTimeMillis();
long pressTime ;
switch (msg.what) {
case ENROLL_SUC:
try {
mFingerprintManager.postEnroll();
} catch (RemoteException e) {
e.printStackTrace();
}
addOthersFinger.setVisibility(View.VISIBLE);
fingerSuc.setVisibility(View.VISIBLE);
fid = msg.arg1;
enrollToastTextView.setText("指纹已录入完成");
Toast.makeText(getApplicationContext(), "指纹录入成功", Toast.LENGTH_SHORT).show();
break;
case ENROLL_PROGRESS:
Log.d(TAG, "----------progress = "+msg.arg1);
mBar.setProgress(mBar.getMax()-msg.arg1);
showEnrollImage(16-msg.arg1);
break;
case ENROLL_CAPTURE_FAILD:
enrollToastTextView.setText("指纹采图失败请重按手指");
break;
case ENROLL_CAPTURE_SUC:
Log.i(TAG, "====采图成功====");
break;
case ENROLL_FINGER_REMOVE:
Log.i(TAG, "=======手指离开======");
enrollToastTextView.setText("请继续按手指");
break;
default:
break;
}
};
};
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.enroll_finger);
initView();
mBar.setMax(15);
mBar.setProgress(0);
Log.i(TAG, "=====Enroll Activity===");
Intent intent = new Intent();
intent.setClass(getApplicationContext(), FingerprintManager.class);
bindService(intent, connection, Context.BIND_AUTO_CREATE);
}
private void initView(){
mBar = (HorizontalProgressBarWithNumber) findViewById(R.id.progress_enroll);
enrollImage = (ImageView) findViewById(R.id.enroll_image);
enrollToastTextView = (TextView) findViewById(R.id.enroll_toast);
addOthersFinger =(Button) findViewById(R.id.add_others_finger);
fingerSuc =(Button) findViewById(R.id.suc_finger);
addOthersFinger.setOnClickListener(this);
fingerSuc.setOnClickListener(this);
addOthersFinger.setVisibility(View.INVISIBLE);
fingerSuc.setVisibility(View.INVISIBLE);
}
private void showEnrollImage(int progress){
enrollImage.setImageResource(ic_finger[progress]);
}
class MyEnrollListen extends IEnrollCallback.Stub{
@Override
public void onCaptureCompleted() throws RemoteException {
sendMessage(ENROLL_CAPTURE_SUC, 0);
}
@Override
public void onCaptureFailed(int code) throws RemoteException {
sendMessage(ENROLL_CAPTURE_FAILD, 0);
}
@Override
public void onProgress(int num) throws RemoteException {
Log.i(TAG, "===progress="+num);
sendMessage(ENROLL_PROGRESS, num);
}
@Override
public void onEnrolled(int fid) throws RemoteException {
Log.i(TAG, "=======on enroll ======");
sendMessage(ENROLL_SUC, fid);
}
@Override
public void onEnrollmentFailed() throws RemoteException {
}
@Override
public void onFingerRemoved() throws RemoteException {
sendMessage(ENROLL_FINGER_REMOVE, 0);
}
public void sendMessage(int type, int arg){
Message message = new Message();
message.what = type;
message.arg1 = arg;
mHandler.sendMessage(message);
}
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.add_others_finger:
try {
mFingerprintManager.enroll();
} catch (RemoteException e) {
e.printStackTrace();
}
mBar.setProgress(0);
break;
case R.id.suc_finger:
try {
mFingerprintManager.postEnroll();
} catch (RemoteException e) {
e.printStackTrace();
}
Intent intent = new Intent();
intent.putExtra("fid", fid);
setResult(1100, intent);
finish();
break;
default:
break;
}
}
@Override
protected void onStop() {
super.onStop();
Log.i(TAG, "--------------enroll activity onStop -------");
finish();
}
@Override
protected void onDestroy() {
super.onDestroy();
Log.i(TAG, "===enroll activity destroy == ");
unbindService(connection);
}
}