diff --git a/app/src/main/java/com/stardust/scriptdroid/ui/main/MainActivity.java b/app/src/main/java/com/stardust/scriptdroid/ui/main/MainActivity.java index 8bf94647..9e93e12c 100644 --- a/app/src/main/java/com/stardust/scriptdroid/ui/main/MainActivity.java +++ b/app/src/main/java/com/stardust/scriptdroid/ui/main/MainActivity.java @@ -31,6 +31,7 @@ import com.stardust.scriptdroid.ui.common.ScriptOperations; import com.stardust.scriptdroid.ui.doc.DocsFragment_; import com.stardust.scriptdroid.ui.floating.FloatyWindowManger; import com.stardust.scriptdroid.storage.file.StorageFileProvider; +import com.stardust.scriptdroid.ui.main.community.CommunityFragment; import com.stardust.scriptdroid.ui.main.community.CommunityFragment_; import com.stardust.scriptdroid.ui.log.LogActivity_; import com.stardust.scriptdroid.ui.main.sample.SampleListFragment_; @@ -52,6 +53,7 @@ import org.androidannotations.annotations.Click; import org.androidannotations.annotations.EActivity; import org.androidannotations.annotations.ViewById; import org.greenrobot.eventbus.EventBus; +import org.greenrobot.eventbus.Subscribe; import java.util.Arrays; @@ -84,6 +86,7 @@ public class MainActivity extends BaseActivity implements OnActivityResultDelega checkPermissions(); mVersionGuard = new VersionGuard(this); showAnnunciationIfNeeded(); + EventBus.getDefault().register(this); } @AfterViews @@ -275,6 +278,11 @@ public class MainActivity extends BaseActivity implements OnActivityResultDelega return super.onOptionsItemSelected(item); } + @Subscribe + public void onLoadUrl(CommunityFragment.LoadUrl loadUrl) { + mDrawerLayout.closeDrawer(Gravity.START); + } + private void setUpSearchMenuItem(MenuItem searchMenuItem) { mSearchViewItem = new SearchViewItem(this, searchMenuItem) { @@ -316,5 +324,9 @@ public class MainActivity extends BaseActivity implements OnActivityResultDelega EventBus.getDefault().post(event); } - + @Override + protected void onDestroy() { + super.onDestroy(); + EventBus.getDefault().unregister(this); + } } \ No newline at end of file diff --git a/app/src/main/java/com/stardust/scriptdroid/ui/main/community/CommunityFragment.java b/app/src/main/java/com/stardust/scriptdroid/ui/main/community/CommunityFragment.java index 1bcff930..113bbbcd 100644 --- a/app/src/main/java/com/stardust/scriptdroid/ui/main/community/CommunityFragment.java +++ b/app/src/main/java/com/stardust/scriptdroid/ui/main/community/CommunityFragment.java @@ -7,6 +7,7 @@ import android.support.design.widget.FloatingActionButton; import android.webkit.WebView; import com.stardust.scriptdroid.R; +import com.stardust.scriptdroid.network.NodeBB; import com.stardust.scriptdroid.ui.main.QueryEvent; import com.stardust.scriptdroid.ui.main.ViewPagerFragment; import com.stardust.util.BackPressedHandler; @@ -25,6 +26,22 @@ import java.net.URLEncoder; @EFragment(R.layout.fragment_community) public class CommunityFragment extends ViewPagerFragment implements BackPressedHandler { + public static class LoadUrl { + public final String url; + + public LoadUrl(String url) { + this.url = url; + } + + } + + public static class VisibilityChange { + public final boolean visible; + + public VisibilityChange(boolean visible) { + this.visible = visible; + } + } private static final String POSTS_PAGE_PATTERN = "[\\S\\s]+/topic/[0-9]+/[\\S\\s]+"; @@ -93,6 +110,11 @@ public class CommunityFragment extends ViewPagerFragment implements BackPressedH } } + @Subscribe + public void loadUrl(LoadUrl loadUrl) { + mWebView.loadUrl(NodeBB.url(loadUrl.url)); + } + @Subscribe public void submitQuery(QueryEvent event) { if (!isShown() || event == QueryEvent.CLEAR) { @@ -114,4 +136,16 @@ public class CommunityFragment extends ViewPagerFragment implements BackPressedH super.onDestroy(); EventBus.getDefault().unregister(this); } + + @Override + public void onPageShow() { + super.onPageShow(); + EventBus.getDefault().post(new VisibilityChange(true)); + } + + @Override + public void onPageHide() { + super.onPageHide(); + EventBus.getDefault().post(new VisibilityChange(false)); + } } diff --git a/app/src/main/java/com/stardust/scriptdroid/ui/main/drawer/CommunityDrawerMenu.java b/app/src/main/java/com/stardust/scriptdroid/ui/main/drawer/CommunityDrawerMenu.java new file mode 100644 index 00000000..58c7df3e --- /dev/null +++ b/app/src/main/java/com/stardust/scriptdroid/ui/main/drawer/CommunityDrawerMenu.java @@ -0,0 +1,79 @@ +package com.stardust.scriptdroid.ui.main.drawer; + +import com.stardust.scriptdroid.R; +import com.stardust.scriptdroid.ui.main.community.CommunityFragment; + +import org.greenrobot.eventbus.EventBus; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + +/** + * Created by Stardust on 2017/12/10. + */ + +public class CommunityDrawerMenu { + + + private List mDrawerMenuItems = new ArrayList<>(Arrays.asList( + new DrawerMenuGroup(R.string.text_community), + new DrawerMenuItem(R.drawable.community_list, R.string.text_community_category, this::showCategories), + new DrawerMenuItem(R.drawable.community_inbox, R.string.text_community_unread, this::showUnread), + new DrawerMenuItem(R.drawable.community_time, R.string.text_community_recent, this::showRecent), + new DrawerMenuItem(R.drawable.community_fire, R.string.text_community_popular, this::showPopular), + new DrawerMenuItem(R.drawable.community_tags, R.string.text_community_tags, this::showTags) + )); + + private boolean mShown = false; + + public List getItems() { + return mDrawerMenuItems; + } + + public void showCommunityMenu(DrawerMenuAdapter adapter) { + List items = adapter.getDrawerMenuItems(); + if (items.get(0) == mDrawerMenuItems.get(0)) { + return; + } + items.addAll(0, mDrawerMenuItems); + adapter.notifyItemRangeInserted(0, mDrawerMenuItems.size()); + adapter.notifyItemChanged(mDrawerMenuItems.size()); + } + + public void hideCommunityMenu(DrawerMenuAdapter adapter) { + List items = adapter.getDrawerMenuItems(); + if (items.isEmpty() || items.get(0) != mDrawerMenuItems.get(0)) { + return; + } + items.subList(0, mDrawerMenuItems.size()).clear(); + adapter.notifyItemChanged(mDrawerMenuItems.size()); + adapter.notifyItemRangeRemoved(0, mDrawerMenuItems.size()); + } + + private void showCategories(DrawerMenuItemViewHolder holder) { + EventBus.getDefault().post(new CommunityFragment.LoadUrl("/categories")); + } + + private void showUnread(DrawerMenuItemViewHolder holder) { + EventBus.getDefault().post(new CommunityFragment.LoadUrl("/unread")); + + } + + private void showRecent(DrawerMenuItemViewHolder holder) { + EventBus.getDefault().post(new CommunityFragment.LoadUrl("/recent")); + + } + + private void showPopular(DrawerMenuItemViewHolder holder) { + EventBus.getDefault().post(new CommunityFragment.LoadUrl("/popular")); + + } + + private void showTags(DrawerMenuItemViewHolder holder) { + EventBus.getDefault().post(new CommunityFragment.LoadUrl("/tags")); + + } + + +} diff --git a/app/src/main/java/com/stardust/scriptdroid/ui/main/drawer/DrawerFragment.java b/app/src/main/java/com/stardust/scriptdroid/ui/main/drawer/DrawerFragment.java index 85ac3482..0e02456c 100644 --- a/app/src/main/java/com/stardust/scriptdroid/ui/main/drawer/DrawerFragment.java +++ b/app/src/main/java/com/stardust/scriptdroid/ui/main/drawer/DrawerFragment.java @@ -31,6 +31,7 @@ import com.stardust.scriptdroid.network.api.UserApi; import com.stardust.scriptdroid.network.entity.user.User; import com.stardust.scriptdroid.network.entity.VersionInfo; import com.stardust.scriptdroid.tool.SimpleObserver; +import com.stardust.scriptdroid.ui.main.community.CommunityFragment; import com.stardust.scriptdroid.ui.user.LoginActivity_; import com.stardust.scriptdroid.ui.settings.SettingsActivity; import com.stardust.scriptdroid.ui.update.UpdateInfoDialogBuilder; @@ -92,6 +93,7 @@ public class DrawerFragment extends android.support.v4.app.Fragment { private DrawerMenuAdapter mDrawerMenuAdapter; private Disposable mConnectionStateDisposable; + private CommunityDrawerMenu mCommunityDrawerMenu = new CommunityDrawerMenu(); @Override @@ -356,6 +358,16 @@ public class DrawerFragment extends android.support.v4.app.Fragment { setChecked(mFloatingWindowItem, event.getCurrentState() != CircularMenu.STATE_CLOSED); } + @Subscribe + public void onCommunityPageVisibilityChange(CommunityFragment.VisibilityChange change) { + if (change.visible) { + mCommunityDrawerMenu.showCommunityMenu(mDrawerMenuAdapter); + } else { + mCommunityDrawerMenu.hideCommunityMenu(mDrawerMenuAdapter); + } + mDrawerMenu.scrollToPosition(0); + } + @Override public void onDestroy() { diff --git a/app/src/main/java/com/stardust/scriptdroid/ui/main/drawer/DrawerMenuAdapter.java b/app/src/main/java/com/stardust/scriptdroid/ui/main/drawer/DrawerMenuAdapter.java index 7565736c..06ede40c 100644 --- a/app/src/main/java/com/stardust/scriptdroid/ui/main/drawer/DrawerMenuAdapter.java +++ b/app/src/main/java/com/stardust/scriptdroid/ui/main/drawer/DrawerMenuAdapter.java @@ -27,6 +27,10 @@ public class DrawerMenuAdapter extends RecyclerView.Adapter getDrawerMenuItems() { + return mDrawerMenuItems; + } + @Override public BindableViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { if (viewType == VIEW_TYPE_GROUP) { diff --git a/app/src/main/res/drawable-xhdpi/community_fire.png b/app/src/main/res/drawable-xhdpi/community_fire.png new file mode 100644 index 00000000..bf2e8614 Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/community_fire.png differ diff --git a/app/src/main/res/drawable-xhdpi/community_inbox.png b/app/src/main/res/drawable-xhdpi/community_inbox.png new file mode 100644 index 00000000..77472aa9 Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/community_inbox.png differ diff --git a/app/src/main/res/drawable-xhdpi/community_list.png b/app/src/main/res/drawable-xhdpi/community_list.png new file mode 100644 index 00000000..cb44b2b7 Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/community_list.png differ diff --git a/app/src/main/res/drawable-xhdpi/community_tags.png b/app/src/main/res/drawable-xhdpi/community_tags.png new file mode 100644 index 00000000..bc87b9e1 Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/community_tags.png differ diff --git a/app/src/main/res/drawable-xhdpi/community_time.png b/app/src/main/res/drawable-xhdpi/community_time.png new file mode 100644 index 00000000..12665df1 Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/community_time.png differ diff --git a/app/src/main/res/layout/activity_build.xml b/app/src/main/res/layout/activity_build.xml index 672b19f1..512b25ae 100644 --- a/app/src/main/res/layout/activity_build.xml +++ b/app/src/main/res/layout/activity_build.xml @@ -10,7 +10,7 @@ android:layout_height="wrap_content" android:theme="@style/AppTheme.AppBarOverlay"> - diff --git a/app/src/main/res/values/ids.xml b/app/src/main/res/values/ids.xml index 0678b2ab..518e7de3 100644 --- a/app/src/main/res/values/ids.xml +++ b/app/src/main/res/values/ids.xml @@ -7,4 +7,5 @@ + \ No newline at end of file diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index e760a10c..01a1fd67 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -327,4 +327,9 @@ 设备没有root 监测到您的设备没有root, 录制脚本需要root权限, 是否继续? 仍要录制 + 版块 + 未读 + 最新 + 热门 + 话题