\r
import java.io.File;\r
import java.util.ArrayList;\r
+import java.util.HashMap;\r
+import java.util.LinkedList;\r
+import java.util.List;\r
import java.util.Stack;\r
+import java.util.Vector;\r
\r
import android.accounts.Account;\r
import android.accounts.AccountManager;\r
import android.app.AlertDialog;\r
+import android.app.AlertDialog.Builder;\r
import android.app.Dialog;\r
import android.app.ListActivity;\r
import android.app.ProgressDialog;\r
-import android.app.AlertDialog.Builder;\r
import android.content.Context;\r
import android.content.DialogInterface;\r
-import android.content.Intent;\r
import android.content.DialogInterface.OnCancelListener;\r
import android.content.DialogInterface.OnClickListener;\r
+import android.content.Intent;\r
import android.database.Cursor;\r
import android.net.Uri;\r
import android.os.Bundle;\r
import android.view.View;\r
import android.view.Window;\r
import android.widget.AdapterView;\r
+import android.widget.AdapterView.OnItemClickListener;\r
import android.widget.Button;\r
import android.widget.EditText;\r
-import android.widget.ListView;\r
-import android.widget.SimpleCursorAdapter;\r
-import android.widget.AdapterView.OnItemClickListener;\r
+import android.widget.SimpleAdapter;\r
import eu.alefzero.owncloud.authenticator.AccountAuthenticator;\r
-import eu.alefzero.owncloud.db.ProviderMeta;\r
-import eu.alefzero.owncloud.db.ProviderMeta.ProviderTableMeta;\r
+import eu.alefzero.owncloud.datamodel.DataStorageManager;\r
+import eu.alefzero.owncloud.datamodel.FileDataStorageManager;\r
+import eu.alefzero.owncloud.datamodel.OCFile;\r
import eu.alefzero.owncloud.files.services.FileUploader;\r
-import eu.alefzero.owncloud.utils.OwnCloudVersion;\r
import eu.alefzero.webdav.WebdavClient;\r
\r
/**\r
\r
private Account mAccount;\r
private AccountManager mAccountManager;\r
- private String mUsername, mPassword;\r
- private Cursor mCursor;\r
private Stack<String> mParents;\r
private ArrayList<Parcelable> mStreamsToUpload;\r
private boolean mCreateDir;\r
private String mUploadPath;\r
private static final String[] CONTENT_PROJECTION = { Media.DATA, Media.DISPLAY_NAME, Media.MIME_TYPE, Media.SIZE };\r
+ private DataStorageManager mStorageManager;\r
+ private OCFile mFile;\r
\r
private final static int DIALOG_NO_ACCOUNT = 0;\r
private final static int DIALOG_WAITING = 1;\r
super.onCreate(savedInstanceState);\r
getWindow().requestFeature(Window.FEATURE_NO_TITLE);\r
mParents = new Stack<String>();\r
+ mParents.add("");\r
if (getIntent().hasExtra(Intent.EXTRA_STREAM)) {\r
prepareStreamsToUpload();\r
mAccountManager = (AccountManager) getSystemService(Context.ACCOUNT_SERVICE);\r
} else {\r
mAccount = accounts[0];\r
setContentView(R.layout.uploader_layout);\r
+ mStorageManager = new FileDataStorageManager(mAccount, getContentResolver());\r
populateDirectoryList();\r
}\r
} else {\r
showDialog(DIALOG_NO_STREAM);\r
}\r
}\r
-\r
+ \r
@Override\r
protected Dialog onCreateDialog(final int id) {\r
final AlertDialog.Builder builder = new Builder(this);\r
}\r
});\r
return builder.create();\r
- case DIALOG_GET_DIRNAME:\r
+ /*case DIALOG_GET_DIRNAME:\r
final EditText dirName = new EditText(getBaseContext());\r
builder.setView(dirName);\r
builder.setTitle(R.string.uploader_info_dirname);\r
null, null, null);\r
mCursor.moveToFirst();\r
pathToUpload = mCursor.getString(mCursor.getColumnIndex(ProviderTableMeta.FILE_PATH))\r
- + mCursor.getString(mCursor.getColumnIndex(ProviderTableMeta.FILE_NAME)).replace(" ", "%20");\r
+ + mCursor.getString(mCursor.getColumnIndex(ProviderTableMeta.FILE_NAME)).replace(" ", "%20"); // TODO don't make this ; use WebdavUtils.encode in the right moment\r
}\r
a a = new a(pathToUpload, dirName);\r
builder.setPositiveButton(R.string.common_ok, a);\r
dialog.cancel();\r
}\r
});\r
- return builder.create();\r
+ return builder.create();*/\r
case DIALOG_MULTIPLE_ACCOUNT:\r
CharSequence ac[] = new CharSequence[mAccountManager.getAccountsByType(AccountAuthenticator.ACCOUNT_TYPE).length];\r
for (int i = 0; i < ac.length; ++i) {\r
builder.setItems(ac, new OnClickListener() {\r
public void onClick(DialogInterface dialog, int which) {\r
mAccount = mAccountManager.getAccountsByType(AccountAuthenticator.ACCOUNT_TYPE)[which];\r
+ mStorageManager = new FileDataStorageManager(mAccount, getContentResolver());\r
populateDirectoryList();\r
}\r
});\r
EditText mDirname;\r
\r
public a(String path, EditText dirname) {\r
- mPath = path;\r
+ mPath = path; \r
mDirname = dirname;\r
}\r
\r
@Override\r
public void onBackPressed() {\r
\r
- if (mParents.size() == 0) {\r
+ if (mParents.size() <= 1) {\r
super.onBackPressed();\r
return;\r
- } else if (mParents.size() == 1) {\r
- mParents.pop();\r
- mCursor = managedQuery(ProviderTableMeta.CONTENT_URI, null, ProviderTableMeta.FILE_CONTENT_TYPE + "=?",\r
- new String[] { "DIR" }, null);\r
} else {\r
mParents.pop();\r
- mCursor = managedQuery(Uri.withAppendedPath(ProviderTableMeta.CONTENT_URI_DIR, mParents.peek()), null,\r
- ProviderTableMeta.FILE_CONTENT_TYPE + "=?", new String[] { "DIR" }, null);\r
+ populateDirectoryList();\r
}\r
-\r
- SimpleCursorAdapter sca = new SimpleCursorAdapter(this, R.layout.uploader_list_item_layout, mCursor,\r
- new String[] { ProviderTableMeta.FILE_NAME }, new int[] { R.id.textView1 });\r
- setListAdapter(sca);\r
}\r
\r
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {\r
- if (!mCursor.moveToPosition(position)) {\r
+ // click on folder in the list\r
+ Log.d(TAG, "on item click");\r
+ Vector<OCFile> tmpfiles = mStorageManager.getDirectoryContent(mFile);\r
+ if (tmpfiles == null) return;\r
+ // filter on dirtype\r
+ Vector<OCFile> files = new Vector<OCFile>();\r
+ for (OCFile f : tmpfiles)\r
+ if (f.isDirectory())\r
+ files.add(f);\r
+ if (files.size() < position) {\r
throw new IndexOutOfBoundsException("Incorrect item selected");\r
}\r
- String _id = mCursor.getString(mCursor.getColumnIndex(ProviderTableMeta._ID));\r
- mParents.push(_id);\r
-\r
- mCursor.close();\r
- mCursor = managedQuery(Uri.withAppendedPath(ProviderTableMeta.CONTENT_URI_DIR, _id), null,\r
- ProviderTableMeta.FILE_CONTENT_TYPE + "=?", new String[] { "DIR" }, null);\r
- SimpleCursorAdapter sca = new SimpleCursorAdapter(this, R.layout.uploader_list_item_layout, mCursor,\r
- new String[] { ProviderTableMeta.FILE_NAME }, new int[] { R.id.textView1 });\r
- setListAdapter(sca);\r
- getListView().invalidate();\r
+ mParents.push(files.get(position).getFileName());\r
+ populateDirectoryList();\r
}\r
\r
public void onClick(View v) {\r
+ // click on button\r
switch (v.getId()) {\r
case R.id.uploader_choose_folder:\r
- String pathToUpload = null;\r
- if (mParents.empty()) {\r
- pathToUpload = "/";\r
- } else {\r
- mCursor = managedQuery(Uri.withAppendedPath(ProviderTableMeta.CONTENT_URI_FILE, mParents.peek()), null,\r
- null, null, null);\r
- mCursor.moveToFirst();\r
- pathToUpload = mCursor.getString(mCursor.getColumnIndex(ProviderTableMeta.FILE_PATH)).replace(" ",\r
- "%20");\r
- }\r
- Log.d(TAG, "Uploading file to dir " + pathToUpload);\r
+ mUploadPath = ""; // first element in mParents is root dir, represented by ""; init mUploadPath with "/" results in a "//" prefix\r
+ for (String p : mParents)\r
+ mUploadPath += p + OCFile.PATH_SEPARATOR;\r
+ Log.d(TAG, "Uploading file to dir " + mUploadPath);\r
\r
- mUploadPath = pathToUpload;\r
- mCreateDir = false;\r
uploadFiles();\r
\r
break;\r
}\r
\r
private void populateDirectoryList() {\r
- mUsername = mAccount.name.substring(0, mAccount.name.indexOf('@'));\r
- mPassword = mAccountManager.getPassword(mAccount);\r
setContentView(R.layout.uploader_layout);\r
\r
+ String full_path = "";\r
+ for (String a : mParents)\r
+ full_path += a + "/";\r
+ \r
+ Log.d(TAG, "Populating view with content of : " + full_path);\r
+ \r
+ mFile = mStorageManager.getFileByPath(full_path);\r
+ if (mFile != null) {\r
+ Vector<OCFile> files = mStorageManager.getDirectoryContent(mFile);\r
+ if (files != null) {\r
+ List<HashMap<String, Object>> data = new LinkedList<HashMap<String,Object>>();\r
+ for (OCFile f : files) {\r
+ HashMap<String, Object> h = new HashMap<String, Object>();\r
+ if (f.isDirectory()) {\r
+ h.put("dirname", f.getFileName());\r
+ data.add(h);\r
+ }\r
+ }\r
+ SimpleAdapter sa = new SimpleAdapter(this,\r
+ data,\r
+ R.layout.uploader_list_item_layout,\r
+ new String[] {"dirname"},\r
+ new int[] {R.id.textView1});\r
+ setListAdapter(sa);\r
+ Button btn = (Button) findViewById(R.id.uploader_choose_folder);\r
+ btn.setOnClickListener(this);\r
+ getListView().setOnItemClickListener(this);\r
+ }\r
+ }\r
+ /*\r
mCursor = managedQuery(ProviderMeta.ProviderTableMeta.CONTENT_URI, null, ProviderTableMeta.FILE_NAME\r
+ "=? AND " + ProviderTableMeta.FILE_ACCOUNT_OWNER + "=?", new String[] { "/", mAccount.name }, null);\r
\r
* createDirBtn.setOnClickListener(this); ((LinearLayout)\r
* findViewById(R.id.linearLayout1)).addView( createDirBtn,\r
* LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT); }\r
- */\r
- }\r
+ *\r
+ }*/\r
}\r
\r
private void prepareStreamsToUpload() {\r
}\r
\r
public void uploadFiles() {\r
- OwnCloudVersion ocv = new OwnCloudVersion(mAccountManager.getUserData(mAccount,\r
- AccountAuthenticator.KEY_OC_VERSION));\r
- String base_url = mAccountManager.getUserData(mAccount, AccountAuthenticator.KEY_OC_BASE_URL);\r
- String webdav_path = AccountUtils.getWebdavPath(ocv);\r
- Uri oc_uri = Uri.parse(base_url + webdav_path);\r
-\r
- WebdavClient wdc = new WebdavClient(oc_uri);\r
- wdc.setCredentials(mUsername, mPassword);\r
- wdc.allowUnsignedCertificates();\r
+ WebdavClient wdc = new WebdavClient(mAccount, getApplicationContext());\r
+ wdc.allowSelfsignedCertificates();\r
\r
// create last directory in path if nessesary\r
if (mCreateDir) {\r
final String display_name = c.getString(c.getColumnIndex(Media.DISPLAY_NAME)),\r
data = c.getString(c.getColumnIndex(Media.DATA));\r
local[i] = data;\r
- remote[i] = mUploadPath + "/" + display_name;\r
+ remote[i] = mUploadPath + display_name;\r
} else if (uri.getScheme().equals("file")) {\r
final File file = new File(Uri.decode(uri.toString()).replace(uri.getScheme() + "://", ""));\r
local[i] = file.getAbsolutePath();\r
- remote[i] = mUploadPath + "/" + file.getName();\r
+ remote[i] = mUploadPath + file.getName();\r
}\r
\r
}\r