From: Lennart Rosam Date: Wed, 23 May 2012 17:59:51 +0000 (+0200) Subject: Merge branch 'master' of ssh://git@gitorious.org/owncloud/android-devel.git X-Git-Tag: oc-android-1.4.3~395 X-Git-Url: http://git.linex4red.de/pub/Android/ownCloud.git/commitdiff_plain/62908d175512a1a82bac58fb62dc6389045dff8c?ds=sidebyside;hp=-c Merge branch 'master' of ssh://git@gitorious.org/owncloud/android-devel.git --- 62908d175512a1a82bac58fb62dc6389045dff8c diff --combined src/eu/alefzero/owncloud/ui/activity/FileDisplayActivity.java index 832ccae8,7f92d5a8..a7dc0b85 --- a/src/eu/alefzero/owncloud/ui/activity/FileDisplayActivity.java +++ b/src/eu/alefzero/owncloud/ui/activity/FileDisplayActivity.java @@@ -20,6 -20,8 +20,6 @@@ package eu.alefzero.owncloud.ui.activit import java.io.File; import java.net.URLDecoder; -import java.net.URLEncoder; - import android.accounts.Account; import android.accounts.AccountManager; import android.app.AlertDialog; @@@ -60,6 -62,7 +60,6 @@@ import eu.alefzero.owncloud.datamodel.O import eu.alefzero.owncloud.files.services.FileUploader; import eu.alefzero.owncloud.syncadapter.FileSyncService; import eu.alefzero.owncloud.ui.fragment.FileListFragment; -import eu.alefzero.owncloud.utils.OwnCloudVersion; import eu.alefzero.webdav.WebdavClient; /** @@@ -81,6 -84,8 +81,6 @@@ public class FileDisplayActivity extend private static final int DIALOG_SETUP_ACCOUNT = 0; private static final int DIALOG_CREATE_DIR = 1; - - private static final int REQUEST_ACCOUNT_SETUP = 0; private static final int ACTION_SELECT_FILE = 1; public void pushPath(String path) { @@@ -170,7 -175,8 +170,7 @@@ requestWindowFeature(Window.FEATURE_INDETERMINATE_PROGRESS); setProgressBarIndeterminateVisibility(false); - // if (getSupportFragmentManager().findFragmentById(R.id.fileList) == - // null) + setContentView(R.layout.files); } @@@ -276,7 -282,7 +276,7 @@@ mDirectories.insert(s, 0); FileListFragment fileListFramgent = (FileListFragment) getSupportFragmentManager() .findFragmentById(R.id.fileList); - if (fileListFramgent != null) fileListFramgent.populateFileList(); + if (fileListFramgent != null) fileListFramgent.listDirectory(); } mStorageManager = new FileDataStorageManager( @@@ -290,7 -296,6 +290,6 @@@ } public void onActivityResult(int requestCode, int resultCode, Intent data) { - Log.e("ASD", requestCode + " " + resultCode); if (resultCode == RESULT_OK) { if (requestCode == ACTION_SELECT_FILE) { Uri selectedImageUri = data.getData(); @@@ -314,17 -319,16 +313,16 @@@ AccountUtils.getCurrentOwnCloudAccount(this)); String remotepath = new String(); for (int j = mDirectories.getCount() - 2; j >= 0; --j) { - remotepath += "/" + URLDecoder.decode(mDirectories.getItem(j)); + remotepath += "/" + URLEncoder.encode(mDirectories.getItem(j)); } if (!remotepath.endsWith("/")) remotepath += "/"; - remotepath += new File(filepath).getName(); + remotepath += URLEncoder.encode(new File(filepath).getName()); Log.e("ASD", remotepath + ""); i.putExtra(FileUploader.KEY_LOCAL_FILE, filepath); i.putExtra(FileUploader.KEY_REMOTE_FILE, remotepath); - i.putExtra(FileUploader.KEY_UPLOAD_TYPE, - FileUploader.UPLOAD_SINGLE_FILE); + i.putExtra(FileUploader.KEY_UPLOAD_TYPE, FileUploader.UPLOAD_SINGLE_FILE); startService(i); } } @@@ -460,7 -464,7 +458,7 @@@ FileListFragment fileListFramgent = (FileListFragment) getSupportFragmentManager() .findFragmentById(R.id.fileList); if (fileListFramgent != null) - fileListFramgent.populateFileList(); + fileListFramgent.listDirectory(); } } diff --combined src/eu/alefzero/owncloud/ui/fragment/FileListFragment.java index e3267309,a28c411f..24281b6e --- a/src/eu/alefzero/owncloud/ui/fragment/FileListFragment.java +++ b/src/eu/alefzero/owncloud/ui/fragment/FileListFragment.java @@@ -48,12 -48,10 +48,12 @@@ import eu.alefzero.owncloud.ui.adapter. * */ public class FileListFragment extends FragmentListView { + private static final String TAG = "FileListFragment"; private Account mAccount; private Stack mDirNames; private Vector mFiles; private DataStorageManager mStorageManager; + private OCFile mFile; private boolean mIsLargeDevice = false; public FileListFragment() { @@@ -65,19 -63,15 +65,19 @@@ super.onCreate(savedInstanceState); mAccount = AccountUtils.getCurrentOwnCloudAccount(getActivity()); + mStorageManager = new FileDataStorageManager(mAccount, getActivity().getContentResolver()); getListView().setDivider(getResources().getDrawable(R.drawable.uploader_list_separator)); getListView().setDividerHeight(1); - populateFileList(); + Intent intent = getActivity().getIntent(); + OCFile directory = intent.getParcelableExtra(FileDetailFragment.EXTRA_FILE); + mFile = directory; + + listDirectory(directory); } @Override public void onStart() { - // Create a placeholder upon launch View fragmentContainer = getActivity().findViewById(R.id.file_details_container); if (fragmentContainer != null) { @@@ -95,23 -89,22 +95,23 @@@ throw new IndexOutOfBoundsException("Incorrect item selected"); } OCFile file = mFiles.get(position); - + mFile = file; + // Update ActionBarPath if (file.getMimetype().equals("DIR")) { String dirname = file.getFileName(); mDirNames.push(dirname); ((FileDisplayActivity) getActivity()).pushPath(dirname); - - populateFileList(); + + listDirectory(file); resetFileFragment(); return; } Intent showDetailsIntent = new Intent(getActivity(), FileDetailActivity.class); - showDetailsIntent.putExtra(FileDetailFragment.FILE, file); + showDetailsIntent.putExtra(FileDetailFragment.EXTRA_FILE, file); showDetailsIntent.putExtra(FileDownloader.EXTRA_ACCOUNT, mAccount); // If we are on a large device -> update fragment @@@ -144,67 -137,31 +144,58 @@@ } } - @Override - public boolean onItemLongClick(AdapterView arg0, View arg1, int arg2, long arg3) { - ClipData.Item item = new ClipData.Item("ASD"); - ClipDescription cd = new ClipDescription("ASD", new String[] { ClipDescription.MIMETYPE_TEXT_PLAIN }); - ClipData dragData = new ClipData(cd, item); - arg1.startDrag(dragData, new View.DragShadowBuilder(arg0.getChildAt(arg2)), null, 0); - return true; - } - /** * Call this, when the user presses the up button */ public void onNavigateUp() { mDirNames.pop(); - populateFileList(); + OCFile parentDir = null; + + if(mFile != null){ + parentDir = mStorageManager.getFileById(mFile.getParentId()); + mFile = parentDir; + } + + listDirectory(parentDir); resetFileFragment(); } /** - * Lists the directory + * Calls {@link FileListFragment#listDirectory(OCFile)} with a null parameter */ - public void populateFileList() { - String s = "/"; - for (String a : mDirNames) - s += a + "/"; - Log.e("ASD", s); - - mStorageManager = new FileDataStorageManager(mAccount, getActivity().getContentResolver()); - OCFile file = mStorageManager.getFileByPath(s); - mFiles = mStorageManager.getDirectoryContent(file); + public void listDirectory(){ + listDirectory(null); + } + + /** + * Lists the given directory on the view. When the input parameter is null, + * it will either refresh the last known directory, or list the root + * if there never was a directory. + * + * @param directory File to be listed + */ + public void listDirectory(OCFile directory) { + + // Check input parameters for null + if(directory == null){ + if(mFile != null){ + directory = mFile; + } else { + directory = mStorageManager.getFileByPath("/"); + } + } + + // If that's not a directory -> List its parent + if(!directory.isDirectory()){ + Log.w(TAG, "You see, that is not a directory -> " + directory.toString()); + directory = mStorageManager.getFileById(directory.getParentId()); + } + + mFiles = mStorageManager.getDirectoryContent(directory); if (mFiles == null || mFiles.size() == 0) { Toast.makeText(getActivity(), "There are no files here", Toast.LENGTH_LONG).show(); } - setListAdapter(new FileListListAdapter(file, mStorageManager, getActivity())); + setListAdapter(new FileListListAdapter(directory, mStorageManager, getActivity())); } @Override @@@ -212,5 -169,48 +203,5 @@@ super.onSaveInstanceState(outState); outState.putParcelable("ACCOUNT", mAccount); } - - // TODO: Delete this testing stuff. - /* - * private void addContact(Account account, String name, String username) { - * Log.i("ASD", "Adding contact: " + name); - * ArrayList operationList = new - * ArrayList(); - * - * //Create our RawContact ContentProviderOperation.Builder builder = - * ContentProviderOperation.newInsert(RawContacts.CONTENT_URI); - * builder.withValue(RawContacts.ACCOUNT_NAME, account.name); - * builder.withValue(RawContacts.ACCOUNT_TYPE, account.type); - * builder.withValue(RawContacts.SYNC1, username); - * operationList.add(builder.build()); - * - * //Create a Data record of common type 'StructuredName' for our RawContact - * builder = - * ContentProviderOperation.newInsert(ContactsContract.Data.CONTENT_URI); - * builder - * .withValueBackReference(ContactsContract.CommonDataKinds.StructuredName - * .RAW_CONTACT_ID, 0); builder.withValue(ContactsContract.Data.MIMETYPE, - * ContactsContract.CommonDataKinds.StructuredName.CONTENT_ITEM_TYPE); - * builder - * .withValue(ContactsContract.CommonDataKinds.StructuredName.DISPLAY_NAME, - * name); operationList.add(builder.build()); - * - * //Create a Data record of custom type - * "vnd.android.cursor.item/vnd.fm.last.android.profile" to display a link - * to the Last.fm profile builder = - * ContentProviderOperation.newInsert(ContactsContract.Data.CONTENT_URI); - * builder.withValueBackReference(ContactsContract.Data.RAW_CONTACT_ID, 0); - * builder.withValue(ContactsContract.Data.MIMETYPE, - * "vnd.android.cursor.item/vnd.owncloud.contact.profile"); - * builder.withValue(ContactsContract.Data.DATA1, username); - * builder.withValue(ContactsContract.Data.DATA2, "Last.fm Profile"); - * builder.withValue(ContactsContract.Data.DATA3, "View profile"); - * operationList.add(builder.build()); - * - * try { - * getActivity().getContentResolver().applyBatch(ContactsContract.AUTHORITY, - * operationList); } catch (Exception e) { Log.e("ASD", - * "Something went wrong during creation! " + e); e.printStackTrace(); } } - */ }