res = FSDK.CreateTracker(mDraw.mTracker);
if (FSDK.FSDKE_OK != res) {
showErrorAndClose(“Error creating tracker”, res);
}
}
resetTrackerParameters();
this.getWindow().setBackgroundDrawable(new ColorDrawable()); //black background
setContentView(mPreview); //creates MainActivity contents
addContentView(mDraw, new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));
// Menu
LayoutInflater inflater = (LayoutInflater) this.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View buttons = inflater.inflate(R.layout.bottom_menu, null);
buttons.findViewById(R.id.helpButton).setOnClickListener(this);
buttons.findViewById(R.id.clearButton).setOnClickListener(this);
addContentView(buttons, new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT));
}
}
@Override
public void onClick(View view) {
if (view.getId() == R.id.helpButton) {
showMessage(help_text);
} else if (view.getId() == R.id.clearButton) {
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setMessage(“Are you sure to clear the memory?”)
.setPositiveButton(“Ok”, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int j) {
pauseProcessingFrames();
FSDK.ClearTracker(mDraw.mTracker);
resetTrackerParameters();
resumeProcessingFrames();
}
})
.setNegativeButton(“Cancel”, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int j) {
}
})
.setCancelable(false) // cancel with button only
.show();
}
}
@Override
public void onPause() {
super.onPause();
pauseProcessingFrames();
String templatePath = this.getApplicationInfo().dataDir + “/” + database;
FSDK.SaveTrackerMemoryToFile(mDraw.mTracker, templatePath);
}
@Override
public void onResume() {
super.onResume();
if (mIsFailed)
return;
resumeProcessingFrames();
}
private void pauseProcessingFrames() {
mDraw.mStopping = 1;
// It is essential to limit wait time, because mStopped will not be set to 0, if no frames are feeded to mDraw
for (int i = 0; i < 100; ++i) {
if (mDraw.mStopped != 0) break;
try {
Thread.sleep(10);
} catch (Exception ex) {
}
}
}
private void resumeProcessi