diff options
Diffstat (limited to 'app/src/main/java/it/niedermann/nextcloud/deck/ui/card/activities')
3 files changed, 65 insertions, 37 deletions
diff --git a/app/src/main/java/it/niedermann/nextcloud/deck/ui/card/activities/CardActivityAdapter.java b/app/src/main/java/it/niedermann/nextcloud/deck/ui/card/activities/CardActivityAdapter.java index a64cf3a44..adcc21dc0 100644 --- a/app/src/main/java/it/niedermann/nextcloud/deck/ui/card/activities/CardActivityAdapter.java +++ b/app/src/main/java/it/niedermann/nextcloud/deck/ui/card/activities/CardActivityAdapter.java @@ -5,24 +5,28 @@ import android.view.MenuInflater; import android.view.ViewGroup; import androidx.annotation.NonNull; +import androidx.annotation.Nullable; import androidx.recyclerview.widget.RecyclerView; +import java.util.ArrayList; import java.util.List; import it.niedermann.nextcloud.deck.databinding.ItemActivityBinding; import it.niedermann.nextcloud.deck.model.ocs.Activity; +import it.niedermann.nextcloud.deck.ui.theme.ThemeUtils; public class CardActivityAdapter extends RecyclerView.Adapter<CardActivityViewHolder> { @NonNull - private final List<Activity> activities; + private final List<Activity> activities = new ArrayList<>(); + @Nullable + private ThemeUtils utils; @NonNull private final MenuInflater menuInflater; @SuppressWarnings("WeakerAccess") - public CardActivityAdapter(@NonNull List<Activity> activities, @NonNull MenuInflater menuInflater) { + public CardActivityAdapter(@NonNull MenuInflater menuInflater) { super(); - this.activities = activities; this.menuInflater = menuInflater; } @@ -34,9 +38,16 @@ public class CardActivityAdapter extends RecyclerView.Adapter<CardActivityViewHo return new CardActivityViewHolder(binding); } + public void setData(@NonNull List<Activity> activities, @NonNull ThemeUtils utils) { + this.activities.clear(); + this.activities.addAll(activities); + this.utils = utils; + this.notifyDataSetChanged(); + } + @Override public void onBindViewHolder(@NonNull CardActivityViewHolder holder, int position) { - holder.bind(activities.get(position), menuInflater); + holder.bind(activities.get(position), menuInflater, utils); } @Override diff --git a/app/src/main/java/it/niedermann/nextcloud/deck/ui/card/activities/CardActivityFragment.java b/app/src/main/java/it/niedermann/nextcloud/deck/ui/card/activities/CardActivityFragment.java index d301968c4..41d4d0963 100644 --- a/app/src/main/java/it/niedermann/nextcloud/deck/ui/card/activities/CardActivityFragment.java +++ b/app/src/main/java/it/niedermann/nextcloud/deck/ui/card/activities/CardActivityFragment.java @@ -9,6 +9,7 @@ import androidx.annotation.NonNull; import androidx.fragment.app.Fragment; import androidx.lifecycle.ViewModelProvider; +import it.niedermann.android.reactivelivedata.ReactiveLiveData; import it.niedermann.nextcloud.deck.DeckLog; import it.niedermann.nextcloud.deck.databinding.FragmentCardEditTabActivitiesBinding; import it.niedermann.nextcloud.deck.ui.card.EditCardViewModel; @@ -38,18 +39,22 @@ public class CardActivityFragment extends Fragment implements Themed { return binding.getRoot(); } - viewModel.getBoardColor().observe(getViewLifecycleOwner(), this::applyTheme); + final var adapter = new CardActivityAdapter(requireActivity().getMenuInflater()); + binding.activitiesList.setAdapter(adapter); - viewModel.syncActivitiesForCard(viewModel.getFullCard().getCard()).observe(getViewLifecycleOwner(), (activities -> { - if (activities == null || activities.size() == 0) { - binding.emptyContentView.setVisibility(View.VISIBLE); - binding.activitiesList.setVisibility(View.GONE); - } else { - binding.emptyContentView.setVisibility(View.GONE); - binding.activitiesList.setVisibility(View.VISIBLE); - binding.activitiesList.setAdapter(new CardActivityAdapter(activities, requireActivity().getMenuInflater())); - } - })); + new ReactiveLiveData<>(viewModel.syncActivitiesForCard(viewModel.getFullCard().getCard())) + .combineWith(viewModel::getBoardColor) + .observe(getViewLifecycleOwner(), data -> { + applyTheme(data.second); + if (data.first == null || data.first.size() == 0) { + binding.emptyContentView.setVisibility(View.VISIBLE); + binding.activitiesList.setVisibility(View.GONE); + } else { + binding.emptyContentView.setVisibility(View.GONE); + binding.activitiesList.setVisibility(View.VISIBLE); + } + adapter.setData(data.first, ThemeUtils.of(data.second, requireContext())); + }); return binding.getRoot(); } diff --git a/app/src/main/java/it/niedermann/nextcloud/deck/ui/card/activities/CardActivityViewHolder.java b/app/src/main/java/it/niedermann/nextcloud/deck/ui/card/activities/CardActivityViewHolder.java index 1d3101d61..b9f4ca436 100644 --- a/app/src/main/java/it/niedermann/nextcloud/deck/ui/card/activities/CardActivityViewHolder.java +++ b/app/src/main/java/it/niedermann/nextcloud/deck/ui/card/activities/CardActivityViewHolder.java @@ -1,19 +1,25 @@ package it.niedermann.nextcloud.deck.ui.card.activities; import android.content.Context; +import android.content.res.ColorStateList; import android.view.MenuInflater; import android.view.View; -import android.widget.ImageView; import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.core.content.ContextCompat; import androidx.recyclerview.widget.RecyclerView; +import com.nextcloud.android.common.ui.theme.utils.ColorRole; + +import java.util.function.Function; + import it.niedermann.android.util.ClipboardUtil; import it.niedermann.nextcloud.deck.R; import it.niedermann.nextcloud.deck.databinding.ItemActivityBinding; import it.niedermann.nextcloud.deck.model.enums.ActivityType; import it.niedermann.nextcloud.deck.model.ocs.Activity; -import it.niedermann.nextcloud.deck.ui.theme.DeckViewThemeUtils; +import it.niedermann.nextcloud.deck.ui.theme.ThemeUtils; import it.niedermann.nextcloud.deck.util.DateUtil; public class CardActivityViewHolder extends RecyclerView.ViewHolder { @@ -25,7 +31,7 @@ public class CardActivityViewHolder extends RecyclerView.ViewHolder { this.binding = binding; } - public void bind(@NonNull Activity activity, @NonNull MenuInflater inflater) { + public void bind(@NonNull Activity activity, @NonNull MenuInflater inflater, @Nullable ThemeUtils utils) { final var context = itemView.getContext(); binding.date.setText(DateUtil.getRelativeDateTimeString(context, activity.getLastModified().toEpochMilli())); binding.subject.setText(activity.getSubject()); @@ -34,33 +40,39 @@ public class CardActivityViewHolder extends RecyclerView.ViewHolder { inflater.inflate(R.menu.activity_menu, menu); menu.findItem(android.R.id.copy).setOnMenuItemClickListener(item -> ClipboardUtil.copyToClipboard(context, activity.getSubject())); }); + final var type = ActivityType.findById(activity.getType()); - setImageResource(binding.type, type); - setImageColor(context, binding.type, type); + bindImageResource(type); + if (utils != null) { + applyTheme(context, utils, type); + } } - private static void setImageResource(@NonNull ImageView imageView, @NonNull ActivityType type) { + private void bindImageResource(@NonNull ActivityType type) { switch (type) { - case CHANGE -> imageView.setImageResource(R.drawable.type_change_36dp); - case ADD -> imageView.setImageResource(R.drawable.type_add_color_36dp); - case DELETE -> imageView.setImageResource(R.drawable.type_delete_color_36dp); - case ARCHIVE -> imageView.setImageResource(R.drawable.type_archive_36dp); - case TAGGED_WITH_LABEL -> - imageView.setImageResource(R.drawable.type_label_36dp); - case COMMENT -> imageView.setImageResource(R.drawable.type_comment_36dp); - case FILES -> imageView.setImageResource(R.drawable.type_file_36dp); - case HISTORY -> imageView.setImageResource(R.drawable.type_history_36dp); - default -> imageView.setImageResource(R.drawable.ic_app_logo); + case CHANGE -> binding.type.setImageResource(R.drawable.type_change_36dp); + case ADD -> binding.type.setImageResource(R.drawable.type_add_color_36dp); + case DELETE -> binding.type.setImageResource(R.drawable.type_delete_color_36dp); + case ARCHIVE -> binding.type.setImageResource(R.drawable.type_archive_36dp); + case TAGGED_WITH_LABEL -> binding.type.setImageResource(R.drawable.type_label_36dp); + case COMMENT -> binding.type.setImageResource(R.drawable.type_comment_36dp); + case FILES -> binding.type.setImageResource(R.drawable.type_file_36dp); + case HISTORY -> binding.type.setImageResource(R.drawable.type_history_36dp); + default -> binding.type.setImageResource(R.drawable.ic_app_logo); } } - private static void setImageColor(@NonNull Context context, @NonNull ImageView imageView, @NonNull ActivityType type) { + private void applyTheme(@NonNull Context context, @NonNull ThemeUtils utils, @NonNull ActivityType type) { + utils.platform.colorTextView(binding.subject, ColorRole.ON_SURFACE); + utils.platform.colorTextView(binding.date, ColorRole.ON_SURFACE_VARIANT); + + final Function<Integer, ColorStateList> getColor = color -> + ColorStateList.valueOf(ContextCompat.getColor(context, color)); + switch (type) { - case ADD -> - DeckViewThemeUtils.setImageColor(context, imageView, R.color.activity_create); - case DELETE -> - DeckViewThemeUtils.setImageColor(context, imageView, R.color.activity_delete); - default -> DeckViewThemeUtils.setImageColor(context, imageView, R.color.surfaceVariant); + case ADD -> binding.type.setImageTintList(getColor.apply(R.color.activity_create)); + case DELETE -> binding.type.setImageTintList(getColor.apply(R.color.activity_delete)); + default -> utils.platform.colorImageView(binding.type, ColorRole.ON_SURFACE_VARIANT); } } }
\ No newline at end of file |