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 | |
| 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
4 files changed, 77 insertions, 1 deletions
diff --git a/res/values/strings.xml b/res/values/strings.xml index 9e4e7bac..52aa991c 100644 --- a/res/values/strings.xml +++ b/res/values/strings.xml @@ -836,4 +836,6 @@ <string name="welcome_title">Welcome</string> <!-- Welcome Dialog - Message --> <string name="welcome_msg">Welcome to the CyanogenMod file manager.\n\nThis app allows you to explore the file system and do operations that could break your device. To prevent damage, the app will start in a safe, low-privileged mode.\n\nYou can access the advanced, full-privileged mode via Settings. It\'s your responsibility to ensure that an operation doesn\'t break your system.\n\nThe CyanogenMod Team</string> + + <string name="activity_not_found_exception">Couldn\'t find an app to open this file</string> </resources> 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 |
