import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.ListPopupWindow;
+import android.widget.ListView;
import android.widget.PopupWindow;
import android.widget.ScrollView;
import android.widget.SearchView;
import android.widget.Toast;
import android.widget.Toolbar;
+import android.widget.ArrayAdapter;
import com.android.internal.util.XmlUtils;
import com.cyanogenmod.filemanager.FileManagerApplication;
import com.cyanogenmod.filemanager.R;
import com.cyanogenmod.filemanager.util.ExceptionUtil;
import com.cyanogenmod.filemanager.util.ExceptionUtil.OnRelaunchCommandResult;
import com.cyanogenmod.filemanager.util.FileHelper;
+import com.cyanogenmod.filemanager.util.MimeTypeHelper.MimeTypeCategory;
import com.cyanogenmod.filemanager.util.StorageHelper;
import java.io.File;
import java.io.FileNotFoundException;
import java.util.ArrayList;
import java.util.Arrays;
+import java.util.HashMap;
import java.util.List;
import java.util.Locale;
+import java.util.Map;
+
+import static com.cyanogenmod.filemanager.util.MimeTypeHelper.MimeTypeCategory.*;
/**
* The main navigation activity. This activity is the center of the application.
}
};
+ static String MIME_TYPE_LOCALIZED_NAMES[];
+ /**
+ * @hide
+ */
+ static Map<MimeTypeCategory, Drawable> EASY_MODE_ICONS = new
+ HashMap<MimeTypeCategory, Drawable>();
+
/**
* @hide
*/
NavigationView[] mNavigationViews;
+ /**
+ * @hide
+ */
+ ListView mEasyModeListView;
private List<History> mHistory;
+ private static final List<MimeTypeCategory> EASY_MODE_LIST = new ArrayList<MimeTypeCategory>() {
+ {
+ add(NONE);
+ add(IMAGE);
+ add(VIDEO);
+ add(AUDIO);
+ add(DOCUMENT);
+ }
+ };
+
+ private ArrayAdapter<MimeTypeCategory> mEasyModeAdapter;
+ private View.OnClickListener mEasyModeItemClickListener = new View.OnClickListener() {
+ @Override
+ public void onClick(View view) {
+ Integer position = (Integer) view.getTag();
+ onClicked(position);
+ }
+ };
+
private int mCurrentNavigationView;
private ViewGroup mActionBar;
private ButtonItem mClearHistory;
private List<Bookmark> mBookmarks;
+ private List<Bookmark> mSdBookmarks;
private LinearLayout mDrawerBookmarks;
private boolean mExitFlag = false;
}
});
+ MIME_TYPE_LOCALIZED_NAMES = MimeTypeCategory.getFriendlyLocalizedNames(NavigationActivity
+ .this);
+
+ EASY_MODE_ICONS.put(MimeTypeCategory.NONE, getResources().getDrawable(R.drawable
+ .ic_em_all));
+ EASY_MODE_ICONS.put(MimeTypeCategory.IMAGE, getResources().getDrawable(R.drawable
+ .ic_em_image));
+ EASY_MODE_ICONS.put(MimeTypeCategory.VIDEO, getResources().getDrawable(R.drawable
+ .ic_em_video));
+ EASY_MODE_ICONS.put(MimeTypeCategory.AUDIO, getResources().getDrawable(R.drawable
+ .ic_em_music));
+ EASY_MODE_ICONS.put(MimeTypeCategory.DOCUMENT, getResources().getDrawable(R.drawable
+ .ic_em_document));
+
//Save state
super.onCreate(state);
}
}
/**
+ * Show the easy mode view
+ */
+ private void performShowEasyMode() {
+ mEasyModeListView.setVisibility(View.VISIBLE);
+ getCurrentNavigationView().setVisibility(View.GONE);
+ }
+
+ /**
+ * Hide the easy mode view
+ */
+ private void performHideEasyMode() {
+ mEasyModeListView.setVisibility(View.GONE);
+ getCurrentNavigationView().setVisibility(View.VISIBLE);
+ }
+
+ /**
* Method takes a bookmark as argument and adds it to the bookmark list in
* the drawer
*/
final int index = mDrawerBookmarks.indexOfChild(v);
final Bookmark bookmark = mBookmarks.get(index);
+ boolean showEasyMode = (mSdBookmarks.contains(bookmark));
+
// try to navigate to the bookmark path
try {
FileSystemObject fso = CommandHelper.getFileInfo(
getApplicationContext(), bookmark.mPath, null);
if (fso != null) {
+ if (showEasyMode) {
+ performShowEasyMode();
+ } else {
+ performHideEasyMode();
+ }
getCurrentNavigationView().open(fso);
mDrawerLayout.closeDrawer(Gravity.START);
}
bookmarks.add(loadHomeBookmarks());
bookmarks.addAll(loadFilesystemBookmarks());
}
- bookmarks.addAll(loadSdStorageBookmarks());
+ mSdBookmarks = loadSdStorageBookmarks();
+ bookmarks.addAll(mSdBookmarks);
bookmarks.addAll(loadVirtualBookmarks());
bookmarks.addAll(loadUserBookmarks());
return bookmarks;
//- 0
this.mNavigationViews[0] = (NavigationView)findViewById(R.id.navigation_view);
this.mNavigationViews[0].setId(0);
+ this.mEasyModeListView = (ListView) findViewById(R.id.lv_easy_mode);
+ mEasyModeAdapter = new ArrayAdapter<MimeTypeCategory>(this, R.layout
+ .navigation_view_simple_item) {
+ @Override
+ public View getView(int position, View convertView, ViewGroup parent) {
+ convertView = (convertView == null) ?getLayoutInflater().inflate(R.layout
+ .navigation_view_simple_item, null, true) : convertView;
+ MimeTypeCategory item = getItem(position);
+ String typeTitle = MIME_TYPE_LOCALIZED_NAMES[item.ordinal()];
+ TextView typeTitleTV = (TextView) convertView
+ .findViewById(R.id.navigation_view_item_name);
+ ImageView typeIconIV = (ImageView) convertView
+ .findViewById(R.id.navigation_view_item_icon);
+ View checkBoxView = convertView.findViewById(R.id.navigation_view_item_check);
+ checkBoxView.setVisibility(View.GONE);
+ typeTitleTV.setText(typeTitle);
+ typeIconIV.setImageDrawable(EASY_MODE_ICONS.get(item));
+ convertView.setOnClickListener(mEasyModeItemClickListener);
+ convertView.setTag(position);
+ return convertView;
+ }
+ };
+ mEasyModeAdapter.addAll(EASY_MODE_LIST);
+ mEasyModeListView.setAdapter(mEasyModeAdapter);
+ }
+
+ private void onClicked(int position) {
+ Intent intent = new Intent(this, SearchActivity.class);
+ intent.setAction(Intent.ACTION_SEARCH);
+ intent.putExtra(SearchActivity.EXTRA_SEARCH_DIRECTORY,
+ getCurrentNavigationView().getCurrentDir());
+ intent.putExtra(SearchManager.QUERY, "*"); // Use wild-card '*'
+ switch (position) {
+ case 0:
+ performHideEasyMode();
+ return;
+ case 1:
+ intent.putExtra(SearchActivity.EXTRA_SEARCH_MIMETYPE, MimeTypeCategory.IMAGE);
+ break;
+ case 2:
+ intent.putExtra(SearchActivity.EXTRA_SEARCH_MIMETYPE, MimeTypeCategory.VIDEO);
+ break;
+ case 3:
+ intent.putExtra(SearchActivity.EXTRA_SEARCH_MIMETYPE, MimeTypeCategory.AUDIO);
+ break;
+ case 4:
+ intent.putExtra(SearchActivity.EXTRA_SEARCH_MIMETYPE, MimeTypeCategory.DOCUMENT);
+ break;
+ }
+ startActivity(intent);
}
/**
}
}
+ boolean needsEasyMode = false;
+ for (Bookmark bookmark :mSdBookmarks) {
+ if (bookmark.mPath.equalsIgnoreCase(initialDir)) {
+ needsEasyMode = true;
+ break;
+ }
+ }
+ if (needsEasyMode) {
+ performShowEasyMode();
+ } else {
+ performHideEasyMode();
+ }
// Change the current directory to the user-defined initial directory
navigationView.changeCurrentDir(initialDir, addToHistory);
}
}
if (keyCode == KeyEvent.KEYCODE_BACK) {
if (checkBackAction()) {
+ performHideEasyMode();
return true;
}
if (fso != null) {
//Goto to new directory
getCurrentNavigationView().open(fso, searchInfo);
+ performHideEasyMode();
}
}
} else if (resultCode == RESULT_CANCELED) {
import com.cyanogenmod.filemanager.util.ExceptionUtil.OnRelaunchCommandResult;
import com.cyanogenmod.filemanager.util.FileHelper;
import com.cyanogenmod.filemanager.util.MimeTypeHelper;
+import com.cyanogenmod.filemanager.util.MimeTypeHelper.MimeTypeCategory;
import com.cyanogenmod.filemanager.util.StorageHelper;
import java.io.FileNotFoundException;
*/
public static final String EXTRA_SEARCH_RESTORE = "extra_search_restore"; //$NON-NLS-1$
+ /**
+ * Intent extra parameter for passing the target mime type information.
+ */
+ public static final String EXTRA_SEARCH_MIMETYPE = "extra_search_mimetype"; //$NON-NLS-1$
//Minimum characters to allow query
private static final int MIN_CHARS_SEARCH = 3;
public void onConcurrentPartialResult(final Object partialResults) {
//Saved in the global result list, for save at the end
if (partialResults instanceof FileSystemObject) {
- SearchActivity.this.mResultList.add((FileSystemObject)partialResults);
+ FileSystemObject fso = (FileSystemObject) partialResults;
+ if (mMimeTypeCategory == null || mMimeTypeCategory == MimeTypeHelper
+ .getCategory(SearchActivity.this, fso)) {
+ SearchActivity.this.mResultList.add((FileSystemObject) partialResults);
+ }
} else {
- SearchActivity.this.mResultList.addAll((List<FileSystemObject>)partialResults);
+ List<FileSystemObject> fsoList = (List<FileSystemObject>) partialResults;
+ for (FileSystemObject fso : fsoList) {
+ if (mMimeTypeCategory == null || mMimeTypeCategory == MimeTypeHelper
+ .getCategory(SearchActivity.this, fso)) {
+ SearchActivity.this.mResultList.add(fso);
+ }
+ }
}
//Notify progress
TextView mSearchTerms;
private View mEmptyListMsg;
+ /**
+ * @hide
+ */
+ Spinner mMimeTypeSpinner;
+
private String mSearchDirectory;
/**
* @hide
*/
boolean mChRooted;
+ /**
+ * @hide
+ */
+ MimeTypeCategory mMimeTypeCategory;
/**
* {@inheritDoc}
this.mSearchTerms = (TextView)findViewById(R.id.search_status_query_terms);
this.mSearchTerms.setText(
Html.fromHtml(getString(R.string.search_terms, ""))); //$NON-NLS-1$
+ this.mMimeTypeSpinner = (Spinner) findViewById(R.id.search_status_type_spinner);
}
/**
* Method that initializes the titlebar of the activity.
*/
private void initSearch() {
+ mMimeTypeCategory = (MimeTypeCategory) getIntent()
+ .getSerializableExtra(EXTRA_SEARCH_MIMETYPE);
//Stop any pending action
try {
if (SearchActivity.this.mDrawingSearchResultTask != null
this.mQuery = new Query().fillSlots(filteredUserQueries);
List<String> queries = this.mQuery.getQueries();
- //Check if some queries has lower than allowed, in this case
- //request the user for stop the search
boolean ask = false;
- int cc = queries.size();
- for (int i = 0; i < cc; i++) {
- if (queries.get(i).trim().length() < MIN_CHARS_SEARCH) {
- ask = true;
- break;
+ // Mime type search uses '*' which needs to bypass
+ // length check
+ if (mMimeTypeCategory == null) {
+ //Check if some queries has lower than allowed, in this case
+ //request the user for stop the search
+ int cc = queries.size();
+ for (int i = 0; i < cc; i++) {
+ if (queries.get(i).trim().length() < MIN_CHARS_SEARCH) {
+ ask = true;
+ break;
+ }
}
+ mMimeTypeSpinner.setVisibility(View.VISIBLE);
+ } else {
+ mMimeTypeSpinner.setVisibility(View.INVISIBLE);
}
if (ask) {
askUserBeforeSearch(voiceQuery, this.mQuery, this.mSearchDirectory);
this.mSearchListView.setAdapter(adapter);
//Set terms
- this.mSearchTerms.setText(
- Html.fromHtml(getString(R.string.search_terms, query.getTerms())));
+ if (mMimeTypeCategory == null) {
+ this.mSearchTerms.setText(
+ Html.fromHtml(getString(R.string.search_terms, query.getTerms())));
+ } else {
+ this.mSearchTerms.setText(
+ Html.fromHtml(getString(R.string.search_terms,
+ NavigationActivity.MIME_TYPE_LOCALIZED_NAMES[mMimeTypeCategory
+ .ordinal()])));
+ }
//Now, do the search in background
this.mSearchListView.post(new Runnable() {