Add highlights back to ProfileFragment

This commit is contained in:
Ammar Githam 2020-09-06 03:34:16 +09:00
parent 465defd1ff
commit 4efd2cb6ac
11 changed files with 238 additions and 96 deletions

View File

@ -7,11 +7,11 @@ import androidx.annotation.NonNull;
import androidx.recyclerview.widget.DiffUtil;
import androidx.recyclerview.widget.ListAdapter;
import awais.instagrabber.adapters.viewholder.HighlightViewHolder;
import awais.instagrabber.adapters.viewholder.FeedStoryViewHolder;
import awais.instagrabber.databinding.ItemHighlightBinding;
import awais.instagrabber.models.FeedStoryModel;
public final class FeedStoriesAdapter extends ListAdapter<FeedStoryModel, HighlightViewHolder> {
public final class FeedStoriesAdapter extends ListAdapter<FeedStoryModel, FeedStoryViewHolder> {
private final OnFeedStoryClickListener listener;
private static final DiffUtil.ItemCallback<FeedStoryModel> diffCallback = new DiffUtil.ItemCallback<FeedStoryModel>() {
@ -33,14 +33,14 @@ public final class FeedStoriesAdapter extends ListAdapter<FeedStoryModel, Highli
@NonNull
@Override
public HighlightViewHolder onCreateViewHolder(@NonNull final ViewGroup parent, final int viewType) {
public FeedStoryViewHolder onCreateViewHolder(@NonNull final ViewGroup parent, final int viewType) {
final LayoutInflater layoutInflater = LayoutInflater.from(parent.getContext());
final ItemHighlightBinding binding = ItemHighlightBinding.inflate(layoutInflater, parent, false);
return new HighlightViewHolder(binding);
return new FeedStoryViewHolder(binding);
}
@Override
public void onBindViewHolder(@NonNull final HighlightViewHolder holder, final int position) {
public void onBindViewHolder(@NonNull final FeedStoryViewHolder holder, final int position) {
final FeedStoryModel model = getItem(position);
holder.bind(model, position, listener);
}

View File

@ -1,54 +1,55 @@
package awais.instagrabber.adapters;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView;
import androidx.recyclerview.widget.DiffUtil;
import androidx.recyclerview.widget.ListAdapter;
import com.bumptech.glide.Glide;
import awais.instagrabber.R;
import awais.instagrabber.adapters.viewholder.HighlightViewHolder;
import awais.instagrabber.databinding.ItemHighlightBinding;
import awais.instagrabber.models.HighlightModel;
public final class HighlightsAdapter extends RecyclerView.Adapter<HighlightViewHolder> {
private final View.OnClickListener clickListener;
private LayoutInflater layoutInflater;
private HighlightModel[] highlightModels;
public final class HighlightsAdapter extends ListAdapter<HighlightModel, HighlightViewHolder> {
public HighlightsAdapter(final HighlightModel[] highlightModels, final View.OnClickListener clickListener) {
this.highlightModels = highlightModels;
private final OnHighlightClickListener clickListener;
private static final DiffUtil.ItemCallback<HighlightModel> diffCallback = new DiffUtil.ItemCallback<HighlightModel>() {
@Override
public boolean areItemsTheSame(@NonNull final HighlightModel oldItem, @NonNull final HighlightModel newItem) {
return oldItem.getId().equals(newItem.getId());
}
@Override
public boolean areContentsTheSame(@NonNull final HighlightModel oldItem, @NonNull final HighlightModel newItem) {
return oldItem.getId().equals(newItem.getId());
}
};
public HighlightsAdapter(final OnHighlightClickListener clickListener) {
super(diffCallback);
this.clickListener = clickListener;
}
@NonNull
@Override
public HighlightViewHolder onCreateViewHolder(@NonNull final ViewGroup parent, final int viewType) {
if (layoutInflater == null) layoutInflater = LayoutInflater.from(parent.getContext());
// return new HighlightViewHolder(layoutInflater.inflate(R.layout.item_highlight, parent, false));
return null;
final LayoutInflater layoutInflater = LayoutInflater.from(parent.getContext());
final ItemHighlightBinding binding = ItemHighlightBinding.inflate(layoutInflater, parent, false);
return new HighlightViewHolder(binding);
}
@Override
public void onBindViewHolder(@NonNull final HighlightViewHolder holder, final int position) {
// final HighlightModel highlightModel = highlightModels[position];
// if (highlightModel != null) {
// holder.itemView.setTag(highlightModel);
// holder.itemView.setOnClickListener(clickListener);
// holder.title.setText(highlightModel.getTitle());
// Glide.with(holder.itemView).load(highlightModel.getThumbnailUrl()).into(holder.icon);
// }
final HighlightModel highlightModel = getItem(position);
if (clickListener != null) {
holder.itemView.setOnClickListener(v -> clickListener.onHighlightClick(highlightModel, position));
}
holder.bind(highlightModel);
}
public void setData(final HighlightModel[] highlightModels) {
this.highlightModels = highlightModels;
notifyDataSetChanged();
}
@Override
public int getItemCount() {
return highlightModels == null ? 0 : highlightModels.length;
public interface OnHighlightClickListener {
void onHighlightClick(final HighlightModel model, final int position);
}
}

View File

@ -0,0 +1,33 @@
package awais.instagrabber.adapters.viewholder;
import androidx.recyclerview.widget.RecyclerView;
import awais.instagrabber.adapters.FeedStoriesAdapter;
import awais.instagrabber.databinding.ItemHighlightBinding;
import awais.instagrabber.models.FeedStoryModel;
import awais.instagrabber.models.ProfileModel;
public final class FeedStoryViewHolder extends RecyclerView.ViewHolder {
private final ItemHighlightBinding binding;
public FeedStoryViewHolder(final ItemHighlightBinding binding) {
super(binding.getRoot());
this.binding = binding;
}
public void bind(final FeedStoryModel model,
final int position,
final FeedStoriesAdapter.OnFeedStoryClickListener listener) {
if (model == null) return;
binding.getRoot().setOnClickListener(v -> {
if (listener == null) return;
listener.onFeedStoryClick(model, position);
});
final ProfileModel profileModel = model.getProfileModel();
binding.title.setText(profileModel.getUsername());
binding.title.setAlpha(model.getFullyRead() ? 0.5F : 1.0F);
binding.icon.setImageURI(profileModel.getSdProfilePic());
binding.icon.setAlpha(model.getFullyRead() ? 0.5F : 1.0F);
}
}

View File

@ -2,10 +2,8 @@ package awais.instagrabber.adapters.viewholder;
import androidx.recyclerview.widget.RecyclerView;
import awais.instagrabber.adapters.FeedStoriesAdapter;
import awais.instagrabber.databinding.ItemHighlightBinding;
import awais.instagrabber.models.FeedStoryModel;
import awais.instagrabber.models.ProfileModel;
import awais.instagrabber.models.HighlightModel;
public final class HighlightViewHolder extends RecyclerView.ViewHolder {
@ -16,18 +14,18 @@ public final class HighlightViewHolder extends RecyclerView.ViewHolder {
this.binding = binding;
}
public void bind(final FeedStoryModel model,
final int position,
final FeedStoriesAdapter.OnFeedStoryClickListener listener) {
public void bind(final HighlightModel model) {
if (model == null) return;
binding.getRoot().setOnClickListener(v -> {
if (listener == null) return;
listener.onFeedStoryClick(model, position);
});
final ProfileModel profileModel = model.getProfileModel();
binding.title.setText(profileModel.getUsername());
binding.title.setAlpha(model.getFullyRead() ? 0.5F : 1.0F);
binding.icon.setImageURI(profileModel.getSdProfilePic());
binding.icon.setAlpha(model.getFullyRead() ? 0.5F : 1.0F);
binding.title.setText(model.getTitle());
binding.icon.setImageURI(model.getThumbnailUrl());
// binding.getRoot().setOnClickListener(v -> {
// if (listener == null) return;
// listener.onFeedStoryClick(model, position);
// });
// final ProfileModel profileModel = model.getProfileModel();
// binding.title.setText(profileModel.getUsername());
// binding.title.setAlpha(model.getFullyRead() ? 0.5F : 1.0F);
// binding.icon.setImageURI(profileModel.getSdProfilePic());
// binding.icon.setAlpha(model.getFullyRead() ? 0.5F : 1.0F);
}
}

View File

@ -8,6 +8,8 @@ import org.json.JSONObject;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.ArrayList;
import java.util.List;
import awais.instagrabber.BuildConfig;
import awais.instagrabber.interfaces.FetchListener;
@ -15,20 +17,20 @@ import awais.instagrabber.models.HighlightModel;
import awais.instagrabber.utils.Constants;
import awais.instagrabber.utils.Utils;
public final class HighlightsFetcher extends AsyncTask<Void, Void, HighlightModel[]> {
public final class HighlightsFetcher extends AsyncTask<Void, Void, List<HighlightModel>> {
private final String id;
private final boolean storiesig;
private final FetchListener<HighlightModel[]> fetchListener;
private final FetchListener<List<HighlightModel>> fetchListener;
public HighlightsFetcher(final String id, final boolean storiesig, final FetchListener<HighlightModel[]> fetchListener) {
public HighlightsFetcher(final String id, final boolean storiesig, final FetchListener<List<HighlightModel>> fetchListener) {
this.id = id;
this.storiesig = storiesig;
this.fetchListener = fetchListener;
}
@Override
protected HighlightModel[] doInBackground(final Void... voids) {
HighlightModel[] result = null;
protected List<HighlightModel> doInBackground(final Void... voids) {
List<HighlightModel> result = null;
String url = "https://" + (storiesig ? "storiesig" : "i.instagram") + ".com/api/v1/highlights/" + id + "/highlights_tray/";
try {
@ -42,17 +44,18 @@ public final class HighlightsFetcher extends AsyncTask<Void, Void, HighlightMode
final JSONArray highlightsReel = new JSONObject(Utils.readFromConnection(conn)).getJSONArray("tray");
final int length = highlightsReel.length();
final HighlightModel[] highlightModels = new HighlightModel[length];
final String[] highlightIds = new String[length];
final List<HighlightModel> highlightModels = new ArrayList<>();
// final String[] highlightIds = new String[length];
for (int i = 0; i < length; ++i) {
final JSONObject highlightNode = highlightsReel.getJSONObject(i);
highlightModels[i] = new HighlightModel(
highlightModels.add(new HighlightModel(
highlightNode.getString("title"),
highlightNode.getString(Constants.EXTRAS_ID),
highlightNode.getJSONObject("cover_media").getJSONObject("cropped_image_version").getString("url")
);
highlightNode.getJSONObject("cover_media")
.getJSONObject("cropped_image_version")
.getString("url")
));
}
conn.disconnect();
result = highlightModels;
}
@ -66,7 +69,7 @@ public final class HighlightsFetcher extends AsyncTask<Void, Void, HighlightMode
}
@Override
protected void onPostExecute(final HighlightModel[] result) {
protected void onPostExecute(final List<HighlightModel> result) {
if (fetchListener != null) fetchListener.onResult(result);
}
}

View File

@ -32,6 +32,7 @@ import androidx.core.app.ActivityCompat;
import androidx.core.content.ContextCompat;
import androidx.core.view.GestureDetectorCompat;
import androidx.fragment.app.Fragment;
import androidx.lifecycle.ViewModel;
import androidx.lifecycle.ViewModelProvider;
import androidx.navigation.NavDirections;
import androidx.navigation.fragment.NavHostFragment;
@ -70,9 +71,11 @@ import awais.instagrabber.asyncs.direct_messages.DirectThreadBroadcaster;
import awais.instagrabber.customviews.helpers.SwipeGestureListener;
import awais.instagrabber.databinding.ActivityStoryViewerBinding;
import awais.instagrabber.fragments.main.viewmodels.FeedStoriesViewModel;
import awais.instagrabber.fragments.main.viewmodels.HighlightsViewModel;
import awais.instagrabber.fragments.main.viewmodels.StoriesViewModel;
import awais.instagrabber.interfaces.SwipeEvent;
import awais.instagrabber.models.FeedStoryModel;
import awais.instagrabber.models.HighlightModel;
import awais.instagrabber.models.StoryModel;
import awais.instagrabber.models.enums.MediaItemType;
import awais.instagrabber.models.stickers.PollModel;
@ -103,7 +106,6 @@ public class StoryViewerFragment extends Fragment {
private SwipeEvent swipeEvent;
private GestureDetectorCompat gestureDetector;
private StoriesService storiesService;
private List<FeedStoryModel> feedStoryModels;
private StoryModel currentStory;
private int slidePos;
private int lastSlidePos;
@ -120,11 +122,12 @@ public class StoryViewerFragment extends Fragment {
private boolean fetching = false;
private int currentFeedStoryIndex;
private StoriesViewModel storiesViewModel;
private String currentStoryMediaId;
private boolean shouldRefresh = true;
private final String cookie = settingsHelper.getString(Constants.COOKIE);
private StoryViewerFragmentArgs fragmentArgs;
private ViewModel viewModel;
private boolean isHighlight;
@Override
public void onCreate(@Nullable final Bundle savedInstanceState) {
@ -232,11 +235,16 @@ public class StoryViewerFragment extends Fragment {
}
private void init() {
final FeedStoriesViewModel feedStoriesViewModel = new ViewModelProvider(fragmentActivity).get(FeedStoriesViewModel.class);
feedStoryModels = feedStoriesViewModel.getList().getValue();
if (feedStoryModels == null || feedStoryModels.isEmpty() || getArguments() == null) return;
if (getArguments() == null) return;
fragmentArgs = StoryViewerFragmentArgs.fromBundle(getArguments());
currentFeedStoryIndex = fragmentArgs.getFeedStoryIndex();
highlight = fragmentArgs.getHighlight();
isHighlight = !Utils.isEmpty(highlight);
viewModel = isHighlight
? new ViewModelProvider(fragmentActivity).get(HighlightsViewModel.class)
: new ViewModelProvider(fragmentActivity).get(FeedStoriesViewModel.class);
// feedStoryModels = feedStoriesViewModel.getList().getValue();
// feedStoryModels == null || feedStoryModels.isEmpty() ||
setupStories();
}
@ -256,11 +264,26 @@ public class StoryViewerFragment extends Fragment {
@SuppressLint("ClickableViewAccessibility")
private void setupListeners() {
final boolean hasFeedStories;
final List<?> models;
if (isHighlight) {
final HighlightsViewModel highlightsViewModel = (HighlightsViewModel) viewModel;
models = highlightsViewModel.getList().getValue();
// final HighlightModel model = models.get(currentFeedStoryIndex);
// currentStoryMediaId = model.getId();
// currentStoryUsername = model.getTitle();
} else {
final FeedStoriesViewModel feedStoriesViewModel = (FeedStoriesViewModel) viewModel;
models = feedStoriesViewModel.getList().getValue();
// final FeedStoryModel model = models.get(currentFeedStoryIndex);
// currentStoryMediaId = model.getStoryMediaId();
// currentStoryUsername = model.getProfileModel().getUsername();
}
hasFeedStories = models != null && !models.isEmpty();
swipeEvent = isRightSwipe -> {
final List<StoryModel> storyModels = storiesViewModel.getList().getValue();
final int storiesLen = storyModels == null ? 0 : storyModels.size();
if (storiesLen <= 0) return;
final boolean hasFeedStories = feedStoryModels != null && !feedStoryModels.isEmpty();
final boolean isLeftSwipe = !isRightSwipe;
final boolean endOfCurrentStories = slidePos + 1 >= storiesLen;
final boolean swipingBeyondCurrentStories = (endOfCurrentStories && isLeftSwipe) || (slidePos == 0 && isRightSwipe);
@ -269,13 +292,13 @@ public class StoryViewerFragment extends Fragment {
if (settingsHelper.getBoolean(MARK_AS_SEEN)) {
new SeenAction(cookie, currentStory).execute();
}
if ((isRightSwipe && index == 0) || (isLeftSwipe && index == feedStoryModels.size() - 1)) {
if ((isRightSwipe && index == 0) || (isLeftSwipe && index == models.size() - 1)) {
Toast.makeText(requireContext(), R.string.no_more_stories, Toast.LENGTH_SHORT).show();
return;
}
final FeedStoryModel feedStoryModel = isRightSwipe
? feedStoryModels.get(index - 1)
: feedStoryModels.size() == index + 1 ? null : feedStoryModels.get(index + 1);
final Object feedStoryModel = isRightSwipe
? models.get(index - 1)
: models.size() == index + 1 ? null : models.get(index + 1);
if (feedStoryModel != null) {
if (fetching) {
Toast.makeText(requireContext(), R.string.be_patient, Toast.LENGTH_SHORT).show();
@ -284,18 +307,6 @@ public class StoryViewerFragment extends Fragment {
fetching = true;
currentFeedStoryIndex = isRightSwipe ? (index - 1) : (index + 1);
resetView();
// new iStoryStatusFetcher(feedStoryModel.getStoryMediaId(), null, false, false, false, false, result -> {
// if (result != null && result.length > 0) {
// final Intent newIntent = new Intent(requireContext(), StoryViewer.class)
// .putExtra(Constants.EXTRAS_STORIES, result)
// .putExtra(Constants.EXTRAS_USERNAME, feedStoryModel.getProfileModel().getUsername())
// .putExtra(Constants.FEED, storyFeed)
// .putExtra(Constants.FEED_ORDER, isRightSwipe ? (index - 1) : (index + 1));
// newIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
// startActivity(newIntent);
// } else
// Toast.makeText(requireContext(), R.string.downloader_unknown_error, Toast.LENGTH_SHORT).show();
// }).executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
}
return;
}
@ -448,13 +459,24 @@ public class StoryViewerFragment extends Fragment {
if (menuDm != null) menuDm.setVisible(false);
binding.imageViewer.setController(null);
releasePlayer();
final FeedStoryModel feedStoryModel = feedStoryModels.get(currentFeedStoryIndex);
currentStoryMediaId = feedStoryModel.getStoryMediaId();
currentStoryUsername = feedStoryModel.getProfileModel().getUsername();
String currentStoryMediaId;
if (isHighlight) {
final HighlightsViewModel highlightsViewModel = (HighlightsViewModel) viewModel;
final List<HighlightModel> models = highlightsViewModel.getList().getValue();
if (models == null) return;
final HighlightModel model = models.get(currentFeedStoryIndex);
currentStoryMediaId = model.getId();
currentStoryUsername = model.getTitle();
} else {
final FeedStoriesViewModel feedStoriesViewModel = (FeedStoriesViewModel) viewModel;
final List<FeedStoryModel> models = feedStoriesViewModel.getList().getValue();
if (models == null) return;
final FeedStoryModel model = models.get(currentFeedStoryIndex);
currentStoryMediaId = model.getStoryMediaId();
currentStoryUsername = model.getProfileModel().getUsername();
}
isHashtag = fragmentArgs.getIsHashtag();
highlight = fragmentArgs.getHighlight();
final boolean hasUsername = !Utils.isEmpty(currentStoryUsername);
final boolean hasHighlight = !Utils.isEmpty(highlight);
if (hasUsername) {
currentStoryUsername = currentStoryUsername.replace("@", "");
final ActionBar actionBar = fragmentActivity.getSupportActionBar();
@ -463,7 +485,7 @@ public class StoryViewerFragment extends Fragment {
// actionBar.setOnClickListener(v -> {
// searchUsername(username);
// });
if (hasHighlight) {
if (isHighlight) {
actionBar.setSubtitle(getString(R.string.title_highlight, highlight));
} else {
actionBar.setSubtitle(R.string.title_user_story);
@ -471,7 +493,7 @@ public class StoryViewerFragment extends Fragment {
}
}
storiesViewModel.getList().setValue(Collections.emptyList());
storiesService.getUserStory(currentStoryMediaId, null, false, false, false, false, new ServiceCallback<List<StoryModel>>() {
storiesService.getUserStory(currentStoryMediaId, null, false, false, false, isHighlight, new ServiceCallback<List<StoryModel>>() {
@Override
public void onSuccess(final List<StoryModel> storyModels) {
fetching = false;

View File

@ -32,6 +32,8 @@ import androidx.fragment.app.Fragment;
import androidx.lifecycle.ViewModelProvider;
import androidx.navigation.NavDirections;
import androidx.navigation.fragment.NavHostFragment;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
import androidx.swiperefreshlayout.widget.SwipeRefreshLayout;
import java.util.ArrayList;
@ -42,6 +44,7 @@ import java.util.List;
import awais.instagrabber.ProfileNavGraphDirections;
import awais.instagrabber.R;
import awais.instagrabber.activities.MainActivity;
import awais.instagrabber.adapters.HighlightsAdapter;
import awais.instagrabber.adapters.PostsAdapter;
import awais.instagrabber.asyncs.HighlightsFetcher;
import awais.instagrabber.asyncs.PostsFetcher;
@ -54,6 +57,7 @@ import awais.instagrabber.customviews.helpers.GridAutofitLayoutManager;
import awais.instagrabber.customviews.helpers.GridSpacingItemDecoration;
import awais.instagrabber.customviews.helpers.RecyclerLazyLoader;
import awais.instagrabber.databinding.FragmentProfileBinding;
import awais.instagrabber.fragments.main.viewmodels.HighlightsViewModel;
import awais.instagrabber.fragments.main.viewmodels.PostsViewModel;
import awais.instagrabber.interfaces.FetchListener;
import awais.instagrabber.interfaces.MentionClickListener;
@ -96,6 +100,7 @@ public class ProfileFragment extends Fragment implements SwipeRefreshLayout.OnRe
private AsyncTask<Void, Void, PostModel[]> currentlyExecuting;
private MenuItem favMenuItem;
private boolean isPullToRefresh;
private HighlightsAdapter highlightsAdapter;
private final Runnable usernameSettingRunnable = () -> {
final ActionBar actionBar = fragmentActivity.getSupportActionBar();
@ -186,6 +191,7 @@ public class ProfileFragment extends Fragment implements SwipeRefreshLayout.OnRe
action.setUsername("@" + text);
NavHostFragment.findNavController(this).navigate(action);
};
private HighlightsViewModel highlightsViewModel;
@Override
public void onCreate(@Nullable final Bundle savedInstanceState) {
@ -257,6 +263,9 @@ public class ProfileFragment extends Fragment implements SwipeRefreshLayout.OnRe
if (postsViewModel != null) {
postsViewModel.getList().postValue(Collections.emptyList());
}
if (highlightsViewModel != null) {
highlightsViewModel.getList().postValue(Collections.emptyList());
}
}
private void init() {
@ -274,6 +283,7 @@ public class ProfileFragment extends Fragment implements SwipeRefreshLayout.OnRe
return;
}
setupPosts();
setupHighlights();
setupCommonListeners();
fetchUsername();
}
@ -348,9 +358,9 @@ public class ProfileFragment extends Fragment implements SwipeRefreshLayout.OnRe
new HighlightsFetcher(profileId,
!isLoggedIn && settingsHelper.getBoolean(Constants.STORIESIG),
result -> {
if (result != null && result.length > 0) {
if (result != null) {
binding.highlightsList.setVisibility(View.VISIBLE);
// highlightsAdapter.setData(result);
highlightsViewModel.getList().postValue(result);
} else binding.highlightsList.setVisibility(View.GONE);
}).executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
}
@ -729,6 +739,37 @@ public class ProfileFragment extends Fragment implements SwipeRefreshLayout.OnRe
binding.mainPosts.addOnScrollListener(lazyLoader);
}
private void setupHighlights() {
highlightsViewModel = new ViewModelProvider(fragmentActivity).get(HighlightsViewModel.class);
highlightsAdapter = new HighlightsAdapter((model, position) -> {
final NavDirections action = ProfileFragmentDirections.actionProfileFragmentToStoryViewerFragment(position, model.getTitle(), false);
NavHostFragment.findNavController(this).navigate(action);
// new iStoryStatusFetcher(
// model.getId(),
// null,
// false,
// false,
// !isLoggedIn && Utils.settingsHelper.getBoolean(Constants.STORIESIG),
// true,
// result -> {
// if (result == null || result.length <= 0) {
// Toast.makeText(requireContext(), R.string.downloader_unknown_error, Toast.LENGTH_SHORT).show();
// return;
// }
// feedStoriesViewModel.getHighlights().postValue(Arrays.asList(result));
// // startActivity(new Intent(ProfileViewer.this, StoryViewer.class)
// // .putExtra(Constants.EXTRAS_USERNAME, userQuery.replace("@", ""))
// // .putExtra(Constants.EXTRAS_HIGHLIGHT, highlightModel.getTitle())
// // .putExtra(Constants.EXTRAS_STORIES, result)
// // );
// }).executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
});
final RecyclerView.LayoutManager layoutManager = new LinearLayoutManager(requireContext(), RecyclerView.HORIZONTAL, false);
binding.highlightsList.setLayoutManager(layoutManager);
binding.highlightsList.setAdapter(highlightsAdapter);
highlightsViewModel.getList().observe(getViewLifecycleOwner(), highlightModels -> highlightsAdapter.submitList(highlightModels));
}
private void fetchPosts() {
stopCurrentExecutor();
binding.swipeRefreshLayout.setRefreshing(true);

View File

@ -0,0 +1,19 @@
package awais.instagrabber.fragments.main.viewmodels;
import androidx.lifecycle.MutableLiveData;
import androidx.lifecycle.ViewModel;
import java.util.List;
import awais.instagrabber.models.HighlightModel;
public class HighlightsViewModel extends ViewModel {
private MutableLiveData<List<HighlightModel>> list;
public MutableLiveData<List<HighlightModel>> getList() {
if (list == null) {
list = new MutableLiveData<>();
}
return list;
}
}

View File

@ -1,9 +1,13 @@
package awais.instagrabber.models;
public final class HighlightModel {
private final String title, id, thumbnailUrl;
private final String title;
private final String id;
private final String thumbnailUrl;
public HighlightModel(final String title, final String id, final String thumbnailUrl) {
public HighlightModel(final String title,
final String id,
final String thumbnailUrl) {
this.title = title;
this.id = id;
this.thumbnailUrl = thumbnailUrl;

View File

@ -200,12 +200,13 @@
android:layout_height="wrap_content"
android:layout_below="@id/myActions"
android:clipToPadding="false"
android:orientation="horizontal"
android:paddingStart="5dp"
android:paddingLeft="5dp"
android:paddingEnd="5dp"
android:paddingRight="5dp"
android:visibility="gone" />
android:visibility="gone"
tools:itemCount="2"
tools:visibility="visible" />
<LinearLayout
android:id="@+id/profileInfo"

View File

@ -60,6 +60,9 @@
<action
android:id="@+id/action_profileFragment_to_followViewerFragment"
app:destination="@id/followViewerFragment" />
<action
android:id="@+id/action_profileFragment_to_storyViewerFragment"
app:destination="@id/storyViewerFragment" />
</fragment>
<fragment
android:id="@+id/savedViewerFragment"
@ -106,4 +109,21 @@
app:nullable="true" />
</action>
</fragment>
<fragment
android:id="@+id/storyViewerFragment"
android:name="awais.instagrabber.fragments.StoryViewerFragment"
android:label="StoryViewerFragment"
tools:layout="@layout/activity_story_viewer">
<argument
android:name="feedStoryIndex"
app:argType="integer"
app:nullable="false" />
<argument
android:name="highlight"
app:argType="string"
app:nullable="true" />
<argument
android:name="isHashtag"
app:argType="boolean" />
</fragment>
</navigation>