Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
39 changes: 39 additions & 0 deletions AUDIO_DOWNLOADS_BN.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
# SparkTube 1.4.1 — অডিও ডাউনলোড টেস্ট বিল্ড

## নতুন কী

Music → Downloads পেজে এখন শুধু সম্পন্ন গান নয়, চলমান, অপেক্ষমাণ, paused ও ব্যর্থ অডিও ডাউনলোডও দেখা যায়। ভিডিওর একই download adapter/engine দিয়ে pause/resume, progress bar, শতাংশ (মোট সাইজ জানা থাকলে), downloaded/total MB, MB/s এবং বাকি সময় দেখায়। অজানা মোট সাইজ বা সময়কে অনুমান করে দেখায় না।

গানের সারিতে বর্গাকার album art, শিরোনাম ও artist আছে। উপরে গানের সংখ্যা ও সবুজ Play all রাখা হয়েছে। গান গোনা ও Play all-এর কিউতে শুধু সম্পূর্ণ এবং ডিস্কে থাকা অডিও যায়; আংশিক ফাইল বাজানো হয় না। সম্পন্ন গানের তিন-ডট মেনুতে Open, Share, Delete আছে; Delete-এ confirmation দেখায়। চলমান/ব্যর্থ সারি long-press করে মুছতে পারেন। পেজ খোলা থাকলে প্রতি সেকেন্ডে অগ্রগতি আপডেট হয়; অন্য পেজে গেলে polling বন্ধ হয়।

## যা অপরিবর্তিত

`com.sparktube.app`, versionName **1.4.1**, versionCode **10** এবং আগের টেস্ট APK-এর signing certificate একই। ভিডিও download engine, Library downloads, player ও compact Audio/Video toggle-এর সোর্স অপরিবর্তিত। DownloadAdapter-এ audioStyle opt-in; পুরোনো default video view আগের পথেই চলে। নতুন dependency, native library বা বড় image asset যোগ হয়নি।

APK: **10,303,832 bytes** (10.30 MB); আগের compact-toggle APK থেকে পরিবর্তন **+2,432 bytes**। এটি debug-signed test build, store release নয়।

## যাচাই ও সীমা

বিল্ড সফল; **46 JVM tests** (অডিও লাইব্রেরির 8 নতুন test-সহ) এবং **15 source/XML structure checks** পাস। APK package/version, signature এবং ZIP alignment যাচাই করা হয়েছে। আগের editable ZIP-এর সঙ্গে মিলিয়ে পুরোনো app source-এ কেবল MusicListActivity ও DownloadAdapter বদলানোর বিষয়টি পরীক্ষা হয়েছে। এটি source-level regression evidence, runtime-এর নিশ্চয়তা নয়।

কোনো Android ফোন বা emulator সংযুক্ত নেই। তাই আসল ফোনে install, screen rendering, download, pause/resume, Play all, playback, share/delete-এর end-to-end পরীক্ষা হয়নি। Android lint offline cache-এ প্রয়োজনীয় `lint-gradle:31.6.1` না থাকায় lintVital ধাপ বাদ দেওয়া হয়েছে; full lint সম্পন্ন হয়নি। আগের deprecation warnings আছে।

আগের সীমাবদ্ধতা একই: pause/resume কেবল চলমান app process-এর মধ্যে; process kill বা restart-এর পর অসম্পূর্ণ download আবার শুরু করতে হবে। Range সমর্থন না করা server pause-এর সময় সংযোগ ছিন্ন করলে download ব্যর্থ হতে পারে। ব্যর্থ item long-press করে মুছে পুনরায় download করতে হবে; নতুন retry/restart button যোগ করা হয়নি।

## সোর্স থেকে বিল্ড

JDK 21 ও Android SDK ব্যবহার করুন; নিজের SDK path দিয়ে `local.properties` তৈরি করুন। `app/build.gradle.kts`-এ version বদলাবেন না।

```sh
./gradlew :app:assembleCompactTest :app:testCompactTestUnitTest
```

এই পরিবেশে offline build command:

```sh
JAVA_HOME=/workspace/.jdk/temurin-21 ANDROID_HOME=/workspace/android-sdk ./gradlew --offline :app:assembleCompactTest :app:testCompactTestUnitTest -x :app:lintVitalAnalyzeCompactTest -x :app:lintVitalReportCompactTest -x :app:lintVitalCompactTest
python3 tools/verify-player-correction.py
python3 tools/verify-audio-downloads.py
```

`verification/audio-downloads/`-এ বর্তমান বিল্ড ও টেস্ট ফল রয়েছে। আগের ZIP-নির্ভর byte comparison script-এর জন্য আগের compact-toggle source ZIP parent folder-এ রাখতে হয়; APK build বা JVM tests-এর জন্য তা লাগে না। সোর্স ZIP-এ local SDK path, build cache, APK ও signing key নেই। চূড়ান্ত APK ও source ZIP-এর SHA-256 আলাদা manifest-এ আছে।
36 changes: 36 additions & 0 deletions BUILD_NOTES_BN.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
# SparkTube 1.4.1 — টেস্ট বিল্ড

> এই ZIP-এর সর্বশেষ ছোট APK, লকস্ক্রিন Next ও Audio/Video পিলের পরিবর্তন এবং বিল্ড নির্দেশনা `SIZE_OPTIMIZATION_BN.md`-এ আছে। নিচের নোটগুলো আগের বড় debug টেস্ট বিল্ডের ইতিহাস; `assembleDebug` এখনও সেই ডিবাগ ধরনের বিল্ড তৈরি করে।

মূল Kotlin Android প্রজেক্টেই পরিবর্তন করা হয়েছে। প্যাকেজ `com.sparktube.app`, `versionName = 1.4.1` ও `versionCode = 10` অপরিবর্তিত। এটি debug-signed টেস্ট APK, প্রকাশনার release APK নয়। আগের original-debug APK-এর সঙ্গে signing certificate একই।

## পরিবর্তন

- সার্চ রাখা হয়েছে; পাশের crash-test/bug বাটন সরানো হয়েছে।
- Library-র তালিকায় ডানে/বামে সোয়াইপ করলে পাশের ক্যাটাগরি নির্বাচিত হয়। Downloads-এ অডিও ও ভিডিও উভয় ট্রান্সফার দেখা যায়।
- ডাউনলোডে pause/resume, শতাংশ, প্রতি সেকেন্ডে আপডেট হওয়া Mbps এবং সম্পন্ন ফাইল অন্য অ্যাপে শেয়ার করার কন্ট্রোল আছে। রেঞ্জ ডাউনলোডে পুনঃচেষ্টার সময় লেখা বাইটের পর থেকে ডাউনলোড হয়।
- ভিডিওর প্রকাশ্য ১০-সেকেন্ড rewind/forward বাটন লুকানো হয়েছে। ভিডিওর ফাঁকা ডান/বাম অংশে ডাবল-ট্যাপ করলে ১০ সেকেন্ড সামনে/পিছনে যায়। Play/pause, previous/next, seekbar ও settings রাখা হয়েছে; মাঝের play/pause বাটন গোলাকার।
- ভিডিওর উপরের কোণায় Audio এবং অডিও পেজে Video সুইচ আছে। অনলাইন অডিও থেকে ভিডিওতে গেলে অবস্থান ও অবশিষ্ট কিউ সংরক্ষণের ব্যবস্থা আছে।
- ভিডিওর ডান দিকে উল্লম্ব সোয়াইপে media volume, বামে বর্তমান window-র brightness বদলায়। শতাংশের feedback দেখায়। মাঝখানে নিচে সোয়াইপে আগের মতো minimize হয়। বাস্তব বাটন ও seekbar জেসচার থেকে বাদ রাখা হয়েছে।

## যাচাই

`assembleDebug` ও `testDebugUnitTest` সফল। জেসচার গণনার ৭টি JVM টেস্ট পাস: দুই দিকের ১০-সেকেন্ড সিক, শুরু/শেষের সীমা, অজানা duration, overflow, volume ও brightness সীমা। এটি touch dispatch বা আসল playback/download-এর end-to-end পরীক্ষা নয়। সব ১৩০টি XML parse হয়েছে। APK-এর স্বাক্ষর এবং ভেতরের package/version যাচাই করা হয়েছে।

কোনো Android ফোন বা emulator সংযুক্ত ছিল না; ফোনে install, playback, pause/resume, share এবং gesture-এর ব্যবহারিক পরীক্ষা হয়নি। Android lint চালানোর চেষ্টা হয়েছে, কিন্তু প্রয়োজনীয় `lint-gradle:31.6.1` অফলাইন ক্যাশে না থাকায় সম্পন্ন হয়নি। বিদ্যমান Kotlin/D8 metadata warning আছে; তা সত্ত্বেও APK বিল্ড সফল।

## সীমাবদ্ধতা

Pause/resume এই অ্যাপের চলমান প্রসেসের মধ্যে কাজ করে। প্রসেস মেরে ফেলা বা ফোন restart-এর পর আংশিক ডাউনলোড পুনরারম্ভ হয় না; নতুন করে ডাউনলোড প্রয়োজন। Pause চাপার সময় চলমান একটি blocking read শেষ হতে পারে। রেঞ্জ সমর্থন না করা সার্ভারের সংযোগ pause-এর পরে বিচ্ছিন্ন হলে ট্রান্সফার ব্যর্থ হতে পারে।

AV pair ডাউনলোড আগের মতো পৃথক video ও audio track; শেয়ারের সময় দুটি ফাইল যায়, একত্রিত MP4 নয়। শুধু স্থানীয় অডিও ফাইলে ভিডিও ট্র্যাক না থাকলে Video সুইচ সতর্কবার্তা দেখায়।

## আবার বিল্ড

Android Studio-তে ফোল্ডার খুলুন। Android SDK 35, build-tools 34.0.0 ও উপযুক্ত JDK (এই বিল্ডে JDK 21) ব্যবহার করুন। নিজের SDK path দিয়ে `local.properties` তৈরি করুন অথবা `ANDROID_HOME` সেট করুন।

