Browse Source

feat: allow resigning current NSUserActivity (#18659)

* feat: allow resigning current NSUserActivity

* wrap in @available check
Shelley Vohr 5 years ago
parent
commit
abab90f563

+ 2 - 0
atom/browser/api/atom_api_app.cc

@@ -1417,6 +1417,8 @@ void App::BuildPrototype(v8::Isolate* isolate,
       .SetMethod(
           "invalidateCurrentActivity",
           base::BindRepeating(&Browser::InvalidateCurrentActivity, browser))
+      .SetMethod("resignCurrentActivity",
+                 base::BindRepeating(&Browser::ResignCurrentActivity, browser))
       .SetMethod("updateCurrentActivity",
                  base::BindRepeating(&Browser::UpdateCurrentActivity, browser))
       // TODO(juturu): Remove in 2.0, deprecate before then with warnings

+ 5 - 1
atom/browser/browser.h

@@ -128,9 +128,13 @@ class Browser : public WindowListObserver {
   // Returns the type name of the current user activity.
   std::string GetCurrentActivityType();
 
-  // Invalidates the current user activity.
+  // Invalidates an activity and marks it as no longer eligible for
+  // continuation
   void InvalidateCurrentActivity();
 
+  // Marks this activity object as inactive without invalidating it.
+  void ResignCurrentActivity();
+
   // Updates the current user activity
   void UpdateCurrentActivity(const std::string& type,
                              const base::DictionaryValue& user_info);

+ 4 - 0
atom/browser/browser_mac.mm

@@ -161,6 +161,10 @@ void Browser::InvalidateCurrentActivity() {
   [[AtomApplication sharedApplication] invalidateCurrentActivity];
 }
 
+void Browser::ResignCurrentActivity() {
+  [[AtomApplication sharedApplication] resignCurrentActivity];
+}
+
 void Browser::UpdateCurrentActivity(const std::string& type,
                                     const base::DictionaryValue& user_info) {
   [[AtomApplication sharedApplication]

+ 1 - 0
atom/browser/mac/atom_application.h

@@ -132,6 +132,7 @@ typedef NS_ENUM(NSInteger, AVAuthorizationStatusMac) {
               withUserInfo:(NSDictionary*)userInfo
             withWebpageURL:(NSURL*)webpageURL;
 - (void)invalidateCurrentActivity;
+- (void)resignCurrentActivity;
 - (void)updateCurrentActivity:(NSString*)type
                  withUserInfo:(NSDictionary*)userInfo;
 

+ 7 - 0
atom/browser/mac/atom_application.mm

@@ -93,6 +93,13 @@ inline void dispatch_sync_main(dispatch_block_t block) {
   }
 }
 
+- (void)resignCurrentActivity {
+  if (@available(macOS 10.11, *)) {
+    if (currentActivity_)
+      [currentActivity_ resignCurrent];
+  }
+}
+
 - (void)updateCurrentActivity:(NSString*)type
                  withUserInfo:(NSDictionary*)userInfo {
   if (currentActivity_) {

+ 4 - 3
docs/api/app.md

@@ -964,11 +964,12 @@ Returns `String` - The type of the currently running activity.
 
 ### `app.invalidateCurrentActivity()` _macOS_
 
-* `type` String - Uniquely identifies the activity. Maps to
-  [`NSUserActivity.activityType`][activity-type].
-
 Invalidates the current [Handoff][handoff] user activity.
 
+### `app.resignCurrentActivity()` _macOS_
+
+Marks the current [Handoff][handoff] user activity as inactive without invalidating it.
+
 ### `app.updateCurrentActivity(type, userInfo)` _macOS_
 
 * `type` String - Uniquely identifies the activity. Maps to