Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
43 commits
Select commit Hold shift + click to select a range
9bd4254
Refactor background push and task handling
prateekmedia Mar 13, 2026
7828885
Allow runWithLogs to rethrow
prateekmedia Mar 13, 2026
e7e0dd3
Focus background task on iOS
prateekmedia Mar 13, 2026
abb85d7
Add iOS upload grace window and BGProcessing handoff
prateekmedia Mar 17, 2026
dc494c8
Fix iOS upload handoff lifecycle and reconciliation
prateekmedia Mar 17, 2026
0f271f8
Merge remote-tracking branch 'upstream/main' into prtk/bg-patches
prateekmedia Mar 17, 2026
74a8c10
Add iOS expiration handling to the Workmanager fork
prateekmedia Mar 17, 2026
5ef5f7d
Pin workmanager_apple to the expiration-handler fork commit
prateekmedia Mar 18, 2026
d0df452
Remove FileUploader test-only hooks and test
prateekmedia Mar 18, 2026
997e16f
Merge remote-tracking branch 'upstream/main' into prtk/bg-patches
prateekmedia Mar 18, 2026
3343deb
Remove weak app lifecycle service test
prateekmedia Mar 18, 2026
4c6dc1c
Refactor background flag bootstrap
prateekmedia Mar 18, 2026
58f1907
Reuse prefs in bootstrap helper
prateekmedia Mar 18, 2026
3a3c8f8
Fix grace window plugin homepage
prateekmedia Mar 18, 2026
419cb52
Fix grace window plugin license
prateekmedia Mar 18, 2026
fe9d34c
Capture lock-release cutoff before awaits to prevent race
prateekmedia Mar 18, 2026
c672f50
[mob][photos] Harden iOS upload grace window expiration handling
prateekmedia Mar 18, 2026
9cc534d
[mob][photos] Add iOS local availability debug check
prateekmedia Mar 18, 2026
a8ec6e0
Align iOS and Android background task initial delays
prateekmedia Mar 20, 2026
608278c
Gate iOS background handoff behind feature flag
prateekmedia Mar 23, 2026
db50908
Merge upstream/main into prtk/bg-patches
prateekmedia Mar 23, 2026
86ccae8
Remove iOS local availability debug action
prateekmedia Mar 23, 2026
e76d801
Refactor iOS background handoff for reviewability
prateekmedia Mar 23, 2026
c86abb8
Simplify iOS background handoff gating
prateekmedia Mar 23, 2026
db4f0cb
Gate iOS grace window separately
prateekmedia Mar 23, 2026
8d25150
Fix iOS background handoff follow-up issues
prateekmedia Mar 23, 2026
3e79a37
Split grace window into separate branch
prateekmedia Mar 23, 2026
09ee2d5
Fix local analyzer issues on bg handoff branch
prateekmedia Mar 23, 2026
c71eea4
Add iOS upload grace window and BGProcessing handoff
prateekmedia Mar 23, 2026
c37d1de
Flatten background handoff abstractions
prateekmedia Mar 24, 2026
ea0d1cc
Finish background handoff simplification
prateekmedia Mar 24, 2026
6f163ca
Flatten upload grace window coordinator
prateekmedia Mar 24, 2026
9c6af7d
Restore conservative remote push gating
prateekmedia Mar 24, 2026
80788ec
Merge remote-tracking branch 'upstream/main' into prtk/bg-grace-window
prateekmedia Mar 24, 2026
a4ce568
Merge upstream/main into prtk/bg-patches
prateekmedia Mar 24, 2026
c882f8a
Point workmanager_apple to ente-io fork
prateekmedia Mar 26, 2026
c19e5f5
Fix analyzer nits after dependency refresh
prateekmedia Mar 26, 2026
d7cd73a
Merge remote-tracking branch 'upstream/main' into prtk/bg-grace-window
prateekmedia Mar 26, 2026
843c58d
Merge upstream/main into prtk/bg-patches
prateekmedia Mar 26, 2026
4bec369
Merge branch 'prtk/bg-patches' into prtk/bg-grace-window
prateekmedia Mar 26, 2026
ec7ed51
Fix grace branch analyzer nits
prateekmedia Mar 26, 2026
6e16500
Remove unused background import
prateekmedia Mar 26, 2026
177b70a
Merge branch 'prtk/bg-patches' into prtk/bg-grace-window
prateekmedia Mar 26, 2026
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
6 changes: 6 additions & 0 deletions mobile/apps/photos/ios/Podfile.lock
Original file line number Diff line number Diff line change
Expand Up @@ -116,6 +116,8 @@ PODS:
- GoogleUtilities/UserDefaults (8.1.0):
- GoogleUtilities/Logger
- GoogleUtilities/Privacy
- grace_window_ios (1.0.0):
- Flutter
- home_widget (0.0.1):
- Flutter
- in_app_purchase_storekit (0.0.1):
Expand Down Expand Up @@ -292,6 +294,7 @@ DEPENDENCIES:
- flutter_sodium (from `.symlinks/plugins/flutter_sodium/ios`)
- flutter_timezone (from `.symlinks/plugins/flutter_timezone/ios`)
- fluttertoast (from `.symlinks/plugins/fluttertoast/ios`)
- grace_window_ios (from `.symlinks/plugins/grace_window_ios/ios`)
- home_widget (from `.symlinks/plugins/home_widget/ios`)
- in_app_purchase_storekit (from `.symlinks/plugins/in_app_purchase_storekit/darwin`)
- integration_test (from `.symlinks/plugins/integration_test/ios`)
Expand Down Expand Up @@ -409,6 +412,8 @@ EXTERNAL SOURCES:
:path: ".symlinks/plugins/flutter_timezone/ios"
fluttertoast:
:path: ".symlinks/plugins/fluttertoast/ios"
grace_window_ios:
:path: ".symlinks/plugins/grace_window_ios/ios"
home_widget:
:path: ".symlinks/plugins/home_widget/ios"
in_app_purchase_storekit:
Expand Down Expand Up @@ -525,6 +530,7 @@ SPEC CHECKSUMS:
fluttertoast: 2c67e14dce98bbdb200df9e1acf610d7a6264ea1
GoogleDataTransport: aae35b7ea0c09004c3797d53c8c41f66f219d6a7
GoogleUtilities: 00c88b9a86066ef77f0da2fab05f65d7768ed8e1
grace_window_ios: b98b82feaabeee818af7b7e0e3ff49b2acd7942a
home_widget: f169fc41fd807b4d46ab6615dc44d62adbf9f64f
in_app_purchase_storekit: d1a48cb0f8b29dbf5f85f782f5dd79b21b90a5e6
integration_test: 4a889634ef21a45d28d50d622cf412dc6d9f586e
Expand Down
2 changes: 2 additions & 0 deletions mobile/apps/photos/ios/Runner.xcodeproj/project.pbxproj
Original file line number Diff line number Diff line change
Expand Up @@ -650,6 +650,7 @@
"${BUILT_PRODUCTS_DIR}/flutter_sodium/flutter_sodium.framework",
"${BUILT_PRODUCTS_DIR}/flutter_timezone/flutter_timezone.framework",
"${BUILT_PRODUCTS_DIR}/fluttertoast/fluttertoast.framework",
"${BUILT_PRODUCTS_DIR}/grace_window_ios/grace_window_ios.framework",
"${BUILT_PRODUCTS_DIR}/home_widget/home_widget.framework",
"${BUILT_PRODUCTS_DIR}/in_app_purchase_storekit/in_app_purchase_storekit.framework",
"${BUILT_PRODUCTS_DIR}/integration_test/integration_test.framework",
Expand Down Expand Up @@ -754,6 +755,7 @@
"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/flutter_sodium.framework",
"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/flutter_timezone.framework",
"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/fluttertoast.framework",
"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/grace_window_ios.framework",
"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/home_widget.framework",
"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/in_app_purchase_storekit.framework",
"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/integration_test.framework",
Expand Down
14 changes: 10 additions & 4 deletions mobile/apps/photos/ios/Runner/AppDelegate.swift
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,10 @@ import workmanager_apple

