\r
import java.util.Vector;\r
\r
-import com.actionbarsherlock.app.ActionBar;\r
-\r
-import android.accounts.Account;\r
-import android.content.Intent;\r
+import android.app.Activity;\r
import android.os.Bundle;\r
-import android.support.v4.app.FragmentTransaction;\r
import android.util.Log;\r
import android.view.LayoutInflater;\r
import android.view.View;\r
import android.view.ViewGroup;\r
import android.widget.AdapterView;\r
-import android.widget.Toast;\r
-import eu.alefzero.owncloud.AccountUtils;\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.files.services.FileDownloader;\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
public class FileListFragment extends FragmentListView {\r
private static final String TAG = "FileListFragment";\r
\r
+ private FileListFragment.ContainerActivity mContainerActivity;\r
+ \r
private Vector<OCFile> mFiles; \r
- private OCFile mFile;\r
- private boolean mIsLargeDevice; \r
+ private OCFile mFile = null;\r
\r
+ \r
+ /**\r
+ * {@inheritDoc}\r
+ */\r
@Override\r
- public void onCreate(Bundle savedInstanceState) {\r
- Log.i(getClass().toString(), "onCreate() start");\r
- super.onCreate(savedInstanceState);\r
-\r
- Intent intent = getActivity().getIntent();\r
- OCFile directory = intent.getParcelableExtra(FileDetailFragment.EXTRA_FILE);\r
- mFile = directory;\r
- mIsLargeDevice = false; \r
- \r
- Log.i(getClass().toString(), "onCreate() stop");\r
+ public void onAttach(Activity activity) {\r
+ super.onAttach(activity);\r
+ try {\r
+ mContainerActivity = (ContainerActivity) activity;\r
+ } catch (ClassCastException e) {\r
+ throw new ClassCastException(activity.toString() + " must implement FileListFragment.ContainerActivity");\r
+ }\r
}\r
\r
+ \r
@Override\r
public View onCreateView(LayoutInflater inflater, ViewGroup container,\r
Bundle savedInstanceState) {\r
return getListView();\r
} \r
\r
+\r
@Override\r
- public void onStart() {\r
- Log.i(getClass().toString(), "onStart() start");\r
- super.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
- Log.i(getClass().toString(), "onStart() end");\r
+ public void onActivityCreated(Bundle savedInstanceState) {\r
+ Log.i(getClass().toString(), "onActivityCreated() start");\r
+ \r
+ super.onCreate(savedInstanceState);\r
+ \r
+ Log.i(getClass().toString(), "onActivityCreated() stop");\r
}\r
-\r
+ \r
+ \r
@Override\r
public void onItemClick(AdapterView<?> l, View v, int position, long id) {\r
if (mFiles.size() <= position) {\r
}\r
OCFile file = mFiles.get(position);\r
\r
- // Update ActionBarPath\r
+ /// Click on a directory\r
if (file.getMimetype().equals("DIR")) {\r
+ // just local updates\r
mFile = file;\r
- ((FileDisplayActivity) getActivity()).pushDirname(file);\r
- ActionBar actionBar = ((FileDisplayActivity) getActivity()).getSupportActionBar();\r
- actionBar.setDisplayHomeAsUpEnabled(true);\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, AccountUtils.getCurrentOwnCloudAccount(getActivity()));\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
+ // any other updates are let to the container Activity\r
+ mContainerActivity.onDirectoryClick(file);\r
+ \r
+ } else { /// Click on a file\r
+ mContainerActivity.onFileClick(file);\r
}\r
+ \r
}\r
\r
/**\r
OCFile parentDir = null;\r
\r
if(mFile != null){\r
- DataStorageManager storageManager = ((FileDisplayActivity)getActivity()).getStorageManager();\r
+ DataStorageManager storageManager = mContainerActivity.getStorageManager();\r
parentDir = storageManager.getFileById(mFile.getParentId());\r
mFile = parentDir;\r
}\r
- \r
listDirectory(parentDir);\r
- resetFileFragment();\r
}\r
\r
/**\r
*/\r
public void listDirectory(OCFile directory) {\r
\r
- DataStorageManager storageManager = ((FileDisplayActivity)getActivity()).getStorageManager();\r
+ DataStorageManager storageManager = mContainerActivity.getStorageManager();\r
\r
// Check input parameters for null\r
if(directory == null){\r
}\r
\r
mFile = directory;\r
- \r
mFiles = storageManager.getDirectoryContent(directory);\r
+ \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, storageManager, getActivity()));\r
}\r
+ \r
+ \r
+ \r
+ /**\r
+ * Interface to implement by any Activity that includes some instance of FileListFragment\r
+ * \r
+ * @author David A. Velasco\r
+ */\r
+ public interface ContainerActivity {\r
+\r
+ /**\r
+ * Callback method invoked when a directory is clicked by the user on the files list\r
+ * \r
+ * @param file\r
+ */\r
+ public void onDirectoryClick(OCFile file);\r
+ \r
+ /**\r
+ * Callback method invoked when a file (non directory) is clicked by the user on the files list\r
+ * \r
+ * @param file\r
+ */\r
+ public void onFileClick(OCFile file);\r
+\r
+ /**\r
+ * Getter for the current DataStorageManager in the container activity\r
+ */\r
+ public DataStorageManager getStorageManager();\r
+ \r
+ }\r
\r
}\r