X-Git-Url: http://git.linex4red.de/pub/Android/ownCloud.git/blobdiff_plain/6deca0f9b1f3d3caa8497a89f55e5d3934545fe6..a6e98cc7dc4c7f765f442015b1ac793e63884b75:/src/eu/alefzero/owncloud/ui/activity/FileDisplayActivity.java diff --git a/src/eu/alefzero/owncloud/ui/activity/FileDisplayActivity.java b/src/eu/alefzero/owncloud/ui/activity/FileDisplayActivity.java index b6b099f3..a7546283 100644 --- a/src/eu/alefzero/owncloud/ui/activity/FileDisplayActivity.java +++ b/src/eu/alefzero/owncloud/ui/activity/FileDisplayActivity.java @@ -18,59 +18,29 @@ package eu.alefzero.owncloud.ui.activity; -import java.io.File; -import java.io.FileInputStream; -import java.io.FileNotFoundException; -import java.io.IOException; -import java.util.LinkedList; -import java.util.Stack; - import android.accounts.Account; import android.accounts.AccountManager; import android.app.AlertDialog; import android.app.Dialog; -import android.app.ListActivity; -import android.app.ActionBar.OnNavigationListener; +import android.app.AlertDialog.Builder; import android.content.DialogInterface; -import android.content.Intent; import android.content.DialogInterface.OnCancelListener; -import android.content.res.Configuration; -import android.database.Cursor; -import android.database.DataSetObserver; -import android.graphics.Bitmap; -import android.graphics.BitmapFactory; -import android.graphics.Matrix; -import android.graphics.drawable.Drawable; +import android.content.DialogInterface.OnClickListener; +import android.content.Intent; import android.net.Uri; import android.os.Bundle; -import android.os.Environment; -import android.support.v4.app.FragmentActivity; -import android.support.v4.app.FragmentTransaction; +import android.support.v4.app.ActionBar; +import android.support.v4.app.ActionBar.OnNavigationListener; import android.support.v4.view.Menu; import android.support.v4.view.MenuItem; -import android.text.TextUtils; -import android.util.Log; import android.view.MenuInflater; -import android.view.View; -import android.view.ViewGroup; -import android.view.Window; import android.widget.ArrayAdapter; -import android.widget.ImageView; -import android.widget.ListView; -import android.widget.Spinner; -import android.widget.SpinnerAdapter; -import android.widget.TextView; +import android.widget.EditText; import eu.alefzero.owncloud.R; -import eu.alefzero.owncloud.R.id; -import eu.alefzero.owncloud.R.layout; -import eu.alefzero.owncloud.R.menu; -import eu.alefzero.owncloud.R.string; import eu.alefzero.owncloud.authenticator.AccountAuthenticator; -import eu.alefzero.owncloud.db.DbHandler; -import eu.alefzero.owncloud.db.ProviderMeta.ProviderTableMeta; -import eu.alefzero.owncloud.ui.fragment.FileDetail; +import eu.alefzero.owncloud.datamodel.OCFile; import eu.alefzero.owncloud.ui.fragment.FileList; -import eu.alefzero.owncloud.ui.fragment.ActionBar; +import eu.alefzero.webdav.WebdavClient; /** * Displays, what files the user has available in his ownCloud. @@ -79,14 +49,7 @@ import eu.alefzero.owncloud.ui.fragment.ActionBar; */ public class FileDisplayActivity extends android.support.v4.app.FragmentActivity implements OnNavigationListener { - private DbHandler mDBHandler; - private Stack mParents; - private LinkedList mPath; - private Account mAccount; - private Cursor mCursor; - private boolean mIsDisplayingFile; private ArrayAdapter mDirectories; - private FileList mFileList; private static final int DIALOG_CHOOSE_ACCOUNT = 0; @@ -96,74 +59,75 @@ public class FileDisplayActivity extends android.support.v4.app.FragmentActivity public boolean popPath() { mDirectories.remove(mDirectories.getItem(0)); - Log.d("TAG", ""+getActionBar().getCustomView()); return !mDirectories.isEmpty(); } @Override + protected Dialog onCreateDialog(int id, Bundle args) { + final AlertDialog.Builder builder = new Builder(this); + final EditText dirName = new EditText(getBaseContext()); + builder.setView(dirName); + builder.setTitle(R.string.uploader_info_dirname); + + builder.setPositiveButton(R.string.common_ok, new OnClickListener() { + public void onClick(DialogInterface dialog, int which) { + String s = dirName.getText().toString(); + if (s.trim().isEmpty()) { + dialog.cancel(); + return; + } + AccountManager am = (AccountManager) getSystemService(ACCOUNT_SERVICE); + // following account choosing is incorrect and needs to be replaced + // with some sort of session mechanism + Account a = am.getAccountsByType(AccountAuthenticator.ACCOUNT_TYPE)[0]; + + String path = ""; + for (int i = mDirectories.getCount()-2; i >= 0; --i) { + path += "/" + mDirectories.getItem(i); + } + OCFile parent = new OCFile(getContentResolver(), a, path+"/"); + path += "/" + s + "/"; + Thread thread = new Thread(new DirectoryCreator(path, a, am)); + thread.start(); + OCFile.createNewFile(getContentResolver(), a, path, 0, 0, 0, "DIR", parent.getFileId()).save(); + + dialog.dismiss(); + } + }); + builder.setNegativeButton(R.string.common_cancel, new OnClickListener() { + public void onClick(DialogInterface dialog, int which) { + dialog.cancel(); + } + }); + return builder.create(); + } + + @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); mDirectories = new ArrayAdapter(this, android.R.layout.simple_spinner_dropdown_item); mDirectories.add("/"); - mFileList = new FileList(); setContentView(R.layout.files); - getActionBar().setNavigationMode(android.support.v4.app.ActionBar.NAVIGATION_MODE_LIST); - getActionBar().setDisplayShowTitleEnabled(false); - getActionBar().setListNavigationCallbacks(mDirectories, this); - - FragmentTransaction ft = getSupportFragmentManager().beginTransaction(); - ft.add(R.id.fileList, mFileList); - if (getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE) { - ft.add(R.id.fileDetail, new FileDetail()); - } - ft.commit(); - - /*getSupportFragmentManager().beginTransaction().add(arg0, arg1); - FileList fl = new FileList(); - ft.add(R.id.fileList, fl); - ft.commit(); - /* - - - 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; - } - - mDBHandler = new DbHandler(getBaseContext()); - requestWindowFeature(Window.FEATURE_NO_TITLE); - setContentView(R.layout.main); - - AccountManager accMan = AccountManager.get(this); - Account[] accounts = accMan.getAccountsByType(AccountAuthenticator.ACCOUNT_TYPE); - - if (accounts.length == 0) { - // using string value since in API7 this constatn is not defined - // in API7 < this constatant is defined in Settings.ADD_ACCOUNT_SETTINGS - // and Settings.EXTRA_AUTHORITIES - Intent intent = new Intent("android.settings.ADD_ACCOUNT_SETTINGS"); - intent.putExtra("authorities", new String[] {AccountAuthenticator.AUTH_TOKEN_TYPE}); - startActivity(intent); - } else if (accounts.length > 1) { - showDialog(DIALOG_CHOOSE_ACCOUNT); - } else { - mAccount = accounts[0]; - populateFileList(); - }*/ + ActionBar action_bar = getSupportActionBar(); + action_bar.setNavigationMode(android.support.v4.app.ActionBar.NAVIGATION_MODE_LIST); + action_bar.setDisplayShowTitleEnabled(false); + action_bar.setListNavigationCallbacks(mDirectories, this); } @Override public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { case R.id.settingsItem : + { Intent i = new Intent(this, Preferences.class); startActivity(i); break; + } + case R.id.createDirectoryItem: + { + showDialog(0); + break; + } } return true; } @@ -184,7 +148,7 @@ public class FileDisplayActivity extends android.support.v4.app.FragmentActivity inflater.inflate(R.menu.menu, menu); return true; } - + private Dialog createChooseAccountDialog() { final AccountManager accMan = AccountManager.get(this); CharSequence[] items = new CharSequence[accMan.getAccountsByType(AccountAuthenticator.ACCOUNT_TYPE).length]; @@ -198,9 +162,8 @@ public class FileDisplayActivity extends android.support.v4.app.FragmentActivity builder.setCancelable(true); builder.setItems(items, new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int item) { - mAccount = accMan.getAccountsByType(AccountAuthenticator.ACCOUNT_TYPE)[item]; + //mAccount = accMan.getAccountsByType(AccountAuthenticator.ACCOUNT_TYPE)[item]; dialog.dismiss(); - populateFileList(); } }); builder.setOnCancelListener(new OnCancelListener() { @@ -212,169 +175,11 @@ public class FileDisplayActivity extends android.support.v4.app.FragmentActivity return alert; } - //@Override - //public void onBackPressed() { - /*PathLayout pl = (PathLayout) findViewById(R.id.pathLayout1); - if (mIsDisplayingFile) { - mIsDisplayingFile = false; - setContentView(R.layout.main); - pl = (PathLayout) findViewById(R.id.pathLayout1); - Uri uri; - if (mParents.empty()) { - uri = ProviderTableMeta.CONTENT_URI; - } else { - uri = Uri.withAppendedPath(ProviderTableMeta.CONTENT_URI_DIR, mParents.peek()); - } - mCursor = managedQuery(uri, - null, - ProviderTableMeta.FILE_ACCOUNT_OWNER+"=?", - new String[]{mAccount.name}, null); - - if (mCursor.moveToFirst()) { - String s = mCursor.getString(mCursor.getColumnIndex(ProviderTableMeta.FILE_PATH)); - for (String str : s.split("/")) { - if (!TextUtils.isEmpty(str)) - pl.push(DisplayUtils.HtmlDecode(str)); - } - } - getListView().setAdapter(new FileListListAdapter(mCursor, this)); - getListView().invalidate(); - return; - } - if (mParents.size()==0) { - super.onBackPressed(); - return; - } else if (mParents.size() == 1) { - mParents.pop(); - mPath.removeLast(); - pl.pop(); - mCursor = managedQuery(ProviderTableMeta.CONTENT_URI, - null, - ProviderTableMeta.FILE_ACCOUNT_OWNER+"=?", - new String[]{mAccount.name}, - null); - } else { - mParents.pop(); - mPath.removeLast(); - pl.pop(); - mCursor = managedQuery(Uri.withAppendedPath(ProviderTableMeta.CONTENT_URI_DIR, mParents.peek()), - null, - ProviderTableMeta.FILE_ACCOUNT_OWNER+"=?", - new String[]{mAccount.name}, - null); - } - - setListAdapter(new FileListListAdapter(mCursor, this)); - getListView().invalidate();*/ - //} - - //@Override -/* protected void onListItemClick(ListView l, View v, int position, long id) { - super.onListItemClick(l, v, position, id); - /*PathLayout pl = (PathLayout) findViewById(R.id.pathLayout1); - if (!mCursor.moveToPosition(position)) { - throw new IndexOutOfBoundsException("Incorrect item selected"); - } - if (!mIsDisplayingFile) { - if (mCursor.getString(mCursor.getColumnIndex(ProviderTableMeta.FILE_CONTENT_TYPE)).equals("DIR")) { - 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, - ProviderTableMeta.FILE_ACCOUNT_OWNER + "=?", - new String[]{mAccount.name}, null); - setListAdapter(new FileListListAdapter(mCursor, this)); - } else { - mIsDisplayingFile = true; - setContentView(R.layout.file_display); - String id_ = mCursor.getString(mCursor.getColumnIndex(ProviderTableMeta._ID)); - mCursor = managedQuery(Uri.withAppendedPath(ProviderTableMeta.CONTENT_URI_FILE, id_), - null, - null, - null, - null); - mCursor.moveToFirst(); - // filename - TextView tv = (TextView) findViewById(R.id.textView1); - tv.setText(mCursor.getString(mCursor.getColumnIndex(ProviderTableMeta.FILE_NAME))); - // filetype - tv = (TextView) findViewById(R.id.textView2); - tv.setText(DisplayUtils.convertMIMEtoPrettyPrint(mCursor.getString(mCursor.getColumnIndex(ProviderTableMeta.FILE_CONTENT_TYPE)))); - // size - tv = (TextView) findViewById(R.id.textView3); - tv.setText(DisplayUtils.bitsToHumanReadable(mCursor.getLong(mCursor.getColumnIndex(ProviderTableMeta.FILE_CONTENT_LENGTH)))); - // 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))) && - 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(); - float scale; - if (bmp.getWidth() > bmp.getHeight()) { - scale = (float) (200./bmp.getWidth()); - } else { - scale = (float) (200./bmp.getHeight()); - } - m.postScale(scale, scale); - Bitmap newBmp = Bitmap.createBitmap(bmp, 0, 0, bmp.getWidth(), bmp.getHeight(), m, true); - iv.setImageBitmap(newBmp); - } - setListAdapter(new FileListActionListAdapter(mCursor, this, mAccount)); - } - getListView().invalidate(); - } else { - Intent i = (Intent) getListAdapter().getItem(position); - if (i.hasExtra("toDownload")) { - - Intent intent = new Intent(this, FileDownloader.class); - intent.putExtra(FileDownloader.EXTRA_FILE_PATH, "/"+((TextView)findViewById(R.id.textView1)).getText().toString()); - intent.putExtra(FileDownloader.EXTRA_ACCOUNT, mAccount); - startService(intent); - /* - if (i.getBooleanExtra("toDownload", false)) { - startActivityForResult(i, 200); - } else { - startActivity(i); - }*/ - // } - - //} -// } - - private void populateFileList() { - 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 boolean onNavigationItemSelected(int itemPosition, long itemId) { int i = itemPosition; while (i-- != 0) { - popPath(); - mFileList.onBackPressed(); + onBackPressed(); } return true; } @@ -382,23 +187,37 @@ public class FileDisplayActivity extends android.support.v4.app.FragmentActivity @Override public void onBackPressed() { popPath(); - if (mDirectories.isEmpty()) { + if (mDirectories.getCount() == 0) + { super.onBackPressed(); + return; } - mFileList.onBackPressed(); + ((FileList)getSupportFragmentManager().findFragmentById(R.id.fileList)).onBackPressed(); } - //@Override - /*protected void onActivityResult(int requestCode, int resultCode, Intent data) { - super.onActivityResult(requestCode, resultCode, data); + private class DirectoryCreator implements Runnable { + private String mTargetPath; + private Account mAccount; + private AccountManager mAm; + + public DirectoryCreator(String targetPath, Account account, AccountManager am) { + mTargetPath = targetPath; + mAccount = account; + mAm = am; + } + + @Override + public void run() { + WebdavClient wdc = new WebdavClient(Uri.parse(mAm.getUserData(mAccount, + AccountAuthenticator.KEY_OC_URL))); + + String username = mAccount.name.substring(0, mAccount.name.lastIndexOf('@')); + String password = mAm.getPassword(mAccount); + + wdc.setCredentials(username, password); + wdc.allowUnsignedCertificates(); + wdc.createDirectory(mTargetPath); + } + } - - @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