add: search for scripts and posts

This commit is contained in:
hyb1996
2017-10-25 13:23:46 +08:00
parent 08d1188b33
commit cf82cd2802
40 changed files with 9572 additions and 36 deletions

View File

@@ -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);

View File

@@ -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));
}
}

View File

@@ -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;
}
}

View File

@@ -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;
}
}

View File

@@ -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);
}
}

View File

@@ -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) {

View File

@@ -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))
)

View 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);
}
}

View 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;
}
}