Skip to content

v0.43.5: Satış panelinin payı ve dar ekranda okunan kural - #112

Merged
aripdcem merged 12 commits into
mainfrom
claude/za-reposu-mobile-platform-weu16o
Sep 21, 2026
Merged

aripdcem merged 12 commits into
mainfrom
claude/za-reposu-mobile-platform-weu16o

Conversation

@aripdcem

Copy link
Copy Markdown
Collaborator

Reyon Satış'ın puan kuralları paneli üç ayrı yerde açıldı; üçü de cihazda ölçüldü.

1 — Uzun telefonda beş kuralın beşi

Panelin payı tepsiden artana bağlıydı: tepsi ürün adları sarınca iki sıra yerine üç sıra oluyor (167 ↔ 219 dp) ve panel onunla 240 ↔ 208 dp arasında gidip geliyordu; 208 dp'de beşinci kuralın adı kırpılıyordu. Kol ters çevrildi — panel ağırlıksız, yani önce ölçülüyor ve kendi içeriği kadar yer alıyor; tavan yalnız tepsinin payını koruyor.

internal fun panelCap(rest: Dp): Dp =
    minOf(maxOf(PANEL_MIN, rest - TRAY_KEEP), rest - TRAY_MIN).coerceAtLeast(0.dp)

İki sınır da gerekli: maxOf kısa ekranda tavanı tabana çekiyor, minOf tepsinin tabanını koruyor (480 dp'lik uygulama alanında maxOf tek başına panele 140 dp verip tepsiye 37,5 dp bırakırdı). İkisi birlikte rest ≤ 308 dp'de eski kolun birebir aynısı: panelCap(rest) == rest - trayHeight(rest), test bunu 72–308 dp aralığının her değerinde doğruluyor.

Sabit bir "istenen boy" (PANEL_WANT = 240 dp) denendi ve bilerek bırakıldı — o sayı ölçülen bir metnin boyu olurdu. Yazı ölçeği 1,3'te cihazda ölçülen fark:

Yapı Panel Marka bloğu adı
sabit 240 dp 240,0 (tavana çakılı) 14,1 dp — kırpık
içerikten gelen pay 254,1 dp 21,0 dp — tam

2 — Dar ekranda üçüncü kural her dilde

Hedef yalnız Türkçe'de tutuyordu: Almanca ve Fince'de ikinci kuralın gövdesi de iki satıra sarıp 140 dp'lik tabanın 2 dp'lik payını bitiriyordu. Panel tabanına sıkışmışken gövdeler tek satıra iniyor (rulesAreCompact(rest) = panelCap(rest) <= PANEL_MIN); eşik ayrı bir sayı değil, tavanın kendisi.

Dil Önce Sonra
tr 3/5 3/5
de 2/5 3/5
fi 2/5 3/5

Üç dilde sayılar birebir aynı — dil artık sonucu değiştirmiyor. 411 dp'de hiçbir şey değişmedi (panel 232,4 dp, gövdeler iki satır, 5/5).

3 — Ürünler bitince panel boşalan yeri kullanıyor

Tavan st.finished'a bağlıydı, oysa bütün ürünler rafa konunca tepsi hâlâ çiziliyor — yalnız "Tüm ürünler rafta" notunu. Koşul artık tepsinin çizdiği şeye bakıyor (trayPending).

360×640 dp Önce Sonra
Panel ~128,7 dp 198,0 dp
Okunan kural 3/5, gövde kesik 4/5 tam
Boşluk ~83 dp yok

480 dp'de panel ~105 → 128,7 dp, 2 → 3/5. Oyuncunun kuralları okumak için durduğu an tam orası.

Yanında

  • Gizlilik politikasındaki geliştirici adı aripdcom (14 dilde) — Play Console'daki "Developer name" ile birebir aynı olmak zorunda.
  • Ölçüm araçları raporun ilk satırına kurulu yapının parmak izini basıyor (paket, sürüm, base.apk SHA256) ve bir oyun açılamadığında gördüğü etiketleri yazıyor. Parmak izi iki kez işe yaradı: bir ölçüm yanlış daldan kurulmuş yapıyla alınmıştı, bir kez de Gradle "84 up-to-date" deyip eski APK'yi bırakmıştı.
  • reyon --olcek 2.0 düzeldi: oyunu_ac'taki yakınlık eşiği pikseldi, 320 dpi'de 125 dp edip yanlış oyunu açıyordu; dp'ye çevrildi.

Cihaz kütükleri docs/oyun-testi.md'de; ölçümleri yapan üç dal (#106, #111 ve tepsi tavanı denemesi) bu dalda birleşik.

🤖 Generated with Claude Code

https://claude.ai/code/session_014qCsJLxcGnpqjkKgXRiLC2


Generated by Claude Code

aripdcem and others added 12 commits September 21, 2026 00:53
411 dp'de beşinci kuralın adı kırpılıyordu: panel tepsiden artanı alıyor ve tepsi
ürün adları sarınca üç sıraya çıkınca panele 208 dp kalıyordu. trayHeight artık
bir panelWant alıyor; Satış 240 dp istiyor (v0.43.2'de tepsinin iki sıra kaldığı
turlarda ölçülen, beş kuralın göründüğü boy).

Pay ancak tepsiye TRAY_KEEP (168 dp = başlık + iki sıra) kalıyorsa yükseliyor,
yani ayrım rest 308 dp'yi geçince başlıyor ve kısa ekran hiç etkilenmiyor.
Varsayılan panelWant = PANEL_MIN olduğu için Diziliş ile Sipariş'in kolu da
değişmedi.

Cihazda: 411 dp'de üç turda da panel 232,4 dp ve beş kural tam. Bedeli tepsinin
son sırasının bir sürükleme uzağa gitmesi; ölçüldü, sürükleyince tam geliyor ve
dokunuş seçimi alıyor. 360×640 dp'deki sayılar birebir aynı kaldı.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Cihaz oturumunun a28aa7a'sı: 411 dp'de panele beş kuralı bırakan tavan, saf
işlev testi ve cihaz kütüğü. Üstüne kalibrasyonsuz hâli yazılacak.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_014qCsJLxcGnpqjkKgXRiLC2
Denemenin kolu doğruydu ama tavanı sabit bir PANEL_WANT = 240 dp'ye bağlıydı ve
o sayı ölçülen bir metnin boyuydu: cihazda beş kural 232,4 dp tuttu, yani payı
7,6 dp. Kural satırı ad (17,7 dp) + gövde (1–2 satır × 17,7 dp) olduğu için tek
bir fazladan sarma payı yiyor ve beşinci kuralın adı yine kırpılırdı. Bunu iki
şey tetikler, ikisi de sahada var: daha uzun bir dil ve kullanıcının büyüttüğü
yazı ölçeği (gövde sp, tavan dp).

Kol aynı, kalibrasyon kalktı: Satış'ta panel ağırlıksız olduğu için önce
ölçülüyor ve kendi içeriği kadar yer alıyor; tavan yalnız tepsinin payını
koruyor.

    panelCap(rest) = min(max(PANEL_MIN, rest - TRAY_KEEP), rest - TRAY_MIN)

İki sınır da gerekli. maxOf kısa ekranda tavanı tabana çekiyor. minOf tepsinin
tabanını koruyor: panel önce ölçüldüğü için sınırlanmazsa çok kısa ekranda
tepsiye yer kalmaz — 480 dp'lik uygulama alanında kalan 177,5 dp ve maxOf tek
başına 140 dp der, tepsiye 37,5 dp bırakırdı; ürün seçilemeyen tepsi bulmacayı
çözülemez yapar. Denemenin ilk hâlinde bu sınır yoktu.

İkisi birlikte, rest 308 dp'nin altında eski kolun birebir aynısı:
panelCap(rest) == rest - trayHeight(rest). Test bunu 72–308 dp aralığının her
değerinde doğruluyor, yani "kısa ekran etkilenmiyor" tahmin değil. Diziliş'in
kolu (trayHeight) hiç değişmedi; Sipariş'te tepsi yok.

Tur bitince tepsi çizilmediği için tavan da kalkıyor, yoksa panelin altında
boşluk kalırdı.

Beklenen ölçüm: 411 dp'de panel yine 232,4 dp (panel zaten içeriği kadar yer
alıyordu), tepsiye 186 yerine 193,6 dp; 360×640 dp'de hiçbir sayı değişmemeli.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_014qCsJLxcGnpqjkKgXRiLC2
theCapNeverDropsBelowTheFloor, panelCap'in ilk (yalnız maxOf'lu) hâline göre
yazılmıştı ve 100 dp'lik kalanda 140 bekliyordu. Tepsinin tabanını koruyan
sınır eklenince doğru değer 28: tepsi 72 dp'sini alıyor, panele kalan düşüyor.
Eski kolun aynı kalanda yaptığı da bu (rest - trayHeight(rest) = 28), yani
kırılan şey kural değil savın kendisiydi — PANEL_MIN bir hedef, dokunulmaz bir
taban değil; belgedeki ölçülmüş örnek de öyle diyor (480 dp'lik uygulama
alanında panel 105,5 dp).

