add: search for scripts and posts
This commit is contained in:
@@ -2,6 +2,7 @@ package com.stardust.scriptdroid.ui.doc;
|
||||
|
||||
import android.app.Activity;
|
||||
import android.content.Context;
|
||||
import android.os.Bundle;
|
||||
import android.support.design.widget.FloatingActionButton;
|
||||
import android.support.v4.app.Fragment;
|
||||
import android.support.v4.view.ViewPager;
|
||||
@@ -33,16 +34,19 @@ public class OnlineDocsFragment extends ViewPagerFragment implements BackPressed
|
||||
|
||||
public OnlineDocsFragment() {
|
||||
super(ROTATION_GONE);
|
||||
setArguments(new Bundle());
|
||||
}
|
||||
|
||||
@AfterViews
|
||||
void setUpViews() {
|
||||
mWebView = mEWebView.getWebView();
|
||||
String url = Pref.getDocumentationUrl() + "index.html";
|
||||
if (getArguments() != null) {
|
||||
url = getArguments().getString(ARGUMENT_URL, url);
|
||||
Bundle savedWebViewState = getArguments().getBundle("savedWebViewState");
|
||||
if (savedWebViewState != null) {
|
||||
mWebView.restoreState(savedWebViewState);
|
||||
} else {
|
||||
mWebView.loadUrl(getArguments().getString(ARGUMENT_URL, url));
|
||||
}
|
||||
mWebView.loadUrl(url);
|
||||
}
|
||||
|
||||
|
||||
@@ -57,6 +61,9 @@ public class OnlineDocsFragment extends ViewPagerFragment implements BackPressed
|
||||
@Override
|
||||
public void onPause() {
|
||||
super.onPause();
|
||||
Bundle savedWebViewState = new Bundle();
|
||||
mWebView.saveState(savedWebViewState);
|
||||
getArguments().putBundle("savedWebViewState", savedWebViewState);
|
||||
((BackPressedHandler.HostActivity) getActivity())
|
||||
.getBackPressedObserver()
|
||||
.unregisterHandler(this);
|
||||
|
||||
@@ -1,6 +1,8 @@
|
||||
package com.stardust.scriptdroid.ui.main;
|
||||
|
||||
import android.Manifest;
|
||||
import android.app.SearchManager;
|
||||
import android.content.Context;
|
||||
import android.content.Intent;
|
||||
import android.content.pm.PackageManager;
|
||||
import android.os.Build;
|
||||
@@ -10,17 +12,22 @@ import android.support.annotation.RequiresApi;
|
||||
import android.support.design.widget.FloatingActionButton;
|
||||
import android.support.design.widget.TabLayout;
|
||||
import android.support.v4.app.Fragment;
|
||||
import android.support.v4.view.MenuItemCompat;
|
||||
import android.support.v4.view.ViewPager;
|
||||
import android.support.v4.widget.DrawerLayout;
|
||||
import android.support.v7.app.ActionBarDrawerToggle;
|
||||
import android.support.v7.widget.SearchView;
|
||||
import android.support.v7.widget.Toolbar;
|
||||
import android.view.Gravity;
|
||||
import android.view.Menu;
|
||||
import android.view.MenuItem;
|
||||
import android.view.View;
|
||||
|
||||
import com.qq.e.comm.DownloadService;
|
||||
import com.stardust.app.FragmentPagerAdapterBuilder;
|
||||
import com.stardust.app.OnActivityResultDelegate;
|
||||
import com.stardust.enhancedfloaty.FloatyService;
|
||||
import com.stardust.pio.PFile;
|
||||
import com.stardust.pio.PFiles;
|
||||
import com.stardust.scriptdroid.BuildConfig;
|
||||
import com.stardust.scriptdroid.Pref;
|
||||
@@ -43,11 +50,13 @@ import com.stardust.scriptdroid.ui.update.VersionGuard;
|
||||
import com.stardust.util.BackPressedHandler;
|
||||
import com.stardust.view.DrawerAutoClose;
|
||||
import com.stardust.widget.CommonMarkdownView;
|
||||
import com.stardust.widget.SearchViewItem;
|
||||
|
||||
import org.androidannotations.annotations.AfterViews;
|
||||
import org.androidannotations.annotations.Click;
|
||||
import org.androidannotations.annotations.EActivity;
|
||||
import org.androidannotations.annotations.ViewById;
|
||||
import org.greenrobot.eventbus.EventBus;
|
||||
|
||||
import java.util.Arrays;
|
||||
|
||||
@@ -233,7 +242,6 @@ public class MainActivity extends BaseActivity implements OnActivityResultDelega
|
||||
return mActivityResultMediator;
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public void onBackPressed() {
|
||||
if (!mBackPressObserver.onBackPressed(this)) {
|
||||
@@ -246,4 +254,25 @@ public class MainActivity extends BaseActivity implements OnActivityResultDelega
|
||||
return mBackPressObserver;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean onCreateOptionsMenu(Menu menu) {
|
||||
getMenuInflater().inflate(R.menu.menu_main, menu);
|
||||
MenuItem searchMenuItem = menu.findItem(R.id.action_search);
|
||||
setUpSearchMenuItem(searchMenuItem);
|
||||
return true;
|
||||
}
|
||||
|
||||
private void setUpSearchMenuItem(MenuItem searchMenuItem) {
|
||||
SearchViewItem searchViewItem = new SearchViewItem(this, searchMenuItem);
|
||||
searchViewItem.setQueryCallback(this::submitQuery);
|
||||
}
|
||||
|
||||
private void submitQuery(String query) {
|
||||
if (query == null) {
|
||||
EventBus.getDefault().post(QueryEvent.CLEAR);
|
||||
return;
|
||||
}
|
||||
EventBus.getDefault().post(new QueryEvent(query));
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,20 @@
|
||||
package com.stardust.scriptdroid.ui.main;
|
||||
|
||||
/**
|
||||
* Created by Stardust on 2017/10/25.
|
||||
*/
|
||||
|
||||
public class QueryEvent {
|
||||
|
||||
public static final QueryEvent CLEAR = new QueryEvent(null);
|
||||
|
||||
private final String mQuery;
|
||||
|
||||
public QueryEvent(String query) {
|
||||
mQuery = query;
|
||||
}
|
||||
|
||||
public String getQuery() {
|
||||
return mQuery;
|
||||
}
|
||||
}
|
||||
@@ -1,5 +1,6 @@
|
||||
package com.stardust.scriptdroid.ui.main;
|
||||
|
||||
import android.support.annotation.CallSuper;
|
||||
import android.support.design.widget.FloatingActionButton;
|
||||
import android.support.v4.app.Fragment;
|
||||
import android.support.v4.view.animation.FastOutSlowInInterpolator;
|
||||
@@ -15,12 +16,8 @@ public abstract class ViewPagerFragment extends Fragment {
|
||||
|
||||
private int mFabRotation;
|
||||
private FloatingActionButton mFab;
|
||||
private View.OnClickListener mOnFabClickListener = new View.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(View v) {
|
||||
onFabClick((FloatingActionButton) v);
|
||||
}
|
||||
};
|
||||
private boolean mShown;
|
||||
private View.OnClickListener mOnFabClickListener = v -> onFabClick((FloatingActionButton) v);
|
||||
|
||||
public ViewPagerFragment(int fabRotation) {
|
||||
mFabRotation = fabRotation;
|
||||
@@ -32,7 +29,9 @@ public abstract class ViewPagerFragment extends Fragment {
|
||||
|
||||
protected abstract void onFabClick(FloatingActionButton fab);
|
||||
|
||||
@CallSuper
|
||||
public void onPageShow() {
|
||||
mShown = true;
|
||||
if (mFabRotation == ROTATION_GONE) {
|
||||
if (mFab.getVisibility() == View.VISIBLE) {
|
||||
mFab.hide();
|
||||
@@ -54,7 +53,12 @@ public abstract class ViewPagerFragment extends Fragment {
|
||||
}
|
||||
|
||||
|
||||
@CallSuper
|
||||
public void onPageHide() {
|
||||
mShown = false;
|
||||
}
|
||||
|
||||
public boolean isShown() {
|
||||
return mShown;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,10 +1,14 @@
|
||||
package com.stardust.scriptdroid.ui.main.community;
|
||||
|
||||
import android.app.Activity;
|
||||
import android.os.Bundle;
|
||||
import android.support.annotation.Nullable;
|
||||
import android.support.design.widget.FloatingActionButton;
|
||||
import android.webkit.WebView;
|
||||
|
||||
import com.stardust.scriptdroid.Pref;
|
||||
import com.stardust.scriptdroid.R;
|
||||
import com.stardust.scriptdroid.ui.main.QueryEvent;
|
||||
import com.stardust.scriptdroid.ui.main.ViewPagerFragment;
|
||||
import com.stardust.util.BackPressedHandler;
|
||||
import com.stardust.widget.EWebView;
|
||||
@@ -12,7 +16,10 @@ import com.stardust.widget.EWebView;
|
||||
import org.androidannotations.annotations.AfterViews;
|
||||
import org.androidannotations.annotations.EFragment;
|
||||
import org.androidannotations.annotations.ViewById;
|
||||
import org.greenrobot.eventbus.EventBus;
|
||||
import org.greenrobot.eventbus.Subscribe;
|
||||
|
||||
import java.net.URLEncoder;
|
||||
import java.util.regex.Pattern;
|
||||
|
||||
/**
|
||||
@@ -30,12 +37,25 @@ public class CommunityFragment extends ViewPagerFragment implements BackPressedH
|
||||
|
||||
public CommunityFragment() {
|
||||
super(0);
|
||||
setArguments(new Bundle());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onCreate(@Nullable Bundle savedInstanceState) {
|
||||
super.onCreate(savedInstanceState);
|
||||
EventBus.getDefault().register(this);
|
||||
}
|
||||
|
||||
@AfterViews
|
||||
void setUpViews() {
|
||||
mWebView = mEWebView.getWebView();
|
||||
mWebView.loadUrl("http://www.autojs.org/");
|
||||
String url = "http://www.autojs.org/";
|
||||
Bundle savedWebViewState = getArguments().getBundle("savedWebViewState");
|
||||
if (savedWebViewState != null) {
|
||||
mWebView.restoreState(savedWebViewState);
|
||||
} else {
|
||||
mWebView.loadUrl(url);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -49,6 +69,9 @@ public class CommunityFragment extends ViewPagerFragment implements BackPressedH
|
||||
@Override
|
||||
public void onPause() {
|
||||
super.onPause();
|
||||
Bundle savedWebViewState = new Bundle();
|
||||
mWebView.saveState(savedWebViewState);
|
||||
getArguments().putBundle("savedWebViewState", savedWebViewState);
|
||||
((BackPressedHandler.HostActivity) getActivity())
|
||||
.getBackPressedObserver()
|
||||
.unregisterHandler(this);
|
||||
@@ -73,8 +96,24 @@ public class CommunityFragment extends ViewPagerFragment implements BackPressedH
|
||||
}
|
||||
}
|
||||
|
||||
@Subscribe
|
||||
public void submitQuery(QueryEvent event) {
|
||||
if (!isShown() || event == QueryEvent.CLEAR) {
|
||||
return;
|
||||
}
|
||||
String query = URLEncoder.encode(event.getQuery());
|
||||
String url = String.format("http://www.autojs.org/search?term=%s&in=titlesposts", query);
|
||||
mWebView.loadUrl(url);
|
||||
}
|
||||
|
||||
private boolean isInPostsPage() {
|
||||
String url = mWebView.getUrl();
|
||||
return url.matches(POSTS_PAGE_PATTERN);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onDestroy() {
|
||||
super.onDestroy();
|
||||
EventBus.getDefault().unregister(this);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,6 +1,8 @@
|
||||
package com.stardust.scriptdroid.ui.main.scripts;
|
||||
|
||||
import android.app.Activity;
|
||||
import android.os.Bundle;
|
||||
import android.support.annotation.Nullable;
|
||||
import android.support.design.widget.FloatingActionButton;
|
||||
import android.view.View;
|
||||
|
||||
@@ -11,12 +13,15 @@ import com.stardust.scriptdroid.io.StorageFileProvider;
|
||||
import com.stardust.scriptdroid.tool.SimpleObserver;
|
||||
import com.stardust.scriptdroid.ui.common.ScriptOperations;
|
||||
import com.stardust.scriptdroid.ui.main.FloatingActionMenu;
|
||||
import com.stardust.scriptdroid.ui.main.QueryEvent;
|
||||
import com.stardust.scriptdroid.ui.main.ViewPagerFragment;
|
||||
import com.stardust.util.BackPressedHandler;
|
||||
|
||||
import org.androidannotations.annotations.AfterViews;
|
||||
import org.androidannotations.annotations.EFragment;
|
||||
import org.androidannotations.annotations.ViewById;
|
||||
import org.greenrobot.eventbus.EventBus;
|
||||
import org.greenrobot.eventbus.Subscribe;
|
||||
|
||||
import io.reactivex.android.schedulers.AndroidSchedulers;
|
||||
|
||||
@@ -37,15 +42,17 @@ public class MyScriptListFragment extends ViewPagerFragment implements BackPress
|
||||
|
||||
private FloatingActionMenu mFloatingActionMenu;
|
||||
|
||||
@Override
|
||||
public void onCreate(@Nullable Bundle savedInstanceState) {
|
||||
super.onCreate(savedInstanceState);
|
||||
EventBus.getDefault().register(this);
|
||||
}
|
||||
|
||||
@AfterViews
|
||||
void setUpViews() {
|
||||
mScriptFileList.setStorageFileProvider(StorageFileProvider.getDefault());
|
||||
mScriptFileList.setOnScriptFileClickListener(new ScriptListView.OnScriptFileClickListener() {
|
||||
@Override
|
||||
public void onScriptFileClick(View view, ScriptFile file) {
|
||||
Scripts.edit(file);
|
||||
//EditorFloaty.floatingEdit(getContext(), file);
|
||||
}
|
||||
mScriptFileList.setOnScriptFileClickListener((view, file) -> {
|
||||
Scripts.edit(file);
|
||||
});
|
||||
}
|
||||
|
||||
@@ -109,11 +116,25 @@ public class MyScriptListFragment extends ViewPagerFragment implements BackPress
|
||||
|
||||
@Override
|
||||
public void onPageHide() {
|
||||
super.onPageHide();
|
||||
if (mFloatingActionMenu != null && mFloatingActionMenu.isExpanded()) {
|
||||
mFloatingActionMenu.collapse();
|
||||
}
|
||||
}
|
||||
|
||||
@Subscribe
|
||||
public void onQuerySummit(QueryEvent event) {
|
||||
if (!isShown()) {
|
||||
return;
|
||||
}
|
||||
if (event == QueryEvent.CLEAR) {
|
||||
mScriptFileList.setFilter(null);
|
||||
return;
|
||||
}
|
||||
String query = event.getQuery();
|
||||
mScriptFileList.setFilter((file -> file.getSimplifiedName().contains(query)));
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onDetach() {
|
||||
super.onDetach();
|
||||
@@ -121,6 +142,12 @@ public class MyScriptListFragment extends ViewPagerFragment implements BackPress
|
||||
mFloatingActionMenu.setOnFloatingActionButtonClickListener(null);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onDestroy() {
|
||||
super.onDestroy();
|
||||
EventBus.getDefault().unregister(this);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onClick(FloatingActionButton button, int pos) {
|
||||
switch (pos) {
|
||||
|
||||
@@ -17,6 +17,7 @@ import android.widget.ImageView;
|
||||
import android.widget.PopupMenu;
|
||||
import android.widget.TextView;
|
||||
|
||||
import com.stardust.pio.PFile;
|
||||
import com.stardust.pio.PFiles;
|
||||
import com.stardust.scriptdroid.R;
|
||||
import com.stardust.scriptdroid.model.script.ScriptFile;
|
||||
@@ -34,6 +35,7 @@ import butterknife.ButterKnife;
|
||||
import butterknife.OnClick;
|
||||
import io.reactivex.Observable;
|
||||
import io.reactivex.android.schedulers.AndroidSchedulers;
|
||||
import io.reactivex.functions.Function;
|
||||
import io.reactivex.schedulers.Schedulers;
|
||||
|
||||
/**
|
||||
@@ -64,6 +66,7 @@ public class ScriptListView extends SwipeRefreshLayout implements SwipeRefreshLa
|
||||
private ScriptListAdapter mScriptListAdapter = new ScriptListAdapter();
|
||||
private ScriptFile mCurrentDirectory;
|
||||
private OnScriptFileClickListener mOnScriptFileClickListener;
|
||||
private Function<PFile, Boolean> mFilter;
|
||||
private OnItemOperatedListener mOnItemOperatedListener;
|
||||
private ScriptFile mSelectedScriptFile;
|
||||
private StorageFileProvider mStorageFileProvider;
|
||||
@@ -126,6 +129,15 @@ public class ScriptListView extends SwipeRefreshLayout implements SwipeRefreshLa
|
||||
mDirectorySpanSize = directorySpanSize;
|
||||
}
|
||||
|
||||
public void setFilter(Function<PFile, Boolean> filter) {
|
||||
mFilter = filter;
|
||||
reload();
|
||||
}
|
||||
|
||||
public void reload() {
|
||||
loadScriptList();
|
||||
}
|
||||
|
||||
private void init() {
|
||||
setOnRefreshListener(this);
|
||||
mScriptListView = new RecyclerView(getContext());
|
||||
@@ -160,6 +172,7 @@ public class ScriptListView extends SwipeRefreshLayout implements SwipeRefreshLa
|
||||
setRefreshing(true);
|
||||
mStorageFileProvider.getDirectoryFiles(mCurrentDirectory)
|
||||
.subscribeOn(Schedulers.io())
|
||||
.filter(f -> mFilter == null ? true : mFilter.apply(f))
|
||||
.collectInto(mScriptList.cloneConfig(), (list, file) ->
|
||||
list.add(new ScriptFile(file))
|
||||
)
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
package com.stardust.scriptdroid.ui.main.task;
|
||||
|
||||
import android.os.Bundle;
|
||||
import android.support.design.widget.FloatingActionButton;
|
||||
import android.support.v4.widget.SwipeRefreshLayout;
|
||||
import android.view.MenuItem;
|
||||
@@ -50,6 +51,7 @@ public class TaskManagerFragment extends ViewPagerFragment implements PopupMenu.
|
||||
|
||||
public TaskManagerFragment() {
|
||||
super(45);
|
||||
setArguments(new Bundle());
|
||||
}
|
||||
|
||||
|
||||
@@ -60,6 +62,9 @@ public class TaskManagerFragment extends ViewPagerFragment implements PopupMenu.
|
||||
mNoRunningScriptNotice.setVisibility(noRunningScript ? View.VISIBLE : View.GONE);
|
||||
mStardustConsole = (StardustConsole) AutoJs.getInstance().getGlobalConsole();
|
||||
mConsoleView.setConsole(mStardustConsole);
|
||||
if (getArguments().getBoolean("console_shown", false)) {
|
||||
showLog();
|
||||
}
|
||||
}
|
||||
|
||||
private void init() {
|
||||
@@ -104,6 +109,7 @@ public class TaskManagerFragment extends ViewPagerFragment implements PopupMenu.
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
private void showLog() {
|
||||
mTaskManagerView.setVisibility(View.GONE);
|
||||
mConsoleView.setVisibility(View.VISIBLE);
|
||||
@@ -125,4 +131,10 @@ public class TaskManagerFragment extends ViewPagerFragment implements PopupMenu.
|
||||
AutoJs.getInstance().getScriptEngineService().stopAll();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onPause() {
|
||||
super.onPause();
|
||||
getArguments().putBoolean("console_shown", mConsoleView.getVisibility() == View.VISIBLE);
|
||||
}
|
||||
}
|
||||
|
||||
72
app/src/main/java/com/stardust/widget/SearchViewItem.java
Normal file
72
app/src/main/java/com/stardust/widget/SearchViewItem.java
Normal file
@@ -0,0 +1,72 @@
|
||||
package com.stardust.widget;
|
||||
|
||||
import android.app.Activity;
|
||||
import android.app.SearchManager;
|
||||
import android.content.Context;
|
||||
import android.support.v4.view.MenuItemCompat;
|
||||
import android.support.v7.widget.SearchView;
|
||||
import android.view.MenuItem;
|
||||
|
||||
import com.stardust.scriptdroid.ui.main.MainActivity;
|
||||
|
||||
/**
|
||||
* Created by Stardust on 2017/10/25.
|
||||
*/
|
||||
|
||||
public class SearchViewItem implements MenuItemCompat.OnActionExpandListener, SearchView.OnQueryTextListener {
|
||||
|
||||
public interface QueryCallback {
|
||||
void summitQuery(String query);
|
||||
}
|
||||
|
||||
private QueryCallback mQueryCallback;
|
||||
private MenuItem mSearchMenuItem;
|
||||
|
||||
public SearchViewItem(Activity activity, MenuItem searchMenuItem) {
|
||||
mSearchMenuItem = searchMenuItem;
|
||||
SearchManager searchManager = (SearchManager) activity.getSystemService(Context.SEARCH_SERVICE);
|
||||
SearchView searchView = (SearchView) searchMenuItem.getActionView();
|
||||
if (searchView == null) {
|
||||
return;
|
||||
}
|
||||
searchView.setSearchableInfo(searchManager.getSearchableInfo(activity.getComponentName()));
|
||||
MenuItemCompat.setOnActionExpandListener(searchMenuItem, this);
|
||||
searchView.setOnQueryTextListener(this);
|
||||
}
|
||||
|
||||
public void setQueryCallback(QueryCallback queryCallback) {
|
||||
mQueryCallback = queryCallback;
|
||||
}
|
||||
|
||||
public void setVisible(boolean visible) {
|
||||
mSearchMenuItem.setVisible(visible);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean onMenuItemActionExpand(MenuItem item) {
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean onMenuItemActionCollapse(MenuItem item) {
|
||||
if (mQueryCallback == null) {
|
||||
return true;
|
||||
}
|
||||
mQueryCallback.summitQuery(null);
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean onQueryTextSubmit(String query) {
|
||||
if (mQueryCallback == null) {
|
||||
return true;
|
||||
}
|
||||
mQueryCallback.summitQuery(query);
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean onQueryTextChange(String newText) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user