/* * Jitsi, the OpenSource Java VoIP and Instant Messaging client. * * Copyright @ 2015 Atlassian Pty Ltd * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package net.java.sip.communicator.impl.sysactivity; import net.java.sip.communicator.util.Logger; import org.jitsi.util.*; /** * @author Damian Minkov */ public class SystemActivityNotifications { /** * The <tt>Logger</tt> used by the <tt>SystemActivityNotifications</tt> * class to log debugging information. */ private static final Logger logger = Logger.getLogger(SystemActivityNotifications.class); /** * Computer display has stand by. */ public static final int NOTIFY_DISPLAY_SLEEP = 2; /** * Computer display wakes up after stand by. */ public static final int NOTIFY_DISPLAY_WAKE = 3; /** * A change in dns configuration has occurred. */ public static final int NOTIFY_DNS_CHANGE = 10; /** * All processes have been informed about ending session, now notify for * the actual end session. */ public static final int NOTIFY_ENDSESSION = 12; /** * A change in network configuration has occurred. */ public static final int NOTIFY_NETWORK_CHANGE = 9; /** * Notifies for start of process of ending desktop session, * logoff or shutdown. */ public static final int NOTIFY_QUERY_ENDSESSION = 11; /** * Screen has been locked. */ public static final int NOTIFY_SCREEN_LOCKED = 7; /** * Screen has been unlocked. */ public static final int NOTIFY_SCREEN_UNLOCKED = 8; /** * Screensaver has been started. */ public static final int NOTIFY_SCREENSAVER_START = 4; /** * Screensaver has been stopped. */ public static final int NOTIFY_SCREENSAVER_STOP = 6; /** * Screensaver will stop. */ public static final int NOTIFY_SCREENSAVER_WILL_STOP = 5; /** * Notify that computers is going to sleep. */ public static final int NOTIFY_SLEEP = 0; /** * Notify that computer is wakeing up after stand by. */ public static final int NOTIFY_WAKE = 1; /** * The native instance. */ private static long ptr; /** * Init native library. */ static { try { // Don't load native library on Android to prevent the exception if(!org.jitsi.util.OSUtils.IS_ANDROID) { JNIUtils.loadLibrary("sysactivitynotifications", SystemActivityNotifications.class); ptr = allocAndInit(); if (ptr == -1) ptr = 0; } } catch (Throwable t) { if (t instanceof ThreadDeath) throw (ThreadDeath) t; else logger.warn("Failed to initialize native counterpart", t); } } /** * Allocate native resources and gets a pointer. * * @return */ private static native long allocAndInit(); /** * Returns the when was last input in milliseconds. The time when there was * any activity on the computer. * * @return the last input in milliseconds */ public static native long getLastInput(); /** * Whether native library is loaded. * * @return whether native library is loaded. */ public static boolean isLoaded() { return (ptr != 0); } /** * Release native resources. * * @param ptr */ private static native void release(long ptr); /** * Sets notifier delegate. * * @param ptr * @param delegate */ public static native void setDelegate( long ptr, NotificationsDelegate delegate); /** * Sets delegate. * * @param delegate */ public static void setDelegate(NotificationsDelegate delegate) { if (ptr != 0) setDelegate(ptr, delegate); } /** * Start. */ public static void start() { if (ptr != 0) start(ptr); } /** * Start processing. * * @param ptr */ private static native void start(long ptr); /** * Stop. */ public static void stop() { if (ptr != 0) { stop(ptr); release(ptr); ptr = 0; } } /** * Stop processing. * * @param ptr */ private static native void stop(long ptr); /** * Delegate class to be notified about changes. */ public interface NotificationsDelegate { /** * Callback method when receiving notifications. * * @param type */ public void notify(int type); /** * Callback method when receiving special network notifications. * * @param family family of network change (ipv6, ipv4) * @param luidIndex unique index of interface * @param name name of the interface * @param type of the interface * @param connected whether interface is connected or not. */ public void notifyNetworkChange( int family, long luidIndex, String name, long type, boolean connected); } }