X-Git-Url: http://git.linex4red.de/pub/Android/ownCloud.git/blobdiff_plain/97f21ee7beafbf9598c76134a5bcbd92fece47ce..e4bc3bdadc47c01e88dd1de94a4666d3753ee90e:/src/com/owncloud/android/ui/activity/FileDisplayActivity.java diff --git a/src/com/owncloud/android/ui/activity/FileDisplayActivity.java b/src/com/owncloud/android/ui/activity/FileDisplayActivity.java index 22ef63b4..1f34ae5f 100644 --- a/src/com/owncloud/android/ui/activity/FileDisplayActivity.java +++ b/src/com/owncloud/android/ui/activity/FileDisplayActivity.java @@ -39,6 +39,8 @@ import android.content.pm.PackageInfo; import android.content.pm.PackageManager.NameNotFoundException; import android.content.res.Resources.NotFoundException; import android.database.Cursor; +import android.graphics.Bitmap; +import android.graphics.drawable.BitmapDrawable; import android.net.Uri; import android.os.Bundle; import android.os.Handler; @@ -68,10 +70,14 @@ 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; +import com.owncloud.android.files.services.FileObserverService; import com.owncloud.android.files.services.FileUploader; import com.owncloud.android.files.services.FileUploader.FileUploaderBinder; import com.owncloud.android.network.OwnCloudClientUtils; +import com.owncloud.android.operations.RemoteOperationResult; import com.owncloud.android.syncadapter.FileSyncService; +import com.owncloud.android.ui.dialog.SslValidatorDialog; +import com.owncloud.android.ui.dialog.SslValidatorDialog.OnSslValidatorListener; import com.owncloud.android.ui.fragment.FileDetailFragment; import com.owncloud.android.ui.fragment.OCFileListFragment; @@ -86,7 +92,7 @@ import eu.alefzero.webdav.WebdavClient; */ public class FileDisplayActivity extends SherlockFragmentActivity implements - OCFileListFragment.ContainerActivity, FileDetailFragment.ContainerActivity, OnNavigationListener { + OCFileListFragment.ContainerActivity, FileDetailFragment.ContainerActivity, OnNavigationListener, OnSslValidatorListener { private ArrayAdapter mDirectories; private OCFile mCurrentDir = null; @@ -99,6 +105,7 @@ public class FileDisplayActivity extends SherlockFragmentActivity implements private FileDownloaderBinder mDownloaderBinder = null; private FileUploaderBinder mUploaderBinder = null; private ServiceConnection mDownloadConnection = null, mUploadConnection = null; + private RemoteOperationResult mLastSslUntrustedServerResult = null; private OCFileListFragment mFileList; @@ -109,11 +116,16 @@ public class FileDisplayActivity extends SherlockFragmentActivity implements private static final int DIALOG_ABOUT_APP = 2; public static final int DIALOG_SHORT_WAIT = 3; private static final int DIALOG_CHOOSE_UPLOAD_SOURCE = 4; + private static final int DIALOG_SSL_VALIDATOR = 5; + private static final int DIALOG_CERT_NOT_SAVED = 6; + private static final int ACTION_SELECT_CONTENT_FROM_APPS = 1; private static final int ACTION_SELECT_MULTIPLE_FILES = 2; private static final String TAG = "FileDisplayActivity"; + + private static int[] mMenuIdentifiersToPatch = {R.id.about_app}; @Override public void onCreate(Bundle savedInstanceState) { @@ -154,10 +166,10 @@ public class FileDisplayActivity extends SherlockFragmentActivity implements } // file observer - /*Intent observer_intent = new Intent(this, FileObserverService.class); + Intent observer_intent = new Intent(this, FileObserverService.class); observer_intent.putExtra(FileObserverService.KEY_FILE_CMD, FileObserverService.CMD_INIT_OBSERVED_LIST); startService(observer_intent); - */ + /// USER INTERFACE requestWindowFeature(Window.FEATURE_INDETERMINATE_PROGRESS); @@ -262,9 +274,32 @@ public class FileDisplayActivity extends SherlockFragmentActivity implements public boolean onCreateOptionsMenu(Menu menu) { MenuInflater inflater = getSherlock().getMenuInflater(); inflater.inflate(R.menu.menu, menu); + + patchHiddenAccents(menu); + return true; } + /** + * Workaround for this: http://code.google.com/p/android/issues/detail?id=3974 + * + * @param menu Menu to patch + */ + private void patchHiddenAccents(Menu menu) { + for (int i = 0; i < mMenuIdentifiersToPatch.length ; i++) { + MenuItem aboutItem = menu.findItem(mMenuIdentifiersToPatch[i]); + if (aboutItem != null && aboutItem.getIcon() instanceof BitmapDrawable) { + // Clip off the bottom three (density independent) pixels of transparent padding + Bitmap original = ((BitmapDrawable) aboutItem.getIcon()).getBitmap(); + float scale = getResources().getDisplayMetrics().density; + int clippedHeight = (int) (original.getHeight() - (3 * scale)); + Bitmap scaled = Bitmap.createBitmap(original, 0, 0, original.getWidth(), clippedHeight); + aboutItem.setIcon(new BitmapDrawable(getResources(), scaled)); + } + } + } + + @Override public boolean onOptionsItemSelected(MenuItem item) { boolean retval = true; @@ -274,12 +309,7 @@ public class FileDisplayActivity extends SherlockFragmentActivity implements break; } case R.id.startSync: { - ContentResolver.cancelSync(null, AccountAuthenticator.AUTH_TOKEN_TYPE); // cancel the current synchronizations of any ownCloud account - Bundle bundle = new Bundle(); - bundle.putBoolean(ContentResolver.SYNC_EXTRAS_MANUAL, true); - ContentResolver.requestSync( - AccountUtils.getCurrentOwnCloudAccount(this), - AccountAuthenticator.AUTH_TOKEN_TYPE, bundle); + startSynchronization(); break; } case R.id.action_upload: { @@ -307,6 +337,16 @@ public class FileDisplayActivity extends SherlockFragmentActivity implements return retval; } + private void startSynchronization() { + ContentResolver.cancelSync(null, AccountAuthenticator.AUTH_TOKEN_TYPE); // cancel the current synchronizations of any ownCloud account + Bundle bundle = new Bundle(); + bundle.putBoolean(ContentResolver.SYNC_EXTRAS_MANUAL, true); + ContentResolver.requestSync( + AccountUtils.getCurrentOwnCloudAccount(this), + AccountAuthenticator.AUTH_TOKEN_TYPE, bundle); + } + + @Override public boolean onNavigationItemSelected(int itemPosition, long itemId) { int i = itemPosition; @@ -520,6 +560,15 @@ public class FileDisplayActivity extends SherlockFragmentActivity implements Log.d(getClass().toString(), "onPause() end"); } + + @Override + protected void onPrepareDialog(int id, Dialog dialog, Bundle args) { + if (id == DIALOG_SSL_VALIDATOR && mLastSslUntrustedServerResult != null) { + ((SslValidatorDialog)dialog).updateResult(mLastSslUntrustedServerResult); + } + } + + @Override protected Dialog onCreateDialog(int id) { Dialog dialog = null; @@ -645,6 +694,23 @@ public class FileDisplayActivity extends SherlockFragmentActivity implements dialog = builder.create(); break; } + case DIALOG_SSL_VALIDATOR: { + dialog = SslValidatorDialog.newInstance(this, mLastSslUntrustedServerResult, this); + break; + } + case DIALOG_CERT_NOT_SAVED: { + builder = new AlertDialog.Builder(this); + builder.setMessage(getResources().getString(R.string.ssl_validator_not_saved)); + builder.setCancelable(false); + builder.setPositiveButton(R.string.common_ok, new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + dialog.dismiss(); + }; + }); + dialog = builder.create(); + break; + } default: dialog = null; } @@ -772,6 +838,7 @@ public class FileDisplayActivity extends SherlockFragmentActivity implements } private class SyncBroadcastReceiver extends BroadcastReceiver { + /** * {@link BroadcastReceiver} to enable syncing feedback in UI */ @@ -809,6 +876,14 @@ public class FileDisplayActivity extends SherlockFragmentActivity implements setSupportProgressBarIndeterminateVisibility(inProgress); } + + RemoteOperationResult synchResult = (RemoteOperationResult)intent.getSerializableExtra(FileSyncService.SYNC_RESULT); + if (synchResult != null) { + if (synchResult.getCode().equals(RemoteOperationResult.ResultCode.SSL_RECOVERABLE_PEER_UNVERIFIED)) { + mLastSslUntrustedServerResult = synchResult; + showDialog(DIALOG_SSL_VALIDATOR); + } + } } } @@ -1009,4 +1084,16 @@ public class FileDisplayActivity extends SherlockFragmentActivity implements } + @Override + public void onSavedCertificate() { + startSynchronization(); + } + + + @Override + public void onFailedSavingCertificate() { + showDialog(DIALOG_CERT_NOT_SAVED); + } + + }