+++ /dev/null
-/* ownCloud Android client application\r
- * Copyright (C) 2011 Bartek Przybylski\r
- *\r
- * This program is free software: you can redistribute it and/or modify\r
- * it under the terms of the GNU General Public License as published by\r
- * the Free Software Foundation, either version 3 of the License, or\r
- * (at your option) any later version.\r
- *\r
- * This program is distributed in the hope that it will be useful,\r
- * but WITHOUT ANY WARRANTY; without even the implied warranty of\r
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\r
- * GNU General Public License for more details.\r
- *\r
- * You should have received a copy of the GNU General Public License\r
- * along with this program. If not, see <http://www.gnu.org/licenses/>.\r
- *\r
- */\r
-package eu.alefzero.owncloud.ui.fragment;\r
-\r
-import java.util.Vector;\r
-\r
-import android.accounts.Account;\r
-import android.content.Intent;\r
-import android.os.Bundle;\r
-import android.support.v4.app.FragmentTransaction;\r
-import android.util.Log;\r
-import android.view.View;\r
-import android.widget.AdapterView;\r
-import android.widget.Toast;\r
-import eu.alefzero.owncloud.AccountUtils;\r
-import eu.alefzero.owncloud.FileDownloader;\r
-import eu.alefzero.owncloud.R;\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.ui.FragmentListView;\r
-import eu.alefzero.owncloud.ui.activity.FileDetailActivity;\r
-import eu.alefzero.owncloud.ui.activity.FileDisplayActivity;\r
-import eu.alefzero.owncloud.ui.adapter.FileListListAdapter;\r
-\r
-/**\r
- * A Fragment that lists all files and folders in a given path.\r
- * \r
- * @author Bartek Przybylski\r
- * \r
- */\r
-public class FileListFragment extends FragmentListView {\r
- private static final String TAG = "FileListFragment";\r
- private Account mAccount;\r
- private Vector<OCFile> mFiles;\r
- private DataStorageManager mStorageManager;\r
- private OCFile mFile;\r
- private boolean mIsLargeDevice = false; \r
-\r
- @Override\r
- public void onCreate(Bundle savedInstanceState) {\r
- super.onCreate(savedInstanceState);\r
-\r
- mAccount = AccountUtils.getCurrentOwnCloudAccount(getActivity());\r
- mStorageManager = new FileDataStorageManager(mAccount, getActivity().getContentResolver());\r
- getListView().setDivider(getResources().getDrawable(R.drawable.uploader_list_separator));\r
- getListView().setDividerHeight(1);\r
-\r
- Intent intent = getActivity().getIntent();\r
- OCFile directory = intent.getParcelableExtra(FileDetailFragment.EXTRA_FILE);\r
- mFile = directory;\r
- \r
- listDirectory(directory);\r
- }\r
-\r
- @Override\r
- public void onStart() {\r
- // Create a placeholder upon launch\r
- View fragmentContainer = getActivity().findViewById(R.id.file_details_container);\r
- if (fragmentContainer != null) {\r
- mIsLargeDevice = true;\r
- FragmentTransaction transaction = getFragmentManager().beginTransaction();\r
- transaction.replace(R.id.file_details_container, new FileDetailFragment(true));\r
- transaction.commit();\r
- }\r
- super.onStart();\r
- }\r
-\r
- @Override\r
- public void onItemClick(AdapterView<?> l, View v, int position, long id) {\r
- if (mFiles.size() <= position) {\r
- throw new IndexOutOfBoundsException("Incorrect item selected");\r
- }\r
- OCFile file = mFiles.get(position);\r
- \r
- // Update ActionBarPath\r
- if (file.getMimetype().equals("DIR")) {\r
- mFile = file;\r
- ((FileDisplayActivity) getActivity()).pushDirname(file);\r
- listDirectory(file);\r
- resetFileFragment();\r
- return;\r
- }\r
-\r
- Intent showDetailsIntent = new Intent(getActivity(), FileDetailActivity.class);\r
- showDetailsIntent.putExtra(FileDetailFragment.EXTRA_FILE, file);\r
- showDetailsIntent.putExtra(FileDownloader.EXTRA_ACCOUNT, mAccount);\r
-\r
- // If we are on a large device -> update fragment\r
- if (mIsLargeDevice) {\r
- FileDetailFragment fileDetails = (FileDetailFragment) getFragmentManager().findFragmentByTag("FileDetails");\r
- if (fileDetails == null) {\r
- FragmentTransaction transaction = getFragmentManager().beginTransaction();\r
- transaction.replace(R.id.file_details_container, new FileDetailFragment(showDetailsIntent), "FileDetails");\r
- transaction.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE);\r
- transaction.commit();\r
- } else {\r
- fileDetails.updateFileDetails(showDetailsIntent);\r
- }\r
- } else {\r
- startActivity(showDetailsIntent);\r
- }\r
- }\r
-\r
- /**\r
- * Resets the FileDetailsFragment on Tablets so that it always displays\r
- * "Tab on a file to display it's details"\r
- */\r
- private void resetFileFragment() {\r
- FileDetailFragment fileDetails = (FileDetailFragment) getFragmentManager().findFragmentByTag("FileDetails");\r
- if (fileDetails != null) {\r
- FragmentTransaction transaction = getFragmentManager().beginTransaction();\r
- transaction.remove(fileDetails);\r
- transaction.add(R.id.file_details_container, new FileDetailFragment(true));\r
- transaction.commit();\r
- }\r
- }\r
-\r
- /**\r
- * Call this, when the user presses the up button\r
- */\r
- public void onNavigateUp() {\r
- OCFile parentDir = null;\r
- \r
- if(mFile != null){\r
- parentDir = mStorageManager.getFileById(mFile.getParentId());\r
- mFile = parentDir;\r
- }\r
- \r
- listDirectory(parentDir);\r
- resetFileFragment();\r
- }\r
-\r
- /**\r
- * Use this to query the {@link OCFile} that is currently\r
- * being displayed by this fragment\r
- * @return The currently viewed OCFile\r
- */\r
- public OCFile getCurrentFile(){\r
- return mFile;\r
- }\r
- \r
- /**\r
- * Calls {@link FileListFragment#listDirectory(OCFile)} with a null parameter\r
- */\r
- public void listDirectory(){\r
- listDirectory(null);\r
- }\r
- \r
- /**\r
- * Lists the given directory on the view. When the input parameter is null,\r
- * it will either refresh the last known directory, or list the root\r
- * if there never was a directory.\r
- * \r
- * @param directory File to be listed\r
- */\r
- public void listDirectory(OCFile directory) {\r
- \r
- // Check input parameters for null\r
- if(directory == null){\r
- if(mFile != null){\r
- directory = mFile;\r
- } else {\r
- directory = mStorageManager.getFileByPath("/");\r
- }\r
- }\r
- \r
- \r
- // If that's not a directory -> List its parent\r
- if(!directory.isDirectory()){\r
- Log.w(TAG, "You see, that is not a directory -> " + directory.toString());\r
- directory = mStorageManager.getFileById(directory.getParentId());\r
- }\r
-\r
- mFile = directory;\r
- \r
- mFiles = mStorageManager.getDirectoryContent(directory);\r
- if (mFiles == null || mFiles.size() == 0) {\r
- Toast.makeText(getActivity(), "There are no files here", Toast.LENGTH_LONG).show();\r
- }\r
- setListAdapter(new FileListListAdapter(directory, mStorageManager, getActivity()));\r
- }\r
-\r
- @Override\r
- public void onSaveInstanceState(Bundle outState) {\r
- super.onSaveInstanceState(outState);\r
- outState.putParcelable("ACCOUNT", mAccount);\r
- }\r
-\r
-}\r