Skip to content
26 changes: 25 additions & 1 deletion src/main/java/com/owncloud/android/files/FileMenuFilter.java
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,7 @@
import com.owncloud.android.lib.resources.status.OCCapability;
import com.owncloud.android.services.OperationsService.OperationsServiceBinder;
import com.owncloud.android.ui.activity.ComponentsGetter;
import com.owncloud.android.utils.MimeTypeUtil;

import java.util.ArrayList;
import java.util.Arrays;
Expand Down Expand Up @@ -257,7 +258,12 @@ private void filter(List<Integer> toShow, List <Integer> toHide) {
toShow.add(R.id.action_unset_favorite);
}


// STREAM
if (isSingleFile() && !anyFileDown() && (anyFileAudio() || anyFileVideo())){
toShow.add(R.id.action_stream_file);
} else {
toHide.add(R.id.action_stream_file);
}
}

private boolean anyFileSynchronizing() {
Expand Down Expand Up @@ -335,6 +341,24 @@ private boolean anyFileDown() {
return false;
}

private boolean anyFileAudio() {
for(OCFile file: mFiles) {
if(MimeTypeUtil.isAudio(file)) {
return true;
}
}
return false;
}

private boolean anyFileVideo() {
for(OCFile file: mFiles) {
if(MimeTypeUtil.isVideo(file)) {
return true;
}
}
return false;
}

private boolean allKeptAvailableOffline() {
for(OCFile file: mFiles) {
if(!file.isAvailableOffline()) {
Expand Down
37 changes: 29 additions & 8 deletions src/main/java/com/owncloud/android/media/MediaService.java
Original file line number Diff line number Diff line change
Expand Up @@ -21,25 +21,30 @@
package com.owncloud.android.media;

import android.accounts.Account;
import android.app.Activity;
import android.app.NotificationManager;
import android.app.PendingIntent;
import android.app.Service;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.media.AudioManager;
import android.media.MediaPlayer;
import android.media.MediaPlayer.OnCompletionListener;
import android.media.MediaPlayer.OnErrorListener;
import android.media.MediaPlayer.OnPreparedListener;
import android.net.Uri;
import android.net.wifi.WifiManager;
import android.net.wifi.WifiManager.WifiLock;
import android.os.IBinder;
import android.os.PowerManager;
import android.support.v7.app.AlertDialog;
import android.support.v7.app.NotificationCompat;
import android.widget.Toast;

import com.owncloud.android.R;
import com.owncloud.android.datamodel.OCFile;
import com.owncloud.android.lib.common.accounts.AccountUtils;
import com.owncloud.android.lib.common.utils.Log_OC;
import com.owncloud.android.ui.activity.FileActivity;
import com.owncloud.android.ui.activity.FileDisplayActivity;
Expand Down Expand Up @@ -214,6 +219,25 @@ public static String getMessageForMediaError(Context context, int what, int extr
return context.getString(messageId);
}

public static AlertDialog.Builder streamWithExternalApp(final Uri uri, final Activity activity){
AlertDialog.Builder builder = new AlertDialog.Builder(activity);
builder.setMessage(activity.getString(R.string.stream_expose_password))
.setPositiveButton(activity.getString(R.string.common_yes),
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
Intent i = new Intent(Intent.ACTION_VIEW);
i.setData(uri);
activity.startActivity(i);
}
})
.setNegativeButton(activity.getString(R.string.common_no), new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
// User cancelled the dialog
}
});
return builder;
}



/**
Expand Down Expand Up @@ -435,12 +459,7 @@ protected void playMedia() {
releaseResources(false); // release everything except MediaPlayer

try {
if (mFile == null) {
Toast.makeText(this, R.string.media_err_nothing_to_play, Toast.LENGTH_LONG).show();
processStopRequest(true);
return;

} else if (mAccount == null) {
if (mAccount == null) {
Toast.makeText(this, R.string.media_err_not_in_owncloud, Toast.LENGTH_LONG).show();
processStopRequest(true);
return;
Expand All @@ -449,12 +468,12 @@ protected void playMedia() {
createMediaPlayerIfNeeded();
mPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
String url = mFile.getStoragePath();
/* Streaming is not possible right now

if (url == null || url.length() <= 0) {
url = AccountUtils.constructFullURLForAccount(this, mAccount) + mFile.getRemotePath();
}
mIsStreaming = url.startsWith("http:") || url.startsWith("https:");
*/

mIsStreaming = false;

mPlayer.setDataSource(url);
Expand Down Expand Up @@ -495,6 +514,8 @@ protected void playMedia() {
Toast.makeText(this, String.format(getString(R.string.media_err_unexpected), mFile.getFileName()),
Toast.LENGTH_LONG).show();
processStopRequest(true);
} catch (AccountUtils.AccountNotFoundException e) {
Log_OC.e(TAG, "playMedia - Account missing",e);
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,7 @@
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.net.Uri;
import android.os.Build;
import android.os.Bundle;
import android.os.Handler;
Expand Down Expand Up @@ -67,6 +68,7 @@
import com.owncloud.android.lib.resources.files.ToggleFavoriteOperation;
import com.owncloud.android.lib.resources.shares.GetRemoteSharesOperation;
import com.owncloud.android.lib.resources.status.OwnCloudVersion;
import com.owncloud.android.media.MediaService;
import com.owncloud.android.ui.activity.FileActivity;
import com.owncloud.android.ui.activity.FileDisplayActivity;
import com.owncloud.android.ui.activity.FolderPickerActivity;
Expand Down Expand Up @@ -801,15 +803,13 @@ public void onItemClick(AdapterView<?> l, View v, int position, long id) {
((FileDisplayActivity) mContainerActivity).startImagePreview(file);
} else if (PreviewTextFragment.canBePreviewed(file)) {
((FileDisplayActivity) mContainerActivity).startTextPreview(file);
} else if (file.isDown()) {
if (PreviewMediaFragment.canBePreviewed(file)) {
} else if (PreviewMediaFragment.canBePreviewed(file)) {
// media preview
((FileDisplayActivity) mContainerActivity).startMediaPreview(file, 0, true);
} else {
} else if (file.isDown()) {
mContainerActivity.getFileOperationsHelper().openFile(file);
}

} else {
else {
// automatic download, preview on finish
((FileDisplayActivity) mContainerActivity).startDownloadForPreview(file);
}
Expand Down Expand Up @@ -869,6 +869,14 @@ public boolean onFileActionChosen(int menuId) {
}
return true;
}
case R.id.action_stream_file: {
Account account = ((FileActivity)mContainerActivity).getAccount();
Context context = MainApp.getAppContext();
Uri uri = PreviewMediaFragment.generateUrlWithCredentials(account, context, singleFile);
MediaService.streamWithExternalApp(uri, getActivity()).show();

return true;
}
}
}

Expand Down Expand Up @@ -1029,7 +1037,7 @@ private void updateLayout() {
updateFooter();
// decide grid vs list view
OwnCloudVersion version = AccountUtils.getServerVersion(
((FileActivity) mContainerActivity).getAccount());
((FileActivity)mContainerActivity).getAccount());
if (version != null && version.supportsRemoteThumbnails() &&
isGridViewPreferred(mFile)) {
switchToGridView();
Expand Down
Loading