|
@@ -23,39 +23,25 @@ package com.owncloud.android.ui.activity;
|
|
|
|
|
|
import android.accounts.Account;
|
|
import android.accounts.Account;
|
|
import android.accounts.AccountManager;
|
|
import android.accounts.AccountManager;
|
|
-import android.accounts.AccountManagerCallback;
|
|
|
|
-import android.accounts.AccountManagerFuture;
|
|
|
|
import android.accounts.AuthenticatorException;
|
|
import android.accounts.AuthenticatorException;
|
|
-import android.accounts.OperationCanceledException;
|
|
|
|
import android.content.ComponentName;
|
|
import android.content.ComponentName;
|
|
import android.content.Context;
|
|
import android.content.Context;
|
|
import android.content.Intent;
|
|
import android.content.Intent;
|
|
import android.content.ServiceConnection;
|
|
import android.content.ServiceConnection;
|
|
-import android.content.res.Configuration;
|
|
|
|
import android.os.Bundle;
|
|
import android.os.Bundle;
|
|
import android.os.Handler;
|
|
import android.os.Handler;
|
|
import android.os.IBinder;
|
|
import android.os.IBinder;
|
|
import android.support.v4.app.Fragment;
|
|
import android.support.v4.app.Fragment;
|
|
import android.support.v4.app.FragmentManager;
|
|
import android.support.v4.app.FragmentManager;
|
|
import android.support.v4.app.FragmentTransaction;
|
|
import android.support.v4.app.FragmentTransaction;
|
|
-import android.support.v4.view.GravityCompat;
|
|
|
|
-import android.support.v4.widget.DrawerLayout;
|
|
|
|
-import android.support.v7.app.ActionBar;
|
|
|
|
-import android.support.v7.app.ActionBarDrawerToggle;
|
|
|
|
-import android.support.v7.app.AppCompatActivity;
|
|
|
|
import android.view.View;
|
|
import android.view.View;
|
|
import android.widget.AdapterView;
|
|
import android.widget.AdapterView;
|
|
import android.widget.ListView;
|
|
import android.widget.ListView;
|
|
-import android.widget.RelativeLayout;
|
|
|
|
-import android.widget.TextView;
|
|
|
|
import android.widget.Toast;
|
|
import android.widget.Toast;
|
|
|
|
|
|
-import com.owncloud.android.BuildConfig;
|
|
|
|
-import com.owncloud.android.MainApp;
|
|
|
|
import com.owncloud.android.R;
|
|
import com.owncloud.android.R;
|
|
import com.owncloud.android.authentication.AccountUtils;
|
|
import com.owncloud.android.authentication.AccountUtils;
|
|
import com.owncloud.android.authentication.AuthenticatorActivity;
|
|
import com.owncloud.android.authentication.AuthenticatorActivity;
|
|
-import com.owncloud.android.datamodel.FileDataStorageManager;
|
|
|
|
import com.owncloud.android.datamodel.OCFile;
|
|
import com.owncloud.android.datamodel.OCFile;
|
|
import com.owncloud.android.files.FileOperationsHelper;
|
|
import com.owncloud.android.files.FileOperationsHelper;
|
|
import com.owncloud.android.files.services.FileDownloader;
|
|
import com.owncloud.android.files.services.FileDownloader;
|
|
@@ -72,7 +58,6 @@ import com.owncloud.android.lib.common.operations.RemoteOperation;
|
|
import com.owncloud.android.lib.common.operations.RemoteOperationResult;
|
|
import com.owncloud.android.lib.common.operations.RemoteOperationResult;
|
|
import com.owncloud.android.lib.common.operations.RemoteOperationResult.ResultCode;
|
|
import com.owncloud.android.lib.common.operations.RemoteOperationResult.ResultCode;
|
|
import com.owncloud.android.lib.common.utils.Log_OC;
|
|
import com.owncloud.android.lib.common.utils.Log_OC;
|
|
-import com.owncloud.android.lib.resources.status.OCCapability;
|
|
|
|
import com.owncloud.android.operations.CreateShareWithShareeOperation;
|
|
import com.owncloud.android.operations.CreateShareWithShareeOperation;
|
|
import com.owncloud.android.operations.GetSharesForFileOperation;
|
|
import com.owncloud.android.operations.GetSharesForFileOperation;
|
|
import com.owncloud.android.operations.SynchronizeFileOperation;
|
|
import com.owncloud.android.operations.SynchronizeFileOperation;
|
|
@@ -82,21 +67,16 @@ import com.owncloud.android.operations.UpdateSharePermissionsOperation;
|
|
import com.owncloud.android.operations.UpdateShareViaLinkOperation;
|
|
import com.owncloud.android.operations.UpdateShareViaLinkOperation;
|
|
import com.owncloud.android.services.OperationsService;
|
|
import com.owncloud.android.services.OperationsService;
|
|
import com.owncloud.android.services.OperationsService.OperationsServiceBinder;
|
|
import com.owncloud.android.services.OperationsService.OperationsServiceBinder;
|
|
-import com.owncloud.android.ui.NavigationDrawerItem;
|
|
|
|
-import com.owncloud.android.ui.adapter.NavigationDrawerListAdapter;
|
|
|
|
import com.owncloud.android.ui.dialog.ConfirmationDialogFragment;
|
|
import com.owncloud.android.ui.dialog.ConfirmationDialogFragment;
|
|
import com.owncloud.android.ui.dialog.LoadingDialog;
|
|
import com.owncloud.android.ui.dialog.LoadingDialog;
|
|
import com.owncloud.android.ui.dialog.SslUntrustedCertDialog;
|
|
import com.owncloud.android.ui.dialog.SslUntrustedCertDialog;
|
|
import com.owncloud.android.utils.ErrorMessageAdapter;
|
|
import com.owncloud.android.utils.ErrorMessageAdapter;
|
|
|
|
|
|
-import java.util.ArrayList;
|
|
|
|
-
|
|
|
|
|
|
|
|
/**
|
|
/**
|
|
- * Activity with common behaviour for activities handling {@link OCFile}s in ownCloud
|
|
|
|
- * {@link Account}s .
|
|
|
|
|
|
+ * Activity with common behaviour for activities handling {@link OCFile}s in ownCloud {@link Account}s .
|
|
*/
|
|
*/
|
|
-public class FileActivity extends AppCompatActivity
|
|
|
|
|
|
+public class FileActivity extends DrawerActivity
|
|
implements OnRemoteOperationListener, ComponentsGetter, SslUntrustedCertDialog.OnSslUntrustedCertListener {
|
|
implements OnRemoteOperationListener, ComponentsGetter, SslUntrustedCertDialog.OnSslUntrustedCertListener {
|
|
|
|
|
|
public static final String EXTRA_FILE = "com.owncloud.android.ui.activity.FILE";
|
|
public static final String EXTRA_FILE = "com.owncloud.android.ui.activity.FILE";
|
|
@@ -120,35 +100,15 @@ public class FileActivity extends AppCompatActivity
|
|
private static final String DIALOG_UNTRUSTED_CERT = "DIALOG_UNTRUSTED_CERT";
|
|
private static final String DIALOG_UNTRUSTED_CERT = "DIALOG_UNTRUSTED_CERT";
|
|
private static final String DIALOG_CERT_NOT_SAVED = "DIALOG_CERT_NOT_SAVED";
|
|
private static final String DIALOG_CERT_NOT_SAVED = "DIALOG_CERT_NOT_SAVED";
|
|
|
|
|
|
- /** OwnCloud {@link Account} where the main {@link OCFile} handled by the activity is located.*/
|
|
|
|
- private Account mAccount;
|
|
|
|
-
|
|
|
|
- /** Capabilites of the server where {@link #mAccount} lives */
|
|
|
|
- private OCCapability mCapabilities;
|
|
|
|
-
|
|
|
|
/** Main {@link OCFile} handled by the activity.*/
|
|
/** Main {@link OCFile} handled by the activity.*/
|
|
private OCFile mFile;
|
|
private OCFile mFile;
|
|
|
|
|
|
-
|
|
|
|
- /** Flag to signal that the activity will is finishing to enforce the creation of an ownCloud
|
|
|
|
- * {@link Account} */
|
|
|
|
- private boolean mRedirectingToSetupAccount = false;
|
|
|
|
-
|
|
|
|
- /** Flag to signal when the value of mAccount was set */
|
|
|
|
- protected boolean mAccountWasSet;
|
|
|
|
-
|
|
|
|
- /** Flag to signal when the value of mAccount was restored from a saved state */
|
|
|
|
- protected boolean mAccountWasRestored;
|
|
|
|
-
|
|
|
|
/** Flag to signal if the activity is launched by a notification */
|
|
/** Flag to signal if the activity is launched by a notification */
|
|
private boolean mFromNotification;
|
|
private boolean mFromNotification;
|
|
|
|
|
|
/** Messages handler associated to the main thread and the life cycle of the activity */
|
|
/** Messages handler associated to the main thread and the life cycle of the activity */
|
|
private Handler mHandler;
|
|
private Handler mHandler;
|
|
|
|
|
|
- /** Access point to the cached database for the current ownCloud {@link Account} */
|
|
|
|
- private FileDataStorageManager mStorageManager = null;
|
|
|
|
-
|
|
|
|
private FileOperationsHelper mFileOperationsHelper;
|
|
private FileOperationsHelper mFileOperationsHelper;
|
|
|
|
|
|
private ServiceConnection mOperationsServiceConnection = null;
|
|
private ServiceConnection mOperationsServiceConnection = null;
|
|
@@ -161,24 +121,6 @@ public class FileActivity extends AppCompatActivity
|
|
protected FileUploaderBinder mUploaderBinder = null;
|
|
protected FileUploaderBinder mUploaderBinder = null;
|
|
private ServiceConnection mDownloadServiceConnection, mUploadServiceConnection = null;
|
|
private ServiceConnection mDownloadServiceConnection, mUploadServiceConnection = null;
|
|
|
|
|
|
- // Navigation Drawer
|
|
|
|
- protected DrawerLayout mDrawerLayout;
|
|
|
|
- protected ActionBarDrawerToggle mDrawerToggle;
|
|
|
|
- protected ListView mDrawerList;
|
|
|
|
-
|
|
|
|
- // Slide menu items
|
|
|
|
- protected String[] mDrawerTitles;
|
|
|
|
- protected String[] mDrawerContentDescriptions;
|
|
|
|
-
|
|
|
|
- protected ArrayList<NavigationDrawerItem> mDrawerItems;
|
|
|
|
-
|
|
|
|
- protected NavigationDrawerListAdapter mNavigationDrawerAdapter = null;
|
|
|
|
-
|
|
|
|
-
|
|
|
|
-
|
|
|
|
- // TODO re-enable when "Accounts" is available in Navigation Drawer
|
|
|
|
-// protected boolean mShowAccounts = false;
|
|
|
|
-
|
|
|
|
/**
|
|
/**
|
|
* Loads the ownCloud {@link Account} and main {@link OCFile} to be handled by the instance of
|
|
* Loads the ownCloud {@link Account} and main {@link OCFile} to be handled by the instance of
|
|
* the {@link FileActivity}.
|
|
* the {@link FileActivity}.
|
|
@@ -230,40 +172,9 @@ public class FileActivity extends AppCompatActivity
|
|
|
|
|
|
}
|
|
}
|
|
|
|
|
|
- @Override
|
|
|
|
- protected void onNewIntent (Intent intent) {
|
|
|
|
- Log_OC.v(TAG, "onNewIntent() start");
|
|
|
|
- Account current = AccountUtils.getCurrentOwnCloudAccount(this);
|
|
|
|
- if (current != null && mAccount != null && !mAccount.name.equals(current.name)) {
|
|
|
|
- mAccount = current;
|
|
|
|
- }
|
|
|
|
- Log_OC.v(TAG, "onNewIntent() stop");
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- /**
|
|
|
|
- * Since ownCloud {@link Account}s can be managed from the system setting menu,
|
|
|
|
- * the existence of the {@link Account} associated to the instance must be checked
|
|
|
|
- * every time it is restarted.
|
|
|
|
- */
|
|
|
|
- @Override
|
|
|
|
- protected void onRestart() {
|
|
|
|
- Log_OC.v(TAG, "onRestart() start");
|
|
|
|
- super.onRestart();
|
|
|
|
- boolean validAccount = (mAccount != null && AccountUtils.exists(mAccount, this));
|
|
|
|
- if (!validAccount) {
|
|
|
|
- swapToDefaultAccount();
|
|
|
|
- }
|
|
|
|
- Log_OC.v(TAG, "onRestart() end");
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
-
|
|
|
|
@Override
|
|
@Override
|
|
protected void onStart() {
|
|
protected void onStart() {
|
|
super.onStart();
|
|
super.onStart();
|
|
-
|
|
|
|
- if (mAccountWasSet) {
|
|
|
|
- onAccountSet(mAccountWasRestored);
|
|
|
|
- }
|
|
|
|
}
|
|
}
|
|
|
|
|
|
@Override
|
|
@Override
|
|
@@ -284,6 +195,7 @@ public class FileActivity extends AppCompatActivity
|
|
super.onPause();
|
|
super.onPause();
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+
|
|
@Override
|
|
@Override
|
|
protected void onDestroy() {
|
|
protected void onDestroy() {
|
|
if (mOperationsServiceConnection != null) {
|
|
if (mOperationsServiceConnection != null) {
|
|
@@ -302,275 +214,6 @@ public class FileActivity extends AppCompatActivity
|
|
super.onDestroy();
|
|
super.onDestroy();
|
|
}
|
|
}
|
|
|
|
|
|
- @Override
|
|
|
|
- protected void onPostCreate(Bundle savedInstanceState) {
|
|
|
|
- super.onPostCreate(savedInstanceState);
|
|
|
|
- // Sync the toggle state after onRestoreInstanceState has occurred.
|
|
|
|
- if (mDrawerToggle != null) {
|
|
|
|
- mDrawerToggle.syncState();
|
|
|
|
- if (isDrawerOpen()) {
|
|
|
|
- getSupportActionBar().setTitle(R.string.app_name);
|
|
|
|
- mDrawerToggle.setDrawerIndicatorEnabled(true);
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- @Override
|
|
|
|
- public void onConfigurationChanged(Configuration newConfig) {
|
|
|
|
- super.onConfigurationChanged(newConfig);
|
|
|
|
- if (mDrawerToggle != null) {
|
|
|
|
- mDrawerToggle.onConfigurationChanged(newConfig);
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- @Override
|
|
|
|
- public void onBackPressed() {
|
|
|
|
- if (isDrawerOpen()) {
|
|
|
|
- closeNavDrawer();
|
|
|
|
- return;
|
|
|
|
- }
|
|
|
|
- super.onBackPressed();
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- /**
|
|
|
|
- * checks if the drawer exists and is opened.
|
|
|
|
- *
|
|
|
|
- * @return <code>true</code> if the drawer is open, else <code>false</code>
|
|
|
|
- */
|
|
|
|
- public boolean isDrawerOpen() {
|
|
|
|
- if(mDrawerLayout != null) {
|
|
|
|
- return mDrawerLayout.isDrawerOpen(GravityCompat.START);
|
|
|
|
- } else {
|
|
|
|
- return false;
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- /**
|
|
|
|
- * closes the navigation drawer.
|
|
|
|
- */
|
|
|
|
- public void closeNavDrawer() {
|
|
|
|
- if(mDrawerLayout != null) {
|
|
|
|
- mDrawerLayout.closeDrawer(GravityCompat.START);
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- protected void initDrawer(){
|
|
|
|
- // constant settings for action bar when navigation drawer is inited
|
|
|
|
- getSupportActionBar().setNavigationMode(ActionBar.NAVIGATION_MODE_STANDARD);
|
|
|
|
-
|
|
|
|
-
|
|
|
|
- mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout);
|
|
|
|
- // Notification Drawer
|
|
|
|
- RelativeLayout navigationDrawerLayout = (RelativeLayout) findViewById(R.id.left_drawer);
|
|
|
|
- mDrawerList = (ListView) navigationDrawerLayout.findViewById(R.id.drawer_list);
|
|
|
|
-
|
|
|
|
- // TODO re-enable when "Accounts" is available in Navigation Drawer
|
|
|
|
-// // load Account in the Drawer Title
|
|
|
|
-// // User-Icon
|
|
|
|
-// ImageView userIcon = (ImageView) navigationDrawerLayout.findViewById(R.id.drawer_userIcon);
|
|
|
|
-// userIcon.setImageResource(DisplayUtils.getSeasonalIconId());
|
|
|
|
-//
|
|
|
|
-// // Username
|
|
|
|
-// TextView username = (TextView) navigationDrawerLayout.findViewById(R.id.drawer_username);
|
|
|
|
-// Account account = AccountUtils.getCurrentOwnCloudAccount(getApplicationContext());
|
|
|
|
-//
|
|
|
|
-// if (account != null) {
|
|
|
|
-// int lastAtPos = account.name.lastIndexOf("@");
|
|
|
|
-// username.setText(account.name.substring(0, lastAtPos));
|
|
|
|
-// }
|
|
|
|
-
|
|
|
|
- // Display username in drawer
|
|
|
|
- setUsernameInDrawer(navigationDrawerLayout, AccountUtils.getCurrentOwnCloudAccount(getApplicationContext()));
|
|
|
|
-
|
|
|
|
- // load slide menu items
|
|
|
|
- mDrawerTitles = getResources().getStringArray(R.array.drawer_items);
|
|
|
|
-
|
|
|
|
- // nav drawer content description from resources
|
|
|
|
- mDrawerContentDescriptions = getResources().
|
|
|
|
- getStringArray(R.array.drawer_content_descriptions);
|
|
|
|
-
|
|
|
|
- // nav drawer items
|
|
|
|
- mDrawerItems = new ArrayList<NavigationDrawerItem>();
|
|
|
|
- // adding nav drawer items to array
|
|
|
|
- // TODO re-enable when "Accounts" is available in Navigation Drawer
|
|
|
|
- // Accounts
|
|
|
|
- // mDrawerItems.add(new NavigationDrawerItem(mDrawerTitles[0],
|
|
|
|
- // mDrawerContentDescriptions[0]));
|
|
|
|
- // All Files
|
|
|
|
- mDrawerItems.add(new NavigationDrawerItem(mDrawerTitles[0], mDrawerContentDescriptions[0],
|
|
|
|
- R.drawable.ic_folder_open));
|
|
|
|
-
|
|
|
|
- // TODO Enable when "On Device" is recovered
|
|
|
|
- // On Device
|
|
|
|
- //mDrawerItems.add(new NavigationDrawerItem(mDrawerTitles[2],
|
|
|
|
- // mDrawerContentDescriptions[2]));
|
|
|
|
-
|
|
|
|
- // Uploads
|
|
|
|
- mDrawerItems.add(new NavigationDrawerItem(mDrawerTitles[1], mDrawerContentDescriptions[2],
|
|
|
|
- R.drawable.ic_uploads));
|
|
|
|
-
|
|
|
|
- // Settings
|
|
|
|
- mDrawerItems.add(new NavigationDrawerItem(mDrawerTitles[2], mDrawerContentDescriptions[1],
|
|
|
|
- R.drawable.ic_settings));
|
|
|
|
-
|
|
|
|
- // setting the nav drawer list adapter
|
|
|
|
- mNavigationDrawerAdapter = new NavigationDrawerListAdapter(getApplicationContext(), this,
|
|
|
|
- mDrawerItems);
|
|
|
|
- mDrawerList.setAdapter(mNavigationDrawerAdapter);
|
|
|
|
-
|
|
|
|
-
|
|
|
|
- mDrawerToggle = new ActionBarDrawerToggle(this, mDrawerLayout,R.string.drawer_open,R.string.drawer_close) {
|
|
|
|
-
|
|
|
|
-
|
|
|
|
- /** Called when a drawer has settled in a completely closed state. */
|
|
|
|
- public void onDrawerClosed(View view) {
|
|
|
|
- super.onDrawerClosed(view);
|
|
|
|
- updateActionBarTitleAndHomeButton(null);
|
|
|
|
- invalidateOptionsMenu();
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- /** Called when a drawer has settled in a completely open state. */
|
|
|
|
- public void onDrawerOpened(View drawerView) {
|
|
|
|
- super.onDrawerOpened(drawerView);
|
|
|
|
- getSupportActionBar().setTitle(R.string.app_name);
|
|
|
|
- mDrawerToggle.setDrawerIndicatorEnabled(true);
|
|
|
|
- invalidateOptionsMenu();
|
|
|
|
- }
|
|
|
|
- };
|
|
|
|
-
|
|
|
|
- // Set the list's click listener
|
|
|
|
- mDrawerList.setOnItemClickListener(new DrawerItemClickListener());
|
|
|
|
-
|
|
|
|
- // Set the drawer toggle as the DrawerListener
|
|
|
|
- mDrawerLayout.setDrawerListener(mDrawerToggle);
|
|
|
|
- mDrawerToggle.setDrawerIndicatorEnabled(false);
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- /**
|
|
|
|
- * sets the given account name in the drawer in case the drawer is available. The account name
|
|
|
|
- * is shortened beginning from the @-sign in the username.
|
|
|
|
- *
|
|
|
|
- * @param navigationDrawerLayout the drawer layout to be used
|
|
|
|
- * @param account the account to be set in the drawer
|
|
|
|
- */
|
|
|
|
- protected void setUsernameInDrawer(View navigationDrawerLayout, Account account) {
|
|
|
|
- if (navigationDrawerLayout != null && account != null) {
|
|
|
|
- TextView username = (TextView) navigationDrawerLayout.findViewById(R.id.drawer_username);
|
|
|
|
- int lastAtPos = account.name.lastIndexOf("@");
|
|
|
|
- username.setText(account.name.substring(0, lastAtPos));
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- /**
|
|
|
|
- * Updates title bar and home buttons (state and icon).
|
|
|
|
- *
|
|
|
|
- * Assumes that navigation drawer is NOT visible.
|
|
|
|
- */
|
|
|
|
- protected void updateActionBarTitleAndHomeButton(OCFile chosenFile) {
|
|
|
|
- String title = getDefaultTitle(); // default
|
|
|
|
- boolean inRoot;
|
|
|
|
-
|
|
|
|
- /// choose the appropiate title
|
|
|
|
- if (chosenFile == null) {
|
|
|
|
- chosenFile = mFile; // if no file is passed, current file decides
|
|
|
|
- }
|
|
|
|
- inRoot = (
|
|
|
|
- chosenFile == null ||
|
|
|
|
- (chosenFile.isFolder() && chosenFile.getParentId() == FileDataStorageManager.ROOT_PARENT_ID)
|
|
|
|
- );
|
|
|
|
- if (!inRoot) {
|
|
|
|
- title = chosenFile.getFileName();
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- /// set the chosen title
|
|
|
|
- ActionBar actionBar = getSupportActionBar();
|
|
|
|
- actionBar.setTitle(title);
|
|
|
|
- /// also as content description
|
|
|
|
- View actionBarTitleView = getWindow().getDecorView().findViewById(
|
|
|
|
- getResources().getIdentifier("action_bar_title", "id", "android")
|
|
|
|
- );
|
|
|
|
- if (actionBarTitleView != null) { // it's null in Android 2.x
|
|
|
|
- actionBarTitleView.setContentDescription(title);
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- /// set home button properties
|
|
|
|
- mDrawerToggle.setDrawerIndicatorEnabled(inRoot);
|
|
|
|
- actionBar.setDisplayHomeAsUpEnabled(true);
|
|
|
|
- actionBar.setDisplayShowTitleEnabled(true);
|
|
|
|
-
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- protected String getDefaultTitle() {
|
|
|
|
- return getString(R.string.default_display_name_for_root_folder);
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- /**
|
|
|
|
- * Sets and validates the ownCloud {@link Account} associated to the Activity.
|
|
|
|
- *
|
|
|
|
- * If not valid, tries to swap it for other valid and existing ownCloud {@link Account}.
|
|
|
|
- *
|
|
|
|
- * POSTCONDITION: updates {@link #mAccountWasSet} and {@link #mAccountWasRestored}.
|
|
|
|
- *
|
|
|
|
- * @param account New {@link Account} to set.
|
|
|
|
- * @param savedAccount When 'true', account was retrieved from a saved instance state.
|
|
|
|
- */
|
|
|
|
- protected void setAccount(Account account, boolean savedAccount) {
|
|
|
|
- Account oldAccount = mAccount;
|
|
|
|
- boolean validAccount =
|
|
|
|
- (account != null && AccountUtils.setCurrentOwnCloudAccount(getApplicationContext(),
|
|
|
|
- account.name));
|
|
|
|
- if (validAccount) {
|
|
|
|
- mAccount = account;
|
|
|
|
- mAccountWasSet = true;
|
|
|
|
- mAccountWasRestored = (savedAccount || mAccount.equals(oldAccount));
|
|
|
|
-
|
|
|
|
- } else {
|
|
|
|
- swapToDefaultAccount();
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
-
|
|
|
|
- /**
|
|
|
|
- * Tries to swap the current ownCloud {@link Account} for other valid and existing.
|
|
|
|
- *
|
|
|
|
- * If no valid ownCloud {@link Account} exists, the the user is requested
|
|
|
|
- * to create a new ownCloud {@link Account}.
|
|
|
|
- *
|
|
|
|
- * POSTCONDITION: updates {@link #mAccountWasSet} and {@link #mAccountWasRestored}.
|
|
|
|
- */
|
|
|
|
- private void swapToDefaultAccount() {
|
|
|
|
- // default to the most recently used account
|
|
|
|
- Account newAccount = AccountUtils.getCurrentOwnCloudAccount(getApplicationContext());
|
|
|
|
- if (newAccount == null) {
|
|
|
|
- /// no account available: force account creation
|
|
|
|
- createFirstAccount();
|
|
|
|
- mRedirectingToSetupAccount = true;
|
|
|
|
- mAccountWasSet = false;
|
|
|
|
- mAccountWasRestored = false;
|
|
|
|
-
|
|
|
|
- } else {
|
|
|
|
- mAccountWasSet = true;
|
|
|
|
- mAccountWasRestored = (newAccount.equals(mAccount));
|
|
|
|
- mAccount = newAccount;
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
-
|
|
|
|
- /**
|
|
|
|
- * Launches the account creation activity. To use when no ownCloud account is available
|
|
|
|
- */
|
|
|
|
- private void createFirstAccount() {
|
|
|
|
- AccountManager am = AccountManager.get(getApplicationContext());
|
|
|
|
- am.addAccount(MainApp.getAccountType(),
|
|
|
|
- null,
|
|
|
|
- null,
|
|
|
|
- null,
|
|
|
|
- this,
|
|
|
|
- new AccountCreationCallback(),
|
|
|
|
- null);
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
-
|
|
|
|
/**
|
|
/**
|
|
* {@inheritDoc}
|
|
* {@inheritDoc}
|
|
*/
|
|
*/
|
|
@@ -607,34 +250,6 @@ public class FileActivity extends AppCompatActivity
|
|
mFile = file;
|
|
mFile = file;
|
|
}
|
|
}
|
|
|
|
|
|
-
|
|
|
|
- /**
|
|
|
|
- * Getter for the ownCloud {@link Account} where the main {@link OCFile} handled by the activity
|
|
|
|
- * is located.
|
|
|
|
- *
|
|
|
|
- * @return OwnCloud {@link Account} where the main {@link OCFile} handled by the activity
|
|
|
|
- * is located.
|
|
|
|
- */
|
|
|
|
- public Account getAccount() {
|
|
|
|
- return mAccount;
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- protected void setAccount(Account account) {
|
|
|
|
- mAccount = account;
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
-
|
|
|
|
- /**
|
|
|
|
- * Getter for the capabilities of the server where the current OC account lives.
|
|
|
|
- *
|
|
|
|
- * @return Capabilities of the server where the current OC account lives. Null if the account is not
|
|
|
|
- * set yet.
|
|
|
|
- */
|
|
|
|
- public OCCapability getCapabilities() {
|
|
|
|
- return mCapabilities;
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
-
|
|
|
|
/**
|
|
/**
|
|
* @return Value of mFromNotification: True if the Activity is launched by a notification
|
|
* @return Value of mFromNotification: True if the Activity is launched by a notification
|
|
*/
|
|
*/
|
|
@@ -642,13 +257,6 @@ public class FileActivity extends AppCompatActivity
|
|
return mFromNotification;
|
|
return mFromNotification;
|
|
}
|
|
}
|
|
|
|
|
|
- /**
|
|
|
|
- * @return 'True' when the Activity is finishing to enforce the setup of a new account.
|
|
|
|
- */
|
|
|
|
- protected boolean isRedirectingToSetupAccount() {
|
|
|
|
- return mRedirectingToSetupAccount;
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
public OperationsServiceBinder getOperationsServiceBinder() {
|
|
public OperationsServiceBinder getOperationsServiceBinder() {
|
|
return mOperationsServiceBinder;
|
|
return mOperationsServiceBinder;
|
|
}
|
|
}
|
|
@@ -657,67 +265,6 @@ public class FileActivity extends AppCompatActivity
|
|
return null;
|
|
return null;
|
|
}
|
|
}
|
|
|
|
|
|
- /**
|
|
|
|
- * Helper class handling a callback from the {@link AccountManager} after the creation of
|
|
|
|
- * a new ownCloud {@link Account} finished, successfully or not.
|
|
|
|
- *
|
|
|
|
- * At this moment, only called after the creation of the first account.
|
|
|
|
- */
|
|
|
|
- public class AccountCreationCallback implements AccountManagerCallback<Bundle> {
|
|
|
|
-
|
|
|
|
- @Override
|
|
|
|
- public void run(AccountManagerFuture<Bundle> future) {
|
|
|
|
- FileActivity.this.mRedirectingToSetupAccount = false;
|
|
|
|
- boolean accountWasSet = false;
|
|
|
|
- if (future != null) {
|
|
|
|
- try {
|
|
|
|
- Bundle result;
|
|
|
|
- result = future.getResult();
|
|
|
|
- String name = result.getString(AccountManager.KEY_ACCOUNT_NAME);
|
|
|
|
- String type = result.getString(AccountManager.KEY_ACCOUNT_TYPE);
|
|
|
|
- if (AccountUtils.setCurrentOwnCloudAccount(getApplicationContext(), name)) {
|
|
|
|
- setAccount(new Account(name, type), false);
|
|
|
|
- accountWasSet = true;
|
|
|
|
- }
|
|
|
|
- } catch (OperationCanceledException e) {
|
|
|
|
- Log_OC.d(TAG, "Account creation canceled");
|
|
|
|
-
|
|
|
|
- } catch (Exception e) {
|
|
|
|
- Log_OC.e(TAG, "Account creation finished in exception: ", e);
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- } else {
|
|
|
|
- Log_OC.e(TAG, "Account creation callback with null bundle");
|
|
|
|
- }
|
|
|
|
- if (!accountWasSet) {
|
|
|
|
- moveTaskToBack(true);
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
-
|
|
|
|
- /**
|
|
|
|
- * Called when the ownCloud {@link Account} associated to the Activity was just updated.
|
|
|
|
- *
|
|
|
|
- * Child classes must grant that state depending on the {@link Account} is updated.
|
|
|
|
- */
|
|
|
|
- protected void onAccountSet(boolean stateWasRecovered) {
|
|
|
|
- if (getAccount() != null) {
|
|
|
|
- mStorageManager = new FileDataStorageManager(getAccount(), getContentResolver());
|
|
|
|
- mCapabilities = mStorageManager.getCapability(mAccount.name);
|
|
|
|
-
|
|
|
|
- } else {
|
|
|
|
- Log_OC.wtf(TAG, "onAccountChanged was called with NULL account associated!");
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
-
|
|
|
|
- public FileDataStorageManager getStorageManager() {
|
|
|
|
- return mStorageManager;
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
-
|
|
|
|
public OnRemoteOperationListener getRemoteOperationListener() {
|
|
public OnRemoteOperationListener getRemoteOperationListener() {
|
|
return this;
|
|
return this;
|
|
}
|
|
}
|
|
@@ -967,7 +514,6 @@ public class FileActivity extends AppCompatActivity
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
-
|
|
|
|
@Override
|
|
@Override
|
|
public void onServiceDisconnected(ComponentName component) {
|
|
public void onServiceDisconnected(ComponentName component) {
|
|
if (component.equals(new ComponentName(FileActivity.this, OperationsService.class))) {
|
|
if (component.equals(new ComponentName(FileActivity.this, OperationsService.class))) {
|
|
@@ -978,26 +524,24 @@ public class FileActivity extends AppCompatActivity
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
-
|
|
|
|
@Override
|
|
@Override
|
|
public FileDownloaderBinder getFileDownloaderBinder() {
|
|
public FileDownloaderBinder getFileDownloaderBinder() {
|
|
return mDownloaderBinder;
|
|
return mDownloaderBinder;
|
|
}
|
|
}
|
|
|
|
|
|
-
|
|
|
|
@Override
|
|
@Override
|
|
public FileUploaderBinder getFileUploaderBinder() {
|
|
public FileUploaderBinder getFileUploaderBinder() {
|
|
return mUploaderBinder;
|
|
return mUploaderBinder;
|
|
}
|
|
}
|
|
|
|
|
|
-
|
|
|
|
|
|
+ @Override
|
|
public void restart(){
|
|
public void restart(){
|
|
Intent i = new Intent(this, FileDisplayActivity.class);
|
|
Intent i = new Intent(this, FileDisplayActivity.class);
|
|
i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
|
|
i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
|
|
- i.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);
|
|
|
|
startActivity(i);
|
|
startActivity(i);
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+ @Override
|
|
public void allFilesOption(){
|
|
public void allFilesOption(){
|
|
restart();
|
|
restart();
|
|
}
|
|
}
|
|
@@ -1035,45 +579,4 @@ public class FileActivity extends AppCompatActivity
|
|
// nothing to do
|
|
// nothing to do
|
|
}
|
|
}
|
|
|
|
|
|
- private class DrawerItemClickListener implements ListView.OnItemClickListener {
|
|
|
|
- @Override
|
|
|
|
- public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
|
|
|
|
- // TODO re-enable when "Accounts" is available in Navigation Drawer
|
|
|
|
-// if (mShowAccounts && position > 0){
|
|
|
|
-// position = position - 1;
|
|
|
|
-// }
|
|
|
|
- switch (position){
|
|
|
|
- // TODO re-enable when "Accounts" is available in Navigation Drawer
|
|
|
|
-// case 0: // Accounts
|
|
|
|
-// mShowAccounts = !mShowAccounts;
|
|
|
|
-// mNavigationDrawerAdapter.setShowAccounts(mShowAccounts);
|
|
|
|
-// mNavigationDrawerAdapter.notifyDataSetChanged();
|
|
|
|
-// break;
|
|
|
|
-
|
|
|
|
- case 0: // All Files
|
|
|
|
- allFilesOption();
|
|
|
|
- break;
|
|
|
|
-
|
|
|
|
- // TODO Enable when "On Device" is recovered ?
|
|
|
|
-// case 2:
|
|
|
|
-// MainApp.showOnlyFilesOnDevice(true);
|
|
|
|
-// break;
|
|
|
|
-
|
|
|
|
- case 1: // Uploads
|
|
|
|
- Intent uploadListIntent = new Intent(getApplicationContext(),
|
|
|
|
- UploadListActivity.class);
|
|
|
|
- uploadListIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
|
|
|
|
- startActivity(uploadListIntent);
|
|
|
|
- break;
|
|
|
|
-
|
|
|
|
- case 2: // Settings
|
|
|
|
- Intent settingsIntent = new Intent(getApplicationContext(),
|
|
|
|
- Preferences.class);
|
|
|
|
- startActivity(settingsIntent);
|
|
|
|
- break;
|
|
|
|
- }
|
|
|
|
- mDrawerLayout.closeDrawers();
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
}
|
|
}
|