package com.nightonke.blurlockviewsample;
import android.graphics.Typeface;
import android.os.Bundle;
import android.support.annotation.ColorInt;
import android.support.annotation.NonNull;
import android.support.v7.app.AppCompatActivity;
import android.text.InputType;
import android.view.View;
import android.view.Window;
import android.view.WindowManager;
import android.widget.ImageView;
import android.widget.Toast;
import com.afollestad.materialdialogs.DialogAction;
import com.afollestad.materialdialogs.MaterialDialog;
import com.afollestad.materialdialogs.color.ColorChooserDialog;
import com.nightonke.blurlockview.BlurLockView;
import com.nightonke.blurlockview.Directions.HideType;
import com.nightonke.blurlockview.Directions.ShowType;
import com.nightonke.blurlockview.Eases.EaseType;
import com.nightonke.blurlockview.Password;
public class ShowActivity extends AppCompatActivity
implements
View.OnClickListener,
BlurLockView.OnPasswordInputListener,
BlurLockView.OnLeftButtonClickListener,
ColorChooserDialog.ColorCallback {
private BlurLockView blurLockView;
private ImageView imageView1;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
WindowManager.LayoutParams.FLAG_FULLSCREEN);
setContentView(R.layout.activity_show);
imageView1 = (ImageView)findViewById(R.id.image_1);
blurLockView = (BlurLockView)findViewById(R.id.blurlockview);
// Set the view that need to be blurred
blurLockView.setBlurredView(imageView1);
// Set the password
blurLockView.setCorrectPassword(getIntent().getStringExtra("PASSWORD"));
blurLockView.setTitle(getIntent().getStringExtra("TITLE"));
blurLockView.setLeftButton(getIntent().getStringExtra("LEFT_BUTTON"));
blurLockView.setRightButton(getIntent().getStringExtra("RIGHT_BUTTON"));
blurLockView.setTypeface(getTypeface());
blurLockView.setType(getPasswordType(), false);
blurLockView.setOnLeftButtonClickListener(this);
blurLockView.setOnPasswordInputListener(this);
imageView1.setOnClickListener(this);
}
private Password getPasswordType() {
if ("PASSWORD_NUMBER".equals(getIntent().getStringExtra("PASSWORD_TYPE")))
return Password.NUMBER;
else if ("PASSWORD_NUMBER".equals(getIntent().getStringExtra("PASSWORD_TYPE")))
return Password.TEXT;
return Password.NUMBER;
}
private Typeface getTypeface() {
if ("SAN".equals(getIntent().getStringExtra("TYPEFACE")))
return Typeface.createFromAsset(getAssets(),"fonts/San Francisco Regular.ttf");
else if ("DEFAULT".equals(getIntent().getStringExtra("TYPEFACE")))
return Typeface.DEFAULT;
return Typeface.DEFAULT;
}
@Override
public void correct(String inputPassword) {
Toast.makeText(this,
R.string.password_correct,
Toast.LENGTH_SHORT).show();
blurLockView.hide(
getIntent().getIntExtra("HIDE_DURATION", 1000),
getHideType(getIntent().getIntExtra("HIDE_DIRECTION", 0)),
getEaseType(getIntent().getIntExtra("HIDE_EASE_TYPE", 30)));
}
@Override
public void incorrect(String inputPassword) {
Toast.makeText(this,
R.string.password_incorrect,
Toast.LENGTH_SHORT).show();
}
@Override
public void input(String inputPassword) {
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.image_1:
blurLockView.show(
getIntent().getIntExtra("SHOW_DURATION", 1000),
getShowType(getIntent().getIntExtra("SHOW_DIRECTION", 0)),
getEaseType(getIntent().getIntExtra("SHOW_EASE_TYPE", 30)));
break;
}
}
@Override
public void onClick() {
new MaterialDialog.Builder(this)
.title(R.string.operations)
.items(R.array.operations)
.itemsCallbackSingleChoice(-1, new MaterialDialog.ListCallbackSingleChoice() {
@Override
public boolean onSelection(MaterialDialog dialog, View view, int which, CharSequence text) {
switch (which) {
case 0:
blurLockView.show(
getIntent().getIntExtra("SHOW_DURATION", 1000),
getShowType(getIntent().getIntExtra("SHOW_DIRECTION", 0)),
getEaseType(getIntent().getIntExtra("SHOW_EASE_TYPE", 30)));
break;
case 1:
blurLockView.hide(
getIntent().getIntExtra("HIDE_DURATION", 1000),
getHideType(getIntent().getIntExtra("HIDE_DIRECTION", 0)),
getEaseType(getIntent().getIntExtra("HIDE_EASE_TYPE", 30)));
break;
case 2:
setBlurRadius();
break;
case 3:
setDownsamepleFactor();
break;
case 4:
setOverlayColor();
break;
case 5:
if (Password.NUMBER.equals(blurLockView.getType())) {
blurLockView.setType(Password.TEXT, true);
} else if (Password.TEXT.equals(blurLockView.getType())) {
blurLockView.setType(Password.NUMBER, true);
}
break;
}
return true;
}
})
.show();
}
private int radius;
private void setBlurRadius() {
new MaterialDialog.Builder(this)
.title(R.string.set_blur_radius_title)
.inputType(InputType.TYPE_CLASS_NUMBER)
.positiveText(R.string.ok)
.alwaysCallInputCallback()
.input(
"[1, 20]",
blurLockView.getBlurRadius() + "",
new MaterialDialog.InputCallback() {
@Override
public void onInput(MaterialDialog dialog, CharSequence input) {
radius = -1;
try {
radius = Integer.parseInt(String.valueOf(input));
} catch (NumberFormatException n) {
radius = -1;
}
if (!(1 <= radius && radius <= 20))
dialog.getActionButton(DialogAction.POSITIVE).setEnabled(false);
else
dialog.getActionButton(DialogAction.POSITIVE).setEnabled(true);
}
})
.onAny(new MaterialDialog.SingleButtonCallback() {
@Override
public void onClick(@NonNull MaterialDialog dialog, @NonNull DialogAction which) {
if (which == DialogAction.POSITIVE) {
blurLockView.setBlurRadius(radius);
}
}
})
.show();
}
private int downsamepleFactor;
private void setDownsamepleFactor() {
new MaterialDialog.Builder(this)
.title(R.string.set_downsample_factor_title)
.inputType(InputType.TYPE_CLASS_NUMBER)
.positiveText(R.string.ok)
.alwaysCallInputCallback()
.input(
"[1, 20]",
blurLockView.getDownsampleFactor() + "",
new MaterialDialog.InputCallback() {
@Override
public void onInput(MaterialDialog dialog, CharSequence input) {
downsamepleFactor = -1;
try {
downsamepleFactor = Integer.parseInt(String.valueOf(input));
} catch (NumberFormatException n) {
downsamepleFactor = -1;
}
if (!(1 <= downsamepleFactor && downsamepleFactor <= 20))
dialog.getActionButton(DialogAction.POSITIVE).setEnabled(false);
else
dialog.getActionButton(DialogAction.POSITIVE).setEnabled(true);
}
})
.onAny(new MaterialDialog.SingleButtonCallback() {
@Override
public void onClick(@NonNull MaterialDialog dialog, @NonNull DialogAction which) {
if (which == DialogAction.POSITIVE) {
blurLockView.setDownsampleFactor(downsamepleFactor);
}
}
})
.show();
}
private void setOverlayColor() {
new ColorChooserDialog.Builder(this, R.string.set_overlay_color)
.titleSub(R.string.set_overlay_color)
.doneButton(R.string.ok)
.preselect(blurLockView.getOverlayColor())
.show();
}
private ShowType getShowType(int p) {
ShowType showType = ShowType.FROM_TOP_TO_BOTTOM;
switch (p) {
case 0: showType = ShowType.FROM_TOP_TO_BOTTOM; break;
case 1: showType = ShowType.FROM_RIGHT_TO_LEFT; break;
case 2: showType = ShowType.FROM_BOTTOM_TO_TOP; break;
case 3: showType = ShowType.FROM_LEFT_TO_RIGHT; break;
case 4: showType = ShowType.FADE_IN; break;
}
return showType;
}
private HideType getHideType(int p) {
HideType hideType = HideType.FROM_TOP_TO_BOTTOM;
switch (p) {
case 0: hideType = HideType.FROM_TOP_TO_BOTTOM; break;
case 1: hideType = HideType.FROM_RIGHT_TO_LEFT; break;
case 2: hideType = HideType.FROM_BOTTOM_TO_TOP; break;
case 3: hideType = HideType.FROM_LEFT_TO_RIGHT; break;
case 4: hideType = HideType.FADE_OUT; break;
}
return hideType;
}
private EaseType getEaseType(int p) {
EaseType easeType = EaseType.Linear;
switch (p) {
case 0: easeType = EaseType.EaseInSine; break;
case 1: easeType = EaseType.EaseOutSine; break;
case 2: easeType = EaseType.EaseInOutSine; break;
case 3: easeType = EaseType.EaseInQuad; break;
case 4: easeType = EaseType.EaseOutQuad; break;
case 5: easeType = EaseType.EaseInOutQuad; break;
case 6: easeType = EaseType.EaseInCubic; break;
case 7: easeType = EaseType.EaseOutCubic; break;
case 8: easeType = EaseType.EaseInOutCubic; break;
case 9: easeType = EaseType.EaseInQuart; break;
case 10: easeType = EaseType.EaseOutQuart; break;
case 11: easeType = EaseType.EaseInOutQuart; break;
case 12: easeType = EaseType.EaseInQuint; break;
case 13: easeType = EaseType.EaseOutQuint; break;
case 14: easeType = EaseType.EaseInOutQuint; break;
case 15: easeType = EaseType.EaseInExpo; break;
case 16: easeType = EaseType.EaseOutExpo; break;
case 17: easeType = EaseType.EaseInOutExpo; break;
case 18: easeType = EaseType.EaseInCirc; break;
case 19: easeType = EaseType.EaseOutCirc; break;
case 20: easeType = EaseType.EaseInOutCirc; break;
case 21: easeType = EaseType.EaseInBack; break;
case 22: easeType = EaseType.EaseOutBack; break;
case 23: easeType = EaseType.EaseInOutBack; break;
case 24: easeType = EaseType.EaseInElastic; break;
case 25: easeType = EaseType.EaseOutElastic; break;
case 26: easeType = EaseType.EaseInOutElastic; break;
case 27: easeType = EaseType.EaseInBounce; break;
case 28: easeType = EaseType.EaseOutBounce; break;
case 29: easeType = EaseType.EaseInOutBounce; break;
case 30: easeType = EaseType.Linear; break;
}
return easeType;
}
@Override
public void onColorSelection(@NonNull ColorChooserDialog dialog, @ColorInt int selectedColor) {
blurLockView.setOverlayColor(selectedColor);
}
}