Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat: make badgeCount a property on app #17363

Merged
merged 1 commit into from Apr 25, 2019
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
6 changes: 4 additions & 2 deletions atom/browser/api/atom_api_app.cc
Expand Up @@ -1350,13 +1350,15 @@ void App::BuildPrototype(v8::Isolate* isolate,
base::Bind(&Browser::SetAsDefaultProtocolClient, browser))
.SetMethod("removeAsDefaultProtocolClient",
base::Bind(&Browser::RemoveAsDefaultProtocolClient, browser))
.SetMethod("setBadgeCount", base::Bind(&Browser::SetBadgeCount, browser))
.SetMethod("getBadgeCount", base::Bind(&Browser::GetBadgeCount, browser))
.SetMethod("_setBadgeCount", base::Bind(&Browser::SetBadgeCount, browser))
.SetMethod("_getBadgeCount", base::Bind(&Browser::GetBadgeCount, browser))
.SetMethod("getLoginItemSettings", &App::GetLoginItemSettings)
.SetMethod("setLoginItemSettings",
base::Bind(&Browser::SetLoginItemSettings, browser))
.SetMethod("isEmojiPanelSupported",
base::Bind(&Browser::IsEmojiPanelSupported, browser))
.SetProperty("badgeCount", base::Bind(&Browser::GetBadgeCount, browser),
base::Bind(&Browser::SetBadgeCount, browser))
#if defined(OS_MACOSX)
.SetMethod("hide", base::Bind(&Browser::Hide, browser))
.SetMethod("show", base::Bind(&Browser::Show, browser))
Expand Down
24 changes: 19 additions & 5 deletions docs/api/app.md
Expand Up @@ -1064,6 +1064,7 @@ gpuDevice:
machineModelName: 'MacBookPro',
machineModelVersion: '11.5' }
```

Using `basic` should be preferred if only basic information like `vendorId` or `driverId` is needed.

### `app.setBadgeCount(count)` _Linux_ _macOS_
Expand All @@ -1080,10 +1081,14 @@ On macOS, it shows on the dock icon. On Linux, it only works for Unity launcher.
**Note:** Unity launcher requires the existence of a `.desktop` file to work,
for more information please read [Desktop Environment Integration][unity-requirement].

**[Deprecated Soon](modernization/property-updates.md)**

### `app.getBadgeCount()` _Linux_ _macOS_

Returns `Integer` - The current value displayed in the counter badge.

**[Deprecated Soon](modernization/property-updates.md)**

### `app.isUnityRunning()` _Linux_

Returns `Boolean` - Whether the current desktop environment is Unity launcher.
Expand Down Expand Up @@ -1344,11 +1349,6 @@ Sets the `image` associated with this dock icon.

## Properties

### `app.applicationMenu`

A `Menu` property that return [`Menu`](menu.md) if one has been set and `null` otherwise.
Users can pass a [Menu](menu.md) to set this property.

### `app.accessibilitySupportEnabled` _macOS_ _Windows_

A `Boolean` property that's `true` if Chrome's accessibility support is enabled, `false` otherwise. This property will be `true` if the use of assistive technologies, such as screen readers, has been detected. Setting this property to `true` manually enables Chrome's accessibility support, allowing developers to expose accessibility switch to users in application settings.
Expand All @@ -1359,6 +1359,20 @@ This API must be called after the `ready` event is emitted.

**Note:** Rendering accessibility tree can significantly affect the performance of your app. It should not be enabled by default.

### `app.applicationMenu`

A `Menu` property that return [`Menu`](menu.md) if one has been set and `null` otherwise.
Users can pass a [Menu](menu.md) to set this property.

### `app.badgeCount` _Linux_ _macOS_

An `Integer` property that returns the badge count for current app. Setting the count to `0` will hide the badge.

On macOS, setting this with any nonzero integer shows on the dock icon. On Linux, this property only works for Unity launcher.

**Note:** Unity launcher requires the existence of a `.desktop` file to work,
for more information please read [Desktop Environment Integration][unity-requirement].

### `app.isPackaged`

A `Boolean` property that returns `true` if the app is packaged, `false` otherwise. For many apps, this property can be used to distinguish development and production environments.
Expand Down
2 changes: 1 addition & 1 deletion docs/api/modernization/property-updates.md
Expand Up @@ -5,7 +5,6 @@ The Electron team is currently undergoing an initiative to convert separate gett
## Candidates

* `app` module
* `badgeCount`
* `name`
* `dock`
* `badge`
Expand Down Expand Up @@ -58,3 +57,4 @@ The Electron team is currently undergoing an initiative to convert separate gett
* `app` module
* `accessibilitySupport`
* `applicationMenu`
* `badgeCount`
1 change: 1 addition & 0 deletions lib/browser/api/app.ts
Expand Up @@ -91,6 +91,7 @@ app.getFileIcon = deprecate.promisify(app.getFileIcon)

// Property Deprecations
deprecate.fnToProperty(app, 'accessibilitySupportEnabled', '_isAccessibilitySupportEnabled', '_setAccessibilitySupportEnabled')
deprecate.fnToProperty(app, 'badgeCount', '_getBadgeCount', '_setBadgeCount')

// Wrappers for native classes.
const { DownloadItem } = process.electronBinding('download_item')
Expand Down
40 changes: 10 additions & 30 deletions spec-main/api-app-spec.ts
Expand Up @@ -502,51 +502,31 @@ describe('app module', () => {
})
})

describe('app.setBadgeCount', () => {
describe('app.badgeCount', () => {
const platformIsNotSupported =
(process.platform === 'win32') ||
(process.platform === 'linux' && !app.isUnityRunning())
const platformIsSupported = !platformIsNotSupported

const expectedBadgeCount = 42
let returnValue: boolean | null = null

beforeEach(() => { returnValue = app.setBadgeCount(expectedBadgeCount) })

after(() => {
// Remove the badge.
app.setBadgeCount(0)
})
after(() => { app.badgeCount = 0 })

describe('on supported platform', () => {
before(function () {
if (platformIsNotSupported) {
this.skip()
}
})

it('returns true', () => {
expect(returnValue).to.equal(true)
})
it('sets a badge count', function () {
if (platformIsNotSupported) return this.skip()

it('sets a badge count', () => {
expect(app.getBadgeCount()).to.equal(expectedBadgeCount)
app.badgeCount = expectedBadgeCount
expect(app.badgeCount).to.equal(expectedBadgeCount)
})
})

describe('on unsupported platform', () => {
before(function () {
if (platformIsSupported) {
this.skip()
}
})

it('returns false', () => {
expect(returnValue).to.equal(false)
})
it('does not set a badge count', function () {
if (platformIsSupported) return this.skip()

it('does not set a badge count', () => {
expect(app.getBadgeCount()).to.equal(0)
app.badgeCount = 9999
expect(app.badgeCount).to.equal(0)
})
})
})
Expand Down