+ /**\r
+ * Creates the proper fragment depending upon the state of the handled {@link OCFile} and\r
+ * the requested {@link Intent}.\r
+ */\r
+ private void createChildFragment() {\r
+ int mode = getIntent().getIntExtra(EXTRA_MODE, MODE_PREVIEW); \r
+ \r
+ Fragment newFragment = null;\r
+ if (PreviewMediaFragment.canBePreviewed(mFile) && mode == MODE_PREVIEW) {\r
+ if (mFile.isDown()) {\r
+ newFragment = new PreviewMediaFragment(mFile, mAccount);\r
+ \r
+ } else {\r
+ newFragment = new FileDetailFragment(mFile, mAccount);\r
+ mWaitingToPreview = true;\r
+ }\r
+ \r
+ } else {\r
+ newFragment = new FileDetailFragment(mFile, mAccount);\r
+ }\r
+ FragmentTransaction ft = getSupportFragmentManager().beginTransaction();\r
+ ft.replace(R.id.fragment, newFragment, FileDetailFragment.FTAG);\r
+ ft.commit();\r
+ }\r
+ \r
+\r
+ @Override\r
+ protected void onSaveInstanceState(Bundle outState) {\r
+ super.onSaveInstanceState(outState);\r
+ outState.putBoolean(KEY_WAITING_TO_PREVIEW, mWaitingToPreview);\r
+ }\r
+ \r
+ \r
+ @Override\r
+ public void onPause() {\r
+ super.onPause();\r
+ if (mDownloadFinishReceiver != null) {\r
+ unregisterReceiver(mDownloadFinishReceiver);\r
+ mDownloadFinishReceiver = null;\r
+ }\r
+ }\r
+ \r
+ \r
+ @Override\r
+ public void onResume() {\r
+ super.onResume();\r
+ if (!mConfigurationChangedToLandscape) {\r
+ // TODO this is probably unnecessary\r
+ Fragment fragment = getSupportFragmentManager().findFragmentByTag(FileDetailFragment.FTAG);\r
+ if (fragment != null && fragment instanceof FileDetailFragment) {\r
+ ((FileDetailFragment) fragment).updateFileDetails(false, false);\r
+ }\r
+ }\r
+ // Listen for download messages\r
+ IntentFilter downloadIntentFilter = new IntentFilter(FileDownloader.DOWNLOAD_ADDED_MESSAGE);\r
+ downloadIntentFilter.addAction(FileDownloader.DOWNLOAD_FINISH_MESSAGE);\r
+ mDownloadFinishReceiver = new DownloadFinishReceiver();\r
+ registerReceiver(mDownloadFinishReceiver, downloadIntentFilter);\r
+ }\r
+ \r
+ \r
+ /** Defines callbacks for service binding, passed to bindService() */\r
+ private class DetailsServiceConnection implements ServiceConnection {\r
+\r
+ @Override\r
+ public void onServiceConnected(ComponentName component, IBinder service) {\r
+ \r
+ if (component.equals(new ComponentName(FileDetailActivity.this, FileDownloader.class))) {\r
+ Log.d(TAG, "Download service connected");\r
+ mDownloaderBinder = (FileDownloaderBinder) service;\r
+ if (mWaitingToPreview) {\r
+ requestForDownload();\r
+ }\r
+ \r
+ } else if (component.equals(new ComponentName(FileDetailActivity.this, FileUploader.class))) {\r
+ Log.d(TAG, "Upload service connected");\r
+ mUploaderBinder = (FileUploaderBinder) service;\r
+ } else {\r
+ return;\r
+ }\r
+ \r
+ Fragment fragment = getSupportFragmentManager().findFragmentByTag(FileDetailFragment.FTAG);\r
+ FileDetailFragment detailsFragment = (fragment instanceof FileDetailFragment) ? (FileDetailFragment) fragment : null;\r
+ if (detailsFragment != null) {\r
+ detailsFragment.listenForTransferProgress();\r
+ detailsFragment.updateFileDetails(mWaitingToPreview, false); // let the fragment gets the mDownloadBinder through getDownloadBinder() (see FileDetailFragment#updateFileDetais())\r
+ }\r
+ }\r
+\r
+ @Override\r
+ public void onServiceDisconnected(ComponentName component) {\r
+ if (component.equals(new ComponentName(FileDetailActivity.this, FileDownloader.class))) {\r
+ Log.d(TAG, "Download service disconnected");\r
+ mDownloaderBinder = null;\r
+ } else if (component.equals(new ComponentName(FileDetailActivity.this, FileUploader.class))) {\r
+ Log.d(TAG, "Upload service disconnected");\r
+ mUploaderBinder = null;\r
+ }\r
+ }\r
+ }; \r
+ \r
+ \r
+ @Override\r
+ public void onDestroy() {\r
+ super.onDestroy();\r
+ if (mDownloadConnection != null) {\r
+ unbindService(mDownloadConnection);\r
+ mDownloadConnection = null;\r
+ }\r
+ if (mUploadConnection != null) {\r
+ unbindService(mUploadConnection);\r
+ mUploadConnection = null;\r
+ }\r
+ }\r
+ \r
+ \r