Sav yerine gerçek değişmez yazıldı ve dosyadaki bütün sayılar yeniden
hesaplandı.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_014qCsJLxcGnpqjkKgXRiLC2
411 dp'de panel üç turda da 232,4 dp ve beş kural tam; 360×640 dp'de hiçbir sayı
değişmedi; 480 dp'lik uygulama alanında tepsi tabanını koruyor ve seçim çalışıyor.

Kalibrasyonun kaldırılması ölçülebilir: yazı ölçeği 1,3'te sabit PANEL_WANT=240
yapısı paneli 240,0 dp'ye çakılı tutup Marka bloğu'nu 14,1 dp'ye indiriyor, yeni
kol 254,1 dp alıp beş kuralı tam tutuyor.

Açık: tavan st.finished'a bağlı, ama ürünler bitince tepsi yalnız "Tüm ürünler
rafta" notunu çiziyor ve st.finished hâlâ false. 480 dp'de panel ~105 dp'de
kalıyor — iki kural, Tamamlayıcı'nın gövdesi ortadan kesik, altında ~83 dp boşluk.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Eksik kalan ölçümler tamamlandı ve hepsi tek bölümde toplandı.

Bulgu 1: G4'ün "en az üç kural" hedefi kısa ekranda yalnız Türkçe'de tutuyor.
Almanca ve Fince'de ikinci kuralın gövdesi de iki satıra sarıyor ve üçüncü
kuralın adı 5,3 dp'ye iniyor — planın 2 dp'lik payı dilde tükeniyor. Ok doğru
yerde çıkıyor, dokununca gövde açılıyor, yani içerik ulaşılabilir.