```sh
./gradlew :app:assembleDebug :app:testDebugUnitTest
```

প্রথমবার Gradle/plugin/Android লাইব্রেরি ডাউনলোডের জন্য ইন্টারনেট প্রয়োজন। পরবর্তীতে ক্যাশ সম্পূর্ণ থাকলে `--offline` ব্যবহার করা যায়। টেস্টের JUnit ও Hamcrest jar `app/libs/test/`-এ রাখা আছে; এগুলো production APK dependency নয়। `verification/` ফোল্ডারে বিল্ড লগ ও টেস্ট ফল দেওয়া হয়েছে। স্থানীয় SDK path, build cache ও signing key সোর্স ZIP-এ নেই।
35 changes: 35 additions & 0 deletions LANDSCAPE_BRIGHTNESS_PIP_BN.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
# SparkTube 1.4.1 — Landscape brightness ও PiP cleanup

## পরিবর্তন

Portrait অবস্থায় বাম পাশের vertical swipe দিয়ে brightness পরিবর্তন হবে না; brightness gesture শুধু landscape-এ কাজ করবে। Landscape থেকে portrait-এ ফিরলে অ্যাপের brightness override বাদ দিয়ে সিস্টেমের brightness ব্যবহার হবে। Volume, double-tap seek, horizontal seek এবং মাঝখানে নিচে swipe করে mini player খোলার আচরণ রাখা হয়েছে।

নতুন ভিডিও/ভিডিও প্লেলিস্ট/অডিও নির্বাচন করলে আগের PiP session-এর floating Activity বন্ধ করা হয়; শুধু player surface সরিয়ে কালো window ফেলে রাখা হয় না। নতুন watch page খুললেও পুরোনো PiP বন্ধ হয়। বন্ধ হতে থাকা Activity-র দেরিতে আসা callback নতুন player surface নিতে বা নতুন PiP-এর state মুছতে পারবে না। একই PiP-এর ভেতর স্বয়ংক্রিয় queue advance-এ PiP বন্ধ করা হয় না।

VersionName 1.4.1, versionCode 10 এবং পূর্বের compact test APK-এর signing certificate অপরিবর্তিত। Controller layout, seek bar, downloads, audio, sleep timer এবং অন্য app source অপরিবর্তিত রাখা হয়েছে; সুনির্দিষ্ট file-scope যাচাই `tools/verify-landscape-brightness-pip.py`-তে আছে।

## বিল্ড ও যাচাই

JDK 21 এবং Android SDK path দিয়ে `local.properties` তৈরি করে:

```sh
./gradlew --offline --no-daemon :app:testCompactTestUnitTest :app:assembleCompactTest \
-x lintVitalAnalyzeCompactTest -x lintVitalReportCompactTest -x lintVitalCompactTest
python3 tools/verify-landscape-brightness-pip.py
python3 tools/package-landscape-brightness-pip.py
```

প্যাকেজিং স্ক্রিপ্টের baseline APK/source এবং SDK build-tools path একই workspace-এ থাকা প্রয়োজন। APK Gradle-এর existing debug signing config ব্যবহার করে; আগের APK-র সঙ্গে update compatibility রাখতে সেই একই signing keystore প্রয়োজন। ZIP-এ keystore বা secret দেওয়া হয়নি। নতুন কম্পিউটারে প্রথম build-এ dependency download করার জন্য `--offline` বাদ দিতে হতে পারে।

`verification/landscape-brightness-pip/`-তে build log, unit test XML, source regression ফল, certificate/zipalign যাচাই এবং summary আছে। Lint চালানো হয়নি; baseline-এর offline lint dependency অনুপস্থিত থাকায় lint-vital task বাদ দেওয়া হয়েছে।

## ফোনে পরীক্ষা বাকি

Android ফোন বা emulator সংযুক্ত নেই; PiP window বন্ধ হওয়া ও gesture-এর বাস্তব আচরণ এখানে চালিয়ে পরীক্ষা করা হয়নি। ফোনে পরীক্ষা করুন:

1. Portrait-এ বাম দিকে উপরে/নিচে swipe করলে brightness বা brightness feedback বদলায় না।
2. Landscape-এ একই swipe brightness বদলায়; portrait-এ ফিরলে সিস্টেম brightness ফিরে আসে।
3. ভিডিও A থেকে PiP খুলে অ্যাপে ফিরে ভিডিও B চালালে A-এর floating window বন্ধ হয়, B মূল player-এ চলে। দ্রুত B/C নির্বাচন করেও পরীক্ষা করুন।
4. নতুন ভিডিও playlist বা audio চালালেও পুরোনো PiP থাকে না।
5. PiP থেকে পূর্ণ পর্দায় ফিরে আসা, আবার PiP খোলা, PiP বন্ধ করা এবং স্বয়ংক্রিয় next-video পরীক্ষা করুন।
6. Volume/seek, mini player, downloads, notification, audio এবং sleep timer আগের মতো কাজ করে কি না দেখুন।
Loading
Loading