* Copyright (C) 2012-2013 ownCloud Inc.
*
* This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 2 of the License, or
- * (at your option) any later version.
+ * it under the terms of the GNU General Public License version 2,
+ * as published by the Free Software Foundation.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
import android.os.Bundle;
import android.os.IBinder;
import android.support.v4.view.ViewPager;
-import android.util.Log;
+import android.view.MotionEvent;
+import android.view.View;
+import android.view.View.OnTouchListener;
import com.actionbarsherlock.app.ActionBar;
import com.actionbarsherlock.app.SherlockFragmentActivity;
import com.actionbarsherlock.view.MenuItem;
+import com.actionbarsherlock.view.Window;
import com.owncloud.android.datamodel.DataStorageManager;
import com.owncloud.android.datamodel.FileDataStorageManager;
import com.owncloud.android.datamodel.OCFile;
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.ui.activity.FileDetailActivity;
-import com.owncloud.android.ui.fragment.FileDetailFragment;
+import com.owncloud.android.ui.activity.FileActivity;
+import com.owncloud.android.ui.activity.FileDisplayActivity;
import com.owncloud.android.ui.fragment.FileFragment;
import com.owncloud.android.AccountUtils;
+import com.owncloud.android.Log_OC;
import com.owncloud.android.R;
/**
*
* @author David A. Velasco
*/
-public class PreviewImageActivity extends SherlockFragmentActivity implements FileFragment.ContainerActivity, ViewPager.OnPageChangeListener {
+public class PreviewImageActivity extends FileActivity implements FileFragment.ContainerActivity, ViewPager.OnPageChangeListener, OnTouchListener {
public static final int DIALOG_SHORT_WAIT = 0;
private boolean mRequestWaitingForBinder;
private DownloadFinishReceiver mDownloadFinishReceiver;
+
+ private boolean mFullScreen;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
- mFile = getIntent().getParcelableExtra(FileDetailFragment.EXTRA_FILE);
- mAccount = getIntent().getParcelableExtra(FileDetailFragment.EXTRA_ACCOUNT);
+ mFile = getIntent().getParcelableExtra(FileActivity.EXTRA_FILE);
+ mAccount = getIntent().getParcelableExtra(FileActivity.EXTRA_ACCOUNT);
if (mFile == null) {
throw new IllegalStateException("Instanced with a NULL OCFile");
}
if (!mFile.isImage()) {
throw new IllegalArgumentException("Non-image file passed as argument");
}
-
+ requestWindowFeature(Window.FEATURE_ACTION_BAR_OVERLAY);
setContentView(R.layout.preview_image_activity);
ActionBar actionBar = getSupportActionBar();
actionBar.setDisplayHomeAsUpEnabled(true);
actionBar.setTitle(mFile.getFileName());
+ actionBar.hide();
+
+ mFullScreen = true;
mStorageManager = new FileDataStorageManager(mAccount, getContentResolver());
mParentFolder = mStorageManager.getFileById(mFile.getParentId());
position = (position >= 0) ? position : 0;
mViewPager.setAdapter(mPreviewImagePagerAdapter);
mViewPager.setOnPageChangeListener(this);
- Log.e(TAG, "Setting initial position " + position);
mViewPager.setCurrentItem(position);
if (position == 0 && !mFile.isDown()) {
// this is necessary because mViewPager.setCurrentItem(0) just after setting the adapter does not result in a call to #onPageSelected(0)
@Override
public void onStart() {
super.onStart();
- Log.e(TAG, "PREVIEW ACTIVITY ON START");
mDownloadConnection = new PreviewImageServiceConnection();
bindService(new Intent(this, FileDownloader.class), mDownloadConnection, Context.BIND_AUTO_CREATE);
mUploadConnection = new PreviewImageServiceConnection();
public void onServiceConnected(ComponentName component, IBinder service) {
if (component.equals(new ComponentName(PreviewImageActivity.this, FileDownloader.class))) {
- Log.e(TAG, "PREVIEW_IMAGE Download service connected");
mDownloaderBinder = (FileDownloaderBinder) service;
if (mRequestWaitingForBinder) {
mRequestWaitingForBinder = false;
- Log.e(TAG, "Simulating reselection of current page after connection of download binder");
+ Log_OC.d(TAG, "Simulating reselection of current page after connection of download binder");
onPageSelected(mViewPager.getCurrentItem());
}
} else if (component.equals(new ComponentName(PreviewImageActivity.this, FileUploader.class))) {
- Log.d(TAG, "Upload service connected");
+ Log_OC.d(TAG, "Upload service connected");
mUploaderBinder = (FileUploaderBinder) service;
} else {
return;
@Override
public void onServiceDisconnected(ComponentName component) {
if (component.equals(new ComponentName(PreviewImageActivity.this, FileDownloader.class))) {
- Log.d(TAG, "Download service suddenly disconnected");
+ Log_OC.d(TAG, "Download service suddenly disconnected");
mDownloaderBinder = null;
} else if (component.equals(new ComponentName(PreviewImageActivity.this, FileUploader.class))) {
- Log.d(TAG, "Upload service suddenly disconnected");
+ Log_OC.d(TAG, "Upload service suddenly disconnected");
mUploaderBinder = null;
}
}
@Override
protected void onResume() {
super.onResume();
- Log.e(TAG, "PREVIEW ACTIVITY ONRESUME");
+ //Log.e(TAG, "ACTIVITY, ONRESUME");
mDownloadFinishReceiver = new DownloadFinishReceiver();
IntentFilter filter = new IntentFilter(FileDownloader.DOWNLOAD_FINISH_MESSAGE);
+ filter.addAction(FileDownloader.DOWNLOAD_ADDED_MESSAGE);
registerReceiver(mDownloadFinishReceiver, filter);
}
-
@Override
protected void onPostResume() {
+ //Log.e(TAG, "ACTIVITY, ONPOSTRESUME");
super.onPostResume();
- Log.e(TAG, "PREVIEW ACTIVITY ONPOSTRESUME");
}
@Override
private void backToDisplayActivity() {
- /*
- Intent intent = new Intent(this, FileDisplayActivity.class);
- intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
- intent.putExtra(FileDetailFragment.EXTRA_FILE, mFile);
- intent.putExtra(FileDetailFragment.EXTRA_ACCOUNT, mAccount);
- startActivity(intent);
- */
finish();
}
@Override
- public void showFragmentWithDetails(OCFile file) {
- Intent showDetailsIntent = new Intent(this, FileDetailActivity.class);
- showDetailsIntent.putExtra(FileDetailFragment.EXTRA_FILE, file);
- showDetailsIntent.putExtra(FileDetailFragment.EXTRA_ACCOUNT, AccountUtils.getCurrentOwnCloudAccount(this));
- showDetailsIntent.putExtra(FileDetailActivity.EXTRA_MODE, FileDetailActivity.MODE_DETAILS);
+ public void showDetails(OCFile file) {
+ Intent showDetailsIntent = new Intent(this, FileDisplayActivity.class);
+ showDetailsIntent.setAction(FileDisplayActivity.ACTION_DETAILS);
+ showDetailsIntent.putExtra(FileActivity.EXTRA_FILE, file);
+ showDetailsIntent.putExtra(FileActivity.EXTRA_ACCOUNT, AccountUtils.getCurrentOwnCloudAccount(this));
startActivity(showDetailsIntent);
+ int pos = mPreviewImagePagerAdapter.getFilePosition(file);
+ file = mPreviewImagePagerAdapter.getFileAt(pos);
+
}
private void requestForDownload(OCFile file) {
- Log.e(TAG, "REQUEST FOR DOWNLOAD : " + file.getFileName());
if (mDownloaderBinder == null) {
- Log.e(TAG, "requestForDownload called without binder to download service");
+ Log_OC.d(TAG, "requestForDownload called without binder to download service");
} else if (!mDownloaderBinder.isDownloading(mAccount, file)) {
Intent i = new Intent(this, FileDownloader.class);
}
}
- @Override
- public void notifySuccessfulDownload(OCFile file, Intent intent, boolean success) {
- /*
- if (success) {
- if (mWaitingToPreview != null && mWaitingToPreview.equals(file)) {
- mWaitingToPreview = null;
- int position = mViewPager.getCurrentItem();
- mPreviewImagePagerAdapter.updateFile(position, file);
- Log.e(TAG, "BEFORE NOTIFY DATA SET CHANGED");
- mPreviewImagePagerAdapter.notifyDataSetChanged();
- Log.e(TAG, "AFTER NOTIFY DATA SET CHANGED");
- }
- }
- */
- }
-
-
/**
* This method will be invoked when a new page becomes selected. Animation is not necessarily complete.
*
*/
@Override
public void onPageSelected(int position) {
- Log.e(TAG, "onPageSelected " + position);
if (mDownloaderBinder == null) {
mRequestWaitingForBinder = true;
OCFile currentFile = mPreviewImagePagerAdapter.getFileAt(position);
getSupportActionBar().setTitle(currentFile.getFileName());
if (!currentFile.isDown()) {
- requestForDownload(currentFile);
- //updateCurrentDownloadFragment(true);
+ if (!mPreviewImagePagerAdapter.pendingErrorAt(position)) {
+ requestForDownload(currentFile);
+ }
}
}
}
/**
* Called when the scroll state changes. Useful for discovering when the user begins dragging,
- * when the pager is automatically settling to the current page, or when it is fully stopped/idle.
+ * when the pager is automatically settling to the current page. when it is fully stopped/idle.
*
* @param State The new scroll state (SCROLL_STATE_IDLE, _DRAGGING, _SETTLING
*/
}
- private void updateCurrentDownloadFragment(boolean transferring) {
- FileFragment fragment = mPreviewImagePagerAdapter.getFragmentAt(mViewPager.getCurrentItem());
- if (fragment instanceof FileDownloadFragment) {
- ((FileDownloadFragment) fragment).updateView(transferring);
- //mViewPager.invalidate();
- }
- }
-
-
/**
* Class waiting for broadcast events from the {@link FielDownloader} service.
*
OCFile file = mStorageManager.getFileByPath(downloadedRemotePath);
int position = mPreviewImagePagerAdapter.getFilePosition(file);
boolean downloadWasFine = intent.getBooleanExtra(FileDownloader.EXTRA_DOWNLOAD_RESULT, false);
- boolean isCurrent = (mViewPager.getCurrentItem() == position);
+ //boolean isOffscreen = Math.abs((mViewPager.getCurrentItem() - position)) <= mViewPager.getOffscreenPageLimit();
- if (position >= 0) {
- /// ITS MY BUSSINESS
- Log.e(TAG, "downloaded file FOUND in adapter");
+ if (position >= 0 && intent.getAction().equals(FileDownloader.DOWNLOAD_FINISH_MESSAGE)) {
if (downloadWasFine) {
- mPreviewImagePagerAdapter.updateFile(position, file);
- //Log.e(TAG, "BEFORE NOTIFY DATA SET CHANGED");
- mPreviewImagePagerAdapter.notifyDataSetChanged();
- //Log.e(TAG, "AFTER NOTIFY DATA SET CHANGED");
+ mPreviewImagePagerAdapter.updateFile(position, file);
- } else if (isCurrent) {
- updateCurrentDownloadFragment(false);
+ } else {
+ mPreviewImagePagerAdapter.updateWithDownloadError(position);
}
+ mPreviewImagePagerAdapter.notifyDataSetChanged(); // will trigger the creation of new fragments
} else {
- Log.e(TAG, "DOWNLOADED FILE NOT FOUND IN ADAPTER ");
+ Log_OC.d(TAG, "Download finished, but the fragment is offscreen");
}
}
}
}
+
+
+ @Override
+ public boolean onTouch(View v, MotionEvent event) {
+ if (event.getAction() == MotionEvent.ACTION_UP) {
+ toggleFullScreen();
+ }
+ return true;
+ }
+
+
+ private void toggleFullScreen() {
+ ActionBar actionBar = getSupportActionBar();
+ if (mFullScreen) {
+ actionBar.show();
+
+ } else {
+ actionBar.hide();
+
+ }
+ mFullScreen = !mFullScreen;
+ }
+
+ @Override
+ protected void onAccountSet(boolean stateWasRecovered) {
+ // TODO
+ }
}