X-Git-Url: http://git.linex4red.de/pub/Android/ownCloud.git/blobdiff_plain/4c1ca7dc4874ef10a30929ee059c274f5214030b..271a4ba1dfdea914b70ef3b10f6930de68d39d68:/src/eu/alefzero/owncloud/Uploader.java diff --git a/src/eu/alefzero/owncloud/Uploader.java b/src/eu/alefzero/owncloud/Uploader.java index a63010a6..fcb22a2a 100644 --- a/src/eu/alefzero/owncloud/Uploader.java +++ b/src/eu/alefzero/owncloud/Uploader.java @@ -19,20 +19,24 @@ package eu.alefzero.owncloud; import java.io.File; import java.util.ArrayList; +import java.util.HashMap; +import java.util.LinkedList; +import java.util.List; import java.util.Stack; +import java.util.Vector; import android.accounts.Account; import android.accounts.AccountManager; import android.app.AlertDialog; +import android.app.AlertDialog.Builder; import android.app.Dialog; import android.app.ListActivity; import android.app.ProgressDialog; -import android.app.AlertDialog.Builder; import android.content.Context; import android.content.DialogInterface; -import android.content.Intent; import android.content.DialogInterface.OnCancelListener; import android.content.DialogInterface.OnClickListener; +import android.content.Intent; import android.database.Cursor; import android.net.Uri; import android.os.Bundle; @@ -42,16 +46,15 @@ import android.util.Log; import android.view.View; import android.view.Window; import android.widget.AdapterView; +import android.widget.AdapterView.OnItemClickListener; import android.widget.Button; import android.widget.EditText; -import android.widget.ListView; -import android.widget.SimpleCursorAdapter; -import android.widget.AdapterView.OnItemClickListener; +import android.widget.SimpleAdapter; import eu.alefzero.owncloud.authenticator.AccountAuthenticator; -import eu.alefzero.owncloud.db.ProviderMeta; -import eu.alefzero.owncloud.db.ProviderMeta.ProviderTableMeta; +import eu.alefzero.owncloud.datamodel.DataStorageManager; +import eu.alefzero.owncloud.datamodel.FileDataStorageManager; +import eu.alefzero.owncloud.datamodel.OCFile; import eu.alefzero.owncloud.files.services.FileUploader; -import eu.alefzero.owncloud.utils.OwnCloudVersion; import eu.alefzero.webdav.WebdavClient; /** @@ -65,13 +68,13 @@ public class Uploader extends ListActivity implements OnItemClickListener, andro private Account mAccount; private AccountManager mAccountManager; - private String mUsername, mPassword; - private Cursor mCursor; private Stack mParents; private ArrayList mStreamsToUpload; private boolean mCreateDir; private String mUploadPath; private static final String[] CONTENT_PROJECTION = { Media.DATA, Media.DISPLAY_NAME, Media.MIME_TYPE, Media.SIZE }; + private DataStorageManager mStorageManager; + private OCFile mFile; private final static int DIALOG_NO_ACCOUNT = 0; private final static int DIALOG_WAITING = 1; @@ -86,6 +89,7 @@ public class Uploader extends ListActivity implements OnItemClickListener, andro super.onCreate(savedInstanceState); getWindow().requestFeature(Window.FEATURE_NO_TITLE); mParents = new Stack(); + mParents.add(""); if (getIntent().hasExtra(Intent.EXTRA_STREAM)) { prepareStreamsToUpload(); mAccountManager = (AccountManager) getSystemService(Context.ACCOUNT_SERVICE); @@ -99,13 +103,14 @@ public class Uploader extends ListActivity implements OnItemClickListener, andro } else { mAccount = accounts[0]; setContentView(R.layout.uploader_layout); + mStorageManager = new FileDataStorageManager(mAccount, getContentResolver()); populateDirectoryList(); } } else { showDialog(DIALOG_NO_STREAM); } } - + @Override protected Dialog onCreateDialog(final int id) { final AlertDialog.Builder builder = new Builder(this); @@ -149,7 +154,7 @@ public class Uploader extends ListActivity implements OnItemClickListener, andro } }); return builder.create(); - case DIALOG_GET_DIRNAME: + /*case DIALOG_GET_DIRNAME: final EditText dirName = new EditText(getBaseContext()); builder.setView(dirName); builder.setTitle(R.string.uploader_info_dirname); @@ -170,7 +175,7 @@ public class Uploader extends ListActivity implements OnItemClickListener, andro dialog.cancel(); } }); - return builder.create(); + return builder.create();*/ case DIALOG_MULTIPLE_ACCOUNT: CharSequence ac[] = new CharSequence[mAccountManager.getAccountsByType(AccountAuthenticator.ACCOUNT_TYPE).length]; for (int i = 0; i < ac.length; ++i) { @@ -180,6 +185,7 @@ public class Uploader extends ListActivity implements OnItemClickListener, andro builder.setItems(ac, new OnClickListener() { public void onClick(DialogInterface dialog, int which) { mAccount = mAccountManager.getAccountsByType(AccountAuthenticator.ACCOUNT_TYPE)[which]; + mStorageManager = new FileDataStorageManager(mAccount, getContentResolver()); populateDirectoryList(); } }); @@ -201,7 +207,7 @@ public class Uploader extends ListActivity implements OnItemClickListener, andro EditText mDirname; public a(String path, EditText dirname) { - mPath = path; + mPath = path; mDirname = dirname; } @@ -215,57 +221,42 @@ public class Uploader extends ListActivity implements OnItemClickListener, andro @Override public void onBackPressed() { - if (mParents.size() == 0) { + if (mParents.size() <= 1) { super.onBackPressed(); return; - } else if (mParents.size() == 1) { - mParents.pop(); - mCursor = managedQuery(ProviderTableMeta.CONTENT_URI, null, ProviderTableMeta.FILE_CONTENT_TYPE + "=?", - new String[] { "DIR" }, null); } else { mParents.pop(); - mCursor = managedQuery(Uri.withAppendedPath(ProviderTableMeta.CONTENT_URI_DIR, mParents.peek()), null, - ProviderTableMeta.FILE_CONTENT_TYPE + "=?", new String[] { "DIR" }, null); + populateDirectoryList(); } - - SimpleCursorAdapter sca = new SimpleCursorAdapter(this, R.layout.uploader_list_item_layout, mCursor, - new String[] { ProviderTableMeta.FILE_NAME }, new int[] { R.id.textView1 }); - setListAdapter(sca); } public void onItemClick(AdapterView parent, View view, int position, long id) { - if (!mCursor.moveToPosition(position)) { + // click on folder in the list + Log.d(TAG, "on item click"); + Vector tmpfiles = mStorageManager.getDirectoryContent(mFile); + if (tmpfiles == null) return; + // filter on dirtype + Vector files = new Vector(); + for (OCFile f : tmpfiles) + if (f.isDirectory()) + files.add(f); + if (files.size() < position) { throw new IndexOutOfBoundsException("Incorrect item selected"); } - String _id = mCursor.getString(mCursor.getColumnIndex(ProviderTableMeta._ID)); - mParents.push(_id); - - mCursor.close(); - mCursor = managedQuery(Uri.withAppendedPath(ProviderTableMeta.CONTENT_URI_DIR, _id), null, - ProviderTableMeta.FILE_CONTENT_TYPE + "=?", new String[] { "DIR" }, null); - SimpleCursorAdapter sca = new SimpleCursorAdapter(this, R.layout.uploader_list_item_layout, mCursor, - new String[] { ProviderTableMeta.FILE_NAME }, new int[] { R.id.textView1 }); - setListAdapter(sca); - getListView().invalidate(); + mParents.push(files.get(position).getFileName()); + populateDirectoryList(); } public void onClick(View v) { + // click on button switch (v.getId()) { case R.id.uploader_choose_folder: - String pathToUpload = null; - if (mParents.empty()) { - pathToUpload = "/"; - } else { - mCursor = managedQuery(Uri.withAppendedPath(ProviderTableMeta.CONTENT_URI_FILE, mParents.peek()), null, - null, null, null); - mCursor.moveToFirst(); - pathToUpload = mCursor.getString(mCursor.getColumnIndex(ProviderTableMeta.FILE_PATH)).replace(" ", - "%20"); - } - Log.d(TAG, "Uploading file to dir " + pathToUpload); + mUploadPath = "/"; + for (String p : mParents) + mUploadPath += p + "/"; + mUploadPath = Uri.encode(mUploadPath, "/"); + Log.d(TAG, "Uploading file to dir " + mUploadPath); - mUploadPath = pathToUpload; - mCreateDir = false; uploadFiles(); break; @@ -300,10 +291,38 @@ public class Uploader extends ListActivity implements OnItemClickListener, andro } private void populateDirectoryList() { - mUsername = mAccount.name.substring(0, mAccount.name.indexOf('@')); - mPassword = mAccountManager.getPassword(mAccount); setContentView(R.layout.uploader_layout); + String full_path = ""; + for (String a : mParents) + full_path += a + "/"; + + Log.d(TAG, "Populating view with content of : " + full_path); + + mFile = mStorageManager.getFileByPath(full_path); + if (mFile != null) { + Vector files = mStorageManager.getDirectoryContent(mFile); + if (files != null) { + List> data = new LinkedList>(); + for (OCFile f : files) { + HashMap h = new HashMap(); + if (f.isDirectory()) { + h.put("dirname", f.getFileName()); + data.add(h); + } + } + SimpleAdapter sa = new SimpleAdapter(this, + data, + R.layout.uploader_list_item_layout, + new String[] {"dirname"}, + new int[] {R.id.textView1}); + setListAdapter(sa); + Button btn = (Button) findViewById(R.id.uploader_choose_folder); + btn.setOnClickListener(this); + getListView().setOnItemClickListener(this); + } + } + /* mCursor = managedQuery(ProviderMeta.ProviderTableMeta.CONTENT_URI, null, ProviderTableMeta.FILE_NAME + "=? AND " + ProviderTableMeta.FILE_ACCOUNT_OWNER + "=?", new String[] { "/", mAccount.name }, null); @@ -333,8 +352,8 @@ public class Uploader extends ListActivity implements OnItemClickListener, andro * createDirBtn.setOnClickListener(this); ((LinearLayout) * findViewById(R.id.linearLayout1)).addView( createDirBtn, * LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT); } - */ - } + * + }*/ } private void prepareStreamsToUpload() { @@ -350,15 +369,7 @@ public class Uploader extends ListActivity implements OnItemClickListener, andro } public void uploadFiles() { - OwnCloudVersion ocv = new OwnCloudVersion(mAccountManager.getUserData(mAccount, - AccountAuthenticator.KEY_OC_VERSION)); - String base_url = mAccountManager.getUserData(mAccount, AccountAuthenticator.KEY_OC_BASE_URL); - String webdav_path = AccountUtils.getWebdavPath(ocv); - Uri oc_uri = Uri.parse(base_url + webdav_path); - - WebdavClient wdc = new WebdavClient(oc_uri); - wdc.setCredentials(mUsername, mPassword); - wdc.allowUnsignedCertificates(); + WebdavClient wdc = new WebdavClient(mAccount, getApplicationContext()); // create last directory in path if nessesary if (mCreateDir) { @@ -382,11 +393,11 @@ public class Uploader extends ListActivity implements OnItemClickListener, andro final String display_name = c.getString(c.getColumnIndex(Media.DISPLAY_NAME)), data = c.getString(c.getColumnIndex(Media.DATA)); local[i] = data; - remote[i] = mUploadPath + "/" + display_name; + remote[i] = mUploadPath + Uri.encode(display_name); } else if (uri.getScheme().equals("file")) { final File file = new File(Uri.decode(uri.toString()).replace(uri.getScheme() + "://", "")); local[i] = file.getAbsolutePath(); - remote[i] = mUploadPath + "/" + file.getName(); + remote[i] = mUploadPath + Uri.encode(file.getName()); } }