package com.openfarmanager.android.dialogs; import android.content.Context; import android.os.Bundle; import android.os.Handler; import android.text.Editable; import android.text.TextUtils; import android.text.TextWatcher; import android.view.View; import android.widget.CheckBox; import android.widget.CompoundButton; import android.widget.EditText; import android.widget.RadioGroup; import com.openfarmanager.android.App; import com.openfarmanager.android.R; import com.openfarmanager.android.core.archive.ArchiveUtils; import com.openfarmanager.android.fragments.MainPanel; /** * author: Vlad Namashko */ public class CreateArchiveDialog extends BaseFileDialog { private EditText mArchiveName; private CheckBox mCompression; private RadioGroup mArchiveType; private RadioGroup mCompressionType; private String mDefaultArchiveName; public CreateArchiveDialog(Context context, Handler handler, MainPanel inactivePanel, String defaultArchiveName) { super(context, handler, inactivePanel); mDefaultArchiveName = defaultArchiveName; } @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); mArchiveName = (EditText) mDialogView.findViewById(R.id.archive_name); mCompression = (CheckBox) mDialogView.findViewById(R.id.archive_compression); mArchiveType = (RadioGroup) mDialogView.findViewById(R.id.archive_types); mCompressionType = (RadioGroup) mDialogView.findViewById(R.id.archive_compression_types); mArchiveName.setText(mDefaultArchiveName); mCompression.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { @Override public void onCheckedChanged(CompoundButton compoundButton, boolean b) { setupVisibility(); } }); mArchiveType.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() { @Override public void onCheckedChanged(RadioGroup radioGroup, int i) { setupVisibility(); } }); mArchiveName.addTextChangedListener(new TextWatcher() { @Override public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) { } @Override public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) { mArchiveName.setError(null); } @Override public void afterTextChanged(Editable editable) { } }); mArchiveName.addTextChangedListener(new TextWatcher() { @Override public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) { } @Override public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) { mArchiveName.setError(null); } @Override public void afterTextChanged(Editable editable) { } }); setupVisibility(); } private void setupVisibility() { int selectedArchiveType = mArchiveType.getCheckedRadioButtonId(); mCompressionType.setVisibility(isCompressionEnabled() && selectedArchiveType != R.id.archive_type_zip ? View.VISIBLE : View.GONE); } private boolean isCompressionEnabled() { return mCompression.isChecked(); } private String getArchiveName() { return mArchiveName.getText().toString().trim(); } private ArchiveUtils.ArchiveType getArchiveType() { int archiveTypeId = mArchiveType.getCheckedRadioButtonId(); switch (archiveTypeId) { case R.id.archive_type_zip: default: return ArchiveUtils.ArchiveType.zip; case R.id.archive_type_tar: return ArchiveUtils.ArchiveType.tar; case R.id.archive_type_ar: return ArchiveUtils.ArchiveType.ar; case R.id.archive_type_jar: return ArchiveUtils.ArchiveType.jar; case R.id.archive_type_cpio: return ArchiveUtils.ArchiveType.cpio; } } private ArchiveUtils.CompressionEnum getCompression() { int compressionId = mCompressionType.getCheckedRadioButtonId(); switch (compressionId) { case R.id.archive_compression_gzip: default: return ArchiveUtils.CompressionEnum.gzip; case R.id.archive_compression_bzip2: return ArchiveUtils.CompressionEnum.bzip2; case R.id.archive_compression_xz: return ArchiveUtils.CompressionEnum.xz; } } @Override public int getContentView() { return R.layout.dialog_create_archive; } @Override protected boolean validate() { String archiveName = getArchiveName(); if (TextUtils.isEmpty(archiveName)) { mArchiveName.setError(getSafeString(R.string.error_enter_archive_name)); return false; } int selectedArchiveType = mArchiveType.getCheckedRadioButtonId(); if (selectedArchiveType == R.id.archive_type_ar) { // file name max symbols // if compression disabled - 16 - 3 (a.ar) // if compression enabled - 16 - (4 + compression extension) int maxLength = 16 - (isCompressionEnabled() ? ArchiveUtils.CompressionEnum.toString(getCompression()).length() + 4 : 3); if (mArchiveName.length() > maxLength) { mArchiveName.setError(getSafeString(R.string.error_ar_archive_too_long_name)); return false; } } return true; } @Override protected void execute() { mHandler.sendMessage(mHandler.obtainMessage(MainPanel.FILE_CREATE_ARCHIVE, new CreateArchiveResult(mInactivePanel, getArchiveName(), getArchiveType(), isCompressionEnabled(), isCompressionEnabled() && getArchiveType() != ArchiveUtils.ArchiveType.zip ? getCompression() : null))); } public class CreateArchiveResult { public MainPanel inactivePanel; public String archiveName; public ArchiveUtils.ArchiveType archiveType; public boolean isCompressionEnabled; public ArchiveUtils.CompressionEnum compression; public CreateArchiveResult(MainPanel panel, String name, ArchiveUtils.ArchiveType type, boolean isCompressionEnabled, ArchiveUtils.CompressionEnum compression) { inactivePanel = panel; archiveName = name; archiveType = type; this.isCompressionEnabled = isCompressionEnabled; this.compression = compression; } } }