X-Git-Url: http://git.linex4red.de/pub/Android/ownCloud.git/blobdiff_plain/437d3315e00d072ff72e23800947abeec2a0fee2..24781619982f43b8f33d4fb11f073e9cb097e6b9:/src/com/owncloud/android/ui/activity/UploadFilesActivity.java diff --git a/src/com/owncloud/android/ui/activity/UploadFilesActivity.java b/src/com/owncloud/android/ui/activity/UploadFilesActivity.java index 83e7bc07..f93af1f3 100644 --- a/src/com/owncloud/android/ui/activity/UploadFilesActivity.java +++ b/src/com/owncloud/android/ui/activity/UploadFilesActivity.java @@ -1,5 +1,8 @@ -/* ownCloud Android client application - * Copyright (C) 2012-2013 ownCloud Inc. +/** + * ownCloud Android client application + * + * @author David A. Velasco + * Copyright (C) 2015 ownCloud Inc. * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License version 2, @@ -17,47 +20,48 @@ package com.owncloud.android.ui.activity; -import java.io.File; - import android.accounts.Account; +import android.app.AlertDialog; +import android.content.DialogInterface; import android.content.Intent; +import android.content.SharedPreferences; import android.os.AsyncTask; import android.os.Bundle; import android.os.Environment; +import android.preference.PreferenceManager; import android.support.v4.app.DialogFragment; +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.View.OnClickListener; import android.view.ViewGroup; import android.widget.ArrayAdapter; import android.widget.Button; +import android.widget.RadioButton; import android.widget.TextView; -import com.actionbarsherlock.app.ActionBar; -import com.actionbarsherlock.app.ActionBar.OnNavigationListener; -import com.actionbarsherlock.internal.view.menu.ActionMenuItemView; -import com.actionbarsherlock.view.Menu; -import com.actionbarsherlock.view.MenuInflater; -import com.actionbarsherlock.view.MenuItem; import com.owncloud.android.R; +import com.owncloud.android.files.services.FileUploader; import com.owncloud.android.lib.common.utils.Log_OC; import com.owncloud.android.ui.dialog.ConfirmationDialogFragment; -import com.owncloud.android.ui.dialog.IndeterminateProgressDialog; import com.owncloud.android.ui.dialog.ConfirmationDialogFragment.ConfirmationDialogFragmentListener; +import com.owncloud.android.ui.dialog.IndeterminateProgressDialog; import com.owncloud.android.ui.fragment.LocalFileListFragment; -import com.owncloud.android.utils.DisplayUtils; import com.owncloud.android.utils.FileStorageUtils; +import java.io.File; + /** * Displays local files and let the user choose what of them wants to upload * to the current ownCloud account - * - * @author David A. Velasco - * */ public class UploadFilesActivity extends FileActivity implements - LocalFileListFragment.ContainerActivity, OnNavigationListener, OnClickListener, ConfirmationDialogFragmentListener { + LocalFileListFragment.ContainerActivity, ActionBar.OnNavigationListener, + OnClickListener, ConfirmationDialogFragmentListener { private ArrayAdapter mDirectories; private File mCurrentDir = null; @@ -67,25 +71,28 @@ public class UploadFilesActivity extends FileActivity implements private Account mAccountOnCreation; private DialogFragment mCurrentDialog; - public static final String EXTRA_CHOSEN_FILES = UploadFilesActivity.class.getCanonicalName() + ".EXTRA_CHOSEN_FILES"; + public static final String EXTRA_CHOSEN_FILES = + UploadFilesActivity.class.getCanonicalName() + ".EXTRA_CHOSEN_FILES"; public static final int RESULT_OK_AND_MOVE = RESULT_FIRST_USER; - private static final String KEY_DIRECTORY_PATH = UploadFilesActivity.class.getCanonicalName() + ".KEY_DIRECTORY_PATH"; + private static final String KEY_DIRECTORY_PATH = + UploadFilesActivity.class.getCanonicalName() + ".KEY_DIRECTORY_PATH"; private static final String TAG = "UploadFilesActivity"; private static final String WAIT_DIALOG_TAG = "WAIT"; private static final String QUERY_TO_MOVE_DIALOG_TAG = "QUERY_TO_MOVE"; - - private boolean selectAllToggled = false; - private Menu menu; - + private RadioButton mRadioBtnCopyFiles; + private RadioButton mRadioBtnMoveFiles; + + @Override public void onCreate(Bundle savedInstanceState) { Log_OC.d(TAG, "onCreate() start"); super.onCreate(savedInstanceState); if(savedInstanceState != null) { - mCurrentDir = new File(savedInstanceState.getString(UploadFilesActivity.KEY_DIRECTORY_PATH)); + mCurrentDir = new File(savedInstanceState.getString( + UploadFilesActivity.KEY_DIRECTORY_PATH)); } else { mCurrentDir = Environment.getExternalStorageDirectory(); } @@ -95,7 +102,8 @@ public class UploadFilesActivity extends FileActivity implements /// USER INTERFACE // Drop-down navigation - mDirectories = new CustomArrayAdapter(this, R.layout.sherlock_spinner_dropdown_item); + mDirectories = new CustomArrayAdapter(this, + R.layout.support_simple_spinner_dropdown_item); File currDir = mCurrentDir; while(currDir != null && currDir.getParentFile() != null) { mDirectories.add(currDir.getName()); @@ -105,7 +113,8 @@ public class UploadFilesActivity extends FileActivity implements // Inflate and set the layout view setContentView(R.layout.upload_files_layout); - mFileListFragment = (LocalFileListFragment) getSupportFragmentManager().findFragmentById(R.id.local_files_list); + mFileListFragment = (LocalFileListFragment) + getSupportFragmentManager().findFragmentById(R.id.local_files_list); // Set input controllers @@ -113,18 +122,32 @@ public class UploadFilesActivity extends FileActivity implements mCancelBtn.setOnClickListener(this); mUploadBtn = (Button) findViewById(R.id.upload_files_btn_upload); mUploadBtn.setOnClickListener(this); + + SharedPreferences appPreferences = PreferenceManager + .getDefaultSharedPreferences(getApplicationContext()); + + Integer localBehaviour = appPreferences.getInt("prefs_uploader_behaviour", FileUploader.LOCAL_BEHAVIOUR_COPY); + + mRadioBtnMoveFiles = (RadioButton) findViewById(R.id.upload_radio_move); + if (localBehaviour == FileUploader.LOCAL_BEHAVIOUR_MOVE){ + mRadioBtnMoveFiles.setChecked(true); + } + + mRadioBtnCopyFiles = (RadioButton) findViewById(R.id.upload_radio_copy); + if (localBehaviour == FileUploader.LOCAL_BEHAVIOUR_COPY){ + mRadioBtnCopyFiles.setChecked(true); + } // Action bar setup ActionBar actionBar = getSupportActionBar(); - actionBar.setIcon(DisplayUtils.getSeasonalIconId()); - actionBar.setHomeButtonEnabled(true); // mandatory since Android ICS, according to the official documentation + actionBar.setHomeButtonEnabled(true); // mandatory since Android ICS, according to the + // official documentation actionBar.setDisplayHomeAsUpEnabled(mCurrentDir != null && mCurrentDir.getName() != null); actionBar.setDisplayShowTitleEnabled(false); actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_LIST); actionBar.setListNavigationCallbacks(mDirectories, this); - // wait dialog if (mCurrentDialog != null) { mCurrentDialog.dismiss(); @@ -133,15 +156,15 @@ public class UploadFilesActivity extends FileActivity implements Log_OC.d(TAG, "onCreate() end"); } + @Override public boolean onCreateOptionsMenu(Menu menu) { - // Inflate the menu items for use in the action bar - MenuInflater inflater = getSherlock().getMenuInflater(); - inflater.inflate(R.menu.file_select_all, menu); - this.menu = menu; + MenuInflater inflater = getMenuInflater(); + inflater.inflate(R.menu.uploader_menu, menu); return true; } - + + @Override public boolean onOptionsItemSelected(MenuItem item) { boolean retval = true; @@ -152,12 +175,32 @@ public class UploadFilesActivity extends FileActivity implements } break; } - case R.id.actionbar_select_all:{ - if(selectAllToggled){ - toggleOffSelectAll(); - }else{ - toggleOnSelectAll(item); - } + case R.id.action_sort: { + SharedPreferences appPreferences = PreferenceManager + .getDefaultSharedPreferences(this); + + // Read sorting order, default to sort by name ascending + Integer sortOrder = appPreferences + .getInt("sortOrder", FileStorageUtils.SORT_NAME); + + AlertDialog.Builder builder = new AlertDialog.Builder(this); + builder.setTitle(R.string.actionbar_sort_title) + .setSingleChoiceItems(R.array.actionbar_sortby, sortOrder , + new DialogInterface.OnClickListener() { + public void onClick(DialogInterface dialog, int which) { + switch (which){ + case 0: + mFileListFragment.sortByName(true); + break; + case 1: + mFileListFragment.sortByDate(false); + break; + } + + dialog.dismiss(); + } + }); + builder.create().show(); break; } default: @@ -165,20 +208,7 @@ public class UploadFilesActivity extends FileActivity implements } return retval; } - public void toggleOffSelectAll(MenuItem item){ - selectAllToggled = false; - item.setIcon(android.R.drawable.checkbox_off_background); - mFileListFragment.deselectAll(); - } - public void toggleOffSelectAll(){ - MenuItem item = menu.findItem(R.id.actionbar_select_all); - toggleOffSelectAll(item); - } - public void toggleOnSelectAll(MenuItem item){ - selectAllToggled = true; - item.setIcon(android.R.drawable.checkbox_on_background); - mFileListFragment.selectAll(); - } + @Override public boolean onNavigationItemSelected(int itemPosition, long itemId) { @@ -209,13 +239,13 @@ public class UploadFilesActivity extends FileActivity implements ActionBar actionBar = getSupportActionBar(); actionBar.setDisplayHomeAsUpEnabled(false); } - toggleOffSelectAll(); } @Override protected void onSaveInstanceState(Bundle outState) { - // responsibility of restore is preferred in onCreate() before than in onRestoreInstanceState when there are Fragments involved + // responsibility of restore is preferred in onCreate() before than in + // onRestoreInstanceState when there are Fragments involved Log_OC.d(TAG, "onSaveInstanceState() start"); super.onSaveInstanceState(outState); outState.putString(UploadFilesActivity.KEY_DIRECTORY_PATH, mCurrentDir.getAbsolutePath()); @@ -277,11 +307,10 @@ public class UploadFilesActivity extends FileActivity implements * {@inheritDoc} */ @Override - public void onDirectoryClick(File directory) { + public void onDirectoryClick(File directory) { pushDirname(directory); ActionBar actionBar = getSupportActionBar(); actionBar.setDisplayHomeAsUpEnabled(true); - toggleOffSelectAll(); } @@ -325,8 +354,6 @@ public class UploadFilesActivity extends FileActivity implements * to upload into the ownCloud local folder. * * Maybe an AsyncTask is not strictly necessary, but who really knows. - * - * @author David A. Velasco */ private class CheckAvailableSpaceTask extends AsyncTask { @@ -355,7 +382,7 @@ public class UploadFilesActivity extends FileActivity implements File localFile = new File(localPath); total += localFile.length(); } - return (FileStorageUtils.getUsableSpace(mAccountOnCreation.name) >= total); + return (new Boolean(FileStorageUtils.getUsableSpace(mAccountOnCreation.name) >= total)); } /** @@ -375,13 +402,29 @@ public class UploadFilesActivity extends FileActivity implements // return the list of selected files (success) Intent data = new Intent(); data.putExtra(EXTRA_CHOSEN_FILES, mFileListFragment.getCheckedFilePaths()); - setResult(RESULT_OK, data); + + SharedPreferences.Editor appPreferencesEditor = PreferenceManager + .getDefaultSharedPreferences(getApplicationContext()).edit(); + + + if (mRadioBtnMoveFiles.isChecked()){ + setResult(RESULT_OK_AND_MOVE, data); + appPreferencesEditor.putInt("prefs_uploader_behaviour", + FileUploader.LOCAL_BEHAVIOUR_MOVE); + } else { + setResult(RESULT_OK, data); + appPreferencesEditor.putInt("prefs_uploader_behaviour", + FileUploader.LOCAL_BEHAVIOUR_COPY); + } + appPreferencesEditor.apply(); finish(); - } else { - // show a dialog to query the user if wants to move the selected files to the ownCloud folder instead of copying + // show a dialog to query the user if wants to move the selected files + // to the ownCloud folder instead of copying String[] args = {getString(R.string.app_name)}; - ConfirmationDialogFragment dialog = ConfirmationDialogFragment.newInstance(R.string.upload_query_move_foreign_files, args, R.string.common_yes, -1, R.string.common_no); + ConfirmationDialogFragment dialog = ConfirmationDialogFragment.newInstance( + R.string.upload_query_move_foreign_files, args, R.string.common_yes, -1, R.string.common_no + ); dialog.setOnConfirmationListener(UploadFilesActivity.this); dialog.show(getSupportFragmentManager(), QUERY_TO_MOVE_DIALOG_TAG); } @@ -392,7 +435,8 @@ public class UploadFilesActivity extends FileActivity implements public void onConfirmation(String callerTag) { Log_OC.d(TAG, "Positive button in dialog was clicked; dialog tag is " + callerTag); if (callerTag.equals(QUERY_TO_MOVE_DIALOG_TAG)) { - // return the list of selected files to the caller activity (success), signaling that they should be moved to the ownCloud folder, instead of copied + // return the list of selected files to the caller activity (success), + // signaling that they should be moved to the ownCloud folder, instead of copied Intent data = new Intent(); data.putExtra(EXTRA_CHOSEN_FILES, mFileListFragment.getCheckedFilePaths()); setResult(RESULT_OK_AND_MOVE, data);