| // Copyright 2023 The Chromium Authors |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #include "ui/base/idle/idle.h" |
| |
| #import <UIKit/UIKit.h> |
| |
| #include "base/notreached.h" |
| #include "ui/base/idle/idle_internal.h" |
| |
| @interface IOSScreenMonitor : NSObject |
| |
| @property(readonly, nonatomic, getter=isAppInBackground) BOOL appInBackground; |
| @property(readonly, nonatomic, getter=isDeviceLocked) BOOL deviceLocked; |
| |
| @end |
| |
| @implementation IOSScreenMonitor |
| |
| @synthesize appInBackground = _appInBackground; |
| @synthesize deviceLocked = _deviceLocked; |
| |
| - (instancetype)init { |
| if ((self = [super init])) { |
| NSNotificationCenter* defaultCenter = NSNotificationCenter.defaultCenter; |
| [defaultCenter addObserver:self |
| selector:@selector(onAppDidEnterBackground:) |
| name:UIApplicationDidEnterBackgroundNotification |
| object:nil]; |
| [defaultCenter addObserver:self |
| selector:@selector(onAppWillEnterForeground:) |
| name:UIApplicationWillEnterForegroundNotification |
| object:nil]; |
| [defaultCenter addObserver:self |
| selector:@selector(onDeviceLocked:) |
| name:UIApplicationProtectedDataWillBecomeUnavailable |
| object:nil]; |
| [defaultCenter addObserver:self |
| selector:@selector(onDeviceUnlocked:) |
| name:UIApplicationProtectedDataDidBecomeAvailable |
| object:nil]; |
| } |
| return self; |
| } |
| |
| - (void)dealloc { |
| [[NSNotificationCenter defaultCenter] removeObserver:self]; |
| } |
| |
| - (void)onAppDidEnterBackground:(NSNotification*)notification { |
| _appInBackground = YES; |
| } |
| |
| - (void)onAppWillEnterForeground:(NSNotification*)notification { |
| _appInBackground = NO; |
| } |
| |
| - (void)onDeviceLocked:(NSNotification*)notification { |
| _deviceLocked = YES; |
| } |
| |
| - (void)onDeviceUnlocked:(NSNotification*)notification { |
| _deviceLocked = NO; |
| } |
| |
| @end |
| |
| namespace ui { |
| namespace { |
| |
| static IOSScreenMonitor* g_screenMonitor = nil; |
| |
| } // namespace |
| |
| void InitIdleMonitor() { |
| if (!g_screenMonitor) { |
| g_screenMonitor = [[IOSScreenMonitor alloc] init]; |
| } |
| } |
| |
| int CalculateIdleTime() { |
| // TODO(crbug.com/40255110): Implement this. |
| NOTIMPLEMENTED(); |
| return 0; |
| } |
| |
| bool CheckIdleStateIsLocked() { |
| if (IdleStateForTesting().has_value()) { |
| return IdleStateForTesting().value() == IDLE_STATE_LOCKED; |
| } |
| |
| return g_screenMonitor.appInBackground || g_screenMonitor.deviceLocked; |
| } |
| |
| } // namespace ui |