package com.seafile.seadroid2.ui.dialog; import android.app.Dialog; import android.os.Bundle; import android.text.TextUtils; import android.view.LayoutInflater; import android.view.View; import android.view.WindowManager; import android.widget.EditText; import com.seafile.seadroid2.R; import com.seafile.seadroid2.SeafException; import com.seafile.seadroid2.account.Account; import com.seafile.seadroid2.data.DataManager; import com.seafile.seadroid2.ui.dialog.TaskDialog.Task; import com.seafile.seadroid2.util.Utils; class RenameTask extends TaskDialog.Task { String repoID; String path; String newName; boolean isdir; DataManager dataManager; public RenameTask(String repoID, String path, String newName, boolean isdir, DataManager dataManager) { this.repoID = repoID; this.path = path; this.newName = newName; this.isdir = isdir; this.dataManager = dataManager; } @Override protected void runTask() { if (newName.equals(Utils.fileNameFromPath(path))) { return; } try { dataManager.rename(repoID, path, newName, isdir); } catch (SeafException e) { setTaskException(e); } } } public class RenameFileDialog extends TaskDialog { private EditText fileNameText; private String repoID; private String path; private boolean isdir; private DataManager dataManager; private Account account; private static final String STATE_REPO_ID = "rename_task.repo_name"; private static final String STATE_PATH = "rename_task.repo_id"; private static final String STATE_ISDIR = "rename_task.account"; private static final String STATE_ACCOUNT = "rename_task.account"; public void init(String repoID, String path, boolean isdir, Account account) { this.repoID = repoID; this.path = path; this.isdir = isdir; this.account = account; } private DataManager getDataManager() { if (dataManager == null) { dataManager = new DataManager(account); } return dataManager; } public String getNewFileName() { return fileNameText.getText().toString().trim(); } @Override protected View createDialogContentView(LayoutInflater inflater, Bundle savedInstanceState) { View view = inflater.inflate(R.layout.dialog_new_file, null); fileNameText = (EditText) view.findViewById(R.id.new_file_name); if (savedInstanceState != null) { repoID = savedInstanceState.getString(STATE_REPO_ID); path = savedInstanceState.getString(STATE_PATH); isdir = savedInstanceState.getBoolean(STATE_ISDIR); account = (Account)savedInstanceState.getParcelable(STATE_ACCOUNT); } final String fileName = Utils.fileNameFromPath(path); if (!TextUtils.isEmpty(fileName)) { fileNameText.setText(fileName); fileNameText.setSelection(fileName.length()); } return view; } @Override protected void onDialogCreated(Dialog dialog) { String str = getActivity().getString(isdir ? R.string.rename_dir : R.string.rename_file); dialog.setTitle(str); dialog.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_VISIBLE); } @Override protected void onValidateUserInput() throws Exception { String fileName = fileNameText.getText().toString().trim(); if (fileName.length() == 0) { String err = getActivity().getResources().getString(R.string.file_name_empty); throw new Exception(err); } } @Override protected RenameTask prepareTask() { String newName = fileNameText.getText().toString().trim(); RenameTask task = new RenameTask(repoID, path, newName, isdir, getDataManager()); return task; } @Override protected void disableInput() { super.disableInput(); fileNameText.setEnabled(false); } @Override protected void enableInput() { super.enableInput(); fileNameText.setEnabled(true); } @Override protected void onSaveDialogContentState(Bundle outState) { outState.putString(STATE_REPO_ID, repoID); outState.putString(STATE_PATH, path); outState.putBoolean(STATE_ISDIR, isdir); outState.putParcelable(STATE_ACCOUNT, account); } }