mirror of
https://github.com/KokaKiwi/BarInsta
synced 2024-11-22 22:57:29 +00:00
Put collapsing toolbar layout views in the main layout to improve scroll behaviour.
This removes the spaghetti required to make scroll behaviours work.
This commit is contained in:
parent
519d46858b
commit
6bfb6e1bf3
@ -40,7 +40,6 @@ import androidx.navigation.ui.NavigationUI;
|
|||||||
import com.google.android.material.appbar.AppBarLayout;
|
import com.google.android.material.appbar.AppBarLayout;
|
||||||
import com.google.android.material.appbar.CollapsingToolbarLayout;
|
import com.google.android.material.appbar.CollapsingToolbarLayout;
|
||||||
import com.google.android.material.bottomnavigation.BottomNavigationView;
|
import com.google.android.material.bottomnavigation.BottomNavigationView;
|
||||||
import com.google.common.collect.ImmutableList;
|
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
@ -53,7 +52,6 @@ import awais.instagrabber.R;
|
|||||||
import awais.instagrabber.adapters.SuggestionsAdapter;
|
import awais.instagrabber.adapters.SuggestionsAdapter;
|
||||||
import awais.instagrabber.asyncs.PostFetcher;
|
import awais.instagrabber.asyncs.PostFetcher;
|
||||||
import awais.instagrabber.asyncs.SuggestionsFetcher;
|
import awais.instagrabber.asyncs.SuggestionsFetcher;
|
||||||
import awais.instagrabber.customviews.helpers.CustomHideBottomViewOnScrollBehavior;
|
|
||||||
import awais.instagrabber.databinding.ActivityMainBinding;
|
import awais.instagrabber.databinding.ActivityMainBinding;
|
||||||
import awais.instagrabber.fragments.PostViewV2Fragment;
|
import awais.instagrabber.fragments.PostViewV2Fragment;
|
||||||
import awais.instagrabber.fragments.main.FeedFragment;
|
import awais.instagrabber.fragments.main.FeedFragment;
|
||||||
@ -80,29 +78,7 @@ public class MainActivity extends BaseLanguageActivity implements FragmentManage
|
|||||||
R.id.profileFragment,
|
R.id.profileFragment,
|
||||||
R.id.discoverFragment,
|
R.id.discoverFragment,
|
||||||
R.id.morePreferencesFragment);
|
R.id.morePreferencesFragment);
|
||||||
private static final List<Integer> KEEP_SCROLL_BEHAVIOUR_DESTINATIONS = Arrays.asList(
|
|
||||||
R.id.directMessagesInboxFragment,
|
|
||||||
R.id.feedFragment,
|
|
||||||
R.id.profileFragment,
|
|
||||||
R.id.discoverFragment,
|
|
||||||
R.id.morePreferencesFragment,
|
|
||||||
R.id.settingsPreferencesFragment,
|
|
||||||
R.id.aboutFragment,
|
|
||||||
R.id.hashTagFragment,
|
|
||||||
R.id.locationFragment,
|
|
||||||
R.id.savedViewerFragment,
|
|
||||||
R.id.commentsViewerFragment,
|
|
||||||
R.id.followViewerFragment,
|
|
||||||
R.id.directMessagesSettingsFragment,
|
|
||||||
R.id.notificationsViewer,
|
|
||||||
R.id.themePreferencesFragment,
|
|
||||||
R.id.favoritesFragment,
|
|
||||||
R.id.backupPreferencesFragment,
|
|
||||||
R.id.directMessagesThreadFragment
|
|
||||||
);
|
|
||||||
private static final Map<Integer, Integer> NAV_TO_MENU_ID_MAP = new HashMap<>();
|
private static final Map<Integer, Integer> NAV_TO_MENU_ID_MAP = new HashMap<>();
|
||||||
private static final List<Integer> REMOVE_COLLAPSING_TOOLBAR_SCROLL_DESTINATIONS = ImmutableList.of(R.id.commentsViewerFragment,
|
|
||||||
R.id.directMessagesThreadFragment);
|
|
||||||
private static final String FIRST_FRAGMENT_GRAPH_INDEX_KEY = "firstFragmentGraphIndex";
|
private static final String FIRST_FRAGMENT_GRAPH_INDEX_KEY = "firstFragmentGraphIndex";
|
||||||
|
|
||||||
private ActivityMainBinding binding;
|
private ActivityMainBinding binding;
|
||||||
@ -152,7 +128,6 @@ public class MainActivity extends BaseLanguageActivity implements FragmentManage
|
|||||||
if (savedInstanceState == null) {
|
if (savedInstanceState == null) {
|
||||||
setupBottomNavigationBar(true);
|
setupBottomNavigationBar(true);
|
||||||
}
|
}
|
||||||
setupScrollingListener();
|
|
||||||
setupSuggestions();
|
setupSuggestions();
|
||||||
final boolean checkUpdates = settingsHelper.getBoolean(Constants.CHECK_UPDATES);
|
final boolean checkUpdates = settingsHelper.getBoolean(Constants.CHECK_UPDATES);
|
||||||
if (checkUpdates) FlavorTown.updateCheck(this);
|
if (checkUpdates) FlavorTown.updateCheck(this);
|
||||||
@ -281,12 +256,6 @@ public class MainActivity extends BaseLanguageActivity implements FragmentManage
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
private void setupScrollingListener() {
|
|
||||||
final CoordinatorLayout.LayoutParams layoutParams = (CoordinatorLayout.LayoutParams) binding.bottomNavView.getLayoutParams();
|
|
||||||
layoutParams.setBehavior(new CustomHideBottomViewOnScrollBehavior());
|
|
||||||
binding.bottomNavView.requestLayout();
|
|
||||||
}
|
|
||||||
|
|
||||||
private boolean setupSearchView() {
|
private boolean setupSearchView() {
|
||||||
final View actionView = searchMenuItem.getActionView();
|
final View actionView = searchMenuItem.getActionView();
|
||||||
if (!(actionView instanceof SearchView)) return false;
|
if (!(actionView instanceof SearchView)) return false;
|
||||||
@ -478,16 +447,6 @@ public class MainActivity extends BaseLanguageActivity implements FragmentManage
|
|||||||
@SuppressLint("RestrictedApi") final Deque<NavBackStackEntry> backStack = navController.getBackStack();
|
@SuppressLint("RestrictedApi") final Deque<NavBackStackEntry> backStack = navController.getBackStack();
|
||||||
setupMenu(backStack.size(), destinationId);
|
setupMenu(backStack.size(), destinationId);
|
||||||
binding.bottomNavView.setVisibility(SHOW_BOTTOM_VIEW_DESTINATIONS.contains(destinationId) ? View.VISIBLE : View.GONE);
|
binding.bottomNavView.setVisibility(SHOW_BOTTOM_VIEW_DESTINATIONS.contains(destinationId) ? View.VISIBLE : View.GONE);
|
||||||
if (KEEP_SCROLL_BEHAVIOUR_DESTINATIONS.contains(destinationId)) {
|
|
||||||
setScrollingBehaviour();
|
|
||||||
} else {
|
|
||||||
removeScrollingBehaviour();
|
|
||||||
}
|
|
||||||
if (REMOVE_COLLAPSING_TOOLBAR_SCROLL_DESTINATIONS.contains(destinationId)) {
|
|
||||||
removeCollapsingToolbarScrollFlags();
|
|
||||||
} else {
|
|
||||||
setCollapsingToolbarScrollFlags();
|
|
||||||
}
|
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -514,22 +473,6 @@ public class MainActivity extends BaseLanguageActivity implements FragmentManage
|
|||||||
binding.mainNavHost.requestLayout();
|
binding.mainNavHost.requestLayout();
|
||||||
}
|
}
|
||||||
|
|
||||||
private void setCollapsingToolbarScrollFlags() {
|
|
||||||
final CollapsingToolbarLayout collapsingToolbarLayout = binding.collapsingToolbarLayout;
|
|
||||||
final AppBarLayout.LayoutParams toolbarLayoutLayoutParams = (AppBarLayout.LayoutParams) collapsingToolbarLayout.getLayoutParams();
|
|
||||||
toolbarLayoutLayoutParams.setScrollFlags(AppBarLayout.LayoutParams.SCROLL_FLAG_SCROLL
|
|
||||||
| AppBarLayout.LayoutParams.SCROLL_FLAG_SNAP
|
|
||||||
| AppBarLayout.LayoutParams.SCROLL_FLAG_ENTER_ALWAYS);
|
|
||||||
binding.collapsingToolbarLayout.requestLayout();
|
|
||||||
}
|
|
||||||
|
|
||||||
private void removeCollapsingToolbarScrollFlags() {
|
|
||||||
final CollapsingToolbarLayout collapsingToolbarLayout = binding.collapsingToolbarLayout;
|
|
||||||
final AppBarLayout.LayoutParams toolbarLayoutLayoutParams = (AppBarLayout.LayoutParams) collapsingToolbarLayout.getLayoutParams();
|
|
||||||
toolbarLayoutLayoutParams.setScrollFlags(AppBarLayout.LayoutParams.SCROLL_FLAG_NO_SCROLL);
|
|
||||||
binding.collapsingToolbarLayout.requestLayout();
|
|
||||||
}
|
|
||||||
|
|
||||||
private void handleIntent(final Intent intent) {
|
private void handleIntent(final Intent intent) {
|
||||||
if (intent == null) return;
|
if (intent == null) return;
|
||||||
final String action = intent.getAction();
|
final String action = intent.getAction();
|
||||||
@ -654,23 +597,17 @@ public class MainActivity extends BaseLanguageActivity implements FragmentManage
|
|||||||
return binding.bottomNavView;
|
return binding.bottomNavView;
|
||||||
}
|
}
|
||||||
|
|
||||||
// public void fitSystemWindows(final boolean fit) {
|
public void setCollapsingView(@NonNull final View view) {
|
||||||
// binding.appBarLayout.setBackground(null);
|
binding.collapsingToolbarLayout.addView(view, 0);
|
||||||
// binding.appBarLayout.setFitsSystemWindows(fit);
|
}
|
||||||
// binding.collapsingToolbarLayout.setBackground(null);
|
|
||||||
// binding.collapsingToolbarLayout.setFitsSystemWindows(fit);
|
public void removeCollapsingView(@NonNull final View view) {
|
||||||
// final Drawable toolbarBackground = binding.toolbar.getBackground();
|
binding.collapsingToolbarLayout.removeView(view);
|
||||||
// binding.toolbar.setFitsSystemWindows(fit);
|
}
|
||||||
// binding.toolbar.setBackground(null);
|
|
||||||
// binding.toolbar.setClickable(false);
|
|
||||||
// }
|
|
||||||
//
|
|
||||||
// public int getNavHostContainerId() {
|
|
||||||
// return binding.mainNavHost.getId();
|
|
||||||
// }
|
|
||||||
|
|
||||||
public void setToolbar(final Toolbar toolbar) {
|
public void setToolbar(final Toolbar toolbar) {
|
||||||
binding.appBarLayout.setVisibility(View.GONE);
|
binding.appBarLayout.setVisibility(View.GONE);
|
||||||
|
removeScrollingBehaviour();
|
||||||
setSupportActionBar(toolbar);
|
setSupportActionBar(toolbar);
|
||||||
if (currentNavControllerLiveData == null) return;
|
if (currentNavControllerLiveData == null) return;
|
||||||
setupNavigation(toolbar, currentNavControllerLiveData.getValue());
|
setupNavigation(toolbar, currentNavControllerLiveData.getValue());
|
||||||
@ -678,8 +615,13 @@ public class MainActivity extends BaseLanguageActivity implements FragmentManage
|
|||||||
|
|
||||||
public void resetToolbar() {
|
public void resetToolbar() {
|
||||||
binding.appBarLayout.setVisibility(View.VISIBLE);
|
binding.appBarLayout.setVisibility(View.VISIBLE);
|
||||||
|
setScrollingBehaviour();
|
||||||
setSupportActionBar(binding.toolbar);
|
setSupportActionBar(binding.toolbar);
|
||||||
if (currentNavControllerLiveData == null) return;
|
if (currentNavControllerLiveData == null) return;
|
||||||
setupNavigation(binding.toolbar, currentNavControllerLiveData.getValue());
|
setupNavigation(binding.toolbar, currentNavControllerLiveData.getValue());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public CollapsingToolbarLayout getCollapsingToolbarView() {
|
||||||
|
return binding.collapsingToolbarLayout;
|
||||||
|
}
|
||||||
}
|
}
|
@ -66,9 +66,6 @@ public final class InboxFetcher extends AsyncTask<Void, Void, InboxModel> {
|
|||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
JSONObject data = new JSONObject(NetworkUtils.readFromConnection(conn));
|
JSONObject data = new JSONObject(NetworkUtils.readFromConnection(conn));
|
||||||
// try (FileWriter fileWriter = new FileWriter(new File("/sdcard/test.json"))) {
|
|
||||||
// fileWriter.write(data.toString(2));
|
|
||||||
// }
|
|
||||||
|
|
||||||
final long seqId = data.optLong("seq_id");
|
final long seqId = data.optLong("seq_id");
|
||||||
final int pendingRequestsCount = data.optInt("pending_requests_total");
|
final int pendingRequestsCount = data.optInt("pending_requests_total");
|
||||||
|
@ -24,6 +24,7 @@ import androidx.activity.OnBackPressedDispatcher;
|
|||||||
import androidx.annotation.NonNull;
|
import androidx.annotation.NonNull;
|
||||||
import androidx.annotation.Nullable;
|
import androidx.annotation.Nullable;
|
||||||
import androidx.appcompat.app.ActionBar;
|
import androidx.appcompat.app.ActionBar;
|
||||||
|
import androidx.coordinatorlayout.widget.CoordinatorLayout;
|
||||||
import androidx.core.content.PermissionChecker;
|
import androidx.core.content.PermissionChecker;
|
||||||
import androidx.fragment.app.Fragment;
|
import androidx.fragment.app.Fragment;
|
||||||
import androidx.navigation.NavController;
|
import androidx.navigation.NavController;
|
||||||
@ -46,8 +47,8 @@ import awais.instagrabber.asyncs.HashtagFetcher;
|
|||||||
import awais.instagrabber.asyncs.HashtagPostFetchService;
|
import awais.instagrabber.asyncs.HashtagPostFetchService;
|
||||||
import awais.instagrabber.asyncs.PostFetcher;
|
import awais.instagrabber.asyncs.PostFetcher;
|
||||||
import awais.instagrabber.customviews.PrimaryActionModeCallback;
|
import awais.instagrabber.customviews.PrimaryActionModeCallback;
|
||||||
import awais.instagrabber.customviews.helpers.NestedCoordinatorLayout;
|
|
||||||
import awais.instagrabber.databinding.FragmentHashtagBinding;
|
import awais.instagrabber.databinding.FragmentHashtagBinding;
|
||||||
|
import awais.instagrabber.databinding.LayoutHashtagDetailsBinding;
|
||||||
import awais.instagrabber.dialogs.PostsLayoutPreferencesDialogFragment;
|
import awais.instagrabber.dialogs.PostsLayoutPreferencesDialogFragment;
|
||||||
import awais.instagrabber.models.FeedModel;
|
import awais.instagrabber.models.FeedModel;
|
||||||
import awais.instagrabber.models.HashtagModel;
|
import awais.instagrabber.models.HashtagModel;
|
||||||
@ -79,7 +80,7 @@ public class HashTagFragment extends Fragment implements SwipeRefreshLayout.OnRe
|
|||||||
|
|
||||||
private MainActivity fragmentActivity;
|
private MainActivity fragmentActivity;
|
||||||
private FragmentHashtagBinding binding;
|
private FragmentHashtagBinding binding;
|
||||||
private NestedCoordinatorLayout root;
|
private CoordinatorLayout root;
|
||||||
private boolean shouldRefresh = true;
|
private boolean shouldRefresh = true;
|
||||||
private boolean hasStories = false;
|
private boolean hasStories = false;
|
||||||
private boolean opening = false;
|
private boolean opening = false;
|
||||||
@ -95,6 +96,7 @@ public class HashTagFragment extends Fragment implements SwipeRefreshLayout.OnRe
|
|||||||
private FeedModel downloadFeedModel;
|
private FeedModel downloadFeedModel;
|
||||||
private int downloadChildPosition = -1;
|
private int downloadChildPosition = -1;
|
||||||
private PostsLayoutPreferences layoutPreferences = PostsLayoutPreferences.fromJson(settingsHelper.getString(Constants.PREF_HASHTAG_POSTS_LAYOUT));
|
private PostsLayoutPreferences layoutPreferences = PostsLayoutPreferences.fromJson(settingsHelper.getString(Constants.PREF_HASHTAG_POSTS_LAYOUT));
|
||||||
|
private LayoutHashtagDetailsBinding hashtagDetailsBinding;
|
||||||
|
|
||||||
private final OnBackPressedCallback onBackPressedCallback = new OnBackPressedCallback(false) {
|
private final OnBackPressedCallback onBackPressedCallback = new OnBackPressedCallback(false) {
|
||||||
@Override
|
@Override
|
||||||
@ -272,10 +274,13 @@ public class HashTagFragment extends Fragment implements SwipeRefreshLayout.OnRe
|
|||||||
public View onCreateView(@NonNull final LayoutInflater inflater, @Nullable final ViewGroup container, @Nullable final Bundle savedInstanceState) {
|
public View onCreateView(@NonNull final LayoutInflater inflater, @Nullable final ViewGroup container, @Nullable final Bundle savedInstanceState) {
|
||||||
if (root != null) {
|
if (root != null) {
|
||||||
shouldRefresh = false;
|
shouldRefresh = false;
|
||||||
|
fragmentActivity.setCollapsingView(hashtagDetailsBinding.getRoot());
|
||||||
return root;
|
return root;
|
||||||
}
|
}
|
||||||
binding = FragmentHashtagBinding.inflate(inflater, container, false);
|
binding = FragmentHashtagBinding.inflate(inflater, container, false);
|
||||||
root = binding.getRoot();
|
root = binding.getRoot();
|
||||||
|
hashtagDetailsBinding = LayoutHashtagDetailsBinding.inflate(inflater, fragmentActivity.getCollapsingToolbarView(), false);
|
||||||
|
fragmentActivity.setCollapsingView(hashtagDetailsBinding.getRoot());
|
||||||
return root;
|
return root;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -332,6 +337,14 @@ public class HashTagFragment extends Fragment implements SwipeRefreshLayout.OnRe
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onDestroyView() {
|
||||||
|
super.onDestroyView();
|
||||||
|
if (hashtagDetailsBinding != null) {
|
||||||
|
fragmentActivity.removeCollapsingView(hashtagDetailsBinding.getRoot());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private void init() {
|
private void init() {
|
||||||
if (getArguments() == null) return;
|
if (getArguments() == null) return;
|
||||||
final String cookie = settingsHelper.getString(Constants.COOKIE);
|
final String cookie = settingsHelper.getString(Constants.COOKIE);
|
||||||
@ -374,21 +387,21 @@ public class HashTagFragment extends Fragment implements SwipeRefreshLayout.OnRe
|
|||||||
|
|
||||||
private void setHashtagDetails() {
|
private void setHashtagDetails() {
|
||||||
if (isLoggedIn) {
|
if (isLoggedIn) {
|
||||||
binding.btnFollowTag.setVisibility(View.VISIBLE);
|
hashtagDetailsBinding.btnFollowTag.setVisibility(View.VISIBLE);
|
||||||
binding.btnFollowTag.setText(hashtagModel.getFollowing() ? R.string.unfollow : R.string.follow);
|
hashtagDetailsBinding.btnFollowTag.setText(hashtagModel.getFollowing() ? R.string.unfollow : R.string.follow);
|
||||||
binding.btnFollowTag.setChipIconResource(hashtagModel.getFollowing()
|
hashtagDetailsBinding.btnFollowTag.setChipIconResource(hashtagModel.getFollowing()
|
||||||
? R.drawable.ic_outline_person_add_disabled_24
|
? R.drawable.ic_outline_person_add_disabled_24
|
||||||
: R.drawable.ic_outline_person_add_24);
|
: R.drawable.ic_outline_person_add_24);
|
||||||
binding.btnFollowTag.setOnClickListener(v -> {
|
hashtagDetailsBinding.btnFollowTag.setOnClickListener(v -> {
|
||||||
final String cookie = settingsHelper.getString(Constants.COOKIE);
|
final String cookie = settingsHelper.getString(Constants.COOKIE);
|
||||||
final String csrfToken = CookieUtils.getCsrfTokenFromCookie(cookie);
|
final String csrfToken = CookieUtils.getCsrfTokenFromCookie(cookie);
|
||||||
if (csrfToken != null) {
|
if (csrfToken != null) {
|
||||||
binding.btnFollowTag.setClickable(false);
|
hashtagDetailsBinding.btnFollowTag.setClickable(false);
|
||||||
if (!hashtagModel.getFollowing()) {
|
if (!hashtagModel.getFollowing()) {
|
||||||
tagsService.follow(hashtag.substring(1), csrfToken, new ServiceCallback<Boolean>() {
|
tagsService.follow(hashtag.substring(1), csrfToken, new ServiceCallback<Boolean>() {
|
||||||
@Override
|
@Override
|
||||||
public void onSuccess(final Boolean result) {
|
public void onSuccess(final Boolean result) {
|
||||||
binding.btnFollowTag.setClickable(true);
|
hashtagDetailsBinding.btnFollowTag.setClickable(true);
|
||||||
if (!result) {
|
if (!result) {
|
||||||
Log.e(TAG, "onSuccess: result is false");
|
Log.e(TAG, "onSuccess: result is false");
|
||||||
return;
|
return;
|
||||||
@ -398,7 +411,7 @@ public class HashTagFragment extends Fragment implements SwipeRefreshLayout.OnRe
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onFailure(@NonNull final Throwable t) {
|
public void onFailure(@NonNull final Throwable t) {
|
||||||
binding.btnFollowTag.setClickable(true);
|
hashtagDetailsBinding.btnFollowTag.setClickable(true);
|
||||||
Log.e(TAG, "onFailure: ", t);
|
Log.e(TAG, "onFailure: ", t);
|
||||||
final String message = t.getMessage();
|
final String message = t.getMessage();
|
||||||
Snackbar.make(root,
|
Snackbar.make(root,
|
||||||
@ -413,7 +426,7 @@ public class HashTagFragment extends Fragment implements SwipeRefreshLayout.OnRe
|
|||||||
tagsService.unfollow(hashtag.substring(1), csrfToken, new ServiceCallback<Boolean>() {
|
tagsService.unfollow(hashtag.substring(1), csrfToken, new ServiceCallback<Boolean>() {
|
||||||
@Override
|
@Override
|
||||||
public void onSuccess(final Boolean result) {
|
public void onSuccess(final Boolean result) {
|
||||||
binding.btnFollowTag.setClickable(true);
|
hashtagDetailsBinding.btnFollowTag.setClickable(true);
|
||||||
if (!result) {
|
if (!result) {
|
||||||
Log.e(TAG, "onSuccess: result is false");
|
Log.e(TAG, "onSuccess: result is false");
|
||||||
return;
|
return;
|
||||||
@ -423,7 +436,7 @@ public class HashTagFragment extends Fragment implements SwipeRefreshLayout.OnRe
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onFailure(@NonNull final Throwable t) {
|
public void onFailure(@NonNull final Throwable t) {
|
||||||
binding.btnFollowTag.setClickable(true);
|
hashtagDetailsBinding.btnFollowTag.setClickable(true);
|
||||||
Log.e(TAG, "onFailure: ", t);
|
Log.e(TAG, "onFailure: ", t);
|
||||||
final String message = t.getMessage();
|
final String message = t.getMessage();
|
||||||
Snackbar.make(root,
|
Snackbar.make(root,
|
||||||
@ -436,22 +449,22 @@ public class HashTagFragment extends Fragment implements SwipeRefreshLayout.OnRe
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
} else {
|
} else {
|
||||||
binding.btnFollowTag.setVisibility(View.GONE);
|
hashtagDetailsBinding.btnFollowTag.setVisibility(View.GONE);
|
||||||
}
|
}
|
||||||
final DataBox.FavoriteModel favorite = Utils.dataBox.getFavorite(hashtag.substring(1), FavoriteType.HASHTAG);
|
final DataBox.FavoriteModel favorite = Utils.dataBox.getFavorite(hashtag.substring(1), FavoriteType.HASHTAG);
|
||||||
final boolean isFav = favorite != null;
|
final boolean isFav = favorite != null;
|
||||||
binding.favChip.setVisibility(View.VISIBLE);
|
hashtagDetailsBinding.favChip.setVisibility(View.VISIBLE);
|
||||||
binding.favChip.setChipIconResource(isFav ? R.drawable.ic_star_check_24
|
hashtagDetailsBinding.favChip.setChipIconResource(isFav ? R.drawable.ic_star_check_24
|
||||||
: R.drawable.ic_outline_star_plus_24);
|
: R.drawable.ic_outline_star_plus_24);
|
||||||
binding.favChip.setText(isFav ? R.string.favorite_short : R.string.add_to_favorites);
|
hashtagDetailsBinding.favChip.setText(isFav ? R.string.favorite_short : R.string.add_to_favorites);
|
||||||
binding.favChip.setOnClickListener(v -> {
|
hashtagDetailsBinding.favChip.setOnClickListener(v -> {
|
||||||
final DataBox.FavoriteModel fav = Utils.dataBox.getFavorite(hashtag.substring(1), FavoriteType.HASHTAG);
|
final DataBox.FavoriteModel fav = Utils.dataBox.getFavorite(hashtag.substring(1), FavoriteType.HASHTAG);
|
||||||
final boolean isFavorite = fav != null;
|
final boolean isFavorite = fav != null;
|
||||||
final String message;
|
final String message;
|
||||||
if (isFavorite) {
|
if (isFavorite) {
|
||||||
Utils.dataBox.deleteFavorite(hashtag.substring(1), FavoriteType.HASHTAG);
|
Utils.dataBox.deleteFavorite(hashtag.substring(1), FavoriteType.HASHTAG);
|
||||||
binding.favChip.setText(R.string.add_to_favorites);
|
hashtagDetailsBinding.favChip.setText(R.string.add_to_favorites);
|
||||||
binding.favChip.setChipIconResource(R.drawable.ic_outline_star_plus_24);
|
hashtagDetailsBinding.favChip.setChipIconResource(R.drawable.ic_outline_star_plus_24);
|
||||||
message = getString(R.string.removed_from_favs);
|
message = getString(R.string.removed_from_favs);
|
||||||
} else {
|
} else {
|
||||||
Utils.dataBox.addOrUpdateFavorite(new DataBox.FavoriteModel(
|
Utils.dataBox.addOrUpdateFavorite(new DataBox.FavoriteModel(
|
||||||
@ -462,8 +475,8 @@ public class HashTagFragment extends Fragment implements SwipeRefreshLayout.OnRe
|
|||||||
null,
|
null,
|
||||||
new Date()
|
new Date()
|
||||||
));
|
));
|
||||||
binding.favChip.setText(R.string.favorite_short);
|
hashtagDetailsBinding.favChip.setText(R.string.favorite_short);
|
||||||
binding.favChip.setChipIconResource(R.drawable.ic_star_check_24);
|
hashtagDetailsBinding.favChip.setChipIconResource(R.drawable.ic_star_check_24);
|
||||||
message = getString(R.string.added_to_favs);
|
message = getString(R.string.added_to_favs);
|
||||||
}
|
}
|
||||||
final Snackbar snackbar = Snackbar.make(root, message, BaseTransientBottomBar.LENGTH_LONG);
|
final Snackbar snackbar = Snackbar.make(root, message, BaseTransientBottomBar.LENGTH_LONG);
|
||||||
@ -472,14 +485,14 @@ public class HashTagFragment extends Fragment implements SwipeRefreshLayout.OnRe
|
|||||||
.setAnchorView(fragmentActivity.getBottomNavView())
|
.setAnchorView(fragmentActivity.getBottomNavView())
|
||||||
.show();
|
.show();
|
||||||
});
|
});
|
||||||
binding.mainHashtagImage.setImageURI(hashtagModel.getSdProfilePic());
|
hashtagDetailsBinding.mainHashtagImage.setImageURI(hashtagModel.getSdProfilePic());
|
||||||
final String postCount = String.valueOf(hashtagModel.getPostCount());
|
final String postCount = String.valueOf(hashtagModel.getPostCount());
|
||||||
final SpannableStringBuilder span = new SpannableStringBuilder(getString(R.string.main_posts_count_inline, postCount));
|
final SpannableStringBuilder span = new SpannableStringBuilder(getString(R.string.main_posts_count_inline, postCount));
|
||||||
span.setSpan(new RelativeSizeSpan(1.2f), 0, postCount.length(), 0);
|
span.setSpan(new RelativeSizeSpan(1.2f), 0, postCount.length(), 0);
|
||||||
span.setSpan(new StyleSpan(Typeface.BOLD), 0, postCount.length(), 0);
|
span.setSpan(new StyleSpan(Typeface.BOLD), 0, postCount.length(), 0);
|
||||||
binding.mainTagPostCount.setText(span);
|
hashtagDetailsBinding.mainTagPostCount.setText(span);
|
||||||
binding.mainTagPostCount.setVisibility(View.VISIBLE);
|
hashtagDetailsBinding.mainTagPostCount.setVisibility(View.VISIBLE);
|
||||||
binding.mainHashtagImage.setOnClickListener(v -> {
|
hashtagDetailsBinding.mainHashtagImage.setOnClickListener(v -> {
|
||||||
if (!hasStories) return;
|
if (!hasStories) return;
|
||||||
// show stories
|
// show stories
|
||||||
final NavDirections action = HashTagFragmentDirections
|
final NavDirections action = HashTagFragmentDirections
|
||||||
@ -501,7 +514,7 @@ public class HashTagFragment extends Fragment implements SwipeRefreshLayout.OnRe
|
|||||||
@Override
|
@Override
|
||||||
public void onSuccess(final List<StoryModel> storyModels) {
|
public void onSuccess(final List<StoryModel> storyModels) {
|
||||||
if (storyModels != null && !storyModels.isEmpty()) {
|
if (storyModels != null && !storyModels.isEmpty()) {
|
||||||
binding.mainHashtagImage.setStoriesBorder();
|
hashtagDetailsBinding.mainHashtagImage.setStoriesBorder();
|
||||||
hasStories = true;
|
hasStories = true;
|
||||||
} else {
|
} else {
|
||||||
hasStories = false;
|
hasStories = false;
|
||||||
|
@ -27,6 +27,7 @@ import androidx.activity.OnBackPressedDispatcher;
|
|||||||
import androidx.annotation.NonNull;
|
import androidx.annotation.NonNull;
|
||||||
import androidx.annotation.Nullable;
|
import androidx.annotation.Nullable;
|
||||||
import androidx.appcompat.app.ActionBar;
|
import androidx.appcompat.app.ActionBar;
|
||||||
|
import androidx.coordinatorlayout.widget.CoordinatorLayout;
|
||||||
import androidx.core.content.PermissionChecker;
|
import androidx.core.content.PermissionChecker;
|
||||||
import androidx.fragment.app.Fragment;
|
import androidx.fragment.app.Fragment;
|
||||||
import androidx.navigation.NavController;
|
import androidx.navigation.NavController;
|
||||||
@ -49,8 +50,8 @@ import awais.instagrabber.asyncs.LocationFetcher;
|
|||||||
import awais.instagrabber.asyncs.LocationPostFetchService;
|
import awais.instagrabber.asyncs.LocationPostFetchService;
|
||||||
import awais.instagrabber.asyncs.PostFetcher;
|
import awais.instagrabber.asyncs.PostFetcher;
|
||||||
import awais.instagrabber.customviews.PrimaryActionModeCallback;
|
import awais.instagrabber.customviews.PrimaryActionModeCallback;
|
||||||
import awais.instagrabber.customviews.helpers.NestedCoordinatorLayout;
|
|
||||||
import awais.instagrabber.databinding.FragmentLocationBinding;
|
import awais.instagrabber.databinding.FragmentLocationBinding;
|
||||||
|
import awais.instagrabber.databinding.LayoutLocationDetailsBinding;
|
||||||
import awais.instagrabber.dialogs.PostsLayoutPreferencesDialogFragment;
|
import awais.instagrabber.dialogs.PostsLayoutPreferencesDialogFragment;
|
||||||
import awais.instagrabber.models.FeedModel;
|
import awais.instagrabber.models.FeedModel;
|
||||||
import awais.instagrabber.models.LocationModel;
|
import awais.instagrabber.models.LocationModel;
|
||||||
@ -79,7 +80,7 @@ public class LocationFragment extends Fragment implements SwipeRefreshLayout.OnR
|
|||||||
|
|
||||||
private MainActivity fragmentActivity;
|
private MainActivity fragmentActivity;
|
||||||
private FragmentLocationBinding binding;
|
private FragmentLocationBinding binding;
|
||||||
private NestedCoordinatorLayout root;
|
private CoordinatorLayout root;
|
||||||
private boolean shouldRefresh = true;
|
private boolean shouldRefresh = true;
|
||||||
private boolean hasStories = false;
|
private boolean hasStories = false;
|
||||||
private boolean opening = false;
|
private boolean opening = false;
|
||||||
@ -93,8 +94,8 @@ public class LocationFragment extends Fragment implements SwipeRefreshLayout.OnR
|
|||||||
private Set<FeedModel> selectedFeedModels;
|
private Set<FeedModel> selectedFeedModels;
|
||||||
private FeedModel downloadFeedModel;
|
private FeedModel downloadFeedModel;
|
||||||
private int downloadChildPosition = -1;
|
private int downloadChildPosition = -1;
|
||||||
private PostsLayoutPreferences layoutPreferences = PostsLayoutPreferences
|
private PostsLayoutPreferences layoutPreferences = Utils.getPostsLayoutPreferences(Constants.PREF_LOCATION_POSTS_LAYOUT);
|
||||||
.fromJson(settingsHelper.getString(Constants.PREF_LOCATION_POSTS_LAYOUT));
|
private LayoutLocationDetailsBinding locationDetailsBinding;
|
||||||
|
|
||||||
private final OnBackPressedCallback onBackPressedCallback = new OnBackPressedCallback(false) {
|
private final OnBackPressedCallback onBackPressedCallback = new OnBackPressedCallback(false) {
|
||||||
@Override
|
@Override
|
||||||
@ -273,10 +274,13 @@ public class LocationFragment extends Fragment implements SwipeRefreshLayout.OnR
|
|||||||
@Nullable final Bundle savedInstanceState) {
|
@Nullable final Bundle savedInstanceState) {
|
||||||
if (root != null) {
|
if (root != null) {
|
||||||
shouldRefresh = false;
|
shouldRefresh = false;
|
||||||
|
fragmentActivity.setCollapsingView(locationDetailsBinding.getRoot());
|
||||||
return root;
|
return root;
|
||||||
}
|
}
|
||||||
binding = FragmentLocationBinding.inflate(inflater, container, false);
|
binding = FragmentLocationBinding.inflate(inflater, container, false);
|
||||||
root = binding.getRoot();
|
root = binding.getRoot();
|
||||||
|
locationDetailsBinding = LayoutLocationDetailsBinding.inflate(inflater, fragmentActivity.getCollapsingToolbarView(), false);
|
||||||
|
fragmentActivity.setCollapsingView(locationDetailsBinding.getRoot());
|
||||||
return root;
|
return root;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -333,14 +337,22 @@ public class LocationFragment extends Fragment implements SwipeRefreshLayout.OnR
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onDestroyView() {
|
||||||
|
super.onDestroyView();
|
||||||
|
if (locationDetailsBinding != null) {
|
||||||
|
fragmentActivity.removeCollapsingView(locationDetailsBinding.getRoot());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private void init() {
|
private void init() {
|
||||||
if (getArguments() == null) return;
|
if (getArguments() == null) return;
|
||||||
final String cookie = settingsHelper.getString(Constants.COOKIE);
|
final String cookie = settingsHelper.getString(Constants.COOKIE);
|
||||||
isLoggedIn = !TextUtils.isEmpty(cookie) && CookieUtils.getUserIdFromCookie(cookie) != null;
|
isLoggedIn = !TextUtils.isEmpty(cookie) && CookieUtils.getUserIdFromCookie(cookie) != null;
|
||||||
final LocationFragmentArgs fragmentArgs = LocationFragmentArgs.fromBundle(getArguments());
|
final LocationFragmentArgs fragmentArgs = LocationFragmentArgs.fromBundle(getArguments());
|
||||||
locationId = fragmentArgs.getLocationId();
|
locationId = fragmentArgs.getLocationId();
|
||||||
binding.favChip.setVisibility(View.GONE);
|
locationDetailsBinding.favChip.setVisibility(View.GONE);
|
||||||
binding.btnMap.setVisibility(View.GONE);
|
locationDetailsBinding.btnMap.setVisibility(View.GONE);
|
||||||
setTitle();
|
setTitle();
|
||||||
fetchLocationModel();
|
fetchLocationModel();
|
||||||
}
|
}
|
||||||
@ -380,68 +392,68 @@ public class LocationFragment extends Fragment implements SwipeRefreshLayout.OnR
|
|||||||
private void setupLocationDetails() {
|
private void setupLocationDetails() {
|
||||||
final String locationId = locationModel.getId();
|
final String locationId = locationModel.getId();
|
||||||
// binding.swipeRefreshLayout.setRefreshing(true);
|
// binding.swipeRefreshLayout.setRefreshing(true);
|
||||||
binding.mainLocationImage.setImageURI(locationModel.getSdProfilePic());
|
locationDetailsBinding.mainLocationImage.setImageURI(locationModel.getSdProfilePic());
|
||||||
final String postCount = String.valueOf(locationModel.getPostCount());
|
final String postCount = String.valueOf(locationModel.getPostCount());
|
||||||
final SpannableStringBuilder span = new SpannableStringBuilder(getString(R.string.main_posts_count_inline,
|
final SpannableStringBuilder span = new SpannableStringBuilder(getString(R.string.main_posts_count_inline,
|
||||||
postCount));
|
postCount));
|
||||||
span.setSpan(new RelativeSizeSpan(1.2f), 0, postCount.length(), 0);
|
span.setSpan(new RelativeSizeSpan(1.2f), 0, postCount.length(), 0);
|
||||||
span.setSpan(new StyleSpan(Typeface.BOLD), 0, postCount.length(), 0);
|
span.setSpan(new StyleSpan(Typeface.BOLD), 0, postCount.length(), 0);
|
||||||
binding.mainLocPostCount.setText(span);
|
locationDetailsBinding.mainLocPostCount.setText(span);
|
||||||
binding.mainLocPostCount.setVisibility(View.VISIBLE);
|
locationDetailsBinding.mainLocPostCount.setVisibility(View.VISIBLE);
|
||||||
binding.locationFullName.setText(locationModel.getName());
|
locationDetailsBinding.locationFullName.setText(locationModel.getName());
|
||||||
CharSequence biography = locationModel.getBio();
|
CharSequence biography = locationModel.getBio();
|
||||||
// binding.locationBiography.setCaptionIsExpandable(true);
|
// binding.locationBiography.setCaptionIsExpandable(true);
|
||||||
// binding.locationBiography.setCaptionIsExpanded(true);
|
// binding.locationBiography.setCaptionIsExpanded(true);
|
||||||
|
|
||||||
if (TextUtils.isEmpty(biography)) {
|
if (TextUtils.isEmpty(biography)) {
|
||||||
binding.locationBiography.setVisibility(View.GONE);
|
locationDetailsBinding.locationBiography.setVisibility(View.GONE);
|
||||||
} else if (TextUtils.hasMentions(biography)) {
|
} else if (TextUtils.hasMentions(biography)) {
|
||||||
binding.locationBiography.setVisibility(View.VISIBLE);
|
locationDetailsBinding.locationBiography.setVisibility(View.VISIBLE);
|
||||||
biography = TextUtils.getMentionText(biography);
|
biography = TextUtils.getMentionText(biography);
|
||||||
binding.locationBiography.setText(biography, TextView.BufferType.SPANNABLE);
|
locationDetailsBinding.locationBiography.setText(biography, TextView.BufferType.SPANNABLE);
|
||||||
// binding.locationBiography.setMentionClickListener(mentionClickListener);
|
// binding.locationBiography.setMentionClickListener(mentionClickListener);
|
||||||
} else {
|
} else {
|
||||||
binding.locationBiography.setVisibility(View.VISIBLE);
|
locationDetailsBinding.locationBiography.setVisibility(View.VISIBLE);
|
||||||
binding.locationBiography.setText(biography);
|
locationDetailsBinding.locationBiography.setText(biography);
|
||||||
binding.locationBiography.setMentionClickListener(null);
|
locationDetailsBinding.locationBiography.setMentionClickListener(null);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!locationModel.getGeo().startsWith("geo:0.0,0.0?z=17")) {
|
if (!locationModel.getGeo().startsWith("geo:0.0,0.0?z=17")) {
|
||||||
binding.btnMap.setVisibility(View.VISIBLE);
|
locationDetailsBinding.btnMap.setVisibility(View.VISIBLE);
|
||||||
binding.btnMap.setOnClickListener(v -> {
|
locationDetailsBinding.btnMap.setOnClickListener(v -> {
|
||||||
final Intent intent = new Intent(Intent.ACTION_VIEW);
|
final Intent intent = new Intent(Intent.ACTION_VIEW);
|
||||||
intent.setData(Uri.parse(locationModel.getGeo()));
|
intent.setData(Uri.parse(locationModel.getGeo()));
|
||||||
startActivity(intent);
|
startActivity(intent);
|
||||||
});
|
});
|
||||||
} else {
|
} else {
|
||||||
binding.btnMap.setVisibility(View.GONE);
|
locationDetailsBinding.btnMap.setVisibility(View.GONE);
|
||||||
binding.btnMap.setOnClickListener(null);
|
locationDetailsBinding.btnMap.setOnClickListener(null);
|
||||||
}
|
}
|
||||||
|
|
||||||
final String url = locationModel.getUrl();
|
final String url = locationModel.getUrl();
|
||||||
if (TextUtils.isEmpty(url)) {
|
if (TextUtils.isEmpty(url)) {
|
||||||
binding.locationUrl.setVisibility(View.GONE);
|
locationDetailsBinding.locationUrl.setVisibility(View.GONE);
|
||||||
} else if (!url.startsWith("http")) {
|
} else if (!url.startsWith("http")) {
|
||||||
binding.locationUrl.setVisibility(View.VISIBLE);
|
locationDetailsBinding.locationUrl.setVisibility(View.VISIBLE);
|
||||||
binding.locationUrl.setText(TextUtils.getSpannableUrl("http://" + url));
|
locationDetailsBinding.locationUrl.setText(TextUtils.getSpannableUrl("http://" + url));
|
||||||
} else {
|
} else {
|
||||||
binding.locationUrl.setVisibility(View.VISIBLE);
|
locationDetailsBinding.locationUrl.setVisibility(View.VISIBLE);
|
||||||
binding.locationUrl.setText(TextUtils.getSpannableUrl(url));
|
locationDetailsBinding.locationUrl.setText(TextUtils.getSpannableUrl(url));
|
||||||
}
|
}
|
||||||
final DataBox.FavoriteModel favorite = Utils.dataBox.getFavorite(locationId, FavoriteType.LOCATION);
|
final DataBox.FavoriteModel favorite = Utils.dataBox.getFavorite(locationId, FavoriteType.LOCATION);
|
||||||
final boolean isFav = favorite != null;
|
final boolean isFav = favorite != null;
|
||||||
binding.favChip.setVisibility(View.VISIBLE);
|
locationDetailsBinding.favChip.setVisibility(View.VISIBLE);
|
||||||
binding.favChip.setChipIconResource(isFav ? R.drawable.ic_star_check_24
|
locationDetailsBinding.favChip.setChipIconResource(isFav ? R.drawable.ic_star_check_24
|
||||||
: R.drawable.ic_outline_star_plus_24);
|
: R.drawable.ic_outline_star_plus_24);
|
||||||
binding.favChip.setText(isFav ? R.string.favorite_short : R.string.add_to_favorites);
|
locationDetailsBinding.favChip.setText(isFav ? R.string.favorite_short : R.string.add_to_favorites);
|
||||||
binding.favChip.setOnClickListener(v -> {
|
locationDetailsBinding.favChip.setOnClickListener(v -> {
|
||||||
final DataBox.FavoriteModel fav = Utils.dataBox.getFavorite(locationId, FavoriteType.LOCATION);
|
final DataBox.FavoriteModel fav = Utils.dataBox.getFavorite(locationId, FavoriteType.LOCATION);
|
||||||
final boolean isFavorite = fav != null;
|
final boolean isFavorite = fav != null;
|
||||||
final String message;
|
final String message;
|
||||||
if (isFavorite) {
|
if (isFavorite) {
|
||||||
Utils.dataBox.deleteFavorite(locationId, FavoriteType.LOCATION);
|
Utils.dataBox.deleteFavorite(locationId, FavoriteType.LOCATION);
|
||||||
binding.favChip.setText(R.string.add_to_favorites);
|
locationDetailsBinding.favChip.setText(R.string.add_to_favorites);
|
||||||
binding.favChip.setChipIconResource(R.drawable.ic_outline_star_plus_24);
|
locationDetailsBinding.favChip.setChipIconResource(R.drawable.ic_outline_star_plus_24);
|
||||||
message = getString(R.string.removed_from_favs);
|
message = getString(R.string.removed_from_favs);
|
||||||
} else {
|
} else {
|
||||||
Utils.dataBox.addOrUpdateFavorite(new DataBox.FavoriteModel(
|
Utils.dataBox.addOrUpdateFavorite(new DataBox.FavoriteModel(
|
||||||
@ -452,8 +464,8 @@ public class LocationFragment extends Fragment implements SwipeRefreshLayout.OnR
|
|||||||
locationModel.getSdProfilePic(),
|
locationModel.getSdProfilePic(),
|
||||||
new Date()
|
new Date()
|
||||||
));
|
));
|
||||||
binding.favChip.setText(R.string.favorite_short);
|
locationDetailsBinding.favChip.setText(R.string.favorite_short);
|
||||||
binding.favChip.setChipIconResource(R.drawable.ic_star_check_24);
|
locationDetailsBinding.favChip.setChipIconResource(R.drawable.ic_star_check_24);
|
||||||
message = getString(R.string.added_to_favs);
|
message = getString(R.string.added_to_favs);
|
||||||
}
|
}
|
||||||
final Snackbar snackbar = Snackbar.make(root, message, BaseTransientBottomBar.LENGTH_LONG);
|
final Snackbar snackbar = Snackbar.make(root, message, BaseTransientBottomBar.LENGTH_LONG);
|
||||||
@ -462,7 +474,7 @@ public class LocationFragment extends Fragment implements SwipeRefreshLayout.OnR
|
|||||||
.setAnchorView(fragmentActivity.getBottomNavView())
|
.setAnchorView(fragmentActivity.getBottomNavView())
|
||||||
.show();
|
.show();
|
||||||
});
|
});
|
||||||
binding.mainLocationImage.setOnClickListener(v -> {
|
locationDetailsBinding.mainLocationImage.setOnClickListener(v -> {
|
||||||
if (hasStories) {
|
if (hasStories) {
|
||||||
// show stories
|
// show stories
|
||||||
final NavDirections action = LocationFragmentDirections
|
final NavDirections action = LocationFragmentDirections
|
||||||
@ -484,7 +496,7 @@ public class LocationFragment extends Fragment implements SwipeRefreshLayout.OnR
|
|||||||
@Override
|
@Override
|
||||||
public void onSuccess(final List<StoryModel> storyModels) {
|
public void onSuccess(final List<StoryModel> storyModels) {
|
||||||
if (storyModels != null && !storyModels.isEmpty()) {
|
if (storyModels != null && !storyModels.isEmpty()) {
|
||||||
binding.mainLocationImage.setStoriesBorder();
|
locationDetailsBinding.mainLocationImage.setStoriesBorder();
|
||||||
hasStories = true;
|
hasStories = true;
|
||||||
}
|
}
|
||||||
storiesFetching = false;
|
storiesFetching = false;
|
||||||
|
@ -45,7 +45,6 @@ import awais.instagrabber.utils.Utils;
|
|||||||
|
|
||||||
import static androidx.core.content.PermissionChecker.checkSelfPermission;
|
import static androidx.core.content.PermissionChecker.checkSelfPermission;
|
||||||
import static awais.instagrabber.utils.DownloadUtils.WRITE_PERMISSION;
|
import static awais.instagrabber.utils.DownloadUtils.WRITE_PERMISSION;
|
||||||
import static awais.instagrabber.utils.Utils.settingsHelper;
|
|
||||||
|
|
||||||
public final class SavedViewerFragment extends Fragment implements SwipeRefreshLayout.OnRefreshListener {
|
public final class SavedViewerFragment extends Fragment implements SwipeRefreshLayout.OnRefreshListener {
|
||||||
private static final int STORAGE_PERM_REQUEST_CODE = 8020;
|
private static final int STORAGE_PERM_REQUEST_CODE = 8020;
|
||||||
@ -62,7 +61,7 @@ public final class SavedViewerFragment extends Fragment implements SwipeRefreshL
|
|||||||
private Set<FeedModel> selectedFeedModels;
|
private Set<FeedModel> selectedFeedModels;
|
||||||
private FeedModel downloadFeedModel;
|
private FeedModel downloadFeedModel;
|
||||||
private int downloadChildPosition = -1;
|
private int downloadChildPosition = -1;
|
||||||
private PostsLayoutPreferences layoutPreferences = PostsLayoutPreferences.fromJson(settingsHelper.getString(getPostsLayoutPreferenceKey()));
|
private PostsLayoutPreferences layoutPreferences;
|
||||||
|
|
||||||
private final OnBackPressedCallback onBackPressedCallback = new OnBackPressedCallback(false) {
|
private final OnBackPressedCallback onBackPressedCallback = new OnBackPressedCallback(false) {
|
||||||
@Override
|
@Override
|
||||||
@ -275,46 +274,8 @@ public final class SavedViewerFragment extends Fragment implements SwipeRefreshL
|
|||||||
username = fragmentArgs.getUsername();
|
username = fragmentArgs.getUsername();
|
||||||
profileId = fragmentArgs.getProfileId();
|
profileId = fragmentArgs.getProfileId();
|
||||||
type = fragmentArgs.getType();
|
type = fragmentArgs.getType();
|
||||||
|
layoutPreferences = Utils.getPostsLayoutPreferences(getPostsLayoutPreferenceKey());
|
||||||
setupPosts();
|
setupPosts();
|
||||||
// postsAdapter = new PostsAdapter((postModel, position) -> {
|
|
||||||
// if (postsAdapter.isSelecting()) {
|
|
||||||
// if (actionMode == null) return;
|
|
||||||
// final String title = getString(R.string.number_selected, postsAdapter.getSelectedModels().size());
|
|
||||||
// actionMode.setTitle(title);
|
|
||||||
// return;
|
|
||||||
// }
|
|
||||||
// if (checkAndResetAction()) return;
|
|
||||||
// final List<PostModel> postModels = postsViewModel.getList().getValue();
|
|
||||||
// if (postModels == null || postModels.size() == 0) return;
|
|
||||||
// if (postModels.get(0) == null) return;
|
|
||||||
// final String postId = postModels.get(0).getPostId();
|
|
||||||
// final boolean isId = postId != null;
|
|
||||||
// final String[] idsOrShortCodes = new String[postModels.size()];
|
|
||||||
// for (int i = 0; i < postModels.size(); i++) {
|
|
||||||
// final PostModel tempPostModel = postModels.get(i);
|
|
||||||
// final String tempId = tempPostModel.getPostId();
|
|
||||||
// final String finalPostId = type == PostItemType.LIKED ? tempId.substring(0, tempId.indexOf("_")) : tempId;
|
|
||||||
// idsOrShortCodes[i] = isId ? finalPostId
|
|
||||||
// : tempPostModel.getShortCode();
|
|
||||||
// }
|
|
||||||
// final NavDirections action = ProfileFragmentDirections.actionGlobalPostViewFragment(
|
|
||||||
// position,
|
|
||||||
// idsOrShortCodes,
|
|
||||||
// isId);
|
|
||||||
// NavHostFragment.findNavController(this).navigate(action);
|
|
||||||
// }, (model, position) -> {
|
|
||||||
// if (!postsAdapter.isSelecting()) {
|
|
||||||
// checkAndResetAction();
|
|
||||||
// return true;
|
|
||||||
// }
|
|
||||||
// final OnBackPressedDispatcher onBackPressedDispatcher = fragmentActivity.getOnBackPressedDispatcher();
|
|
||||||
// if (onBackPressedCallback.isEnabled()) return true;
|
|
||||||
// actionMode = fragmentActivity.startActionMode(multiSelectAction);
|
|
||||||
// final String title = getString(R.string.number_selected, 1);
|
|
||||||
// actionMode.setTitle(title);
|
|
||||||
// onBackPressedDispatcher.addCallback(getViewLifecycleOwner(), onBackPressedCallback);
|
|
||||||
// return true;
|
|
||||||
// });
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private void setupPosts() {
|
private void setupPosts() {
|
||||||
|
@ -22,6 +22,7 @@ import androidx.activity.OnBackPressedCallback;
|
|||||||
import androidx.activity.OnBackPressedDispatcher;
|
import androidx.activity.OnBackPressedDispatcher;
|
||||||
import androidx.annotation.NonNull;
|
import androidx.annotation.NonNull;
|
||||||
import androidx.annotation.Nullable;
|
import androidx.annotation.Nullable;
|
||||||
|
import androidx.coordinatorlayout.widget.CoordinatorLayout;
|
||||||
import androidx.core.content.PermissionChecker;
|
import androidx.core.content.PermissionChecker;
|
||||||
import androidx.core.graphics.ColorUtils;
|
import androidx.core.graphics.ColorUtils;
|
||||||
import androidx.fragment.app.Fragment;
|
import androidx.fragment.app.Fragment;
|
||||||
@ -46,7 +47,6 @@ import awais.instagrabber.activities.MainActivity;
|
|||||||
import awais.instagrabber.adapters.FeedAdapterV2;
|
import awais.instagrabber.adapters.FeedAdapterV2;
|
||||||
import awais.instagrabber.asyncs.DiscoverPostFetchService;
|
import awais.instagrabber.asyncs.DiscoverPostFetchService;
|
||||||
import awais.instagrabber.customviews.PrimaryActionModeCallback;
|
import awais.instagrabber.customviews.PrimaryActionModeCallback;
|
||||||
import awais.instagrabber.customviews.helpers.NestedCoordinatorLayout;
|
|
||||||
import awais.instagrabber.databinding.FragmentTopicPostsBinding;
|
import awais.instagrabber.databinding.FragmentTopicPostsBinding;
|
||||||
import awais.instagrabber.dialogs.PostsLayoutPreferencesDialogFragment;
|
import awais.instagrabber.dialogs.PostsLayoutPreferencesDialogFragment;
|
||||||
import awais.instagrabber.fragments.main.DiscoverFragmentDirections;
|
import awais.instagrabber.fragments.main.DiscoverFragmentDirections;
|
||||||
@ -68,7 +68,7 @@ public class TopicPostsFragment extends Fragment implements SwipeRefreshLayout.O
|
|||||||
|
|
||||||
private MainActivity fragmentActivity;
|
private MainActivity fragmentActivity;
|
||||||
private FragmentTopicPostsBinding binding;
|
private FragmentTopicPostsBinding binding;
|
||||||
private NestedCoordinatorLayout root;
|
private CoordinatorLayout root;
|
||||||
private boolean shouldRefresh = true;
|
private boolean shouldRefresh = true;
|
||||||
private TopicCluster topicCluster;
|
private TopicCluster topicCluster;
|
||||||
private ActionMode actionMode;
|
private ActionMode actionMode;
|
||||||
|
@ -10,6 +10,7 @@ import android.view.ViewGroup;
|
|||||||
|
|
||||||
import androidx.annotation.NonNull;
|
import androidx.annotation.NonNull;
|
||||||
import androidx.annotation.Nullable;
|
import androidx.annotation.Nullable;
|
||||||
|
import androidx.coordinatorlayout.widget.CoordinatorLayout;
|
||||||
import androidx.fragment.app.Fragment;
|
import androidx.fragment.app.Fragment;
|
||||||
import androidx.fragment.app.FragmentActivity;
|
import androidx.fragment.app.FragmentActivity;
|
||||||
import androidx.lifecycle.MutableLiveData;
|
import androidx.lifecycle.MutableLiveData;
|
||||||
@ -29,7 +30,6 @@ import java.util.List;
|
|||||||
import awais.instagrabber.BuildConfig;
|
import awais.instagrabber.BuildConfig;
|
||||||
import awais.instagrabber.adapters.DirectMessageInboxAdapter;
|
import awais.instagrabber.adapters.DirectMessageInboxAdapter;
|
||||||
import awais.instagrabber.asyncs.direct_messages.InboxFetcher;
|
import awais.instagrabber.asyncs.direct_messages.InboxFetcher;
|
||||||
import awais.instagrabber.customviews.helpers.NestedCoordinatorLayout;
|
|
||||||
import awais.instagrabber.customviews.helpers.RecyclerLazyLoader;
|
import awais.instagrabber.customviews.helpers.RecyclerLazyLoader;
|
||||||
import awais.instagrabber.databinding.FragmentDirectMessagesInboxBinding;
|
import awais.instagrabber.databinding.FragmentDirectMessagesInboxBinding;
|
||||||
import awais.instagrabber.interfaces.FetchListener;
|
import awais.instagrabber.interfaces.FetchListener;
|
||||||
@ -41,7 +41,7 @@ public class DirectMessageInboxFragment extends Fragment implements SwipeRefresh
|
|||||||
private static final String TAG = "DirectMessagesInboxFrag";
|
private static final String TAG = "DirectMessagesInboxFrag";
|
||||||
|
|
||||||
private FragmentActivity fragmentActivity;
|
private FragmentActivity fragmentActivity;
|
||||||
private NestedCoordinatorLayout root;
|
private CoordinatorLayout root;
|
||||||
private RecyclerView inboxList;
|
private RecyclerView inboxList;
|
||||||
private RecyclerLazyLoader lazyLoader;
|
private RecyclerLazyLoader lazyLoader;
|
||||||
private LinearLayoutManager layoutManager;
|
private LinearLayoutManager layoutManager;
|
||||||
|
@ -28,6 +28,7 @@ import androidx.recyclerview.widget.LinearLayoutManager;
|
|||||||
import androidx.recyclerview.widget.RecyclerView;
|
import androidx.recyclerview.widget.RecyclerView;
|
||||||
import androidx.swiperefreshlayout.widget.SwipeRefreshLayout;
|
import androidx.swiperefreshlayout.widget.SwipeRefreshLayout;
|
||||||
|
|
||||||
|
import com.google.android.material.appbar.CollapsingToolbarLayout;
|
||||||
import com.google.common.collect.ImmutableList;
|
import com.google.common.collect.ImmutableList;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
@ -73,6 +74,7 @@ public class FeedFragment extends Fragment implements SwipeRefreshLayout.OnRefre
|
|||||||
private FeedModel downloadFeedModel;
|
private FeedModel downloadFeedModel;
|
||||||
private int downloadChildPosition = -1;
|
private int downloadChildPosition = -1;
|
||||||
private PostsLayoutPreferences layoutPreferences = PostsLayoutPreferences.fromJson(settingsHelper.getString(Constants.PREF_POSTS_LAYOUT));
|
private PostsLayoutPreferences layoutPreferences = PostsLayoutPreferences.fromJson(settingsHelper.getString(Constants.PREF_POSTS_LAYOUT));
|
||||||
|
private RecyclerView storiesRecyclerView;
|
||||||
|
|
||||||
private final FeedAdapterV2.FeedItemCallback feedItemCallback = new FeedAdapterV2.FeedItemCallback() {
|
private final FeedAdapterV2.FeedItemCallback feedItemCallback = new FeedAdapterV2.FeedItemCallback() {
|
||||||
@Override
|
@Override
|
||||||
@ -249,6 +251,9 @@ public class FeedFragment extends Fragment implements SwipeRefreshLayout.OnRefre
|
|||||||
final Bundle savedInstanceState) {
|
final Bundle savedInstanceState) {
|
||||||
if (root != null) {
|
if (root != null) {
|
||||||
shouldRefresh = false;
|
shouldRefresh = false;
|
||||||
|
if (storiesRecyclerView != null) {
|
||||||
|
fragmentActivity.setCollapsingView(storiesRecyclerView);
|
||||||
|
}
|
||||||
return root;
|
return root;
|
||||||
}
|
}
|
||||||
binding = FragmentFeedBinding.inflate(inflater, container, false);
|
binding = FragmentFeedBinding.inflate(inflater, container, false);
|
||||||
@ -279,18 +284,10 @@ public class FeedFragment extends Fragment implements SwipeRefreshLayout.OnRefre
|
|||||||
return super.onOptionsItemSelected(item);
|
return super.onOptionsItemSelected(item);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onPause() {
|
|
||||||
super.onPause();
|
|
||||||
// if (videoAwareRecyclerScroller != null) {
|
|
||||||
// videoAwareRecyclerScroller.stopPlaying();
|
|
||||||
// }
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onResume() {
|
public void onResume() {
|
||||||
super.onResume();
|
super.onResume();
|
||||||
binding.feedSwipeRefreshLayout.setRefreshing(false);
|
updateSwipeRefreshState();
|
||||||
// if (videoAwareRecyclerScroller != null && shouldAutoPlay) {
|
// if (videoAwareRecyclerScroller != null && shouldAutoPlay) {
|
||||||
// videoAwareRecyclerScroller.startPlaying();
|
// videoAwareRecyclerScroller.startPlaying();
|
||||||
// }
|
// }
|
||||||
@ -302,6 +299,14 @@ public class FeedFragment extends Fragment implements SwipeRefreshLayout.OnRefre
|
|||||||
fetchStories();
|
fetchStories();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onDestroyView() {
|
||||||
|
super.onDestroyView();
|
||||||
|
if (storiesRecyclerView != null) {
|
||||||
|
fragmentActivity.removeCollapsingView(storiesRecyclerView);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onRequestPermissionsResult(final int requestCode, @NonNull final String[] permissions, @NonNull final int[] grantResults) {
|
public void onRequestPermissionsResult(final int requestCode, @NonNull final String[] permissions, @NonNull final int[] grantResults) {
|
||||||
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
|
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
|
||||||
@ -349,8 +354,15 @@ public class FeedFragment extends Fragment implements SwipeRefreshLayout.OnRefre
|
|||||||
});
|
});
|
||||||
final Context context = getContext();
|
final Context context = getContext();
|
||||||
if (context == null) return;
|
if (context == null) return;
|
||||||
binding.feedStoriesRecyclerView.setLayoutManager(new LinearLayoutManager(context, RecyclerView.HORIZONTAL, false));
|
storiesRecyclerView = new RecyclerView(context);
|
||||||
binding.feedStoriesRecyclerView.setAdapter(feedStoriesAdapter);
|
final CollapsingToolbarLayout.LayoutParams params = new CollapsingToolbarLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT,
|
||||||
|
ViewGroup.LayoutParams.WRAP_CONTENT);
|
||||||
|
params.setMargins(0, Utils.getActionBarHeight(context), 0, 0);
|
||||||
|
storiesRecyclerView.setLayoutParams(params);
|
||||||
|
storiesRecyclerView.setClipToPadding(false);
|
||||||
|
storiesRecyclerView.setLayoutManager(new LinearLayoutManager(context, RecyclerView.HORIZONTAL, false));
|
||||||
|
storiesRecyclerView.setAdapter(feedStoriesAdapter);
|
||||||
|
fragmentActivity.setCollapsingView(storiesRecyclerView);
|
||||||
feedStoriesViewModel.getList().observe(fragmentActivity, feedStoriesAdapter::submitList);
|
feedStoriesViewModel.getList().observe(fragmentActivity, feedStoriesAdapter::submitList);
|
||||||
fetchStories();
|
fetchStories();
|
||||||
}
|
}
|
||||||
@ -387,6 +399,6 @@ public class FeedFragment extends Fragment implements SwipeRefreshLayout.OnRefre
|
|||||||
|
|
||||||
public void scrollToTop() {
|
public void scrollToTop() {
|
||||||
binding.feedRecyclerView.smoothScrollToPosition(0);
|
binding.feedRecyclerView.smoothScrollToPosition(0);
|
||||||
binding.storiesContainer.setExpanded(true);
|
// binding.storiesContainer.setExpanded(true);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -60,8 +60,8 @@ import awais.instagrabber.asyncs.UsernameFetcher;
|
|||||||
import awais.instagrabber.asyncs.direct_messages.CreateThreadAction;
|
import awais.instagrabber.asyncs.direct_messages.CreateThreadAction;
|
||||||
import awais.instagrabber.customviews.PrimaryActionModeCallback;
|
import awais.instagrabber.customviews.PrimaryActionModeCallback;
|
||||||
import awais.instagrabber.customviews.PrimaryActionModeCallback.CallbacksHelper;
|
import awais.instagrabber.customviews.PrimaryActionModeCallback.CallbacksHelper;
|
||||||
import awais.instagrabber.customviews.helpers.NestedCoordinatorLayout;
|
|
||||||
import awais.instagrabber.databinding.FragmentProfileBinding;
|
import awais.instagrabber.databinding.FragmentProfileBinding;
|
||||||
|
import awais.instagrabber.databinding.LayoutProfileDetailsBinding;
|
||||||
import awais.instagrabber.dialogs.PostsLayoutPreferencesDialogFragment;
|
import awais.instagrabber.dialogs.PostsLayoutPreferencesDialogFragment;
|
||||||
import awais.instagrabber.dialogs.ProfilePicDialogFragment;
|
import awais.instagrabber.dialogs.ProfilePicDialogFragment;
|
||||||
import awais.instagrabber.fragments.PostViewV2Fragment;
|
import awais.instagrabber.fragments.PostViewV2Fragment;
|
||||||
@ -281,6 +281,7 @@ public class ProfileFragment extends Fragment implements SwipeRefreshLayout.OnRe
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
private LayoutProfileDetailsBinding profileDetailsBinding;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onCreate(@Nullable final Bundle savedInstanceState) {
|
public void onCreate(@Nullable final Bundle savedInstanceState) {
|
||||||
@ -306,21 +307,26 @@ public class ProfileFragment extends Fragment implements SwipeRefreshLayout.OnRe
|
|||||||
final boolean isSame = ("@" + profileModelUsername).equals(this.username);
|
final boolean isSame = ("@" + profileModelUsername).equals(this.username);
|
||||||
if (isSame) {
|
if (isSame) {
|
||||||
setUsernameDelayed();
|
setUsernameDelayed();
|
||||||
|
fragmentActivity.setCollapsingView(profileDetailsBinding.getRoot());
|
||||||
shouldRefresh = false;
|
shouldRefresh = false;
|
||||||
return root;
|
return root;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (username == null || !username.equals(this.username)) {
|
if (username == null || !username.equals(this.username)) {
|
||||||
|
fragmentActivity.setCollapsingView(profileDetailsBinding.getRoot());
|
||||||
shouldRefresh = true;
|
shouldRefresh = true;
|
||||||
return root;
|
return root;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
setUsernameDelayed();
|
setUsernameDelayed();
|
||||||
|
fragmentActivity.setCollapsingView(profileDetailsBinding.getRoot());
|
||||||
shouldRefresh = false;
|
shouldRefresh = false;
|
||||||
return root;
|
return root;
|
||||||
}
|
}
|
||||||
binding = FragmentProfileBinding.inflate(inflater, container, false);
|
binding = FragmentProfileBinding.inflate(inflater, container, false);
|
||||||
root = binding.getRoot();
|
root = binding.getRoot();
|
||||||
|
profileDetailsBinding = LayoutProfileDetailsBinding.inflate(inflater, fragmentActivity.getCollapsingToolbarView(), false);
|
||||||
|
fragmentActivity.setCollapsingView(profileDetailsBinding.getRoot());
|
||||||
return root;
|
return root;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -431,6 +437,14 @@ public class ProfileFragment extends Fragment implements SwipeRefreshLayout.OnRe
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onDestroyView() {
|
||||||
|
super.onDestroyView();
|
||||||
|
if (profileDetailsBinding != null) {
|
||||||
|
fragmentActivity.removeCollapsingView(profileDetailsBinding.getRoot());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onRequestPermissionsResult(final int requestCode, @NonNull final String[] permissions, @NonNull final int[] grantResults) {
|
public void onRequestPermissionsResult(final int requestCode, @NonNull final String[] permissions, @NonNull final int[] grantResults) {
|
||||||
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
|
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
|
||||||
@ -457,11 +471,11 @@ public class ProfileFragment extends Fragment implements SwipeRefreshLayout.OnRe
|
|||||||
setUsernameDelayed();
|
setUsernameDelayed();
|
||||||
}
|
}
|
||||||
if (TextUtils.isEmpty(username) && !isLoggedIn) {
|
if (TextUtils.isEmpty(username) && !isLoggedIn) {
|
||||||
binding.infoContainer.setVisibility(View.GONE);
|
profileDetailsBinding.infoContainer.setVisibility(View.GONE);
|
||||||
binding.swipeRefreshLayout.setEnabled(false);
|
binding.swipeRefreshLayout.setEnabled(false);
|
||||||
binding.privatePage1.setImageResource(R.drawable.ic_outline_info_24);
|
binding.privatePage1.setImageResource(R.drawable.ic_outline_info_24);
|
||||||
binding.privatePage2.setText(R.string.no_acc);
|
binding.privatePage2.setText(R.string.no_acc);
|
||||||
final NestedCoordinatorLayout.LayoutParams layoutParams = (NestedCoordinatorLayout.LayoutParams) binding.privatePage.getLayoutParams();
|
final CoordinatorLayout.LayoutParams layoutParams = (CoordinatorLayout.LayoutParams) binding.privatePage.getLayoutParams();
|
||||||
layoutParams.topMargin = 0;
|
layoutParams.topMargin = 0;
|
||||||
binding.privatePage.setLayoutParams(layoutParams);
|
binding.privatePage.setLayoutParams(layoutParams);
|
||||||
binding.privatePage.setVisibility(View.VISIBLE);
|
binding.privatePage.setVisibility(View.VISIBLE);
|
||||||
@ -531,7 +545,7 @@ public class ProfileFragment extends Fragment implements SwipeRefreshLayout.OnRe
|
|||||||
} else {
|
} else {
|
||||||
binding.postsRecyclerView.refresh();
|
binding.postsRecyclerView.refresh();
|
||||||
}
|
}
|
||||||
binding.isVerified.setVisibility(profileModel.isVerified() ? View.VISIBLE : View.GONE);
|
profileDetailsBinding.isVerified.setVisibility(profileModel.isVerified() ? View.VISIBLE : View.GONE);
|
||||||
final String profileId = profileModel.getId();
|
final String profileId = profileModel.getId();
|
||||||
final String myId = CookieUtils.getUserIdFromCookie(cookie);
|
final String myId = CookieUtils.getUserIdFromCookie(cookie);
|
||||||
if (isLoggedIn) {
|
if (isLoggedIn) {
|
||||||
@ -539,14 +553,14 @@ public class ProfileFragment extends Fragment implements SwipeRefreshLayout.OnRe
|
|||||||
}
|
}
|
||||||
setupButtons(profileId, myId);
|
setupButtons(profileId, myId);
|
||||||
if (!profileId.equals(myId)) {
|
if (!profileId.equals(myId)) {
|
||||||
binding.favCb.setVisibility(View.VISIBLE);
|
profileDetailsBinding.favCb.setVisibility(View.VISIBLE);
|
||||||
final boolean isFav = Utils.dataBox.getFavorite(username.substring(1), FavoriteType.USER) != null;
|
final boolean isFav = Utils.dataBox.getFavorite(username.substring(1), FavoriteType.USER) != null;
|
||||||
binding.favCb.setChecked(isFav);
|
profileDetailsBinding.favCb.setChecked(isFav);
|
||||||
binding.favCb.setButtonDrawable(isFav ? R.drawable.ic_star_check_24 : R.drawable.ic_outline_star_plus_24);
|
profileDetailsBinding.favCb.setButtonDrawable(isFav ? R.drawable.ic_star_check_24 : R.drawable.ic_outline_star_plus_24);
|
||||||
} else {
|
} else {
|
||||||
binding.favCb.setVisibility(View.GONE);
|
profileDetailsBinding.favCb.setVisibility(View.GONE);
|
||||||
}
|
}
|
||||||
binding.mainProfileImage.setImageURI(profileModel.getHdProfilePic());
|
profileDetailsBinding.mainProfileImage.setImageURI(profileModel.getHdProfilePic());
|
||||||
|
|
||||||
final long followersCount = profileModel.getFollowersCount();
|
final long followersCount = profileModel.getFollowersCount();
|
||||||
final long followingCount = profileModel.getFollowingCount();
|
final long followingCount = profileModel.getFollowingCount();
|
||||||
@ -557,7 +571,7 @@ public class ProfileFragment extends Fragment implements SwipeRefreshLayout.OnRe
|
|||||||
postCount));
|
postCount));
|
||||||
span.setSpan(new RelativeSizeSpan(1.2f), 0, postCount.length(), 0);
|
span.setSpan(new RelativeSizeSpan(1.2f), 0, postCount.length(), 0);
|
||||||
span.setSpan(new StyleSpan(Typeface.BOLD), 0, postCount.length(), 0);
|
span.setSpan(new StyleSpan(Typeface.BOLD), 0, postCount.length(), 0);
|
||||||
binding.mainPostCount.setText(span);
|
profileDetailsBinding.mainPostCount.setText(span);
|
||||||
|
|
||||||
final String followersCountStr = String.valueOf(followersCount);
|
final String followersCountStr = String.valueOf(followersCount);
|
||||||
final int followersCountStrLen = followersCountStr.length();
|
final int followersCountStrLen = followersCountStr.length();
|
||||||
@ -565,7 +579,7 @@ public class ProfileFragment extends Fragment implements SwipeRefreshLayout.OnRe
|
|||||||
followersCountStr));
|
followersCountStr));
|
||||||
span.setSpan(new RelativeSizeSpan(1.2f), 0, followersCountStrLen, 0);
|
span.setSpan(new RelativeSizeSpan(1.2f), 0, followersCountStrLen, 0);
|
||||||
span.setSpan(new StyleSpan(Typeface.BOLD), 0, followersCountStrLen, 0);
|
span.setSpan(new StyleSpan(Typeface.BOLD), 0, followersCountStrLen, 0);
|
||||||
binding.mainFollowers.setText(span);
|
profileDetailsBinding.mainFollowers.setText(span);
|
||||||
|
|
||||||
final String followingCountStr = String.valueOf(followingCount);
|
final String followingCountStr = String.valueOf(followingCount);
|
||||||
final int followingCountStrLen = followingCountStr.length();
|
final int followingCountStrLen = followingCountStr.length();
|
||||||
@ -573,68 +587,70 @@ public class ProfileFragment extends Fragment implements SwipeRefreshLayout.OnRe
|
|||||||
followingCountStr));
|
followingCountStr));
|
||||||
span.setSpan(new RelativeSizeSpan(1.2f), 0, followingCountStrLen, 0);
|
span.setSpan(new RelativeSizeSpan(1.2f), 0, followingCountStrLen, 0);
|
||||||
span.setSpan(new StyleSpan(Typeface.BOLD), 0, followingCountStrLen, 0);
|
span.setSpan(new StyleSpan(Typeface.BOLD), 0, followingCountStrLen, 0);
|
||||||
binding.mainFollowing.setText(span);
|
profileDetailsBinding.mainFollowing.setText(span);
|
||||||
|
|
||||||
binding.mainFullName.setText(TextUtils.isEmpty(profileModel.getName()) ? profileModel.getUsername()
|
profileDetailsBinding.mainFullName.setText(TextUtils.isEmpty(profileModel.getName()) ? profileModel.getUsername()
|
||||||
: profileModel.getName());
|
: profileModel.getName());
|
||||||
|
|
||||||
final String biography = profileModel.getBiography();
|
final String biography = profileModel.getBiography();
|
||||||
if (!TextUtils.isEmpty(biography)) {
|
if (!TextUtils.isEmpty(biography)) {
|
||||||
binding.mainBiography.setText(biography);
|
profileDetailsBinding.mainBiography.setText(biography);
|
||||||
binding.mainBiography.addOnHashtagListener(autoLinkItem -> {
|
profileDetailsBinding.mainBiography.addOnHashtagListener(autoLinkItem -> {
|
||||||
final NavController navController = NavHostFragment.findNavController(this);
|
final NavController navController = NavHostFragment.findNavController(this);
|
||||||
final Bundle bundle = new Bundle();
|
final Bundle bundle = new Bundle();
|
||||||
final String originalText = autoLinkItem.getOriginalText().trim();
|
final String originalText = autoLinkItem.getOriginalText().trim();
|
||||||
bundle.putString(ARG_HASHTAG, originalText);
|
bundle.putString(ARG_HASHTAG, originalText);
|
||||||
navController.navigate(R.id.action_global_hashTagFragment, bundle);
|
navController.navigate(R.id.action_global_hashTagFragment, bundle);
|
||||||
});
|
});
|
||||||
binding.mainBiography.addOnMentionClickListener(autoLinkItem -> {
|
profileDetailsBinding.mainBiography.addOnMentionClickListener(autoLinkItem -> {
|
||||||
final String originalText = autoLinkItem.getOriginalText().trim();
|
final String originalText = autoLinkItem.getOriginalText().trim();
|
||||||
navigateToProfile(originalText);
|
navigateToProfile(originalText);
|
||||||
});
|
});
|
||||||
binding.mainBiography.addOnEmailClickListener(autoLinkItem -> Utils.openEmailAddress(getContext(),
|
profileDetailsBinding.mainBiography.addOnEmailClickListener(autoLinkItem -> Utils.openEmailAddress(getContext(),
|
||||||
autoLinkItem.getOriginalText().trim()));
|
autoLinkItem.getOriginalText()
|
||||||
binding.mainBiography.addOnURLClickListener(autoLinkItem -> Utils.openURL(getContext(), autoLinkItem.getOriginalText().trim()));
|
.trim()));
|
||||||
binding.mainBiography.setOnLongClickListener(v -> {
|
profileDetailsBinding.mainBiography
|
||||||
|
.addOnURLClickListener(autoLinkItem -> Utils.openURL(getContext(), autoLinkItem.getOriginalText().trim()));
|
||||||
|
profileDetailsBinding.mainBiography.setOnLongClickListener(v -> {
|
||||||
if (context != null) Utils.copyText(context, biography);
|
if (context != null) Utils.copyText(context, biography);
|
||||||
return true;
|
return true;
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
final String url = profileModel.getUrl();
|
final String url = profileModel.getUrl();
|
||||||
if (TextUtils.isEmpty(url)) {
|
if (TextUtils.isEmpty(url)) {
|
||||||
binding.mainUrl.setVisibility(View.GONE);
|
profileDetailsBinding.mainUrl.setVisibility(View.GONE);
|
||||||
} else {
|
} else {
|
||||||
binding.mainUrl.setVisibility(View.VISIBLE);
|
profileDetailsBinding.mainUrl.setVisibility(View.VISIBLE);
|
||||||
binding.mainUrl.setText(url);
|
profileDetailsBinding.mainUrl.setText(url);
|
||||||
binding.mainUrl.addOnURLClickListener(autoLinkItem -> Utils.openURL(getContext(), autoLinkItem.getOriginalText().trim()));
|
profileDetailsBinding.mainUrl.addOnURLClickListener(autoLinkItem -> Utils.openURL(getContext(), autoLinkItem.getOriginalText().trim()));
|
||||||
binding.mainUrl.setOnLongClickListener(v -> {
|
profileDetailsBinding.mainUrl.setOnLongClickListener(v -> {
|
||||||
if (context != null) Utils.copyText(context, url);
|
if (context != null) Utils.copyText(context, url);
|
||||||
return true;
|
return true;
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
if (!profileModel.isReallyPrivate()) {
|
if (!profileModel.isReallyPrivate()) {
|
||||||
binding.mainFollowing.setClickable(true);
|
profileDetailsBinding.mainFollowing.setClickable(true);
|
||||||
binding.mainFollowers.setClickable(true);
|
profileDetailsBinding.mainFollowers.setClickable(true);
|
||||||
|
|
||||||
if (isLoggedIn) {
|
if (isLoggedIn) {
|
||||||
final View.OnClickListener followClickListener = v -> {
|
final View.OnClickListener followClickListener = v -> {
|
||||||
final NavDirections action = ProfileFragmentDirections.actionProfileFragmentToFollowViewerFragment(
|
final NavDirections action = ProfileFragmentDirections.actionProfileFragmentToFollowViewerFragment(
|
||||||
profileId,
|
profileId,
|
||||||
v == binding.mainFollowers,
|
v == profileDetailsBinding.mainFollowers,
|
||||||
profileModel.getUsername());
|
profileModel.getUsername());
|
||||||
NavHostFragment.findNavController(this).navigate(action);
|
NavHostFragment.findNavController(this).navigate(action);
|
||||||
};
|
};
|
||||||
|
|
||||||
binding.mainFollowers.setOnClickListener(followersCount > 0 ? followClickListener : null);
|
profileDetailsBinding.mainFollowers.setOnClickListener(followersCount > 0 ? followClickListener : null);
|
||||||
binding.mainFollowing.setOnClickListener(followingCount > 0 ? followClickListener : null);
|
profileDetailsBinding.mainFollowing.setOnClickListener(followingCount > 0 ? followClickListener : null);
|
||||||
}
|
}
|
||||||
|
|
||||||
binding.swipeRefreshLayout.setRefreshing(true);
|
binding.swipeRefreshLayout.setRefreshing(true);
|
||||||
binding.postsRecyclerView.setVisibility(View.VISIBLE);
|
binding.postsRecyclerView.setVisibility(View.VISIBLE);
|
||||||
fetchPosts();
|
fetchPosts();
|
||||||
} else {
|
} else {
|
||||||
binding.mainFollowers.setClickable(false);
|
profileDetailsBinding.mainFollowers.setClickable(false);
|
||||||
binding.mainFollowing.setClickable(false);
|
profileDetailsBinding.mainFollowing.setClickable(false);
|
||||||
binding.swipeRefreshLayout.setRefreshing(false);
|
binding.swipeRefreshLayout.setRefreshing(false);
|
||||||
// error
|
// error
|
||||||
binding.privatePage1.setImageResource(R.drawable.lock);
|
binding.privatePage1.setImageResource(R.drawable.lock);
|
||||||
@ -647,27 +663,27 @@ public class ProfileFragment extends Fragment implements SwipeRefreshLayout.OnRe
|
|||||||
private void setupButtons(final String profileId, final String myId) {
|
private void setupButtons(final String profileId, final String myId) {
|
||||||
if (isLoggedIn) {
|
if (isLoggedIn) {
|
||||||
if (profileId.equals(myId)) {
|
if (profileId.equals(myId)) {
|
||||||
binding.btnTagged.setVisibility(View.VISIBLE);
|
profileDetailsBinding.btnTagged.setVisibility(View.VISIBLE);
|
||||||
binding.btnSaved.setVisibility(View.VISIBLE);
|
profileDetailsBinding.btnSaved.setVisibility(View.VISIBLE);
|
||||||
binding.btnLiked.setVisibility(View.VISIBLE);
|
profileDetailsBinding.btnLiked.setVisibility(View.VISIBLE);
|
||||||
binding.btnDM.setVisibility(View.GONE);
|
profileDetailsBinding.btnDM.setVisibility(View.GONE);
|
||||||
binding.btnSaved.setText(R.string.saved);
|
profileDetailsBinding.btnSaved.setText(R.string.saved);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
binding.btnTagged.setVisibility(View.GONE);
|
profileDetailsBinding.btnTagged.setVisibility(View.GONE);
|
||||||
binding.btnSaved.setVisibility(View.GONE);
|
profileDetailsBinding.btnSaved.setVisibility(View.GONE);
|
||||||
binding.btnLiked.setVisibility(View.GONE);
|
profileDetailsBinding.btnLiked.setVisibility(View.GONE);
|
||||||
binding.btnDM.setVisibility(View.VISIBLE); // maybe there is a judgment mechanism?
|
profileDetailsBinding.btnDM.setVisibility(View.VISIBLE); // maybe there is a judgment mechanism?
|
||||||
binding.btnFollow.setVisibility(View.VISIBLE);
|
profileDetailsBinding.btnFollow.setVisibility(View.VISIBLE);
|
||||||
if (profileModel.getFollowing()) {
|
if (profileModel.getFollowing()) {
|
||||||
binding.btnFollow.setText(R.string.unfollow);
|
profileDetailsBinding.btnFollow.setText(R.string.unfollow);
|
||||||
binding.btnFollow.setIconResource(R.drawable.ic_outline_person_add_disabled_24);
|
profileDetailsBinding.btnFollow.setIconResource(R.drawable.ic_outline_person_add_disabled_24);
|
||||||
} else if (profileModel.getRequested()) {
|
} else if (profileModel.getRequested()) {
|
||||||
binding.btnFollow.setText(R.string.cancel);
|
profileDetailsBinding.btnFollow.setText(R.string.cancel);
|
||||||
binding.btnFollow.setIconResource(R.drawable.ic_outline_person_add_disabled_24);
|
profileDetailsBinding.btnFollow.setIconResource(R.drawable.ic_outline_person_add_disabled_24);
|
||||||
} else {
|
} else {
|
||||||
binding.btnFollow.setText(R.string.follow);
|
profileDetailsBinding.btnFollow.setText(R.string.follow);
|
||||||
binding.btnFollow.setIconResource(R.drawable.ic_outline_person_add_24);
|
profileDetailsBinding.btnFollow.setIconResource(R.drawable.ic_outline_person_add_24);
|
||||||
}
|
}
|
||||||
if (restrictMenuItem != null) {
|
if (restrictMenuItem != null) {
|
||||||
restrictMenuItem.setVisible(true);
|
restrictMenuItem.setVisible(true);
|
||||||
@ -677,7 +693,7 @@ public class ProfileFragment extends Fragment implements SwipeRefreshLayout.OnRe
|
|||||||
restrictMenuItem.setTitle(R.string.restrict);
|
restrictMenuItem.setTitle(R.string.restrict);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
binding.btnTagged.setVisibility(profileModel.isReallyPrivate() ? View.GONE : View.VISIBLE);
|
profileDetailsBinding.btnTagged.setVisibility(profileModel.isReallyPrivate() ? View.GONE : View.VISIBLE);
|
||||||
if (blockMenuItem != null) {
|
if (blockMenuItem != null) {
|
||||||
blockMenuItem.setVisible(true);
|
blockMenuItem.setVisible(true);
|
||||||
if (profileModel.getBlocked()) {
|
if (profileModel.getBlocked()) {
|
||||||
@ -708,7 +724,7 @@ public class ProfileFragment extends Fragment implements SwipeRefreshLayout.OnRe
|
|||||||
@Override
|
@Override
|
||||||
public void onSuccess(final List<StoryModel> storyModels) {
|
public void onSuccess(final List<StoryModel> storyModels) {
|
||||||
if (storyModels != null && !storyModels.isEmpty()) {
|
if (storyModels != null && !storyModels.isEmpty()) {
|
||||||
binding.mainProfileImage.setStoriesBorder();
|
profileDetailsBinding.mainProfileImage.setStoriesBorder();
|
||||||
hasStories = true;
|
hasStories = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -722,15 +738,15 @@ public class ProfileFragment extends Fragment implements SwipeRefreshLayout.OnRe
|
|||||||
result -> {
|
result -> {
|
||||||
highlightsFetching = false;
|
highlightsFetching = false;
|
||||||
if (result != null) {
|
if (result != null) {
|
||||||
binding.highlightsList.setVisibility(View.VISIBLE);
|
profileDetailsBinding.highlightsList.setVisibility(View.VISIBLE);
|
||||||
highlightsViewModel.getList().postValue(result);
|
highlightsViewModel.getList().postValue(result);
|
||||||
} else binding.highlightsList.setVisibility(View.GONE);
|
} else profileDetailsBinding.highlightsList.setVisibility(View.GONE);
|
||||||
}).executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
|
}).executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void setupCommonListeners() {
|
private void setupCommonListeners() {
|
||||||
final String userIdFromCookie = CookieUtils.getUserIdFromCookie(cookie);
|
final String userIdFromCookie = CookieUtils.getUserIdFromCookie(cookie);
|
||||||
binding.btnFollow.setOnClickListener(v -> {
|
profileDetailsBinding.btnFollow.setOnClickListener(v -> {
|
||||||
if (profileModel.getFollowing() || profileModel.getRequested()) {
|
if (profileModel.getFollowing() || profileModel.getRequested()) {
|
||||||
friendshipService.unfollow(
|
friendshipService.unfollow(
|
||||||
userIdFromCookie,
|
userIdFromCookie,
|
||||||
@ -767,29 +783,29 @@ public class ProfileFragment extends Fragment implements SwipeRefreshLayout.OnRe
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
binding.btnSaved.setOnClickListener(v -> {
|
profileDetailsBinding.btnSaved.setOnClickListener(v -> {
|
||||||
final NavDirections action = ProfileFragmentDirections.actionProfileFragmentToSavedViewerFragment(profileModel.getUsername(),
|
final NavDirections action = ProfileFragmentDirections.actionProfileFragmentToSavedViewerFragment(profileModel.getUsername(),
|
||||||
profileModel.getId(),
|
profileModel.getId(),
|
||||||
PostItemType.SAVED);
|
PostItemType.SAVED);
|
||||||
NavHostFragment.findNavController(this).navigate(action);
|
NavHostFragment.findNavController(this).navigate(action);
|
||||||
});
|
});
|
||||||
binding.btnLiked.setOnClickListener(v -> {
|
profileDetailsBinding.btnLiked.setOnClickListener(v -> {
|
||||||
final NavDirections action = ProfileFragmentDirections.actionProfileFragmentToSavedViewerFragment(profileModel.getUsername(),
|
final NavDirections action = ProfileFragmentDirections.actionProfileFragmentToSavedViewerFragment(profileModel.getUsername(),
|
||||||
profileModel.getId(),
|
profileModel.getId(),
|
||||||
PostItemType.LIKED);
|
PostItemType.LIKED);
|
||||||
NavHostFragment.findNavController(this).navigate(action);
|
NavHostFragment.findNavController(this).navigate(action);
|
||||||
});
|
});
|
||||||
binding.btnTagged.setOnClickListener(v -> {
|
profileDetailsBinding.btnTagged.setOnClickListener(v -> {
|
||||||
final NavDirections action = ProfileFragmentDirections.actionProfileFragmentToSavedViewerFragment(profileModel.getUsername(),
|
final NavDirections action = ProfileFragmentDirections.actionProfileFragmentToSavedViewerFragment(profileModel.getUsername(),
|
||||||
profileModel.getId(),
|
profileModel.getId(),
|
||||||
PostItemType.TAGGED);
|
PostItemType.TAGGED);
|
||||||
NavHostFragment.findNavController(this).navigate(action);
|
NavHostFragment.findNavController(this).navigate(action);
|
||||||
});
|
});
|
||||||
binding.btnDM.setOnClickListener(v -> new CreateThreadAction(cookie, profileModel.getId(), threadId -> {
|
profileDetailsBinding.btnDM.setOnClickListener(v -> new CreateThreadAction(cookie, profileModel.getId(), threadId -> {
|
||||||
final NavDirections action = ProfileFragmentDirections.actionProfileFragmentToDMThreadFragment(threadId, profileModel.getUsername());
|
final NavDirections action = ProfileFragmentDirections.actionProfileFragmentToDMThreadFragment(threadId, profileModel.getUsername());
|
||||||
NavHostFragment.findNavController(this).navigate(action);
|
NavHostFragment.findNavController(this).navigate(action);
|
||||||
}).execute());
|
}).execute());
|
||||||
binding.mainProfileImage.setOnClickListener(v -> {
|
profileDetailsBinding.mainProfileImage.setOnClickListener(v -> {
|
||||||
if (!hasStories) {
|
if (!hasStories) {
|
||||||
// show profile pic
|
// show profile pic
|
||||||
showProfilePicDialog();
|
showProfilePicDialog();
|
||||||
@ -818,7 +834,7 @@ public class ProfileFragment extends Fragment implements SwipeRefreshLayout.OnRe
|
|||||||
.setNegativeButton(R.string.cancel, null)
|
.setNegativeButton(R.string.cancel, null)
|
||||||
.show();
|
.show();
|
||||||
});
|
});
|
||||||
binding.favCb.setOnCheckedChangeListener((buttonView, isChecked) -> {
|
profileDetailsBinding.favCb.setOnCheckedChangeListener((buttonView, isChecked) -> {
|
||||||
// do not do anything if state matches the db, as listener is set before profile details are set
|
// do not do anything if state matches the db, as listener is set before profile details are set
|
||||||
final String finalUsername = username.startsWith("@") ? username.substring(1) : username;
|
final String finalUsername = username.startsWith("@") ? username.substring(1) : username;
|
||||||
final DataBox.FavoriteModel favorite = Utils.dataBox.getFavorite(finalUsername, FavoriteType.USER);
|
final DataBox.FavoriteModel favorite = Utils.dataBox.getFavorite(finalUsername, FavoriteType.USER);
|
||||||
@ -826,7 +842,7 @@ public class ProfileFragment extends Fragment implements SwipeRefreshLayout.OnRe
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
buttonView.setVisibility(View.GONE);
|
buttonView.setVisibility(View.GONE);
|
||||||
binding.favProgress.setVisibility(View.VISIBLE);
|
profileDetailsBinding.favProgress.setVisibility(View.VISIBLE);
|
||||||
final String message;
|
final String message;
|
||||||
if (isChecked) {
|
if (isChecked) {
|
||||||
final DataBox.FavoriteModel model = new DataBox.FavoriteModel(
|
final DataBox.FavoriteModel model = new DataBox.FavoriteModel(
|
||||||
@ -838,20 +854,20 @@ public class ProfileFragment extends Fragment implements SwipeRefreshLayout.OnRe
|
|||||||
new Date()
|
new Date()
|
||||||
);
|
);
|
||||||
Utils.dataBox.addOrUpdateFavorite(model);
|
Utils.dataBox.addOrUpdateFavorite(model);
|
||||||
binding.favCb.setButtonDrawable(R.drawable.ic_star_check_24);
|
profileDetailsBinding.favCb.setButtonDrawable(R.drawable.ic_star_check_24);
|
||||||
message = getString(R.string.added_to_favs);
|
message = getString(R.string.added_to_favs);
|
||||||
} else {
|
} else {
|
||||||
Utils.dataBox.deleteFavorite(finalUsername, FavoriteType.USER);
|
Utils.dataBox.deleteFavorite(finalUsername, FavoriteType.USER);
|
||||||
message = getString(R.string.removed_from_favs);
|
message = getString(R.string.removed_from_favs);
|
||||||
binding.favCb.setButtonDrawable(R.drawable.ic_outline_star_plus_24);
|
profileDetailsBinding.favCb.setButtonDrawable(R.drawable.ic_outline_star_plus_24);
|
||||||
}
|
}
|
||||||
final Snackbar snackbar = Snackbar.make(root, message, BaseTransientBottomBar.LENGTH_LONG);
|
final Snackbar snackbar = Snackbar.make(root, message, BaseTransientBottomBar.LENGTH_LONG);
|
||||||
snackbar.setAction(R.string.ok, v -> snackbar.dismiss())
|
snackbar.setAction(R.string.ok, v -> snackbar.dismiss())
|
||||||
.setAnimationMode(BaseTransientBottomBar.ANIMATION_MODE_SLIDE)
|
.setAnimationMode(BaseTransientBottomBar.ANIMATION_MODE_SLIDE)
|
||||||
.setAnchorView(fragmentActivity.getBottomNavView())
|
.setAnchorView(fragmentActivity.getBottomNavView())
|
||||||
.show();
|
.show();
|
||||||
binding.favProgress.setVisibility(View.GONE);
|
profileDetailsBinding.favProgress.setVisibility(View.GONE);
|
||||||
binding.favCb.setVisibility(View.VISIBLE);
|
profileDetailsBinding.favCb.setVisibility(View.VISIBLE);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -900,8 +916,8 @@ public class ProfileFragment extends Fragment implements SwipeRefreshLayout.OnRe
|
|||||||
final Context context = getContext();
|
final Context context = getContext();
|
||||||
if (context == null) return;
|
if (context == null) return;
|
||||||
final RecyclerView.LayoutManager layoutManager = new LinearLayoutManager(context, RecyclerView.HORIZONTAL, false);
|
final RecyclerView.LayoutManager layoutManager = new LinearLayoutManager(context, RecyclerView.HORIZONTAL, false);
|
||||||
binding.highlightsList.setLayoutManager(layoutManager);
|
profileDetailsBinding.highlightsList.setLayoutManager(layoutManager);
|
||||||
binding.highlightsList.setAdapter(highlightsAdapter);
|
profileDetailsBinding.highlightsList.setAdapter(highlightsAdapter);
|
||||||
highlightsViewModel.getList().observe(getViewLifecycleOwner(), highlightModels -> highlightsAdapter.submitList(highlightModels));
|
highlightsViewModel.getList().observe(getViewLifecycleOwner(), highlightModels -> highlightsAdapter.submitList(highlightModels));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -11,6 +11,7 @@ import android.net.Uri;
|
|||||||
import android.util.DisplayMetrics;
|
import android.util.DisplayMetrics;
|
||||||
import android.util.Log;
|
import android.util.Log;
|
||||||
import android.util.Pair;
|
import android.util.Pair;
|
||||||
|
import android.util.TypedValue;
|
||||||
import android.view.Gravity;
|
import android.view.Gravity;
|
||||||
import android.view.View;
|
import android.view.View;
|
||||||
import android.webkit.MimeTypeMap;
|
import android.webkit.MimeTypeMap;
|
||||||
@ -34,6 +35,7 @@ import javax.crypto.Mac;
|
|||||||
import javax.crypto.spec.SecretKeySpec;
|
import javax.crypto.spec.SecretKeySpec;
|
||||||
|
|
||||||
import awais.instagrabber.R;
|
import awais.instagrabber.R;
|
||||||
|
import awais.instagrabber.models.PostsLayoutPreferences;
|
||||||
import awais.instagrabber.models.enums.FavoriteType;
|
import awais.instagrabber.models.enums.FavoriteType;
|
||||||
import awaisomereport.LogCollector;
|
import awaisomereport.LogCollector;
|
||||||
|
|
||||||
@ -51,6 +53,7 @@ public final class Utils {
|
|||||||
public static SimpleDateFormat datetimeParser;
|
public static SimpleDateFormat datetimeParser;
|
||||||
public static SimpleCache simpleCache;
|
public static SimpleCache simpleCache;
|
||||||
private static int statusBarHeight;
|
private static int statusBarHeight;
|
||||||
|
private static int actionBarHeight;
|
||||||
|
|
||||||
public static int convertDpToPx(final float dp) {
|
public static int convertDpToPx(final float dp) {
|
||||||
if (displayMetrics == null)
|
if (displayMetrics == null)
|
||||||
@ -162,6 +165,17 @@ public final class Utils {
|
|||||||
return statusBarHeight;
|
return statusBarHeight;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static int getActionBarHeight(@NonNull final Context context) {
|
||||||
|
if (actionBarHeight > 0) {
|
||||||
|
return actionBarHeight;
|
||||||
|
}
|
||||||
|
final TypedValue tv = new TypedValue();
|
||||||
|
if (context.getTheme().resolveAttribute(android.R.attr.actionBarSize, tv, true)) {
|
||||||
|
actionBarHeight = TypedValue.complexToDimensionPixelSize(tv.data, displayMetrics);
|
||||||
|
}
|
||||||
|
return actionBarHeight;
|
||||||
|
}
|
||||||
|
|
||||||
public static void openURL(final Context context, final String url) {
|
public static void openURL(final Context context, final String url) {
|
||||||
if (context == null || TextUtils.isEmpty(url)) {
|
if (context == null || TextUtils.isEmpty(url)) {
|
||||||
return;
|
return;
|
||||||
@ -190,4 +204,13 @@ public final class Utils {
|
|||||||
view.getTop() - view.getHeight() - 4);
|
view.getTop() - view.getHeight() - 4);
|
||||||
toast.show();
|
toast.show();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static PostsLayoutPreferences getPostsLayoutPreferences(final String layoutPreferenceKey) {
|
||||||
|
PostsLayoutPreferences layoutPreferences = PostsLayoutPreferences.fromJson(settingsHelper.getString(layoutPreferenceKey));
|
||||||
|
if (layoutPreferences == null) {
|
||||||
|
layoutPreferences = PostsLayoutPreferences.builder().build();
|
||||||
|
settingsHelper.putString(layoutPreferenceKey, layoutPreferences.getJson());
|
||||||
|
}
|
||||||
|
return layoutPreferences;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -20,14 +20,17 @@
|
|||||||
android:id="@+id/collapsingToolbarLayout"
|
android:id="@+id/collapsingToolbarLayout"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
app:layout_scrollFlags="scroll|snap|enterAlways"
|
android:animateLayoutChanges="true"
|
||||||
|
android:minHeight="?attr/actionBarSize"
|
||||||
|
app:layout_scrollFlags="scroll|enterAlwaysCollapsed|exitUntilCollapsed"
|
||||||
app:titleEnabled="false">
|
app:titleEnabled="false">
|
||||||
|
|
||||||
<com.google.android.material.appbar.MaterialToolbar
|
<com.google.android.material.appbar.MaterialToolbar
|
||||||
android:id="@+id/toolbar"
|
android:id="@+id/toolbar"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="?attr/actionBarSize"
|
android:layout_height="?attr/actionBarSize"
|
||||||
app:layout_collapseMode="none"
|
android:background="?attr/colorSurface"
|
||||||
|
app:layout_collapseMode="pin"
|
||||||
app:title="@string/app_name"
|
app:title="@string/app_name"
|
||||||
tools:menu="@menu/main_menu" />
|
tools:menu="@menu/main_menu" />
|
||||||
</com.google.android.material.appbar.CollapsingToolbarLayout>
|
</com.google.android.material.appbar.CollapsingToolbarLayout>
|
||||||
@ -45,5 +48,6 @@
|
|||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:layout_gravity="bottom"
|
android:layout_gravity="bottom"
|
||||||
app:labelVisibilityMode="labeled"
|
app:labelVisibilityMode="labeled"
|
||||||
|
app:layout_behavior="@string/hide_bottom_view_on_scroll_behavior"
|
||||||
app:menu="@menu/main_bottom_navigation_menu" />
|
app:menu="@menu/main_bottom_navigation_menu" />
|
||||||
</androidx.coordinatorlayout.widget.CoordinatorLayout>
|
</androidx.coordinatorlayout.widget.CoordinatorLayout>
|
@ -1,5 +1,5 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<awais.instagrabber.customviews.helpers.NestedCoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
<androidx.coordinatorlayout.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
xmlns:app="http://schemas.android.com/apk/res-auto"
|
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||||
xmlns:tools="http://schemas.android.com/tools"
|
xmlns:tools="http://schemas.android.com/tools"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
@ -18,4 +18,4 @@
|
|||||||
android:layout_height="match_parent"
|
android:layout_height="match_parent"
|
||||||
tools:listitem="@layout/layout_dm_inbox_item" />
|
tools:listitem="@layout/layout_dm_inbox_item" />
|
||||||
</androidx.swiperefreshlayout.widget.SwipeRefreshLayout>
|
</androidx.swiperefreshlayout.widget.SwipeRefreshLayout>
|
||||||
</awais.instagrabber.customviews.helpers.NestedCoordinatorLayout>
|
</androidx.coordinatorlayout.widget.CoordinatorLayout>
|
||||||
|
@ -11,7 +11,6 @@
|
|||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="0dp"
|
android:layout_height="0dp"
|
||||||
android:layout_weight="1"
|
android:layout_weight="1"
|
||||||
app:layout_behavior="@string/appbar_scrolling_view_behavior"
|
|
||||||
app:layout_constraintBottom_toTopOf="@id/comment_container"
|
app:layout_constraintBottom_toTopOf="@id/comment_container"
|
||||||
app:layout_constraintEnd_toEndOf="parent"
|
app:layout_constraintEnd_toEndOf="parent"
|
||||||
app:layout_constraintStart_toStartOf="parent"
|
app:layout_constraintStart_toStartOf="parent"
|
||||||
|
@ -1,32 +1,11 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<awais.instagrabber.customviews.helpers.NestedCoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
<androidx.coordinatorlayout.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
xmlns:app="http://schemas.android.com/apk/res-auto"
|
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||||
xmlns:tools="http://schemas.android.com/tools"
|
xmlns:tools="http://schemas.android.com/tools"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="match_parent"
|
android:layout_height="match_parent"
|
||||||
android:animateLayoutChanges="true"
|
|
||||||
android:background="?attr/colorSurface">
|
android:background="?attr/colorSurface">
|
||||||
|
|
||||||
<!--<com.google.android.material.appbar.AppBarLayout-->
|
|
||||||
<!-- android:layout_width="match_parent"-->
|
|
||||||
<!-- android:layout_height="wrap_content"-->
|
|
||||||
<!-- android:background="?attr/colorSurface"-->
|
|
||||||
<!-- app:elevation="0dp">-->
|
|
||||||
|
|
||||||
<!-- <com.google.android.material.appbar.CollapsingToolbarLayout-->
|
|
||||||
<!-- android:layout_width="match_parent"-->
|
|
||||||
<!-- android:layout_height="wrap_content"-->
|
|
||||||
<!-- app:layout_scrollFlags="scroll|snap|enterAlways">-->
|
|
||||||
|
|
||||||
<!-- <androidx.appcompat.widget.AppCompatSpinner-->
|
|
||||||
<!-- android:id="@+id/discoverType"-->
|
|
||||||
<!-- android:layout_width="match_parent"-->
|
|
||||||
<!-- android:layout_height="wrap_content"-->
|
|
||||||
<!-- android:entries="@array/discover_placeholder"-->
|
|
||||||
<!-- android:spinnerMode="dialog" />-->
|
|
||||||
<!-- </com.google.android.material.appbar.CollapsingToolbarLayout>-->
|
|
||||||
<!--</com.google.android.material.appbar.AppBarLayout>-->
|
|
||||||
|
|
||||||
<androidx.swiperefreshlayout.widget.SwipeRefreshLayout
|
<androidx.swiperefreshlayout.widget.SwipeRefreshLayout
|
||||||
android:id="@+id/swipe_refresh_layout"
|
android:id="@+id/swipe_refresh_layout"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
@ -42,4 +21,4 @@
|
|||||||
tools:itemCount="10"
|
tools:itemCount="10"
|
||||||
tools:listitem="@layout/item_discover_topic" />
|
tools:listitem="@layout/item_discover_topic" />
|
||||||
</androidx.swiperefreshlayout.widget.SwipeRefreshLayout>
|
</androidx.swiperefreshlayout.widget.SwipeRefreshLayout>
|
||||||
</awais.instagrabber.customviews.helpers.NestedCoordinatorLayout>
|
</androidx.coordinatorlayout.widget.CoordinatorLayout>
|
@ -1,28 +1,28 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<awais.instagrabber.customviews.helpers.NestedCoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
<androidx.coordinatorlayout.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
xmlns:app="http://schemas.android.com/apk/res-auto"
|
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||||
xmlns:tools="http://schemas.android.com/tools"
|
xmlns:tools="http://schemas.android.com/tools"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="match_parent"
|
android:layout_height="match_parent"
|
||||||
android:background="?attr/colorSurface">
|
android:background="?attr/colorSurface">
|
||||||
|
|
||||||
<com.google.android.material.appbar.AppBarLayout
|
<!--<com.google.android.material.appbar.AppBarLayout-->
|
||||||
android:id="@+id/stories_container"
|
<!-- android:id="@+id/stories_container"-->
|
||||||
android:layout_width="match_parent"
|
<!-- android:layout_width="match_parent"-->
|
||||||
android:layout_height="wrap_content">
|
<!-- android:layout_height="wrap_content">-->
|
||||||
|
|
||||||
<com.google.android.material.appbar.CollapsingToolbarLayout
|
<!-- <com.google.android.material.appbar.CollapsingToolbarLayout-->
|
||||||
android:layout_width="match_parent"
|
<!-- android:layout_width="match_parent"-->
|
||||||
android:layout_height="wrap_content"
|
<!-- android:layout_height="wrap_content"-->
|
||||||
app:layout_scrollFlags="scroll|snap">
|
<!-- app:layout_scrollFlags="scroll|snap">-->
|
||||||
|
|
||||||
<androidx.recyclerview.widget.RecyclerView
|
<!--<androidx.recyclerview.widget.RecyclerView-->
|
||||||
android:id="@+id/feed_stories_recycler_view"
|
<!-- android:id="@+id/feed_stories_recycler_view"-->
|
||||||
android:layout_width="match_parent"
|
<!-- android:layout_width="match_parent"-->
|
||||||
android:layout_height="wrap_content"
|
<!-- android:layout_height="wrap_content"-->
|
||||||
android:clipToPadding="false" />
|
<!-- android:clipToPadding="false" />-->
|
||||||
</com.google.android.material.appbar.CollapsingToolbarLayout>
|
<!-- </com.google.android.material.appbar.CollapsingToolbarLayout>-->
|
||||||
</com.google.android.material.appbar.AppBarLayout>
|
<!--</com.google.android.material.appbar.AppBarLayout>-->
|
||||||
|
|
||||||
<androidx.swiperefreshlayout.widget.SwipeRefreshLayout
|
<androidx.swiperefreshlayout.widget.SwipeRefreshLayout
|
||||||
android:id="@+id/feed_swipe_refresh_layout"
|
android:id="@+id/feed_swipe_refresh_layout"
|
||||||
@ -37,4 +37,4 @@
|
|||||||
android:clipToPadding="false"
|
android:clipToPadding="false"
|
||||||
tools:listitem="@layout/item_feed_photo" />
|
tools:listitem="@layout/item_feed_photo" />
|
||||||
</androidx.swiperefreshlayout.widget.SwipeRefreshLayout>
|
</androidx.swiperefreshlayout.widget.SwipeRefreshLayout>
|
||||||
</awais.instagrabber.customviews.helpers.NestedCoordinatorLayout>
|
</androidx.coordinatorlayout.widget.CoordinatorLayout>
|
@ -1,84 +1,10 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<awais.instagrabber.customviews.helpers.NestedCoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
<androidx.coordinatorlayout.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
xmlns:app="http://schemas.android.com/apk/res-auto"
|
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||||
xmlns:tools="http://schemas.android.com/tools"
|
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="match_parent"
|
android:layout_height="match_parent"
|
||||||
android:background="?attr/colorSurface">
|
android:background="?attr/colorSurface">
|
||||||
|
|
||||||
<com.google.android.material.appbar.AppBarLayout
|
|
||||||
android:id="@+id/appBarLayout"
|
|
||||||
android:layout_width="match_parent"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:background="?attr/colorSurface">
|
|
||||||
|
|
||||||
<com.google.android.material.appbar.CollapsingToolbarLayout
|
|
||||||
android:layout_width="match_parent"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
app:layout_scrollFlags="scroll">
|
|
||||||
|
|
||||||
<androidx.constraintlayout.widget.ConstraintLayout
|
|
||||||
android:id="@+id/tagInfoContainer"
|
|
||||||
android:layout_width="match_parent"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:padding="@dimen/profile_info_container_bottom_space">
|
|
||||||
|
|
||||||
<awais.instagrabber.customviews.CircularImageView
|
|
||||||
android:id="@+id/mainHashtagImage"
|
|
||||||
android:layout_width="@dimen/profile_picture_size"
|
|
||||||
android:layout_height="@dimen/profile_picture_size"
|
|
||||||
android:background="?selectableItemBackgroundBorderless"
|
|
||||||
app:layout_constraintBottom_toBottomOf="parent"
|
|
||||||
app:layout_constraintEnd_toStartOf="@id/mainTagPostCount"
|
|
||||||
app:layout_constraintStart_toStartOf="parent"
|
|
||||||
app:layout_constraintTop_toTopOf="parent"
|
|
||||||
tools:background="@mipmap/ic_launcher" />
|
|
||||||
|
|
||||||
<androidx.appcompat.widget.AppCompatTextView
|
|
||||||
android:id="@+id/mainTagPostCount"
|
|
||||||
android:layout_width="wrap_content"
|
|
||||||
android:layout_height="0dp"
|
|
||||||
android:gravity="center"
|
|
||||||
android:padding="8dp"
|
|
||||||
android:textAppearance="@style/TextAppearance.AppCompat"
|
|
||||||
app:layout_constraintBottom_toTopOf="@id/fav_chip"
|
|
||||||
app:layout_constraintStart_toEndOf="@id/mainHashtagImage"
|
|
||||||
app:layout_constraintTop_toTopOf="@id/mainHashtagImage"
|
|
||||||
tools:text="35 Posts" />
|
|
||||||
|
|
||||||
<com.google.android.material.chip.Chip
|
|
||||||
android:id="@+id/btnFollowTag"
|
|
||||||
android:layout_width="wrap_content"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:layout_marginStart="8dp"
|
|
||||||
android:text="@string/follow"
|
|
||||||
android:visibility="gone"
|
|
||||||
app:chipBackgroundColor="@null"
|
|
||||||
app:chipIcon="@drawable/ic_outline_person_add_24"
|
|
||||||
app:chipIconTint="@color/deep_purple_800"
|
|
||||||
app:layout_constraintBottom_toBottomOf="@id/mainHashtagImage"
|
|
||||||
app:layout_constraintStart_toEndOf="@id/mainHashtagImage"
|
|
||||||
app:layout_constraintTop_toBottomOf="@id/mainTagPostCount"
|
|
||||||
app:rippleColor="@color/purple_200" />
|
|
||||||
|
|
||||||
<com.google.android.material.chip.Chip
|
|
||||||
android:id="@+id/fav_chip"
|
|
||||||
android:layout_width="wrap_content"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:layout_marginStart="8dp"
|
|
||||||
android:text="@string/add_to_favorites"
|
|
||||||
android:visibility="gone"
|
|
||||||
app:chipBackgroundColor="@null"
|
|
||||||
app:chipIcon="@drawable/ic_outline_star_plus_24"
|
|
||||||
app:chipIconTint="@color/yellow_800"
|
|
||||||
app:layout_constraintBottom_toBottomOf="@id/mainHashtagImage"
|
|
||||||
app:layout_constraintStart_toEndOf="@id/btnFollowTag"
|
|
||||||
app:layout_constraintTop_toBottomOf="@id/mainTagPostCount"
|
|
||||||
app:rippleColor="@color/yellow_400" />
|
|
||||||
</androidx.constraintlayout.widget.ConstraintLayout>
|
|
||||||
</com.google.android.material.appbar.CollapsingToolbarLayout>
|
|
||||||
</com.google.android.material.appbar.AppBarLayout>
|
|
||||||
|
|
||||||
<androidx.swiperefreshlayout.widget.SwipeRefreshLayout
|
<androidx.swiperefreshlayout.widget.SwipeRefreshLayout
|
||||||
android:id="@+id/swipe_refresh_layout"
|
android:id="@+id/swipe_refresh_layout"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
@ -91,4 +17,4 @@
|
|||||||
android:layout_height="match_parent"
|
android:layout_height="match_parent"
|
||||||
android:clipToPadding="false" />
|
android:clipToPadding="false" />
|
||||||
</androidx.swiperefreshlayout.widget.SwipeRefreshLayout>
|
</androidx.swiperefreshlayout.widget.SwipeRefreshLayout>
|
||||||
</awais.instagrabber.customviews.helpers.NestedCoordinatorLayout>
|
</androidx.coordinatorlayout.widget.CoordinatorLayout>
|
@ -1,145 +1,10 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<awais.instagrabber.customviews.helpers.NestedCoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
<androidx.coordinatorlayout.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
xmlns:app="http://schemas.android.com/apk/res-auto"
|
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||||
xmlns:tools="http://schemas.android.com/tools"
|
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="match_parent"
|
android:layout_height="match_parent"
|
||||||
android:background="?attr/colorSurface">
|
android:background="?attr/colorSurface">
|
||||||
|
|
||||||
<com.google.android.material.appbar.AppBarLayout
|
|
||||||
android:id="@+id/appBarLayout"
|
|
||||||
android:layout_width="match_parent"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:background="?attr/colorSurface">
|
|
||||||
|
|
||||||
<com.google.android.material.appbar.CollapsingToolbarLayout
|
|
||||||
android:layout_width="match_parent"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
app:layout_scrollFlags="scroll|exitUntilCollapsed">
|
|
||||||
|
|
||||||
<androidx.constraintlayout.widget.ConstraintLayout
|
|
||||||
android:id="@+id/locInfoContainer"
|
|
||||||
android:layout_width="match_parent"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:animateLayoutChanges="true"
|
|
||||||
android:background="@null"
|
|
||||||
android:padding="8dp">
|
|
||||||
|
|
||||||
<awais.instagrabber.customviews.CircularImageView
|
|
||||||
android:id="@+id/mainLocationImage"
|
|
||||||
android:layout_width="@dimen/profile_picture_size"
|
|
||||||
android:layout_height="@dimen/profile_picture_size"
|
|
||||||
android:background="?selectableItemBackgroundBorderless"
|
|
||||||
app:actualImageScaleType="centerCrop"
|
|
||||||
app:layout_constraintEnd_toStartOf="@id/mainLocPostCount"
|
|
||||||
app:layout_constraintStart_toStartOf="parent"
|
|
||||||
app:layout_constraintTop_toTopOf="parent"
|
|
||||||
tools:background="@mipmap/ic_launcher" />
|
|
||||||
|
|
||||||
<androidx.appcompat.widget.AppCompatTextView
|
|
||||||
android:id="@+id/mainLocPostCount"
|
|
||||||
android:layout_width="0dp"
|
|
||||||
android:layout_height="0dp"
|
|
||||||
android:gravity="center_vertical"
|
|
||||||
android:maxLines="1"
|
|
||||||
android:paddingStart="12dp"
|
|
||||||
android:paddingEnd="12dp"
|
|
||||||
android:textAppearance="@style/TextAppearance.AppCompat"
|
|
||||||
app:layout_constraintBottom_toTopOf="@id/btnMap"
|
|
||||||
app:layout_constraintEnd_toEndOf="parent"
|
|
||||||
app:layout_constraintStart_toEndOf="@id/mainLocationImage"
|
|
||||||
app:layout_constraintTop_toTopOf="parent"
|
|
||||||
tools:text="35 Posts" />
|
|
||||||
|
|
||||||
<com.google.android.material.chip.Chip
|
|
||||||
android:id="@+id/btnMap"
|
|
||||||
android:layout_width="wrap_content"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:layout_marginStart="8dp"
|
|
||||||
android:text="@string/map"
|
|
||||||
app:chipBackgroundColor="@null"
|
|
||||||
app:chipIcon="@drawable/ic_outline_map_24"
|
|
||||||
app:chipIconTint="@color/green_500"
|
|
||||||
app:layout_constraintBottom_toTopOf="@id/locationFullName"
|
|
||||||
app:layout_constraintStart_toEndOf="@id/mainLocationImage"
|
|
||||||
app:layout_constraintTop_toBottomOf="@id/mainLocPostCount"
|
|
||||||
app:rippleColor="@color/grey_500"
|
|
||||||
tools:visibility="visible" />
|
|
||||||
|
|
||||||
<com.google.android.material.chip.Chip
|
|
||||||
android:id="@+id/fav_chip"
|
|
||||||
android:layout_width="wrap_content"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:layout_marginStart="8dp"
|
|
||||||
android:text="@string/add_to_favorites"
|
|
||||||
app:chipBackgroundColor="@null"
|
|
||||||
app:chipIcon="@drawable/ic_outline_star_plus_24"
|
|
||||||
app:chipIconTint="@color/yellow_800"
|
|
||||||
app:layout_constraintBottom_toBottomOf="@id/mainLocationImage"
|
|
||||||
app:layout_constraintStart_toEndOf="@id/btnMap"
|
|
||||||
app:layout_constraintTop_toBottomOf="@id/mainLocPostCount"
|
|
||||||
app:rippleColor="@color/yellow_400" />
|
|
||||||
|
|
||||||
<androidx.appcompat.widget.AppCompatTextView
|
|
||||||
android:id="@+id/locationFullName"
|
|
||||||
android:layout_width="0dp"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:ellipsize="marquee"
|
|
||||||
android:paddingStart="8dp"
|
|
||||||
android:paddingLeft="8dp"
|
|
||||||
android:paddingTop="4dp"
|
|
||||||
android:paddingEnd="8dp"
|
|
||||||
android:paddingRight="8dp"
|
|
||||||
android:singleLine="true"
|
|
||||||
android:textAppearance="@style/TextAppearance.AppCompat.Body1"
|
|
||||||
android:textStyle="bold"
|
|
||||||
app:layout_constraintBottom_toTopOf="@id/locationBiography"
|
|
||||||
app:layout_constraintEnd_toEndOf="parent"
|
|
||||||
app:layout_constraintStart_toStartOf="parent"
|
|
||||||
app:layout_constraintTop_toBottomOf="@id/mainLocationImage"
|
|
||||||
tools:text="OUR HOUSE" />
|
|
||||||
|
|
||||||
<awais.instagrabber.customviews.RamboTextView
|
|
||||||
android:id="@+id/locationBiography"
|
|
||||||
android:layout_width="0dp"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:layout_below="@id/locationFullName"
|
|
||||||
android:background="?android:selectableItemBackground"
|
|
||||||
android:paddingStart="8dp"
|
|
||||||
android:paddingLeft="8dp"
|
|
||||||
android:paddingEnd="8dp"
|
|
||||||
android:paddingRight="8dp"
|
|
||||||
android:textAppearance="@style/TextAppearance.AppCompat.Body1"
|
|
||||||
android:visibility="gone"
|
|
||||||
app:layout_constraintBottom_toTopOf="@id/locationUrl"
|
|
||||||
app:layout_constraintEnd_toEndOf="parent"
|
|
||||||
app:layout_constraintStart_toStartOf="parent"
|
|
||||||
app:layout_constraintTop_toBottomOf="@id/locationFullName"
|
|
||||||
tools:text="IN THE MIDDLE OF OUR STREET"
|
|
||||||
tools:visibility="visible" />
|
|
||||||
|
|
||||||
<awais.instagrabber.customviews.RamboTextView
|
|
||||||
android:id="@+id/locationUrl"
|
|
||||||
android:layout_width="0dp"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:layout_below="@id/locationBiography"
|
|
||||||
android:ellipsize="marquee"
|
|
||||||
android:paddingStart="8dp"
|
|
||||||
android:paddingLeft="8dp"
|
|
||||||
android:paddingEnd="8dp"
|
|
||||||
android:paddingRight="8dp"
|
|
||||||
android:textAppearance="@style/TextAppearance.AppCompat.Body1"
|
|
||||||
android:visibility="gone"
|
|
||||||
app:layout_constraintBottom_toBottomOf="parent"
|
|
||||||
app:layout_constraintEnd_toEndOf="parent"
|
|
||||||
app:layout_constraintStart_toStartOf="parent"
|
|
||||||
app:layout_constraintTop_toBottomOf="@id/locationBiography"
|
|
||||||
tools:text="https://austinhuang.me/"
|
|
||||||
tools:visibility="visible" />
|
|
||||||
</androidx.constraintlayout.widget.ConstraintLayout>
|
|
||||||
</com.google.android.material.appbar.CollapsingToolbarLayout>
|
|
||||||
</com.google.android.material.appbar.AppBarLayout>
|
|
||||||
|
|
||||||
<androidx.swiperefreshlayout.widget.SwipeRefreshLayout
|
<androidx.swiperefreshlayout.widget.SwipeRefreshLayout
|
||||||
android:id="@+id/swipe_refresh_layout"
|
android:id="@+id/swipe_refresh_layout"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
@ -152,4 +17,4 @@
|
|||||||
android:layout_height="match_parent"
|
android:layout_height="match_parent"
|
||||||
android:clipToPadding="false" />
|
android:clipToPadding="false" />
|
||||||
</androidx.swiperefreshlayout.widget.SwipeRefreshLayout>
|
</androidx.swiperefreshlayout.widget.SwipeRefreshLayout>
|
||||||
</awais.instagrabber.customviews.helpers.NestedCoordinatorLayout>
|
</androidx.coordinatorlayout.widget.CoordinatorLayout>
|
@ -1,276 +1,27 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<awais.instagrabber.customviews.helpers.NestedCoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
<androidx.coordinatorlayout.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
xmlns:app="http://schemas.android.com/apk/res-auto"
|
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||||
xmlns:tools="http://schemas.android.com/tools"
|
xmlns:tools="http://schemas.android.com/tools"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="match_parent"
|
android:layout_height="match_parent"
|
||||||
android:background="?attr/colorSurface">
|
android:background="?attr/colorSurface">
|
||||||
|
|
||||||
<com.google.android.material.appbar.AppBarLayout
|
<!--<com.google.android.material.appbar.AppBarLayout-->
|
||||||
android:id="@+id/appBarLayout"
|
<!-- android:id="@+id/appBarLayout"-->
|
||||||
android:layout_width="match_parent"
|
<!-- android:layout_width="match_parent"-->
|
||||||
android:layout_height="wrap_content"
|
<!-- android:layout_height="wrap_content"-->
|
||||||
android:background="?attr/colorSurface"
|
<!-- android:background="?attr/colorSurface"-->
|
||||||
app:elevation="0dp">
|
<!-- app:elevation="0dp"-->
|
||||||
|
<!-- app:layout_scrollFlags="scroll">-->
|
||||||
|
|
||||||
<com.google.android.material.appbar.CollapsingToolbarLayout
|
<!-- <com.google.android.material.appbar.CollapsingToolbarLayout-->
|
||||||
android:layout_width="match_parent"
|
<!-- android:layout_width="match_parent"-->
|
||||||
android:layout_height="wrap_content"
|
<!-- android:layout_height="wrap_content"-->
|
||||||
app:layout_scrollFlags="scroll|snap">
|
<!-- app:layout_scrollFlags="scroll">-->
|
||||||
|
|
||||||
<androidx.constraintlayout.widget.ConstraintLayout
|
<!-- <include layout="@layout/layout_profile_details" />-->
|
||||||
android:id="@+id/infoContainer"
|
<!-- </com.google.android.material.appbar.CollapsingToolbarLayout>-->
|
||||||
android:layout_width="match_parent"
|
<!--</com.google.android.material.appbar.AppBarLayout>-->
|
||||||
android:layout_height="wrap_content">
|
|
||||||
|
|
||||||
<awais.instagrabber.customviews.CircularImageView
|
|
||||||
android:id="@+id/mainProfileImage"
|
|
||||||
android:layout_width="@dimen/profile_picture_size"
|
|
||||||
android:layout_height="@dimen/profile_picture_size"
|
|
||||||
android:layout_marginStart="8dp"
|
|
||||||
android:layout_marginTop="8dp"
|
|
||||||
android:transitionName="profile_pic"
|
|
||||||
app:actualImageScaleType="centerCrop"
|
|
||||||
app:layout_constraintEnd_toStartOf="@id/mainPostCount"
|
|
||||||
app:layout_constraintStart_toStartOf="parent"
|
|
||||||
app:layout_constraintTop_toTopOf="parent"
|
|
||||||
tools:background="@mipmap/ic_launcher" />
|
|
||||||
|
|
||||||
<androidx.appcompat.widget.AppCompatTextView
|
|
||||||
android:id="@+id/mainPostCount"
|
|
||||||
android:layout_width="0dp"
|
|
||||||
android:layout_height="0dp"
|
|
||||||
android:gravity="center"
|
|
||||||
android:textAppearance="@style/TextAppearance.AppCompat"
|
|
||||||
app:layout_constraintBottom_toBottomOf="@id/mainProfileImage"
|
|
||||||
app:layout_constraintEnd_toStartOf="@id/mainFollowers"
|
|
||||||
app:layout_constraintStart_toEndOf="@id/mainProfileImage"
|
|
||||||
app:layout_constraintTop_toTopOf="parent"
|
|
||||||
tools:text="35\nPosts" />
|
|
||||||
|
|
||||||
<androidx.appcompat.widget.AppCompatTextView
|
|
||||||
android:id="@+id/mainFollowers"
|
|
||||||
android:layout_width="0dp"
|
|
||||||
android:layout_height="0dp"
|
|
||||||
android:background="?selectableItemBackgroundBorderless"
|
|
||||||
android:gravity="center"
|
|
||||||
android:textAppearance="@style/TextAppearance.AppCompat"
|
|
||||||
app:layout_constraintBottom_toBottomOf="@id/mainProfileImage"
|
|
||||||
app:layout_constraintEnd_toStartOf="@id/mainFollowing"
|
|
||||||
app:layout_constraintStart_toEndOf="@id/mainPostCount"
|
|
||||||
app:layout_constraintTop_toTopOf="parent"
|
|
||||||
tools:text="68\nFollowers" />
|
|
||||||
|
|
||||||
<androidx.appcompat.widget.AppCompatTextView
|
|
||||||
android:id="@+id/mainFollowing"
|
|
||||||
android:layout_width="0dp"
|
|
||||||
android:layout_height="0dp"
|
|
||||||
android:background="?selectableItemBackgroundBorderless"
|
|
||||||
android:gravity="center"
|
|
||||||
android:textAppearance="@style/TextAppearance.AppCompat"
|
|
||||||
app:layout_constraintBottom_toBottomOf="@id/mainProfileImage"
|
|
||||||
app:layout_constraintEnd_toEndOf="parent"
|
|
||||||
app:layout_constraintStart_toEndOf="@id/mainFollowers"
|
|
||||||
app:layout_constraintTop_toTopOf="parent"
|
|
||||||
tools:text="64\nFollowing" />
|
|
||||||
|
|
||||||
<androidx.appcompat.widget.AppCompatTextView
|
|
||||||
android:id="@+id/mainFullName"
|
|
||||||
android:layout_width="wrap_content"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:ellipsize="marquee"
|
|
||||||
android:paddingStart="8dp"
|
|
||||||
android:paddingTop="8dp"
|
|
||||||
android:paddingEnd="4dp"
|
|
||||||
android:singleLine="true"
|
|
||||||
android:textAppearance="@style/TextAppearance.AppCompat.Body1"
|
|
||||||
android:textStyle="bold"
|
|
||||||
app:layout_constraintStart_toStartOf="parent"
|
|
||||||
app:layout_constraintTop_toBottomOf="@id/mainProfileImage"
|
|
||||||
tools:text="Austin Huang" />
|
|
||||||
|
|
||||||
<androidx.appcompat.widget.AppCompatImageView
|
|
||||||
android:id="@+id/isVerified"
|
|
||||||
android:layout_width="30dp"
|
|
||||||
android:layout_height="match_parent"
|
|
||||||
android:layout_gravity="center"
|
|
||||||
android:adjustViewBounds="true"
|
|
||||||
android:paddingTop="8dp"
|
|
||||||
android:scaleType="fitCenter"
|
|
||||||
android:visibility="gone"
|
|
||||||
app:layout_constraintBottom_toBottomOf="@id/mainFullName"
|
|
||||||
app:layout_constraintStart_toEndOf="@id/mainFullName"
|
|
||||||
app:layout_constraintTop_toBottomOf="@id/mainProfileImage"
|
|
||||||
app:srcCompat="@drawable/verified"
|
|
||||||
tools:visibility="visible" />
|
|
||||||
|
|
||||||
<CheckBox
|
|
||||||
android:id="@+id/fav_cb"
|
|
||||||
android:layout_width="wrap_content"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:button="@drawable/sl_favourite_24"
|
|
||||||
android:visibility="gone"
|
|
||||||
app:buttonTint="@color/yellow_800"
|
|
||||||
app:layout_constraintBaseline_toBaselineOf="@id/mainFullName"
|
|
||||||
app:layout_constraintBottom_toTopOf="@id/mainBiography"
|
|
||||||
app:layout_constraintStart_toEndOf="@id/isVerified" />
|
|
||||||
|
|
||||||
<ProgressBar
|
|
||||||
android:id="@+id/fav_progress"
|
|
||||||
style="@style/Widget.MaterialComponents.ProgressIndicator.Circular.Indeterminate"
|
|
||||||
android:layout_width="24dp"
|
|
||||||
android:layout_height="24dp"
|
|
||||||
android:visibility="gone"
|
|
||||||
app:layout_constraintBottom_toBottomOf="@id/mainFullName"
|
|
||||||
app:layout_constraintStart_toEndOf="@id/isVerified"
|
|
||||||
app:layout_constraintTop_toTopOf="@id/mainFullName"
|
|
||||||
tools:visibility="gone" />
|
|
||||||
|
|
||||||
<awais.instagrabber.customviews.RamboTextViewV2
|
|
||||||
android:id="@+id/mainBiography"
|
|
||||||
android:layout_width="0dp"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:layout_margin="8dp"
|
|
||||||
android:background="?android:selectableItemBackground"
|
|
||||||
android:textAppearance="@style/TextAppearance.AppCompat.Body1"
|
|
||||||
app:layout_constraintBottom_toTopOf="@id/mainUrl"
|
|
||||||
app:layout_constraintEnd_toEndOf="parent"
|
|
||||||
app:layout_constraintStart_toStartOf="parent"
|
|
||||||
app:layout_constraintTop_toBottomOf="@id/mainFullName"
|
|
||||||
tools:text="THE GLORIOUS (step)OWNER OF THIS APP. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec id justo lorem. In malesuada feugiat ornare. Suspendisse et mauris imperdiet, luctus augue eget, tempus eros. Cras vitae molestie ipsum. " />
|
|
||||||
|
|
||||||
<awais.instagrabber.customviews.RamboTextViewV2
|
|
||||||
android:id="@+id/mainUrl"
|
|
||||||
android:layout_width="match_parent"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:layout_below="@id/mainBiography"
|
|
||||||
android:ellipsize="marquee"
|
|
||||||
android:padding="8dp"
|
|
||||||
android:textAppearance="@style/TextAppearance.AppCompat.Body1"
|
|
||||||
android:visibility="gone"
|
|
||||||
app:layout_constraintEnd_toEndOf="parent"
|
|
||||||
app:layout_constraintStart_toStartOf="parent"
|
|
||||||
app:layout_constraintTop_toBottomOf="@id/mainBiography"
|
|
||||||
tools:text="https://austinhuang.me/"
|
|
||||||
tools:textColor="@android:color/holo_blue_dark"
|
|
||||||
tools:visibility="visible" />
|
|
||||||
|
|
||||||
<com.google.android.material.button.MaterialButton
|
|
||||||
android:id="@+id/btnFollow"
|
|
||||||
style="@style/Widget.MaterialComponents.Button.TextButton"
|
|
||||||
android:layout_width="0dp"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:text="@string/follow"
|
|
||||||
android:textColor="@color/deep_purple_200"
|
|
||||||
android:visibility="gone"
|
|
||||||
app:icon="@drawable/ic_outline_person_add_24"
|
|
||||||
app:iconGravity="top"
|
|
||||||
app:iconTint="@color/deep_purple_200"
|
|
||||||
app:layout_constraintBottom_toTopOf="@id/highlights_barrier"
|
|
||||||
app:layout_constraintEnd_toStartOf="@id/btnTagged"
|
|
||||||
app:layout_constraintStart_toStartOf="parent"
|
|
||||||
app:layout_constraintTop_toBottomOf="@id/mainUrl"
|
|
||||||
app:rippleColor="@color/purple_200"
|
|
||||||
tools:visibility="visible" />
|
|
||||||
|
|
||||||
<com.google.android.material.button.MaterialButton
|
|
||||||
android:id="@+id/btnTagged"
|
|
||||||
style="@style/Widget.MaterialComponents.Button.TextButton"
|
|
||||||
android:layout_width="0dp"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:text="@string/tagged"
|
|
||||||
android:textColor="@color/deep_orange_600"
|
|
||||||
android:visibility="gone"
|
|
||||||
app:icon="@drawable/ic_outline_person_pin_24"
|
|
||||||
app:iconGravity="top"
|
|
||||||
app:iconTint="@color/deep_orange_600"
|
|
||||||
app:layout_constraintBottom_toTopOf="@id/highlights_barrier"
|
|
||||||
app:layout_constraintEnd_toStartOf="@id/btnSaved"
|
|
||||||
app:layout_constraintStart_toEndOf="@id/btnFollow"
|
|
||||||
app:layout_constraintTop_toBottomOf="@id/mainUrl"
|
|
||||||
tools:visibility="visible" />
|
|
||||||
|
|
||||||
<com.google.android.material.button.MaterialButton
|
|
||||||
android:id="@+id/btnSaved"
|
|
||||||
style="@style/Widget.MaterialComponents.Button.TextButton"
|
|
||||||
android:layout_width="0dp"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:text="@string/saved"
|
|
||||||
android:textColor="@color/blue_700"
|
|
||||||
android:visibility="gone"
|
|
||||||
app:icon="@drawable/ic_outline_class_24"
|
|
||||||
app:iconGravity="top"
|
|
||||||
app:iconTint="@color/blue_700"
|
|
||||||
app:layout_constraintBottom_toTopOf="@id/highlights_barrier"
|
|
||||||
app:layout_constraintEnd_toStartOf="@id/btnLiked"
|
|
||||||
app:layout_constraintStart_toEndOf="@id/btnTagged"
|
|
||||||
app:layout_constraintTop_toBottomOf="@id/mainUrl"
|
|
||||||
app:rippleColor="@color/blue_A400"
|
|
||||||
tools:visibility="visible" />
|
|
||||||
|
|
||||||
<com.google.android.material.button.MaterialButton
|
|
||||||
android:id="@+id/btnLiked"
|
|
||||||
style="@style/Widget.MaterialComponents.Button.TextButton"
|
|
||||||
android:layout_width="0dp"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:text="@string/liked"
|
|
||||||
android:textColor="@color/red_600"
|
|
||||||
android:visibility="gone"
|
|
||||||
app:icon="@drawable/ic_like"
|
|
||||||
app:iconGravity="top"
|
|
||||||
app:iconTint="@color/red_600"
|
|
||||||
app:layout_constraintBottom_toTopOf="@id/highlights_barrier"
|
|
||||||
app:layout_constraintEnd_toEndOf="parent"
|
|
||||||
app:layout_constraintEnd_toStartOf="@id/btnDM"
|
|
||||||
app:layout_constraintStart_toEndOf="@id/btnSaved"
|
|
||||||
app:layout_constraintTop_toBottomOf="@id/mainUrl"
|
|
||||||
app:rippleColor="@color/red_300"
|
|
||||||
tools:visibility="visible" />
|
|
||||||
|
|
||||||
<com.google.android.material.button.MaterialButton
|
|
||||||
android:id="@+id/btnDM"
|
|
||||||
style="@style/Widget.MaterialComponents.Button.TextButton"
|
|
||||||
android:layout_width="0dp"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:text="@string/dm_person"
|
|
||||||
android:textColor="@color/green"
|
|
||||||
android:visibility="gone"
|
|
||||||
app:icon="@drawable/ic_send_24"
|
|
||||||
app:iconGravity="top"
|
|
||||||
app:iconTint="@color/green"
|
|
||||||
app:layout_constraintBottom_toTopOf="@id/highlights_barrier"
|
|
||||||
app:layout_constraintEnd_toEndOf="parent"
|
|
||||||
app:layout_constraintStart_toEndOf="@id/btnLiked"
|
|
||||||
app:layout_constraintTop_toBottomOf="@id/mainUrl"
|
|
||||||
app:rippleColor="@color/green"
|
|
||||||
tools:visibility="visible" />
|
|
||||||
|
|
||||||
<androidx.constraintlayout.widget.Barrier
|
|
||||||
android:id="@+id/highlights_barrier"
|
|
||||||
android:layout_width="wrap_content"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
app:barrierDirection="bottom"
|
|
||||||
app:constraint_referenced_ids="btnTagged, btnSaved, btnLiked, btnFollow, btnDM" />
|
|
||||||
|
|
||||||
<androidx.recyclerview.widget.RecyclerView
|
|
||||||
android:id="@+id/highlightsList"
|
|
||||||
android:layout_width="0dp"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:clipToPadding="false"
|
|
||||||
android:paddingStart="5dp"
|
|
||||||
android:paddingLeft="5dp"
|
|
||||||
android:paddingEnd="5dp"
|
|
||||||
android:paddingRight="5dp"
|
|
||||||
android:visibility="gone"
|
|
||||||
app:layout_constraintBottom_toBottomOf="parent"
|
|
||||||
app:layout_constraintEnd_toEndOf="parent"
|
|
||||||
app:layout_constraintStart_toStartOf="parent"
|
|
||||||
app:layout_constraintTop_toTopOf="@id/highlights_barrier"
|
|
||||||
tools:itemCount="2"
|
|
||||||
tools:visibility="visible" />
|
|
||||||
</androidx.constraintlayout.widget.ConstraintLayout>
|
|
||||||
</com.google.android.material.appbar.CollapsingToolbarLayout>
|
|
||||||
</com.google.android.material.appbar.AppBarLayout>
|
|
||||||
|
|
||||||
<androidx.swiperefreshlayout.widget.SwipeRefreshLayout
|
<androidx.swiperefreshlayout.widget.SwipeRefreshLayout
|
||||||
android:id="@+id/swipe_refresh_layout"
|
android:id="@+id/swipe_refresh_layout"
|
||||||
@ -311,4 +62,4 @@
|
|||||||
android:text="@string/priv_acc"
|
android:text="@string/priv_acc"
|
||||||
android:textAppearance="@style/TextAppearance.AppCompat.Large" />
|
android:textAppearance="@style/TextAppearance.AppCompat.Large" />
|
||||||
</LinearLayout>
|
</LinearLayout>
|
||||||
</awais.instagrabber.customviews.helpers.NestedCoordinatorLayout>
|
</androidx.coordinatorlayout.widget.CoordinatorLayout>
|
@ -1,5 +1,5 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<awais.instagrabber.customviews.helpers.NestedCoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
<androidx.coordinatorlayout.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
xmlns:app="http://schemas.android.com/apk/res-auto"
|
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||||
xmlns:tools="http://schemas.android.com/tools"
|
xmlns:tools="http://schemas.android.com/tools"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
@ -55,4 +55,4 @@
|
|||||||
android:layout_height="match_parent"
|
android:layout_height="match_parent"
|
||||||
android:clipToPadding="false" />
|
android:clipToPadding="false" />
|
||||||
</androidx.swiperefreshlayout.widget.SwipeRefreshLayout>
|
</androidx.swiperefreshlayout.widget.SwipeRefreshLayout>
|
||||||
</awais.instagrabber.customviews.helpers.NestedCoordinatorLayout>
|
</androidx.coordinatorlayout.widget.CoordinatorLayout>
|
63
app/src/main/res/layout/layout_hashtag_details.xml
Normal file
63
app/src/main/res/layout/layout_hashtag_details.xml
Normal file
@ -0,0 +1,63 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||||
|
xmlns:tools="http://schemas.android.com/tools"
|
||||||
|
android:id="@+id/tagInfoContainer"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_marginTop="?attr/actionBarSize"
|
||||||
|
android:padding="@dimen/profile_info_container_bottom_space">
|
||||||
|
|
||||||
|
<awais.instagrabber.customviews.CircularImageView
|
||||||
|
android:id="@+id/mainHashtagImage"
|
||||||
|
android:layout_width="@dimen/profile_picture_size"
|
||||||
|
android:layout_height="@dimen/profile_picture_size"
|
||||||
|
android:background="?selectableItemBackgroundBorderless"
|
||||||
|
app:layout_constraintBottom_toBottomOf="parent"
|
||||||
|
app:layout_constraintEnd_toStartOf="@id/mainTagPostCount"
|
||||||
|
app:layout_constraintStart_toStartOf="parent"
|
||||||
|
app:layout_constraintTop_toTopOf="parent"
|
||||||
|
tools:background="@mipmap/ic_launcher" />
|
||||||
|
|
||||||
|
<androidx.appcompat.widget.AppCompatTextView
|
||||||
|
android:id="@+id/mainTagPostCount"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="0dp"
|
||||||
|
android:gravity="center"
|
||||||
|
android:padding="8dp"
|
||||||
|
android:textAppearance="@style/TextAppearance.AppCompat"
|
||||||
|
app:layout_constraintBottom_toTopOf="@id/fav_chip"
|
||||||
|
app:layout_constraintStart_toEndOf="@id/mainHashtagImage"
|
||||||
|
app:layout_constraintTop_toTopOf="@id/mainHashtagImage"
|
||||||
|
tools:text="35 Posts" />
|
||||||
|
|
||||||
|
<com.google.android.material.chip.Chip
|
||||||
|
android:id="@+id/btnFollowTag"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_marginStart="8dp"
|
||||||
|
android:text="@string/follow"
|
||||||
|
android:visibility="gone"
|
||||||
|
app:chipBackgroundColor="@null"
|
||||||
|
app:chipIcon="@drawable/ic_outline_person_add_24"
|
||||||
|
app:chipIconTint="@color/deep_purple_800"
|
||||||
|
app:layout_constraintBottom_toBottomOf="@id/mainHashtagImage"
|
||||||
|
app:layout_constraintStart_toEndOf="@id/mainHashtagImage"
|
||||||
|
app:layout_constraintTop_toBottomOf="@id/mainTagPostCount"
|
||||||
|
app:rippleColor="@color/purple_200" />
|
||||||
|
|
||||||
|
<com.google.android.material.chip.Chip
|
||||||
|
android:id="@+id/fav_chip"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_marginStart="8dp"
|
||||||
|
android:text="@string/add_to_favorites"
|
||||||
|
android:visibility="gone"
|
||||||
|
app:chipBackgroundColor="@null"
|
||||||
|
app:chipIcon="@drawable/ic_outline_star_plus_24"
|
||||||
|
app:chipIconTint="@color/yellow_800"
|
||||||
|
app:layout_constraintBottom_toBottomOf="@id/mainHashtagImage"
|
||||||
|
app:layout_constraintStart_toEndOf="@id/btnFollowTag"
|
||||||
|
app:layout_constraintTop_toBottomOf="@id/mainTagPostCount"
|
||||||
|
app:rippleColor="@color/yellow_400" />
|
||||||
|
</androidx.constraintlayout.widget.ConstraintLayout>
|
123
app/src/main/res/layout/layout_location_details.xml
Normal file
123
app/src/main/res/layout/layout_location_details.xml
Normal file
@ -0,0 +1,123 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||||
|
xmlns:tools="http://schemas.android.com/tools"
|
||||||
|
android:id="@+id/locInfoContainer"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_marginTop="?attr/actionBarSize"
|
||||||
|
android:animateLayoutChanges="true"
|
||||||
|
android:padding="8dp">
|
||||||
|
|
||||||
|
<awais.instagrabber.customviews.CircularImageView
|
||||||
|
android:id="@+id/mainLocationImage"
|
||||||
|
android:layout_width="@dimen/profile_picture_size"
|
||||||
|
android:layout_height="@dimen/profile_picture_size"
|
||||||
|
android:background="?selectableItemBackgroundBorderless"
|
||||||
|
app:actualImageScaleType="centerCrop"
|
||||||
|
app:layout_constraintEnd_toStartOf="@id/mainLocPostCount"
|
||||||
|
app:layout_constraintStart_toStartOf="parent"
|
||||||
|
app:layout_constraintTop_toTopOf="parent"
|
||||||
|
tools:background="@mipmap/ic_launcher" />
|
||||||
|
|
||||||
|
<androidx.appcompat.widget.AppCompatTextView
|
||||||
|
android:id="@+id/mainLocPostCount"
|
||||||
|
android:layout_width="0dp"
|
||||||
|
android:layout_height="0dp"
|
||||||
|
android:gravity="center_vertical"
|
||||||
|
android:maxLines="1"
|
||||||
|
android:paddingStart="12dp"
|
||||||
|
android:paddingEnd="12dp"
|
||||||
|
android:textAppearance="@style/TextAppearance.AppCompat"
|
||||||
|
app:layout_constraintBottom_toTopOf="@id/btnMap"
|
||||||
|
app:layout_constraintEnd_toEndOf="parent"
|
||||||
|
app:layout_constraintStart_toEndOf="@id/mainLocationImage"
|
||||||
|
app:layout_constraintTop_toTopOf="parent"
|
||||||
|
tools:text="35 Posts" />
|
||||||
|
|
||||||
|
<com.google.android.material.chip.Chip
|
||||||
|
android:id="@+id/btnMap"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_marginStart="8dp"
|
||||||
|
android:text="@string/map"
|
||||||
|
app:chipBackgroundColor="@null"
|
||||||
|
app:chipIcon="@drawable/ic_outline_map_24"
|
||||||
|
app:chipIconTint="@color/green_500"
|
||||||
|
app:layout_constraintBottom_toTopOf="@id/locationFullName"
|
||||||
|
app:layout_constraintStart_toEndOf="@id/mainLocationImage"
|
||||||
|
app:layout_constraintTop_toBottomOf="@id/mainLocPostCount"
|
||||||
|
app:rippleColor="@color/grey_500"
|
||||||
|
tools:visibility="visible" />
|
||||||
|
|
||||||
|
<com.google.android.material.chip.Chip
|
||||||
|
android:id="@+id/fav_chip"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_marginStart="8dp"
|
||||||
|
android:text="@string/add_to_favorites"
|
||||||
|
app:chipBackgroundColor="@null"
|
||||||
|
app:chipIcon="@drawable/ic_outline_star_plus_24"
|
||||||
|
app:chipIconTint="@color/yellow_800"
|
||||||
|
app:layout_constraintBottom_toBottomOf="@id/mainLocationImage"
|
||||||
|
app:layout_constraintStart_toEndOf="@id/btnMap"
|
||||||
|
app:layout_constraintTop_toBottomOf="@id/mainLocPostCount"
|
||||||
|
app:rippleColor="@color/yellow_400" />
|
||||||
|
|
||||||
|
<androidx.appcompat.widget.AppCompatTextView
|
||||||
|
android:id="@+id/locationFullName"
|
||||||
|
android:layout_width="0dp"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:ellipsize="marquee"
|
||||||
|
android:paddingStart="8dp"
|
||||||
|
android:paddingLeft="8dp"
|
||||||
|
android:paddingTop="4dp"
|
||||||
|
android:paddingEnd="8dp"
|
||||||
|
android:paddingRight="8dp"
|
||||||
|
android:singleLine="true"
|
||||||
|
android:textAppearance="@style/TextAppearance.AppCompat.Body1"
|
||||||
|
android:textStyle="bold"
|
||||||
|
app:layout_constraintBottom_toTopOf="@id/locationBiography"
|
||||||
|
app:layout_constraintEnd_toEndOf="parent"
|
||||||
|
app:layout_constraintStart_toStartOf="parent"
|
||||||
|
app:layout_constraintTop_toBottomOf="@id/mainLocationImage"
|
||||||
|
tools:text="OUR HOUSE" />
|
||||||
|
|
||||||
|
<awais.instagrabber.customviews.RamboTextView
|
||||||
|
android:id="@+id/locationBiography"
|
||||||
|
android:layout_width="0dp"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_below="@id/locationFullName"
|
||||||
|
android:background="?android:selectableItemBackground"
|
||||||
|
android:paddingStart="8dp"
|
||||||
|
android:paddingLeft="8dp"
|
||||||
|
android:paddingEnd="8dp"
|
||||||
|
android:paddingRight="8dp"
|
||||||
|
android:textAppearance="@style/TextAppearance.AppCompat.Body1"
|
||||||
|
android:visibility="gone"
|
||||||
|
app:layout_constraintBottom_toTopOf="@id/locationUrl"
|
||||||
|
app:layout_constraintEnd_toEndOf="parent"
|
||||||
|
app:layout_constraintStart_toStartOf="parent"
|
||||||
|
app:layout_constraintTop_toBottomOf="@id/locationFullName"
|
||||||
|
tools:text="IN THE MIDDLE OF OUR STREET"
|
||||||
|
tools:visibility="visible" />
|
||||||
|
|
||||||
|
<awais.instagrabber.customviews.RamboTextView
|
||||||
|
android:id="@+id/locationUrl"
|
||||||
|
android:layout_width="0dp"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_below="@id/locationBiography"
|
||||||
|
android:ellipsize="marquee"
|
||||||
|
android:paddingStart="8dp"
|
||||||
|
android:paddingLeft="8dp"
|
||||||
|
android:paddingEnd="8dp"
|
||||||
|
android:paddingRight="8dp"
|
||||||
|
android:textAppearance="@style/TextAppearance.AppCompat.Body1"
|
||||||
|
android:visibility="gone"
|
||||||
|
app:layout_constraintBottom_toBottomOf="parent"
|
||||||
|
app:layout_constraintEnd_toEndOf="parent"
|
||||||
|
app:layout_constraintStart_toStartOf="parent"
|
||||||
|
app:layout_constraintTop_toBottomOf="@id/locationBiography"
|
||||||
|
tools:text="https://austinhuang.me/"
|
||||||
|
tools:visibility="visible" />
|
||||||
|
</androidx.constraintlayout.widget.ConstraintLayout>
|
255
app/src/main/res/layout/layout_profile_details.xml
Normal file
255
app/src/main/res/layout/layout_profile_details.xml
Normal file
@ -0,0 +1,255 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||||
|
xmlns:tools="http://schemas.android.com/tools"
|
||||||
|
android:id="@+id/infoContainer"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_marginTop="?attr/actionBarSize">
|
||||||
|
|
||||||
|
<awais.instagrabber.customviews.CircularImageView
|
||||||
|
android:id="@+id/mainProfileImage"
|
||||||
|
android:layout_width="@dimen/profile_picture_size"
|
||||||
|
android:layout_height="@dimen/profile_picture_size"
|
||||||
|
android:layout_marginStart="8dp"
|
||||||
|
android:layout_marginTop="8dp"
|
||||||
|
android:transitionName="profile_pic"
|
||||||
|
app:actualImageScaleType="centerCrop"
|
||||||
|
app:layout_constraintEnd_toStartOf="@id/mainPostCount"
|
||||||
|
app:layout_constraintStart_toStartOf="parent"
|
||||||
|
app:layout_constraintTop_toTopOf="parent"
|
||||||
|
tools:background="@mipmap/ic_launcher" />
|
||||||
|
|
||||||
|
<androidx.appcompat.widget.AppCompatTextView
|
||||||
|
android:id="@+id/mainPostCount"
|
||||||
|
android:layout_width="0dp"
|
||||||
|
android:layout_height="0dp"
|
||||||
|
android:gravity="center"
|
||||||
|
android:textAppearance="@style/TextAppearance.AppCompat"
|
||||||
|
app:layout_constraintBottom_toBottomOf="@id/mainProfileImage"
|
||||||
|
app:layout_constraintEnd_toStartOf="@id/mainFollowers"
|
||||||
|
app:layout_constraintStart_toEndOf="@id/mainProfileImage"
|
||||||
|
app:layout_constraintTop_toTopOf="parent"
|
||||||
|
tools:text="35\nPosts" />
|
||||||
|
|
||||||
|
<androidx.appcompat.widget.AppCompatTextView
|
||||||
|
android:id="@+id/mainFollowers"
|
||||||
|
android:layout_width="0dp"
|
||||||
|
android:layout_height="0dp"
|
||||||
|
android:background="?selectableItemBackgroundBorderless"
|
||||||
|
android:gravity="center"
|
||||||
|
android:textAppearance="@style/TextAppearance.AppCompat"
|
||||||
|
app:layout_constraintBottom_toBottomOf="@id/mainProfileImage"
|
||||||
|
app:layout_constraintEnd_toStartOf="@id/mainFollowing"
|
||||||
|
app:layout_constraintStart_toEndOf="@id/mainPostCount"
|
||||||
|
app:layout_constraintTop_toTopOf="parent"
|
||||||
|
tools:text="68\nFollowers" />
|
||||||
|
|
||||||
|
<androidx.appcompat.widget.AppCompatTextView
|
||||||
|
android:id="@+id/mainFollowing"
|
||||||
|
android:layout_width="0dp"
|
||||||
|
android:layout_height="0dp"
|
||||||
|
android:background="?selectableItemBackgroundBorderless"
|
||||||
|
android:gravity="center"
|
||||||
|
android:textAppearance="@style/TextAppearance.AppCompat"
|
||||||
|
app:layout_constraintBottom_toBottomOf="@id/mainProfileImage"
|
||||||
|
app:layout_constraintEnd_toEndOf="parent"
|
||||||
|
app:layout_constraintStart_toEndOf="@id/mainFollowers"
|
||||||
|
app:layout_constraintTop_toTopOf="parent"
|
||||||
|
tools:text="64\nFollowing" />
|
||||||
|
|
||||||
|
<androidx.appcompat.widget.AppCompatTextView
|
||||||
|
android:id="@+id/mainFullName"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:ellipsize="marquee"
|
||||||
|
android:paddingStart="8dp"
|
||||||
|
android:paddingTop="8dp"
|
||||||
|
android:paddingEnd="4dp"
|
||||||
|
android:singleLine="true"
|
||||||
|
android:textAppearance="@style/TextAppearance.AppCompat.Body1"
|
||||||
|
android:textStyle="bold"
|
||||||
|
app:layout_constraintStart_toStartOf="parent"
|
||||||
|
app:layout_constraintTop_toBottomOf="@id/mainProfileImage"
|
||||||
|
tools:text="Austin Huang" />
|
||||||
|
|
||||||
|
<androidx.appcompat.widget.AppCompatImageView
|
||||||
|
android:id="@+id/isVerified"
|
||||||
|
android:layout_width="30dp"
|
||||||
|
android:layout_height="match_parent"
|
||||||
|
android:layout_gravity="center"
|
||||||
|
android:adjustViewBounds="true"
|
||||||
|
android:paddingTop="8dp"
|
||||||
|
android:scaleType="fitCenter"
|
||||||
|
android:visibility="gone"
|
||||||
|
app:layout_constraintBottom_toBottomOf="@id/mainFullName"
|
||||||
|
app:layout_constraintStart_toEndOf="@id/mainFullName"
|
||||||
|
app:layout_constraintTop_toBottomOf="@id/mainProfileImage"
|
||||||
|
app:srcCompat="@drawable/verified"
|
||||||
|
tools:visibility="visible" />
|
||||||
|
|
||||||
|
<CheckBox
|
||||||
|
android:id="@+id/fav_cb"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:button="@drawable/sl_favourite_24"
|
||||||
|
android:visibility="gone"
|
||||||
|
app:buttonTint="@color/yellow_800"
|
||||||
|
app:layout_constraintBaseline_toBaselineOf="@id/mainFullName"
|
||||||
|
app:layout_constraintBottom_toTopOf="@id/mainBiography"
|
||||||
|
app:layout_constraintStart_toEndOf="@id/isVerified" />
|
||||||
|
|
||||||
|
<ProgressBar
|
||||||
|
android:id="@+id/fav_progress"
|
||||||
|
style="@style/Widget.MaterialComponents.ProgressIndicator.Circular.Indeterminate"
|
||||||
|
android:layout_width="24dp"
|
||||||
|
android:layout_height="24dp"
|
||||||
|
android:visibility="gone"
|
||||||
|
app:layout_constraintBottom_toBottomOf="@id/mainFullName"
|
||||||
|
app:layout_constraintStart_toEndOf="@id/isVerified"
|
||||||
|
app:layout_constraintTop_toTopOf="@id/mainFullName"
|
||||||
|
tools:visibility="gone" />
|
||||||
|
|
||||||
|
<awais.instagrabber.customviews.RamboTextViewV2
|
||||||
|
android:id="@+id/mainBiography"
|
||||||
|
android:layout_width="0dp"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_margin="8dp"
|
||||||
|
android:background="?android:selectableItemBackground"
|
||||||
|
android:textAppearance="@style/TextAppearance.AppCompat.Body1"
|
||||||
|
app:layout_constraintBottom_toTopOf="@id/mainUrl"
|
||||||
|
app:layout_constraintEnd_toEndOf="parent"
|
||||||
|
app:layout_constraintStart_toStartOf="parent"
|
||||||
|
app:layout_constraintTop_toBottomOf="@id/mainFullName"
|
||||||
|
tools:text="THE GLORIOUS (step)OWNER OF THIS APP. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec id justo lorem. In malesuada feugiat ornare. Suspendisse et mauris imperdiet, luctus augue eget, tempus eros. Cras vitae molestie ipsum. " />
|
||||||
|
|
||||||
|
<awais.instagrabber.customviews.RamboTextViewV2
|
||||||
|
android:id="@+id/mainUrl"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_below="@id/mainBiography"
|
||||||
|
android:ellipsize="marquee"
|
||||||
|
android:padding="8dp"
|
||||||
|
android:textAppearance="@style/TextAppearance.AppCompat.Body1"
|
||||||
|
android:visibility="gone"
|
||||||
|
app:layout_constraintEnd_toEndOf="parent"
|
||||||
|
app:layout_constraintStart_toStartOf="parent"
|
||||||
|
app:layout_constraintTop_toBottomOf="@id/mainBiography"
|
||||||
|
tools:text="https://austinhuang.me/"
|
||||||
|
tools:textColor="@android:color/holo_blue_dark"
|
||||||
|
tools:visibility="visible" />
|
||||||
|
|
||||||
|
<com.google.android.material.button.MaterialButton
|
||||||
|
android:id="@+id/btnFollow"
|
||||||
|
style="@style/Widget.MaterialComponents.Button.TextButton"
|
||||||
|
android:layout_width="0dp"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:text="@string/follow"
|
||||||
|
android:textColor="@color/deep_purple_200"
|
||||||
|
android:visibility="gone"
|
||||||
|
app:icon="@drawable/ic_outline_person_add_24"
|
||||||
|
app:iconGravity="top"
|
||||||
|
app:iconTint="@color/deep_purple_200"
|
||||||
|
app:layout_constraintBottom_toTopOf="@id/highlights_barrier"
|
||||||
|
app:layout_constraintEnd_toStartOf="@id/btnTagged"
|
||||||
|
app:layout_constraintStart_toStartOf="parent"
|
||||||
|
app:layout_constraintTop_toBottomOf="@id/mainUrl"
|
||||||
|
app:rippleColor="@color/purple_200"
|
||||||
|
tools:visibility="visible" />
|
||||||
|
|
||||||
|
<com.google.android.material.button.MaterialButton
|
||||||
|
android:id="@+id/btnTagged"
|
||||||
|
style="@style/Widget.MaterialComponents.Button.TextButton"
|
||||||
|
android:layout_width="0dp"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:text="@string/tagged"
|
||||||
|
android:textColor="@color/deep_orange_600"
|
||||||
|
android:visibility="gone"
|
||||||
|
app:icon="@drawable/ic_outline_person_pin_24"
|
||||||
|
app:iconGravity="top"
|
||||||
|
app:iconTint="@color/deep_orange_600"
|
||||||
|
app:layout_constraintBottom_toTopOf="@id/highlights_barrier"
|
||||||
|
app:layout_constraintEnd_toStartOf="@id/btnSaved"
|
||||||
|
app:layout_constraintStart_toEndOf="@id/btnFollow"
|
||||||
|
app:layout_constraintTop_toBottomOf="@id/mainUrl"
|
||||||
|
tools:visibility="visible" />
|
||||||
|
|
||||||
|
<com.google.android.material.button.MaterialButton
|
||||||
|
android:id="@+id/btnSaved"
|
||||||
|
style="@style/Widget.MaterialComponents.Button.TextButton"
|
||||||
|
android:layout_width="0dp"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:text="@string/saved"
|
||||||
|
android:textColor="@color/blue_700"
|
||||||
|
android:visibility="gone"
|
||||||
|
app:icon="@drawable/ic_outline_class_24"
|
||||||
|
app:iconGravity="top"
|
||||||
|
app:iconTint="@color/blue_700"
|
||||||
|
app:layout_constraintBottom_toTopOf="@id/highlights_barrier"
|
||||||
|
app:layout_constraintEnd_toStartOf="@id/btnLiked"
|
||||||
|
app:layout_constraintStart_toEndOf="@id/btnTagged"
|
||||||
|
app:layout_constraintTop_toBottomOf="@id/mainUrl"
|
||||||
|
app:rippleColor="@color/blue_A400"
|
||||||
|
tools:visibility="visible" />
|
||||||
|
|
||||||
|
<com.google.android.material.button.MaterialButton
|
||||||
|
android:id="@+id/btnLiked"
|
||||||
|
style="@style/Widget.MaterialComponents.Button.TextButton"
|
||||||
|
android:layout_width="0dp"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:text="@string/liked"
|
||||||
|
android:textColor="@color/red_600"
|
||||||
|
android:visibility="gone"
|
||||||
|
app:icon="@drawable/ic_like"
|
||||||
|
app:iconGravity="top"
|
||||||
|
app:iconTint="@color/red_600"
|
||||||
|
app:layout_constraintBottom_toTopOf="@id/highlights_barrier"
|
||||||
|
app:layout_constraintEnd_toEndOf="parent"
|
||||||
|
app:layout_constraintEnd_toStartOf="@id/btnDM"
|
||||||
|
app:layout_constraintStart_toEndOf="@id/btnSaved"
|
||||||
|
app:layout_constraintTop_toBottomOf="@id/mainUrl"
|
||||||
|
app:rippleColor="@color/red_300"
|
||||||
|
tools:visibility="visible" />
|
||||||
|
|
||||||
|
<com.google.android.material.button.MaterialButton
|
||||||
|
android:id="@+id/btnDM"
|
||||||
|
style="@style/Widget.MaterialComponents.Button.TextButton"
|
||||||
|
android:layout_width="0dp"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:text="@string/dm_person"
|
||||||
|
android:textColor="@color/green"
|
||||||
|
android:visibility="gone"
|
||||||
|
app:icon="@drawable/ic_send_24"
|
||||||
|
app:iconGravity="top"
|
||||||
|
app:iconTint="@color/green"
|
||||||
|
app:layout_constraintBottom_toTopOf="@id/highlights_barrier"
|
||||||
|
app:layout_constraintEnd_toEndOf="parent"
|
||||||
|
app:layout_constraintStart_toEndOf="@id/btnLiked"
|
||||||
|
app:layout_constraintTop_toBottomOf="@id/mainUrl"
|
||||||
|
app:rippleColor="@color/green"
|
||||||
|
tools:visibility="visible" />
|
||||||
|
|
||||||
|
<androidx.constraintlayout.widget.Barrier
|
||||||
|
android:id="@+id/highlights_barrier"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
app:barrierDirection="bottom"
|
||||||
|
app:constraint_referenced_ids="btnTagged, btnSaved, btnLiked, btnFollow, btnDM" />
|
||||||
|
|
||||||
|
<androidx.recyclerview.widget.RecyclerView
|
||||||
|
android:id="@+id/highlightsList"
|
||||||
|
android:layout_width="0dp"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:clipToPadding="false"
|
||||||
|
android:paddingStart="5dp"
|
||||||
|
android:paddingLeft="5dp"
|
||||||
|
android:paddingEnd="5dp"
|
||||||
|
android:paddingRight="5dp"
|
||||||
|
android:visibility="gone"
|
||||||
|
app:layout_constraintBottom_toBottomOf="parent"
|
||||||
|
app:layout_constraintEnd_toEndOf="parent"
|
||||||
|
app:layout_constraintStart_toStartOf="parent"
|
||||||
|
app:layout_constraintTop_toTopOf="@id/highlights_barrier"
|
||||||
|
tools:itemCount="2"
|
||||||
|
tools:visibility="visible" />
|
||||||
|
</androidx.constraintlayout.widget.ConstraintLayout>
|
Loading…
Reference in New Issue
Block a user