You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
CustoMIUIzer/app/src/main/java/name/mikanoshi/customiuizer/SubFragmentWithSearch.java

162 lines
5.1 KiB
Java

package name.mikanoshi.customiuizer;
import android.annotation.SuppressLint;
import android.graphics.drawable.ColorDrawable;
import android.os.Bundle;
import android.text.Editable;
import android.text.TextWatcher;
import android.view.ActionMode;
import android.view.KeyEvent;
import android.view.Menu;
import android.view.MenuItem;
import android.view.MotionEvent;
import android.view.View;
import android.widget.LinearLayout;
import android.widget.ListAdapter;
import android.widget.ListView;
import android.widget.TextView;
import miui.view.SearchActionMode;
import name.mikanoshi.customiuizer.utils.AppDataAdapter;
import name.mikanoshi.customiuizer.utils.Helpers;
import name.mikanoshi.customiuizer.utils.LockedAppAdapter;
import name.mikanoshi.customiuizer.utils.PrivacyAppAdapter;
import name.mikanoshi.customiuizer.utils.ResolveInfoAdapter;
public class SubFragmentWithSearch extends SubFragment {
public ListView listView = null;
View searchView = null;
LinearLayout search = null;
ActionMode actionMode = null;
boolean isSearchFocused = false;
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
getActionBar().setBackgroundDrawable(new ColorDrawable(Helpers.getSystemBackgroundColor(getValidContext())));
if (getView() == null) return;
SearchActionMode.Callback actionModeCallback = new SearchActionMode.Callback() {
@Override
public boolean onCreateActionMode(ActionMode mode, Menu menu) {
if (searchView == null || listView == null) {
if (mode != null) mode.finish();
return false;
}
SearchActionMode samode = (SearchActionMode)mode;
samode.setAnchorView(searchView);
samode.setAnimateView(listView);
samode.getSearchInput().setOnFocusChangeListener(new View.OnFocusChangeListener() {
@Override
public void onFocusChange(View v, boolean hasFocus) {
isSearchFocused = hasFocus;
}
});
samode.getSearchInput().setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
isSearchFocused = v.hasFocus();
}
});
samode.getSearchInput().setOnEditorActionListener(new TextView.OnEditorActionListener() {
@Override
public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
if (event != null && event.getKeyCode() == KeyEvent.KEYCODE_ENTER) {
Helpers.hideKeyboard(getActivity(), v);
listView.requestFocus();
return true;
}
return false;
}
});
samode.getSearchInput().addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {}
@Override
public void afterTextChanged(Editable s) {
applyFilter(s.toString().trim());
}
});
return true;
}
@Override
public boolean onPrepareActionMode(ActionMode mode, Menu menu) {
if (searchView == null || listView == null) {
if (mode != null) mode.finish();
return false;
}
SearchActionMode samode = (SearchActionMode)mode;
samode.setAnchorView(searchView);
samode.setAnimateView(listView);
return true;
}
@Override
public boolean onActionItemClicked(ActionMode mode, MenuItem item) {
return true;
}
@Override
public void onDestroyActionMode(ActionMode mode) {
TextView input = search == null ? null : search.findViewById(android.R.id.input);
if (input != null) input.setText("");
applyFilter("");
getActionBar().show();
actionMode = null;
}
};
searchView = getView().findViewById(R.id.searchView);
setActionModeStyle(searchView);
search = searchView.findViewById(android.R.id.inputArea);
search.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
actionMode = startActionMode(actionModeCallback);
hideSplitView();
}
});
listView = getView().findViewById(android.R.id.list);
listView.setOnTouchListener(new View.OnTouchListener() {
@Override
@SuppressLint("ClickableViewAccessibility")
public boolean onTouch(View v, MotionEvent event) {
if (actionMode != null && isSearchFocused) {
isSearchFocused = false;
Helpers.hideKeyboard(getActivity(), v);
}
return false;
}
});
if (actionMode != null) actionMode.invalidate();
}
void applyFilter(String filter) {
if (listView == null) return;
ListAdapter adapter = listView.getAdapter();
if (adapter == null) return;
if (adapter instanceof AppDataAdapter)
((AppDataAdapter)listView.getAdapter()).getFilter().filter(filter);
else if (adapter instanceof PrivacyAppAdapter)
((PrivacyAppAdapter)listView.getAdapter()).getFilter().filter(filter);
else if (adapter instanceof LockedAppAdapter)
((LockedAppAdapter)listView.getAdapter()).getFilter().filter(filter);
else if (adapter instanceof ResolveInfoAdapter)
((ResolveInfoAdapter)listView.getAdapter()).getFilter().filter(filter);
}
}