@main
@objc class AppDelegate: FlutterAppDelegate {
private static let backgroundAppRefreshIdentifier =
"io.ente.frame.iOSBackgroundAppRefresh"
private static let backgroundProcessingIdentifier =
"io.ente.frame.iOSBackgroundProcessing"
private static let workmanagerDebugThreadIdentifier =
"io.ente.frame.workmanager.debug"

Expand Down Expand Up @@ -35,11 +39,13 @@ import workmanager_apple
WorkmanagerPlugin.setPluginRegistrantCallback { registry in
GeneratedPluginRegistrant.register(with: registry)
}
var freqInMinutes = 30 * 60
// Register a periodic task in iOS 13+
let refreshFrequencyInSeconds = 15 * 60
// Keep native task registration in AppDelegate; Dart owns actual scheduling.
WorkmanagerPlugin.registerPeriodicTask(
withIdentifier: "io.ente.frame.iOSBackgroundAppRefresh",
frequency: NSNumber(value: freqInMinutes))
withIdentifier: Self.backgroundAppRefreshIdentifier,
frequency: NSNumber(value: refreshFrequencyInSeconds))
WorkmanagerPlugin.registerBGProcessingTask(
withIdentifier: Self.backgroundProcessingIdentifier)

// Retrieve the link from parameters
if let url = AppLinks.shared.getLink(launchOptions: launchOptions) {
Expand Down
1 change: 1 addition & 0 deletions mobile/apps/photos/ios/Runner/Info.plist
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
<key>BGTaskSchedulerPermittedIdentifiers</key>
<array>
<string>io.ente.frame.iOSBackgroundAppRefresh</string>
<string>io.ente.frame.iOSBackgroundProcessing</string>
</array>
<key>CFBundleDevelopmentRegion</key>
<string>$(DEVELOPMENT_LANGUAGE)</string>
Expand Down
8 changes: 8 additions & 0 deletions mobile/apps/photos/lib/app.dart
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@ import "package:photos/services/home_widget_service.dart";
import "package:photos/services/memory_home_widget_service.dart";
import "package:photos/services/people_home_widget_service.dart";
import 'package:photos/services/sync/sync_service.dart';
import 'package:photos/services/upload_background_coordinator.dart';
import 'package:photos/ui/tabs/home_widget.dart';
import "package:photos/ui/viewer/actions/file_viewer.dart";
import "package:photos/utils/bg_task_utils.dart";
Expand Down Expand Up @@ -193,14 +194,21 @@ class _EnteAppState extends State<EnteApp> with WidgetsBindingObserver {
@override
void didChangeAppLifecycleState(AppLifecycleState state) {
final String stateChangeReason = 'app -> $state';
final wasForeground = AppLifecycleService.instance.isForeground;
if (state == AppLifecycleState.resumed) {
final lastAppOpenTime = AppLifecycleService.instance.getLastAppOpenTime();
AppLifecycleService.instance
.onAppInForeground(stateChangeReason + ': sync now');
if (!wasForeground) {
unawaited(onUploadAppForeground());
}
unawaited(_reloadCachesUpdatedInBackground(lastAppOpenTime));
SyncService.instance.sync();
} else {
AppLifecycleService.instance.onAppInBackground(stateChangeReason);
if (wasForeground) {
unawaited(onUploadAppBackground());
}
}
}

Expand Down
Loading
Loading