X-Git-Url: http://git.linex4red.de/pub/Android/ownCloud.git/blobdiff_plain/c0b85157a9c44a6374e749984e8a55d45868998f..e901b609baa4dd5f681e2a5257c9e504997e3377:/src/com/owncloud/android/ui/preview/PreviewImageActivity.java diff --git a/src/com/owncloud/android/ui/preview/PreviewImageActivity.java b/src/com/owncloud/android/ui/preview/PreviewImageActivity.java index d7cc36d6..c06f341f 100644 --- a/src/com/owncloud/android/ui/preview/PreviewImageActivity.java +++ b/src/com/owncloud/android/ui/preview/PreviewImageActivity.java @@ -16,6 +16,7 @@ */ package com.owncloud.android.ui.preview; +import android.annotation.SuppressLint; import android.content.BroadcastReceiver; import android.content.ComponentName; import android.content.Context; @@ -23,41 +24,40 @@ import android.content.Intent; import android.content.IntentFilter; import android.content.ServiceConnection; import android.content.SharedPreferences; +import android.os.Build; import android.os.Bundle; +import android.os.Handler; import android.os.IBinder; +import android.os.Message; import android.preference.PreferenceManager; -import android.support.v4.app.Fragment; -import android.support.v4.app.FragmentManager; -import android.support.v4.app.FragmentTransaction; import android.support.v4.view.ViewPager; -import android.view.MotionEvent; import android.view.View; -import android.view.View.OnTouchListener; import com.actionbarsherlock.app.ActionBar; import com.actionbarsherlock.view.MenuItem; import com.actionbarsherlock.view.Window; +import com.ortiz.touch.ExtendedViewPager; import com.owncloud.android.R; import com.owncloud.android.authentication.AccountUtils; 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.FileUploader; import com.owncloud.android.files.services.FileDownloader.FileDownloaderBinder; +import com.owncloud.android.files.services.FileUploader; import com.owncloud.android.files.services.FileUploader.FileUploaderBinder; import com.owncloud.android.lib.common.operations.OnRemoteOperationListener; import com.owncloud.android.lib.common.operations.RemoteOperation; import com.owncloud.android.lib.common.operations.RemoteOperationResult; import com.owncloud.android.lib.common.operations.RemoteOperationResult.ResultCode; +import com.owncloud.android.lib.common.utils.Log_OC; import com.owncloud.android.operations.CreateShareOperation; +import com.owncloud.android.operations.RemoveFileOperation; import com.owncloud.android.operations.UnshareLinkOperation; import com.owncloud.android.ui.activity.FileActivity; import com.owncloud.android.ui.activity.FileDisplayActivity; import com.owncloud.android.ui.activity.PinCodeActivity; -import com.owncloud.android.ui.dialog.LoadingDialog; import com.owncloud.android.ui.fragment.FileFragment; import com.owncloud.android.utils.DisplayUtils; -import com.owncloud.android.utils.Log_OC; /** @@ -65,7 +65,9 @@ import com.owncloud.android.utils.Log_OC; * * @author David A. Velasco */ -public class PreviewImageActivity extends FileActivity implements FileFragment.ContainerActivity, ViewPager.OnPageChangeListener, OnTouchListener , OnRemoteOperationListener{ +public class PreviewImageActivity extends FileActivity implements + FileFragment.ContainerActivity, +ViewPager.OnPageChangeListener, OnRemoteOperationListener { public static final int DIALOG_SHORT_WAIT = 0; @@ -73,21 +75,17 @@ public class PreviewImageActivity extends FileActivity implements FileFragment.C public static final String KEY_WAITING_TO_PREVIEW = "WAITING_TO_PREVIEW"; private static final String KEY_WAITING_FOR_BINDER = "WAITING_FOR_BINDER"; - - private static final String DIALOG_WAIT_TAG = "DIALOG_WAIT"; - - private ViewPager mViewPager; + + private static final int INITIAL_HIDE_DELAY = 0; // immediate hide + + private ExtendedViewPager mViewPager; private PreviewImagePagerAdapter mPreviewImagePagerAdapter; - private FileDownloaderBinder mDownloaderBinder = null; - private ServiceConnection mDownloadConnection, mUploadConnection = null; - private FileUploaderBinder mUploaderBinder = null; - private boolean mRequestWaitingForBinder; private DownloadFinishReceiver mDownloadFinishReceiver; - - private boolean mFullScreen; + + private View mFullScreenAnchorView; @Override @@ -105,9 +103,31 @@ public class PreviewImageActivity extends FileActivity implements FileFragment.C // PIN CODE request if (getIntent().getExtras() != null && savedInstanceState == null && fromNotification()) { requestPinCode(); - } + } + + // Make sure we're running on Honeycomb or higher to use FullScreen and + // Immersive Mode + if (isHoneycombOrHigher()) { - mFullScreen = true; + mFullScreenAnchorView = getWindow().getDecorView(); + // to keep our UI controls visibility in line with system bars + // visibility + mFullScreenAnchorView.setOnSystemUiVisibilityChangeListener(new View.OnSystemUiVisibilityChangeListener() { + @SuppressLint("InlinedApi") + @Override + public void onSystemUiVisibilityChange(int flags) { + boolean visible = (flags & View.SYSTEM_UI_FLAG_HIDE_NAVIGATION) == 0; + ActionBar actionBar = getSupportActionBar(); + if (visible) { + actionBar.show(); + } else { + actionBar.hide(); + } + } + }); + + } + if (savedInstanceState != null) { mRequestWaitingForBinder = savedInstanceState.getBoolean(KEY_WAITING_FOR_BINDER); } else { @@ -125,7 +145,7 @@ public class PreviewImageActivity extends FileActivity implements FileFragment.C parentFolder = getStorageManager().getFileByPath(OCFile.ROOT_PATH); } mPreviewImagePagerAdapter = new PreviewImagePagerAdapter(getSupportFragmentManager(), parentFolder, getAccount(), getStorageManager()); - mViewPager = (ViewPager) findViewById(R.id.fragmentPager); + mViewPager = (ExtendedViewPager) findViewById(R.id.fragmentPager); int position = mPreviewImagePagerAdapter.getFilePosition(getFile()); position = (position >= 0) ? position : 0; mViewPager.setAdapter(mPreviewImagePagerAdapter); @@ -138,13 +158,49 @@ public class PreviewImageActivity extends FileActivity implements FileFragment.C } + protected void onPostCreate(Bundle savedInstanceState) { + super.onPostCreate(savedInstanceState); + + // Trigger the initial hide() shortly after the activity has been + // created, to briefly hint to the user that UI controls + // are available + delayedHide(INITIAL_HIDE_DELAY); + + } + + Handler mHideSystemUiHandler = new Handler() { + @Override + public void handleMessage(Message msg) { + if (isHoneycombOrHigher()) { + hideSystemUI(mFullScreenAnchorView); + } + getSupportActionBar().hide(); + } + }; + + private void delayedHide(int delayMillis) { + mHideSystemUiHandler.removeMessages(0); + mHideSystemUiHandler.sendEmptyMessageDelayed(0, delayMillis); + } + + + /// handle Window Focus changes + @Override + public void onWindowFocusChanged(boolean hasFocus) { + super.onWindowFocusChanged(hasFocus); + + // When the window loses focus (e.g. the action overflow is shown), + // cancel any pending hide action. + if (!hasFocus) { + mHideSystemUiHandler.removeMessages(0); + } + } + + + @Override public void onStart() { super.onStart(); - mDownloadConnection = new PreviewImageServiceConnection(); - bindService(new Intent(this, FileDownloader.class), mDownloadConnection, Context.BIND_AUTO_CREATE); - mUploadConnection = new PreviewImageServiceConnection(); - bindService(new Intent(this, FileUploader.class), mUploadConnection, Context.BIND_AUTO_CREATE); } @Override @@ -163,6 +219,8 @@ public class PreviewImageActivity extends FileActivity implements FileFragment.C } else if (operation instanceof UnshareLinkOperation) { onUnshareLinkOperationFinish((UnshareLinkOperation) operation, result); + } else if (operation instanceof RemoveFileOperation) { + finish(); } } @@ -189,7 +247,12 @@ public class PreviewImageActivity extends FileActivity implements FileFragment.C invalidateOptionsMenu(); } } - + + @Override + protected ServiceConnection newTransferenceServiceConnection() { + return new PreviewImageServiceConnection(); + } + /** Defines callbacks for service binding, passed to bindService() */ private class PreviewImageServiceConnection implements ServiceConnection { @@ -229,14 +292,6 @@ public class PreviewImageActivity extends FileActivity implements FileFragment.C @Override public void onStop() { super.onStop(); - if (mDownloadConnection != null) { - unbindService(mDownloadConnection); - mDownloadConnection = null; - } - if (mUploadConnection != null) { - unbindService(mUploadConnection); - mUploadConnection = null; - } } @@ -265,7 +320,7 @@ public class PreviewImageActivity extends FileActivity implements FileFragment.C @Override protected void onResume() { super.onResume(); - //Log.e(TAG, "ACTIVITY, ONRESUME"); + //Log_OC.e(TAG, "ACTIVITY, ONRESUME"); mDownloadFinishReceiver = new DownloadFinishReceiver(); IntentFilter filter = new IntentFilter(FileDownloader.getDownloadFinishMessage()); @@ -275,15 +330,15 @@ public class PreviewImageActivity extends FileActivity implements FileFragment.C @Override protected void onPostResume() { - //Log.e(TAG, "ACTIVITY, ONPOSTRESUME"); + //Log_OC.e(TAG, "ACTIVITY, ONPOSTRESUME"); super.onPostResume(); } @Override public void onPause() { - super.onPause(); unregisterReceiver(mDownloadFinishReceiver); mDownloadFinishReceiver = null; + super.onPause(); } @@ -291,53 +346,6 @@ public class PreviewImageActivity extends FileActivity implements FileFragment.C finish(); } - /** - * Show loading dialog - */ - public void showLoadingDialog() { - // Construct dialog - LoadingDialog loading = new LoadingDialog(getResources().getString(R.string.wait_a_moment)); - FragmentManager fm = getSupportFragmentManager(); - FragmentTransaction ft = fm.beginTransaction(); - loading.show(ft, DIALOG_WAIT_TAG); - - } - - /** - * Dismiss loading dialog - */ - public void dismissLoadingDialog(){ - Fragment frag = getSupportFragmentManager().findFragmentByTag(DIALOG_WAIT_TAG); - if (frag != null) { - LoadingDialog loading = (LoadingDialog) frag; - loading.dismiss(); - } - } - - /** - * {@inheritDoc} - */ - @Override - public void onFileStateChanged() { - // nothing to do here! - } - - - /** - * {@inheritDoc} - */ - @Override - public FileDownloaderBinder getFileDownloaderBinder() { - return mDownloaderBinder; - } - - - @Override - public FileUploaderBinder getFileUploaderBinder() { - return mUploaderBinder; - } - - @Override public void showDetails(OCFile file) { Intent showDetailsIntent = new Intent(this, FileDisplayActivity.class); @@ -381,7 +389,11 @@ public class PreviewImageActivity extends FileActivity implements FileFragment.C requestForDownload(currentFile); } } + + // Call to reset image zoom to initial state + ((PreviewImagePagerAdapter) mViewPager.getAdapter()).resetZoom(); } + } /** @@ -447,26 +459,36 @@ public class PreviewImageActivity extends FileActivity implements FileFragment.C } + @SuppressLint("InlinedApi") + public void toggleFullScreen() { - @Override - public boolean onTouch(View v, MotionEvent event) { - if (event.getAction() == MotionEvent.ACTION_UP) { - toggleFullScreen(); - } - return true; - } + if (isHoneycombOrHigher()) { + + boolean visible = (mFullScreenAnchorView.getSystemUiVisibility() + & View.SYSTEM_UI_FLAG_HIDE_NAVIGATION) == 0; + + if (visible) { + hideSystemUI(mFullScreenAnchorView); + // actionBar.hide(); // propagated through + // OnSystemUiVisibilityChangeListener() + } else { + showSystemUI(mFullScreenAnchorView); + // actionBar.show(); // propagated through + // OnSystemUiVisibilityChangeListener() + } - - private void toggleFullScreen() { - ActionBar actionBar = getSupportActionBar(); - if (mFullScreen) { - actionBar.show(); - } else { - actionBar.hide(); - + + ActionBar actionBar = getSupportActionBar(); + if (!actionBar.isShowing()) { + actionBar.show(); + + } else { + actionBar.hide(); + + } + } - mFullScreen = !mFullScreen; } @Override @@ -516,4 +538,50 @@ public class PreviewImageActivity extends FileActivity implements FileFragment.C } } + @Override + public void onBrowsedDownTo(OCFile folder) { + // TODO Auto-generated method stub + + } + + @Override + public void onTransferStateChanged(OCFile file, boolean downloading, boolean uploading) { + // TODO Auto-generated method stub + + } + + + @SuppressLint("InlinedApi") + private void hideSystemUI(View anchorView) { + anchorView.setSystemUiVisibility( + View.SYSTEM_UI_FLAG_HIDE_NAVIGATION // hides NAVIGATION BAR; Android >= 4.0 + | View.SYSTEM_UI_FLAG_FULLSCREEN // hides STATUS BAR; Android >= 4.1 + | View.SYSTEM_UI_FLAG_IMMERSIVE // stays interactive; Android >= 4.4 + | View.SYSTEM_UI_FLAG_LAYOUT_STABLE // draw full window; Android >= 4.1 + | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN // draw full window; Android >= 4.1 + | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION // draw full window; Android >= 4.1 + ); + } + + @SuppressLint("InlinedApi") + private void showSystemUI(View anchorView) { + anchorView.setSystemUiVisibility( + View.SYSTEM_UI_FLAG_LAYOUT_STABLE // draw full window; Android >= 4.1 + | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN // draw full window; Android >= 4.1 + | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION // draw full window; Android >= 4.1 + ); + } + + /** + * Checks if OS version is Honeycomb one or higher + * + * @return boolean + */ + private boolean isHoneycombOrHigher() { + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) { + return true; + } + return false; + } + }