import org.apache.http.client.utils.URLEncodedUtils;\r
import org.apache.http.message.BasicNameValuePair;\r
import org.apache.http.protocol.HTTP;\r
+import org.apache.jackrabbit.webdav.client.methods.DavMethodBase;\r
+import org.apache.jackrabbit.webdav.client.methods.MoveMethod;\r
import org.apache.jackrabbit.webdav.client.methods.PropFindMethod;\r
import org.json.JSONException;\r
import org.json.JSONObject;\r
import android.content.ActivityNotFoundException;\r
import android.content.BroadcastReceiver;\r
import android.content.Context;\r
+import android.content.DialogInterface;\r
+import android.content.DialogInterface.OnDismissListener;\r
import android.content.Intent;\r
import android.content.IntentFilter;\r
import android.graphics.Bitmap;\r
import android.webkit.MimeTypeMap;\r
import android.widget.Button;\r
import android.widget.CheckBox;\r
+import android.widget.EditText;\r
import android.widget.ImageView;\r
import android.widget.TextView;\r
import android.widget.Toast;\r
\r
+import com.actionbarsherlock.app.SherlockDialogFragment;\r
import com.actionbarsherlock.app.SherlockFragment;\r
\r
import eu.alefzero.owncloud.AccountUtils;\r
return super.getView() == null ? mView : super.getView();\r
}\r
\r
+ \r
+ \r
@Override\r
public void onClick(View v) {\r
- if (v.getId() == R.id.fdDownloadBtn) {\r
- //Toast.makeText(getActivity(), "Downloading", Toast.LENGTH_LONG).show();\r
- Intent i = new Intent(getActivity(), FileDownloader.class);\r
- i.putExtra(FileDownloader.EXTRA_ACCOUNT, mAccount);\r
- i.putExtra(FileDownloader.EXTRA_REMOTE_PATH, mFile.getRemotePath());\r
- i.putExtra(FileDownloader.EXTRA_FILE_PATH, mFile.getURLDecodedRemotePath());\r
- i.putExtra(FileDownloader.EXTRA_FILE_SIZE, mFile.getFileLength());\r
- v.setEnabled(false);\r
- getActivity().startService(i);\r
- } else if (v.getId() == R.id.fdKeepInSync) {\r
- CheckBox cb = (CheckBox) getView().findViewById(R.id.fdKeepInSync);\r
- mFile.setKeepInSync(cb.isChecked());\r
- FileDataStorageManager fdsm = new FileDataStorageManager(mAccount, getActivity().getApplicationContext().getContentResolver());\r
- fdsm.saveFile(mFile);\r
- if (mFile.keepInSync() && !mFile.isDownloaded()) {\r
- onClick(getView().findViewById(R.id.fdDownloadBtn));\r
+ switch (v.getId()) {\r
+ case R.id.fdDownloadBtn: {\r
+ //Toast.makeText(getActivity(), "Downloading", Toast.LENGTH_LONG).show();\r
+ Intent i = new Intent(getActivity(), FileDownloader.class);\r
+ i.putExtra(FileDownloader.EXTRA_ACCOUNT, mAccount);\r
+ i.putExtra(FileDownloader.EXTRA_REMOTE_PATH, mFile.getRemotePath());\r
+ i.putExtra(FileDownloader.EXTRA_FILE_PATH, mFile.getURLDecodedRemotePath());\r
+ i.putExtra(FileDownloader.EXTRA_FILE_SIZE, mFile.getFileLength());\r
+ v.setEnabled(false);\r
+ getActivity().startService(i);\r
+ break;\r
+ }\r
+ case R.id.fdKeepInSync: {\r
+ CheckBox cb = (CheckBox) getView().findViewById(R.id.fdKeepInSync);\r
+ mFile.setKeepInSync(cb.isChecked());\r
+ FileDataStorageManager fdsm = new FileDataStorageManager(mAccount, getActivity().getApplicationContext().getContentResolver());\r
+ fdsm.saveFile(mFile);\r
+ if (mFile.keepInSync() && !mFile.isDownloaded()) {\r
+ onClick(getView().findViewById(R.id.fdDownloadBtn));\r
+ }\r
+ break;\r
}\r
- }/* else if (v.getId() == R.id.fdShareBtn) {\r
+ case R.id.fdRenameBtn: {\r
+ EditNameFragment dialog = EditNameFragment.newInstance(mFile.getFileName());\r
+ dialog.show(getFragmentManager(), "nameeditdialog");\r
+ dialog.setOnDismissListener(this);\r
+ break;\r
+ }\r
+ default:\r
+ Log.e(TAG, "Incorrect view clicked!");\r
+ }\r
+ \r
+ /* else if (v.getId() == R.id.fdShareBtn) {\r
Thread t = new Thread(new ShareRunnable(mFile.getRemotePath()));\r
t.start();\r
}*/\r
cb.setChecked(mFile.keepInSync());\r
cb.setOnClickListener(this);\r
//getView().findViewById(R.id.fdShareBtn).setOnClickListener(this);\r
+ getView().findViewById(R.id.fdRenameBtn).setOnClickListener(this);\r
\r
if (mFile.getStoragePath() != null) {\r
// Update preview\r
}\r
}\r
\r
+ public void onDismiss(EditNameFragment dialog) {\r
+ Log.e("ASD","ondismiss");\r
+ if (dialog instanceof EditNameFragment) {\r
+ if (((EditNameFragment)dialog).getResult()) {\r
+ String newFilename = ((EditNameFragment)dialog).getNewFilename();\r
+ Log.d(TAG, "name edit dialog dismissed with new name " + newFilename);\r
+ if (!newFilename.equals(mFile.getFileName())) {\r
+ FileDataStorageManager fdsm = new FileDataStorageManager(mAccount, getActivity().getContentResolver());\r
+ if (fdsm.getFileById(mFile.getFileId()) != null) {\r
+ OCFile newFile = new OCFile(fdsm.getFileById(mFile.getParentId()).getRemotePath()+"/"+newFilename);\r
+ newFile.setCreationTimestamp(mFile.getCreationTimestamp());\r
+ newFile.setFileId(mFile.getFileId());\r
+ newFile.setFileLength(mFile.getFileLength());\r
+ newFile.setKeepInSync(mFile.keepInSync());\r
+ newFile.setLastSyncDate(mFile.getLastSyncDate());\r
+ newFile.setMimetype(mFile.getMimetype());\r
+ newFile.setModificationTimestamp(mFile.getModificationTimestamp());\r
+ newFile.setParentId(mFile.getParentId());\r
+ newFile.setStoragePath(mFile.getStoragePath());\r
+ fdsm.removeFile(mFile);\r
+ fdsm.saveFile(newFile);\r
+ new Thread(new RenameRunnable(mFile, newFile, mAccount)).start();\r
+ mFile = newFile;\r
+ updateFileDetails(mFile, mAccount);\r
+ }\r
+ }\r
+ }\r
+ } else {\r
+ Log.e(TAG, "Unknown dialog intance passed to onDismissDalog: " + dialog.getClass().getCanonicalName());\r
+ }\r
+ \r
+ }\r
+ \r
+ private class RenameRunnable implements Runnable {\r
+ \r
+ Account mAccount;\r
+ OCFile mOld, mNew;\r
+ \r
+ public RenameRunnable(OCFile oldFile, OCFile newFile, Account account) {\r
+ mOld = oldFile;\r
+ mNew = newFile;\r
+ mAccount = account;\r
+ }\r
+ \r
+ public void run() {\r
+ WebdavClient wc = new WebdavClient(mAccount, getSherlockActivity().getApplicationContext());\r
+ AccountManager am = AccountManager.get(getSherlockActivity());\r
+ String baseUrl = am.getUserData(mAccount, AccountAuthenticator.KEY_OC_BASE_URL);\r
+ OwnCloudVersion ocv = new OwnCloudVersion(am.getUserData(mAccount, AccountAuthenticator.KEY_OC_VERSION));\r
+ String webdav_path = AccountUtils.getWebdavPath(ocv);\r
+ Log.d("ASD", ""+baseUrl + webdav_path + mOld.getRemotePath());\r
+\r
+ \r
+ Log.e("ASD", Uri.parse(baseUrl).getPath() == null ? "" : Uri.parse(baseUrl).getPath() + webdav_path + mNew.getRemotePath());\r
+ LocalMoveMethod move = new LocalMoveMethod(baseUrl + webdav_path + mOld.getRemotePath(),\r
+ Uri.parse(baseUrl).getPath() == null ? "" : Uri.parse(baseUrl).getPath() + webdav_path + mNew.getRemotePath());\r
+ \r
+ try {\r
+ int status = wc.executeMethod(move);\r
+ Log.e("ASD", ""+move.getQueryString());\r
+ Log.d("move", "returned status " + status);\r
+ } catch (HttpException e) {\r
+ // TODO Auto-generated catch block\r
+ e.printStackTrace();\r
+ } catch (IOException e) {\r
+ // TODO Auto-generated catch block\r
+ e.printStackTrace();\r
+ }\r
+ }\r
+ private class LocalMoveMethod extends DavMethodBase {\r
+\r
+ public LocalMoveMethod(String uri, String dest) {\r
+ super(uri);\r
+ addRequestHeader(new org.apache.commons.httpclient.Header("Destination", dest));\r
+ }\r
+\r
+ @Override\r
+ public String getName() {\r
+ return "MOVE";\r
+ }\r
+\r
+ @Override\r
+ protected boolean isSuccess(int status) {\r
+ return status == 201 || status == 204;\r
+ }\r
+ \r
+ }\r
+ }\r
+ \r
+ private static class EditNameFragment extends SherlockDialogFragment implements OnClickListener {\r
+\r
+ private String mNewFilename;\r
+ private boolean mResult;\r
+ private FileDetailFragment mListener;\r
+ \r
+ static public EditNameFragment newInstance(String filename) {\r
+ EditNameFragment f = new EditNameFragment();\r
+ Bundle args = new Bundle();\r
+ args.putString("filename", filename);\r
+ f.setArguments(args);\r
+ return f;\r
+ }\r
+ \r
+ @Override\r
+ public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {\r
+ View v = inflater.inflate(R.layout.edit_box_dialog, container, false);\r
+\r
+ String currentName = getArguments().getString("filename", "");\r
+ \r
+ ((Button)v.findViewById(R.id.cancel)).setOnClickListener(this);\r
+ ((Button)v.findViewById(R.id.ok)).setOnClickListener(this);\r
+ ((TextView)v.findViewById(R.id.user_input)).setText(currentName);\r
+\r
+ mResult = false;\r
+ return v;\r
+ }\r
+ \r
+ @Override\r
+ public void onClick(View view) {\r
+ switch (view.getId()) {\r
+ case R.id.ok: {\r
+ mNewFilename = ((TextView)getView().findViewById(R.id.user_input)).getText().toString();\r
+ mResult = true;\r
+ }\r
+ case R.id.cancel: { // fallthought\r
+ dismiss();\r
+ mListener.onDismiss(this);\r
+ }\r
+ }\r
+ }\r
+ \r
+ void setOnDismissListener(FileDetailFragment listener) {\r
+ mListener = listener;\r
+ }\r
+ \r
+ public String getNewFilename() {\r
+ return mNewFilename;\r
+ }\r
+ \r
+ // true if user click ok\r
+ public boolean getResult() {\r
+ return mResult;\r
+ }\r
+ \r
+ }\r
}\r