Commit 4467853b authored by Thomas's avatar Thomas
Browse files

Fix issue #222 - Profiles truncated when long bio + missing fields

parent 17ed03af
Loading
Loading
Loading
Loading
+4 −38
Original line number Diff line number Diff line
@@ -32,7 +32,6 @@ import android.os.Bundle;
import android.os.Handler;
import android.os.Looper;
import android.text.Html;
import android.text.Spannable;
import android.text.SpannableString;
import android.text.Spanned;
import android.text.method.LinkMovementMethod;
@@ -94,6 +93,7 @@ import app.fedilab.android.helper.Helper;
import app.fedilab.android.helper.MastodonHelper;
import app.fedilab.android.helper.SpannableHelper;
import app.fedilab.android.helper.ThemeHelper;
import app.fedilab.android.ui.drawer.FieldAdapter;
import app.fedilab.android.ui.drawer.IdentityProofsAdapter;
import app.fedilab.android.ui.pageadapter.FedilabProfileTLPageAdapter;
import app.fedilab.android.viewmodel.mastodon.AccountsVM;
@@ -357,43 +357,9 @@ public class ProfileActivity extends BaseActivity {
        //Fields for profile
        List<Field> fields = account.fields;
        if (fields != null && fields.size() > 0) {
            for (int i = 0; i < fields.size(); i++) {
                LinearLayout field;
                TextView labelView;
                TextView valueView;
                switch (i) {
                    case 1:
                        field = binding.field1;
                        labelView = binding.label1;
                        valueView = binding.value1;
                        break;
                    case 2:
                        field = binding.field2;
                        labelView = binding.label2;
                        valueView = binding.value2;
                        break;
                    case 3:
                        field = binding.field3;
                        labelView = binding.label3;
                        valueView = binding.value3;
                        break;
                    default:
                        field = binding.field4;
                        labelView = binding.label4;
                        valueView = binding.value4;
                        break;
                }

                field.setVisibility(View.VISIBLE);
                if (fields.get(i).verified_at != null) {
                    valueView.setCompoundDrawablesWithIntrinsicBounds(null, null, ContextCompat.getDrawable(ProfileActivity.this, R.drawable.ic_baseline_verified_24), null);
                    fields.get(i).value_span.setSpan(new ForegroundColorSpan(ContextCompat.getColor(ProfileActivity.this, R.color.verified_text)), 0, fields.get(i).value_span.toString().length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
                }
                valueView.setText(fields.get(i).value_span != null ? fields.get(i).value_span : fields.get(i).value, TextView.BufferType.SPANNABLE);
                valueView.setMovementMethod(LinkMovementMethod.getInstance());
                labelView.setText(fields.get(i).name);
            }
            binding.fieldsContainer.setVisibility(View.VISIBLE);
            FieldAdapter fieldAdapter = new FieldAdapter(fields);
            binding.fieldsContainer.setAdapter(fieldAdapter);
            binding.fieldsContainer.setLayoutManager(new LinearLayoutManager(ProfileActivity.this));
        }
        if (account.span_display_name == null && account.display_name == null) {
            binding.accountDn.setText(account.username);
+11 −20
Original line number Diff line number Diff line
@@ -117,7 +117,6 @@ import java.security.Security;
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Date;
import java.util.HashMap;
@@ -1381,7 +1380,6 @@ public class Helper {
    }


    private static final List<String> present = new ArrayList<>();
    private static int notificationId = 1;

    /**
@@ -1519,10 +1517,7 @@ public class Helper {
        notificationBuilder.setLargeIcon(icon);


        Notification summaryNotification = null;

        if (!present.contains(account.mastodon_account.acct + "@" + account.instance)) {
            summaryNotification = new NotificationCompat.Builder(context, channelId)
        Notification summaryNotification = summaryNotification = new NotificationCompat.Builder(context, channelId)
                .setContentTitle(title)
                .setContentText(channelTitle)
                .setContentIntent(pIntent)
@@ -1532,14 +1527,10 @@ public class Helper {
                .setGroup(account.mastodon_account.acct + "@" + account.instance)
                .setGroupSummary(true)
                .build();
            present.add(account.mastodon_account.acct + "@" + account.instance);
        }

        notificationManager.notify(notificationId++, notificationBuilder.build());
        if (summaryNotification != null) {
        notificationManager.notify(0, summaryNotification);
    }
    }

    public static void transfertIfExist(Context context) {
        File dbFile = context.getDatabasePath(OLD_DB_NAME);
+85 −0
Original line number Diff line number Diff line
package app.fedilab.android.ui.drawer;
/* Copyright 2022 Thomas Schneider
 *
 * This file is a part of Fedilab
 *
 * This program is free software; you can redistribute it and/or modify it under the terms of the
 * GNU General Public License as published by the Free Software Foundation; either version 3 of the
 * License, or (at your option) any later version.
 *
 * Fedilab is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even
 * the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
 * Public License for more details.
 *
 * You should have received a copy of the GNU General Public License along with Fedilab; if not,
 * see <http://www.gnu.org/licenses>. */


import android.content.Context;
import android.text.Spannable;
import android.text.method.LinkMovementMethod;
import android.text.style.ForegroundColorSpan;
import android.view.LayoutInflater;
import android.view.ViewGroup;
import android.widget.TextView;

import androidx.annotation.NonNull;
import androidx.core.content.ContextCompat;
import androidx.recyclerview.widget.RecyclerView;

import java.util.List;

import app.fedilab.android.R;
import app.fedilab.android.client.entities.api.Field;
import app.fedilab.android.databinding.DrawerFieldBinding;


public class FieldAdapter extends RecyclerView.Adapter<FieldAdapter.FieldViewHolder> {

    private final List<Field> fields;
    private Context context;

    public FieldAdapter(List<Field> fields) {
        this.fields = fields;
    }

    @Override
    public long getItemId(int position) {
        return position;
    }

    @Override
    public int getItemCount() {
        return fields.size();
    }

    @NonNull
    @Override
    public FieldViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        context = parent.getContext();
        DrawerFieldBinding itemBinding = DrawerFieldBinding.inflate(LayoutInflater.from(parent.getContext()), parent, false);
        return new FieldViewHolder(itemBinding);
    }

    @Override
    public void onBindViewHolder(@NonNull FieldViewHolder holder, int position) {
        Field field = fields.get(position);
        if (field.verified_at != null) {
            holder.binding.value.setCompoundDrawablesWithIntrinsicBounds(null, null, ContextCompat.getDrawable(context, R.drawable.ic_baseline_verified_24), null);
            field.value_span.setSpan(new ForegroundColorSpan(ContextCompat.getColor(context, R.color.verified_text)), 0, field.value_span.toString().length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
        }
        holder.binding.value.setText(field.value_span != null ? field.value_span : field.value, TextView.BufferType.SPANNABLE);
        holder.binding.value.setMovementMethod(LinkMovementMethod.getInstance());
        holder.binding.label.setText(field.name);
    }


    public static class FieldViewHolder extends RecyclerView.ViewHolder {
        DrawerFieldBinding binding;

        FieldViewHolder(DrawerFieldBinding itemView) {
            super(itemView.getRoot());
            binding = itemView;
        }
    }
}
 No newline at end of file
+12 −2
Original line number Diff line number Diff line
@@ -20,9 +20,11 @@ import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.content.SharedPreferences;
import android.os.Build;
import android.os.Bundle;
import android.os.Handler;
import android.os.Looper;
import android.service.notification.StatusBarNotification;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
@@ -179,8 +181,16 @@ public class FragmentMastodonNotification extends Fragment implements Notificati
    @Override
    public void onResume() {
        super.onResume();
        NotificationManager notificationManager = (NotificationManager) requireActivity().getApplicationContext().getSystemService(Context.NOTIFICATION_SERVICE);
        notificationManager.cancel(Helper.NOTIFICATION_USER_NOTIF);
        NotificationManager mNotificationManager = (NotificationManager) requireActivity().getSystemService(Context.NOTIFICATION_SERVICE);
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M && BaseMainActivity.currentAccount != null && BaseMainActivity.currentAccount.mastodon_account != null) {
            for (StatusBarNotification statusBarNotification : mNotificationManager.getActiveNotifications()) {
                if ((BaseMainActivity.currentAccount.mastodon_account.acct + "@" + BaseMainActivity.currentAccount.instance).equals(statusBarNotification.getGroupKey())) {
                    mNotificationManager.cancel(statusBarNotification.getId());
                }
            }
        } else {
            mNotificationManager.cancelAll();
        }
    }


+169 −340

File changed.

Preview size limit exceeded, changes collapsed.

Loading