From c657ded0698c2e83161888a568f1b3d2d933a545 Mon Sep 17 00:00:00 2001 From: Bartek Przybylski Date: Sat, 17 Sep 2011 15:29:18 +0200 Subject: [PATCH] filesync fixed --- AndroidManifest.xml | 6 +- .../owncloud/FileListActionListAdapter.java | 17 +++-- .../alefzero/owncloud/OwnCloudMainScreen.java | 67 +++++++++++++++---- .../syncadapter/ContactSyncAdapter.java | 3 +- 4 files changed, 71 insertions(+), 22 deletions(-) diff --git a/AndroidManifest.xml b/AndroidManifest.xml index 587a931c39..694fb54263 100644 --- a/AndroidManifest.xml +++ b/AndroidManifest.xml @@ -28,7 +28,7 @@ - + - - - \ No newline at end of file diff --git a/src/eu/alefzero/owncloud/FileListActionListAdapter.java b/src/eu/alefzero/owncloud/FileListActionListAdapter.java index 65ed6f05ce..522257ec4b 100644 --- a/src/eu/alefzero/owncloud/FileListActionListAdapter.java +++ b/src/eu/alefzero/owncloud/FileListActionListAdapter.java @@ -32,9 +32,12 @@ import android.database.DataSetObserver; import android.net.Uri; import android.provider.MediaStore.Images.Media; import android.sax.StartElementListener; +import android.text.TextUtils; +import android.util.Log; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; +import android.view.View.OnClickListener; import android.widget.ImageView; import android.widget.ListAdapter; import android.widget.TextView; @@ -75,11 +78,17 @@ public class FileListActionListAdapter implements ListAdapter { public Object getItem(int position) { if (position == 0) { - AccountManager accm = (AccountManager) mContext.getSystemService(Context.ACCOUNT_SERVICE); - String ocurl = accm.getUserData(mAccount, AccountAuthenticator.KEY_OC_URL); - ocurl += mFilePath + mFilename; Intent intent = new Intent(Intent.ACTION_VIEW); - intent.setDataAndType(Uri.fromFile(new File(mFileStoragePath)), mFileType); + if (TextUtils.isEmpty(mFileStoragePath)) { + intent.putExtra("toDownload", true); + AccountManager accm = (AccountManager) mContext.getSystemService(Context.ACCOUNT_SERVICE); + String ocurl = accm.getUserData(mAccount, AccountAuthenticator.KEY_OC_URL); + ocurl += mFilePath + mFilename; + intent.setData(Uri.parse(ocurl)); + } else { + intent.putExtra("toDownload", false); + intent.setDataAndType(Uri.fromFile(new File(mFileStoragePath)), mFileType); + } return intent; } return null; diff --git a/src/eu/alefzero/owncloud/OwnCloudMainScreen.java b/src/eu/alefzero/owncloud/OwnCloudMainScreen.java index 7ca5eb8cf0..0b37f2db3f 100644 --- a/src/eu/alefzero/owncloud/OwnCloudMainScreen.java +++ b/src/eu/alefzero/owncloud/OwnCloudMainScreen.java @@ -18,6 +18,7 @@ package eu.alefzero.owncloud; +import java.util.LinkedList; import java.util.Stack; import android.accounts.Account; @@ -36,6 +37,7 @@ import android.graphics.Matrix; import android.net.Uri; import android.os.Bundle; import android.text.TextUtils; +import android.util.Log; import android.view.Menu; import android.view.MenuInflater; import android.view.MenuItem; @@ -50,18 +52,28 @@ import eu.alefzero.owncloud.db.ProviderMeta.ProviderTableMeta; public class OwnCloudMainScreen extends ListActivity { private DbHandler mDBHandler; private Stack mParents; + private LinkedList mPath; private Account mAccount; private Cursor mCursor; private boolean mIsDisplayingFile; private static final int DIALOG_CHOOSE_ACCOUNT = 0; + @SuppressWarnings("unchecked") @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); + + if (savedInstanceState != null) { + mParents = (Stack)savedInstanceState.getSerializable("parentsStack"); + mIsDisplayingFile = savedInstanceState.getBoolean("isDisplayingFile"); + mPath = (LinkedList)savedInstanceState.getSerializable("path"); + } else { + mParents = new Stack(); + mPath = new LinkedList(); + mIsDisplayingFile = false; + } - mParents = new Stack(); - mIsDisplayingFile = false; mDBHandler = new DbHandler(getBaseContext()); requestWindowFeature(Window.FEATURE_NO_TITLE); setContentView(R.layout.main); @@ -179,6 +191,7 @@ public class OwnCloudMainScreen extends ListActivity { return; } else if (mParents.size() == 1) { mParents.pop(); + mPath.removeLast(); pl.pop(); mCursor = managedQuery(ProviderTableMeta.CONTENT_URI, null, @@ -187,6 +200,7 @@ public class OwnCloudMainScreen extends ListActivity { null); } else { mParents.pop(); + mPath.removeLast(); pl.pop(); mCursor = managedQuery(Uri.withAppendedPath(ProviderTableMeta.CONTENT_URI_DIR, mParents.peek()), null, @@ -211,6 +225,7 @@ public class OwnCloudMainScreen extends ListActivity { String id_ = mCursor.getString(mCursor.getColumnIndex(ProviderTableMeta._ID)); String dirname = mCursor.getString(mCursor.getColumnIndex(ProviderTableMeta.FILE_NAME)); pl.push(DisplayUtils.HtmlDecode(dirname)); + mPath.addLast(DisplayUtils.HtmlDecode(dirname)); mParents.push(id_); mCursor = managedQuery(Uri.withAppendedPath(ProviderTableMeta.CONTENT_URI_DIR, id_), null, @@ -239,7 +254,8 @@ public class OwnCloudMainScreen extends ListActivity { // modified tv = (TextView) findViewById(R.id.textView4); tv.setText(mCursor.getString(mCursor.getColumnIndex(ProviderTableMeta.FILE_MODIFIED))); - if (!TextUtils.isEmpty(mCursor.getString(mCursor.getColumnIndex(ProviderTableMeta.FILE_STORAGE_PATH)))) { + if (!TextUtils.isEmpty(mCursor.getString(mCursor.getColumnIndex(ProviderTableMeta.FILE_STORAGE_PATH))) && + mCursor.getString(mCursor.getColumnIndex(ProviderTableMeta.FILE_CONTENT_TYPE)).matches("image/*")) { ImageView iv = (ImageView) findViewById(R.id.imageView1); Bitmap bmp = BitmapFactory.decodeFile(mCursor.getString(mCursor.getColumnIndex(ProviderTableMeta.FILE_STORAGE_PATH))); Matrix m = new Matrix(); @@ -259,25 +275,52 @@ public class OwnCloudMainScreen extends ListActivity { } else { try { Intent i = (Intent) getListAdapter().getItem(position); - startActivity(i); + if (i.hasExtra("toDownload")) { + if (i.getBooleanExtra("toDownload", false)) { + startActivityForResult(i, 200); + } else { + startActivity(i); + } + } } catch (ClassCastException e) {} } } private void populateFileList() { - mCursor = getContentResolver().query(ProviderTableMeta.CONTENT_URI, - null, - ProviderTableMeta.FILE_ACCOUNT_OWNER+"=?", - new String[]{mAccount.name}, - null); + if (mParents.empty()) { + mCursor = getContentResolver().query(ProviderTableMeta.CONTENT_URI, + null, + ProviderTableMeta.FILE_ACCOUNT_OWNER+"=?", + new String[]{mAccount.name}, + null); + } else { + mCursor = getContentResolver().query(Uri.withAppendedPath(ProviderTableMeta.CONTENT_URI_DIR, mParents.peek()), + null, + ProviderTableMeta.FILE_ACCOUNT_OWNER + "=?", + new String[]{mAccount.name}, null); + if (!mIsDisplayingFile) { + PathLayout pl = (PathLayout) findViewById(R.id.pathLayout1); + for (String s : mPath) { + pl.push(s); + } + } + } setListAdapter(new FileListListAdapter(mCursor, this)); getListView().invalidate(); } @Override - public void onConfigurationChanged(Configuration newConfig) { - // TODO Auto-generated method stub - //super.onConfigurationChanged(newConfig); + protected void onActivityResult(int requestCode, int resultCode, Intent data) { + super.onActivityResult(requestCode, resultCode, data); + Log.i("asd", data+""); + } + + @Override + protected void onSaveInstanceState(Bundle outState) { + super.onSaveInstanceState(outState); + outState.putSerializable("parentsStack", mParents); + outState.putSerializable("path", mPath); + outState.putBoolean("isDisplayingFile", mIsDisplayingFile); } } \ No newline at end of file diff --git a/src/eu/alefzero/owncloud/syncadapter/ContactSyncAdapter.java b/src/eu/alefzero/owncloud/syncadapter/ContactSyncAdapter.java index 217d3a37cb..87174bcb50 100644 --- a/src/eu/alefzero/owncloud/syncadapter/ContactSyncAdapter.java +++ b/src/eu/alefzero/owncloud/syncadapter/ContactSyncAdapter.java @@ -48,7 +48,8 @@ public class ContactSyncAdapter extends AbstractOwnCloudSyncAdapter { FileInputStream fis = getContactVcard(lookup); // TODO make a webdav request based on the stream // TODO send request to the ownCloud server - // TODO mark the current contact as synced - where to store? + // TODO mark the current contact as synced - where to store? + fis.close(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace();