*/
package com.owncloud.android.ui.preview;
+import android.annotation.SuppressLint;
import android.content.BroadcastReceiver;
import android.content.ComponentName;
import android.content.Context;
import android.content.ServiceConnection;
import android.content.SharedPreferences;
import android.os.Bundle;
+import android.os.Handler;
import android.os.IBinder;
+import android.os.Message;
import android.preference.PreferenceManager;
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;
* @author David A. Velasco
*/
public class PreviewImageActivity extends FileActivity implements
-FileFragment.ContainerActivity, OnTouchListener,
+ FileFragment.ContainerActivity,
ViewPager.OnPageChangeListener, OnRemoteOperationListener {
public static final int DIALOG_SHORT_WAIT = 0;
public static final String KEY_WAITING_TO_PREVIEW = "WAITING_TO_PREVIEW";
private static final String KEY_WAITING_FOR_BINDER = "WAITING_FOR_BINDER";
-
- private ViewPager mViewPager;
+
+ private static final int INITIAL_HIDE_DELAY = 0; // immediate hide
+
+ private ExtendedViewPager mViewPager;
private PreviewImagePagerAdapter mPreviewImagePagerAdapter;
private boolean mRequestWaitingForBinder;
private DownloadFinishReceiver mDownloadFinishReceiver;
- private boolean mFullScreen;
+ //private boolean mFullScreen;
+
+ private View mFullScreenAnchorView;
@Override
requestPinCode();
}
- mFullScreen = true;
+ //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 {
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);
}
+ 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) {
+ 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. When the window gains focus,
+ // hide the system UI.
+ if (hasFocus) {
+ delayedHide(INITIAL_HIDE_DELAY);
+ } else {
+ mHideSystemUiHandler.removeMessages(0);
+ }
+ }
+
+
+
@Override
public void onStart() {
super.onStart();
@Override
public void onPause() {
- super.onPause();
unregisterReceiver(mDownloadFinishReceiver);
mDownloadFinishReceiver = null;
+ super.onPause();
}
requestForDownload(currentFile);
}
}
+
+ // Call to reset image zoom to initial state
+ ((PreviewImagePagerAdapter) mViewPager.getAdapter()).resetZoom();
}
+
}
/**
}
-
- @Override
- public boolean onTouch(View v, MotionEvent event) {
- if (event.getAction() == MotionEvent.ACTION_UP) {
- toggleFullScreen();
+ @SuppressLint("InlinedApi")
+ public void toggleFullScreen() {
+ //ActionBar actionBar = getSupportActionBar();
+
+ 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()
}
- return true;
- }
-
-
- private void toggleFullScreen() {
- ActionBar actionBar = getSupportActionBar();
+ /*
if (mFullScreen) {
actionBar.show();
}
mFullScreen = !mFullScreen;
+ */
}
@Override
// TODO Auto-generated method stub
}
-
-// /**
-// * {@inheritDoc}
-// */
-// @Override
-// public void onFileStateChanged() {
-// // nothing to do here!
-// }
-
+
+ @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
+ );
+ }
+
+
+
}