package com.android.launcher3; import android.content.Context; import android.util.AttributeSet; import android.widget.FrameLayout; import java.util.ArrayList; import java.util.LinkedHashMap; import java.util.List; import java.util.Map; class SectionedWidgetsRow { String section; List> widgets; public SectionedWidgetsRow(String sc) { section = sc; } } class SectionedWidgetsAlgorithm { public List computeSectionedWidgetRows(List sortedWidgets, int widgetsPerRow) { List rows = new ArrayList<>(); LinkedHashMap> sections = computeSectionedApps(sortedWidgets); for (Map.Entry> sectionEntry : sections.entrySet()) { String section = sectionEntry.getKey(); SectionedWidgetsRow row = new SectionedWidgetsRow(section); List widgets = sectionEntry.getValue(); int numRows = (int) Math.ceil((float) widgets.size() / widgetsPerRow); for (int i = 0; i < numRows; i++) { List widgetsInRow = new ArrayList<>(); int offset = i * widgetsPerRow; for (int j = 0; j < widgetsPerRow; j++) { widgetsInRow.add(widgets.get(offset + j)); } row.widgets.add(widgetsInRow); } } return rows; } private LinkedHashMap> computeSectionedApps(List sortedWidgets) { LinkedHashMap> sections = new LinkedHashMap<>(); for (Object info : sortedWidgets) { String section = getSection(info); List sectionedWidgets = sections.get(section); if (sectionedWidgets == null) { sectionedWidgets = new ArrayList<>(); sections.put(section, sectionedWidgets); } sectionedWidgets.add(info); } return sections; } private String getSection(Object widgetOrShortcut) { return "UNKNOWN"; } } /** * The widgets list view container. */ public class WidgetsContainerView extends FrameLayout { public WidgetsContainerView(Context context) { this(context, null); } public WidgetsContainerView(Context context, AttributeSet attrs) { this(context, attrs, 0); } public WidgetsContainerView(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); } @Override protected void onFinishInflate() { } }