From 8f2606956e9d9bc53324ac31d6b72650abf14a5d Mon Sep 17 00:00:00 2001 From: izzy2lost Date: Sat, 30 Aug 2025 15:11:45 -0400 Subject: [PATCH] Added Coverflow for game covers --- .gitignore | 2 + app/src/main/assets/resources/no-cover.png | Bin 0 -> 98426 bytes .../com/izzy2lost/psx2/CoversAdapter.java | 67 ++++- .../psx2/GamesCoverDialogFragment.java | 188 ++++++++++++-- .../java/com/izzy2lost/psx2/NativeApp.java | 4 +- .../com/izzy2lost/psx2/TitleResolver.java | 235 ++++++++++++++++++ app/src/main/res/drawable/bg_cover_shadow.xml | 13 + app/src/main/res/layout/item_coverflow.xml | 48 ++++ 8 files changed, 519 insertions(+), 38 deletions(-) create mode 100644 app/src/main/assets/resources/no-cover.png create mode 100644 app/src/main/java/com/izzy2lost/psx2/TitleResolver.java create mode 100644 app/src/main/res/drawable/bg_cover_shadow.xml create mode 100644 app/src/main/res/layout/item_coverflow.xml diff --git a/.gitignore b/.gitignore index 2ce0f6d..ae0d099 100644 --- a/.gitignore +++ b/.gitignore @@ -22,3 +22,5 @@ app/.cxx/ /PCSX2_ARM64 build/reports/problems/problems-report.html crash.txt +/AetherSX2-main +crash-NEW.txt diff --git a/app/src/main/assets/resources/no-cover.png b/app/src/main/assets/resources/no-cover.png new file mode 100644 index 0000000000000000000000000000000000000000..2d6c75c71632728def4aeabdb52f04ff96ab1299 GIT binary patch literal 98426 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 x|C#c)!^c`m!kjx literal 0 HcmV?d00001 diff --git a/app/src/main/java/com/izzy2lost/psx2/CoversAdapter.java b/app/src/main/java/com/izzy2lost/psx2/CoversAdapter.java index 8eced0e..b3950e5 100644 --- a/app/src/main/java/com/izzy2lost/psx2/CoversAdapter.java +++ b/app/src/main/java/com/izzy2lost/psx2/CoversAdapter.java @@ -29,31 +29,57 @@ public class CoversAdapter extends RecyclerView.Adapter { private final String[] localPaths; // absolute file paths for cached covers (may be null) private final OnItemClick onItemClick; private final OnItemLongClick onItemLongClick; + private final int itemLayoutResId; + private int overrideItemWidthPx = 0; public CoversAdapter(Context context, String[] titles, String[] coverUrls, String[] localPaths, OnItemClick click) { - this(context, titles, coverUrls, localPaths, click, null); + this(context, titles, coverUrls, localPaths, R.layout.item_cover, click, null); } - public CoversAdapter(Context context, String[] titles, String[] coverUrls, String[] localPaths, OnItemClick click, OnItemLongClick longClick) { + public CoversAdapter(Context context, String[] titles, String[] coverUrls, String[] localPaths, int itemLayoutResId, OnItemClick click, OnItemLongClick longClick) { this.context = context; this.titles = titles; this.coverUrls = coverUrls; this.localPaths = localPaths; + this.itemLayoutResId = itemLayoutResId; this.onItemClick = click; this.onItemLongClick = longClick; + setHasStableIds(true); + } + + public void setItemWidthPx(int widthPx) { + if (widthPx != overrideItemWidthPx) { + overrideItemWidthPx = widthPx; + notifyDataSetChanged(); + } } @NonNull @Override public VH onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_cover, parent, false); + View v = LayoutInflater.from(parent.getContext()).inflate(itemLayoutResId, parent, false); + if (overrideItemWidthPx > 0) { + RecyclerView.LayoutParams lp = (RecyclerView.LayoutParams) v.getLayoutParams(); + lp.width = overrideItemWidthPx; + v.setLayoutParams(lp); + } return new VH(v); } @Override public void onBindViewHolder(@NonNull VH holder, int position) { - holder.title.setText(titles[position]); - String local = (localPaths != null && position < localPaths.length) ? localPaths[position] : null; + int count = titles.length; + int real = (count == 0) ? 0 : (position % count); + // Ensure dynamic width is applied + if (overrideItemWidthPx > 0) { + RecyclerView.LayoutParams lp = (RecyclerView.LayoutParams) holder.itemView.getLayoutParams(); + if (lp.width != overrideItemWidthPx) { + lp.width = overrideItemWidthPx; + holder.itemView.setLayoutParams(lp); + } + } + holder.title.setText(titles[real]); + String local = (localPaths != null && real < localPaths.length) ? localPaths[real] : null; File localFile = null; if (local != null) { File f = new File(local); @@ -69,15 +95,28 @@ public class CoversAdapter extends RecyclerView.Adapter { .error(android.R.color.transparent) .into(holder.cover); } else { - // Do not load from network automatically; wait for explicit download - holder.cover.setImageDrawable(null); + // Show a default placeholder from resources/no-cover.png if present + File resDir = context.getExternalFilesDir("resources"); + File placeholder = (resDir != null) ? new File(resDir, "no-cover.png") : null; + if (placeholder != null && placeholder.exists() && placeholder.length() > 0) { + Glide.with(context) + .load(placeholder) + .diskCacheStrategy(DiskCacheStrategy.AUTOMATIC) + .fitCenter() + .placeholder(android.R.color.transparent) + .error(android.R.color.transparent) + .into(holder.cover); + } else { + // Fallback to logo if placeholder not found + holder.cover.setImageResource(R.drawable.psx2_logo2_fixed); + } } holder.itemView.setOnClickListener(v -> { - if (onItemClick != null) onItemClick.onClick(position); + if (onItemClick != null) onItemClick.onClick(real); }); holder.itemView.setOnLongClickListener(v -> { if (onItemLongClick != null) { - onItemLongClick.onLongClick(position); + onItemLongClick.onLongClick(real); return true; } return false; @@ -86,7 +125,15 @@ public class CoversAdapter extends RecyclerView.Adapter { @Override public int getItemCount() { - return titles.length; + return titles.length == 0 ? 0 : Integer.MAX_VALUE; + } + + @Override + public long getItemId(int position) { + if (titles.length == 0) return RecyclerView.NO_ID; + int real = position % titles.length; + String t = titles[real]; + return t != null ? t.hashCode() : real; } static class VH extends RecyclerView.ViewHolder { diff --git a/app/src/main/java/com/izzy2lost/psx2/GamesCoverDialogFragment.java b/app/src/main/java/com/izzy2lost/psx2/GamesCoverDialogFragment.java index 270c330..f6f5c18 100644 --- a/app/src/main/java/com/izzy2lost/psx2/GamesCoverDialogFragment.java +++ b/app/src/main/java/com/izzy2lost/psx2/GamesCoverDialogFragment.java @@ -20,10 +20,13 @@ import androidx.annotation.Nullable; import android.app.Dialog; import androidx.fragment.app.DialogFragment; import androidx.recyclerview.widget.GridLayoutManager; +import androidx.recyclerview.widget.LinearLayoutManager; +import androidx.recyclerview.widget.PagerSnapHelper; import androidx.recyclerview.widget.RecyclerView; import java.util.Locale; public class GamesCoverDialogFragment extends DialogFragment { + private boolean didInitialNudge = false; @Override public void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); @@ -35,7 +38,10 @@ public class GamesCoverDialogFragment extends DialogFragment { private String[] coverUrls; private String[] localPaths; private RecyclerView rv; - private GridLayoutManager glm; + private LinearLayoutManager llm; + private PagerSnapHelper snapHelper; + private int lastRvW = -1, lastRvH = -1; + private boolean pendingResnap = false; public interface OnGameSelectedListener { void onGameSelected(String gameUri); @@ -66,14 +72,7 @@ public class GamesCoverDialogFragment extends DialogFragment { @Override public void onResume() { super.onResume(); - // Re-assert fixed span (2/4) after resume to avoid any flips - if (rv != null && glm != null) { - int currentOrientation = getResources().getConfiguration().orientation; - int fixedSpan = (currentOrientation == android.content.res.Configuration.ORIENTATION_LANDSCAPE) ? 4 : 2; - if (fixedSpan != glm.getSpanCount()) { - glm.setSpanCount(fixedSpan); - } - } + if (rv != null) applyCoverflowTransforms(rv); } @NonNull @@ -90,25 +89,33 @@ public class GamesCoverDialogFragment extends DialogFragment { rv = root.findViewById(R.id.recycler_covers); rv.setHasFixedSize(true); - glm = new GridLayoutManager(requireContext(), 3); - rv.setLayoutManager(glm); - final int spacingPx = (int) (8 * getResources().getDisplayMetrics().density); - final int half = Math.max(1, spacingPx / 2); - rv.addItemDecoration(new RecyclerView.ItemDecoration() { + llm = new LinearLayoutManager(requireContext(), LinearLayoutManager.HORIZONTAL, false); + rv.setLayoutManager(llm); + rv.setClipToPadding(false); + int sidePad = (int) (48 * getResources().getDisplayMetrics().density); + int vertPad = (int) (24 * getResources().getDisplayMetrics().density); + rv.setPadding(sidePad, vertPad, sidePad, vertPad); + // Snap to center item + snapHelper = new PagerSnapHelper(); + snapHelper.attachToRecyclerView(rv); + // Scale/alpha transform based on distance from center + rv.addOnScrollListener(new RecyclerView.OnScrollListener() { @Override - public void getItemOffsets(android.graphics.Rect outRect, View view, RecyclerView parent, RecyclerView.State state) { - outRect.set(half, half, half, half); + public void onScrolled(@NonNull RecyclerView recyclerView, int dx, int dy) { + super.onScrolled(recyclerView, dx, dy); + applyCoverflowTransforms(recyclerView); + } + @Override + public void onScrollStateChanged(@NonNull RecyclerView recyclerView, int newState) { + super.onScrollStateChanged(recyclerView, newState); + if (newState == RecyclerView.SCROLL_STATE_IDLE) { + if (pendingResnap) { + resnapToCenter(recyclerView); + pendingResnap = false; + } + applyCoverflowTransforms(recyclerView); + } } - }); - rv.addOnLayoutChangeListener((v, left, top, right, bottom, oldLeft, oldTop, oldRight, oldBottom) -> { - int currentOrientation = getResources().getConfiguration().orientation; - int fixedSpan = (currentOrientation == android.content.res.Configuration.ORIENTATION_LANDSCAPE) ? 4 : 2; - if (fixedSpan != glm.getSpanCount()) { glm.setSpanCount(fixedSpan); } - }); - root.post(() -> { - int currentOrientation = getResources().getConfiguration().orientation; - int fixedSpan = (currentOrientation == android.content.res.Configuration.ORIENTATION_LANDSCAPE) ? 4 : 2; - if (fixedSpan != glm.getSpanCount()) { glm.setSpanCount(fixedSpan); } }); titles = getArguments() != null ? getArguments().getStringArray(ARG_TITLES) : new String[0]; @@ -135,7 +142,7 @@ public class GamesCoverDialogFragment extends DialogFragment { localPaths[i] = new java.io.File(getCoversDir(), serial + ".png").getAbsolutePath(); } - adapter = new CoversAdapter(requireContext(), titles, coverUrls, localPaths, + adapter = new CoversAdapter(requireContext(), titles, coverUrls, localPaths, R.layout.item_coverflow, position -> { if (listener != null && position >= 0 && position < uris.length) { listener.onGameSelected(uris[position]); @@ -148,6 +155,80 @@ public class GamesCoverDialogFragment extends DialogFragment { } }); rv.setAdapter(adapter); + // One-time tiny nudge to force snap/transform on some devices + rv.post(() -> { + if (!isAdded() || didInitialNudge) return; + // Anchor to a large middle position for "infinite" scroll + int n = titles != null ? titles.length : 0; + if (n > 0) { + int center = (1 << 29); // ~536 million + int startPos = center - (center % n); + llm.scrollToPosition(startPos); + } + rv.scrollBy(1, 0); + rv.scrollBy(-1, 0); + applyCoverflowTransforms(rv); + didInitialNudge = true; + }); + // Reduce resize flicker and keep a few views ready + rv.setItemAnimator(null); + rv.setItemViewCacheSize(12); + + // Ensure initial measurement + transforms run after first layout + rv.getViewTreeObserver().addOnGlobalLayoutListener(new android.view.ViewTreeObserver.OnGlobalLayoutListener() { + @Override public void onGlobalLayout() { + if (!isAdded()) return; + applyCoverflowTransforms(rv); + rv.getViewTreeObserver().removeOnGlobalLayoutListener(this); + } + }); + + // Resolve proper game titles using local YAML index if available (GameIndex/Redump). + // Falls back to native URI API, then filename if needed. + new Thread(() -> { + boolean changed = false; + for (int i = 0; i < uris.length; i++) { + try { + String t = TitleResolver.resolveTitleForUri(requireContext(), uris[i], titles[i]); + if (t != null && !t.isEmpty() && i < titles.length && !t.equals(titles[i])) { + titles[i] = t; + changed = true; + } + } catch (Throwable ignored) {} + } + if (changed && isAdded()) requireActivity().runOnUiThread(() -> adapter.notifyDataSetChanged()); + }).start(); + + // Dynamically size items based on RecyclerView size and orientation + rv.addOnLayoutChangeListener((v, left, top, right, bottom, oldLeft, oldTop, oldRight, oldBottom) -> { + final int rvW = right - left; + final int rvH = bottom - top; + if (rvW <= 0 || rvH <= 0) return; + if (rvW == lastRvW && rvH == lastRvH) return; // no real size change + lastRvW = rvW; + lastRvH = rvH; + rv.post(() -> { + if (!isAdded()) return; + boolean landscape = getResources().getConfiguration().orientation == android.content.res.Configuration.ORIENTATION_LANDSCAPE; + int titleDp = 36; + int extraDp = 16; + float density = getResources().getDisplayMetrics().density; + int reservedH = (int) ((titleDp + extraDp) * density) + (vertPad * 2); + int availableH = Math.max(0, rvH - reservedH); + float ratio = 567f / 878f; + int widthFromHeight = (int) (availableH * ratio); + int widthFromWidth = (int) (rvW * (landscape ? 0.35f : 0.55f)); + int itemWidth = Math.max(160, Math.min(widthFromHeight, widthFromWidth)); + adapter.setItemWidthPx(itemWidth); + // If user is scrolling, defer resnap until idle to avoid fighting gesture + if (rv.getScrollState() == RecyclerView.SCROLL_STATE_IDLE) { + resnapToCenter(rv); + applyCoverflowTransforms(rv); + } else { + pendingResnap = true; + } + }); + }); View btnHome = root.findViewById(R.id.btn_home); if (btnHome != null) btnHome.setOnClickListener(v -> dismissAllowingStateLoss()); @@ -157,6 +238,59 @@ public class GamesCoverDialogFragment extends DialogFragment { return root; } + private void applyCoverflowTransforms(@NonNull RecyclerView recyclerView) { + int rvCenterX = (recyclerView.getLeft() + recyclerView.getRight()) / 2; + boolean landscape = getResources().getConfiguration().orientation == android.content.res.Configuration.ORIENTATION_LANDSCAPE; + final float maxScale = 1.0f; + final float minScale = landscape ? 0.70f : 0.82f; + final float maxAlpha = 1.0f; + final float minAlpha = landscape ? 0.50f : 0.60f; + final float maxTiltDeg = landscape ? 22f : 16f; + final float density = getResources().getDisplayMetrics().density; + final float maxParallax = (landscape ? 14f : 18f) * density; + for (int i = 0; i < recyclerView.getChildCount(); i++) { + View child = recyclerView.getChildAt(i); + int childCenterX = (child.getLeft() + child.getRight()) / 2; + float dx = childCenterX - rvCenterX; + float dist = Math.abs(dx); + float norm = Math.min(1f, dist / (recyclerView.getWidth() * 0.5f)); + float scale = maxScale - (maxScale - minScale) * norm; + float alpha = maxAlpha - (maxAlpha - minAlpha) * norm; + float tilt = Math.signum(dx) * maxTiltDeg * norm; // tilt away from center + child.setCameraDistance(8000f * density); + child.setScaleX(scale); + child.setScaleY(scale); + child.setAlpha(alpha); + child.setTranslationZ((1f - norm) * 10f); + child.setRotationY(tilt); + + // Title parallax (gentle) + View title = child.findViewById(R.id.text_title); + if (title != null) { + float parallax = Math.max(-maxParallax, Math.min(maxParallax, -dx / (recyclerView.getWidth() * 0.5f) * maxParallax)); + title.setTranslationX(parallax); + title.setAlpha(0.85f + 0.15f * (1f - norm)); + } + + // Shadow intensity scales with centeredness + View shadow = child.findViewById(R.id.view_shadow); + if (shadow != null) { + shadow.setAlpha((1f - norm) * 0.7f); + shadow.setScaleX(scale + 0.2f); + } + } + } + + private void resnapToCenter(@NonNull RecyclerView rv) { + if (snapHelper == null || llm == null) return; + View snapView = snapHelper.findSnapView(llm); + if (snapView == null) return; + int[] dist = snapHelper.calculateDistanceToFinalSnap(llm, snapView); + if (dist != null && (dist[0] != 0 || dist[1] != 0)) { + rv.scrollBy(dist[0], dist[1]); + } + } + public void onStart() { super.onStart(); Dialog d = getDialog(); diff --git a/app/src/main/java/com/izzy2lost/psx2/NativeApp.java b/app/src/main/java/com/izzy2lost/psx2/NativeApp.java index 2ab15e1..3381b7c 100644 --- a/app/src/main/java/com/izzy2lost/psx2/NativeApp.java +++ b/app/src/main/java/com/izzy2lost/psx2/NativeApp.java @@ -36,7 +36,9 @@ public class NativeApp { } public static native void initialize(String path, int apiVer); - public static native String getGameTitle(String path); + public static native String getGameTitle(String path); + // New: Resolve game title from a URI (content:// or file://). Implement in native when available. + public static native String getGameTitleFromUri(String gameUri); public static native String getGameSerial(); public static native float getFPS(); diff --git a/app/src/main/java/com/izzy2lost/psx2/TitleResolver.java b/app/src/main/java/com/izzy2lost/psx2/TitleResolver.java new file mode 100644 index 0000000..442dc5d --- /dev/null +++ b/app/src/main/java/com/izzy2lost/psx2/TitleResolver.java @@ -0,0 +1,235 @@ +package com.izzy2lost.psx2; + +import android.content.Context; +import android.net.Uri; +import android.content.SharedPreferences; + +import java.io.BufferedReader; +import java.io.File; +import java.io.FileInputStream; +import java.io.FileOutputStream; +import java.io.InputStreamReader; +import java.nio.charset.StandardCharsets; +import java.util.HashMap; +import java.util.Locale; +import java.util.Map; +import org.json.JSONObject; +import org.json.JSONTokener; + +/** + * Loads game title index from resources/GameIndex.yaml or resources/RedumpDatabase.yaml + * and resolves human titles from serials extracted via native APIs. + */ +public final class TitleResolver { + private static Map sSerialToTitle; // UPPERCASE SERIAL -> Title + private static boolean sLoaded; + + private TitleResolver() {} + + public static synchronized void ensureLoaded(Context ctx) { + if (sLoaded && sSerialToTitle != null) return; + sSerialToTitle = new HashMap<>(); + File base = ctx.getExternalFilesDir(null); + if (base == null) base = ctx.getFilesDir(); + File resDir = new File(base, "resources"); + // Prefer JSON cache if available + File jsonCache = new File(resDir, "gameindex.json"); + if (loadJsonIfPresent(jsonCache, sSerialToTitle)) { + sLoaded = true; + return; + } + // Try both files if present + loadYamlSafe(new File(resDir, "GameIndex.yaml"), sSerialToTitle); + loadYamlSafe(new File(resDir, "RedumpDatabase.yaml"), sSerialToTitle); + // Write JSON cache for faster subsequent loads + writeJsonSafe(jsonCache, sSerialToTitle); + sLoaded = true; + } + + public static String resolveTitleForUri(Context ctx, String uriString, String fallback) { + try { + // 1) Check per-URI cache + String cached = getCachedTitle(ctx, uriString); + if (cached != null && !cached.isEmpty()) return cached; + + // 2) Ensure index loaded (JSON fast path or YAML) + ensureLoaded(ctx); + + // 3) Resolve serial via native; if missing, try filename hint + String serial = null; + try { serial = NativeApp.getGameSerial(uriString); } catch (Throwable ignored) {} + if (serial == null || serial.isEmpty()) { + Uri u = Uri.parse(uriString); + String name = u.getLastPathSegment(); + if (name != null) serial = normalizeCandidate(name); + } + + // 4) Lookup in index + if (serial != null) { + serial = normalizeSerial(serial); + String title = sSerialToTitle.get(serial); + if (title != null && !title.isEmpty()) { + putCachedTitle(ctx, uriString, title); + return title; + } + } + + // 5) Fallback to native URI title if available + String nativeTitle = null; + try { nativeTitle = NativeApp.getGameTitleFromUri(uriString); } catch (Throwable ignored) {} + if (nativeTitle != null && !nativeTitle.isEmpty()) { + putCachedTitle(ctx, uriString, nativeTitle); + return nativeTitle; + } + } catch (Throwable ignored) {} + return fallback; + } + + private static void loadYamlSafe(File file, Map out) { + if (file == null || !file.exists()) return; + try (BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream(file), StandardCharsets.UTF_8))) { + String line; + String pendingSerial = null; + int currentIndent = 0; + while ((line = br.readLine()) != null) { + String l = line.trim(); + if (l.isEmpty() || l.startsWith("#")) continue; + // Detect top-level or map-key serial of the form SERIAL: + String serialKey = extractSerialMapKey(line); + if (serialKey != null) { + pendingSerial = normalizeSerial(serialKey); + currentIndent = leadingSpaces(line); + continue; + } + // If inside a serial block, parse a name/title field at greater indent + if (pendingSerial != null) { + int indent = leadingSpaces(line); + if (indent <= currentIndent) { + // Out of this block + pendingSerial = null; + continue; + } + String title = extractTitleFromLine(l); + if (title != null) { + out.put(pendingSerial, title); + pendingSerial = null; + } + } + } + } catch (Exception ignored) {} + } + + private static boolean loadJsonIfPresent(File file, Map out) { + if (file == null || !file.exists()) return false; + try (FileInputStream fis = new FileInputStream(file)) { + InputStreamReader isr = new InputStreamReader(fis, StandardCharsets.UTF_8); + StringBuilder sb = new StringBuilder(1 << 20); + char[] buf = new char[4096]; + int n; + while ((n = isr.read(buf)) != -1) sb.append(buf, 0, n); + JSONObject obj = new JSONObject(new JSONTokener(sb.toString())); + java.util.Iterator keys = obj.keys(); + while (keys.hasNext()) { + String k = keys.next(); + String v = obj.optString(k, null); + if (v != null && !v.isEmpty()) out.put(k, v); + } + return true; + } catch (Exception ignored) {} + return false; + } + + private static void writeJsonSafe(File file, Map map) { + if (file == null) return; + try { + if (file.getParentFile() != null && !file.getParentFile().exists()) file.getParentFile().mkdirs(); + JSONObject obj = new JSONObject(map); + byte[] bytes = obj.toString().getBytes(StandardCharsets.UTF_8); + try (FileOutputStream fos = new FileOutputStream(file, false)) { + fos.write(bytes); + fos.flush(); + } + } catch (Exception ignored) {} + } + + private static String getCachedTitle(Context ctx, String uri) { + try { + SharedPreferences prefs = ctx.getSharedPreferences("title_cache", Context.MODE_PRIVATE); + return prefs.getString(uri, null); + } catch (Throwable ignored) {} + return null; + } + + private static void putCachedTitle(Context ctx, String uri, String title) { + try { + SharedPreferences prefs = ctx.getSharedPreferences("title_cache", Context.MODE_PRIVATE); + prefs.edit().putString(uri, title).apply(); + } catch (Throwable ignored) {} + } + + private static String extractTitleFromLine(String l) { + // Common YAML keys + int idx = indexOfKey(l, "name:"); + if (idx < 0) idx = indexOfKey(l, "title:"); + if (idx < 0) return null; + String v = l.substring(idx).trim(); + // Strip key + int colon = v.indexOf(':'); + if (colon >= 0) v = v.substring(colon + 1).trim(); + // Trim quotes if present + if ((v.startsWith("\"") && v.endsWith("\"")) || (v.startsWith("'") && v.endsWith("'"))) { + v = v.substring(1, v.length() - 1); + } + return v.isEmpty() ? null : v; + } + + private static int indexOfKey(String l, String key) { + int i = l.toLowerCase(Locale.ROOT).indexOf(key); + return i; + } + + private static String extractSerialFromLine(String l) { + String upper = l.toUpperCase(Locale.ROOT); + java.util.regex.Matcher m = java.util.regex.Pattern + .compile("([A-Z]{4,5})[- _]?([0-9]{3})[._]?([0-9]{2})") + .matcher(upper); + if (m.find()) return m.group(1) + "-" + m.group(2) + m.group(3); + return null; + } + + private static String extractSerialMapKey(String rawLine) { + // Matches: "SLUS-20312:" or " SLUS_203.12:" (with indentation) at start of key + int colon = rawLine.indexOf(':'); + if (colon <= 0) return null; + String key = rawLine.substring(0, colon).trim(); + String s = extractSerialFromLine(key); + // Ensure the whole key is a serial, not just contains one + if (s != null) { + String normalizedKey = key.toUpperCase(Locale.ROOT).replace('_','-').replace(".", ""); + String normalizedSerial = s.toUpperCase(Locale.ROOT).replace('_','-'); + if (normalizedKey.replace("-", "").equals(normalizedSerial.replace("-", ""))) { + return s; + } + } + return null; + } + + private static int leadingSpaces(String s) { + int i = 0; + while (i < s.length() && Character.isWhitespace(s.charAt(i))) i++; + return i; + } + + private static String normalizeCandidate(String s) { + if (s == null) return null; + String upper = s.toUpperCase(Locale.ROOT).replace('_', '-'); + // Try to extract serial + return extractSerialFromLine(upper); + } + + private static String normalizeSerial(String serial) { + String s = serial.toUpperCase(Locale.ROOT).replace('_', '-'); + s = s.replaceAll("([A-Z]{4,5})-([0-9]{3})\\.([0-9]{2})", "$1-$2$3"); + return s; + } +} diff --git a/app/src/main/res/drawable/bg_cover_shadow.xml b/app/src/main/res/drawable/bg_cover_shadow.xml new file mode 100644 index 0000000..8f40753 --- /dev/null +++ b/app/src/main/res/drawable/bg_cover_shadow.xml @@ -0,0 +1,13 @@ + + + + + + diff --git a/app/src/main/res/layout/item_coverflow.xml b/app/src/main/res/layout/item_coverflow.xml new file mode 100644 index 0000000..d757ff8 --- /dev/null +++ b/app/src/main/res/layout/item_coverflow.xml @@ -0,0 +1,48 @@ + + + + + + + + + + +