Rename app identity to JamShalat
8
PRD.md
@@ -1,5 +1,5 @@
|
||||
# Product Requirements Document
|
||||
## Jamshalat Diary — Islamic Worship Companion App
|
||||
## JamShalat — Islamic Worship Companion App
|
||||
|
||||
**Version:** 1.0
|
||||
**Date:** March 2026
|
||||
@@ -35,7 +35,7 @@
|
||||
|
||||
## 1. Overview
|
||||
|
||||
**Jamshalat Diary** is an offline-first Muslim daily worship companion app built in Flutter. It helps Muslim users track their daily prayers, worship habits, and spiritual growth with a clean, modern UI that supports both light and dark themes.
|
||||
**JamShalat** is an offline-first Muslim daily worship companion app built in Flutter. It helps Muslim users track their daily prayers, worship habits, and spiritual growth with a clean, modern UI that supports both light and dark themes.
|
||||
|
||||
**Core value proposition:**
|
||||
- Never miss a prayer — real-time prayer time countdowns with Adhan/Iqamah notifications
|
||||
@@ -683,7 +683,7 @@ Rows:
|
||||
Label: "ABOUT"
|
||||
|
||||
Rows:
|
||||
- App Version: "Jamshalat Diary v1.0.0"
|
||||
- App Version: "JamShalat v1.0.0"
|
||||
- Privacy Policy (launches in-app browser)
|
||||
- Rate the App (links to store)
|
||||
- Contact / Feedback
|
||||
@@ -881,4 +881,4 @@ The following features are **explicitly excluded** from v1.0 to keep scope focus
|
||||
|
||||
---
|
||||
|
||||
*PRD v1.0 — Jamshalat Diary — March 2026*
|
||||
*PRD v1.0 — JamShalat — March 2026*
|
||||
|
||||
10
TASKLIST.md
@@ -1,6 +1,6 @@
|
||||
# Jamshalat Diary — Phase-Based Implementation Tasklist
|
||||
# JamShalat — Phase-Based Implementation Tasklist
|
||||
|
||||
**Project:** Jamshalat Diary Flutter App
|
||||
**Project:** JamShalat Flutter App
|
||||
**PRD Reference:** `PRD.md`
|
||||
**Design Reference:** `stitch/` folder (18 screens)
|
||||
**Last Updated:** March 2026
|
||||
@@ -302,8 +302,8 @@
|
||||
- [ ] **7.3.1** Create app icon (1024×1024px): mosque/compass motif with `#70df20` primary color
|
||||
- [ ] **7.3.2** Apply app icon via `flutter_launcher_icons` package (all densities, adaptive icon for Android)
|
||||
- [ ] **7.3.3** Create splash screen via `flutter_native_splash` package (white/dark bg, centered logo)
|
||||
- [ ] **7.3.4** Set app name: "Jamshalat Diary" in `AndroidManifest.xml` and `Info.plist`
|
||||
- [ ] **7.3.5** Set bundle ID: `com.jamshalat.diary` on both platforms
|
||||
- [ ] **7.3.4** Set app name: "JamShalat" in `AndroidManifest.xml` and `Info.plist`
|
||||
- [ ] **7.3.5** Set bundle ID: `com.jamshalat.app` on both platforms
|
||||
- [ ] **7.3.6** Configure release signing (Android keystore, iOS certificates) — document in private README
|
||||
- [ ] **7.3.7** Build release APK: `flutter build apk --release` — verify no build errors
|
||||
- [ ] **7.3.8** Build iOS release: `flutter build ipa --release` — verify no build errors
|
||||
@@ -338,4 +338,4 @@
|
||||
|
||||
---
|
||||
|
||||
*TASKLIST v1.0 — Jamshalat Diary — March 2026*
|
||||
*TASKLIST v1.0 — JamShalat — March 2026*
|
||||
|
||||
@@ -24,7 +24,7 @@ val hasReleaseKeystore = listOf(
|
||||
}
|
||||
|
||||
android {
|
||||
namespace = "com.jamshalat.diary"
|
||||
namespace = "com.jamshalat.app"
|
||||
compileSdk = flutter.compileSdkVersion
|
||||
ndkVersion = flutter.ndkVersion
|
||||
|
||||
@@ -52,7 +52,7 @@ android {
|
||||
|
||||
defaultConfig {
|
||||
// TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html).
|
||||
applicationId = "com.jamshalat.diary"
|
||||
applicationId = "com.jamshalat.app"
|
||||
// You can update the following values to match your application needs.
|
||||
// For more information, see: https://flutter.dev/to/review-gradle-config.
|
||||
minSdk = flutter.minSdkVersion
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
<uses-permission android:name="android.permission.FOREGROUND_SERVICE"/>
|
||||
<uses-permission android:name="android.permission.FOREGROUND_SERVICE_MEDIA_PLAYBACK"/>
|
||||
<application
|
||||
android:label="Jamshalat Diary"
|
||||
android:label="JamShalat"
|
||||
android:name="${applicationName}"
|
||||
android:icon="@mipmap/ic_launcher">
|
||||
<activity
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.jamshalat.diary
|
||||
package com.jamshalat.app
|
||||
|
||||
import android.hardware.GeomagneticField
|
||||
import com.ryanheise.audioservice.AudioServiceActivity
|
||||
@@ -8,7 +8,7 @@ import io.flutter.plugin.common.MethodChannel
|
||||
|
||||
class MainActivity : AudioServiceActivity() {
|
||||
companion object {
|
||||
private const val GEOMAGNETIC_CHANNEL = "com.jamshalat.diary/geomagnetic"
|
||||
private const val GEOMAGNETIC_CHANNEL = "com.jamshalat.app/geomagnetic"
|
||||
private const val DECLINATION_METHOD = "getDeclination"
|
||||
}
|
||||
|
||||
@@ -1,5 +0,0 @@
|
||||
package com.jamshalat.jamshalat_diary
|
||||
|
||||
import io.flutter.embedding.android.FlutterActivity
|
||||
|
||||
class MainActivity : FlutterActivity()
|
||||
412
docs/app-feature-overview.md
Normal file
@@ -0,0 +1,412 @@
|
||||
# JamShalat: App Feature Overview
|
||||
|
||||
## What this app does
|
||||
|
||||
JamShalat is a Muslim daily worship companion. It combines prayer schedule utilities, Qur'an reading, dzikir, Islamic reference content, worship tracking, reminders, and personal settings in one app.
|
||||
|
||||
The app is designed to help users:
|
||||
|
||||
- know the current and upcoming prayer times
|
||||
- keep worship routines more consistent
|
||||
- continue Qur'an reading from the last ayat
|
||||
- access daily dzikir, doa, hadits, and Qur'an study tools
|
||||
- receive adzan, iqamah, and habit reminders
|
||||
- review weekly, monthly, and yearly worship progress
|
||||
|
||||
## Main navigation modes
|
||||
|
||||
The app supports 2 navigation modes:
|
||||
|
||||
### 1. Mode lengkap
|
||||
|
||||
Bottom navigation:
|
||||
|
||||
- Beranda
|
||||
- Jadwal
|
||||
- Checklist
|
||||
- Laporan
|
||||
- Alat Islami
|
||||
|
||||
This mode is focused on full habit tracking and reporting.
|
||||
|
||||
### 2. Mode simpel
|
||||
|
||||
Bottom navigation:
|
||||
|
||||
- Beranda
|
||||
- Jadwal
|
||||
- Al-Qur'an
|
||||
- Dzikir
|
||||
- Lainnya
|
||||
|
||||
This mode is focused on faster access to the most-used spiritual features with less UI complexity.
|
||||
|
||||
## Core screens and features
|
||||
|
||||
## Beranda
|
||||
|
||||
Beranda is the main daily dashboard.
|
||||
|
||||
Features:
|
||||
|
||||
- main hero card with the next prayer time
|
||||
- live countdown to the next prayer
|
||||
- city/location label
|
||||
- quick access button to Arah Kiblat
|
||||
- sound toggle for adzan reminders
|
||||
- horizontal prayer schedule cards for today or tomorrow
|
||||
- automatic highlight for the next relevant prayer card
|
||||
- `Lanjutkan Tilawah` card when the user has a last-read Qur'an bookmark
|
||||
- `Poin Ibadah Hari Ini` summary card
|
||||
- weekly points progress chart
|
||||
- `Ayat Hari Ini` card
|
||||
|
||||
`Ayat Hari Ini` supports:
|
||||
|
||||
- deterministic daily ayat
|
||||
- randomize to another ayat
|
||||
- restore back to the daily ayat
|
||||
- share as text
|
||||
- copy text
|
||||
- share as generated image card
|
||||
|
||||
## Kalender Sholat / Jadwal
|
||||
|
||||
This screen is the prayer calendar and city-based schedule browser.
|
||||
|
||||
Features:
|
||||
|
||||
- current city prayer schedule
|
||||
- date-aware prayer timing
|
||||
- support for changing city/kabupaten
|
||||
- schedule browsing for upcoming days
|
||||
- layout optimized for simple mode and full mode
|
||||
|
||||
## Checklist Ibadah
|
||||
|
||||
This feature is available in mode lengkap.
|
||||
|
||||
It acts as the daily worship tracker.
|
||||
|
||||
Tracked areas:
|
||||
|
||||
- 5 daily sholat fardhu
|
||||
- rawatib prayers
|
||||
- tilawah target progress
|
||||
- dzikir pagi and petang
|
||||
- puasa sunnah
|
||||
|
||||
Features:
|
||||
|
||||
- daily completion progress
|
||||
- configurable rawatib level
|
||||
- configurable tilawah target
|
||||
- optional additional worship tracking
|
||||
- automatic recalculation of total points and completion percentage
|
||||
- integration with tilawah and dzikir flows
|
||||
|
||||
## Laporan / Riwayat Ibadah
|
||||
|
||||
This screen summarizes worship quality and history.
|
||||
|
||||
Mode lengkap:
|
||||
|
||||
- weekly tab
|
||||
- monthly tab
|
||||
- yearly tab
|
||||
- weekly average summary
|
||||
- daily point bars
|
||||
- per-day point labels
|
||||
- insights for strongest and weakest worship consistency
|
||||
|
||||
Mode simpel:
|
||||
|
||||
- simplified worship history presentation
|
||||
|
||||
## Al-Qur'an
|
||||
|
||||
This module contains the Qur'an reading experience.
|
||||
|
||||
Features:
|
||||
|
||||
- list of all surah
|
||||
- surah metadata
|
||||
- configurable display:
|
||||
- Arabic only
|
||||
- Arabic + Latin
|
||||
- Arabic + translation
|
||||
- adaptive Arabic font size support
|
||||
- direct access to bookmarks
|
||||
- direct access to enrichment tools
|
||||
|
||||
## Qur'an reading screen
|
||||
|
||||
This is the detailed surah reading screen.
|
||||
|
||||
Features:
|
||||
|
||||
- verse-by-verse reading
|
||||
- Bismillah shown as part of scroll flow instead of fixed header
|
||||
- accurate jump to a target ayat
|
||||
- jump support for:
|
||||
- last read
|
||||
- favorites
|
||||
- continue reading
|
||||
- per-ayat actions:
|
||||
- play verse audio
|
||||
- mark as last read
|
||||
- add to favorites
|
||||
- open tafsir drawer
|
||||
- display settings drawer
|
||||
- quick Arabic font size adjustment
|
||||
- optional Latin and translation display
|
||||
- tilawah session tracking
|
||||
- sync to checklist in mode lengkap
|
||||
|
||||
## Qur'an bookmarks
|
||||
|
||||
This screen stores reading continuity and personal saved ayat.
|
||||
|
||||
Features:
|
||||
|
||||
- `Terakhir Dibaca`
|
||||
- `Ayat Favorit`
|
||||
- open exact surah and ayat
|
||||
- cached ayat content refresh when needed
|
||||
- continue reading CTA
|
||||
|
||||
## Qur'an Murattal
|
||||
|
||||
This is the full-surah audio recitation player.
|
||||
|
||||
Features:
|
||||
|
||||
- play murattal by surah
|
||||
- qari selection
|
||||
- autoplay support
|
||||
- previous/next/shuffle controls
|
||||
- gold-decorated main play button
|
||||
- blurred themed player panel
|
||||
- background artwork
|
||||
- shortcut back to the same surah in reading mode
|
||||
- background playback through shared app-wide audio player
|
||||
|
||||
## Qur'an Enrichment
|
||||
|
||||
This screen provides deeper study tools.
|
||||
|
||||
Tabs:
|
||||
|
||||
- Cari
|
||||
- Tafsir
|
||||
- Juz
|
||||
- Halaman
|
||||
- Tema
|
||||
- Asmaul Husna
|
||||
|
||||
Features:
|
||||
|
||||
- search ayat
|
||||
- tafsir per surah
|
||||
- word-by-word expansion
|
||||
- browse by juz
|
||||
- browse by page
|
||||
- browse by topic/theme
|
||||
- Asmaul Husna reference
|
||||
- Arabic font-size settings in screen
|
||||
|
||||
## Dzikir Harian
|
||||
|
||||
This screen organizes daily dzikir routines.
|
||||
|
||||
Tabs:
|
||||
|
||||
- Sesudah Sholat
|
||||
- Pagi
|
||||
- Petang
|
||||
- Harian
|
||||
|
||||
Features:
|
||||
|
||||
- card mode and focus/slide mode
|
||||
- pembuka slide support for pagi and petang
|
||||
- per-item recitation counter
|
||||
- source structure aligned to Rumaysho reference
|
||||
- daily dzikir separated from morning/evening flow where appropriate
|
||||
- automatic sync between linked dzikir counters
|
||||
- prayer-window reset for `Sesudah Sholat`
|
||||
- day-based reset for `Pagi`, `Petang`, and `Harian`
|
||||
- configurable Arabic font size in-screen
|
||||
- dedicated simple-mode behavior
|
||||
|
||||
## Arah Kiblat
|
||||
|
||||
This is the compass-based qibla finder.
|
||||
|
||||
Features:
|
||||
|
||||
- live compass tracking
|
||||
- location-based qibla direction calculation
|
||||
- device support checks
|
||||
- permission/state handling
|
||||
- themed background with subtle Unsplash imagery
|
||||
- Kaaba-centered compass UI
|
||||
- visual indication when the device is aligned correctly to the qibla direction
|
||||
|
||||
## Kumpulan Doa
|
||||
|
||||
Reference screen for Islamic prayers.
|
||||
|
||||
Features:
|
||||
|
||||
- searchable list of doa
|
||||
- Arabic text
|
||||
- translation and supporting text
|
||||
- refresh action
|
||||
- Arabic font size setting in-screen
|
||||
|
||||
## Hadits Arba'in
|
||||
|
||||
Reference screen for the 40 hadith collection.
|
||||
|
||||
Features:
|
||||
|
||||
- searchable hadith list
|
||||
- Arabic text
|
||||
- translation/explanation text
|
||||
- refresh action
|
||||
- Arabic font size setting in-screen
|
||||
|
||||
## Alat Islami / Lainnya
|
||||
|
||||
This acts as the tool hub.
|
||||
|
||||
Contains shortcuts to:
|
||||
|
||||
- Al-Qur'an Terjemahan
|
||||
- Qur'an Murattal
|
||||
- Arah Kiblat
|
||||
- Dzikir Harian
|
||||
- Kumpulan Doa
|
||||
- Hadits Arba'in
|
||||
- Pendalaman Al-Qur'an
|
||||
|
||||
It also contains:
|
||||
|
||||
- `Ayat Hari Ini`
|
||||
- share actions for the ayat
|
||||
- randomize another ayat
|
||||
|
||||
## Notifications
|
||||
|
||||
The app has a dedicated notification center.
|
||||
|
||||
Tabs:
|
||||
|
||||
- Alarm
|
||||
- Pesan
|
||||
|
||||
Alarm tab features:
|
||||
|
||||
- list of scheduled adzan notifications
|
||||
- list of scheduled iqamah reminders
|
||||
- `Akan Datang` filter
|
||||
- `Sudah Lewat` filter
|
||||
- refresh action
|
||||
|
||||
Pesan tab features:
|
||||
|
||||
- inbox-style message list
|
||||
- read/unread state
|
||||
- mark all as read
|
||||
- system and non-prayer message support
|
||||
|
||||
## Adzan and reminders
|
||||
|
||||
The app schedules local notifications based on the selected city and prayer times.
|
||||
|
||||
Supported reminders:
|
||||
|
||||
- adzan
|
||||
- iqamah
|
||||
- checklist reminder
|
||||
- other non-prayer habit/system reminders
|
||||
|
||||
Implementation highlights:
|
||||
|
||||
- local timezone-aware scheduling
|
||||
- exact alarm support on Android where available
|
||||
- permission handling for notification and exact alarm access
|
||||
- per-prayer enable/disable behavior
|
||||
|
||||
## Settings and personalization
|
||||
|
||||
The app includes a broad settings screen.
|
||||
|
||||
Sections include:
|
||||
|
||||
- Preferensi
|
||||
- Pemberitahuan
|
||||
- Checklist Ibadah
|
||||
- Tampilan Dzikir
|
||||
- Waktu Sholat
|
||||
- Tampilan
|
||||
- Tentang
|
||||
|
||||
Key settings:
|
||||
|
||||
- mode lengkap / mode simpel
|
||||
- light mode / dark mode
|
||||
- city selection
|
||||
- prayer calculation method
|
||||
- iqamah offset per prayer
|
||||
- adzan notification toggle
|
||||
- global alert toggle
|
||||
- inbox/message toggle
|
||||
- quiet hours
|
||||
- maximum non-prayer pushes per day
|
||||
- checklist reminder time
|
||||
- rawatib level
|
||||
- tilawah target
|
||||
- dzikir and puasa tracking toggles
|
||||
- Arabic font size
|
||||
- profile editing
|
||||
- data reset
|
||||
|
||||
## Visual and UX features
|
||||
|
||||
The app also includes a number of presentation-focused improvements:
|
||||
|
||||
- custom bottom navigation with premium gold active state
|
||||
- hidden theme toggle revealed by sliding the bottom bar
|
||||
- HugeIcons-based icon system
|
||||
- dark and light mode support
|
||||
- adaptive Arabic typography
|
||||
- reusable share card generation for ayat
|
||||
- route-aware bottom bar visibility in focus-heavy screens
|
||||
|
||||
## Data and persistence
|
||||
|
||||
The app stores user state locally for continuity.
|
||||
|
||||
Persisted examples:
|
||||
|
||||
- settings
|
||||
- worship logs
|
||||
- dzikir progress
|
||||
- tilawah progress
|
||||
- Qur'an last read
|
||||
- Qur'an favorites
|
||||
- notification inbox state
|
||||
|
||||
## In short
|
||||
|
||||
JamShalat is not only a prayer-time app. It is a daily Islamic companion that combines:
|
||||
|
||||
- prayer schedule
|
||||
- adzan and iqamah reminders
|
||||
- qibla finder
|
||||
- Qur'an reading and murattal
|
||||
- dzikir, doa, and hadith references
|
||||
- worship checklist and reporting
|
||||
- personal spiritual continuity through bookmarks, reminders, and progress tracking
|
||||
@@ -2,7 +2,7 @@
|
||||
|
||||
Last updated: 2026-03-16
|
||||
Owner: Product + Mobile
|
||||
Scope: `jamshalat_diary` (Flutter)
|
||||
Scope: `JamShalat` (Flutter)
|
||||
|
||||
## Implementation Status (2026-03-17)
|
||||
- Phase 1: Implemented.
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
# Jamshalat Diary — Handoff Document
|
||||
# JamShalat — Handoff Document
|
||||
|
||||
> Last updated: 2026-03-15
|
||||
|
||||
|
||||
@@ -372,7 +372,7 @@
|
||||
"$(inherited)",
|
||||
"@executable_path/Frameworks",
|
||||
);
|
||||
PRODUCT_BUNDLE_IDENTIFIER = com.jamshalat.jamshalatDiary;
|
||||
PRODUCT_BUNDLE_IDENTIFIER = com.jamshalat.app;
|
||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||
SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h";
|
||||
SWIFT_VERSION = 5.0;
|
||||
@@ -388,7 +388,7 @@
|
||||
CURRENT_PROJECT_VERSION = 1;
|
||||
GENERATE_INFOPLIST_FILE = YES;
|
||||
MARKETING_VERSION = 1.0;
|
||||
PRODUCT_BUNDLE_IDENTIFIER = com.jamshalat.jamshalatDiary.RunnerTests;
|
||||
PRODUCT_BUNDLE_IDENTIFIER = com.jamshalat.app.RunnerTests;
|
||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||
SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG;
|
||||
SWIFT_OPTIMIZATION_LEVEL = "-Onone";
|
||||
@@ -405,7 +405,7 @@
|
||||
CURRENT_PROJECT_VERSION = 1;
|
||||
GENERATE_INFOPLIST_FILE = YES;
|
||||
MARKETING_VERSION = 1.0;
|
||||
PRODUCT_BUNDLE_IDENTIFIER = com.jamshalat.jamshalatDiary.RunnerTests;
|
||||
PRODUCT_BUNDLE_IDENTIFIER = com.jamshalat.app.RunnerTests;
|
||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||
SWIFT_VERSION = 5.0;
|
||||
TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Runner.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/Runner";
|
||||
@@ -420,7 +420,7 @@
|
||||
CURRENT_PROJECT_VERSION = 1;
|
||||
GENERATE_INFOPLIST_FILE = YES;
|
||||
MARKETING_VERSION = 1.0;
|
||||
PRODUCT_BUNDLE_IDENTIFIER = com.jamshalat.jamshalatDiary.RunnerTests;
|
||||
PRODUCT_BUNDLE_IDENTIFIER = com.jamshalat.app.RunnerTests;
|
||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||
SWIFT_VERSION = 5.0;
|
||||
TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Runner.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/Runner";
|
||||
@@ -551,7 +551,7 @@
|
||||
"$(inherited)",
|
||||
"@executable_path/Frameworks",
|
||||
);
|
||||
PRODUCT_BUNDLE_IDENTIFIER = com.jamshalat.jamshalatDiary;
|
||||
PRODUCT_BUNDLE_IDENTIFIER = com.jamshalat.app;
|
||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||
SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h";
|
||||
SWIFT_OPTIMIZATION_LEVEL = "-Onone";
|
||||
@@ -573,7 +573,7 @@
|
||||
"$(inherited)",
|
||||
"@executable_path/Frameworks",
|
||||
);
|
||||
PRODUCT_BUNDLE_IDENTIFIER = com.jamshalat.jamshalatDiary;
|
||||
PRODUCT_BUNDLE_IDENTIFIER = com.jamshalat.app;
|
||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||
SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h";
|
||||
SWIFT_VERSION = 5.0;
|
||||
|
||||
|
Before Width: | Height: | Size: 11 KiB After Width: | Height: | Size: 72 KiB |
|
Before Width: | Height: | Size: 295 B After Width: | Height: | Size: 949 B |
|
Before Width: | Height: | Size: 406 B After Width: | Height: | Size: 2.0 KiB |
|
Before Width: | Height: | Size: 450 B After Width: | Height: | Size: 3.3 KiB |
|
Before Width: | Height: | Size: 282 B After Width: | Height: | Size: 1.4 KiB |
|
Before Width: | Height: | Size: 462 B After Width: | Height: | Size: 3.2 KiB |
|
Before Width: | Height: | Size: 704 B After Width: | Height: | Size: 5.2 KiB |
|
Before Width: | Height: | Size: 406 B After Width: | Height: | Size: 2.0 KiB |
|
Before Width: | Height: | Size: 586 B After Width: | Height: | Size: 4.6 KiB |
|
Before Width: | Height: | Size: 862 B After Width: | Height: | Size: 7.6 KiB |
|
Before Width: | Height: | Size: 862 B After Width: | Height: | Size: 7.6 KiB |
|
Before Width: | Height: | Size: 1.6 KiB After Width: | Height: | Size: 13 KiB |
|
Before Width: | Height: | Size: 762 B After Width: | Height: | Size: 4.5 KiB |
|
Before Width: | Height: | Size: 1.2 KiB After Width: | Height: | Size: 10 KiB |
|
Before Width: | Height: | Size: 1.4 KiB After Width: | Height: | Size: 12 KiB |
@@ -7,7 +7,7 @@
|
||||
<key>CFBundleDevelopmentRegion</key>
|
||||
<string>$(DEVELOPMENT_LANGUAGE)</string>
|
||||
<key>CFBundleDisplayName</key>
|
||||
<string>Jamshalat Diary</string>
|
||||
<string>JamShalat</string>
|
||||
<key>CFBundleExecutable</key>
|
||||
<string>$(EXECUTABLE_NAME)</string>
|
||||
<key>CFBundleIdentifier</key>
|
||||
@@ -15,7 +15,7 @@
|
||||
<key>CFBundleInfoDictionaryVersion</key>
|
||||
<string>6.0</string>
|
||||
<key>CFBundleName</key>
|
||||
<string>jamshalat_diary</string>
|
||||
<string>JamShalat</string>
|
||||
<key>CFBundlePackageType</key>
|
||||
<string>APPL</string>
|
||||
<key>CFBundleShortVersionString</key>
|
||||
|
||||
@@ -78,7 +78,7 @@ class _AppState extends ConsumerState<App> with WidgetsBindingObserver {
|
||||
final themeMode = ref.watch(themeProvider);
|
||||
|
||||
return MaterialApp.router(
|
||||
title: 'Jamshalat Diary',
|
||||
title: 'JamShalat',
|
||||
debugShowCheckedModeBanner: false,
|
||||
theme: AppTheme.light,
|
||||
darkTheme: AppTheme.dark,
|
||||
|
||||
@@ -24,7 +24,7 @@ String buildAyatShareText(Map<String, dynamic> ayat) {
|
||||
if (arabic.isNotEmpty) arabic,
|
||||
if (translation.isNotEmpty) '"$translation"',
|
||||
reference,
|
||||
'Dibagikan dari Jam Shalat Diary',
|
||||
'Dibagikan dari JamShalat',
|
||||
];
|
||||
|
||||
return parts.join('\n\n');
|
||||
@@ -447,7 +447,7 @@ class _AyatShareCard extends StatelessWidget {
|
||||
borderRadius: BorderRadius.circular(999),
|
||||
),
|
||||
child: const Text(
|
||||
'Jam Shalat Diary',
|
||||
'JamShalat',
|
||||
style: TextStyle(
|
||||
fontSize: 12,
|
||||
fontWeight: FontWeight.w700,
|
||||
|
||||
@@ -20,7 +20,7 @@ class QiblaScreen extends ConsumerStatefulWidget {
|
||||
|
||||
class _QiblaScreenState extends ConsumerState<QiblaScreen> {
|
||||
static const _geomagneticChannel =
|
||||
MethodChannel('com.jamshalat.diary/geomagnetic');
|
||||
MethodChannel('com.jamshalat.app/geomagnetic');
|
||||
static const double _alignmentThreshold = 3.0;
|
||||
|
||||
// Fallback simulated data for environments without compass hardware (like macOS emulator)
|
||||
|
||||
@@ -919,7 +919,7 @@ class _QuranMurattalScreenState extends ConsumerState<QuranMurattalScreen>
|
||||
final url = _unsplashPhoto!['photographerUrl'];
|
||||
if (url != null && url.isNotEmpty) {
|
||||
launchUrl(Uri.parse(
|
||||
'$url?utm_source=jamshalat_diary&utm_medium=referral'));
|
||||
'$url?utm_source=jamshalat&utm_medium=referral'));
|
||||
}
|
||||
},
|
||||
child: Text(
|
||||
|
||||
@@ -47,7 +47,7 @@ void main() async {
|
||||
));
|
||||
|
||||
await JustAudioBackground.init(
|
||||
androidNotificationChannelId: 'com.jamshalat.diary.audio',
|
||||
androidNotificationChannelId: 'com.jamshalat.app.audio',
|
||||
androidNotificationChannelName: 'Murattal Playback',
|
||||
androidNotificationOngoing: true,
|
||||
);
|
||||
|
||||
@@ -479,7 +479,7 @@
|
||||
CURRENT_PROJECT_VERSION = 1;
|
||||
GENERATE_INFOPLIST_FILE = YES;
|
||||
MARKETING_VERSION = 1.0;
|
||||
PRODUCT_BUNDLE_IDENTIFIER = com.jamshalat.jamshalatDiary.RunnerTests;
|
||||
PRODUCT_BUNDLE_IDENTIFIER = com.jamshalat.app.RunnerTests;
|
||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||
SWIFT_VERSION = 5.0;
|
||||
TEST_HOST = "$(BUILT_PRODUCTS_DIR)/jamshalat_diary.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/jamshalat_diary";
|
||||
@@ -494,7 +494,7 @@
|
||||
CURRENT_PROJECT_VERSION = 1;
|
||||
GENERATE_INFOPLIST_FILE = YES;
|
||||
MARKETING_VERSION = 1.0;
|
||||
PRODUCT_BUNDLE_IDENTIFIER = com.jamshalat.jamshalatDiary.RunnerTests;
|
||||
PRODUCT_BUNDLE_IDENTIFIER = com.jamshalat.app.RunnerTests;
|
||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||
SWIFT_VERSION = 5.0;
|
||||
TEST_HOST = "$(BUILT_PRODUCTS_DIR)/jamshalat_diary.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/jamshalat_diary";
|
||||
@@ -509,7 +509,7 @@
|
||||
CURRENT_PROJECT_VERSION = 1;
|
||||
GENERATE_INFOPLIST_FILE = YES;
|
||||
MARKETING_VERSION = 1.0;
|
||||
PRODUCT_BUNDLE_IDENTIFIER = com.jamshalat.jamshalatDiary.RunnerTests;
|
||||
PRODUCT_BUNDLE_IDENTIFIER = com.jamshalat.app.RunnerTests;
|
||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||
SWIFT_VERSION = 5.0;
|
||||
TEST_HOST = "$(BUILT_PRODUCTS_DIR)/jamshalat_diary.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/jamshalat_diary";
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
PRODUCT_NAME = jamshalat_diary
|
||||
|
||||
// The application's bundle identifier
|
||||
PRODUCT_BUNDLE_IDENTIFIER = com.jamshalat.jamshalatDiary
|
||||
PRODUCT_BUNDLE_IDENTIFIER = com.jamshalat.app
|
||||
|
||||
// The copyright displayed in application information
|
||||
PRODUCT_COPYRIGHT = Copyright © 2026 com.jamshalat. All rights reserved.
|
||||
|
||||
@@ -6,6 +6,8 @@
|
||||
<string>$(DEVELOPMENT_LANGUAGE)</string>
|
||||
<key>CFBundleExecutable</key>
|
||||
<string>$(EXECUTABLE_NAME)</string>
|
||||
<key>CFBundleDisplayName</key>
|
||||
<string>JamShalat</string>
|
||||
<key>CFBundleIconFile</key>
|
||||
<string></string>
|
||||
<key>CFBundleIdentifier</key>
|
||||
@@ -13,7 +15,7 @@
|
||||
<key>CFBundleInfoDictionaryVersion</key>
|
||||
<string>6.0</string>
|
||||
<key>CFBundleName</key>
|
||||
<string>$(PRODUCT_NAME)</string>
|
||||
<string>JamShalat</string>
|
||||
<key>CFBundlePackageType</key>
|
||||
<string>APPL</string>
|
||||
<key>CFBundleShortVersionString</key>
|
||||
|
||||
@@ -18,18 +18,18 @@
|
||||
|
||||
<meta charset="UTF-8">
|
||||
<meta content="IE=Edge" http-equiv="X-UA-Compatible">
|
||||
<meta name="description" content="A new Flutter project.">
|
||||
<meta name="description" content="JamShalat Muslim daily worship companion.">
|
||||
|
||||
<!-- iOS meta tags & icons -->
|
||||
<meta name="mobile-web-app-capable" content="yes">
|
||||
<meta name="apple-mobile-web-app-status-bar-style" content="black">
|
||||
<meta name="apple-mobile-web-app-title" content="jamshalat_diary">
|
||||
<meta name="apple-mobile-web-app-title" content="JamShalat">
|
||||
<link rel="apple-touch-icon" href="icons/Icon-192.png">
|
||||
|
||||
<!-- Favicon -->
|
||||
<link rel="icon" type="image/png" href="favicon.png"/>
|
||||
|
||||
<title>jamshalat_diary</title>
|
||||
<title>JamShalat</title>
|
||||
<link rel="manifest" href="manifest.json">
|
||||
</head>
|
||||
<body>
|
||||
|
||||
@@ -1,11 +1,11 @@
|
||||
{
|
||||
"name": "jamshalat_diary",
|
||||
"short_name": "jamshalat_diary",
|
||||
"name": "JamShalat",
|
||||
"short_name": "JamShalat",
|
||||
"start_url": ".",
|
||||
"display": "standalone",
|
||||
"background_color": "#0175C2",
|
||||
"theme_color": "#0175C2",
|
||||
"description": "A new Flutter project.",
|
||||
"description": "JamShalat Muslim daily worship companion.",
|
||||
"orientation": "portrait-primary",
|
||||
"prefer_related_applications": false,
|
||||
"icons": [
|
||||
|
||||