import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentTransaction;
import android.support.v4.view.GravityCompat;
-import android.support.v7.app.ActionBar;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
-import android.view.ViewGroup;
import android.view.Window;
-import android.widget.ArrayAdapter;
-import android.widget.TextView;
import android.widget.Toast;
import com.owncloud.android.MainApp;
import com.owncloud.android.R;
+import com.owncloud.android.datamodel.FileDataStorageManager;
import com.owncloud.android.datamodel.OCFile;
import com.owncloud.android.files.services.FileDownloader;
import com.owncloud.android.files.services.FileDownloader.FileDownloaderBinder;
* Displays, what files the user has available in his ownCloud.
*/
-public class FileDisplayActivity extends HookActivity implements
- FileFragment.ContainerActivity, ActionBar.OnNavigationListener,
+public class FileDisplayActivity extends HookActivity
+ implements FileFragment.ContainerActivity,
OnSslUntrustedCertListener, OnEnforceableRefreshListener {
-
- private ArrayAdapter<String> mDirectories;
private SyncBroadcastReceiver mSyncBroadcastReceiver;
private UploadFinishReceiver mUploadFinishReceiver;
}
// Action bar setup
- mDirectories = new CustomArrayAdapter<String>(this,
- R.layout.support_simple_spinner_dropdown_item);
getSupportActionBar().setHomeButtonEnabled(true); // mandatory since Android ICS,
// according to the official
// documentation
setSupportProgressBarIndeterminateVisibility(mSyncInProgress
/*|| mRefreshSharesInProgress*/);
// always AFTER setContentView(...) ; to work around bug in its implementation
-
- // TODO Remove??, it is done in onPostCreate
-// mDrawerToggle.syncState();
setBackgroundText();
file = getStorageManager().getFileByPath(OCFile.ROOT_PATH); // never returns null
}
setFile(file);
- setNavigationListWithFolder(file);
if (!stateWasRecovered) {
Log_OC.d(TAG, "Initializing Fragments in onAccountChanged..");
} else {
updateFragmentsVisibility(!file.isFolder());
- updateNavigationElementsInActionBar(file.isFolder() ? null : file);
+ updateActionBarTitleAndHomeButton(file.isFolder() ? null : file);
}
}
}
- private void setNavigationListWithFolder(OCFile file) {
- mDirectories.clear();
- OCFile fileIt = file;
- String parentPath;
- while(fileIt != null && fileIt.getFileName() != OCFile.ROOT_PATH) {
- if (fileIt.isFolder()) {
- mDirectories.add(fileIt.getFileName());
- }
- // get parent from path
- parentPath = fileIt.getRemotePath().substring(0,
- fileIt.getRemotePath().lastIndexOf(fileIt.getFileName()));
- fileIt = getStorageManager().getFileByPath(parentPath);
- }
- mDirectories.add(OCFile.PATH_SEPARATOR);
- }
-
-
private void createMinFragments() {
OCFileListFragment listOfFiles = new OCFileListFragment();
FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
if (secondFragment != null) {
setSecondFragment(secondFragment);
updateFragmentsVisibility(true);
- updateNavigationElementsInActionBar(file);
+ updateActionBarTitleAndHomeButton(file);
} else {
cleanSecondFragment();
startPlaybackPosition, autoplay);
} else {
- secondFragment = new FileDetailFragment(file, getAccount());
+ secondFragment = FileDetailFragment.newInstance(file, getAccount());
}
}
return secondFragment;
tr.commit();
}
updateFragmentsVisibility(false);
- updateNavigationElementsInActionBar(null);
+ updateActionBarTitleAndHomeButton(null);
}
protected void refreshListOfFilesFragment() {
break;
}
case android.R.id.home: {
+ FileFragment second = getSecondFragment();
+ OCFile currentDir = getCurrentDir();
if (mDrawerLayout.isDrawerOpen(GravityCompat.START)) {
mDrawerLayout.closeDrawer(GravityCompat.START);
+ } else if((currentDir != null && currentDir.getParentId() != 0) ||
+ (second != null && second.getFile() != null)) {
+ onBackPressed();
+
} else {
mDrawerLayout.openDrawer(GravityCompat.START);
}
}
}
-
- @Override
- public boolean onNavigationItemSelected(int itemPosition, long itemId) {
- if (itemPosition != 0) {
- String targetPath = "";
- for (int i=itemPosition; i < mDirectories.getCount() - 1; i++) {
- targetPath = mDirectories.getItem(i) + OCFile.PATH_SEPARATOR + targetPath;
- }
- targetPath = OCFile.PATH_SEPARATOR + targetPath;
- OCFile targetFolder = getStorageManager().getFileByPath(targetPath);
- if (targetFolder != null) {
- browseTo(targetFolder);
- }
-
- // the next operation triggers a new call to this method, but it's necessary to
- // ensure that the name exposed in the action bar is the current directory when the
- // user selected it in the navigation list
- if (getSupportActionBar().getNavigationMode() == ActionBar.NAVIGATION_MODE_LIST &&
- itemPosition != 0)
- getSupportActionBar().setSelectedNavigationItem(0);
- }
- return true;
- }
-
/**
* Called, when the user selected something for uploading
*
String[] filePaths = data.getStringArrayExtra(UploadFilesActivity.EXTRA_CHOSEN_FILES);
if (filePaths != null) {
String[] remotePaths = new String[filePaths.length];
- String remotePathBase = "";
-
- for (int j = mDirectories.getCount() - 2; j >= 0; --j) {
- remotePathBase += OCFile.PATH_SEPARATOR + mDirectories.getItem(j);
- }
- if (!remotePathBase.endsWith(OCFile.PATH_SEPARATOR))
- remotePathBase += OCFile.PATH_SEPARATOR;
+ String remotePathBase = getCurrentDir().getRemotePath();
for (int j = 0; j< remotePaths.length; j++) {
remotePaths[j] = remotePathBase + (new File(filePaths[j])).getName();
}
public void onBackPressed() {
OCFileListFragment listOfFiles = getListOfFilesFragment();
if (mDualPane || getSecondFragment() == null) {
+ OCFile currentDir = getCurrentDir();
+ if (currentDir == null || currentDir.getParentId() == FileDataStorageManager.ROOT_PARENT_ID) {
+ finish();
+ return;
+ }
if (listOfFiles != null) { // should never be null, indeed
- if (mDirectories.getCount() <= 1) {
- finish();
- return;
- }
- int levelsUp = listOfFiles.onBrowseUp();
- for (int i=0; i < levelsUp && mDirectories.getCount() > 1 ; i++) {
- popDirname();
- }
+ listOfFiles.onBrowseUp();
}
}
if (listOfFiles != null) { // should never be null, indeed
// refresh Navigation Drawer account list
mNavigationDrawerAdapter.updateAccountList();
+
// refresh list of files
refreshListOfFilesFragment();
registerReceiver(mUploadFinishReceiver, uploadIntentFilter);
// Listen for download messages
- IntentFilter downloadIntentFilter = new IntentFilter(FileDownloader.getDownloadAddedMessage());
+ IntentFilter downloadIntentFilter = new IntentFilter(
+ FileDownloader.getDownloadAddedMessage());
downloadIntentFilter.addAction(FileDownloader.getDownloadFinishMessage());
mDownloadFinishReceiver = new DownloadFinishReceiver();
registerReceiver(mDownloadFinishReceiver, downloadIntentFilter);
Log_OC.v(TAG, "onPause() end");
}
- /**
- * Pushes a directory to the drop down list
- * @param directory to push
- * @throws IllegalArgumentException If the {@link OCFile#isFolder()} returns false.
- */
- public void pushDirname(OCFile directory) {
- if(!directory.isFolder()){
- throw new IllegalArgumentException("Only directories may be pushed!");
- }
- mDirectories.insert(directory.getFileName(), 0);
- setFile(directory);
- }
-
- /**
- * Pops a directory name from the drop down list
- * @return True, unless the stack is empty
- */
- public boolean popDirname() {
- mDirectories.remove(mDirectories.getItem(0));
- return !mDirectories.isEmpty();
- }
-
- // Custom array adapter to override text colors
- private class CustomArrayAdapter<T> extends ArrayAdapter<T> {
-
- public CustomArrayAdapter(FileDisplayActivity ctx, int view) {
- super(ctx, view);
- }
-
- public View getView(int position, View convertView, ViewGroup parent) {
- View v = super.getView(position, convertView, parent);
-
- ((TextView) v).setTextColor(getResources().getColorStateList(
- android.R.color.white));
-
- fixRoot((TextView) v );
- return v;
- }
-
- public View getDropDownView(int position, View convertView,
- ViewGroup parent) {
- View v = super.getDropDownView(position, convertView, parent);
-
- ((TextView) v).setTextColor(getResources().getColorStateList(
- android.R.color.white));
-
- fixRoot((TextView) v );
- return v;
- }
-
- private void fixRoot(TextView v) {
- if (v.getText().equals(OCFile.PATH_SEPARATOR)) {
- v.setText(R.string.default_display_name_for_root_folder);
- }
- }
-
- }
private class SyncBroadcastReceiver extends BroadcastReceiver {
// current folder was removed from the server
Toast.makeText( FileDisplayActivity.this,
String.format(
- getString(R.string.sync_current_folder_was_removed),
- mDirectories.getItem(0)),
+ getString(R.string.
+ sync_current_folder_was_removed),
+ synchFolderRemotePath),
Toast.LENGTH_LONG)
.show();
browseToRoot();
public void browseToRoot() {
OCFileListFragment listOfFiles = getListOfFilesFragment();
if (listOfFiles != null) { // should never be null, indeed
- while (mDirectories.getCount() > 1) {
- popDirname();
- }
OCFile root = getStorageManager().getFileByPath(OCFile.ROOT_PATH);
listOfFiles.listDirectory(root);
// TODO Enable when "On Device" is recovered ?
startSyncFolderOperation(root, false);
}
cleanSecondFragment();
- }
-
-
- public void browseTo(OCFile folder) {
- if (folder == null || !folder.isFolder()) {
- throw new IllegalArgumentException("Trying to browse to invalid folder " + folder);
- }
- OCFileListFragment listOfFiles = getListOfFilesFragment();
- if (listOfFiles != null) {
- setNavigationListWithFolder(folder);
- listOfFiles.listDirectory(folder);
- // TODO Enable when "On Device" is recovered ?
- // listOfFiles.listDirectory(folder, MainApp.getOnlyOnDevice());
- setFile(listOfFiles.getCurrentFile());
- startSyncFolderOperation(folder, false);
- } else {
- Log_OC.e(TAG, "Unexpected null when accessing list fragment");
- }
- cleanSecondFragment();
+
}
*/
@Override
public void onBrowsedDownTo(OCFile directory) {
- pushDirname(directory);
+ setFile(directory);
cleanSecondFragment();
-
// Sync Folder
startSyncFolderOperation(directory, false);
-
}
/**
*/
@Override
public void showDetails(OCFile file) {
- Fragment detailFragment = new FileDetailFragment(file, getAccount());
+ Fragment detailFragment = FileDetailFragment.newInstance(file, getAccount());
setSecondFragment(detailFragment);
updateFragmentsVisibility(true);
- updateNavigationElementsInActionBar(file);
+ updateActionBarTitleAndHomeButton(file);
setFile(file);
}
-
- /**
- * TODO
- */
- private void updateNavigationElementsInActionBar(OCFile chosenFile) {
- ActionBar actionBar = getSupportActionBar();
-
- // For adding content description tag to a title field in the action bar
- int actionBarTitleId = getResources().getIdentifier("action_bar_title", "id", "android");
-
- if (chosenFile == null || mDualPane) {
- // only list of files - set for browsing through folders
- OCFile currentDir = getCurrentDir();
- boolean noRoot = (currentDir != null && currentDir.getParentId() != 0);
-// actionBar.setDisplayHomeAsUpEnabled(noRoot);
-// actionBar.setDisplayShowTitleEnabled(!noRoot);
- actionBar.setDisplayHomeAsUpEnabled(true);
- actionBar.setDisplayShowTitleEnabled(true);
- if (!noRoot) {
- actionBar.setTitle(getString(R.string.default_display_name_for_root_folder));
- View actionBarTitleView = getWindow().getDecorView().findViewById(actionBarTitleId);
- if (actionBarTitleView != null) { // it's null in Android 2.x
- actionBarTitleView.setContentDescription(
- getString(R.string.default_display_name_for_root_folder));
- }
- }
- actionBar.setNavigationMode(!noRoot ? ActionBar.NAVIGATION_MODE_STANDARD :
- ActionBar.NAVIGATION_MODE_LIST);
- actionBar.setListNavigationCallbacks(mDirectories, this);
- // assuming mDirectories is updated
+ @Override
+ protected void updateActionBarTitleAndHomeButton(OCFile chosenFile) {
+ if (mDualPane) {
+ // in dual pane mode, keep the focus of title an action bar in the current folder
+ super.updateActionBarTitleAndHomeButton(getCurrentDir());
} else {
- actionBar.setDisplayHomeAsUpEnabled(true);
- actionBar.setDisplayShowTitleEnabled(true);
- actionBar.setTitle(chosenFile.getFileName());
- actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_STANDARD);
- View actionBarTitleView = getWindow().getDecorView().findViewById(actionBarTitleId);
- if (actionBarTitleView != null) { // it's null in Android 2.x
- getWindow().getDecorView().findViewById(actionBarTitleId).
- setContentDescription(chosenFile.getFileName());
- }
+ super.updateActionBarTitleAndHomeButton(chosenFile);
}
+
}
autoplay);
setSecondFragment(mediaFragment);
updateFragmentsVisibility(true);
- updateNavigationElementsInActionBar(file);
+ updateActionBarTitleAndHomeButton(file);
setFile(file);
}
* @param file {@link OCFile} to download and preview.
*/
public void startDownloadForPreview(OCFile file) {
- Fragment detailFragment = new FileDetailFragment(file, getAccount());
+ Fragment detailFragment = FileDetailFragment.newInstance(file, getAccount());
setSecondFragment(detailFragment);
mWaitingToPreview = file;
requestForDownload();
updateFragmentsVisibility(true);
- updateNavigationElementsInActionBar(file);
+ updateActionBarTitleAndHomeButton(file);
setFile(file);
}
private void sortByName(boolean ascending){
getListOfFilesFragment().sortByName(ascending);
}
-
-// public void restart(){
-// Intent i = new Intent(this, FileDisplayActivity.class);
-// i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
-// startActivity(i);
-// }
-
-// public void closeDrawer() {
-// mDrawerLayout.closeDrawers();
-// }
-
-// private class DrawerItemClickListener implements ListView.OnItemClickListener {
-// @Override
-// public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
-// if (mShowAccounts && position > 0){
-// position = position - 1;
-// }
-// switch (position){
-// case 0: // Accounts
-// mShowAccounts = !mShowAccounts;
-// mNavigationDrawerAdapter.setShowAccounts(mShowAccounts);
-// mNavigationDrawerAdapter.notifyDataSetChanged();
-// break;
-//
-// case 1: // All Files
-// // TODO Enable when "On Device" is recovered ?
-// //MainApp.showOnlyFilesOnDevice(false);
-// mDrawerLayout.closeDrawers();
-// break;
-//
-// // TODO Enable when "On Device" is recovered ?
-//// case 2:
-//// MainApp.showOnlyFilesOnDevice(true);
-//// mDrawerLayout.closeDrawers();
-//// break;
-//
-// case 2: // Settings
-// Intent settingsIntent = new Intent(getApplicationContext(),
-// Preferences.class);
-// startActivity(settingsIntent);
-// break;
-//
-// case 3: // Logs
-// Intent loggerIntent = new Intent(getApplicationContext(),
-// LogHistoryActivity.class);
-// startActivity(loggerIntent);
-// break;
-// }
-// }
-// }
+
+ public void allFilesOption() {
+ browseToRoot();
+ }
}