import java.io.File;\r
\r
import android.accounts.Account;\r
+import android.app.Activity;\r
import android.app.AlertDialog;\r
import android.app.ProgressDialog;\r
import android.app.AlertDialog.Builder;\r
import android.content.IntentFilter;\r
import android.content.ServiceConnection;\r
import android.content.SharedPreferences;\r
+import android.content.SharedPreferences.Editor;\r
import android.content.pm.PackageInfo;\r
import android.content.pm.PackageManager.NameNotFoundException;\r
import android.content.res.Resources.NotFoundException;\r
import android.os.IBinder;\r
import android.preference.PreferenceManager;\r
import android.provider.MediaStore;\r
+import android.support.v4.app.Fragment;\r
import android.support.v4.app.FragmentTransaction;\r
import android.util.Log;\r
import android.view.View;\r
import com.owncloud.android.operations.SynchronizeFileOperation;\r
import com.owncloud.android.operations.RemoteOperationResult.ResultCode;\r
import com.owncloud.android.syncadapter.FileSyncService;\r
+import com.owncloud.android.ui.dialog.ChangelogDialog;\r
import com.owncloud.android.ui.dialog.SslValidatorDialog;\r
import com.owncloud.android.ui.dialog.SslValidatorDialog.OnSslValidatorListener;\r
import com.owncloud.android.ui.fragment.FileDetailFragment;\r
+import com.owncloud.android.ui.fragment.FileFragment;\r
+import com.owncloud.android.ui.fragment.FilePreviewFragment;\r
import com.owncloud.android.ui.fragment.OCFileListFragment;\r
\r
import com.owncloud.android.R;\r
private static final int DIALOG_CHOOSE_UPLOAD_SOURCE = 4;\r
private static final int DIALOG_SSL_VALIDATOR = 5;\r
private static final int DIALOG_CERT_NOT_SAVED = 6;\r
+ private static final String DIALOG_CHANGELOG_TAG = "DIALOG_CHANGELOG";\r
\r
\r
private static final int ACTION_SELECT_CONTENT_FROM_APPS = 1;\r
\r
private static final String TAG = "FileDisplayActivity";\r
\r
- private static int[] mMenuIdentifiersToPatch = {R.id.about_app};\r
+ private static int[] mMenuIdentifiersToPatch = {R.id.action_about_app};\r
\r
@Override\r
public void onCreate(Bundle savedInstanceState) {\r
actionBar.setListNavigationCallbacks(mDirectories, this);\r
setSupportProgressBarIndeterminateVisibility(false); // always AFTER setContentView(...) ; to workaround bug in its implementation\r
\r
+ \r
+ // show changelog, if needed\r
+ showChangeLog();\r
+ \r
Log.d(getClass().toString(), "onCreate() end");\r
}\r
\r
\r
/**\r
+ * Shows a dialog with the change log of the current version after each app update\r
+ * \r
+ * TODO make it permanent; by now, only to advice the workaround app for 4.1.x\r
+ */\r
+ private void showChangeLog() {\r
+ if (android.os.Build.VERSION.SDK_INT == android.os.Build.VERSION_CODES.JELLY_BEAN) {\r
+ final String KEY_VERSION = "version";\r
+ SharedPreferences sharedPref = PreferenceManager.getDefaultSharedPreferences(getApplicationContext());\r
+ int currentVersionNumber = 0;\r
+ int savedVersionNumber = sharedPref.getInt(KEY_VERSION, 0);\r
+ try {\r
+ PackageInfo pi = getPackageManager().getPackageInfo(getPackageName(), 0);\r
+ currentVersionNumber = pi.versionCode;\r
+ } catch (Exception e) {}\r
+ \r
+ if (currentVersionNumber > savedVersionNumber) {\r
+ ChangelogDialog.newInstance(true).show(getSupportFragmentManager(), DIALOG_CHANGELOG_TAG);\r
+ Editor editor = sharedPref.edit();\r
+ editor.putInt(KEY_VERSION, currentVersionNumber);\r
+ editor.commit();\r
+ }\r
+ }\r
+ }\r
+ \r
+\r
+ /**\r
* Launches the account creation activity. To use when no ownCloud account is available\r
*/\r
private void createFirstAccount() {\r
if (mDualPane && getSupportFragmentManager().findFragmentByTag(FileDetailFragment.FTAG) == null) {\r
FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();\r
if (mCurrentFile != null) {\r
- transaction.replace(R.id.file_details_container, new FileDetailFragment(mCurrentFile, AccountUtils.getCurrentOwnCloudAccount(this)), FileDetailFragment.FTAG); // empty FileDetailFragment\r
+ if (mCurrentFile.isDown() && FilePreviewFragment.canBePreviewed(mCurrentFile)) {\r
+ transaction.replace(R.id.file_details_container, new FilePreviewFragment(mCurrentFile, AccountUtils.getCurrentOwnCloudAccount(this)), FileDetailFragment.FTAG);\r
+ } else {\r
+ transaction.replace(R.id.file_details_container, new FileDetailFragment(mCurrentFile, AccountUtils.getCurrentOwnCloudAccount(this)), FileDetailFragment.FTAG);\r
+ }\r
mCurrentFile = null;\r
+ \r
} else {\r
transaction.replace(R.id.file_details_container, new FileDetailFragment(null, null), FileDetailFragment.FTAG); // empty FileDetailFragment\r
}\r
@Override\r
public boolean onCreateOptionsMenu(Menu menu) {\r
MenuInflater inflater = getSherlock().getMenuInflater();\r
- inflater.inflate(R.menu.menu, menu);\r
+ inflater.inflate(R.menu.main_menu, menu);\r
\r
patchHiddenAccents(menu);\r
\r
public boolean onOptionsItemSelected(MenuItem item) {\r
boolean retval = true;\r
switch (item.getItemId()) {\r
- case R.id.createDirectoryItem: {\r
+ case R.id.action_create_dir: {\r
showDialog(DIALOG_CREATE_DIR);\r
break;\r
}\r
- case R.id.startSync: {\r
+ case R.id.action_sync_account: {\r
startSynchronization();\r
break;\r
}\r
startActivity(settingsIntent);\r
break;\r
}\r
- case R.id.about_app : {\r
+ case R.id.action_about_app: {\r
showDialog(DIALOG_ABOUT_APP);\r
break;\r
}\r
\r
if (mDualPane) {\r
// Resets the FileDetailsFragment on Tablets so that it always displays\r
- FileDetailFragment fileDetails = (FileDetailFragment) getSupportFragmentManager().findFragmentByTag(FileDetailFragment.FTAG);\r
- if (fileDetails != null && !fileDetails.isEmpty()) {\r
+ Fragment fileFragment = getSupportFragmentManager().findFragmentByTag(FileDetailFragment.FTAG);\r
+ if (fileFragment != null && (fileFragment instanceof FilePreviewFragment || !((FileDetailFragment) fileFragment).isEmpty())) {\r
FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();\r
- transaction.remove(fileDetails);\r
- transaction.add(R.id.file_details_container, new FileDetailFragment(null, null), FileDetailFragment.FTAG);\r
+ transaction.replace(R.id.file_details_container, new FileDetailFragment(null, null), FileDetailFragment.FTAG); // empty FileDetailFragment \r
transaction.commit();\r
}\r
}\r
super.onSaveInstanceState(outState);\r
outState.putParcelable(FileDetailFragment.EXTRA_FILE, mCurrentDir);\r
if (mDualPane) {\r
- FileDetailFragment fragment = (FileDetailFragment) getSupportFragmentManager().findFragmentByTag(FileDetailFragment.FTAG);\r
+ FileFragment fragment = (FileFragment) getSupportFragmentManager().findFragmentByTag(FileDetailFragment.FTAG);\r
if (fragment != null) {\r
- OCFile file = fragment.getDisplayedFile();\r
+ OCFile file = fragment.getFile();\r
if (file != null) {\r
outState.putParcelable(FileDetailFragment.EXTRA_FILE, file);\r
}\r
\r
if (mDualPane) {\r
// Resets the FileDetailsFragment on Tablets so that it always displays\r
- FileDetailFragment fileDetails = (FileDetailFragment) getSupportFragmentManager().findFragmentByTag(FileDetailFragment.FTAG);\r
- if (fileDetails != null && !fileDetails.isEmpty()) {\r
+ Fragment fileFragment = getSupportFragmentManager().findFragmentByTag(FileDetailFragment.FTAG);\r
+ if (fileFragment != null && (fileFragment instanceof FilePreviewFragment || !((FileDetailFragment) fileFragment).isEmpty())) {\r
FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();\r
- transaction.remove(fileDetails);\r
- transaction.add(R.id.file_details_container, new FileDetailFragment(null, null), FileDetailFragment.FTAG);\r
+ transaction.replace(R.id.file_details_container, new FileDetailFragment(null, null), FileDetailFragment.FTAG); // empty FileDetailFragment \r
transaction.commit();\r
}\r
}\r
*/\r
@Override\r
public void onFileClick(OCFile file) {\r
- \r
+\r
// If we are on a large device -> update fragment\r
if (mDualPane) {\r
// buttons in the details view are problematic when trying to reuse an existing fragment; create always a new one solves some of them, BUT no all; downloads are 'dangerous'\r
FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();\r
- transaction.replace(R.id.file_details_container, new FileDetailFragment(file, AccountUtils.getCurrentOwnCloudAccount(this)), FileDetailFragment.FTAG);\r
- transaction.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE);\r
+ if (file != null && file.isDown() && FilePreviewFragment.canBePreviewed(file)) {\r
+ transaction.replace(R.id.file_details_container, new FilePreviewFragment(file, AccountUtils.getCurrentOwnCloudAccount(this)), FileDetailFragment.FTAG);\r
+ } else {\r
+ transaction.replace(R.id.file_details_container, new FileDetailFragment(file, AccountUtils.getCurrentOwnCloudAccount(this)), FileDetailFragment.FTAG);\r
+ }\r
+ //transaction.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE);\r
transaction.commit();\r
\r
} else { // small or medium screen device -> new Activity\r
if (mFileList != null)\r
mFileList.listDirectory();\r
if (mDualPane) {\r
- FileDetailFragment fragment = (FileDetailFragment) getSupportFragmentManager().findFragmentByTag(FileDetailFragment.FTAG);\r
- if (fragment != null)\r
- fragment.updateFileDetails(false);\r
+ Fragment fragment = getSupportFragmentManager().findFragmentByTag(FileDetailFragment.FTAG);\r
+ if (fragment != null && fragment instanceof FileDetailFragment) {\r
+ ((FileDetailFragment)fragment).updateFileDetails(false);\r
+ }\r
}\r
}\r
\r
msg.show();\r
OCFile removedFile = operation.getFile();\r
if (mDualPane) {\r
- FileDetailFragment details = (FileDetailFragment) getSupportFragmentManager().findFragmentByTag(FileDetailFragment.FTAG);\r
- if (details != null && removedFile.equals(details.getDisplayedFile()) ) {\r
+ FileFragment details = (FileFragment) getSupportFragmentManager().findFragmentByTag(FileDetailFragment.FTAG);\r
+ if (details != null && removedFile.equals(details.getFile())) {\r
FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();\r
transaction.replace(R.id.file_details_container, new FileDetailFragment(null, null)); // empty FileDetailFragment\r
transaction.commit();\r
OCFile renamedFile = operation.getFile();\r
if (result.isSuccess()) {\r
if (mDualPane) {\r
- FileDetailFragment details = (FileDetailFragment) getSupportFragmentManager().findFragmentByTag(FileDetailFragment.FTAG);\r
- if (details != null && renamedFile.equals(details.getDisplayedFile()) ) {\r
- details.updateFileDetails(renamedFile, AccountUtils.getCurrentOwnCloudAccount(this));\r
+ FileFragment details = (FileFragment) getSupportFragmentManager().findFragmentByTag(FileDetailFragment.FTAG);\r
+ if (details != null && details instanceof FileDetailFragment && renamedFile.equals(details.getFile()) ) {\r
+ ((FileDetailFragment) details).updateFileDetails(renamedFile, AccountUtils.getCurrentOwnCloudAccount(this));\r
}\r
}\r
if (mStorageManager.getFileById(renamedFile.getParentId()).equals(mCurrentDir)) {\r
fileListFragment.listDirectory();\r
}*/\r
if (mDualPane) {\r
- FileDetailFragment details = (FileDetailFragment) getSupportFragmentManager().findFragmentByTag(FileDetailFragment.FTAG);\r
- if (details != null && file.equals(details.getDisplayedFile()) ) {\r
+ FileFragment details = (FileFragment) getSupportFragmentManager().findFragmentByTag(FileDetailFragment.FTAG);\r
+ if (details != null && details instanceof FileDetailFragment && file.equals(details.getFile()) ) {\r
if (downloading || uploading) {\r
- details.updateFileDetails(file, AccountUtils.getCurrentOwnCloudAccount(this));\r
+ ((FileDetailFragment)details).updateFileDetails(file, AccountUtils.getCurrentOwnCloudAccount(this));\r
} else {\r
- details.updateFileDetails(downloading || uploading);\r
+ ((FileDetailFragment)details).updateFileDetails(downloading || uploading);\r
}\r
}\r
}\r
}\r
\r
\r
- \r
+ @Override\r
+ public void showFragmentWithDetails(OCFile file) {\r
+ if (mDualPane) {\r
+ FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();\r
+ transaction.replace(R.id.file_details_container, new FileDetailFragment(file, AccountUtils.getCurrentOwnCloudAccount(this)), FileDetailFragment.FTAG); \r
+ transaction.commit();\r
+ \r
+ } else {\r
+ Intent showDetailsIntent = new Intent(this, FileDetailActivity.class);\r
+ showDetailsIntent.putExtra(FileDetailFragment.EXTRA_FILE, file);\r
+ showDetailsIntent.putExtra(FileDetailFragment.EXTRA_ACCOUNT, AccountUtils.getCurrentOwnCloudAccount(this));\r
+ showDetailsIntent.putExtra(FileDetailActivity.EXTRA_MODE, FileDetailActivity.MODE_DETAILS);\r
+ startActivity(showDetailsIntent);\r
+ }\r
+ }\r
\r
\r
}\r