From 98ab726e48f829c66453e73d9ff57cc3e0a71ec6 Mon Sep 17 00:00:00 2001 From: Daniele Verducci Date: Sun, 29 Mar 2026 11:36:55 +0200 Subject: [PATCH 01/11] 591: Refactored user info adapter int its own class --- .../android/ui/activity/UserInfoActivity.java | 84 ++----------------- .../android/ui/adapter/UserInfoAdapter.kt | 59 +++++++++++++ 2 files changed, 66 insertions(+), 77 deletions(-) create mode 100644 app/src/main/java/com/owncloud/android/ui/adapter/UserInfoAdapter.kt diff --git a/app/src/main/java/com/owncloud/android/ui/activity/UserInfoActivity.java b/app/src/main/java/com/owncloud/android/ui/activity/UserInfoActivity.java index dd137e4f9581..b2ae9cf1b6eb 100644 --- a/app/src/main/java/com/owncloud/android/ui/activity/UserInfoActivity.java +++ b/app/src/main/java/com/owncloud/android/ui/activity/UserInfoActivity.java @@ -8,21 +8,19 @@ * SPDX-FileCopyrightText: 2017 Mario Danic * SPDX-FileCopyrightText: 2017 Nextcloud GmbH * SPDX-FileCopyrightText: 2025 TSI-mc + * SPDX-FileCopyrightText: 2026 Daniele Verducci createUserInfoDetails(UserInfo userInfo) { - List result = new LinkedList<>(); + private List createUserInfoDetails(UserInfo userInfo) { + List result = new LinkedList<>(); addToListIfNeeded(result, R.drawable.ic_phone, userInfo.getPhone(), R.string.user_info_phone); addToListIfNeeded(result, R.drawable.ic_email, userInfo.getEmail(), R.string.user_info_email); @@ -301,10 +293,10 @@ private List createUserInfoDetails(UserInfo userInfo) { return result; } - private void addToListIfNeeded(List info, @DrawableRes int icon, String text, + private void addToListIfNeeded(List info, @DrawableRes int icon, String text, @StringRes int contentDescriptionInt) { if (!TextUtils.isEmpty(text)) { - info.add(new UserInfoDetailsItem(icon, text, getResources().getString(contentDescriptionInt))); + info.add(new UserInfoAdapter.UserInfoDetailsItem(icon, text, getResources().getString(contentDescriptionInt))); } } @@ -362,66 +354,4 @@ public void onMessageEvent(TokenPushEvent event) { PushUtils.pushRegistrationToServer(getUserAccountManager(), preferences.getPushToken()); } - - protected static class UserInfoDetailsItem { - @DrawableRes public int icon; - public String text; - public String iconContentDescription; - - public UserInfoDetailsItem(@DrawableRes int icon, String text, String iconContentDescription) { - this.icon = icon; - this.text = text; - this.iconContentDescription = iconContentDescription; - } - } - - protected static class UserInfoAdapter extends RecyclerView.Adapter { - protected List mDisplayList; - protected ViewThemeUtils viewThemeUtils; - - public static class ViewHolder extends RecyclerView.ViewHolder { - protected UserInfoDetailsTableItemBinding binding; - - public ViewHolder(UserInfoDetailsTableItemBinding binding) { - super(binding.getRoot()); - this.binding = binding; - } - } - - public UserInfoAdapter(List displayList, ViewThemeUtils viewThemeUtils) { - mDisplayList = displayList == null ? new LinkedList<>() : displayList; - this.viewThemeUtils = viewThemeUtils; - } - - @SuppressLint("NotifyDataSetChanged") - public void setData(List displayList) { - mDisplayList = displayList == null ? new LinkedList<>() : displayList; - notifyDataSetChanged(); - } - - @NonNull - @Override - public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ViewHolder( - UserInfoDetailsTableItemBinding.inflate( - LayoutInflater.from(parent.getContext()), - parent, - false) - ); - } - - @Override - public void onBindViewHolder(@NonNull ViewHolder holder, int position) { - UserInfoDetailsItem item = mDisplayList.get(position); - holder.binding.icon.setImageResource(item.icon); - holder.binding.text.setText(item.text); - holder.binding.icon.setContentDescription(item.iconContentDescription); - viewThemeUtils.platform.colorImageView(holder.binding.icon); - } - - @Override - public int getItemCount() { - return mDisplayList.size(); - } - } } diff --git a/app/src/main/java/com/owncloud/android/ui/adapter/UserInfoAdapter.kt b/app/src/main/java/com/owncloud/android/ui/adapter/UserInfoAdapter.kt new file mode 100644 index 000000000000..b63ea0f8a26f --- /dev/null +++ b/app/src/main/java/com/owncloud/android/ui/adapter/UserInfoAdapter.kt @@ -0,0 +1,59 @@ +/* + * Nextcloud - Android Client + * + * SPDX-FileCopyrightText: 2026 Daniele Verducci + * SPDX-License-Identifier: AGPL-3.0-or-later + */ + +package com.owncloud.android.ui.adapter + +import android.annotation.SuppressLint +import android.view.LayoutInflater +import android.view.ViewGroup +import androidx.annotation.DrawableRes +import androidx.recyclerview.widget.RecyclerView +import com.nextcloud.android.common.ui.theme.utils.ColorRole +import com.owncloud.android.databinding.UserInfoDetailsTableItemBinding +import com.owncloud.android.utils.theme.ViewThemeUtils + +class UserInfoAdapter(val mDisplayList: MutableList, val viewThemeUtils: ViewThemeUtils) : + RecyclerView.Adapter() { + + class UserInfoDetailsItem( + @field:DrawableRes @param:DrawableRes var icon: Int, + var text: String?, + var iconContentDescription: String? + ) + + class ViewHolder(var binding: UserInfoDetailsTableItemBinding) : + RecyclerView.ViewHolder(binding.getRoot()) + + @SuppressLint("NotifyDataSetChanged") + fun setData(displayList: MutableList) { + mDisplayList.clear() + mDisplayList.addAll(displayList) + notifyDataSetChanged() + } + + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder { + return ViewHolder( + UserInfoDetailsTableItemBinding.inflate( + LayoutInflater.from(parent.context), + parent, + false + ) + ) + } + + override fun onBindViewHolder(holder: ViewHolder, position: Int) { + val item = mDisplayList[position] + holder.binding.icon.setImageResource(item.icon) + holder.binding.text.text = item.text + holder.binding.icon.contentDescription = item.iconContentDescription + viewThemeUtils.platform.colorImageView(holder.binding.icon, ColorRole.PRIMARY) + } + + override fun getItemCount(): Int { + return mDisplayList.size + } +} \ No newline at end of file From da3f26206b3196b276f11bf8324ef8aa9d0b23f4 Mon Sep 17 00:00:00 2001 From: Daniele Verducci Date: Sun, 29 Mar 2026 12:17:57 +0200 Subject: [PATCH 02/11] 591: Created cell styles and layouts for sectioned user info list Signed-off-by: Daniele Verducci --- ...ounded_corners_listitem_center_background.xml | 14 ++++++++++++++ ...rounded_corners_listitem_first_background.xml | 15 +++++++++++++++ .../rounded_corners_listitem_last_background.xml | 16 ++++++++++++++++ ...ounded_corners_listitem_single_background.xml | 12 ++++++++++++ .../res/layout/user_info_details_table_item.xml | 8 ++++++-- .../user_info_details_table_item_title.xml | 14 ++++++++++++++ app/src/main/res/layout/user_info_layout.xml | 1 + app/src/main/res/values/styles.xml | 6 ++++++ 8 files changed, 84 insertions(+), 2 deletions(-) create mode 100644 app/src/main/res/drawable/rounded_corners_listitem_center_background.xml create mode 100644 app/src/main/res/drawable/rounded_corners_listitem_first_background.xml create mode 100644 app/src/main/res/drawable/rounded_corners_listitem_last_background.xml create mode 100644 app/src/main/res/drawable/rounded_corners_listitem_single_background.xml create mode 100644 app/src/main/res/layout/user_info_details_table_item_title.xml diff --git a/app/src/main/res/drawable/rounded_corners_listitem_center_background.xml b/app/src/main/res/drawable/rounded_corners_listitem_center_background.xml new file mode 100644 index 000000000000..4ebd24ac9ac4 --- /dev/null +++ b/app/src/main/res/drawable/rounded_corners_listitem_center_background.xml @@ -0,0 +1,14 @@ + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/rounded_corners_listitem_first_background.xml b/app/src/main/res/drawable/rounded_corners_listitem_first_background.xml new file mode 100644 index 000000000000..8371467569a1 --- /dev/null +++ b/app/src/main/res/drawable/rounded_corners_listitem_first_background.xml @@ -0,0 +1,15 @@ + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/rounded_corners_listitem_last_background.xml b/app/src/main/res/drawable/rounded_corners_listitem_last_background.xml new file mode 100644 index 000000000000..aec7a236b418 --- /dev/null +++ b/app/src/main/res/drawable/rounded_corners_listitem_last_background.xml @@ -0,0 +1,16 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/rounded_corners_listitem_single_background.xml b/app/src/main/res/drawable/rounded_corners_listitem_single_background.xml new file mode 100644 index 000000000000..9aacdc72c76a --- /dev/null +++ b/app/src/main/res/drawable/rounded_corners_listitem_single_background.xml @@ -0,0 +1,12 @@ + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/user_info_details_table_item.xml b/app/src/main/res/layout/user_info_details_table_item.xml index c53b4169af77..1504dfaf9e52 100644 --- a/app/src/main/res/layout/user_info_details_table_item.xml +++ b/app/src/main/res/layout/user_info_details_table_item.xml @@ -4,14 +4,18 @@ ~ ~ SPDX-FileCopyrightText: 2018 Andy Scherzinger ~ SPDX-FileCopyrightText: 2018 Nextcloud + ~ SPDX-FileCopyrightText: 2026 Daniele Verducci ~ SPDX-License-Identifier: AGPL-3.0-or-later OR GPL-2.0-only --> + android:layout_height="wrap_content" + android:paddingTop="@dimen/standard_padding" + android:paddingBottom="@dimen/standard_padding" + android:orientation="horizontal" + android:background="@drawable/rounded_corners_listitem_single_background"> + + diff --git a/app/src/main/res/layout/user_info_layout.xml b/app/src/main/res/layout/user_info_layout.xml index fb29fe8a34eb..a7cac58fdad3 100644 --- a/app/src/main/res/layout/user_info_layout.xml +++ b/app/src/main/res/layout/user_info_layout.xml @@ -88,6 +88,7 @@ android:id="@+id/userinfo_list" android:layout_width="match_parent" android:layout_height="match_parent" + android:layout_margin="@dimen/standard_margin" android:orientation="vertical" android:visibility="gone" app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager" diff --git a/app/src/main/res/values/styles.xml b/app/src/main/res/values/styles.xml index d3531bc920cc..af8410de3cdd 100644 --- a/app/src/main/res/values/styles.xml +++ b/app/src/main/res/values/styles.xml @@ -338,6 +338,12 @@ + +