Working with the Dock and the System tray in AIR
Giving a SystemTray menu or a Dock menu option to your user can be proved a very many option.
For Windows its known as a SystemTray and in Mac it’s known as a Dock menu.With a built in support for NativeApplication.nativeApplication.icon in ADOBE Air, it becomes very easy to add a taskbar support.
NativeApplication.nativeApplication.icon object can be either type of DockIcon or SystemTrayIcon depending on the operating system.
Following is a peace of code with a class name SustemTray, which first checks whether the native Operating System supports SystemTray or Dock and add appropriate event listeners which can be bubbled back to the application.
package com.chatApplication.view.components.util
{
import flash.desktop.DockIcon;
import flash.desktop.NativeApplication;
import flash.desktop.SystemTrayIcon;
import flash.display.Loader;
import flash.display.NativeMenu;
import flash.display.NativeMenuItem;
import flash.display.Sprite;
import flash.events.Event;
import flash.net.URLRequest;
import mx.core.Application;
public class SystemTrayApp extends Sprite
{
public function SystemTrayApp()
{
}
public function loadSystemTray():void
{
NativeApplication.nativeApplication.autoExit = false;
var icon:Loader = new Loader();
var iconMenu:NativeMenu = new NativeMenu();
var openCommand : NativeMenuItem = iconMenu.addItem(new NativeMenuItem("Open Your Application"));
openCommand.addEventListener(Event.SELECT, function(event:Event):void
{
dispatchEvent(new SystemTrayAppEvent(SystemTrayAppEvent.SHOW_GROUP_CHAT_VIEW));
});
var signOutCommand : NativeMenuItem = iconMenu.addItem(new NativeMenuItem("Sign Out"));
signOutCommand.addEventListener(Event.SELECT, function(event:Event):void
{
iconMenu.removeItem(openCommand);
iconMenu.removeItem(signOutCommand);
dispatchEvent(new SystemTrayAppEvent(SystemTrayAppEvent.SIGN_OUT));
});
var exitCommand:NativeMenuItem = iconMenu.addItem(new NativeMenuItem("Quite"));
exitCommand.addEventListener(Event.SELECT, function(event:Event):void
{
NativeApplication.nativeApplication.icon.bitmaps = [];
NativeApplication.nativeApplication.exit();
});
if (NativeApplication.supportsSystemTrayIcon)
{
NativeApplication.nativeApplication.autoExit = false;
icon.contentLoaderInfo.addEventListener(Event.COMPLETE, iconLoadComplete);
icon.load(new URLRequest("assets/images/icon.png"));
var systray:SystemTrayIcon = NativeApplication.nativeApplication.icon as SystemTrayIcon;
systray.addEventListener(ScreenMouseEvent.CLICK,onClickMenuIconHandler);
systray.tooltip = "Your Application Name";
systray.menu = iconMenu;
}
//for Mac, a larger icon is required which can be replaced in below code.
if (NativeApplication.supportsDockIcon)
{
icon.contentLoaderInfo.addEventListener(Event.COMPLETE,iconLoadComplete);
icon.load(new URLRequest("assets/images/icon.png"));
var dock:DockIcon = NativeApplication.nativeApplication.icon as DockIcon;
dock.menu = iconMenu;
}
}
private function iconLoadComplete (event:Event):void
{
NativeApplication.nativeApplication.icon.bitmaps = [event.target.content.bitmapData];
trace( NativeApplication.nativeApplication.icon.width + " ==== " + NativeApplication.nativeApplication.icon.height );
}
private function onClickMenuIconHandler (event:ScreenMouseEvent):void
{
dispatchEvent(new SystemTrayAppEvent(SystemTrayAppEvent.SHOW_GROUP_CHAT_VIEW));
}
}
That’s it. Call the public method SystemTrayApp.loadSystemTray() to create the Dock/SystemTray for you application.