Bulgu 2: tepsi boşalınca tavan kalkmıyor. st.finished false kalırken tepsi
yalnız reyon_tray_empty notunu çiziyor; panel 563 dp'de ~128,7 dp'de, 480 dp'de
~105 dp'de kalıyor ve altında ~83 dp boşluk duruyor.

Araç: reyon --olcek 2.0 üç türde de "Reyon açılamadı" veriyordu. oyunu_ac'taki
250 pikselllik yakınlık eşiği 320 dpi'de 125 dp ediyor ve son oynananlar
şeridindeki adla ilk kartın Oyna düğmesini aynı satır sayıyordu; tarama Blok'a
girip duraklatma katmanında sıkışıyordu. Eşik 95 dp'ye çevrildi.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Cihaz bulgusu: bütün ürünler rafa konunca tepsi yalnız tek satırlık "Tüm
ürünler rafta" notunu çiziyor, ama st.finished hâlâ false olduğu için panele
konan tavan tepsiye TRAY_KEEP ayırmayı sürdürüyordu. Ölçülen: 563 dp'lik
uygulama alanında panel ~128,7 dp'de kalıyor ve altında ~83 dp boşluk duruyor;
480 dp'de beş kuralın yalnız ikisi okunuyor ve Tamamlayıcı'nın gövdesi satırın
ortasından kesiliyor. Oyuncunun kuralları okumak için en çok durduğu an tam o
an: ürünler yerleşmiş, puan oluşmuş, karar veriliyor.

Hata benim koyduğum koşulda: "tepsi çizilmiyor" ile "tur bitti"yi aynı şey
saymıştım. Kol artık tepsinin çizdiği şeye bakıyor — tepside yerleştirilecek
ürün kalıp kalmadığına:

    val trayPending = st.sales.products.any { !st.isPlaced(it.id) }

Ürün varken panel ağırlıksız (önce ölçülüyor, tavanı panelCap), tepsi kalanı
alıyor. Ürün kalmayınca kol Diziliş'inkine dönüyor: not doğal boyunu alıyor,
panel kalanın hepsini kullanabiliyor. Tur bitmiş hâl de bu kola düştüğü için
eski st.finished özel durumu gerekmiyor.

CI bunu sınamıyor: bütün ürünleri rafa koymak tuvale koordinat koordinat
dokunmayı gerektiriyor ve o dokunuşlar raf geometrisine bağlı olduğu için
kırılgan bir test olurdu. Doğrulaması cihazda.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_014qCsJLxcGnpqjkKgXRiLC2
Cihaz bulgusu: G4'ün "en az üç kural" hedefi 360×640 dp'de yalnız Türkçe'de
tutuyordu. Almanca ve Fince'de ikinci kuralın gövdesi de iki satıra sarıyor
(Paare wie Chips und Dip nebeneinander +6, / übereinander +3) ve üçüncü kuralın
adı 5,3 dp'ye iniyordu; 140 dp'lik tabanın 2 dp'lik payı dilde tükeniyor.

