@TargetApi(Build.VERSION_CODES.HONEYCOMB) @Override public Dialog onCreateDialog(Bundle savedInstanceState) { MyExpenses ctx = (MyExpenses) getActivity(); Bundle args = getArguments(); Long accountId = args != null ? args.getLong(KEY_ACCOUNTID) : null; boolean allP = false, hasExported; String warningText; final String fileName; String now = new SimpleDateFormat("yyyMMdd-HHmmss", Locale.US).format(new Date()); if (accountId == null) { allP = true; warningText = getString(R.string.warning_reset_account_all); // potential Strict mode violation (currently exporting all accounts with different currencies // is not active in the UI) hasExported = Account.getHasExported(null); fileName = "export" + "-" + now; } else { Account a = Account.getInstanceFromDb(accountId); hasExported = ctx.hasExported(); if (accountId < 0L) { allP = true; currency = a.currency.getCurrencyCode(); fileName = "export" + "-" + currency + "-" + now; warningText = getString(R.string.warning_reset_account_all, " (" + currency + ")"); } else { fileName = Utils.escapeForFileName(a.label) + "-" + now; warningText = getString(R.string.warning_reset_account); } } LayoutInflater li = LayoutInflater.from(ctx); View view = li.inflate(R.layout.export_dialog, null); if (args.getBoolean(KEY_IS_FILTERED)) { view.findViewById(R.id.with_filter).setVisibility(View.VISIBLE); warningText = getString(R.string.warning_reset_account_matched); } dateFormatET = (EditText) view.findViewById(R.id.date_format); String dateFormatDefault = ((SimpleDateFormat) DateFormat.getDateInstance(DateFormat.SHORT)).toPattern(); String dateFormat = MyApplication.getInstance().getSettings().getString(PREFKEY_EXPORT_DATE_FORMAT, ""); if (dateFormat.equals("")) dateFormat = dateFormatDefault; else { try { new SimpleDateFormat(dateFormat, Locale.US); } catch (IllegalArgumentException e) { dateFormat = dateFormatDefault; } } dateFormatET.setText(dateFormat); dateFormatET.addTextChangedListener( new TextWatcher() { public void afterTextChanged(Editable s) { try { new SimpleDateFormat(s.toString(), Locale.US); mDialog.getButton(AlertDialog.BUTTON_POSITIVE).setEnabled(true); } catch (IllegalArgumentException e) { dateFormatET.setError(getString(R.string.date_format_illegal)); mDialog.getButton(AlertDialog.BUTTON_POSITIVE).setEnabled(false); } } public void beforeTextChanged(CharSequence s, int start, int count, int after) {} public void onTextChanged(CharSequence s, int start, int before, int count) {} }); fileNameET = (EditText) view.findViewById(R.id.file_name); fileNameET.setText(fileName); fileNameET.addTextChangedListener( new TextWatcher() { public void afterTextChanged(Editable s) { int error = 0; if (s.toString().length() > 0) { if (s.toString().indexOf('/') > -1) { error = R.string.slash_forbidden_in_filename; } } else { error = R.string.no_title_given; } mDialog.getButton(AlertDialog.BUTTON_POSITIVE).setEnabled(error == 0); if (error != 0) { fileNameET.setError(getString(error)); } } public void beforeTextChanged(CharSequence s, int start, int count, int after) {} public void onTextChanged(CharSequence s, int start, int before, int count) {} }); notYetExportedCB = (CheckBox) view.findViewById(R.id.export_not_yet_exported); deleteCB = (CheckBox) view.findViewById(R.id.export_delete); warningTV = (TextView) view.findViewById(R.id.warning_reset); String encoding = MyApplication.getInstance().getSettings().getString(PREFKEY_EXPORT_ENCODING, "UTF-8"); ((Spinner) view.findViewById(R.id.Encoding)) .setSelection( Arrays.asList(getResources().getStringArray(R.array.pref_qif_export_file_encoding)) .indexOf(encoding)); formatRBCSV = (RadioButton) view.findViewById(R.id.csv); String format = MyApplication.PrefKey.EXPORT_FORMAT.getString("QIF"); if (format.equals("CSV")) { formatRBCSV.setChecked(true); } separatorRBComma = (RadioButton) view.findViewById(R.id.comma); char separator = (char) MyApplication.getInstance() .getSettings() .getInt(ExportTask.KEY_DECIMAL_SEPARATOR, Utils.getDefaultDecimalSeparator()); if (separator == ',') { separatorRBComma.setChecked(true); } handleDeletedGroup = (RadioGroup) view.findViewById(R.id.handle_deleted); View.OnClickListener radioClickListener = new View.OnClickListener() { public void onClick(View v) { int mappedAction = v.getId() == R.id.create_helper ? Account.EXPORT_HANDLE_DELETED_CREATE_HELPER : Account.EXPORT_HANDLE_DELETED_UPDATE_BALANCE; if (handleDeletedAction == mappedAction) { handleDeletedAction = Account.EXPORT_HANDLE_DELETED_DO_NOTHING; handleDeletedGroup.clearCheck(); } else { handleDeletedAction = mappedAction; } } }; final RadioButton updateBalanceRadioButton = (RadioButton) view.findViewById(R.id.update_balance); final RadioButton createHelperRadioButton = (RadioButton) view.findViewById(R.id.create_helper); updateBalanceRadioButton.setOnClickListener(radioClickListener); createHelperRadioButton.setOnClickListener(radioClickListener); if (savedInstanceState == null) { handleDeletedAction = MyApplication.getInstance() .getSettings() .getInt( ExportTask.KEY_EXPORT_HANDLE_DELETED, Account.EXPORT_HANDLE_DELETED_DO_NOTHING); if (handleDeletedAction == Account.EXPORT_HANDLE_DELETED_UPDATE_BALANCE) { updateBalanceRadioButton.setChecked(true); } else if (handleDeletedAction == Account.EXPORT_HANDLE_DELETED_CREATE_HELPER) { createHelperRadioButton.setChecked(true); } } deleteCB.setOnCheckedChangeListener(this); if (hasExported) { notYetExportedCB.setChecked(true); notYetExportedCB.setVisibility(View.VISIBLE); } warningTV.setText(warningText); if (allP) { ((TextView) view.findViewById(R.id.file_name_label)).setText(R.string.folder_name); } AlertDialog.Builder builder = new AlertDialog.Builder(ctx) .setTitle(allP ? R.string.menu_reset_all : R.string.menu_reset) .setView(view) .setPositiveButton(android.R.string.ok, this) .setNegativeButton(android.R.string.cancel, null); if (Build.VERSION.SDK_INT < 11) builder.setIcon(android.R.drawable.ic_dialog_alert); else builder.setIconAttribute(android.R.attr.alertDialogIcon); mDialog = builder.create(); return mDialog; }
@Override public void onClick(DialogInterface dialog, int which) { Activity ctx = getActivity(); if (ctx == null) { return; } Bundle args = getArguments(); Long accountId = args != null ? args.getLong(KEY_ACCOUNTID) : null; AlertDialog dlg = (AlertDialog) dialog; String format = ((RadioGroup) dlg.findViewById(R.id.format)).getCheckedRadioButtonId() == R.id.csv ? "CSV" : "QIF"; String dateFormat = dateFormatET.getText().toString(); char decimalSeparator = ((RadioGroup) dlg.findViewById(R.id.separator)).getCheckedRadioButtonId() == R.id.dot ? '.' : ','; int handleDeleted; switch (handleDeletedGroup.getCheckedRadioButtonId()) { case R.id.update_balance: handleDeleted = Account.EXPORT_HANDLE_DELETED_UPDATE_BALANCE; break; case R.id.create_helper: handleDeleted = Account.EXPORT_HANDLE_DELETED_CREATE_HELPER; break; default: // -1 handleDeleted = Account.EXPORT_HANDLE_DELETED_DO_NOTHING; } String encoding = (String) ((Spinner) dlg.findViewById(R.id.Encoding)).getSelectedItem(); SharedPreferencesCompat.apply( MyApplication.getInstance() .getSettings() .edit() .putString(MyApplication.PrefKey.EXPORT_FORMAT.getKey(), format) .putString(PREFKEY_EXPORT_DATE_FORMAT, dateFormat) .putString(PREFKEY_EXPORT_ENCODING, encoding) .putInt(ExportTask.KEY_DECIMAL_SEPARATOR, decimalSeparator) .putInt(ExportTask.KEY_EXPORT_HANDLE_DELETED, handleDeleted)); boolean deleteP = deleteCB.isChecked(); boolean notYetExportedP = notYetExportedCB.isChecked(); String fileName = fileNameET.getText().toString(); Result appDirStatus = Utils.checkAppDir(); if (appDirStatus.success) { Bundle b = new Bundle(); b.putInt(ConfirmationDialogFragment.KEY_COMMAND_POSITIVE, R.id.START_EXPORT_COMMAND); if (accountId == null) { } else if (accountId > 0) { b.putLong(KEY_ROWID, accountId); } else { b.putString(KEY_CURRENCY, currency); } b.putString(TaskExecutionFragment.KEY_FORMAT, format); b.putBoolean(ExportTask.KEY_DELETE_P, deleteP); b.putBoolean(ExportTask.KEY_NOT_YET_EXPORTED_P, notYetExportedP); b.putString(TaskExecutionFragment.KEY_DATE_FORMAT, dateFormat); b.putChar(ExportTask.KEY_DECIMAL_SEPARATOR, decimalSeparator); b.putString(TaskExecutionFragment.KEY_ENCODING, encoding); b.putInt(ExportTask.KEY_EXPORT_HANDLE_DELETED, handleDeleted); b.putString(ExportTask.KEY_FILE_NAME, fileName); if (Utils.checkAppFolderWarning()) { ((ConfirmationDialogListener) getActivity()).onPositive(b); } else { b.putInt(ConfirmationDialogFragment.KEY_TITLE, R.string.dialog_title_attention); b.putString( ConfirmationDialogFragment.KEY_MESSAGE, getString(R.string.warning_app_folder_will_be_deleted_upon_uninstall)); b.putString( ConfirmationDialogFragment.KEY_PREFKEY, MyApplication.PrefKey.APP_FOLDER_WARNING_SHOWN.getKey()); ConfirmationDialogFragment.newInstance(b).show(getFragmentManager(), "APP_FOLDER_WARNING"); } } else { Toast.makeText(ctx, appDirStatus.print(ctx), Toast.LENGTH_LONG).show(); } }