import android.database.Cursor;\r
import android.net.Uri;\r
import android.os.Bundle;\r
+import android.os.Environment;\r
import android.os.Handler;\r
import android.preference.PreferenceManager;\r
import android.provider.MediaStore;\r
import com.owncloud.android.datamodel.DataStorageManager;\r
import com.owncloud.android.datamodel.FileDataStorageManager;\r
import com.owncloud.android.datamodel.OCFile;\r
+import com.owncloud.android.db.ProviderMeta.ProviderTableMeta;\r
+import com.owncloud.android.files.OwnCloudFileObserver;\r
import com.owncloud.android.files.services.FileDownloader;\r
+import com.owncloud.android.files.services.FileObserverService;\r
import com.owncloud.android.files.services.FileUploader;\r
+import com.owncloud.android.network.OwnCloudClientUtils;\r
import com.owncloud.android.syncadapter.FileSyncService;\r
import com.owncloud.android.ui.fragment.FileDetailFragment;\r
-import com.owncloud.android.ui.fragment.FileListFragment;\r
+import com.owncloud.android.ui.fragment.OCFileListFragment;\r
\r
import com.owncloud.android.R;\r
import eu.alefzero.webdav.WebdavClient;\r
*/\r
\r
public class FileDisplayActivity extends SherlockFragmentActivity implements\r
- FileListFragment.ContainerActivity, FileDetailFragment.ContainerActivity, OnNavigationListener {\r
+ OCFileListFragment.ContainerActivity, FileDetailFragment.ContainerActivity, OnNavigationListener {\r
\r
private ArrayAdapter<String> mDirectories;\r
private OCFile mCurrentDir;\r
private UploadFinishReceiver mUploadFinishReceiver;\r
private DownloadFinishReceiver mDownloadFinishReceiver;\r
\r
- private FileListFragment mFileList;\r
+ private OCFileListFragment mFileList;\r
\r
private boolean mDualPane;\r
\r
private static final int DIALOG_CREATE_DIR = 1;\r
private static final int DIALOG_ABOUT_APP = 2;\r
public static final int DIALOG_SHORT_WAIT = 3;\r
+ private static final int DIALOG_CHOOSE_UPLOAD_SOURCE = 4;\r
\r
- private static final int ACTION_SELECT_FILE = 1;\r
+ private static final int ACTION_SELECT_CONTENT_FROM_APPS = 1;\r
+ private static final int ACTION_SELECT_MULTIPLE_FILES = 2;\r
\r
private static final String TAG = "FileDisplayActivity";\r
\r
- \r
@Override\r
public void onCreate(Bundle savedInstanceState) {\r
Log.d(getClass().toString(), "onCreate() start");\r
super.onCreate(savedInstanceState);\r
-\r
- Thread.setDefaultUncaughtExceptionHandler(new CrashHandler(getApplicationContext()));\r
+ \r
+ //Thread.setDefaultUncaughtExceptionHandler(new CrashHandler(getApplicationContext()));\r
\r
/// saved instance state: keep this always before initDataFromCurrentAccount()\r
if(savedInstanceState != null) {\r
requestPinCode();\r
}\r
\r
+ // file observer\r
+ Intent observer_intent = new Intent(this, FileObserverService.class);\r
+ observer_intent.putExtra(FileObserverService.KEY_FILE_CMD, FileObserverService.CMD_INIT_OBSERVED_LIST);\r
+ startService(observer_intent);\r
\r
/// USER INTERFACE\r
requestWindowFeature(Window.FEATURE_INDETERMINATE_PROGRESS);\r
mDirectories = new CustomArrayAdapter<String>(this, R.layout.sherlock_spinner_dropdown_item);\r
OCFile currFile = mCurrentDir;\r
while(currFile != null && currFile.getFileName() != OCFile.PATH_SEPARATOR) {\r
- mDirectories.insert(currFile.getFileName(), 0);\r
+ mDirectories.add(currFile.getFileName());\r
currFile = mStorageManager.getFileById(currFile.getParentId());\r
}\r
- mDirectories.insert(OCFile.PATH_SEPARATOR, 0);\r
+ mDirectories.add(OCFile.PATH_SEPARATOR);\r
\r
// Inflate and set the layout view\r
setContentView(R.layout.files); \r
- mFileList = (FileListFragment) getSupportFragmentManager().findFragmentById(R.id.fileList);\r
+ mFileList = (OCFileListFragment) getSupportFragmentManager().findFragmentById(R.id.fileList);\r
mDualPane = (findViewById(R.id.file_details_container) != null);\r
if (mDualPane && getSupportFragmentManager().findFragmentByTag(FileDetailFragment.FTAG) == null) {\r
FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();\r
break;\r
}\r
case R.id.startSync: {\r
- ContentResolver.cancelSync(null, "org.owncloud"); // cancel the current synchronizations of any ownCloud account\r
+ ContentResolver.cancelSync(null, AccountAuthenticator.AUTH_TOKEN_TYPE); // cancel the current synchronizations of any ownCloud account\r
Bundle bundle = new Bundle();\r
bundle.putBoolean(ContentResolver.SYNC_EXTRAS_MANUAL, true);\r
ContentResolver.requestSync(\r
AccountUtils.getCurrentOwnCloudAccount(this),\r
- "org.owncloud", bundle);\r
+ AccountAuthenticator.AUTH_TOKEN_TYPE, bundle);\r
break;\r
}\r
case R.id.action_upload: {\r
- Intent action = new Intent(Intent.ACTION_GET_CONTENT);\r
- action = action.setType("*/*")\r
- .addCategory(Intent.CATEGORY_OPENABLE);\r
- startActivityForResult(\r
- Intent.createChooser(action, getString(R.string.upload_chooser_title)),\r
- ACTION_SELECT_FILE);\r
+ showDialog(DIALOG_CHOOSE_UPLOAD_SOURCE);\r
break;\r
}\r
case R.id.action_settings: {\r
* Called, when the user selected something for uploading\r
*/\r
public void onActivityResult(int requestCode, int resultCode, Intent data) {\r
- if (requestCode == ACTION_SELECT_FILE) {\r
- if (resultCode == RESULT_OK) {\r
- String filepath = null;\r
- try {\r
- Uri selectedImageUri = data.getData();\r
- \r
- String filemanagerstring = selectedImageUri.getPath();\r
- String selectedImagePath = getPath(selectedImageUri);\r
- \r
- if (selectedImagePath != null)\r
- filepath = selectedImagePath;\r
- else\r
- filepath = filemanagerstring;\r
- \r
- } catch (Exception e) {\r
- Log.e("FileDisplay", "Unexpected exception when trying to read the result of Intent.ACTION_GET_CONTENT", e);\r
- e.printStackTrace();\r
- \r
- } finally {\r
- if (filepath == null) {\r
- Log.e("FileDisplay", "Couldnt resolve path to file");\r
- Toast t = Toast.makeText(this, getString(R.string.filedisplay_unexpected_bad_get_content), Toast.LENGTH_LONG);\r
- t.show();\r
- return;\r
- }\r
- }\r
- \r
- Intent i = new Intent(this, FileUploader.class);\r
- i.putExtra(FileUploader.KEY_ACCOUNT,\r
- AccountUtils.getCurrentOwnCloudAccount(this));\r
- String remotepath = new String();\r
- for (int j = mDirectories.getCount() - 2; j >= 0; --j) {\r
- remotepath += OCFile.PATH_SEPARATOR + mDirectories.getItem(j);\r
- }\r
- if (!remotepath.endsWith(OCFile.PATH_SEPARATOR))\r
- remotepath += OCFile.PATH_SEPARATOR;\r
- remotepath += new File(filepath).getName();\r
- \r
- i.putExtra(FileUploader.KEY_LOCAL_FILE, filepath);\r
- i.putExtra(FileUploader.KEY_REMOTE_FILE, remotepath);\r
- i.putExtra(FileUploader.KEY_UPLOAD_TYPE, FileUploader.UPLOAD_SINGLE_FILE);\r
- startService(i);\r
+ \r
+ if (requestCode == ACTION_SELECT_CONTENT_FROM_APPS && resultCode == RESULT_OK) {\r
+ requestSimpleUpload(data);\r
+ \r
+ } else if (requestCode == ACTION_SELECT_MULTIPLE_FILES && resultCode == RESULT_OK) {\r
+ requestMultipleUpload(data);\r
+ \r
+ }\r
+ }\r
+\r
+ private void requestMultipleUpload(Intent data) {\r
+ String[] filePaths = data.getStringArrayExtra(UploadFilesActivity.EXTRA_CHOSEN_FILES);\r
+ if (filePaths != null) {\r
+ String[] remotePaths = new String[filePaths.length];\r
+ String remotePathBase = "";\r
+ for (int j = mDirectories.getCount() - 2; j >= 0; --j) {\r
+ remotePathBase += OCFile.PATH_SEPARATOR + mDirectories.getItem(j);\r
}\r
+ if (!remotePathBase.endsWith(OCFile.PATH_SEPARATOR))\r
+ remotePathBase += OCFile.PATH_SEPARATOR;\r
+ for (int j = 0; j< remotePaths.length; j++) {\r
+ remotePaths[j] = remotePathBase + (new File(filePaths[j])).getName();\r
+ }\r
+\r
+ Intent i = new Intent(this, FileUploader.class);\r
+ i.putExtra(FileUploader.KEY_ACCOUNT, AccountUtils.getCurrentOwnCloudAccount(this));\r
+ i.putExtra(FileUploader.KEY_LOCAL_FILE, filePaths);\r
+ i.putExtra(FileUploader.KEY_REMOTE_FILE, remotePaths);\r
+ i.putExtra(FileUploader.KEY_UPLOAD_TYPE, FileUploader.UPLOAD_MULTIPLE_FILES);\r
+ startService(i);\r
\r
- }/* dvelasco: WIP - not working as expected ... yet :)\r
- else if (requestCode == ACTION_CREATE_FIRST_ACCOUNT) {\r
- if (resultCode != RESULT_OK) {\r
- finish(); // the user cancelled the AuthenticatorActivity\r
+ } else {\r
+ Log.d("FileDisplay", "User clicked on 'Update' with no selection");\r
+ Toast t = Toast.makeText(this, getString(R.string.filedisplay_no_file_selected), Toast.LENGTH_LONG);\r
+ t.show();\r
+ return;\r
+ }\r
+ }\r
+\r
+\r
+ private void requestSimpleUpload(Intent data) {\r
+ String filepath = null;\r
+ try {\r
+ Uri selectedImageUri = data.getData();\r
+\r
+ String filemanagerstring = selectedImageUri.getPath();\r
+ String selectedImagePath = getPath(selectedImageUri);\r
+\r
+ if (selectedImagePath != null)\r
+ filepath = selectedImagePath;\r
+ else\r
+ filepath = filemanagerstring;\r
+ \r
+ } catch (Exception e) {\r
+ Log.e("FileDisplay", "Unexpected exception when trying to read the result of Intent.ACTION_GET_CONTENT", e);\r
+ e.printStackTrace();\r
+ \r
+ } finally {\r
+ if (filepath == null) {\r
+ Log.e("FileDisplay", "Couldnt resolve path to file");\r
+ Toast t = Toast.makeText(this, getString(R.string.filedisplay_unexpected_bad_get_content), Toast.LENGTH_LONG);\r
+ t.show();\r
+ return;\r
}\r
- }*/\r
+ }\r
+\r
+ Intent i = new Intent(this, FileUploader.class);\r
+ i.putExtra(FileUploader.KEY_ACCOUNT,\r
+ AccountUtils.getCurrentOwnCloudAccount(this));\r
+ String remotepath = new String();\r
+ for (int j = mDirectories.getCount() - 2; j >= 0; --j) {\r
+ remotepath += OCFile.PATH_SEPARATOR + mDirectories.getItem(j);\r
+ }\r
+ if (!remotepath.endsWith(OCFile.PATH_SEPARATOR))\r
+ remotepath += OCFile.PATH_SEPARATOR;\r
+ remotepath += new File(filepath).getName();\r
+\r
+ i.putExtra(FileUploader.KEY_LOCAL_FILE, filepath);\r
+ i.putExtra(FileUploader.KEY_REMOTE_FILE, remotepath);\r
+ i.putExtra(FileUploader.KEY_UPLOAD_TYPE, FileUploader.UPLOAD_SINGLE_FILE);\r
+ startService(i);\r
}\r
\r
+\r
@Override\r
public void onBackPressed() {\r
if (mDirectories.getCount() <= 1) {\r
case DIALOG_CREATE_DIR: {\r
builder = new Builder(this);\r
final EditText dirNameInput = new EditText(getBaseContext());\r
- final Account a = AccountUtils.getCurrentOwnCloudAccount(this);\r
builder.setView(dirNameInput);\r
builder.setTitle(R.string.uploader_info_dirname);\r
int typed_color = getResources().getColor(R.color.setup_text_typed);\r
\r
// Create directory\r
path += directoryName + OCFile.PATH_SEPARATOR;\r
- Thread thread = new Thread(new DirectoryCreator(path, a, new Handler()));\r
+ Thread thread = new Thread(new DirectoryCreator(path, AccountUtils.getCurrentOwnCloudAccount(FileDisplayActivity.this), new Handler()));\r
thread.start();\r
\r
dialog.dismiss();\r
dialog = working_dialog;\r
break;\r
}\r
+ case DIALOG_CHOOSE_UPLOAD_SOURCE: {\r
+ final String [] items = { getString(R.string.actionbar_upload_files), \r
+ getString(R.string.actionbar_upload_from_apps) }; \r
+ builder = new AlertDialog.Builder(this);\r
+ builder.setTitle(R.string.actionbar_upload);\r
+ builder.setItems(items, new DialogInterface.OnClickListener() {\r
+ public void onClick(DialogInterface dialog, int item) {\r
+ if (item == 0) {\r
+ //if (!mDualPane) { \r
+ Intent action = new Intent(FileDisplayActivity.this, UploadFilesActivity.class);\r
+ startActivityForResult(action, ACTION_SELECT_MULTIPLE_FILES);\r
+ //} else {\r
+ // TODO create and handle new fragment LocalFileListFragment\r
+ //}\r
+ } else if (item == 1) {\r
+ Intent action = new Intent(Intent.ACTION_GET_CONTENT);\r
+ action = action.setType("*/*")\r
+ .addCategory(Intent.CATEGORY_OPENABLE);\r
+ startActivityForResult(\r
+ Intent.createChooser(action, getString(R.string.upload_chooser_title)),\r
+ ACTION_SELECT_CONTENT_FROM_APPS);\r
+ }\r
+ }\r
+ });\r
+ dialog = builder.create();\r
+ break;\r
+ }\r
default:\r
dialog = null;\r
}\r
\r
@Override\r
public void run() {\r
- WebdavClient wdc = new WebdavClient(mAccount, getApplicationContext());\r
- \r
- String username = mAccount.name.substring(0,\r
- mAccount.name.lastIndexOf('@'));\r
- String password = mAm.getPassword(mAccount);\r
- \r
- wdc.setCredentials(username, password);\r
- wdc.allowSelfsignedCertificates();\r
+ WebdavClient wdc = OwnCloudClientUtils.createOwnCloudClient(mAccount, getApplicationContext());\r
boolean created = wdc.createDirectory(mTargetPath);\r
if (created) {\r
mHandler.post(new Runnable() {\r
|| fillBlankRoot ) {\r
if (!fillBlankRoot) \r
mCurrentDir = getStorageManager().getFileByPath(synchFolderRemotePath);\r
- FileListFragment fileListFragment = (FileListFragment) getSupportFragmentManager()\r
+ OCFileListFragment fileListFragment = (OCFileListFragment) getSupportFragmentManager()\r
.findFragmentById(R.id.fileList);\r
if (fileListFragment != null) {\r
fileListFragment.listDirectory(mCurrentDir); \r
parentDir.equals(mCurrentDir)\r
)\r
) {\r
- FileListFragment fileListFragment = (FileListFragment) getSupportFragmentManager().findFragmentById(R.id.fileList);\r
+ OCFileListFragment fileListFragment = (OCFileListFragment) getSupportFragmentManager().findFragmentById(R.id.fileList);\r
if (fileListFragment != null) { \r
fileListFragment.listDirectory();\r
}\r
\r
if (accountName.equals(AccountUtils.getCurrentOwnCloudAccount(context).name) &&\r
mCurrentDir != null && mCurrentDir.getFileId() == mStorageManager.getFileByPath(downloadedRemotePath).getParentId()) {\r
- FileListFragment fileListFragment = (FileListFragment) getSupportFragmentManager().findFragmentById(R.id.fileList);\r
+ OCFileListFragment fileListFragment = (OCFileListFragment) getSupportFragmentManager().findFragmentById(R.id.fileList);\r
if (fileListFragment != null) { \r
fileListFragment.listDirectory();\r
}\r
*/\r
@Override\r
public void onFileStateChanged() {\r
- FileListFragment fileListFragment = (FileListFragment) getSupportFragmentManager().findFragmentById(R.id.fileList);\r
+ OCFileListFragment fileListFragment = (OCFileListFragment) getSupportFragmentManager().findFragmentById(R.id.fileList);\r
if (fileListFragment != null) { \r
fileListFragment.listDirectory();\r
}\r