Enhance UX for azan notification, particularly on Android 13+ since they require granting runtime notification permission.
This includes display permission dialog before actually asking the permission so that user aware why they need to grant that permission. Also, the app now checks on the app
startup the permission status, it will prompt the user to grant the permission (like this). PR #230.
This part is a bit technical, in this update I'm also changing the method to schedule notification/azan to alarmClock(previously using setExactAndAllowWhileIdle). This is an attempt to fix various issue
regarding the notificaion/azan such as it did not goes off, delayed etc. This implementation may be temporary.
Version 2.12.2 19 February 2024 | 9 Syaa'ban 1445Open in GitHub
Fix app crashes on launch on Android 14+ devices if the homescreen widget was added. The crashed are caused because the app are trying
to schedule the widget update using setExact alarm when the required permission is not granted by the user. Issue #228
Improved accuracy when detecting prayer zone - now using pre-defined zone definition instead of just calculating the nearest point of the prayer time zone to the user location. For more details, please see issue #188
Current active prayer time is now highlighted in the prayer time list. For example, if the current time is 2:12 PM, the Zohor prayer time will be highlighted in the prayer time list.
Revamped design to Material You (or Material 3). Feel more rounded corners, improved designs and clean UIs.
The app themes now matched the phone's theme colours (usually derived from the wallpaper) for supported phones only.
Increase default text size for prayer time text to 16.
Relocate the Ads widget to the to the top. So that the location of floating action button and snackbar are restored.
Update copyright year to 2023Yeah, I know it's pretty late..
Request notification permission on onboarding screen (for Android 13+ only). Previously, the app notification would be requested on the second app launches, so user wouldn't received the scheduled notification after the first launch.
Bump targetSdkVersion to 33
Upgrade dependencies
Skip Autostart banner for Samsung devices because it was found unnnecessary. User couldn't even change the app settings.
Added new notification option: Short Azan. This notification will only play the first "Allahu Akbar x2" of the azan. Maqam Lamy by Mishary Rashid Al-Afasy #158
Added azan preview in notification settings. User can now quickly fire notification to hear how they sounds like.
Minor UI tweak when asking user to restart app after modify the notification setting. [Screenshot]
Updated location based on new JAKIM's location. Added NGS03 and replaced KTN03 to KTN02. #164
Update copyright year (2023)
Make banner ads no longer inside a scroll view. This is to comply to the Google's policy. But, the share button is no longer can be docked on the bottom navigation bar :( #168. [Screenshot]
DEV:
Renamed some filenames to follow Dart naming convention
In full prayer timetable, the background image will show a mosque according to user's current zone. [Screenshot]
Display detected geocoding as subLocality as it is appear to be more specific to the location. For example, app show Pusat Bandar Wangsa Maju instead of generic Kuala Lumpur. [Screenshot]
Add shake widget on onboarding screen for Autostart adomnition (not all phones) to alert the users to enable it. [Video]
MPT-Server API will now used as primary API to prayer time data, backed up with JAKIM API.
Add keybaord autofill hints in email field in feedback page. [Screenshot]
Added firebase_crashlytics - to understand the crashes and hopefully be able to mitigate it.
flutterfire configured
In update available page, the phrase Released 0 days ago is changed to Released today.
Updated short links.
Change word Frequently Asked Question to Documentation. Since it's no longer points to a faq page in previous releases ago.Screenshot
Provide a better error message when getting user's zone is few place where the negeri couldn't be detected. From my triage, it happen when I put the user on the water (sea). #130
Fixed incorrect tooltip text on menu button. Screenshot
Fixed error Converting object to an encodable object failed: Instance of 'Duration' when user submitting feedback.
Being more transparent to the user i.e. disclosed all data that being shared to developer when user sending the feedback. Includes option to hide sensitive data eg: GPS coordinate. Screenshot
[Dev] Added ability to hide ads for 10 minutes. Accessible from debug dialog.
Added auto_start_flutter. To detect if the app support Autostart, and prompt the user to disable the setting. This should cover various notification issues such as #89, #106, #108 etc.
Add prompt to enable Autostart in onboarding screen (Screenshot)
Display status if device have no autostart setting in notification troubleshoot page. (Screenshot)
Fixed notification not getting rescheduled when changing location. #104. Also fixed other notification issues #105 that came with (probably) February Update.
What's New dialog no longer show detailed changelog. Instead, it will only provide link to this changelog page only. Screenshot
However, I'll keep the remote config maintained for a few months (for user that didn't update the app yet).
In addition, hijri date column has been added to the full prayer timetable page.
Also added new setting dialog in full timetable page. Currently there's only an option to hide/unhide the hijri column. Watch video.
Added timeout to JAKIM api request. This is to prevent the app loading indefinitely because sometimes JAKIM server didn't return any response in case of error.
Build with Flutter 2.8, which claims to have performance improvements in reduction in startup latency of 50% when running on a low-end Android device, and a 10% improvement on high-end devices.
Remove location migration code.
Added updates available page. https://imgur.com/a/2FXDNYL
Upgrade dependencies including few major. Commit ref 215d46a
Code related changes
Change describeEnum to byName method in Theme Setting. (New in Dart 2.15). Commit ref 7db2ffd
Upgrade flutter_local_notifications to version 9.1.4. Mainly to address a fix to java.util.concurrent.RejectedExecutionException crashes which impacted previous release. More info of this issue can be found here.
Fixed time from API is being wrongly parsed as 12-Hour system (supposedly 24-Hour system), causing wrong time shown for some zones (especially Zohor time in Sabah). Issue #85. Thank you, anonymous user for alerting me about this issue. (Yes, this is repeated issue similar to this update back then 🤦♂️)
Minor UI change manual location chooser - cleaner header textstyle.
Temporary disable Salam Jumaat wish (summary) in notification. Issue #81.
Using grouped_list in manual location chooser. List is now grouped by their negeri, with a minor UI change for better indication that the zone is currently selected.
Changed the way how app is saving zone to device. Previously saving location using their index (int), but it will face problem if later JAKIM want to change their zone (add/remove). So now it will save the Jakim Code (String) itself. Your saved data will be migrated automatically.
Fix wrong zone for some Sarawak district - Fix wrong mapping from JAKIM code to mpti906 location code that resulting in fetching the wrong prayer time. Affected user may need to change to other location and change back to your actual location to clear up the cache. (Thanks to some users for reporting this issue)
Fixed jankiness issue when scroll with inline banner ads. Replaces the official google_mobile_ads package with @atrope's fork.
Adjust link text colour contrast to improve readability in About page.
Added azan notification. Now there are two types of notification, default sound and azan. Existing user will be asked if they want to try. Source: Athan Alafasy - SoundCloud. Closed #39:
Both types will use different notification channel. This is required to satisfy requirement of Android 8.0+ and to maintain backward compatibility. (Syuruk will use same default notification channel regardless of the notification type)
Added option to select preferred notification in onboarding page.
Added option to change preferred notification type in Notification Settings page. (Required app restart to apply changes)
Prompt existing user to change to azan notification.
Remove skip button to skip page in Onboarding screen. (User can still swipe right)
Added summary text in notification for Syuruk and Zohor (for Jumaat).
Timestamp in notification is now showing the actual prayer time. (Not the time when the notification fired, because sometimes it get delayed). Closes #71
Added google_mobile_ads. Unobtrusive ad is now showing on the main page. Alert me if inappropriate ads is showing.
firebase_remote_config. Hijri offset data now fetched from the server (controlled by me so remind me if I forgot to update, allow up to 8 hours for the changes fully propagates), removed manual adjustment setting. Issue #54.
in_app_review. In App Review window will show after app launch count is equal to 10. Hoping to receive positive or constructive criticism after this.
flutter_lints. Applied coding best practices followed with code cleanup, and refactoring.
Added offline cache support. By default, if criteria are met (same location, same month & same year), prayer data will load data from storage (if available) instead fetching from the API.
Added fix notification prompt on main page. (Will be shown based on some condition)
Changed datatypeString to GeoPoint in Feedback page for Position field value.
Limit URL string text by one line in FAQs page.
Prompt user to provide email (so that I could reply) in Feedback page if the message sounded like a question. (Nah not an AI, just checking if the text contains question mark ?)
Main header part (that one houses date and location button, below the appbar) now adapts to its children. Means no longer overflow date/location widget.
Fix wrong coloured button in no compass error.
Upgrade dependencies.
Upgrade Gradle version to 4.1.0.
Changed minSdkVersion to 19. Drop supports Android lower than version 4.4 (KitKat).
Introducing Onboarding screen. This screen is shown when user open the app for the first time to setup few settings in app. User can 1) Set location and 2) Set preferred theme. Assets are from BAM Free 3D Illustration Kit. Package used: introduction_screen. Closes #62.
Removed Retry button when get location throw an error. Side effect of FutureBuilder implementation.
The manual location chooser will refresh regardless of if the previous value is same.
Add 10s timeout to get location method.
Changes RichText with Text.rich in ZoneChooser for Error Widget.
Refactor ZoneChooser class to be more modular so that it can be reusable by in Onboarding Screen.
[DEBUG] Add Erase all data to clear all setting. Basically, a GetStorage().erase. You can find it after enabling app's developer mode.
[CODE] Migrate from GetX to Provider for ThemeController.
[CODE] Some methods are now marked as static so no need to create a new instance of them.
[CODE] Changed StreamBuilder to FutureBuilder method for fetching prayer time. As a result, I be able to get rid that old BLoC method implemented in app. This result in creating LocationProvider to assist the operation.
Change bitly link to FDL link in copy and share message.
Remove extra space in ZoneChooser error dialog. 9bc1fb1
Snackbar after location has been selected is reduced to 1500ms. 29147d2
Reorder About Page list items. Also, added some padding to copyright information. de6adad
Adding back location position in debug dialog. Also included in Send Feedback metadata.
Add more debug toast where it is necessary.
Remove get and rxdart from pubspec.yaml (but these packages are still used by some other dependencies)
Changed content padding values in setting some AlertDialog.
email_validator. The feedback form will not send if incorrect email format is entered. However, user still can leave the email field empty.
Added Frequently Asked Questions (FAQs) page. Items are fetched from cloud database (Firestore). The page can be accessed from About Page or Send Feedback page.
Add SizedBox widget at the bottom of setting page to give it breathable space.
Bring back the copyright information in About Page.
Set addDefaultShareMenuItem to true and set colour navigationBarColor for Chrome Custom Tabs
Tell user (toast message) that they will receive a copy of their response if email address is provided.
Increase divider thickness to 2 in AboutPage.dart.
Added more apps by me link in AboutPage.dart.
Restructured text in AboutPage.dart; Added link to e-solat Jakim page and MPTi906 API website.
Temporary fix the offsetted hijri date#54, I just change the assignation for GetStorage() when app started. This will affect only for new installs, where GetStorage() object not existed yet, existing user will need to adjust the hijri date manually. Guide to change offset date can be find here.
Change colour for some elements.
Hide keyboard after press send in Send feedback option.
Change response text after submit feedback.
Share/Copy timetable now respect the offset-ed hijri day.
Feedback page redesign, user no longer use email as medium of sending the report. Now the data is sent via Firebase Firestore. The pro of this method is that user can remain anonymous, but it is recommended to provide an email address so that I can contact you for following up the issue.
Redesign a little bit in AboutPage.dart including changing font in version text, bring down the copyright legalese.
Upgrade most dependencies to null safety versions.
Fix attempt for the #56. Not sure about the issue tbh.
Fixed offset Hijri date on both web and Android (Issue #59) - Ability to adjust the offset by +-2 days.
Introduced Share to WhatsApp option. The texts will be formatted beautifully (bold, italic etc.) Default setting can be changed in Setting page. So, there are three options of sharing now. 1- Ask, 2- Plain Text, 3-WhatsApp.
Adjustable prayer time text sizes. Defaulted to size 14. Minimum is 12 and can go up to 22. Issue #8.
Add http:// to links so other apps (e.g.: WhatsApp/Telegram) can generate a link preview.
Custom fork hijri packages to make it more Malaysian friendly (Huh?). Thanks to Aqil Mohd for the idea.
Reverted to the good oldmpti906 API (yes again hahaha), no longer use JAKIM API because very often downtime and affected the user experience. Thanks to Aqil Mohd again.
Notification threshold until rescheduled reduced to two days (Previously three days).
Fixed time conversion conflict when converting 12:00 to epoch, and later affected UI view. It supposed to be converted to 12pm but it was converted to 12am (hshshhs 😆). Closes #49. Thanks to butitik.
Change notification naming convention to Malay to make it consistent with the UI, however channel name not (yet) effected. Related to #45. Thanks to Aqil Mohd.
Fixed app not responding issue. No automatic notification scheduling when open app or changing theme. It will reschedule back after 3 days on app reopening. Issue #31 solved.
Other notification improvements 🔔
Expandable when needed, ability to reveal more location text without clipping. Issue #34 solved.
Notification gets its own dedicated settings ⚙️. Including troubleshooting option if needed
Added ability to limit the notification scheduling. By default, the app will schedule notification until the end of the month. This process is sacrificing performance. UI will feel slow and unresponsive. So, this option is to set the max number of notifications the app can schedule is up to 7 days. Commit reference: df47ffa
Added force update notification kForceUpdateNotif in troubleshooting section. In case the user didn't receive any notification in app.
Secret debug setting/dialog changes
Added developer mode. Long press logo (2 times) on AboutPage to turn it on. (Inspired by Telegram on Android app)
Added option to toggle Verbose debug mode on/off. Important information will be shown in toast messages.
Added few more fields including last notification get scheduled in DateTime format.
When developer mode is already enabled, dialog will shown in the first long press.
Categorized according to category. Added padding around heading.
Added space between URL and comma in feedback page, some apps will treat the comma is part of URL. Issue #31. Reference commit 60c5e9c
Replaced toastLocation updated and saved response with Snackbar. (Interfered with some verbose debug features)
Fixed all imports. ~20 imports changed to relative path. Thanks to this dart-import extension. Commit reference af1fd4e
ScaffoldMessenger.of(context) to fix Scaffold showSnackBar deprecated.
Changed theme app mockup images. Firebase link changed. Using Pixel 3a device emulator is kinda cool.
Added Firebase analytics to Android dependencies. Use for analytics purposes. We do not collect any personal data from the users. Commit reference c8f8072
Added JAKIM e-solat link, accessible at Setting/About, the green banner. Clickable.
App title in About page changed to MPT 2021 (yeaa happy new year to you too). Copyright text format also fixed.
Improved keyword grammatical mistakes in few, random Setting locations.
Correctly implements Share the app. Share functionality is now working. Accessible at - Setting/About/Contribution and Support. Commit reference 18a6a19#r46369728
Added flutter_web_browser. Some of the link now open in custom tabs, speedy and better experiences.
Daily notification now run isolated from the main thread. This made possible by isolate_handler plugin, and also this gist. #31
However, there still a few noticeable slowdowns but it not as severe as the previous release (except when you change theme). Users at least can now change settings (am/pm or show other prayer time) without triggering the notification scheduler again.
App will remind users at 00:05 on the first day of the month to open the app for scheduling notification. (As the API only provide prayer data for the current month, notification scheduling for the next month can't be done.)
Added Imsak, Syuruk and Dhuha time - (Imsak is 10 min before Fajr, Dhuha is 28 min after syuruk). Users need to enable them manually in setting).
Security improvement. API call now using https protocol. Thanks to https://mpt.i906.my/ API. Besides, the app no longer use android:usesCleartextTraffic="true" flag in Android Manifest.
Fixed 503 error on getting prayer time. (This caused by previous API)
Fixed slightly wrong location in Kelantan.
Added provider - Users no longer need to restart the app to apply settings.
Added auto_size_text - Using smaller date widget, it caused overflowed on devices in small screen.
Release notes page now open in browser.
Update some dependencies.
Code clean-up (Delete unused file from the older API implementation etc.)