Work on a new approach

This commit is contained in:
Mario Danic 2017-02-14 18:33:19 +01:00 committed by AndyScherzinger
parent ba0dace51f
commit 6a510d96c0
No known key found for this signature in database
GPG key ID: 6CADC7E3523C308B
4 changed files with 71 additions and 11 deletions

View file

@ -25,7 +25,7 @@
android:title="@string/actionbar_search"
android:contentDescription="@string/actionbar_search"
app:actionViewClass="android.support.v7.widget.SearchView"
app:showAsAction="ifRoom|collapseActionView"/>
app:showAsAction="always"/>
<item
android:id="@+id/action_create_dir"
android:icon="@drawable/ic_action_create_dir"

View file

@ -46,7 +46,10 @@ import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentTransaction;
import android.support.v4.content.ContextCompat;
import android.support.v4.view.MenuItemCompat;
import android.support.v7.app.AlertDialog;
import android.support.v7.widget.SearchView;
import android.text.TextUtils;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
@ -94,6 +97,7 @@ import java.io.File;
import java.util.ArrayList;
import java.util.Collection;
import static com.owncloud.android.R.id.searchView;
import static com.owncloud.android.db.PreferenceManager.getSortOrder;
/**
@ -116,6 +120,7 @@ public class FileDisplayActivity extends HookActivity
private static final String KEY_WAITING_TO_PREVIEW = "WAITING_TO_PREVIEW";
private static final String KEY_SYNC_IN_PROGRESS = "SYNC_IN_PROGRESS";
private static final String KEY_WAITING_TO_SEND = "WAITING_TO_SEND";
private static final String KEY_SEARCH_QUERY = "KEY_SEARCH_QUERY";
public static final String ACTION_DETAILS = "com.owncloud.android.ui.activity.action.DETAILS";
@ -138,7 +143,9 @@ public class FileDisplayActivity extends HookActivity
private OCFile mWaitingToSend;
private Collection<MenuItem> mDrawerMenuItemstoShowHideList;
private String searchQuery;
private SearchView searchView;
@Override
protected void onCreate(Bundle savedInstanceState) {
@ -160,6 +167,7 @@ public class FileDisplayActivity extends HookActivity
mSyncInProgress = savedInstanceState.getBoolean(KEY_SYNC_IN_PROGRESS);
mWaitingToSend = (OCFile) savedInstanceState.getParcelable(
FileDisplayActivity.KEY_WAITING_TO_SEND);
searchQuery = savedInstanceState.getString(KEY_SEARCH_QUERY);
} else {
mWaitingToPreview = null;
mSyncInProgress = false;
@ -394,7 +402,7 @@ public class FileDisplayActivity extends HookActivity
if (getAccount() != null && getFile() != null) {
/// First fragment
OCFileListFragment listOfFiles = getListOfFilesFragment();
if (listOfFiles != null) {
if (listOfFiles != null && TextUtils.isEmpty(searchQuery)) {
listOfFiles.listDirectory(getCurrentDir(), MainApp.isOnlyOnDevice());
} else {
Log_OC.e(TAG, "Still have a chance to lose the initializacion of list fragment >(");
@ -590,6 +598,9 @@ public class FileDisplayActivity extends HookActivity
inflater.inflate(R.menu.main_menu, menu);
menu.findItem(R.id.action_create_dir).setVisible(false);
final MenuItem item = menu.findItem(R.id.action_search);
searchView = (SearchView) MenuItemCompat.getActionView(item);
// populate list of menu items to show/hide when drawer is opened/closed
mDrawerMenuItemstoShowHideList = new ArrayList<>(4);
mDrawerMenuItemstoShowHideList.add(menu.findItem(R.id.action_sort));
@ -597,6 +608,18 @@ public class FileDisplayActivity extends HookActivity
mDrawerMenuItemstoShowHideList.add(menu.findItem(R.id.action_switch_view));
mDrawerMenuItemstoShowHideList.add(menu.findItem(R.id.action_search));
//focus the SearchView
if (!TextUtils.isEmpty(searchQuery)) {
searchView.post(new Runnable() {
@Override
public void run() {
searchView.setIconified(false);
searchView.setQuery(searchQuery, false);
searchView.clearFocus();
}
});
}
return true;
}
@ -910,7 +933,9 @@ public class FileDisplayActivity extends HookActivity
//outState.putBoolean(FileDisplayActivity.KEY_REFRESH_SHARES_IN_PROGRESS,
// mRefreshSharesInProgress);
outState.putParcelable(FileDisplayActivity.KEY_WAITING_TO_SEND, mWaitingToSend);
if (searchView != null) {
outState.putString(KEY_SEARCH_QUERY, searchView.getQuery().toString());
}
Log_OC.v(TAG, "onSaveInstanceState() end");
}

View file

@ -53,6 +53,8 @@ import com.owncloud.android.utils.FileStorageUtils;
import com.owncloud.android.utils.MimeTypeUtil;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.Set;
import java.util.Vector;
@ -455,20 +457,24 @@ public class FileListListAdapter extends BaseAdapter implements FilterableListAd
}
public void filter(String text){
mFiles = new Vector<>();
Set<OCFile> unique = new HashSet<>();
unique.addAll(mFilesAll);
if(text.isEmpty()){
mFiles.clear();
mFiles.addAll(mFilesAll);
mFiles.addAll(unique);
} else {
ArrayList<OCFile> result = new ArrayList<>();
text = text.toLowerCase();
for(OCFile file: mFilesAll){
for(OCFile file: unique){
if(file.getFileName().toLowerCase().contains(text)){
result.add(file);
}
}
mFiles.clear();
mFiles.addAll(result);
}
mFiles = FileStorageUtils.sortOcFolder(mFiles);
notifyDataSetChanged();
}
@ -483,7 +489,7 @@ public class FileListListAdapter extends BaseAdapter implements FilterableListAd
OCFile current;
for (int i = 0; i < files.size(); i++) {
current = files.get(i);
if (!current.isHidden()) {
if (!current.isHidden() && !ret.contains(current)) {
ret.add(current);
}
}

View file

@ -21,6 +21,7 @@
package com.owncloud.android.ui.fragment;
import android.os.Bundle;
import android.os.Handler;
import android.support.annotation.DrawableRes;
import android.support.annotation.StringRes;
import android.support.v4.app.Fragment;
@ -54,6 +55,8 @@ import java.util.ArrayList;
import third_parties.in.srain.cube.GridViewWithHeaderAndFooter;
import static com.owncloud.android.R.id.searchView;
public class ExtendedListFragment extends Fragment
implements OnItemClickListener, OnEnforceableRefreshListener, SearchView.OnQueryTextListener {
@ -98,6 +101,10 @@ public class ExtendedListFragment extends Fragment
private FilterableListAdapter mAdapter;
private SearchView searchView;
private String searchQuery;
private Handler handler = new Handler();
protected void setListAdapter(FilterableListAdapter listAdapter) {
mAdapter = listAdapter;
mCurrentListView.setAdapter(listAdapter);
@ -151,17 +158,37 @@ public class ExtendedListFragment extends Fragment
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
final MenuItem item = menu.findItem(R.id.action_search);
final SearchView searchView = (SearchView) MenuItemCompat.getActionView(item);
searchView = (SearchView) MenuItemCompat.getActionView(item);
searchView.setOnQueryTextListener(this);
searchView.setMaxWidth(Integer.MAX_VALUE);
searchView.setOnQueryTextFocusChangeListener(new View.OnFocusChangeListener() {
@Override
public void onFocusChange(View v, boolean hasFocus) {
if (hasFocus) {
mFabMain.collapse();
}
setFabEnabled(!hasFocus);
}
});
}
public boolean onQueryTextChange(String query) {
public boolean onQueryTextChange(final String query) {
handler.removeCallbacksAndMessages(null);
handler.postDelayed(new Runnable() {
@Override
public void run() {
searchQuery = query;
mAdapter.filter(query);
}
}, 500);
return true;
}
@Override
public boolean onQueryTextSubmit(String query) {
searchQuery = query;
mAdapter.filter(query);
return true;
}
@ -203,6 +230,8 @@ public class ExtendedListFragment extends Fragment
mCurrentListView = mListView; // list by default
if (savedInstanceState != null) {
if (savedInstanceState.getBoolean(KEY_IS_GRID_VISIBLE, false)) {
switchToGridView();
}