package com.seafile.seadroid2.ui.dialog; import android.app.Dialog; import android.os.Bundle; 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; class RenameRepoTask extends TaskDialog.Task { private String mRepoID; private String mCurrentName; private String mNewName; private DataManager mDataManager; RenameRepoTask(String repoID, String currentName, String newName, DataManager dataManager) { mRepoID = repoID; mCurrentName = currentName; mNewName = newName; mDataManager = dataManager; } @Override protected void runTask() { if (mNewName.equals(mCurrentName)) { return; } try { mDataManager.renameRepo(mRepoID, mNewName); } catch (SeafException e) { setTaskException(e); } } } public class RenameRepoDialog extends TaskDialog { private final static String STATE_REPO_ID = "rename_repo_dialog.repo_id"; private final static String STATE_CURRENT_NAME = "rename_repo_dialog.current_name"; private final static String STATE_ACCOUNT = "rename_repo_dialog.account"; private String mRepoID; private String mCurrentName; private Account mAccount; private DataManager mDataManager; private EditText mRepoNameText; public void init(String repoID, String currentName, Account account) { mRepoID = repoID; mCurrentName = currentName; mAccount = account; } private DataManager getDataManager() { if (mDataManager == null) { mDataManager = new DataManager(mAccount); } return mDataManager; } private String getNewName() { return mRepoNameText.getText().toString().trim(); } @Override protected View createDialogContentView(LayoutInflater inflater, Bundle savedInstanceState) { View view = inflater.inflate(R.layout.dialog_new_file, null); mRepoNameText = (EditText) view.findViewById(R.id.new_file_name); if (savedInstanceState != null) { mRepoID = savedInstanceState.getString(STATE_REPO_ID); mCurrentName = savedInstanceState.getString(STATE_CURRENT_NAME); mAccount = savedInstanceState.getParcelable(STATE_ACCOUNT); } mRepoNameText.setText(mCurrentName); mRepoNameText.setSelection(mCurrentName.length()); return view; } @Override protected void onDialogCreated(Dialog dialog) { super.onDialogCreated(dialog); dialog.setTitle(R.string.rename_repo); dialog.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_VISIBLE); } @Override protected void onSaveDialogContentState(Bundle outState) { super.onSaveDialogContentState(outState); outState.putString(STATE_REPO_ID, mRepoID); outState.putString(STATE_CURRENT_NAME, mCurrentName); outState.putParcelable(STATE_ACCOUNT, mAccount); } @Override protected void onValidateUserInput() throws Exception { super.onValidateUserInput(); if (getNewName().length() == 0) { throw new Exception(getResources().getString(R.string.repo_name_empty)); } } @Override protected void disableInput() { super.disableInput(); mRepoNameText.setEnabled(false); } @Override protected void enableInput() { super.enableInput(); mRepoNameText.setEnabled(true); } @Override protected Task prepareTask() { return new RenameRepoTask(mRepoID, mCurrentName, getNewName(), getDataManager()); } }