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

Commit 8f54cd46 authored by TreeHugger Robot's avatar TreeHugger Robot Committed by Android (Google) Code Review
Browse files

Merge "Fix crash when dismissing suggestions." into oc-dr1-dev

parents 26e4fda3 058d2d10
Loading
Loading
Loading
Loading
+1 −2
Original line number Diff line number Diff line
@@ -232,8 +232,7 @@ public class DashboardAdapter extends RecyclerView.Adapter<DashboardAdapter.Dash
                    .build();
            notifyDashboardDataChanged(prevData);
        } else {
            suggestions.remove(suggestion);
            mSuggestionAdapter.notifyDataSetChanged();
            mSuggestionAdapter.removeSuggestion(suggestion);
        }
    }

+4 −0
Original line number Diff line number Diff line
@@ -134,4 +134,8 @@ public class SuggestionAdapter extends RecyclerView.Adapter<DashboardItemHolder>
        return null;
    }

    public void removeSuggestion(Tile suggestion) {
        mSuggestions.remove(suggestion);
        notifyDataSetChanged();
    }
}
+24 −2
Original line number Diff line number Diff line
@@ -34,14 +34,12 @@ import android.content.Context;
import android.content.Intent;
import android.content.res.Resources;
import android.content.res.TypedArray;
import android.graphics.drawable.ColorDrawable;
import android.graphics.drawable.Icon;
import android.os.Bundle;
import android.support.v7.widget.RecyclerView;
import android.util.DisplayMetrics;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.LinearLayout;
import android.widget.RelativeLayout;

import com.android.internal.logging.nano.MetricsProto.MetricsEvent;
@@ -355,6 +353,30 @@ public class DashboardAdapterTest {
        verify(adapter, never()).notifyDashboardDataChanged(any());
    }

    @Test
    public void testSuggestionDismissed_moreThanTwoSuggestions_defaultMode_shouldNotCrash() {
        final RecyclerView data = new RecyclerView(RuntimeEnvironment.application);
        final View itemView = mock(View.class);
        when(itemView.findViewById(R.id.data)).thenReturn(data);
        final DashboardAdapter.SuggestionAndConditionContainerHolder holder =
                new DashboardAdapter.SuggestionAndConditionContainerHolder(itemView);
        final List<Tile> suggestions =
                makeSuggestions("pkg1", "pkg2", "pkg3", "pkg4");
        final DashboardAdapter adapter = spy(new DashboardAdapter(mContext, null /*savedInstance */,
                null /* conditions */, null /* suggestionParser */, null /* callback */));
        adapter.setCategoriesAndSuggestions(new ArrayList<>(), suggestions);
        adapter.onBindConditionAndSuggestion(
                holder, DashboardAdapter.SUGGESTION_CONDITION_HEADER_POSITION);
        // default mode, only displaying 2 suggestions

        adapter.onSuggestionDismissed(suggestions.get(1));

        // verify operations that access the lists will not cause ConcurrentModificationException
        assertThat(holder.data.getAdapter().getItemCount()).isEqualTo(1);
        adapter.setCategoriesAndSuggestions(new ArrayList<>(), suggestions);
        // should not crash
    }

    @Test
    public void testSuggestioDismissed_onlySuggestion_updateDashboardData() {
        DashboardAdapter adapter =