<string name="confirmation_remove_local">Nur lokal</string>
<string name="confirmation_remove_folder_local">Nur lokale Inhalte</string>
<string name="confirmation_remove_remote">Vom Server entfernen</string>
- <string name="confirmation_remove_remote_and_local">Lokal und auf dem Server</string>
+ <string name="confirmation_remove_remote_and_local">Lokal und auf Server</string>
<string name="remove_success_msg">Erfolgreich gelöscht</string>
<string name="remove_fail_msg">Der Löschvorgang konnte nicht beendet werden</string>
<string name="rename_dialog_title">Geben Sie einen neuen Namen ein</string>
<string name="instant_upload_on_wifi">Fotos nur über WiFi hochladen</string>
<string name="instant_video_upload_on_wifi">Videos nur über WiFi hochladen</string>
<string name="instant_upload_path">/SofortUpload</string>
- <string name="conflict_title">Konflikt beim Update</string>
- <string name="conflict_message">Serverdatei %s ist nicht synchronisiert mit der lokalen Datei. Weitermachen bedeutet, dass der Inhalt der Datei auf dem Server ersetzt wird.</string>
<string name="conflict_keep_both">Beide behalten</string>
- <string name="conflict_overwrite">Überschreiben</string>
- <string name="conflict_dont_upload">Nicht hochladen</string>
<string name="preview_image_description">Bildvorschau</string>
<string name="preview_image_error_unknown_format">Dieses Bild kann nicht angezeigt werden</string>
<string name="error__upload__local_file_not_copied">%1$s konnte nicht in den lokalen %2$s Ordner kopiert werden</string>
<string name="confirmation_remove_local">Nur lokal</string>
<string name="confirmation_remove_folder_local">Nur lokale Inhalte</string>
<string name="confirmation_remove_remote">Vom Server entfernen</string>
- <string name="confirmation_remove_remote_and_local">Lokal und auf dem Server</string>
+ <string name="confirmation_remove_remote_and_local">Lokal und auf Server</string>
<string name="remove_success_msg">Erfolgreich gelöscht</string>
<string name="remove_fail_msg">Der Löschvorgang konnte nicht beendet werden</string>
<string name="rename_dialog_title">Gib einen neuen Namen ein</string>
<string name="instant_upload_on_wifi">Fotos nur über WiFi hochladen</string>
<string name="instant_video_upload_on_wifi">Videos nur über WiFi hochladen</string>
<string name="instant_upload_path">/SofortUpload</string>
- <string name="conflict_title">Konflikt beim Update</string>
- <string name="conflict_message">Serverdatei %s ist nicht synchronisiert mit der lokalen Datei. Weitermachen bedeutet, dass der Inhalt der Datei auf dem Server ersetzt wird.</string>
<string name="conflict_keep_both">Beide behalten</string>
- <string name="conflict_overwrite">Überschreiben</string>
- <string name="conflict_dont_upload">Nicht hochladen</string>
<string name="preview_image_description">Bildvorschau</string>
<string name="preview_image_error_unknown_format">Dieses Bild kann nicht angezeigt werden</string>
<string name="error__upload__local_file_not_copied">%1$s konnte nicht in den lokalen %2$s Ordner kopiert werden</string>
<string name="drawer_item_settings">Settings</string>
<string name="drawer_item_logs">Logs</string>
<string name="drawer_close">Close</string>
+ <string name="drawer_open">Open</string>
<string name="prefs_category_general">General</string>
<string name="prefs_category_more">More</string>
<string name="prefs_accounts">Accounts</string>
<string name="instant_upload_on_wifi">Upload pictures via WiFi only</string>
<string name="instant_video_upload_on_wifi">Upload videos via WiFi only</string>
<string name="instant_upload_path">/InstantUpload</string>
- <string name="conflict_title">Update conflict</string>
- <string name="conflict_message">Remote file %s is not synchronized with local file. Continuing will replace content of file on server.</string>
+ <string name="conflict_title">File conflict</string>
+ <string name="conflict_message">Which files do you want to keep? If you select both versions, the local file will have a number added to its name.</string>
<string name="conflict_keep_both">Keep both</string>
- <string name="conflict_overwrite">Overwrite</string>
- <string name="conflict_dont_upload">Don\'t upload</string>
+ <string name="conflict_use_local_version">Use local version</string>
+ <string name="conflict_use_server_version">Use server version</string>
<string name="preview_image_description">Image preview</string>
<string name="preview_image_error_unknown_format">This image cannot be shown</string>
<string name="with_you_subject_header">with you</string>
<string name="subject_token">%1$s shared \"%2$s\" with you</string>
+ <string name="saml_subject_token">\"%1$s\" has been shared with you</string>
<string name="auth_refresh_button">Refresh connection</string>
<string name="auth_host_address">Server address</string>
package com.owncloud.android.ui.activity;
+import android.content.Intent;
+import android.os.Bundle;
+
import com.owncloud.android.datamodel.OCFile;
+ import com.owncloud.android.files.services.FileDownloader;
import com.owncloud.android.files.services.FileUploader;
import com.owncloud.android.lib.common.utils.Log_OC;
import com.owncloud.android.ui.dialog.ConflictsResolveDialog;
import com.owncloud.android.ui.dialog.ConflictsResolveDialog.Decision;
import com.owncloud.android.ui.dialog.ConflictsResolveDialog.OnConflictDecisionMadeListener;
-import com.owncloud.android.utils.DisplayUtils;
-
-import android.app.ActionBar;
-import android.content.Intent;
-import android.os.Bundle;
/**
* Wrapper activity which will be launched if keep-in-sync file will be modified by external
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
- ActionBar actionBar = getActionBar();
- actionBar.setIcon(DisplayUtils.getSeasonalIconId());
}
@Override
finish();
return;
case OVERWRITE:
+ // use local version -> overwrite on server
i.putExtra(FileUploader.KEY_FORCE_OVERWRITE, true);
break;
case KEEP_BOTH:
i.putExtra(FileUploader.KEY_LOCAL_BEHAVIOUR, FileUploader.LOCAL_BEHAVIOUR_MOVE);
break;
+ case SERVER:
+ // use server version -> delete local, request download
+ Intent intent = new Intent(this, FileDownloader.class);
+ intent.putExtra(FileDownloader.EXTRA_ACCOUNT, getAccount());
+ intent.putExtra(FileDownloader.EXTRA_FILE, getFile());
+ startService(intent);
+ finish();
+ return;
default:
Log_OC.wtf(TAG, "Unhandled conflict decision " + decision);
return;
import android.os.Bundle;
import android.os.Handler;
import android.os.IBinder;
-import android.support.v4.app.ActionBarDrawerToggle;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
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.ActionBarActivity;
+import android.support.v7.app.ActionBarDrawerToggle;
+import android.support.v7.app.AppCompatActivity;
+import android.util.Log;
import android.view.View;
import android.widget.AdapterView;
-import android.widget.LinearLayout;
import android.widget.ListView;
+import android.widget.RelativeLayout;
+import android.widget.TextView;
import android.widget.Toast;
import com.owncloud.android.BuildConfig;
import com.owncloud.android.ui.adapter.NavigationDrawerListAdapter;
import com.owncloud.android.ui.dialog.LoadingDialog;
import com.owncloud.android.ui.dialog.SharePasswordDialogFragment;
-import com.owncloud.android.ui.fragment.FileDetailFragment;
-import com.owncloud.android.ui.fragment.FileFragment;
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 .
*/
-public class FileActivity extends ActionBarActivity
+public class FileActivity extends AppCompatActivity
implements OnRemoteOperationListener, ComponentsGetter {
public static final String EXTRA_FILE = "com.owncloud.android.ui.activity.FILE";
// Sync the toggle state after onRestoreInstanceState has occurred.
if (mDrawerToggle != null) {
mDrawerToggle.syncState();
- if (mDrawerLayout.isDrawerOpen(GravityCompat.START)) {
+ if (isDrawerOpen()) {
getSupportActionBar().setTitle(R.string.app_name);
mDrawerToggle.setDrawerIndicatorEnabled(true);
}
}
}
+ @Override
+ public void onBackPressed() {
+ if (isDrawerOpen()) {
+ closeNavDrawer();
+ return;
+ }
+ super.onBackPressed();
+ }
+
+ public boolean isDrawerOpen() {
+ return mDrawerLayout.isDrawerOpen(GravityCompat.START);
+ }
+
+ public void closeNavDrawer() {
+ 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
- LinearLayout navigationDrawerLayout = (LinearLayout) findViewById(R.id.left_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
// username.setText(account.name.substring(0, lastAtPos));
// }
+ // Display username in drawer
+ Account account = AccountUtils.getCurrentOwnCloudAccount(getApplicationContext());
+ if (account != null) {
+ TextView username = (TextView) navigationDrawerLayout.findViewById(R.id.drawer_username);
+ int lastAtPos = account.name.lastIndexOf("@");
+ username.setText(account.name.substring(0, lastAtPos));
+ }
+
// load slide menu items
mDrawerTitles = getResources().getStringArray(R.array.drawer_items);
// mDrawerItems.add(new NavigationDrawerItem(mDrawerTitles[0],
// mDrawerContentDescriptions[0]));
// All Files
- mDrawerItems.add(new NavigationDrawerItem(mDrawerTitles[0], mDrawerContentDescriptions[0]));
+ mDrawerItems.add(new NavigationDrawerItem(mDrawerTitles[0], mDrawerContentDescriptions[0],
+ R.drawable.ic_folder_open));
// TODO Enable when "On Device" is recovered
// On Device
// mDrawerContentDescriptions[2]));
// Settings
- mDrawerItems.add(new NavigationDrawerItem(mDrawerTitles[1], mDrawerContentDescriptions[1]));
+ mDrawerItems.add(new NavigationDrawerItem(mDrawerTitles[1], mDrawerContentDescriptions[1],
+ R.drawable.ic_settings));
// Logs
if (BuildConfig.DEBUG) {
mDrawerItems.add(new NavigationDrawerItem(mDrawerTitles[2],
- mDrawerContentDescriptions[2]));
+ mDrawerContentDescriptions[2],R.drawable.ic_log));
}
// setting the nav drawer list adapter
mDrawerItems);
mDrawerList.setAdapter(mNavigationDrawerAdapter);
- mDrawerToggle = new ActionBarDrawerToggle(
- this,
- mDrawerLayout,
- R.drawable.ic_drawer,
- R.string.app_name,
- R.string.drawer_close) {
+
+ 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) {
invalidateOptionsMenu();
}
};
-
- //mDrawerToggle.setDrawerIndicatorEnabled(true);
+
// Set the list's click listener
mDrawerList.setOnItemClickListener(new DrawerItemClickListener());
// Set the drawer toggle as the DrawerListener
mDrawerLayout.setDrawerListener(mDrawerToggle);
+ mDrawerToggle.setDrawerIndicatorEnabled(false);
}
/**
outState.putBoolean(FileActivity.EXTRA_FROM_NOTIFICATION, mFromNotification);
outState.putLong(KEY_WAITING_FOR_OP_ID, mFileOperationsHelper.getOpIdWaitingFor());
outState.putBoolean(KEY_TRY_SHARE_AGAIN, mTryShareAgain);
- outState.putString(KEY_ACTION_BAR_TITLE, getSupportActionBar().getTitle().toString());
+ if(getSupportActionBar().getTitle() != null) {
+ // Null check in case the actionbar is used in ActionBar.NAVIGATION_MODE_LIST
+ // since it doesn't have a title then
+ outState.putString(KEY_ACTION_BAR_TITLE, getSupportActionBar().getTitle().toString());
+ }
}
i.putExtra(ConflictsResolveActivity.EXTRA_FILE, syncedFile);
i.putExtra(ConflictsResolveActivity.EXTRA_ACCOUNT, getAccount());
startActivity(i);
-
}
+
} else {
if (!operation.transferWasRequested()) {
Toast msg = Toast.makeText(this, ErrorMessageAdapter.getErrorCauseMessage(result,
operation, getResources()), Toast.LENGTH_LONG);
msg.show();
}
+ invalidateOptionsMenu();
}
}
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentTransaction;
+import android.support.v4.content.ContextCompat;
import android.support.v4.view.GravityCompat;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
-import android.view.Window;
+import android.widget.ProgressBar;
+import android.widget.RelativeLayout;
+import android.widget.TextView;
import android.widget.Toast;
import com.owncloud.android.MainApp;
private boolean mDualPane;
private View mLeftFragmentContainer;
private View mRightFragmentContainer;
+ private ProgressBar mProgressBar;
private static final String KEY_WAITING_TO_PREVIEW = "WAITING_TO_PREVIEW";
private static final String KEY_SYNC_IN_PROGRESS = "SYNC_IN_PROGRESS";
@Override
protected void onCreate(Bundle savedInstanceState) {
Log_OC.v(TAG, "onCreate() start");
- requestWindowFeature(Window.FEATURE_INDETERMINATE_PROGRESS);
super.onCreate(savedInstanceState); // this calls onAccountChanged() when ownCloud Account
// is valid
// Navigation Drawer
initDrawer();
+ mProgressBar = (ProgressBar) findViewById(R.id.progressBar);
+ mProgressBar.setIndeterminateDrawable(
+ ContextCompat.getDrawable(this,
+ R.drawable.actionbar_progress_indeterminate_horizontal));
+
mDualPane = getResources().getBoolean(R.bool.large_land_layout);
mLeftFragmentContainer = findViewById(R.id.left_fragment_container);
mRightFragmentContainer = findViewById(R.id.right_fragment_container);
// according to the official
// documentation
- setSupportProgressBarIndeterminateVisibility(mSyncInProgress
- /*|| mRefreshSharesInProgress*/);
+ // enable ActionBar app icon to behave as action to toggle nav drawer
+ //getSupportActionBar().setDisplayHomeAsUpEnabled(true);
+ getSupportActionBar().setHomeButtonEnabled(true);
+
+ mProgressBar.setIndeterminate(mSyncInProgress);
// always AFTER setContentView(...) ; to work around bug in its implementation
setBackgroundText();
protected void onStart() {
Log_OC.v(TAG, "onStart() start");
super.onStart();
- getSupportActionBar().setIcon(DisplayUtils.getSeasonalIconId());
Log_OC.v(TAG, "onStart() end");
}
file = getStorageManager().getFileByPath(OCFile.ROOT_PATH); // never returns null
}
setFile(file);
-
+
+ if (mAccountWasSet) {
+ RelativeLayout navigationDrawerLayout = (RelativeLayout) findViewById(R.id.left_drawer);
+ if (navigationDrawerLayout != null && getAccount() != null) {
+ TextView username = (TextView) navigationDrawerLayout.findViewById(R.id.drawer_username);
+ int lastAtPos = getAccount().name.lastIndexOf("@");
+ username.setText(getAccount().name.substring(0, lastAtPos));
+ }
+ }
+
if (!stateWasRecovered) {
Log_OC.d(TAG, "Initializing Fragments in onAccountChanged..");
initFragmentsWithFile();
@Override
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 (!isDrawerOpen()){
+ 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
+ listOfFiles.onBrowseUp();
+ }
}
if (listOfFiles != null) { // should never be null, indeed
- listOfFiles.onBrowseUp();
+ setFile(listOfFiles.getCurrentFile());
}
+ cleanSecondFragment();
+ } else {
+ super.onBackPressed();
}
- if (listOfFiles != null) { // should never be null, indeed
- setFile(listOfFiles.getCurrentFile());
- }
- cleanSecondFragment();
-
}
@Override
}
removeStickyBroadcast(intent);
Log_OC.d(TAG, "Setting progress visibility to " + mSyncInProgress);
- setSupportProgressBarIndeterminateVisibility(mSyncInProgress
- /*|| mRefreshSharesInProgress*/);
+ mProgressBar.setIndeterminate(mSyncInProgress);
+ //mProgressBar.setVisibility((mSyncInProgress) ? View.VISIBLE : View.INVISIBLE);
+ //setSupportProgressBarIndeterminateVisibility(mSyncInProgress
+ /*|| mRefreshSharesInProgress*/ //);
setBackgroundText();
startImagePreview(getFile());
} // TODO what about other kind of previews?
}
-
+
+ mProgressBar.setIndeterminate(false);
} finally {
if (intent != null) {
removeStickyBroadcast(intent);
}
-
@Override
protected ServiceConnection newTransferenceServiceConnection() {
return new ListServiceConnection();
super.onRemoteOperationFinish(operation, result);
if (operation instanceof RemoveFileOperation) {
- onRemoveFileOperationFinish((RemoveFileOperation)operation, result);
+ onRemoveFileOperationFinish((RemoveFileOperation) operation, result);
} else if (operation instanceof RenameFileOperation) {
onRenameFileOperationFinish((RenameFileOperation)operation, result);
private void onSynchronizeFileOperationFinish(SynchronizeFileOperation operation,
RemoteOperationResult result) {
- dismissLoadingDialog();
- OCFile syncedFile = operation.getLocalFile();
- if (!result.isSuccess()) {
- if (result.getCode() == ResultCode.SYNC_CONFLICT) {
- Intent i = new Intent(this, ConflictsResolveActivity.class);
- i.putExtra(ConflictsResolveActivity.EXTRA_FILE, syncedFile);
- i.putExtra(ConflictsResolveActivity.EXTRA_ACCOUNT, getAccount());
- startActivity(i);
-
- }
-
- } else {
+ if (result.isSuccess()) {
if (operation.transferWasRequested()) {
+ OCFile syncedFile = operation.getLocalFile();
onTransferStateChanged(syncedFile, true, true);
-
- } else {
- Toast msg = Toast.makeText(this, ErrorMessageAdapter.getErrorCauseMessage(result,
- operation, getResources()), Toast.LENGTH_LONG);
- msg.show();
+ invalidateOptionsMenu();
}
- invalidateOptionsMenu();
}
}
getApplicationContext()
);
synchFolderOp.execute(getAccount(), MainApp.getAppContext(), this, null, null);
-
- setSupportProgressBarIndeterminateVisibility(true);
+ mProgressBar.setIndeterminate(true);
setBackgroundText();
}
import android.support.v4.app.DialogFragment;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentTransaction;
-import android.support.v7.app.ActionBarActivity;
+import android.support.v7.app.AppCompatActivity;
import com.owncloud.android.R;
import com.owncloud.android.utils.DisplayUtils;
public static enum Decision {
CANCEL,
KEEP_BOTH,
- OVERWRITE
+ OVERWRITE,
+ SERVER
}
OnConflictDecisionMadeListener mListener;
.setIcon(DisplayUtils.getSeasonalIconId())
.setTitle(R.string.conflict_title)
.setMessage(String.format(getString(R.string.conflict_message), remotepath))
- .setPositiveButton(R.string.conflict_overwrite,
+ .setPositiveButton(R.string.conflict_use_local_version,
new DialogInterface.OnClickListener() {
@Override
mListener.conflictDecisionMade(Decision.KEEP_BOTH);
}
})
- .setNegativeButton(R.string.conflict_dont_upload,
+ .setNegativeButton(R.string.conflict_use_server_version,
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
if (mListener != null)
- mListener.conflictDecisionMade(Decision.CANCEL);
+ mListener.conflictDecisionMade(Decision.SERVER);
}
})
.create();
}
- public void showDialog(ActionBarActivity activity) {
+ public void showDialog(AppCompatActivity activity) {
Fragment prev = activity.getSupportFragmentManager().findFragmentByTag("dialog");
FragmentTransaction ft = activity.getSupportFragmentManager().beginTransaction();
if (prev != null) {
this.show(ft, "dialog");
}
- public void dismissDialog(ActionBarActivity activity) {
+ public void dismissDialog(AppCompatActivity activity) {
Fragment prev = activity.getSupportFragmentManager().findFragmentByTag(getTag());
if (prev != null) {
FragmentTransaction ft = activity.getSupportFragmentManager().beginTransaction();