Fixed problem with some special characters when opening files; renamed WebdavUtils.encode to WebdavUtils.encodePath; fixed null pointer exception in preview

This commit is contained in:
David A. Velasco 2012-07-17 14:26:18 +02:00
parent c6b553f635
commit 45f89711be
6 changed files with 19 additions and 16 deletions

View file

@ -18,7 +18,7 @@
-->
<manifest package="eu.alefzero.owncloud"
android:versionCode="1"
android:versionName="0.1.161B" xmlns:android="http://schemas.android.com/apk/res/android">
android:versionName="0.1.162B" xmlns:android="http://schemas.android.com/apk/res/android">
<uses-permission android:name="android.permission.GET_ACCOUNTS" />
<uses-permission android:name="android.permission.USE_CREDENTIALS" />

View file

@ -220,7 +220,7 @@ public class FileSyncAdapter extends AbstractOwnCloudSyncAdapter {
for (int i=0; i < files.size() && !mCancellation; i++) {
OCFile newFile = files.get(i);
if (newFile.getMimetype().equals("DIR")) {
fetchData(getUri().toString() + WebdavUtils.encode(newFile.getRemotePath()), syncResult, newFile.getFileId());
fetchData(getUri().toString() + WebdavUtils.encodePath(newFile.getRemotePath()), syncResult, newFile.getFileId());
}
}
if (mCancellation) Log.d(TAG, "Leaving " + uri + " because cancellation request");

View file

@ -23,6 +23,7 @@ import java.io.File;
import eu.alefzero.owncloud.R;
import eu.alefzero.owncloud.authenticator.AccountAuthenticator;
import eu.alefzero.owncloud.db.ProviderMeta.ProviderTableMeta;
import eu.alefzero.webdav.WebdavUtils;
import android.accounts.Account;
import android.accounts.AccountManager;
import android.content.Context;
@ -84,7 +85,7 @@ public class FileListActionListAdapter implements ListAdapter {
.getSystemService(Context.ACCOUNT_SERVICE);
String ocurl = accm.getUserData(mAccount,
AccountAuthenticator.KEY_OC_URL);
ocurl += mFilePath + Uri.encode(mFilename);
ocurl += WebdavUtils.encodePath(mFilePath + mFilename);
intent.setData(Uri.parse(ocurl));
} else {
intent.putExtra("toDownload", false);

View file

@ -197,6 +197,7 @@ public class FileDetailFragment extends SherlockFragment implements
IntentFilter filter = new IntentFilter(
FileDownloader.DOWNLOAD_FINISH_MESSAGE);
getActivity().registerReceiver(mDownloadFinishReceiver, filter);
mPreview = (ImageView)mView.findViewById(R.id.fdPreview);
}
@Override
@ -340,9 +341,10 @@ public class FileDetailFragment extends SherlockFragment implements
@Override
public void onClick(View v) {
String storagePath = mFile.getStoragePath();
String encodedStoragePath = WebdavUtils.encodePath(storagePath);
try {
Intent i = new Intent(Intent.ACTION_VIEW);
i.setDataAndType(Uri.parse("file://"+ storagePath), mFile.getMimetype());
i.setDataAndType(Uri.parse("file://"+ encodedStoragePath), mFile.getMimetype());
i.setFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION | Intent.FLAG_GRANT_WRITE_URI_PERMISSION);
startActivity(i);
@ -354,7 +356,7 @@ public class FileDetailFragment extends SherlockFragment implements
Intent i = new Intent(Intent.ACTION_VIEW);
mimeType = MimeTypeMap.getSingleton().getMimeTypeFromExtension(storagePath.substring(storagePath.lastIndexOf('.') + 1));
if (mimeType != null && !mimeType.equals(mFile.getMimetype())) {
i.setDataAndType(Uri.parse("file://"+mFile.getStoragePath()), mimeType);
i.setDataAndType(Uri.parse("file://"+ encodedStoragePath), mimeType);
i.setFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION | Intent.FLAG_GRANT_WRITE_URI_PERMISSION);
startActivity(i);
toastIt = false;
@ -644,11 +646,11 @@ public class FileDetailFragment extends SherlockFragment implements
String baseUrl = am.getUserData(mAccount, AccountAuthenticator.KEY_OC_BASE_URL);
OwnCloudVersion ocv = new OwnCloudVersion(am.getUserData(mAccount, AccountAuthenticator.KEY_OC_VERSION));
String webdav_path = AccountUtils.getWebdavPath(ocv);
Log.d("ASD", ""+baseUrl + webdav_path + WebdavUtils.encode(mOld.getRemotePath()));
Log.d("ASD", ""+baseUrl + webdav_path + WebdavUtils.encodePath(mOld.getRemotePath()));
Log.e("ASD", Uri.parse(baseUrl).getPath() == null ? "" : Uri.parse(baseUrl).getPath() + webdav_path + WebdavUtils.encode(mNew.getRemotePath()));
LocalMoveMethod move = new LocalMoveMethod(baseUrl + webdav_path + WebdavUtils.encode(mOld.getRemotePath()),
Uri.parse(baseUrl).getPath() == null ? "" : Uri.parse(baseUrl).getPath() + webdav_path + WebdavUtils.encode(mNew.getRemotePath()));
Log.e("ASD", Uri.parse(baseUrl).getPath() == null ? "" : Uri.parse(baseUrl).getPath() + webdav_path + WebdavUtils.encodePath(mNew.getRemotePath()));
LocalMoveMethod move = new LocalMoveMethod(baseUrl + webdav_path + WebdavUtils.encodePath(mOld.getRemotePath()),
Uri.parse(baseUrl).getPath() == null ? "" : Uri.parse(baseUrl).getPath() + webdav_path + WebdavUtils.encodePath(mNew.getRemotePath()));
try {
int status = wc.executeMethod(move);
@ -772,9 +774,9 @@ public class FileDetailFragment extends SherlockFragment implements
String baseUrl = am.getUserData(mAccount, AccountAuthenticator.KEY_OC_BASE_URL);
OwnCloudVersion ocv = new OwnCloudVersion(am.getUserData(mAccount, AccountAuthenticator.KEY_OC_VERSION));
String webdav_path = AccountUtils.getWebdavPath(ocv);
Log.d("ASD", ""+baseUrl + webdav_path + WebdavUtils.encode(mFileToRemove.getRemotePath()));
Log.d("ASD", ""+baseUrl + webdav_path + WebdavUtils.encodePath(mFileToRemove.getRemotePath()));
DeleteMethod delete = new DeleteMethod(baseUrl + webdav_path + WebdavUtils.encode(mFileToRemove.getRemotePath()));
DeleteMethod delete = new DeleteMethod(baseUrl + webdav_path + WebdavUtils.encodePath(mFileToRemove.getRemotePath()));
HttpMethodParams params = delete.getParams();
params.setSoTimeout(1000);
delete.setParams(params);

View file

@ -122,7 +122,7 @@ public class WebdavClient extends HttpClient {
*/
public boolean downloadFile(String remoteFilepath, File targetPath) {
boolean ret = false;
GetMethod get = new GetMethod(mUri.toString() + WebdavUtils.encode(remoteFilepath));
GetMethod get = new GetMethod(mUri.toString() + WebdavUtils.encodePath(remoteFilepath));
HttpMethodParams params = get.getParams();
params.setSoTimeout(0); // that means "infinite timeout"; it's the default value, but let's make it explicit
get.setParams(params);
@ -163,7 +163,7 @@ public class WebdavClient extends HttpClient {
* @return
*/
public boolean deleteFile(String remoteFilePath){
DavMethod delete = new DeleteMethod(mUri.toString() + WebdavUtils.encode(remoteFilePath));
DavMethod delete = new DeleteMethod(mUri.toString() + WebdavUtils.encodePath(remoteFilePath));
try {
executeMethod(delete);
} catch (Throwable e) {
@ -196,7 +196,7 @@ public class WebdavClient extends HttpClient {
FileRequestEntity entity = new FileRequestEntity(f, contentType);
entity.setOnDatatransferProgressListener(mDataTransferListener);
Log.e("ASD", f.exists() + " " + entity.getContentLength());
PutMethod put = new PutMethod(mUri.toString() + WebdavUtils.encode(remoteTarget));
PutMethod put = new PutMethod(mUri.toString() + WebdavUtils.encodePath(remoteTarget));
HttpMethodParams params = put.getParams();
params.setSoTimeout(0); // that means "infinite timeout"; it's the default value, but let's make it explicit
put.setParams(params);
@ -242,7 +242,7 @@ public class WebdavClient extends HttpClient {
*/
public boolean createDirectory(String path) {
try {
MkColMethod mkcol = new MkColMethod(mUri.toString() + WebdavUtils.encode(path));
MkColMethod mkcol = new MkColMethod(mUri.toString() + WebdavUtils.encodePath(path));
int status = executeMethod(mkcol);
Log.d(TAG, "Status returned " + status);
Log.d(TAG, "uri: " + mkcol.getURI().toString());

View file

@ -68,7 +68,7 @@ public class WebdavUtils {
* @param remoteFilePath Path
* @return Encoded path according to RFC 2396, always starting with "/"
*/
public static String encode(String remoteFilePath) {
public static String encodePath(String remoteFilePath) {
String encodedPath = Uri.encode(remoteFilePath, "/");
if (!encodedPath.startsWith("/"))
encodedPath = "/" + encodedPath;