package net.itsuha.android.zip4j;
import android.app.Activity;
import android.app.AlertDialog;
import android.app.Dialog;
import android.content.DialogInterface;
import android.content.DialogInterface.OnClickListener;
import android.os.Bundle;
import android.support.v4.app.DialogFragment;
import android.support.v4.app.Fragment;
import android.text.TextUtils;
import android.view.KeyEvent;
import android.view.LayoutInflater;
import android.view.View;
import android.view.WindowManager.LayoutParams;
import android.view.inputmethod.EditorInfo;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.TextView.OnEditorActionListener;
public class PasswordDialog extends DialogFragment {
@SuppressWarnings("unused")
private static final String TAG = PasswordDialog.class.getSimpleName();
public static final String ARGUMENT_ZIPENTRY = "zipentry";
private static final String KEY_PASSWORD = "password";
private PasswordDialogCallback mListener;
private ZipEntry mZipEntry;
private EditText mPasswordEdit;
@Override
public void onAttach(Activity activity) {
super.onAttach(activity);
if (activity instanceof PasswordDialogCallback) {
mListener = (PasswordDialogCallback) activity;
} else {
Fragment f = getTargetFragment();
if (f instanceof PasswordDialogCallback) {
mListener = (PasswordDialogCallback) f;
} else {
throw new ClassCastException();
}
}
mZipEntry = (ZipEntry) getArguments().get(ARGUMENT_ZIPENTRY);
}
/*
* (non-Javadoc)
* @see android.support.v4.app.DialogFragment#onCreateDialog(android.os.Bundle)
*/
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
LayoutInflater inflater = getActivity().getLayoutInflater();
View view = inflater.inflate(R.layout.zip_password_fragment, null, false);
EditText passwordEdit = (EditText) view.findViewById(R.id.zip_password_edittext);
mPasswordEdit = passwordEdit;
passwordEdit.requestFocus();
passwordEdit.setOnEditorActionListener(new OnEditorActionListener() {
@Override
public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
if (EditorInfo.IME_ACTION_DONE == actionId) {
mListener.onOkButtonPressed(mZipEntry, mPasswordEdit.getText().toString());
PasswordDialog.this.dismiss();
return true;
}
return false;
}
});
if (savedInstanceState != null) {
String password = savedInstanceState.getString(KEY_PASSWORD);
if (!TextUtils.isEmpty(password)) {
mPasswordEdit.setText(password);
}
}
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
builder.setTitle("Encrypted zip file");
builder.setPositiveButton(android.R.string.ok, new OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
mListener.onOkButtonPressed(mZipEntry, mPasswordEdit.getText().toString());
}
});
builder.setView(view);
Dialog d = builder.create();
d.getWindow().setSoftInputMode(LayoutParams.SOFT_INPUT_STATE_VISIBLE);
return d;
}
/*
* (non-Javadoc)
* @see android.support.v4.app.DialogFragment#onCancel(android.content.DialogInterface)
*/
@Override
public void onCancel(DialogInterface dialog) {
mListener.onCancel();
}
interface PasswordDialogCallback {
void onOkButtonPressed(ZipEntry entry, String password);
void onCancel();
}
}