diff options
author | Rohit Yengisetty <rohit@cyngn.com> | 2015-02-18 10:21:33 -0800 |
---|---|---|
committer | Matt Garnes <matt@cyngn.com> | 2015-02-19 02:07:15 +0000 |
commit | 70b420be1ef26cfaa9f14f069a3388bdaab44786 (patch) | |
tree | dc72af52e3fbaba6a391d66e6e82b504302e4572 /src | |
parent | fe783402bb7f5c80345d485cbd2525330b59008e (diff) | |
download | android_packages_apps_CMFileManager-70b420be1ef26cfaa9f14f069a3388bdaab44786.tar.gz android_packages_apps_CMFileManager-70b420be1ef26cfaa9f14f069a3388bdaab44786.tar.bz2 android_packages_apps_CMFileManager-70b420be1ef26cfaa9f14f069a3388bdaab44786.zip |
CM File Manager - Intent to open video files will have a playlist attached
In SearchActivity, intent to open video files will have an extra added
with the list of all videos in the search results.
Change-Id: Ibf48e74fd9f43ee3ac60575bad6c8f9fe1ec70ee
Diffstat (limited to 'src')
3 files changed, 75 insertions, 1 deletions
diff --git a/src/com/cyanogenmod/filemanager/activities/SearchActivity.java b/src/com/cyanogenmod/filemanager/activities/SearchActivity.java index b632c78e..c7772361 100644 --- a/src/com/cyanogenmod/filemanager/activities/SearchActivity.java +++ b/src/com/cyanogenmod/filemanager/activities/SearchActivity.java @@ -20,6 +20,7 @@ import android.app.ActionBar; import android.app.Activity; import android.app.AlertDialog; import android.app.SearchManager; +import android.content.ActivityNotFoundException; import android.content.BroadcastReceiver; import android.content.Context; import android.content.DialogInterface; @@ -28,6 +29,7 @@ import android.content.IntentFilter; import android.content.res.Configuration; import android.graphics.Color; import android.graphics.PorterDuff; +import android.net.Uri; import android.os.Bundle; import android.os.Parcelable; import android.preference.PreferenceActivity; @@ -1026,7 +1028,42 @@ public class SearchActivity extends Activity fso = symlink.getLinkRef(); } - // Open the file with the preferred registered app + // special treatment for video files + // all of the video files in the current search will also be sent as an extra in the + // intent along with the item that was clicked + MimeTypeCategory fileCategory = MimeTypeHelper.getCategoryFromExt(this, + FileHelper.getExtension(fso)); + if (fileCategory == MimeTypeCategory.VIDEO) { + + ArrayList<FileSystemObject> filteredList = filterSearchResults(fileCategory); + ArrayList<Uri> uris = new ArrayList<Uri>(filteredList.size()); + + for (FileSystemObject f : filteredList) { + uris.add(f.getFileUri()); + } + + Intent intent = new Intent(); + intent.setAction(Intent.ACTION_VIEW); + intent.setDataAndType(fso.getFileUri(), MimeTypeHelper.getMimeType(this, fso)); + if (filteredList.size() > 1) { + intent.putParcelableArrayListExtra("EXTRA_FILE_LIST", uris); + } + + if (DEBUG) { + Log.i(TAG, "video intent : " + intent); + } + + try { + startActivity(intent); + } catch(ActivityNotFoundException e) { + Log.e(TAG, "ActivityNotFoundException when opening a video file"); + Toast.makeText(this, R.string.activity_not_found_exception, Toast.LENGTH_SHORT); + } + + return; + } + + // for other files, open them with their preferred registered app back(false, fso, false); } catch (Throwable ex) { @@ -1035,6 +1072,26 @@ public class SearchActivity extends Activity } /** + * Returns a subset of the search results falling into the given category + * @param category MimeTypeCategory + * @return list of FileSystemObjects that + */ + private ArrayList<FileSystemObject> filterSearchResults(MimeTypeCategory category) { + ArrayList<FileSystemObject> filteredList = new ArrayList<FileSystemObject>(); + + if (mAdapter.getCount() < 1) return filteredList; + + for (FileSystemObject fso : mAdapter.getFiles()) { + if (MimeTypeHelper.getCategoryFromExt(this, FileHelper.getExtension(fso)) + == category) { + filteredList.add(fso); + } + } + + return filteredList; + } + + /** * {@inheritDoc} */ @Override diff --git a/src/com/cyanogenmod/filemanager/adapters/SearchResultAdapter.java b/src/com/cyanogenmod/filemanager/adapters/SearchResultAdapter.java index 24b9f9d1..32775c8a 100644 --- a/src/com/cyanogenmod/filemanager/adapters/SearchResultAdapter.java +++ b/src/com/cyanogenmod/filemanager/adapters/SearchResultAdapter.java @@ -49,6 +49,7 @@ import com.cyanogenmod.filemanager.util.SearchHelper; import java.io.File; import java.util.ArrayList; +import java.util.Collections; import java.util.Comparator; import java.util.HashMap; import java.util.List; @@ -233,6 +234,7 @@ public class SearchResultAdapter extends ArrayAdapter<SearchResult> { addAll(mNewItems); sort(mSearchResultComparator); mOriginalList.addAll(mNewItems); // cache files so enable mime type filtering later on + Collections.sort(mOriginalList, mSearchResultComparator); // reset buffer mNewItems.clear(); diff --git a/src/com/cyanogenmod/filemanager/model/FileSystemObject.java b/src/com/cyanogenmod/filemanager/model/FileSystemObject.java index c87c07cc..578ea323 100644 --- a/src/com/cyanogenmod/filemanager/model/FileSystemObject.java +++ b/src/com/cyanogenmod/filemanager/model/FileSystemObject.java @@ -16,6 +16,8 @@ package com.cyanogenmod.filemanager.model; +import android.content.ContentResolver; +import android.net.Uri; import com.cyanogenmod.filemanager.R; import com.cyanogenmod.filemanager.util.FileHelper; @@ -336,6 +338,19 @@ public abstract class FileSystemObject implements Serializable, Comparable<FileS } /** + * creates a file uri that references this FileSystemObject + * @return a file uri + */ + public Uri getFileUri() { + Uri uri = new Uri.Builder() + .scheme(ContentResolver.SCHEME_FILE) + .path(getFullPath()) + .build(); + + return uri; + } + + /** * {@inheritDoc} */ @Override |