fix favourites logic
This commit is contained in:
parent
a983f44769
commit
484b0f9657
@ -81,7 +81,6 @@ public class FavoritesFragment extends Fragment {
|
|||||||
@Override
|
@Override
|
||||||
public void onSuccess(final List<Favorite> favorites) {
|
public void onSuccess(final List<Favorite> favorites) {
|
||||||
favoritesViewModel.getList().postValue(favorites);
|
favoritesViewModel.getList().postValue(favorites);
|
||||||
fetchMissingInfo(favorites);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -156,109 +155,4 @@ public class FavoritesFragment extends Fragment {
|
|||||||
binding.favoriteList.setAdapter(adapter);
|
binding.favoriteList.setAdapter(adapter);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private void fetchMissingInfo(final List<Favorite> allFavorites) {
|
|
||||||
final Runnable runnable = () -> {
|
|
||||||
final List<Favorite> updatedList = new ArrayList<>(allFavorites);
|
|
||||||
// cyclic barrier is to make the async calls synchronous
|
|
||||||
final CyclicBarrier cyclicBarrier = new CyclicBarrier(2, () -> {
|
|
||||||
// Log.d(TAG, "fetchMissingInfo: barrier action");
|
|
||||||
favoritesViewModel.getList().postValue(new ArrayList<>(updatedList));
|
|
||||||
});
|
|
||||||
try {
|
|
||||||
for (final Favorite model : allFavorites) {
|
|
||||||
cyclicBarrier.reset();
|
|
||||||
// if the model has missing pic or display name (for user and location), fetch those details
|
|
||||||
switch (model.getType()) {
|
|
||||||
case LOCATION:
|
|
||||||
if (TextUtils.isEmpty(model.getDisplayName())
|
|
||||||
|| TextUtils.isEmpty(model.getPicUrl())) {
|
|
||||||
new LocationFetcher(model.getQuery(), result -> {
|
|
||||||
if (result == null) return;
|
|
||||||
final int i = updatedList.indexOf(model);
|
|
||||||
updatedList.remove(i);
|
|
||||||
final Favorite updated = new Favorite(
|
|
||||||
model.getId(),
|
|
||||||
model.getQuery(),
|
|
||||||
model.getType(),
|
|
||||||
result.getName(),
|
|
||||||
result.getSdProfilePic(),
|
|
||||||
model.getDateAdded()
|
|
||||||
);
|
|
||||||
favoriteRepository.insertOrUpdateFavorite(updated, new RepositoryCallback<Void>() {
|
|
||||||
@Override
|
|
||||||
public void onSuccess(final Void result) {
|
|
||||||
updatedList.add(i, updated);
|
|
||||||
try {
|
|
||||||
cyclicBarrier.await();
|
|
||||||
} catch (BrokenBarrierException | InterruptedException e) {
|
|
||||||
Log.e(TAG, "fetchMissingInfo: ", e);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onDataNotAvailable() {
|
|
||||||
try {
|
|
||||||
cyclicBarrier.await();
|
|
||||||
} catch (BrokenBarrierException | InterruptedException e) {
|
|
||||||
Log.e(TAG, "fetchMissingInfo: ", e);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}).execute();
|
|
||||||
cyclicBarrier.await();
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case USER:
|
|
||||||
if (TextUtils.isEmpty(model.getDisplayName())
|
|
||||||
|| TextUtils.isEmpty(model.getPicUrl())) {
|
|
||||||
new ProfileFetcher(model.getQuery(), result -> {
|
|
||||||
if (result == null) return;
|
|
||||||
final int i = updatedList.indexOf(model);
|
|
||||||
updatedList.remove(i);
|
|
||||||
final Favorite updated = new Favorite(
|
|
||||||
model.getId(),
|
|
||||||
model.getQuery(),
|
|
||||||
model.getType(),
|
|
||||||
result.getName(),
|
|
||||||
result.getSdProfilePic(),
|
|
||||||
model.getDateAdded()
|
|
||||||
);
|
|
||||||
favoriteRepository.insertOrUpdateFavorite(updated, new RepositoryCallback<Void>() {
|
|
||||||
@Override
|
|
||||||
public void onSuccess(final Void result) {
|
|
||||||
try {
|
|
||||||
cyclicBarrier.await();
|
|
||||||
} catch (BrokenBarrierException | InterruptedException e) {
|
|
||||||
Log.e(TAG, "fetchMissingInfo: ", e);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onDataNotAvailable() {
|
|
||||||
try {
|
|
||||||
cyclicBarrier.await();
|
|
||||||
} catch (BrokenBarrierException | InterruptedException e) {
|
|
||||||
Log.e(TAG, "fetchMissingInfo: ", e);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
});
|
|
||||||
updatedList.add(i, updated);
|
|
||||||
}).execute();
|
|
||||||
cyclicBarrier.await();
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case HASHTAG:
|
|
||||||
default:
|
|
||||||
// hashtags don't require displayName or pic
|
|
||||||
// updatedList.add(model);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} catch (Exception e) {
|
|
||||||
Log.e(TAG, "fetchMissingInfo: ", e);
|
|
||||||
}
|
|
||||||
favoritesViewModel.getList().postValue(updatedList);
|
|
||||||
};
|
|
||||||
new Thread(runnable).start();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
@ -464,6 +464,20 @@ public class HashTagFragment extends Fragment implements SwipeRefreshLayout.OnRe
|
|||||||
public void onSuccess(final Favorite result) {
|
public void onSuccess(final Favorite result) {
|
||||||
hashtagDetailsBinding.favChip.setChipIconResource(R.drawable.ic_star_check_24);
|
hashtagDetailsBinding.favChip.setChipIconResource(R.drawable.ic_star_check_24);
|
||||||
hashtagDetailsBinding.favChip.setText(R.string.favorite_short);
|
hashtagDetailsBinding.favChip.setText(R.string.favorite_short);
|
||||||
|
favoriteRepository.insertOrUpdateFavorite(new Favorite(
|
||||||
|
result.getId(),
|
||||||
|
hashtag.substring(1),
|
||||||
|
FavoriteType.HASHTAG,
|
||||||
|
hashtagModel.getName(),
|
||||||
|
hashtagModel.getSdProfilePic(),
|
||||||
|
result.getDateAdded()
|
||||||
|
), new RepositoryCallback<Void>() {
|
||||||
|
@Override
|
||||||
|
public void onSuccess(final Void result) {}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onDataNotAvailable() {}
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -496,7 +510,7 @@ public class HashTagFragment extends Fragment implements SwipeRefreshLayout.OnRe
|
|||||||
hashtag.substring(1),
|
hashtag.substring(1),
|
||||||
FavoriteType.HASHTAG,
|
FavoriteType.HASHTAG,
|
||||||
hashtagModel.getName(),
|
hashtagModel.getName(),
|
||||||
null,
|
hashtagModel.getSdProfilePic(),
|
||||||
new Date()
|
new Date()
|
||||||
), new RepositoryCallback<Void>() {
|
), new RepositoryCallback<Void>() {
|
||||||
@Override
|
@Override
|
||||||
|
@ -456,6 +456,20 @@ public class LocationFragment extends Fragment implements SwipeRefreshLayout.OnR
|
|||||||
locationDetailsBinding.favChip.setChipIconResource(R.drawable.ic_star_check_24);
|
locationDetailsBinding.favChip.setChipIconResource(R.drawable.ic_star_check_24);
|
||||||
locationDetailsBinding.favChip.setChipIconResource(R.drawable.ic_star_check_24);
|
locationDetailsBinding.favChip.setChipIconResource(R.drawable.ic_star_check_24);
|
||||||
locationDetailsBinding.favChip.setText(R.string.favorite_short);
|
locationDetailsBinding.favChip.setText(R.string.favorite_short);
|
||||||
|
favoriteRepository.insertOrUpdateFavorite(new Favorite(
|
||||||
|
result.getId(),
|
||||||
|
locationId,
|
||||||
|
FavoriteType.LOCATION,
|
||||||
|
locationModel.getName(),
|
||||||
|
locationModel.getSdProfilePic(),
|
||||||
|
result.getDateAdded()
|
||||||
|
), new RepositoryCallback<Void>() {
|
||||||
|
@Override
|
||||||
|
public void onSuccess(final Void result) {}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onDataNotAvailable() {}
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -578,6 +578,20 @@ public class ProfileFragment extends Fragment implements SwipeRefreshLayout.OnRe
|
|||||||
public void onSuccess(final Favorite result) {
|
public void onSuccess(final Favorite result) {
|
||||||
profileDetailsBinding.favChip.setChipIconResource(R.drawable.ic_star_check_24);
|
profileDetailsBinding.favChip.setChipIconResource(R.drawable.ic_star_check_24);
|
||||||
profileDetailsBinding.favChip.setText(R.string.added_to_favs);
|
profileDetailsBinding.favChip.setText(R.string.added_to_favs);
|
||||||
|
favoriteRepository.insertOrUpdateFavorite(new Favorite(
|
||||||
|
result.getId(),
|
||||||
|
finalUsername,
|
||||||
|
FavoriteType.USER,
|
||||||
|
profileModel.getName(),
|
||||||
|
profileModel.getSdProfilePic(),
|
||||||
|
result.getDateAdded()
|
||||||
|
), new RepositoryCallback<Void>() {
|
||||||
|
@Override
|
||||||
|
public void onSuccess(final Void result) {}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onDataNotAvailable() {}
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -27,13 +27,14 @@
|
|||||||
android:layout_height="@dimen/profile_chip_size"
|
android:layout_height="@dimen/profile_chip_size"
|
||||||
android:layout_marginStart="4dp"
|
android:layout_marginStart="4dp"
|
||||||
android:clickable="false"
|
android:clickable="false"
|
||||||
android:visibility="gone"
|
|
||||||
tools:visibility="visible"
|
|
||||||
android:gravity="center"
|
android:gravity="center"
|
||||||
|
android:visibility="gone"
|
||||||
|
app:chipBackgroundColor="@null"
|
||||||
app:layout_constraintBottom_toTopOf="@id/mainFollowers"
|
app:layout_constraintBottom_toTopOf="@id/mainFollowers"
|
||||||
app:layout_constraintStart_toEndOf="@id/mainProfileImage"
|
app:layout_constraintStart_toEndOf="@id/mainProfileImage"
|
||||||
app:layout_constraintTop_toTopOf="@id/mainProfileImage"
|
app:layout_constraintTop_toTopOf="@id/mainProfileImage"
|
||||||
tools:text="35 Posts" />
|
tools:text="35 Posts"
|
||||||
|
tools:visibility="visible" />
|
||||||
|
|
||||||
<com.google.android.material.chip.Chip
|
<com.google.android.material.chip.Chip
|
||||||
android:id="@+id/mainStatus"
|
android:id="@+id/mainStatus"
|
||||||
@ -41,13 +42,14 @@
|
|||||||
android:layout_height="@dimen/profile_chip_size"
|
android:layout_height="@dimen/profile_chip_size"
|
||||||
android:layout_marginStart="4dp"
|
android:layout_marginStart="4dp"
|
||||||
android:clickable="false"
|
android:clickable="false"
|
||||||
android:visibility="gone"
|
|
||||||
tools:visibility="visible"
|
|
||||||
android:gravity="center"
|
android:gravity="center"
|
||||||
|
android:visibility="gone"
|
||||||
|
app:chipBackgroundColor="@null"
|
||||||
app:layout_constraintBottom_toTopOf="@id/mainFollowers"
|
app:layout_constraintBottom_toTopOf="@id/mainFollowers"
|
||||||
app:layout_constraintStart_toEndOf="@id/mainPostCount"
|
app:layout_constraintStart_toEndOf="@id/mainPostCount"
|
||||||
app:layout_constraintTop_toTopOf="@id/mainPostCount"
|
app:layout_constraintTop_toTopOf="@id/mainPostCount"
|
||||||
tools:text="omg what do u expect" />
|
tools:text="omg what do u expect"
|
||||||
|
tools:visibility="visible" />
|
||||||
|
|
||||||
<com.google.android.material.chip.Chip
|
<com.google.android.material.chip.Chip
|
||||||
android:id="@+id/mainFollowers"
|
android:id="@+id/mainFollowers"
|
||||||
@ -55,14 +57,15 @@
|
|||||||
android:layout_height="@dimen/profile_chip_size"
|
android:layout_height="@dimen/profile_chip_size"
|
||||||
android:layout_marginStart="4dp"
|
android:layout_marginStart="4dp"
|
||||||
android:clickable="false"
|
android:clickable="false"
|
||||||
android:visibility="gone"
|
|
||||||
tools:visibility="visible"
|
|
||||||
android:gravity="center"
|
android:gravity="center"
|
||||||
|
android:visibility="gone"
|
||||||
|
app:chipBackgroundColor="@null"
|
||||||
app:layout_constraintBottom_toTopOf="@id/fav_chip"
|
app:layout_constraintBottom_toTopOf="@id/fav_chip"
|
||||||
app:layout_constraintStart_toEndOf="@id/mainProfileImage"
|
app:layout_constraintStart_toEndOf="@id/mainProfileImage"
|
||||||
app:layout_constraintTop_toBottomOf="@id/mainPostCount"
|
app:layout_constraintTop_toBottomOf="@id/mainPostCount"
|
||||||
app:rippleColor="@color/grey_400"
|
app:rippleColor="@color/grey_400"
|
||||||
tools:text="10 Followers" />
|
tools:text="10 Followers"
|
||||||
|
tools:visibility="visible" />
|
||||||
|
|
||||||
<com.google.android.material.chip.Chip
|
<com.google.android.material.chip.Chip
|
||||||
android:id="@+id/mainFollowing"
|
android:id="@+id/mainFollowing"
|
||||||
@ -70,14 +73,15 @@
|
|||||||
android:layout_height="@dimen/profile_chip_size"
|
android:layout_height="@dimen/profile_chip_size"
|
||||||
android:layout_marginStart="4dp"
|
android:layout_marginStart="4dp"
|
||||||
android:clickable="false"
|
android:clickable="false"
|
||||||
android:visibility="gone"
|
|
||||||
tools:visibility="visible"
|
|
||||||
android:gravity="center"
|
android:gravity="center"
|
||||||
|
android:visibility="gone"
|
||||||
|
app:chipBackgroundColor="@null"
|
||||||
app:layout_constraintBottom_toTopOf="@id/fav_chip"
|
app:layout_constraintBottom_toTopOf="@id/fav_chip"
|
||||||
app:layout_constraintStart_toEndOf="@id/mainFollowers"
|
app:layout_constraintStart_toEndOf="@id/mainFollowers"
|
||||||
app:layout_constraintTop_toBottomOf="@id/mainPostCount"
|
app:layout_constraintTop_toBottomOf="@id/mainPostCount"
|
||||||
app:rippleColor="@color/grey_400"
|
app:rippleColor="@color/grey_400"
|
||||||
tools:text="10 Following" />
|
tools:text="10 Following"
|
||||||
|
tools:visibility="visible" />
|
||||||
|
|
||||||
<com.google.android.material.chip.Chip
|
<com.google.android.material.chip.Chip
|
||||||
android:id="@+id/fav_chip"
|
android:id="@+id/fav_chip"
|
||||||
@ -86,6 +90,7 @@
|
|||||||
android:layout_marginStart="8dp"
|
android:layout_marginStart="8dp"
|
||||||
android:text="@string/add_to_favorites"
|
android:text="@string/add_to_favorites"
|
||||||
android:visibility="gone"
|
android:visibility="gone"
|
||||||
|
app:chipBackgroundColor="@null"
|
||||||
app:chipIcon="@drawable/ic_outline_star_plus_24"
|
app:chipIcon="@drawable/ic_outline_star_plus_24"
|
||||||
app:chipIconTint="@color/yellow_800"
|
app:chipIconTint="@color/yellow_800"
|
||||||
app:layout_constraintBottom_toBottomOf="@id/mainProfileImage"
|
app:layout_constraintBottom_toBottomOf="@id/mainProfileImage"
|
||||||
@ -101,6 +106,7 @@
|
|||||||
android:layout_marginStart="4dp"
|
android:layout_marginStart="4dp"
|
||||||
android:text="@string/tagged"
|
android:text="@string/tagged"
|
||||||
android:visibility="gone"
|
android:visibility="gone"
|
||||||
|
app:chipBackgroundColor="@null"
|
||||||
app:chipIcon="@drawable/ic_outline_person_pin_24"
|
app:chipIcon="@drawable/ic_outline_person_pin_24"
|
||||||
app:chipIconTint="@color/deep_orange_800"
|
app:chipIconTint="@color/deep_orange_800"
|
||||||
app:layout_constraintBottom_toBottomOf="@id/fav_chip"
|
app:layout_constraintBottom_toBottomOf="@id/fav_chip"
|
||||||
|
Loading…
Reference in New Issue
Block a user