Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 77876fef authored by Stefan Niedermann's avatar Stefan Niedermann
Browse files

#1435 Fix StringIndexOutOfBoundsException when title is blank

parent 62033529
Loading
Loading
Loading
Loading
+9 −3
Original line number Diff line number Diff line
package it.niedermann.owncloud.notes.main.slots;

import android.content.Context;
import android.text.TextUtils;

import androidx.annotation.NonNull;
import androidx.annotation.Nullable;

import java.util.ArrayList;
import java.util.List;
import java.util.Optional;

import it.niedermann.owncloud.notes.R;
import it.niedermann.owncloud.notes.main.items.section.SectionItem;
@@ -58,10 +60,14 @@ public class SlotterUtil {
        String lastInitials = null;
        for (int i = 0; i < noteList.size(); i++) {
            final var currentNote = noteList.get(i);
            String initials = currentNote.getTitle().substring(0, 1).toUpperCase();
            final var title = currentNote.getTitle();
            String initials = "";
            if(!TextUtils.isEmpty(title)) {
                initials = title.substring(0, 1).toUpperCase();
                if (!initials.matches("[A-Z\\u00C0-\\u00DF]")) {
                    initials = initials.matches("[\\u0250-\\uFFFF]") ? context.getString(R.string.simple_other) : "#";
                }
            }
            if (i > 0 && !initials.equals(lastInitials)) {
                itemList.add(new SectionItem(initials));
            }
+46 −0
Original line number Diff line number Diff line
package it.niedermann.owncloud.notes.main.slots;

import static org.junit.Assert.assertEquals;

import androidx.test.core.app.ApplicationProvider;

import org.junit.Test;
import org.junit.runner.RunWith;
import org.robolectric.RobolectricTestRunner;

import java.util.Calendar;
import java.util.List;

import it.niedermann.owncloud.notes.main.items.section.SectionItem;
import it.niedermann.owncloud.notes.persistence.entity.Note;

@RunWith(RobolectricTestRunner.class)
public class SlotterUtilTest {

    @Test
    public void fillListByInitials_shouldAddSectionItems() {
        final var notes = List.of(
                new Note(1L, Calendar.getInstance(), "Aaa", "", "", false, ""),
                new Note(1L, Calendar.getInstance(), "Abc", "", "", false, ""),
                new Note(1L, Calendar.getInstance(), "Bbb", "", "", false, ""),
                new Note(1L, Calendar.getInstance(), "Bcd", "", "", false, ""),
                new Note(1L, Calendar.getInstance(), "Def", "", "", false, "")
        );

        final var items = SlotterUtil.fillListByInitials(ApplicationProvider.getApplicationContext(), notes);
        assertEquals(2, items.stream().filter(item -> item instanceof SectionItem).count());
        assertEquals(SectionItem.class, items.get(2).getClass());
        assertEquals(SectionItem.class, items.get(5).getClass());
    }

    @Test
    public void fillListByInitials_shouldAcceptEmptyTitles() {
        final var notes = List.of(
                new Note(1L, Calendar.getInstance(), "", "", "", false, ""),
                new Note(2L, Calendar.getInstance(), "Foo", "", "", false, ""),
                new Note(3L, Calendar.getInstance(), "Bar", "", "", false, "")
        );

        final var items = SlotterUtil.fillListByInitials(ApplicationProvider.getApplicationContext(), notes);
    }
}