Gövdenin satır sayısı artık panelin payına bağlı: tavan tabana çakılıysa
(rulesAreCompact, yani rest ≤ 308 dp) gövde tek satır. Eşik ayrı bir sayı değil,
panelCap'in kendisi — uzun ekranda tavan yükseldiği için gövdeler iki satır
kalıyor ve 411 dp'de hiçbir şey değişmiyor.

Cihazın ölçtüğü satır boylarıyla beklenen: gövdesi iki satır olan kural 50,7
yerine 35,2 dp, başlık ~36 dp, üçüncü kuralın adı 106-124 dp'ye düşüyor, yani
dile bakmadan tabanın içinde. Bedeli kısa ekranda her açıklamanın tek satıra
inmesi; ok o satırlarda da çıkıyor ve dokunmak gövdeyi tam açıyor, metin
kaybolmuyor.

Tepsi boşalınca sıkışma kalkıyor: panel kalanın hepsini aldığı için gövdeler iki
satıra dönüyor ve kuralların en çok okunduğu an orada daha çok metin görünüyor.

Eşiğin beş noktası testte: 177,5 / 226 / 308 sıkışıyor, 309 ve 426 sıkışmıyor.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_014qCsJLxcGnpqjkKgXRiLC2
Play Console'daki "Developer name" alanı aripdcom diyor; kullanıcının mağazada
gördüğü ad bu. Gizlilik politikası aripdcem yazıyordu — depo taşınırken bilerek
dokunmamıştım, çünkü o alan depo adresi değil, yayımcının kimliği ve Play'deki
adla birebir aynı olmak zorunda.

14 dilin künye satırı da metni üreten betikten geçti (tools/gen_privacy.py),
site/gizlilik.html yeniden üretildi. Değişen tek şey ad: dosyada 14 satır,
başka fark yok. check_site.py geçiyor.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_014qCsJLxcGnpqjkKgXRiLC2
weight bir ColumnScope uzantısı; modifier'ı sütunun dışında hazırlayınca örtük
alıcı bulunamıyor ("cannot be called in this context with an implicit receiver").
Kapsam kuralı iki yönlü işliyor ve bu dosyada ikisi de var: maxHeight sütunun
DIŞINDA okunmalı (ColumnScope da @LayoutScopeMarker taşıdığı için içeride
BoxWithConstraintsScope örtülüyor), weight ise İÇERİDE çağrılmalı.

O yüzden maxHeight'a bağlı iki değer (panelMax, compactRules) dışarıda, modifier
seçimi içeride. Aynı sebeple compact bayrağı da çağrı yerinde hesaplanamazdı.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_014qCsJLxcGnpqjkKgXRiLC2
e65c028 kuruldu (sha256 doğrulandı). Kısa ekranda hedef artık üç dilde de
tutuyor: tr/de/fi hepsinde 3/5 ve sayılar birebir aynı (gövde 13,3 dp tek satır,
dördüncü kuralın adı 3,3 dp). 411 dp'de hiçbir sayı değişmedi (panel 232,4 dp,
gövde 32,0 dp, 5/5). Tepsi boşalınca panel 128,7 → 198,0 dp'ye çıkıyor, gövdeler
iki satıra dönüyor, 4/5 kural tam okunuyor ve ~83 dp boşluk kalmıyor; 480 dp'de
de panel ~105 → 128,7 dp ve 2 → 3/5.

Not: dalın önceki tepesi 0eb9e5b derlenmiyordu (weight ColumnScope'ta, maxHeight
sütunun dışında). Ayrıca ilk derleme Gradle'da up-to-date deyip eski APK'yi
bıraktı; kurulu APK özeti karşılaştırılmasa eski yapı ölçülmüş olacaktı.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Sürüm 0.43.4 → 0.43.5; CHANGELOG, uygulama içi sürüm notu (14 dil, üç satır) ve
Play sürüm notu. Kod değişiklikleri 8862294, a7fec39, f756fd8, 0eb9e5b, e65c028.

Kullanıcının gördüğü üç şey: uzun telefonda beş puan kuralının beşi de
görünüyor, dar ekranda üçüncü kural her dilde okunuyor, bütün ürünler rafa
konunca panel boşalan yeri kullanıyor. Üçü de cihazda ölçüldü (PR #111).

Dördüncü madde yalnız CHANGELOG'da: gizlilik politikasındaki geliştirici adı
aripdcom oldu. Oyuncunun uygulamada gördüğü bir şey değil, sayfa sitede duruyor.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_014qCsJLxcGnpqjkKgXRiLC2
@aripdcem
aripdcem merged commit b600dcd into main Sep 21, 2026
2 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants