Merge pull request #8441 from kevlahnota/master3

update Itemmanager portrait layout, update Sentry scope
This commit is contained in:
kevlahnota
2025-08-19 06:29:03 +08:00
committed by GitHub
4 changed files with 104 additions and 35 deletions

View File

@@ -65,6 +65,7 @@ import forge.util.FileUtil;
import forge.util.ThreadUtil;
import io.sentry.Sentry;
import io.sentry.protocol.Device;
import io.sentry.protocol.OperatingSystem;
import org.apache.commons.lang3.tuple.Pair;
import org.jupnp.DefaultUpnpServiceConfiguration;
import org.jupnp.android.AndroidUpnpServiceConfiguration;
@@ -194,13 +195,25 @@ public class Main extends AndroidApplication {
boolean permissiongranted = checkPermission();
Gadapter = new AndroidAdapter(getContext());
// Get Basic Device and OS info for scope
Sentry.configureScope(scope -> {
// Device Info
Device device = new Device();
device.setId(Build.ID);
device.setName(getDeviceName());
device.setModel(Build.MODEL);
device.setBrand(Build.BRAND);
device.setManufacturer(Build.MANUFACTURER);
device.setMemorySize(memInfo.totalMem);
device.setChipset(Build.SOC_MANUFACTURER + " " + Build.SOC_MODEL);
// OS Info
OperatingSystem os = new OperatingSystem();
os.setName("Android");
os.setVersion(Build.VERSION.RELEASE);
os.setBuild(Build.DISPLAY);
// Set Contexts
scope.getContexts().setDevice(device);
scope.getContexts().setOperatingSystem(os);
});
initForge(Gadapter, permissiongranted, totalMemory, isTabletDevice(getContext()));

View File

@@ -45,6 +45,7 @@ import forge.menu.FDropDownMenu;
import forge.menu.FMenuItem;
import forge.menu.FPopupMenu;
import forge.screens.FScreen;
import forge.screens.planarconquest.ConquestCommandersScreen;
import forge.toolbox.*;
import forge.toolbox.FEvent.FEventHandler;
import forge.toolbox.FEvent.FEventType;
@@ -367,42 +368,95 @@ public abstract class ItemManager<T extends InventoryItem> extends FContainer im
helper.fillLine(advancedSearchFilter.getWidget(), fieldHeight);
}
if (!hideFilters) {
List<ItemFilter<? extends T>> filters = this.filters.get();
if(!tryConsolidateButtonFilters(filters, helper, fieldHeight)) {
for (ItemFilter<? extends T> filter : filters) {
helper.include(filter.getWidget(), filter.getPreferredWidth(helper.getRemainingLineWidth(), fieldHeight), fieldHeight);
}
}
if (allowSortChange()) {
helper.fillLine(cbxSortOptions, fieldHeight);
}
helper.newLine(-ItemFilter.PADDING);
if (currentView.getPnlOptions().getChildCount() > 0) {
helper.fillLine(currentView.getPnlOptions(), fieldHeight + ItemFilter.PADDING);
} else {
helper.offset(0, -fieldHeight); //prevent showing whitespace for empty view options panel
}
if (Forge.isLandscapeMode())
drawLandscape(this.filters.get(), helper, fieldHeight);
else
drawPortrait(this.filters.get(), helper, width, fieldHeight);
}
helper.fill(currentView.getScroller());
}
/**
* If the only available filters are button filters, try and put them both on one line.
* And if we can, stretch them across the line and squish them all proportionally rather than only the last item.
*/
private boolean tryConsolidateButtonFilters(List<ItemFilter<? extends T>> filters, LayoutHelper helper, float fieldHeight) {
if(filters.size() < 2 || !filters.stream().allMatch(o -> o instanceof ToggleButtonsFilter<? extends T>))
return false;
float width = helper.getParentWidth();
double total = filters.stream().mapToDouble(i -> i.getPreferredWidth(width, fieldHeight)).sum();
total += helper.getGapX() * (filters.size() - 1);
if(total > width * 1.2 || total < width * 0.6)
return false;
for(ItemFilter<? extends T> filter : filters) {
double percent = filter.getPreferredWidth(width, fieldHeight) / total;
helper.include(filter.getWidget(), percent, fieldHeight);
private void drawLandscape(List<ItemFilter<? extends T>> filters, LayoutHelper helper, float fieldHeight) {
// TODO reduce landscape mode combobox buttons for the filters
for (ItemFilter<? extends T> filter : filters) {
helper.include(filter.getWidget(), filter.getPreferredWidth(helper.getRemainingLineWidth(), fieldHeight), fieldHeight);
}
if (allowSortChange()) {
helper.fillLine(cbxSortOptions, fieldHeight);
}
helper.newLine(-ItemFilter.PADDING);
if (currentView.getPnlOptions().getChildCount() > 0) {
helper.fillLine(currentView.getPnlOptions(), fieldHeight + ItemFilter.PADDING);
} else {
helper.offset(0, -fieldHeight); //prevent showing whitespace for empty view options panel
}
}
private void drawPortrait(List<ItemFilter<? extends T>> filters, LayoutHelper helper, float width, float fieldHeight) {
CardTypeFilter cardTypeFilter = null;
CardColorFilter colorFilter = null;
CardFormatFilter cardFormatFilter = null;
DeckColorFilter deckColorFilter = null;
DeckFormatFilter deckFormatFilter = null;
ConquestCommandersScreen.CommanderColorFilter commanderColorFilter = null;
ConquestCommandersScreen.CommanderOriginFilter commanderOriginFilter = null;
for (ItemFilter<? extends T> filter : filters) {
if (filter instanceof CardTypeFilter ct) {
cardTypeFilter = ct;
continue;
}
if (filter instanceof CardColorFilter cr) {
colorFilter = cr;
continue;
}
if (filter instanceof CardFormatFilter cf) {
cardFormatFilter = cf;
continue;
}
if (filter instanceof DeckColorFilter dc) {
deckColorFilter = dc;
continue;
}
if (filter instanceof DeckFormatFilter df) {
deckFormatFilter = df;
continue;
}
if (filter instanceof ConquestCommandersScreen.CommanderColorFilter ccf) {
commanderColorFilter = ccf;
continue;
}
if (filter instanceof ConquestCommandersScreen.CommanderOriginFilter cof) {
commanderOriginFilter = cof;
continue;
}
helper.include(filter.getWidget(), filter.getPreferredWidth(helper.getRemainingLineWidth(), fieldHeight), fieldHeight);
}
if (deckColorFilter != null) {
helper.fillLine(deckColorFilter.getWidget(), fieldHeight);
}
if (deckFormatFilter != null) {
helper.fillLine(deckFormatFilter.getWidget(), fieldHeight);
}
if (colorFilter != null)
helper.fillLine(colorFilter.getWidget(), fieldHeight);
if (cardTypeFilter != null)
helper.fillLine(cardTypeFilter.getWidget(), fieldHeight);
if (commanderColorFilter != null)
helper.fillLine(commanderColorFilter.getWidget(), fieldHeight);
if (commanderOriginFilter != null)
helper.fillLine(commanderOriginFilter.getWidget(), fieldHeight);
helper.newLine();
if (cardFormatFilter != null)
helper.include(cardFormatFilter.getWidget(), width / 2f, fieldHeight);
if (allowSortChange()) {
helper.fillLine(cbxSortOptions, fieldHeight);
}
helper.newLine(-ItemFilter.PADDING);
if (currentView.getPnlOptions().getChildCount() > 0) {
helper.fillLine(currentView.getPnlOptions(), fieldHeight + ItemFilter.PADDING);
} else {
helper.offset(0, -fieldHeight); //prevent showing whitespace for empty view options panel
}
return true;
}
public Class<T> getGenericType() {

View File

@@ -413,8 +413,10 @@ public class ImageView<T extends InventoryItem> extends ItemView<T> {
btnExpandCollapseAll.setBounds(x, y, h, h);
x += h + padding;
float pileByWidth = Math.min(itemManager.getPileByWidth(), (width - x - padding) / 2.0f);
float groupByWidth = width - x - padding - pileByWidth;
// hide piles only for deckmanager since its unusable unlike group
float newWidth = itemManager instanceof DeckManager ? 0f : width / 2f;
float pileByWidth = newWidth - padding;
float groupByWidth = width - x - newWidth;
cbGroupByOptions.setBounds(x, y, groupByWidth, h);
x += groupByWidth + padding;

View File

@@ -239,7 +239,7 @@ public class ConquestCommandersScreen extends FScreen {
}
}
private static class CommanderColorFilter extends StatTypeFilter<ConquestCommander> {
public static class CommanderColorFilter extends StatTypeFilter<ConquestCommander> {
public CommanderColorFilter(ItemManager<? super ConquestCommander> itemManager0) {
super(itemManager0);
}
@@ -273,7 +273,7 @@ public class ConquestCommandersScreen extends FScreen {
}
}
private static class CommanderOriginFilter extends ComboBoxFilter<ConquestCommander, ConquestPlane> {
public static class CommanderOriginFilter extends ComboBoxFilter<ConquestCommander, ConquestPlane> {
public CommanderOriginFilter(ItemManager<? super ConquestCommander> itemManager0) {
super(Forge.getLocalizer().getMessage("lblAllPlanes"), FModel.getPlanes(), itemManager0);
}