From fec93a06608293e6ad3b645833e5f6b7ffdca2b9 Mon Sep 17 00:00:00 2001 From: vanitasvitae Date: Fri, 30 Sep 2016 23:15:10 +0200 Subject: [PATCH] Added HashtagFragment --- .../activity/MainActivity.java | 18 ++- .../fragment/HashtagListFragment.java | 125 ++++++++++++++++++ .../res/layout/hashtag_list__fragment.xml | 27 ++++ app/src/main/res/layout/main__app_bar.xml | 2 +- .../res/layout/recycler_view__list_item.xml | 23 ++++ app/src/main/res/values/dimens.xml | 1 + 6 files changed, 189 insertions(+), 7 deletions(-) create mode 100644 app/src/main/java/com/github/dfa/diaspora_android/fragment/HashtagListFragment.java create mode 100644 app/src/main/res/layout/hashtag_list__fragment.xml create mode 100644 app/src/main/res/layout/recycler_view__list_item.xml diff --git a/app/src/main/java/com/github/dfa/diaspora_android/activity/MainActivity.java b/app/src/main/java/com/github/dfa/diaspora_android/activity/MainActivity.java index e9f12bfd..ab4b4035 100644 --- a/app/src/main/java/com/github/dfa/diaspora_android/activity/MainActivity.java +++ b/app/src/main/java/com/github/dfa/diaspora_android/activity/MainActivity.java @@ -65,6 +65,7 @@ import com.github.dfa.diaspora_android.data.PodUserProfile; import com.github.dfa.diaspora_android.fragment.BrowserFragment; import com.github.dfa.diaspora_android.fragment.CustomFragment; import com.github.dfa.diaspora_android.fragment.DiasporaStreamFragment; +import com.github.dfa.diaspora_android.fragment.HashtagListFragment; import com.github.dfa.diaspora_android.fragment.TestFragment; import com.github.dfa.diaspora_android.listener.WebUserProfileChangedListener; import com.github.dfa.diaspora_android.receiver.OpenExternalLinkReceiver; @@ -228,7 +229,7 @@ public class MainActivity extends AppCompatActivity * Show DiasporaStreamFragment if necessary and load URL url * @param url URL to load in the DiasporaStreamFragment */ - protected void openDiasporaUrl(String url) { + public void openDiasporaUrl(String url) { AppLog.v(this, "openDiasporaUrl()"); DiasporaStreamFragment streamFragment = (DiasporaStreamFragment) getFragment(DiasporaStreamFragment.TAG); showFragment(streamFragment); @@ -256,14 +257,17 @@ public class MainActivity extends AppCompatActivity BrowserFragment bf = new BrowserFragment(); fm.beginTransaction().add(bf, fragmentTag).commit(); return bf; + case HashtagListFragment.TAG: + HashtagListFragment hlf = new HashtagListFragment(); + fm.beginTransaction().add(hlf, fragmentTag).commit(); + return hlf; case TestFragment.TAG: - TestFragment tf = new TestFragment(); - fm.beginTransaction().add(tf, fragmentTag).commit(); - return tf; default: AppLog.e(this,"Invalid Fragment Tag: "+fragmentTag +"\nAdd Fragments Tag to getFragment()'s switch case."); - return null; + TestFragment tf = new TestFragment(); + fm.beginTransaction().add(tf, fragmentTag).commit(); + return tf; } } } @@ -780,7 +784,7 @@ public class MainActivity extends AppCompatActivity //TODO: Replace with fragment case R.id.nav_followed_tags: { - DiasporaStreamFragment stream = (DiasporaStreamFragment) getFragment(DiasporaStreamFragment.TAG); + /*DiasporaStreamFragment stream = (DiasporaStreamFragment) getFragment(DiasporaStreamFragment.TAG); if (WebHelper.isOnline(MainActivity.this)) { openDiasporaUrl(urls.getBlankUrl()); WebHelper.showFollowedTagsList(stream.getWebView(), app); @@ -788,6 +792,8 @@ public class MainActivity extends AppCompatActivity } else { snackbarNoInternet.show(); } + */ + showFragment(getFragment(HashtagListFragment.TAG)); } break; diff --git a/app/src/main/java/com/github/dfa/diaspora_android/fragment/HashtagListFragment.java b/app/src/main/java/com/github/dfa/diaspora_android/fragment/HashtagListFragment.java new file mode 100644 index 00000000..13ab9669 --- /dev/null +++ b/app/src/main/java/com/github/dfa/diaspora_android/fragment/HashtagListFragment.java @@ -0,0 +1,125 @@ +package com.github.dfa.diaspora_android.fragment; + +import android.os.Bundle; +import android.support.v7.widget.LinearLayoutManager; +import android.support.v7.widget.RecyclerView; +import android.view.LayoutInflater; +import android.view.Menu; +import android.view.MenuInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.TextView; + +import com.github.dfa.diaspora_android.App; +import com.github.dfa.diaspora_android.R; +import com.github.dfa.diaspora_android.activity.MainActivity; +import com.github.dfa.diaspora_android.util.AppLog; +import com.github.dfa.diaspora_android.util.DiasporaUrlHelper; + +/** + * Fragment that shows a list of the Hashtags the user follows + * Created by vanitas on 29.09.16. + */ + +public class HashtagListFragment extends CustomFragment { + + public static final String TAG = "com.github.dfa.diaspora_android.HashtagListFragment"; + + protected RecyclerView followedTagsRecyclerView; + protected String[] followedTags; + protected App app; + protected DiasporaUrlHelper urls; + + @Override + public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { + AppLog.d(this, "onCreateView()"); + return inflater.inflate(R.layout.hashtag_list__fragment, container, false); + } + + @Override + public void onViewCreated(View view, Bundle savedInstanceState) { + super.onViewCreated(view, savedInstanceState); + this.followedTagsRecyclerView = (RecyclerView) view.findViewById(R.id.fragment_followed_tags__recycler_view); + this.app = (App) getActivity().getApplication(); + this.urls = new DiasporaUrlHelper(app.getSettings()); + + followedTags = app.getPodUserProfile().getFollowedTags(); + followedTagsRecyclerView.setHasFixedSize(true); + followedTagsRecyclerView.setNestedScrollingEnabled(false); + + RecyclerView.LayoutManager layoutManager = new LinearLayoutManager(this.getContext()); + followedTagsRecyclerView.setLayoutManager(layoutManager); + + final FollowedTagsAdapter adapter = new FollowedTagsAdapter(followedTags, onHashtagClickListener); + followedTagsRecyclerView.setAdapter(adapter); + } + + @Override + public String getFragmentTag() { + return TAG; + } + + @Override + public void onCreateBottomOptionsMenu(Menu menu, MenuInflater inflater) { + /* Nothing to do */ + } + + @Override + public boolean onBackPressed() { + return false; + } + + protected View.OnClickListener onHashtagClickListener = new View.OnClickListener() { + @Override + public void onClick(View view) { + int itemPosition = followedTagsRecyclerView.getChildLayoutPosition(view); + if(itemPosition > -1 && itemPosition < followedTags.length) { + String tag = followedTags[itemPosition]; + ((MainActivity)getActivity()).openDiasporaUrl(urls.getSearchTagsUrl(tag)); + } + } + }; + + public static class FollowedTagsAdapter extends RecyclerView.Adapter { + private String[] followedTagsList; + private View.OnClickListener itemClickListener; + + public static class ViewHolder extends RecyclerView.ViewHolder { + // each data item is just a string in this case + public TextView title; + + public ViewHolder(View v) { + super(v); + title = (TextView) v.findViewById(R.id.recycler_view__list_item__text); + } + } + + // Provide a suitable constructor (depends on the kind of dataset) + public FollowedTagsAdapter(String[] tags, View.OnClickListener itemClickListener) { + this.followedTagsList = tags; + this.itemClickListener = itemClickListener; + } + + @Override + public FollowedTagsAdapter.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { + View v = LayoutInflater.from(parent.getContext()) + .inflate(R.layout.recycler_view__list_item, parent, false); + v.setOnClickListener(itemClickListener); + return new ViewHolder(v); + } + + // Replace the contents of a view (invoked by the layout manager) + @Override + public void onBindViewHolder(ViewHolder holder, int position) { + + holder.title.setText(followedTagsList[position]); + + } + + // Return the size of your dataset (invoked by the layout manager) + @Override + public int getItemCount() { + return followedTagsList.length; + } + } +} diff --git a/app/src/main/res/layout/hashtag_list__fragment.xml b/app/src/main/res/layout/hashtag_list__fragment.xml new file mode 100644 index 00000000..94df572b --- /dev/null +++ b/app/src/main/res/layout/hashtag_list__fragment.xml @@ -0,0 +1,27 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/main__app_bar.xml b/app/src/main/res/layout/main__app_bar.xml index 8d217e2b..e71a1997 100644 --- a/app/src/main/res/layout/main__app_bar.xml +++ b/app/src/main/res/layout/main__app_bar.xml @@ -32,7 +32,7 @@ diff --git a/app/src/main/res/layout/recycler_view__list_item.xml b/app/src/main/res/layout/recycler_view__list_item.xml new file mode 100644 index 00000000..764467e7 --- /dev/null +++ b/app/src/main/res/layout/recycler_view__list_item.xml @@ -0,0 +1,23 @@ + + + + + + \ No newline at end of file diff --git a/app/src/main/res/values/dimens.xml b/app/src/main/res/values/dimens.xml index 1009fc6a..35131109 100644 --- a/app/src/main/res/values/dimens.xml +++ b/app/src/main/res/values/dimens.xml @@ -7,6 +7,7 @@ 16dp 16dp 8dp + 45dp