package com.james.status.dialogs;
import android.content.Context;
import android.os.Bundle;
import android.support.v7.app.AppCompatDialog;
import android.text.Editable;
import android.text.TextWatcher;
import android.view.View;
import android.widget.EditText;
import android.widget.TextView;
import com.james.status.R;
import com.james.status.utils.PreferenceUtils;
import java.io.File;
import java.util.List;
public class BackupCreatorDialog extends AppCompatDialog implements View.OnClickListener {
private OnBackupChangedListener listener;
private List<File> files;
private File file;
private EditText editText;
public BackupCreatorDialog(Context context, List<File> files, File file) {
super(context, R.style.AppTheme_Dialog);
setTitle(file != null ? R.string.preference_backups : R.string.action_new_backup);
this.files = files;
this.file = file;
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.dialog_backup_creator);
editText = (EditText) findViewById(R.id.name);
if (file != null)
editText.setText(file.getName().substring(0, file.getName().length() - 4));
else {
String name = "backup";
for (int i = 1; hasFile(name); i++) {
name = "backup" + i;
}
file = new File(PreferenceUtils.getBackupsDir(), name + ".txt");
editText.setText(name);
}
editText.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
String name = editText.getText().toString();
String replaced = name.replaceAll("[^a-zA-Z0-9.-]", "_");
if (!name.equals(replaced)) {
editText.setText(replaced);
return;
}
if (hasFile(name)) {
editText.setError(getContext().getString(R.string.error_name_exists));
file = null;
return;
}
file = new File(PreferenceUtils.getBackupsDir(), name + ".txt");
}
@Override
public void afterTextChanged(Editable s) {
}
});
TextView delete = (TextView) findViewById(R.id.delete);
delete.setText(file.exists() ? R.string.action_delete : R.string.action_cancel);
delete.setOnClickListener(this);
if (file.exists())
findViewById(R.id.restore).setOnClickListener(this);
else findViewById(R.id.restore).setVisibility(View.GONE);
TextView save = (TextView) findViewById(R.id.save);
save.setText(file.exists() ? R.string.action_save_backup : R.string.action_create_backup);
save.setOnClickListener(this);
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.save:
if (file != null) {
if (listener != null && PreferenceUtils.toFile(getContext(), file)) {
listener.onFileChanged(false);
dismiss();
}
} else editText.setError(getContext().getString(R.string.error_name_exists));
break;
case R.id.restore:
if (file != null && listener != null && file.exists() && PreferenceUtils.fromFile(getContext(), file)) {
listener.onFileChanged(true);
dismiss();
}
break;
case R.id.delete:
if (file != null && file.exists() && file.delete()) {
listener.onFileChanged(false);
dismiss();
}
break;
}
}
public void setListener(OnBackupChangedListener listener) {
this.listener = listener;
}
private boolean hasFile(String name) {
for (File file : files) {
String fileName = file.getName().substring(0, file.getName().length() - 4);
if (fileName.equals(name))
return true;
}
return false;
}
public interface OnBackupChangedListener {
void onFileChanged(boolean isSettingsChanged);
}
}